perm filename PROSE.PAS[TMP,HE] blob sn#637211 filedate 1982-01-26 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00016 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	(*[b+]----------------------------------------------------------------
C00007 00003	program prose(input, output, infile, outfile)
C00014 00004	  type
C00021 00005	  var
C00031 00006	(**----------------------*
C00039 00007	    procedure takequal(var next: cmdindex)
C00049 00008	(*  ----------------*
C00064 00009	(*  -------*
C00086 00010	  (* ------------------------------------------------------------------ *)
C00092 00011	  (* ------------------------------------------------------------------ *)
C00139 00012	  (* --------------------------------------------- *)
C00149 00013	  (* --------------------------------------------- *)
C00163 00014	  (* --------------------------------------------- *)
C00171 00015	  (* --------------------------------------------- *)
C00189 00016	  (* --------------------------------------------- *)
C00191 ENDMK
C⊗;
(*[b+]----------------------------------------------------------------
          Prose - a text formatting tool.
          J. P. Strait.      77/06/05.
          copyright (c) 1977, 1979.
          All rights reserved.



          Prose is a formatting program, designed for document
preparation.  It is written in pascal and is implemented in such
a way as to encourage transportation between different hardware and
different operating systems.

          Prose was developed in the spring of 1977, and draws
very heavily from typeset, a formatting program written by Michael
Huck.  typeset, written in compass (the CDC 6000/Cyber series
assembly language), was in turn based on edit-runoff.  Thus prose
is one of the many descendants of runoff.

          Complete external documentation is available, and it is
maintained in prose form.  Refer to that for an overview of prose.

          In striving for portability, the decision was made to
represent text internally in ascii.  This means that to transport
this program, one input routine and one output routine must be
rewritten to translate between the host character set and ascii.
Other system dependant details such as the date and clock functions
must be considered for transportation of this program.  All areas
which need attention when converting this program from the CDC 6000
version are marked with null comments in columns 69-72.

          This version of Prose was converted to use the ascii character
set and to run on the Univac 1110 and the Perkin Elmer 32 bit series
of computers.  There is no attempt to retain the CDC code for
reconversion, and changed parts of the program are not marked.  The
null comments mentioned above have been removed.

          ASCII version:
          M. S. Ball
          Code 632
          Naval Ocean Systems Center
          9 January 1979

Version 1.0-2, created on 05/05/81 at 16:07:48
--------------------------------------------------------------------*)
program prose(input, output, infile, outfile);

  const

    infinity = 1000; (* largest number + 1 *)
    maintitle = true; (* title indicator *)
    maxinxlength = 60; (* max length of index entries *)
    maxiwidth = 132; (* maximun input width *)
    maxkeep = 9; (* maximum keep value *)
    maxmargin = 132; (* largest right margin *)
    maxnumberwidth = 20; (* max number of digits in a number *)
    maxowidth = 200; (* maximum output width *)
    maxpage = 999; (* maximum page number *)
    maxshift = 50; (* max output shift *)
    maxskip = 100; (* maximum skip count *)
    maxsplit = 20; (* maximum number of split points *)
    maxstringlength = 154; (* max length of text lines *)
    min = 10; (* general reasonable mimimum *)
    subtitle = false; (* subtitle indicator *)
    tabinterval = 8; (*tab interval in input text*)

    (* certain constraints are applied to the min/max values,    *)
    (* to eliminate array overflow checks and other error checks:*)
    (*                                                           *)
    (*      maxstringlength >= maxiwidth + maxnumberwidth + 2    *)
    (*      maxmargin       <= maxstringlength - 2               *)
    (*      (everything)    <  infinity                          *)
    (*      (everything)    >  (reasonable)                      *)

    (*[s=4] the ascii character set:  *)

    nul = 0;          blank = 32;       at = 64;          grav = 96;
    soh = 1;          exclaim = 33;     a = 65;           smalla = 97;
    stx = 2;          dquote = 34;      b = 66;           smallb = 98;
    etx = 3;          hash = 35;        c = 67;           smallc = 99;
    eot = 4;          dollar = 36;      d = 68;           smalld = 100;
    enq = 5;          percent = 37;     e = 69;           smalle = 101;
    ack = 6;          ampersand = 38;   f = 70;           smallf = 102;
    bel = 7;          squote = 39;      g = 71;           smallg = 103;
    bs = 8;           lparen = 40;      h = 72;           smallh = 104;
    ht = 9;           rparen = 41;      i = 73;           smalli = 105;
    lf = 10;          star = 42;        j = 74;           smallj = 106;
    vt = 11;          plus = 43;        k = 75;           smallk = 107;
    ff = 12;          comma = 44;       l = 76;           smalll = 108;
    cr = 13;          minus = 45;       m = 77;           smallm = 109;
    so = 14;          period = 46;      n = 78;           smalln = 110;
    si = 15;          slash = 47;       o = 79;           smallo = 111;
    dle = 16;         zero = 48;        p = 80;           smallp = 112;
    dc1 = 17;         one = 49;         q = 81;           smallq = 113;
    dc2 = 18;         two = 50;         r = 82;           smallr = 114;
    dc3 = 19;         three = 51;       s = 83;           smalls = 115;
    dc4 = 20;         four = 52;        t = 84;           smallt = 116;
    nak = 21;         five = 53;        u = 85;           smallu = 117;
    syn = 22;         six = 54;         v = 86;           smallv = 118;
    etb = 23;         seven = 55;       w = 87;           smallw = 119;
    can = 24;         eight = 56;       x = 88;           smallx = 120;
    em = 25;          nine = 57;        y = 89;           smally = 121;
    sub = 26;         colon = 58;       z = 90;           smallz = 122;
    esc = 27;         semicolon = 59;   lbracket = 91;    lbrace = 123;
    fs = 28;          less = 60;        backslash = 92;   verticalbar = 124;
    gs = 29;          equal = 61;       rbracket = 93;    rbrace = 125;
    rs = 30;          greater = 62;     caret = 94;       tilde = 126;
    us = 31;          question = 63;    underscore = 95;  del = 127;
    (*[s=1]*)

    filenamelength = 60; (*max length of a file name for your system*)

    rt11 = false; (*set true only if running on RT-11 system*)
    rsts = false; (*set true only if running on RSTS system*)
    rsx = true; (*set true only if running on RSX system*)

    rsxprompt = 'PRS>'; (*prompt to use if on RSX system*)

    cmdlinelength = 132; (* length of a command line *)

  type

    alfa = packed array [1..8] of char;

    ascii = 0..127;

    asciix = 0..255; (* the type ascii is extended for internal use *)
    (* in the following manner:                     *)
    (*                                              *)
    (* c + 200b     indicates that c is underlined. *)

    charclass =
      packed record
        digit: boolean; (* zero..nine *)
        formchar: boolean; (* c,d,e,l,p,s,t,w,hash,lbracket,rbracket,
                            slash,dquote,squote,rparen,blank *)
        inputchar: boolean; (* b,c,d,h,k,u,w,blank *)
        letter: boolean; (* a..z,smalla..smallz *)
        marginchar: boolean; (* k,l,r,blank *)
        numform: boolean; (* n,smalln,l,small,r,smallr,blank *)
        optionchar: boolean; (* e,f,j,k,l,m,p,r,s,u,blank *)
        outputchar: boolean; (* e,p,s,u,w,blank *)
        paragraphchar: boolean; (* c,i,k,n,p,u,blank *)
        plusorminus: boolean; (* plus,minus *)
        quote: boolean; (* dquote,squote *)
        sortinxchar: boolean; (* l,m,p,r,s,blank *)
      end;

    ch3 = packed array [1..3] of asciix;

    ch10 = packed array [1..10] of asciix;

    direct = (bre, (* break *)
              com, (* comment *)
              cou, (* count *)
              frm, (* form *)
              ind, (* indent *)
              inp, (* input *)
              inx, (* inx *)
              lit, (* literal *)
              mar, (* margin *)
              opt, (* option *)
              out, (* output *)
              pag, (* page *)
              par, (* paragraph *)
              res, (* reset *)
              sel, (* select *)
              ski, (* skip *)
              sor, (* sortindex *)
              sbt, (* subtitle *)
              ttl, (* title *)
              und, (* undent *)
              weo, (* weos *)
              exc, (* except (used by reset) *)
              ill, (* illegal *)

    (* the following are not directives, but it is convenient *)
    (* to include them in this table.                         *)
              ast, (* ascii terminal *)
              lpt, (* line printer *)
              vtr, (* video terminal *)
              xer, (* Xerox 1650 printer *)
              xep, (* Xerox 1650 with proportional spacing *)
              ilt); (* illegal *)

    dirset = set of direct;

    inputsettings =
      packed record
        defined: boolean;
        b, c, d, h, u: ascii;
        w: 0..infinity
      end;

    pinxentry = ↑inxentry;
    inxentry =
      record
        x: packed array [1..maxinxlength] of asciix;
        xl: integer; (* length of entry *)
        xp: integer; (* page number *)
        next: pinxentry
      end;

    marginsettings =
      packed record
        defined: boolean;
        l, r: 0..infinity
      end;

    numberform = (numeric, upperalpha, loweralpha, upperroman, lowerroman,
                  nonumbering);

    optionsettings =
      packed record
        defined: boolean;
        e, f, l, m, p, r, u: boolean;
        j, s: 0..infinity
      end;

    paragraphsettings =
      packed record
        defined: boolean;
        c: 0..infinity;
        f: ascii;
        i: - infinity..infinity;
        n: numberform;
        p: 0..infinity;
        s: 0..infinity;
        w: 0..infinity
      end;

    remember = 0..maxkeep;

    splitpoint =
      packed record
        point: 0..infinity; (* position of split point within word *)
        inpnt: 0..infinity; (* position of split point within inline *)
        hypnt: boolean (* split point represents possible hyphen *)
      end;

    pstring = packed array [1..maxstringlength] of asciix;

    string = array [1..maxstringlength] of (* str[1].c always = '' *)
        packed record
          c: asciix; (* character *)
          nbl: 0..infinity (* if c='', number of blanks, else charwidth *)
        end;

    filename = packed array [1..filenamelength] of char;

    cmdindex = 1..cmdlinelength; (*pointer to chars in command line*)

    cmdbuffer = packed array [cmdindex] of char; (*command line buffer*)

    errorname = (unknown, twofilenames, badfile, nofile, nooutputfile,
                 noinput, manyouts);

  var

    badjustify: integer; (* j option *)
    blankcount: integer; (* accumulated blank output line counter *)
    blankline: boolean; (* blank output line indicator *)
    casech: ascii; (* c input *)
    class: array [ascii] of charclass; (* character classifications *)
    ch: char; (*next character on command line*)
    charwidth: integer; (* char width in printer units *)
    dirch: ascii; (* d input *)
    directline: boolean; (* input line is a directive *)
    directs: array [direct] of ch3; (* directive names *)
    eject: boolean; (* e output *)
    endofinput: boolean; (* internal eof indicator *)
    ensure2: boolean; (* p option *)
    errorn1: integer; (* error in number *)
    errorn2: integer; (* error in number *)
    errors: boolean; (* errors in this prose run *)
    errorsmall: boolean; (* number is too small *)
    error1: asciix; (* error text *)
    error10: ch10; (* error text *)
    eol: boolean; (* internal eoln indicator *)
    explicitblank: ascii; (* b input *)
    filecount: 0..63; (*input file index on command line (1110)*)
    fill: boolean; (* f option *)
    firsterror: boolean; (* first error on this line *)
    form: pstring; (* form buffer *)
    formindex: integer; (* current form position *)
    formlength: integer; (* form length *)
    formnext: pstring; (* form for next page *)
    formnlength: integer; (* length of formnext *)
    gaps: array [0..maxstringlength] of 1..maxstringlength;
    (* pointers to word gaps *)
    hyphen: ascii; (* h option *)
    inchar: asciix; (* current input character *)
    incolumn: integer; (* current input column *)
    infile: text; (*input file, attached as needed*)
    inlength: integer; (* length of current input line *)
    inline: string; (* current input line *)
    inwidth: integer; (* w input *)
    inxbase: pinxentry; (* base of index entry list *)
    inxlast: pinxentry; (* last index entry *)
    keepinp: integer; (* current input keep buffer *)
    keepmar: integer; (* current margin keep buffer *)
    keepopt: integer; (* current option keep buffer *)
    keeppar: integer; (* current paragraph keep buffer *)
    leftjustify: boolean; (* l option *)
    leftmargin: integer; (* l margin *)
    linecount: integer; (* output line count (within page) *)
    linenumber: integer; (* input line count (for error messes) *)
    linenums: boolean; (* line numbers exist on input file *)
    lockeddent: integer; (* i/u paragraph *)
    lowercase: boolean; (* for upper to lower case conversion *)
    lowerdir: boolean; (* lowercase flag in directives *)
    months: array [1..12] of ch3; (* month names *)
    moreonleft: boolean; (* indicator for justifying *)
    multipleblanks: boolean; (* m option *)
    nblanks: integer; (* blank count on input *)
    nchars: integer; (* width of output line *)
    newinline: boolean; (* begin input line indicator *)
    newoutline: boolean; (* begin output line indicator *)
    newparagraph: boolean; (* begin paragraph indicator *)
    ngaps: integer; (* number of word gaps *)
    nicedate: ch10; (* date as yy mmm dd *)
    nsplits: integer; (* number of split points in word *)
    nwords: integer; (* number of words in output line *)
    numbering: numberform; (* n paragraph *)
    numberwidth: integer; (* n paragraph *)
    outfile: text; (*output file*)
    outlength: integer; (* length of output line *)
    outline: string; (* output line *)
    outwidth: integer; (* w output *)
    pagenumber: integer; (* current page number *)
    parachar: ascii; (* p paragraph *)
    paracount: integer; (* paragraph counter *)
    parapage: integer; (* p paragraph *)
    paraskip: integer; (* s paragraph *)
    pause: boolean; (* p output *)
    printerrors: boolean; (* e option *)
    rawclock: ch10; (* clock time as hh:mm:ss *)
    rawdate: ch10; (* date as yy/mm/dd *)
    rightjustify: boolean; (* r option *)
    rightmargin: integer; (* r margin *)
    saveinp: array [remember] of inputsettings; (* input stack *)
    savemar: array [remember] of marginsettings; (* margin stack *)
    saveopt: array [remember] of optionsettings; (* option stack *)
    savepar: array [remember] of paragraphsettings; (* paragraph stack *)
    selection: packed array [0..maxpage] of boolean; (*select directive
                                                      setting*)
    shift: integer; (* s output *)
    shiftup: boolean; (* u option *)
    space: integer; (* s option *)
    splits: array [1..maxsplit] of splitpoint; (* split points within word *)
    terminaltype: direct; (* output terminal type *)
    texts: string; (* for building form specifications *)
    textindex: integer; (* current text position *)
    textlength: integer; (* length of text *)
    title: array [boolean] of pstring; (* title and subtitle buffers *)
    titlelength: array [boolean] of integer; (* title and subtitle lengths *)
    underavail: boolean; (* u output *)
    underchar: ascii; (* u input *)
    underlining: boolean; (* underlining flag *)
    underdir: boolean; (* underlining flag in directives *)
    wallclock: ch10; (* clock time as hh:mm am *)
    word: string; (* current word *)
    wordlength: integer; (* length of word *)

    day, month, year, hrs, mins, secs: integer; (*Dec time interface vars*)

    cmdline: cmdbuffer; (*actual command line read*)
    cmdlength: cmdindex; (*length of line being read in*)
    fieldsfound: 0..cmdlinelength; (*number of fields found by csi*)
    outspeced: boolean; (* true if an output file specified with "=" *)
    firstfound: boolean; (*true if the first field was found*)
    currentfile: 0..maxint; (*current input file*)


  procedure timestamp(var day, month, year: integer; (*date*)
                      var hour, minute, second: integer (*time*) );
  (*fix*)
(*  external;*)
  begin day:=1; month:=1;year:=82;
	hour:=12;minute:=30;second:=00;
  end;


  procedure error(n: integer);
    forward;


  procedure validate(var num: integer;
                     min, max, err: integer);
    forward;


  procedure reinitialize(which: dirset);
    forward;

(**----------------------*
 | Dec System Interface |
 *----------------------**)

(*Command String Interpreter,  parses the command string
*)


  procedure getline(var line: cmdbuffer; (*resulting command line*)
                    var length: cmdindex (*resulting command length*) );

(* RT 11 procedure to get a command line no matter what its source.
*)

(*FIX*)    begin writeln('Oh no!  Getline called!'); end;


  procedure exitst(status: integer (*status for error on exit*) );

(* Entrance to the library to exit with a status set to "status".
*)
(*FIX*) BEGIN WRITELN('EXITST CALLED.') END;


  procedure csierror(which: errorname; (*which error*)
                     startind: cmdindex; (*start of command to print*)
                     endind: cmdindex (*end of command to print*) );

(* Print an error message and exit from the program with a fatal
  error status.  The offending portion of the command line is printed
  before the error message.
*)

    var
      i: integer; (*induction var*)


    begin
      for i := startind to endind do write(cmdline[i]);
      if startind <= endind then writeln;
      case which of
        unknown: writeln('Unknown qualifier.');
        twofilenames: writeln('Two file names in one field.');
        badfile: writeln('Bad file name syntax.');
        nofile: writeln('No file in field.');
        nooutputfile: writeln('Output requested but no file provided.');
        noinput: writeln('No input file provided.');
        manyouts: writeln('More than one output file specification.');
        end;
      exitst(4); (*magic number for fatal error*)
    end; (*error*)


  procedure skipbalancedstring(startindex: cmdindex;
                               var next: cmdindex);

    var
      endchar: char; (*bracket which terminates string*)


    begin (*Skip a string balanced with respect to parentheses and quoted
           strings*)
      if cmdline[next] in ['(', '[', '<'] then
        begin
        if cmdline[next] = '(' then endchar := ')'
        else if cmdline[next] = '<' then endchar := '>'
        else endchar := ']';
        next := next + 1;
        while (cmdline[next] <> endchar) and (next <> cmdlength) do
          skipbalancedstring(startindex, next);
        end
      else if cmdline[next] = '"' then
        repeat
          next := next + 1
        until (cmdline[next] = '"') or (next = cmdlength);
      if next < cmdlength then next := next + 1
      else csierror(badfile, startindex, cmdlength);
    end; (*skipbalancedstring*)


  procedure csi;

(* Gets a command line and parses it.

  The procedure "getfilename",
  below, is used to get file names after csi has been called.

  The input line is assumed to be of the form:

        [ [ output ] "=" ] input [* "," input *]

  Qualifiers can be attached to any file, and all qualifiers are
  assumed to have the same effect no matter which file it is
  attached to.
*)

    var
      next: cmdindex; (*next char in command string*)

      filefound: boolean; (*true if file found in this field*)
      filestart: cmdindex; (*start of last file name found*)
      manyfound: boolean; (*more than 1 field found*)
      emptyfile: boolean; (*empty file name found, possibly an error*)
      emptystart: cmdindex; (*start of empty file field*)
      emptyend: cmdindex; (*end of empty file field*)
      lastfield: cmdindex; (*end of last field scanned*)


    procedure getcmdline;

(* Read the command line into core.
*)

      var
        i: integer; (*induction var*)


      begin
        if rsx then
          begin
          if input↑ <> ' ' then
            begin
            repeat
              get(input)
            until (input↑ = ' ');
            while not eoln and (input↑ = ' ') do get(input);
            end;
          if input↑ = ' ' then write(rsxprompt);
          if eoln then readln;
          end
        else if rsts then write('*');
        if rt11 then
          begin
          getline(cmdline, cmdlength);
          cmdlength := cmdlength + 1;
          end
        else
          begin
          cmdlength := 1;
          while not eoln do
            begin
            if cmdlength < cmdlinelength - 2 then
              begin
              cmdline[cmdlength] := input↑;
              cmdlength := cmdlength + 1;
              end;
            get(input);
            end;
          end;
        for i := cmdlength to cmdlinelength do cmdline[i] := ' ';
      end; (*getcmdline*)
    procedure takequal(var next: cmdindex);

(* Parse and look up a qualifier, updating "next" to point to the next
  character in the command line.
*)

      var
        startingindex: cmdindex; (*start of qualifier, for error printout*)


      begin
        repeat
          next := next + 1;
        until (cmdline[next] <> ' ') or (next = cmdlength);
        startingindex := next;
        while (cmdline[next]='a') or (cmdline[next]='b') or 
		(cmdline[next] in ['A','B']) or
		(cmdline[next] in ['0'..'9']) do
          next := next + 1;
        csierror(unknown, startingindex, next - 1);
      end; (*takequal*)


    procedure takefilename(var next: cmdindex);

(* Parse a filename.  The only data which is taken here is the existance of the
  file.  This routine makes sure that there is only one file specified
  per field.
*)

      var
        startindex: cmdindex; (*start of this field*)


      begin
        startindex := next;
        while (next < cmdlength) and
              not (cmdline[next] in [',', '/', '=', ' ']) do
          skipbalancedstring(startindex, next);
        if filefound then csierror(twofilenames, filestart, next)
        else
          begin
          filefound := true;
          filestart := startindex;
          end;
      end; (*takefilename*)


    procedure endfield(var next: cmdindex (*next character*) );

(* Terminate a field, making several checks.
*)


      begin
        fieldsfound := fieldsfound + 1;
        if (fieldsfound = 1) and filefound then firstfound := true
        else if filefound then manyfound := true;
        if not filefound then
          if outspeced then csierror(nofile, lastfield, next)
          else if not emptyfile then
            begin
            emptyfile := true;
            emptystart := lastfield;
            emptyend := next;
            end;
        if cmdline[next] = '=' then
          if fieldsfound > 1 then csierror(manyouts, 1, next)
          else
            begin
            fieldsfound := 1;
            outspeced := true;
            end;
        lastfield := next;
        if next < cmdlength then next := next + 1;
        filefound := false;
      end;


    procedure checkconsistancy;

(* Check the command line and qualifiers for consistancy.
  This should also set any defaults.
*)


      begin
        if not ((outspeced and manyfound) or firstfound) then
          csierror(noinput, 2, 1);
        if not outspeced and emptyfile then
          csierror(nofile, emptystart, emptyend);
      end;


    begin (*csi*)
      getcmdline;
      next := 1;
      fieldsfound := 0;
      lastfield := 1;
      filefound := false;
      outspeced := false;
      emptyfile := false;
      firstfound := false;
      manyfound := false;

      repeat
        while (next < cmdlength) and (cmdline[next] = ' ') do
          next := next + 1;
        if cmdline[next] in ['=',',','/',' '] then
	  case cmdline[next] of
            '=', ',': endfield(next);
            '/': takequal(next);
            ' ': ;
            end
        ELSE takefilename(next);
      until next = cmdlength;
      endfield(next);
      if not outspeced then fieldsfound := fieldsfound + 1; (*fake field*)
      checkconsistancy;
    end; (*csi*)


procedure getfilename(which: Integer; (*file desired*)
                      var Result: filename; (*resulting file name*)
                      var exists: Boolean (*true if file exists*) );

(* Procedure to get file names from the input command line.

  The desired file name is specified by an index with the following
  possible values.

  1     Output file
  2..n  Input files
*)

  var
    Next: cmdindex; (*search variable*)
    fieldstart: 0..cmdlinelength; (*start of the desired field*)
    i: Integer; (*induction var for transfer*)
    delims: set of Char; (*ending fields*)
    stripdevice: boolean; (*strip off device field*)
    scanning: boolean; (*used in stripping device field*)


  begin
    if (which <= 0) or (which > fieldsfound) or outspeced and (((which = 0) or
       (which = 1)) and not firstfound) then
      exists := false
    else
      begin (*we have a file to find*)
      delims := [',', ' ', '/', '='];
      stripdevice := false;
      if (which = 1) and not outspeced then
        begin
        delims := delims + ['.'];
        which := fieldsfound;
        stripdevice := true;
        end;
      Next := 1;
      if which > 1 then
        begin
        if outspeced then
          begin
          repeat
            skipbalancedstring(Next, Next);
          until cmdline[Next] = '=';
          Next := Next + 1;
          end;
        which := which - 1;
        end;
      for i := 1 to which - 1 do
        begin
        while not (cmdline[Next] in [',', '=']) do
          skipbalancedstring(Next, Next);
        Next := Next + 1;
        end;
      while cmdline[Next] = ' ' do Next := Next + 1;
      fieldstart := Next;
      repeat
        skipbalancedstring(Next, Next);
      until cmdline[Next] in delims;
      if stripdevice then
        begin
        fieldstart := next - 1;
        scanning := true;
        repeat
          scanning := (cmdline[fieldstart] in ['A'..'Z']) or
		      ((ord(cmdline[fieldstart]) >= ord('a')) and
		       (ord(cmdline[fieldstart]) <= ord('z'))) or
		      (cmdline[fieldstart] in ['0'..'9']) or
		      (cmdline[fieldstart]='$') or
		      (cmdline[fieldstart]='.');
          if scanning then fieldstart := fieldstart - 1;
        until (fieldstart = 0) or not scanning;
        fieldstart := fieldstart + 1;
        end;
      for i := fieldstart to Next - 1 do
        Result[i - fieldstart + 1] := cmdline[i];
      for i := Next - fieldstart + 1 to filenamelength do Result[i] := ' ';
      exists := true;
      end;
  end; (*getfilename*)


  procedure getnextfile(var done: boolean);

    var
      thisfile: filename;
      exists: boolean;


    begin
      currentfile := currentfile + 1;
      getfilename(currentfile, thisfile, exists);
      if exists then
        if rsx then reset(infile, thisfile, 'sy:.prs')
        else reset(infile, thisfile, '.prs');
      done := not exists;
    end; (*get_next_file*)
(*  ----------------*
 *$p----------------*	FIX
 | General Utility |
 *-----------------**)

(*      asciichar - convert literal host character to ascii.
   *)


  function asciichar(ch: char): ascii;


    begin (* asciichar *)
      asciichar := ord(ch);
    end (* asciichar *) ;

(*       upper - convert alphabetic characters to upper case.
  *)


  function upper(ch: asciix): asciix;


    begin (* upper *)
      if class[ch mod 128].letter then
        if ch >= smalla then upper := ch - 32
        else upper := ch
      else upper := ch
    end (* upper *) ;

(*     lower - convert to lower case if alphabetic.
  *)


  function lower(ch: asciix): asciix;


    begin (* lower *)
      if class[ch mod 128].letter then
        if ch <= z then lower := ch + 32
        else lower := ch
      else lower := ch
    end (* lower *) ;

(*     numform - determine the numeric form.
*
*     param ch = n, smalln, l, smalll, r, smallr.
*           err = error if bad numeric form.
*)


  function numform(ch: ascii;
                   err: integer): numberform;


    begin (* numform *)
      if class[ch].numform then
        case ch of
          n, smalln: numform := numeric;
          l: numform := upperalpha;
          smalll: numform := loweralpha;
          r: numform := upperroman;
          smallr: numform := lowerroman;
          blank: numform := nonumbering
          end
      else
        begin
        error1 := ch;
        error(err);
        numform := numeric
        end
    end (* numform *) ;

(*       convertnumber - convert number from binary to text.
*
*       param str - output string.
*             len - length of output string.
*             num - number to convert.
*             fw  - field width of number.
*             form- form of conversion.
*)


  procedure convertnumber(var str: string;
                          var len: integer;
                          num, fw: integer;
                          form: numberform);

    var
      digit: array [1..maxnumberwidth] of ascii; (* digit array *)
      nextnum: integer; (* for decomposition *)
      x1, x2: integer; (* loop indeces *)

(*       send1 - send one digit.
*
*       param dig - digit to send.
*)


    procedure send1(dig: ascii);


      begin (* send1 *)
        if x1 < maxnumberwidth then
          begin
          x1 := x1 + 1;
          digit[x1] := dig
          end
      end (* send1 *) ;


    begin (* convertnumber *)
      x1 := 0;
      case form of
        numeric:
          repeat
            nextnum := num div 10;
            send1(num - 10 * nextnum + zero);
            num := nextnum
          until num = 0;
        loweralpha, upperalpha:
          repeat
            num := num - 1;
            nextnum := num div 26;
            send1(num - 26 * nextnum + a);
            num := nextnum
          until num = 0;
        lowerroman, upperroman:
          begin
          while num >= 1000 do
            begin
            send1(m);
            num := num - 1000
            end;
          if num >= 900 then
            begin
            send1(d);
            send1(m);
            num := num - 900
            end
          else if num >= 500 then
            begin
            send1(d);
            num := num - 500
            end
          else if num >= 400 then
            begin
            send1(c);
            send1(d);
            num := num - 400
            end;
          while num >= 100 do
            begin
            send1(c);
            num := num - 100
            end;
          if num >= 90 then
            begin
            send1(x);
            send1(c);
            num := num - 90
            end
          else if num >= 50 then
            begin
            send1(1);
            num := num - 50
            end
          else if num >= 40 then
            begin
            send1(x);
            send1(1);
            num := num - 40
            end;
          while num >= 10 do
            begin
            send1(x);
            num := num - 10
            end;
          if num >= 9 then
            begin
            send1(i);
            send1(x);
            num := num - 9
            end
          else if num >= 5 then
            begin
            send1(v);
            num := num - 5
            end
          else if num >= 4 then
            begin
            send1(1);
            send1(v);
            num := num - 4
            end;
          while num >= 1 do
            begin
            send1(i);
            num := num - 1
            end
          end;
        nonumbering:
        end;
      if len + fw > maxstringlength then fw := maxstringlength - len;
      for x2 := x1 + 1 to fw do
        begin
        len := len + 1;
        with str[len] do
          begin
          c := blank;
          nbl := charwidth
          end
        end;
      if len + x1 > maxstringlength then x1 := maxstringlength - len;
      if form in [numeric, loweralpha, upperalpha] then
        for x2 := x1 downto 1 do
          begin
          len := len + 1;
          with str[len] do
            begin
            if form = loweralpha then c := digit[x2] + 32
            else c := digit[x2];

            nbl := charwidth
            end
          end
      else
        for x2 := 1 to x1 do
          begin
          len := len + 1;
          with str[len] do
            begin
            if form = lowerroman then c := digit[x2] + 32
            else c := digit[x2];
            nbl := charwidth
            end
          end
    end (* convertnumber *) ;

(*       shiftstring - convert string to upper/lower case,
*                     considering stuttering and case shift.
*)


  procedure shiftstring(var str: string;
                        var len: integer;
                        var lcs: boolean);

    var
      intch: ascii; (* internal character *)
      oldch: ascii; (* previous internal character *)
      oldoldch: ascii; (* previous previous character *)
      x1, x2: integer; (* loop indices *)


    begin (* shiftstring *)
      oldch := blank;
      oldoldch := blank;
      x1 := 0;
      x2 := 1;
      if len >= 1 then
        if str[1].c = parachar then
          begin
          x1 := 1;
          x2 := 2
          end;
      for x2 := x2 to len do
        begin
        intch := lower(str[x2].c);
        if intch = casech then lcs := not lcs
        else if intch = oldch then
          if (oldoldch = blank) and class[intch].letter then
            begin
            str[x1].c := upper(intch);
            lcs := true
            end
          else
            begin
            x1 := x1 + 1;
            if lcs then str[x1].c := intch
            else str[x1].c := upper(intch)
            end
        else
          begin
          x1 := x1 + 1;
          if lcs then str[x1].c := intch
          else str[x1].c := upper(intch)
          end;
        oldoldch := oldch;
        oldch := intch
        end;
      len := x1
    end (* shiftstring *) ;

(*        understring - set underlined characters in string,
*                      considering underline character.
*                      this is also done in readpstring.
*)


  procedure understring(var str: string;
                        var len: integer;
                        var uln: boolean);

    var
      intch: ascii; (* internal character *)
      x1, x2: integer; (* loop indices *)


    begin (* understring *)
      x1 := 0;
      for x2 := 1 to len do
        begin
        intch := str[x2].c;
        if intch = underchar then uln := not uln
        else
          begin
          x1 := x1 + 1;
          if (intch <> blank) and uln then str[x1].c := intch + 128
          else str[x1].c := intch
          end
        end;
      if x1 > 0 then while (str[x1].c = blank) and (x1 > 1) do x1 := x1 - 1;
      if x1 = 1 then
        if str[x1].c = blank then x1 := 0;
      len := x1
    end (* understring *) ;

(*      justify - left justify, right justify, and/or center
*                an output line.
*)


  procedure justify;

    const
      floor = 0.0; (* makes trunc do floor *)
      cieling = 0.9999; (* makes trunc do cieling *)

    var
      fc: real; (* to select floor or cieling *)
      ib: integer; (* insert blanks *)
      nb: integer; (* number blanks (total) *)
      ng: integer; (* number gaps (actual) *)


    begin (* justify *)
      ng := ngaps - 1;
      nb := (rightmargin - nchars) * charwidth;
      if leftjustify then
        begin
        if rightjustify then
          begin
          if moreonleft then fc := floor
          else fc := cieling;
          for ng := ng downto 1 do
            begin
            ib := trunc(fc + nb / ng);
            with outline[gaps[ng]] do nbl := nbl + ib;
            nb := nb - ib
            end
          end
        end
      else
        with outline[gaps[0]] do
          if rightjustify then nbl := nbl + nb
          else nbl := nbl + trunc(nb / 2);
      moreonleft := not moreonleft
    end (* justify *) ;

(*  -------*
 *$p------- FIX
 | Output |
 *--------**)

(*    write1 - write one character, do conversion from ascii
*             to the host character set.
*
*    param  ch - character to write.
*)


  procedure write1(ch: asciix);


    begin (* write1 *)
      write(outfile, chr(ch mod 128));
    end (* write1 *) ;

(*     endline - terminate and count An output line.
*)


  procedure endline;


    begin (* endline *)
      if selection[pagenumber] then
        if blankline then blankcount := blankcount + 1
        else writeln(outfile);
      if linecount <> infinity then linecount := linecount - 1
    end (* endline *) ;

(*     writeblanklines - write accumulated blank lines.
*)


  procedure writeblanklines;


    begin (* writeblanklines *)
      blankline := false;
      while blankcount > 0 do
        begin
        blankcount := blankcount - 1;
        if linecount <> infinity then linecount := linecount + 1;
        endline
        end
    end (* writeblanklines *) ;

(*     writestring - write a string to the output file.
*
*     param  str = string to write.
*            len = length of str.
*)


  procedure writestring(var str: string;
                        len: integer);

    var
      x1, x2, x3: integer; (* general index variables *)
      lastunderline: integer; (*index of last underline found*)
      underlining: boolean; (*underline attribute set*)


    procedure startunderlining;


      begin (*start underlining on a video terminal or Xerox printer*)
        if terminaltype = vtr then
          begin
          write1(esc);
          write1(lbracket);
          write1(four);
          write1(smallm);
          end
        else if terminaltype in [xer, xep] then
          begin
          write1(esc);
          write1(e);
          end;
        underlining := true;
      end; (*startunderlining*)


    procedure stopunderlining;


      begin (*stop underlining on a video terminal or Xerox printer*)
        if terminaltype = vtr then
          begin (*turn off underlining*)
          write1(esc);
          write1(lbracket);
          write1(smallm);
          end
        else if terminaltype in [xer, xep] then
          begin
          write1(esc);
          write1(r);
          end;
        underlining := false;
      end; (*stopUnderlining*)


    begin (* writestring *)
      underlining := false;
      if selection[pagenumber] then
        begin
        while (str[len].c = blank) and (len > 1) do len := len - 1;
        if str[len].c = blank then len := 0;
        blankline := len = 0;
        if not blankline then
          begin
          writeblanklines;
          lastunderline := 0;
          str[1].nbl := str[1].nbl + shift;
          if explicitblank <> nul then
            for x1 := 1 to len do
              with str[x1] do
                if c mod 128 = explicitblank then
                  begin
                  c := blank + (c div 128) * 128;
                  nbl := charwidth
                  end;
          if shiftup then
            for x1 := l to len do str[x1].c := upper(str[x1].c);
          for x1 := 1 to len do
            with str[x1] do
              if c = blank then
                begin
                if underlining then stopunderlining;
                for x2 := 1 to nbl do write1(blank);
                end
              else
                begin
                if c div 128 <> 0 then
                  if terminaltype = ast then
                    begin
                    if underavail then
                      begin
                      write1(underscore);
                      write1(bs);
                      end
                    end
                  else if terminaltype in [vtr, xer, xep] then
                    begin
                    if underavail and not underlining then startunderlining;
                    end
                  else lastunderline := x1
                else if underlining then stopunderlining;
                write1(c);
                end;
          if underlining then stopunderlining;
          if (perminaltype = lpt) and (lastunderline <> 0) and underavail then
            begin
            write1(cr);
            for x1 := 1 to lastunderline do
              with str[x1] do
                if c = blank then
                  for x2 := 1 to nbl Do write1(blank)
                else if c div 128 <> 0 then write1(underscore)
                else write1(blank);
            end;
          str[1].nbl := qtr[1].fbl - shift;
          end
        end
      else blankline :9 false
    End (* writestring *) ;

( ∀@@@@@↓C@∪[∞s∂↔≠|ε&jαT⊗'6≥l6*εmxMT≥≠h
l>≥λ
D≤|⊂∩Xts4aXz4wwεA⊂∃
FEεEβE⊂⊂8≤7qr`$ure advancefgbm;

    var~∀@@@@↓GPtA¬cGSRl@P@)∧¬6/J8
≡X8p~→y⊂∃∀CE⊂⊂⊂λ⊂⊂3'\4¬chhACgGαK'amαA)β∂-∪C↔;"β⊂⊗@|[ ⊂_t0p∩acterTR4R↓↓↓↓αβ∪@;$λ
-n→9y.≥P∀* fae@1HAoSα#S!β|∧bε∨↑.&.wDλ
.L8εP∃
F@
      @QXtASαsS↔∨,ε#@4λ∧∃⊂≠4πcal title le@9KiP@(R~)α↓↓↓↓∧εvFN=∞DY{p⊗→ps∃@ (* which @QSiYJQP↔πL¬bg∨\!∩αR⊃Q"αα∧∧απC↔$εNwLXv/∪αh
¬$→y3L↑X;λ
≥Y→0≤λ∃∀FEβE∀∃⊂λ⊂⊂⊂⊂λ⊂⊂72↑ *)


    procedure nexpch;
¬

      begin (* nextch *)
        fkrmindex := (formiNdex mod formlength) + 1;
        formch := form[formi@9IKq:4∀@@@@AK]⊂@PTA9KqiG @TR@l~∀
∀ T@@@A]k[	Kd@Z↓`↔π"β¬β;.k↔I∧3K?5π##∃β4{K58hQ↓(4R↓)↓↓αβCπK∞iβ∪↔2↓uβ∪.3πW3"β;W7⊗+I84R↓↓)$hP4(4R↓↓↓β7+;∂SN{9β;.k↔IF#↔→i∧K;S↔>+I%I∧K;S↔>+Al4Ph)↓↓α↓↓β[∂⊂4)↓α↓↓↓↓αβ;W5Rβ';S.;↔ImαA)β;.k↔I∧∪↔∨'rβW'g!↓)$hP4(4R↓↓↓↓αβ↔∨Nq↓!)εsW7/⊃↓)$hQ↓↓↓α↓↓↓βN1β∂3∂≠No≠␈∪7∂"js∪'∨O!βS#.p4)↓α↓↓↓↓α↓↓β.;'84R↓↓↓↓α↓↓↓↓εsW5↓Si↓AlhQ↓↓↓α↓↓↓↓αβK↔C.P4)α↓↓↓↓α↓↓↓↓αβ;W5βQuβ;.i↓)↓↓↓-β6{K7∂B↓5βk/∪=l4R↓↓↓↓α↓↓↓↓α↓β'→εsW5↓siβ';6K;'SJβS#↔rβ;W5βQuβ'v3';''I↓5↓X4)↓α↓↓↓↓α↓↓↓↓εs↔cS≡@4)↓α↓↓↓↓α↓↓βWw#'1βv{Qβ∂fONo6{K7∂Ei;∪'>KQl4R↓↓↓↓α↓↓↓↓εsW7/⊃↓iuεsW44R↓↓↓↓α↓↓↓↓ε+;⊂4R↓↓↓↓α↓↓β↔g≠∃β;.k↔IβQuβ∪.04)↓α↓↓↓β.s⊃↓!Rβ;W7⊗+I↓)J↓l4(hQ!)↓α↓↓↓↓ε3'↔3';'∪SB↓5βK.⊃β?π#'?;∞aβ≠'.c⊃β←N#S!β∨β↔∂'6K∂πSN{984R↓(4)αQ↓↓↓α↓βCπ⊗5β∪.1↓uβ&+≠πWg!β≠'.c⊃β←N#S!8hQ↓)↓α↓↓↓↓α↓↓↓↓εk'9↓jβ7';NkW5β6K↔3⊃π;'∪SBp4)↓αQ$4(hP4)↓α↓βCK}≠↔∪W⊗)β≠'.c∪←''#!#∪.11β7Nqiβ'w#↔∨↔∩Il4(hP4)↓α↓↓↓β⊗+∨'9αA)β≠N+3∪←N#S!↓RH4)↓α↓↓↓↓αβ≠]↓Siβ∪↔3X4)↓α↓↓↓↓αβ'→β6{K7∂B↓uβ∂}c?9β&C↔84R↓↓↓↓α↓↓↓↓ε∪↔∨'ph)↓↓α↓↓↓↓α↓β;↔G#∂!lhQ↓↓↓α↓↓↓↓αβ≠]↓Siβ;Wn∪↔I#&+→$4R↓↓↓↓α↓↓↓↓ε+;⊃lhQ↓↓↓α↓↓↓βN1β≠]βaβ7'rβS#↔rβ≠]↓Siβ7'ph)↓↓α↓↓β↔v!↓!)ε3'↔3';'∪SB↓)%↓Xh(4)BQ↓↓↓α↓↓↓β≡+;⊃EαiβO↔v!β?;*β∂#π⊗∂S↔∩βS-β&C∃βS/CQβ3Ns∃84R↓(4)αQ↓↓↓α↓↓βC∂∪π5β≤A↓uβ≡CπKπ∨#↔Iβ&yβ∃π≠↔;Qph)↓↓RH4(4Ph)↓↓αβCK?≡+∪WK*βO↔;#	#∂!RβπO∂LKa%lhP4(4R↓↓↓↓αβ↔∨Nq↓!)¬≠↔;⊃
↓)$4R↓↓↓↓α↓↓βS/CS';&+a↓ijβS↔c&K;∪↔B↓-↓EXh)↓↓α↓↓↓↓εK⊂∩πL←π&NlLWBα4∞6FNn@βrε\∨ε␈>≤NFBπMVph$∧ααα∧∧ααα,V>NaQ"αα∧∧ααα∧∧π&/∞M⊗v&←∧βSjε∪0hR∧∧ααα∧∧ααε↑.&␈∩∧¬Rβ
⊃Q"αα∧∧ααα∧∧ε.vG1PRα∧∧ααα∧∞F/GN;7&/∞M⊗v&←Rv~π'Rε≡π1PRα∧∧ααα∧∞F/GN;7&/∞M⊗v&←Rfv-DβSJ9ε∂↔⎇≤G&C1Q"αα∧∧ααα
≤bπ&←∞FNvL←αβR∞LWGεL]f?&∧∞FF.d∞F/GMLVv?M∧βSj∞LWGε≥lF/@Q$ααα∧∧ε.vD¬αRπ<]f#
¬%∩βXQ!PRB$∧ααα∧∧π≡∞lF∪ααT∞6.vD∞WαπMtβα=ε∂⊗≤>F/↔4∞FzπMRπ&←∞Bεf≥lR`h$¬"αα∧∧ααα∧∧ααα∧∧ε&/L↑&nNm≥f:εm_Vf"∞⎇⊗'&¬aPRα!Q"αR∧∧ααα∞↔⊗∞β(_m∧∂(&∧_z_.,8⎇→..kC"D¬Hλλ∧∧λλλ∧∧λλ→\H∂ L9X=-Nλ→Z,]→λ∃m≤≥~AQH
H∧∧λλλ∧∧λλλ∧
:;HπT≠:;M≥=; ⊂→αield width.
  *)


    procedure send10(ch: ch10;
                     def, min: integer);

      var
        x1: integer9  * index into ch *)


      begin (* send10 *)
        fieldwidth(def, min);
        if fw < def then (* send rightmost fw characters *)
          fkr x1 := def - fw + 1 to def do send1(ch[x1])
        else (* Send leading blanks and all def characterq *)
          begin
          for x1 := 1to fw - def do send1(blank);
          for x1 := 1 to def do send1(ch[x1])
          end
      end (* send⊃0 *) ;

 (*      writetext - write text buffer.
  *)


    procedure writetext;


      begin (* writetext *)
        writestping(texts, textlength);
        endline;
        textlength := 1;
        texpindex := 1
      end (* writetext *) ;

(*      wait - wait for operator acknowledgement.
 *            heavily system depe@9IC]h8~∀@@(R~∀~(~∀@@Aae←
KIke∀AoCSPv~∀~(~∀@@@@AE∃OSL@ TAoC%h@TR4∀@@@@@@A%H	βS/∪7'≠∞cSgC*↓uβπ≥!βS#.p4)↓α↓↓↓↓α↓↓β.;'84R↓↓↓↓α↓↓↓↓π;C'S*C?WS6K3∃1ε≠#I#⊗+1%%Xh)↓↓α↓↓↓↓α↓βK↔∞#39#NsCWQHh)↓↓α↓↓↓↓α↓β↔; h)↓↓α↓↓β↔v!↓!)π;π'QαQ%↓lhP4(4R↓↓↓β⊗+∨'→αA)βπ'3π;∂.3?K5αQ$4)α↓↓↓↓ε≠!↓ijβWCC/⊃#≠?⊗jo≠?⊗k';∪/Bu%lhQ↓↓↓α↓β'→εs?Qβ≡cπON↑≠"u;∂+?S∃π##↔9εs↔cS≡Al4)α↓↓↓↓εK→β∂dONo≡Bu;≠␈∪7∂#∂⊃βS#.p4)↓α↓↓↓↓αβ∂πO*β∂!β}04)↓α↓↓↓↓α↓↓β
RβO↔;#	A#K∂;∂3?≡Y1↓ab↓A%lhQ↓↓↓α↓↓↓↓αβ⊃iβ≡+;⊃EαCKπ←&S∃1βA1↓AKX4)↓α↓↓↓↓α↓↓β∃RβO↔;#	A#;N≠↔∪π&)1↓eb↓A%lhQ↓↓↓α↓↓↓↓αβ1h4R↓↓↓↓α↓↓↓↓α↓β↔>K84)α↓↓↓↓α↓↓↓↓αβ'→β&+cS3.s∨S!βq↓Eβ&C↔9β?∪'S↔&+cAlhQ↓↓↓α↓↓↓↓α↓↓β3Ns↔∂?.sQ↓ijβ;W7⊗+I!EHh)↓↓α↓↓↓↓α↓↓↓β,s⊃l4R↓↓↓↓α↓↓↓↓π↓h4)α↓↓↓↓α↓↓↓↓αβ↔∨Np4)↓α↓↓↓↓α↓↓↓↓εK⊂∩αiw⊗N=∧βjε=yF}r∀
wααhn-8zλπT_[_-mj(∃
;H_m∧∞O(
a"Hλ∧∧λλλ∧∧λλλ]≤y#!$λλλ∧∧λλλ∧∧λλλ,9z;AQHλλ∧∧λλλ∧∧λλλ∧zλ∞GT→[tM\z∞c!$λλλ∧∧λλλ∧∧λλλ
l>≥_m↓ Hλ∧∧λλλ∧∧λλλ∧∧→;Yπ1"Hλ∧∧λλλ∧∧λλλm9;→∞⎇9≥~¬εhε⊂_
]FE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ1ww;→y:7:[q2y∀≥2|:9K⊂:2|≥4s22↑⊗⊂80Ypw:vX2y⊗⊂→9V⊂7≥vs7y≠T1tελ⊗P~∧J]FE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ4s⊂*→|:4g→2|⊂∨λ82|:≠2s3z~⊂:42[⊂:2l≥42w3]4⊂≥≡H82|:~w22|βE⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂"[2≥FEλ⊂⊂⊂⊂λ⊂⊂⊂⊂≤T∧ t:
            begin
            which :=  ⊃GαA↓eβ Iβ?IαC∂!↓h∧π∞n≥IG"Kαc"D∧λλλ∧∧λλλ∧∧≥≠λπ'αP:4]4∧el@∃]OiQmoQSG!:v~∀@@@@@@@@AMSK1IoSIQPQiX0@`Rv4∀@@@@@@@@@AS_AMn@pAiXAQQKL@ TAgK9HAYCMhAMnαβ∂#πα,⊗∨&↑.2αR⊃Q"αα∧∧ααα∧∧ααα∧λf␈∩∂$πO(∃
D(⊂∪≥P⊂ 1 to Tl do q`MHβ	#C'&c⊗o←FK∂"v←AFu$hQ↓↓↓α↓↓↓↓α↓↓β↔dε6*αα
H∞≤αs2 leading blancs and Alh tl characte@I`
↓%⊃PBα∧∧ααα∧∧ααα∧∧ε⊗.⎇→`hR∧∧ααα∧∧ααα∧∧αε6} λ∂ε(
O$ε(≥≠d]h$∞≠λ⊂∩≠P9r`.d1(blan`⊗Rl~∀@@@@@@@@@@AMOdαβaE↓Si↓Eβ&yβS1∧∧Fzπ<XLF*≥~.Mα2e{Z4qt.Vβx1]	
              e`≥H4⊂	↓↓α↓↓↓↓α↓↓↓β,¬f#XQ$ααα∧∧ααα∧λ
g⊂9r`.d10(wallc@1←GVXpX@`$r~∧@@@@@@@AQ¬`∂!hhQ↓↓↓α↓↓↓↓α↓↓β,∧vNpβ"H∧∧λλλ∧∧λλλ∧∂(∞GT≠];,,<J_J]FE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ;t4`,e teXti`≥I∃p@xA`bAI↑↓c@↔l@%Xε0w~TYFEλ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂:2|≥4p∞dex := x1~∀@@@@@@@@AK]HβX4)↓α↓↓↓↓α↓↓β3↔∪π∂/-!` ($∧ααα∧∧ααα∧∧ε⊗.⎇≥`hR∧∧ααα∧∧ααα∧
⊗ $≥→>∞Mα2w3]4⊂∨P:42[⊂;y4]2z2l≥≥FE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ4s⊂9Yv2q`4ion[pacenumber] theN
              begin
              if eject theN
                beei`≤~(@@@@@@@@@@@@AEIC9WG←k9h@tz`v~∀@@@@@@@@@@@@↓SDAi∃eP↔'v3SG∧)↓uβgβQβSF+9βC∞;∃#?/#∪'3*H4)↓α↓↓↓↓α↓↓↓↓α↓↓↓β.cO¬β?∪'S∃λ¬ε62⊃Q"αα∧∧ααα∧∧ααα∧∧αε.lAPRα∧∧ααα∧∧ααα∧∧ε.g<TεN∩∞LW⊗N≥l⊗g'α<⊃$π∂H≠∞∞λ≥~]H≥|M≡→8[≥Z{⊂∀[2y]FB⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂~s⊂80]yrP:~2w⊂;XtzεEλ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂"[2≥FEλ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂4s⊂→4πrmnlength > 0 theN
              begin
              foRm := dkrmnext;
              fkrmlength := Forenlength;
              fo@I[SMI∃p@tz`v~∀@@@@@@@@@@Ae∃aKCh4∀@@@@@@@@@@@@A]KaiGP~(@@@@@@@@@@@AU]iSX↓MP∨Kn≠!↓uεcKπ≡[↔QlhQ↓↓↓α↓↓↓↓α↓↓↓↓εs↔cS≡Al4)α↓↓↓↓α↓↓↓↓α↓↓β≠|ε&nvL]f?&∧π#jβ↓Q"αα∧∧ααα∧∧ααα∧Vv Q$ααα∧∧ααα∧∧αε.lC0hR∧∧ααα∧∧ααπ,.&∞≡<↑CPH$∧ααα∧∧ααα∧∧ε⊗.⎇≥`hR∧∧ααα∧∧ααα∧
⊗ $≥→>∞M→;YnMλ∂@ε∀≥~→-d≥|Z.L=→>∞Gc"H∧∧λλλ∧∧λλλ∧∞_9y-n;8Y.$∞O(∞9y;N]8Y<D¬h.aQHλλ∧∧λλλ∧∧λλ≥L≥~9_.L*≤_,|;];,,<Kλε¬λ~;Lm;Z=∂∀(%D(e⊃"Hλ∧∧λλλ∧∧λλλ]Y∞c!$λλλ∧∧λλλ∧∞{_<mπC"H∧∧λλλ∧∧λλλ∧[|H∂ε(∞O$ε(≥≠d
];8L↑J*$≠h≥n-=→=←≥∞c!$λλλ∧∧λλλ∧≤=;nL+λ≤n≡;⎇→'!"Hλ∧∧λλλ∧∧λλλ∞,<→8.A"Hλ∧∧λλλ∧∧λλλ∧∧≠Y>∞Lz∞c!$λλλ∧∧λλλ∧∧λλλ∞⎇~;→$[|[,=λ∂∂Dzλ→
q"Hλ∧∧λλλ∧∧λλλ∧∧λλ_L\z;C!$λλλ∧∧λλλ∧∧λλλ∧∧≤y;LF*→[n-8z
'1"Hλ∧∧λλλ∧∧λλλ∧∧λλ≠L←≥_z↓QHλλ∧∧λλλ∧∧λλλ∧∧λ→;LGc"H∧∧λλλ∧∧λλλ∧∧λ≠Y/∞_z∞aQHλλ∧∧λλλ∧∧λλλ∧
9H→M}[8z∧π(_z∧∞~→;D∞y;Yε∃_z
!QHλλ∧∧λλλ∧∧λλ≥-n~;λm|[8m∧∂∂H=∞c"D∧λλλ∧∧λλλ-_;Zg!"Hλ∧∧λλλ∧∧λ→;LA"Hλ∧∧λλ→-Ny#"D∧λλλ∧∧λ_Y,⎇;C"D∧λλλ∧∧λ→<N-|L(π'(_zπ1"Hλ∧∧λλλ∧<\[n%λ(ε%#"H∧∧λλλ∧∧→;Y↓QHλλ∧;Y묬H_9∞l;Xy,m|[(¬%(
c!!"J
D∧λλλ∧Y9z-m~;Y$¬(_Y,⎇;H≠n↑≤≥=∧
~;Y%D_9≥L≥Xy(m|[(≡h≠Y,<<|x./+C"D¬J#"AQC"H∧∞≤[xl\≥<Y$Y9z-m~;Y'1"C"D∧λλ≥L≡C"H∧∧λλλm>∞H
≥]→9l↑Nh
¬$≠≠xl≥λ_{n∂(≠qD[|[-≥Y→>∧¬J#"D∧λλλ∧[[∞D
;]→,|<Nh¬¬H≠⊂↔Xpv⊂![necount <= 0 then (* make linecount >0 *)
        begin
        fix := formindex;
        fnl := formnlength;
        repeat
          if fnl <> formlength then
            begin
            fix := formindex;
            fnl := formnlength
            end;
          advanceform
        until (linecount > 0) or ((fix = formindex) and (fnl = 0));
        if lineCount <= 0 then (* bad form *)
          begin
          error( - 5);
          linecount := infinity
          end
        end;
      blankline := true
    end (* beginline *) ;

(*     writenull - write a null line.
 *)


  procedure writenull;


    begin (* writenull *)
      beginline;
      writestring(outline, 1);
      endline
    end (* writenull *) ;

(*      skip - skip output lines.
 *)


  procedure skip(n: integer);

    var
      x1: integer;


    begin (* skip *)
      if n > linecount then n := linecount;
      for x1 := 1 to n do writenull
    end (* skip *) ;

(*       writeline - write the output line.
 *)


  procedure wpiteline;


    begin (* writeline *)
      beginline;
      writestring(outline, outlength);
      endline;
      if space <> 0 then skip(space);
      outlength := 1;
      outline[1].nbl := leftmargin * charwidth;
      nchars :9 lEftmarein+
      nwords := 0;
      ngaps := 0;
      gaps[0] := 1;
      newoutline := true
    end(* writelIne *) ;

( ∀@@@@AACOJ@4AG←]⊃SiS←9CYYr↓ae←IUGJAB↓aCOJ↓KUKGP\~∀@(R~∀~(~∀@AAe←GK⊃keJA9KoaC≥JQ\t↓S]iK≥KdRv4∀~∧~(@@@A	KOS\PTA]∃n1aC≥J@TR4∀@@@@ASL↓YS]K
←k]hxA\AQQK\~(@@@@@@Ae∃aKCh4∀@@@@@@@AoQS1JAYS9KG←k9h@|@@AI↑A]eSiK9kYXv4∀@@@@@@@AoQS1J@AM=a[7M=aSC]⊃Kq:@p|AYEICGWKPRAC]⊂@QYS9KG←k9h@xz`RAI<~∀@@@@@@@@@A¬ImC]
KMOe4~∀@@@@@@↓k]iS0AMOe57MOe5S]IKa:@zA1EeCG-Kh~∀@@@@↓KYgJ↓SLAY%]KG←U]h@z↓S]MS9SirAβ##↔→εK⊃↓Uβaβ)β&C↔9β≡['A!αU⊂hR∧∧αε.l@묬H≠Y.s≤_9lT
J(π⊃"C"@↓Dλ
∃λ⊗VVFKVVV@--)--
----4ZRZZ4ZZZZαi5%5hi5%5h¬RjJUQRjjUP%UαVV@--)--4ZP∃5h¬Rj@(
J!QHλ
¬$λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλ
E⊃ ¬⊂⊂
∃⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂4w8≥z⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂
∀@
  ( ∀@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@TR~(@@@T@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)Hh!↓↓@¬"αjUQRjjUQRjjUQRjjUQRjjUQRjjUURjjUQRjjUURjjUURjjUQRjjUQRjjUQRjjUURj@(
J!Q@εE∀
⊂⊂⊂⊂λ⊂72l≥1t0yλ⊗P0r≥0s1`% to The nexpλASαsCGQ∧≠#πK∞≠S↔Ibβπ;⊂hQ↓)↓α↓↓↓↓α↓↓↓↓α↓↓↓β≤¬vw6↑.Bε7-⎇RεF}>Bε≡≡&∞∨LZ"π≡↑@π&@h_<l=:+C!∧λ
J!Q@εEεB⊂⊂8)≠qrr:\2P72↑8∧char;

( ∀@@@@AIKCIY%]J@Z↓aKCH↓C\ASαsCGQ∧c';∃bβ∂?;6+@↔"
≥g&Z≡6≡N∃APRα$∧ααα∧∧ααα∧∧ααα∧6}w=_	↑Z;Ydx8	bH9t4c≥⊂0w2λ:w22\44w4[3WεEλ⊂∃∀FB∧EεEλ⊂⊂⊂(≤7qr`$ure ReadlIne;

      var
        extch: cHar0⊗@ TAKqQKe]C0AGQCICGiKH@TR~(@@@@@@ApDXApdhAS]i∃OCdvPTAO∃]KeC0AS]I∃pAmCISCEY∃`
↓	Hh(4(hQ↓↓↓α↓β↔>K9↓!RβK↔π&c';∃αQ$4)α↓↓↓↓α↓β;↔>K;3'v)↓iuπ#KW∃Xh)↓↓α↓↓↓↓πAE↓ij↓Al4R↓↓↓↓α↓↓β←FK3∃βv{Qβ↔|c9#'v3'3∃Jβπ;⊃αCaE↓bβ';←N#S!%∧∧Fxh$∧ααα∧∧ααα,V>NaQ"αα∧∧ααα∧∧π⊗.≤EεNvm≥F*b←π&≡¬↔0hR∧∧ααα∧∧ααε≤dε␈⊗EWGε=↓∩βj
∞Bπ&Y`hR∧∧ααα∧∧ααα∧∞&/ε\≡@hR∧∧ααα∧∧ααα∧∧απC∀π#jπαλ(¬4.c!$λλλ∧∧λλλ∧∧λλλ
≥[~;L[}λλnK1P≥≡H120w~]FE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ:s:4[⊂<_@≠wr⊂ 4abinterval =   4∀@@@@@@@AKYgα)β'→∧{@⊗"X∞∞Lz
(πg(_[≥Zh∃
;C"D∧λλλ∧∧λλλ∧∧_Y9m≥C"H∧∧λλλ∧∧λλλ∧∂(∞GT≤∧_@
P_]FB⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂4g≠4s2m↑_jW1H≥≡P7\αd(e@aiGPR4∀@@@@@@@@@AK9Hv~∀@@@@@@@A∃]Hv~(@@@@@@AS9YSMKmpb@Vc:]FtrAE1C]Vv4∀@@@@@@A→←dApH@tz@DAi↑A`b@F@DAI↑A%]YS]∃7pe:9]EH@hzAGQ¬eoSIQPv~∀@@@@@ASL↓S]IS9K6c:9F@zA⊃SeGPαβS#↔ph!↓↓α↓↓↓↓α↓β↔>K84	α↓↓↓↓α↓↓↓β&KC↔∂&c';∃βQuβS↔+∃l4R↓↓↓↓α↓↓↓↓∧c?←↔⊗#'I↓β'Rπ'.\PhR∧∧ααα∧∧ααε]l@hR∧∧ααα∧∧ε.g<Tε&O,X7&F≥lRβSTλFO⊗\:FfNlTε∞vD¬εNvM≥f-[≠PL4∂(≤
NαyT]CE⊂⊂⊂λ⊂⊂⊂⊂~q⊂1`!sach<8A]UXAiQ∃\~∧@@@@@@@AS_AISe∃GiYS9JAiQ∃\AgQ%IagiIS]NQ%]YS]∀XApb0AY←o∃aISd$~∀@@@@@@@AKYβ≠∃βOFK≠@'>N&Nvu
⊗vf≥lRbπε⊃Bεf}|Wε≡≤8RKXQ$ααα∧∧ααε≤dπC
¬`β
πMVph$∧ααα∧∧ααα∞⎇εNfT¬εNvM≥f-←∧∧7%Lh∂ -_;Ze∀_;Y∧¬≡λλP∂⊂_TP→7P<_H≥≡P<P∩P_NFE⊂⊂λ⊂⊂⊂⊂λ4s⊂,P≡P_H:42gλ4s⊂$[64w2V|_nW_P≡P1≠0s5@ then↓pb@tt@`v~(@@@@@@AS9YK]OQP@tz↓pb`,hQ↓↓↓α↓↓↓β⊗+π&MeεNvm≥F*K1Q"αα∧∧αααi↔.⎇→4N
|H∞GT≥≤],Wc"H∧∧λλλ]Yλ
¬$≤Y8,M~;Y$¬J(∞aQ@εEεB⊂⊂⊂⊂_2stgλ∀⊃⊂ .extcHar *)
      iNcolumn := incoLumf + 13
      if Incolumn >↓S]YK9OiPAQQK\~(@@@@@@AE∃KS@8hQ↓↓↓α↓↓↓βL1β↔?bβS#↔ph)↓↓α↓↓↓↓α↓β↔>K84)α↓↓↓↓α↓↓↓βL1β;∨ β↔;∪|3';C/!βS#.p4)↓α↓↓↓↓α↓↓↓↓εK⊂∩ε]xbFNlh
-L*(∃
;H→l↑≠Y>∞LX;→%;Y≠lm;\≥.E,¬FEλ⊂⊂⊂⊂λ⊂⊂⊂⊂~s⊂77]⊂2w2≠s4w8≥z⊂:4→wαE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ12st[εA⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂≤2pr6~w2]FB⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂4g_wv:v[⊂≥≡P]FE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ4s⊂&~w2w:[yP:4→wαE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂12YtsεEλ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂4Yα cl@¬cg7S9YSMKlc:]GtYISO%hAiQ∃\~∧@@@@@@@@@@@@A	KOS\4∀@@@@@@@@@@@@AYS9K]k[	Kd@Tt@`v~(@@@@@@@@@@@@AeKa∃Ch~∀@@@@@@@@@@@@@AYS9K]k[	Kd@TtAYS]∃]k[E∃d@T@D`@VA%]YS]∃7S]G=YkK]tYF@Z↓uKe↑l~∀@@@@@@@@@@@@@@↓S]G←1k[\@hzAS]
←Yk[8@V@b4∀@@@@@@@@@@@@Ak]QSXA]=hAGYαGNoNs3'≠-[';∂}cW7:h¬f≥jlM⊗.OAQ"αα∧∧ααα∧∧ααα∧∧αε.lC0hR∧∧ααα∧∧ααα∧∧αεNl9vg.β;@π'(~0↔_wv:v[⊂∃P_CE⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ2w2εB⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂2v≤pP6 )nenumber := linenumber + 1;
            eol :9 iNcolumn > inlength;
            if eol Then inchar := bla`≥V4∀@@@@@@@@@AK1gBAS9GQCDα↓i`*
→ffNl[6Nv=⎇G.nkQf_h$∧ααα∧∧ααα∧∧ε.vAQ"αα∧∧ααα∧∧ε.vAQ"αα∧∧ααα]G∞λQ$ααα∧∧ααα∧&.>≥aPRα∧∧ααα∧∧αε.⎇DβS@(≥≤N\,¬FEλ⊂⊂⊂⊂λ⊂⊂⊂⊂~w1t0\⊂≥≡@_40w5CE⊂⊂⊂λ⊂⊂⊂⊂λ⊂2w2βE⊂⊂⊂λ⊂⊂⊂⊂→w2εEλ⊂⊂⊂⊂λ2v9bH4w1`(ar := inl@%]K7Sαs∂?3.k:u;_h!↓↓αβ↔;⊃αA)β;/CS∂#∂⊃↓)%βX4(∀Ph)!	α↓↓↓↓εs↔cSdK;∃↓jβπβ[∞s∂∃β&yβ↔>K;;πv9β?→∧s↔cQ∧K;CW"β3';*p4)↓RH4(Q!PRα∞
&}≡\NW⊗*
lWG&M≥f+XQ!PPH$∧ααε,\vNr¬¬"εv←∞FfNlTαRHQ$ααα∧∧εNv=yG.ndπ#jε≥mF.v}MααZε⊂∞aQHλλ∧∧λ→;mD∞O(∞N]9.aQHλλ∧∧λ≠Y/∞α1t0\ε@
    end (* Nextl@%]J@T$@v~∀4∀----------------- *)
  (*                                                                    *)
  (*                    directive processing                            *)
  (*                                                                    *)
  (*                                                                    *)
  (* -----------------------------------------------------------------) *)
¬
(*        break - cause a↓EeKC,AS\A)kgiS→SGCi%←\\~(@TR~(~∀
∀Aae←
KAke∀AEeK¬Vv~∀4∀~∀@@AEK≥S\@P(AEeK¬V@DR4∀@@@@ASL↓]←hAαs↔←?/#3';*βS#↔ph)↓↓α↓↓↓↓ε∪↔∨'ph)↓↓α↓↓↓↓εK⊂∩εm}BαFL\g&W↑:FN7∀λ⊗v"∞-⊗>GM.W∨&≤o∩JπMVrε.↑7&No↔0hR∧∧ααα∧∧π?⊗≤LVfNlQPRα∧∧ααα∧λVv#1Q"αα∧∧απ.lLW⊗F≥m⊗v:π'Rε6≥N6+XQ$ααα∧∧εv/}λλ.9|X.
λ∞O$∞≤]1!QHλλ∧;Y⊂
∃⊂19→puP∃
P≥FEβE∀∃⊂λ⊂⊂⊂⊂λ⊂4w:[22w:λ⊗P9aZ2r:v→P0w indent or undent.¬
 *
α

 *       param inun > 0 fgr↓S]IK9hX~∀T@@@@@@@@@@@@@@@p@`AM=`	βWv#↔;Qph ∩R⊃Q hPQ$αππ-x6.π↑,RεNn]f&.nEεNw]`∞D
;]→,|αy∀]CE

    begiN ( ∀AαK;W≠&+;Q↓RH4)↓α↓↓↓β↔∪↔π-Xh!↓↓α↓↓β;≤CπKMβQuβ3,3S .≡,vNr¬0λ
≥];@≥CE⊂⊂⊂λ⊂⊂4`& jchars < 0 then ncHars := 0 64⊂@@@@A←KQYSMKlc:]]	X@tz↓]GQCI`
↓$λλm<XtY:4εEλ⊂⊂⊂ %nd (
 inundeft*)  64∀∩)@¬"αα∧	⊗wπ<≡f*αT
6∂6Tλ
-n≥=∞p¬ttings
 *)

~∀Aae←
KAke∀AS]aMCmJV4∀∩∧~(@@@A	KOS\PTASαsCOπ4∧RαR⊃Q"αα∧∧απ6≥H
,L=→*
≤9<∩-n	λ¬D≠8>
<αrx⊗λ_XZXJ]FE⊂λ⊂⊂⊂⊂≥tz4⊂≤p{2`)np[keepinp] do
        begin
        defined := true;
        b := explicitblank;
        c := casecH;
        d := dirch;
        h := hyphen;
        u := underchar;
        w := inwidth
        end
    end (* inpsave *) +

(*      inprestore - restore previous input settings.
 *)


  proceDure inprestore;


    begin (* inprestore *)
      validate(keepinp, 0, maxkeep, 1151);
      with saveinp[keepinp] do
        if defIned then
          begin
          explicitblank := b;
          if casEch <> c then
            begin
            case@
P@tz↓Fv~∀@@@@@@@@AY←o∃aGCgα)↓iu∧≠πO↔≤A↓qyεsW04R↓↓↓↓α↓↓↓↓α↓β↔; π0hR∧∧ααα∧∧ααεM≡&≡Bπ'Rε#1Q"αα∧∧ααα∧∧εGO
Vrβ'TεCXQ$ααα∧∧ααα∧∞Vv&↑,6F∂$π#jπW1PBα∧∧ααα∧∧αεNn⎇⊗'&∧π#jπqQ"αα∧∧ααα∧∧ε.vAQ"αα∧∧αααYG∞
Z'ε←%α∪βU⊃PBα∧∧ε.vD¬αRε≥nπ⊗/>Mw⊗*¬%∩βXQ!PBBαHλ∧∧λ≠8..x=P∩H⊗P9p]2P6p\3tw≤p¬ttings.
 *)


  proceduRe marqave;
¬

λ    begiN (* Marsave ")
      validade(keePmar, 0, maxkee@@X@bjDRv~∀@@@@↓oSiP↓`∂π[,¬V∂∃αzy,↑≠8<KT→≠c!$λλλ∧∧λλ_L\z;C!$λλλ∧∧λλ→\Z;Y,D∞O(∞N]9.aQHλλ∧∧λλλ
D∞O(
L9]≠,≡Yz;G1"Hλ∧∧λλλ∧∞H∞O$∞X9z∞M8<Ym≥A"H∧∧λλλ∧∧→;Y↓QHλλ∧9Y⊂
∃⊂6p\9p{ % *) ;
~∀ T@@@A[CeIKgi←IJ@JAIKgi←IJAae∃mS←kβ→β7π⊗;'9β≡+S@&≥lw~pQ$αRHQ!PPH$∧ππ⊗|8V'∂,Tεn∂.,W∨&},SHh!Q hR∧∧αε⊗\⎇⊗rα¬$εn∂.,W∨&},RαR⊃Q"αα∧∧απ6≥I⊗&∂LUε↑.↑
V∂∩Dεαbε\∨ε↑9<∧ε-,"'1"Hλ∧∧λλ∃m≡~λ≤l≡Y;8.+zy9.
8<W$≠c"D∧λλλ∧∧λ~9D→9P∀[2r⊂:~2wεEλ⊂⊂⊂⊂λ⊂⊂⊂⊂_2stwβE⊂⊂⊂λ⊂⊂⊂⊂λ⊂62s≥6py3Zw⊂≥≡H6≥FEλ⊂⊂⊂⊂λ⊂⊂⊂⊂≤4st:≠py3t[⊂≥≡P≤εA⊂⊂λ⊂⊂⊂⊂λ⊂⊂2w→εE⊂⊂λ⊂⊂⊂⊂λ2v9bH2y97\∀_X~JFE⊂⊂λ⊂2w2λ∀∃⊂&Xy92y]4πre *) +

(
     optsAve - qave optiOn settings.
α *)


  proce@⊃keJA=aigCYJv~∀4∀~∀@@AEK≥S\@P(A←aiMCmJ@(R~∀@@@@AYCYSI¬iJQW∃Ka←aPX@`X↓[CqW∃K`H@HjbRv4∀@@@@AoSQPAgCYK←aimSCKa=ai:A⊃↑~∀@@@@@AEKO%\~∀@@@@@AIKMαK;↔⊃βQuβS↔+∃l4R↓↓↓↓α↓↓β∃βQuβC⊗K;C↔↔∪?KMβ1PRα∧∧ααα∧λbβSTλfNfG1PRα∧∧ααα∧	"βST&∞&.↑7&No↔0hR∧∧ααα∧∧εbβ'Tεf.nM'/∨M_gKXQ$ααα∧∧ααεTπ#jε↑]G&O
H	,-_;Zn↔c"H∧∧λλλ∧∧≤λ∞GT→;\n↑Y,FaQHλλ∧∧λλλ∞$∞O(∞4st:~8¬stify3
        s :8
AgACGJv4∀@@@@@@AT@tzAMQSMiU`~∧@@@@@AK]H4∀@@@↓K]H@ TA←aQcCmJTR@@Xh(4	@Q↓↓↓αβ?CS⊗+OS?⊗)↓5β⊗+OS?⊗)βCK/3'?W~β?CSN{9βO/#S'≠?→84	αQ$4(hP4)↓πβK?∂,∧G/⊗T
wπ',↑7&←,W0hPQ!PRα∧∧ε⊗.⎇≥bαB$	wπ',↑7&←,TαRHQ$ααα∧∧π6∞M≤F∂&U
6./
}π"bε¬Bεn∨
6.∂¬Dβ∪+∃↔0hR∧∧ααα∞⎇↔&B∞<↔6.}∞EN↑\X
}≥↔ Mc"H∧∧λλλ∧∧~9HL9Z;L\λ≥~]A"H∧∧λλλ∧∧λλ_L\z;C!$λλλ∧∧λλλ∧∞≤Z;NL<\[n.h∞O$.c"D∧λλλ∧∧λλλm;≠λπ'(→NaQHλλ∧∧λλλ∧∧_X9
.<⎇~,o(∞O$
Nc"D∧λλλ∧∧λλλ
L9]~N↑⎇~9O∀∞O(
Gc"H∧∧λλλ∧∧λλ≠.]≥~<
L8[_-m|h∞GT≠.c!$λλλ∧∧λλλ∧;\⎇.,,H∞GT≤∞c!$λλλ∧∧λλλ∧∞Z9z∞M]<⎇
≤↑(∞GT≤Nc!$λλλ∧∧λλλ∧∞|_8lT∞O(∞↔c"H∧∧λλλ∧∧λλ≤m
9]≥.∧∞O(∞Q"Hλ∧∧λλλ∧∧λ→;LA"Hλ∧∧λλλ∧;≤q$<\[n%L
%⊃"Hλ∧∧→;Y∧¬
H≠n∞≤Y<nM|Y(¬%(∞c!!"JαD∧λλλ∞<\p⊂]2P⊗P≤p{2P≤0y0s\0x4≤rz:4[3yWεB⊂∃∀FBεEεEλ⊂897Xrr:y→P80y≤p{2]CEεEεB⊂⊂⊂⊂_2stwλ∀∃⊂8_y9p{→P∃∀FB⊂⊂⊂⊂λ⊂;0v~r0z2J5rrh≤0y⊗⊂⊗⊂6p↑5rrh⊂→ZXJ]FE⊂λ⊂⊂⊂⊂≥tz4⊂≤p{2h_y)urYx80y↔P27FB⊂⊂⊂⊂λ⊂⊂⊂1→stwεB⊂⊂⊂⊂λ⊂⊂⊂2→s4w2Y⊂≥≡P≥9:r]CE⊂⊂⊂λ⊂⊂⊂⊂_P≥≡P≥P∀∃λ4z⊂+[zv2⊂≤prvP≥40z≥44yP~yP9z\2y36≥wzyP
∀BE⊂λ⊂⊂⊂⊂λ⊂3⊂≥∂P80y_qt0y∞FE⊂⊂λ⊂⊂⊂⊂λ4P≥≡H67quYr22w≥≥FE⊂λ⊂⊂⊂⊂λ⊂7⊂≥∂P7:vX2y4w→]FE⊂λ⊂⊂⊂⊂λ⊂8⊂≥∂P80y_x0srNFE⊂⊂λ⊂⊂⊂⊂λ9P≥≡H80y0\utx≥CE⊂⊂⊂λ⊂⊂⊂⊂≥P≥≡P≠:vq2\;tr:~εA⊂⊂λ⊂⊂⊂⊂λ2w2εB⊂⊂⊂⊂→w2⊂∀
⊂80y≤p{2P
∀P⊂≠

(
     parbestore - restore previous paragraphsettings.
 *)


  procedure parrestore;


    beeif (* parrestore *)
      validate(keEppar0@`XA5CqWK∃`X@fTbRv~(@@@@AoSi AgCmα+CπJ↑[↔↔CεJeβ&x4)↓α↓↓↓↓αβ'→β&+∪';,∧Bπ&Y`hR∧∧ααα∧∧ααε,\vNpQ$ααα∧∧ααα∧∞ε∂⊗≤=w.wDπ#jε51PRα∧∧ααα∧∧απε≡,⊗≡F≡ βSJg0hR∧∧ααα∧∧ααεMx6N.LLVw"π'RεK1Q"αα∧∧ααα∧∧εw.\,W⊗Nlpλππ(≠FaQHλλ∧∧λλλ∧∧≤_<L≡_9y$πO(≤π1"Hλ∧∧λλλ∧∧λ≤⊂.,<zz.∧∞O(∞]FE⊂λ⊂⊂⊂⊂λ⊂⊂⊂7≥vq2y≥tr:4λ≥≡P;CE⊂⊂⊂λ⊂⊂⊂⊂λ⊂2w2βE⊂⊂⊂λ⊂⊂⊂⊂→v9rP→y97y
→X~TCE⊂⊂⊂λ2w2
∃⊂80\92yz≠y2P∃
P≥FEβE∀∃⊂λ⊂⊂⊂⊂λ⊂24y→qz4{→P⊗P8≤5qri\P7w2H24y2Xz4{2CE⊂∃∀CEεEεB⊂⊂89≠qrr:\2P24\2qz4]2]FEβE⊂⊂⊂λ;0yεB⊂⊂⊂⊂λ⊂24y∞⊂24y→qz≥P
∃⊂1j\92w:λ24y2Xz4{2H∃∀FEλ⊂⊂⊂⊂λ3:v ,word: ch10;  ⊂T↓Gkee∃]hAI%eKGi%mJAo=eH@T$~∀@@@@Ao=eHtA
Pfv@ T@fA1KiiKI`
β?2β∂WK⊗+;Qβ&KK↔∂&K[∃β>{K⊃↓RH4)↓α↓↓↓β>{K∪3.s∨S!Rβ';S.;↔IMαA)β3.s∨S!ε{⊂∩ε>↑'ε.nDε&O,\7&OlTπ>␈,DαRHQ$ααα∧∧πC
D∂βBε≥nF.>↑'2αB$λ	l]Y<X-D~;Y←λ≥P.-88[↑h
J!QA"J¬$λλλ∧
Y>≥=λ(≤≥X;L<(≥≠d
Y>≥=_<@⊗λ1ww9Zr2y4[3P1w[:4w:Xz4ww≤WαE⊂
∀BEεBεA⊂⊂λ⊂897Xrr:`2e nextch;

α
      begin (* nextch *)
        nextchar3
        if eol and (infile↑ ='+') then
          begin
          nexpchar;
          inchar := blafk
          efd
      end (* Nextch *) ;
~∀ T@@@AgoSQGP@Z↓IKiKI[SMJ↓BAgo%iGPA=aiS←8XAG←αsG'∪-∪';≤hQ↓)↓α↓↓↓↓α↓↓↓↓αβS#∃ε#↔≠π.cQ8∀R↓(4	αQ↓↓↓πβπKπhβ∪↔→βiβ∪↔4∧↔.gEaPRα¬%⊂hPβ"C!∧λλλnαw1j~ww⊂9]tz1t
22s≥λ17w`,eaf): boo@1KC\V4∀∩∀~(@@@@AEKO%\@PT↓goSi
P@TR4⊂@@@@@@A%H	β∂d∧↔∂≥=→f≡F≤∧W%@86:y[y2t`.us then~∀@@@@@@@A	KOS\4∀@@@@@@@AgoSQGP@ttAS]GαCπI↓h∧πεg↑70hR∧∧ααα∧∧ααεl[π&≡↓Q"αα∧∧ααα∧∧ε.vAQ"αα∧∧αααX∞≤αP9`7itchp	eβ&+⊂$$∧ααα∧λVv"¬
D∞⎇z5=λ
J$πc"C!∀⊂
      @
QCeC
iKd@4AIKi∃aP↔πv)β¬β≤¬ε∂⊗≤:F/∩
x∞M8πwελ1ww9Zp∧ering
 *                 the deFaudd8~∀@T4⊂@@)α↓↓↓β∧∧↔,8εP $e`@@h∧ε&.l≡Vg"βC"D∧λJ#!∧¬α
    Function c@!CeCGβ#↔I#&+⊂∪R≡6≡Nα*.D<xp∀Z]FEεBα	∀@@@@A	KOS\PTAGαCπKπ≥#↔I↓RH4)↓α↓↓↓↓αβ'	βL¬f≡F≤∧@⊂∂≤ε blanc @QQKL~(@@@@@@@@↓EKOS8~∀@@@@@@@AGQ¬`π∂&+A↓ihβ';∂FAl4R↓↓↓↓α↓↓↓↓∧s↔cS≤@4)↓α↓↓↓↓α↓↓β↔v 4)↓α↓↓↓↓αβ↔3O*β∂#πα,⊗∨&↑ βC@(→→,@∧@
      @∃]H@P(AGQCICGiKβ⊃↓)%βX4(Q%αRα∧∧αεW]\&/∩¬PλL=→<M]8π2P_P7:vYy0	c optiOn, c@=]gSI∃aSMN4⊂@D@@@@@@@@@AiQJ↓IKMCUY`AC              relative form is not recognized.
 *                min  = minimum allowed value.
 *                max  = maximumallowed value.
 *                epr  = error number (if out of range).
  *)


    function number(def, last, min, max, err: integer): integer;

      var
        num: integer; (* number being built *)
        sign: ascii;  * plus or minus sign *)


      begin (* number *)
        if class[inchar].plusorminus and (last >= 0) then
          begin
          sign := inchar;
          nextch
          end
        else
          begin
          sign := plus;
          last := 0
          end;
        if class[inchar].digit then
          begin
          num := 0;
          repeat
            num := num * 10 + inchar - zero;
            if num >= infinity then num := infinity - 1;
            nextch
          until not class[inchar].digit
          end
        else num := def;
        id∧AgS≥\@zAAYkfAQQK\A9kZ@ttAYCgP@VA]UZ~∀@@@@@AKYg∀A]kZtzAY¬gh@Z↓]kZV4∀@@@@@@A%HA]k4@x@`↓iQK\↓]kZ@hz@`v4∀@@@@@@AYCYSI¬iJQ]UZXA[%\XA[¬pXAKIdRv~(@@@@@@A]U[EKdtzA]UZ~∀@@@@A∃]H@P(A]k[	Kd@T$@v~∀4∀PD@@@Ae∃C@∪←␈∪⊃↓5π∪↔π⊃π##∃βv+cQβ&KK↔∂&K[∃β>{K⊃8hQ↓)$hP4(4R↓↓↓β¬∪?∂↔'+K∃β⊗+π'⎇}&#XQ!PRα∧∧ααπl≡ hR∧∧ααα∧∧πC$
⊗w&\|W∪Z¬¬"εf⎇}αεNlLWBα%⊃PPh!Q"αα∧∧αε⊗\⎇⊗rα¬$π⊗.≤Nv␈⊗D¬"Hh$∧ααα∧∧απ>},Ff.l}FBβ'TββXQ$ααα∧∧ααπ⎇
⊗f*9F∂∨;=⊗v≡≡%jvL↑G&/$λFxh$∧ααα∧∧ααα,V>NaQ"αα∧∧ααα∧∧π>␈,MF.v}MαβST∞v␈⊗MLVv?M∧αZβ↔1PRα∧∧ααα∧∧αεNd∞v␈⊗MLVv?M∧βcjε⊗απ&]`hR∧∧ααα∧∧ααα∧&.>≥aPRα∧∧ααα∧∧αααnVfg⎇}&%←⎇}&&f]lw&ETπ#jε≥l6F∂'1PRα∧∧ααα∧∧ααα
≤bπ>},Ff.l}FBβGTβ~πMVrπ⎇}&%←⎇}&&f]lw&ETπ#jπ↑∞ε/∩
≥f≡F≡%⊂hR∧∧ααα∧∧ααα∧Vv#1Q"αα∧∧ααα∧∧εv/∞L6@h$∧ααα∧∧ααα]f#XQ$ααα∧∧ααεm}"πC∀π#jπ⎇}&&f]lw&B¬4β
πMtβαMrε7]IG>␈,K7C
Tπ#jε-L⊗v[1Q"αα∧∧αααmw∩πε∀βSj∞⎇w⊗&L]f?&∧¬2β
∞Mrβ~Mrπ>},E←C≠TβSj-F∞v1Q"αα∧∧αε.lDαBR∞,V∞'⎇}&"α%∀βXh!Q"BR∧∧ααα∞,V∞'∞>G⊗Nltαjπ,\⊗"ε∀∞π∨'-≥f:π]nFNb∀π&/-]⊗v∂M}"ε≡≡&∞∨L↑"ph$¬ hR¬$ααα∧∞ε∂⊗≥Tπ∂'$πRππ>N&Nvt∞Fzε,Tπ⊗.≤E`hR¬$ααα∧∧ααα∧∧εf.dπRεf]lw&B
|bππ,\F.6≥lV"π
}'&N⎇dε}2∞>G∩b∞↑ε&∂L\@hR¬$ααα∧∧ααα∧∧ααα∧∧απ&t
f/:
LVv?M¬`hR¬$ααα∧∧ααα∧∧ε.vL4βjπL↑&nNl≡F␈∩=ε∂⊗≤>F/∩aQ"αα%⊃PPh!Q"αα∧∞π⊗}<\G/⊗T∞&.∞N∞7'⊗≥lrG6≡$π∨''$ππ∨N-⊗v;1Q"αα∧∧ααα∧∧ααα∧∧ααα∧∧ααα∧∧απ6≡$εf.g$εNwL\v/∪1Q"αα∧∧ααα∧∧ααα∧∧ααα∧∧ααα∧∧αε.lL3Rε≡86NJ↔1PPh!Q"αα∧∧αε⊗\⎇⊗rα¬$π⊗.≤Nπ∨'-≥f:α%⊃PRα∧∧ααα∧∞Vv&↑,FO∩π'Rε6≥N6+XQ$ααα∧∧ααπ⎇
⊗f*¬
⊗v≡≡"βcdλVv&5∀ε∞vD
f␈"]vbεMqPRα∧∧ααα∧∧αε⊗\⎇⊗ph$∧ααα∧∧ααα
_bεNl8
≡H∂ ⊂≥w22i_t0q⊂≥42w undeRdir := not ufderdir
          elsE if len < maxstpinglength theN
            begin
            lEn := len + 1;
            if undeRdir @QQK\AMie'Yα+:e↓Siβ';≤¬ε∂∩¬4β∪↓Q"αα∧∧ααα∧∧ααε]HlT≤⎇≤K=→;W$πO(~-lz_<AQHλλ∧∧λλλ∧∧λλ→-l∞c"D∧λλλ∧∧λλλ
l>≥_m↓ ¬⊂⊂λ⊂⊂⊂⊂λ⊂⊂2w→εA⊂⊂λ⊂⊂⊂ %nd (
 readpstring *) ;

( ∀@@@@@@AY←=Wk`@4AY←←,Ac`Aβ##∃β&KK↔∂&K[∃β>{K⊃8hQ↓(∀R↓)↓↓α↓↓↓↓πβπKπjβ⊂⊗O.8
∧π(→R.9z⊂0Xqrx:_q62P→4y2q]4{2P≥wy2↔βE⊂∃⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ4v6"Yβad = lacT+1 accaptable directive word.
 *)


    function l@=←Wk`!MSegPXASY1KOCXhAISe∃GhRt↓ISeK
hv~∀4∀@@@@AmCH~∀@@@@@@↓HtAI%eKGhl@PTA1←←Wk@AY←←@AS]I∃p@TR4∀~∀~(@@@@AEKO%\@PT↓Y←←WU`@TR4∀@@@@@@A⊃SeKGQc7SY1KGCYt@tzA]←eHv4∀@@@@@@A⊂@tzA→Seghl~∀@@@@@@↓oQSY∀@QISIKGigmI;6ct@x|A]←eI6E:RA←H@QISIKGigmI;6et@x|A]←eI6I:RA←H~∀@@@@@@@@@@@QISIKGigmI;6gt@x|A]←eI6M:RAI<~∀@@@@@@@AH@hzAgk
FQHRl~∀@@@@@@↓YP∨?←+A↓ijβ⊂4)α↓↓↓↓ε+;⊃↓BQβ3?}[WA↓RI↓l4Ph)!$∧ααα∧∧ααε≥nπ/"¬Pππ⊗|<W∂~
→gπ/DλFO⊗\:FO6UaPRα%⊃PPh!Q"αα∧∞π⊗↑<XG/⊗T
⊗wπ↑LCXh!Q"αα∧∧απ6≡!PRα∧∧ααα∧6CR≡6≡N↔4αBR
<WJε=↔ε∞>LW∩α%⊃PPh!Q"αα∧∧αε⊗\⎇⊗rα¬$εNw∞ZF"α%⊃PRα∧∧ααα∧
⊗ $~;Xm<H∂$
≤_<L]H≥~]A"H∧∧λλλ∧∧λλ_L\z;C!$λλλ∧∧λλλ∧
Y>≥=∞c"D∧λλλ∧∧λλλ
<αrx$[8⊂≥≡H5rr`0inp + 13
          while (inchar <> rparen) and not eol do
            beei`≤~(@@@@@@@@@AGPα↓aeβ/βC↔IFK;∂#∂⊃%l4R↓↓↓↓α↓↓↓↓α↓β;↔G#∂!lhQ↓↓↓α↓↓↓↓α↓↓β'2β∂3π≤ε5↑≡UfNw∞ZF≡F≤ π&F]aPRα∧∧ααα∧∧ααα∧∧ε≡∂<Tε≡B
|`hR∧∧ααα∧∧ααα∧∧ααα#"ε/∞
FN≡≡L&f∞βZ`⊂∞≤¬ cHaracTer(nul)0⊗~(@@@@@@@@@@@@AFt~(@@@@@@@@@@@@@@AE∃KSL~(@@@@@@@@@@@@@@AG @tzA
QCeC
iKdQ9kXRv4∀@@@@@@@@@@@@@@A%H	β∂@∧βcR8↔≡.=∧π&F]aPRα∧∧ααα∧∧ααα∧∧ααα∧∧αε⊗\⎇⊗ph$∧ααα∧∧ααα∧∧ααα∧∧ααα<↔≡.=∧βSj9βXh$∧ααα∧∧ααα∧∧ααα∧∧ααα
Mw>/,<↔≡*π'Rε≡≡8	,=λ∂∂D
];β!$λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧9Yβ!$λλλ∧∧λλλ∧∧λλλ∧∧λλ⊃-l∞c"D∧λλλ∧∧λλλ∧∧λλλ∧∞H→
≡Xzπ'(_r≡X8⎇↑J≤→.
;y
'1"Hλ∧∧λλλ∧∧λλλ∧∧λλ~π$~≡<
;H∞GT_z_.8⎇→.%≠];¬↔c"H∧∧λλλ∧∧λλλ∧∧λλλ
7H~y,↑~;\∧πO(≠N]8Y<Eε	λ$ε+λ¬D≠8>
<9<∧ε,-,%↔c"H∧∧λλλ∧∧λλλ∧∧λλλ∞WH≥;LL<Xz≡H∞O$z_<L≤⎇→<E
];
'1"Hλ∧∧λλλ∧∧λλλ∧∧λλ≥g⊂4w;Zr:4⊂∞≡P7:[q2y∀ZX⊗⊂P_V⊂≠ts⊗⊂≠p|4{Zr:4⊗λ_XZZ
]FE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂_60w5NεA⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂"[2εE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ2v9bCE⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ12st[εE⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂2y9≠y_P≥∂P1t;
              error(1101)
              end
            end;
          if inchar 9 rparen then↓]Kqi
P~∧@@@@@@@AK1gBAKIaWdPDb`dRl~∀@@@@@@@AS]AcCmJ4∀@@@@@@@AKMH4⊂@@@@@@A∃YgJ~(@@@@@@@@↓EKOS8~∀@@@@@@@ASL↓GYCGβ~g'l9ε∂∃β+Y
≤z=∞M→;C!∧λλλ∧∧λλλ∧∧λ~y,↑~;\∧πO(≠N]8Y4Eελε⊂⊗H_V⊂_⊂6p|~p¬ep, 1151)
∀@@@@@@@AK1`∂*
<V/ε≥nαβST	6.∂
→gααTε∪Hh$∧ααα∧∧ααα
_N∞Y<p~≠y2FEλ⊂⊂⊂⊂λ⊂⊂⊂⊂→w2εEλ⊂⊂⊂⊂λ2s2 (* i@9a`↔S ↓)%↓β1P@! ¬∀*      hitep¬C@1αiβCK|∧6/∨4λ
≡→<X-D→~0→→qz4`6e*~∀TR4Ph  (αHλ∧∧≤≤[l<αr:`2e li@QKeCXl~∀4R↓↓↓↓αβ[πHhQ↓↓↓α↓↓↓β≤¬β@$_8p⊃Zt|∃@
∃⊂6 )teral characte@H@TR~(@@@@@@ARhASMi∃K@↔IX∧αBR
Hm}λ~0↔→2|⊂∃
F@
        litlengdh8 inte`∂KdβY↓!$λ]Y⎇~∧
βs⊂ ,itstring *)
∀@@@@@AQSIMie@'v9`∩π∞8
∞4p∞gl@P@)∧∧↔ε?]\Vwα
x	D
α4z2\αa`_Aα#'K↔≤εFO6T¬"HhαC"AQHλλ∧∧λ_Y,@tp∞ (* li@QKeCXTR4R↓↓↓↓α↓↓β3LεFf.βY⎇
∧∞O(επc"H∧∧λλλ∧∧≤Y0⊂Y89z9~w3T6~z9z9~w3V⊂≠4z6 %ngth0AP≠WbI`_h$∧ααα∧∧αε6β|@⊂~P≥≡@P:7P≠4z6 %ngth↓IV~∀@@@@@@@A	KGS\4⊂@@@@@@@AGP@hzAYSQ`∂SKLs⊗mFiX4)↓α↓↓↓↓α↓↓β'2β∂!↓h∧ε/G
H
,==_[≥Xh⊂~~2s⊂+\αite1(b`→C9RR
∀@@@@@@@Aα+3O∃¬;@⊗OLV∩F≡¬⊃PBα∧∧ααα∧∧αε.βY≥CE⊂⊂⊂λ⊂⊂⊂⊂≥y0p∀elh4R↓↓↓↓αβ↔;⊃αA)β3LεF/⊗≥DαRJ∧εc!↓ ¬∀*     margin % Prh∂GKβ≠@~ε\≡& =8π⊂"~y2q`4ive.
λ ")
λ∧⊂∀!Q"αα∧
πε@xy0∩≥y2P&Xy3t`.9
∀~(@@@@AeC@⊂h!↓↓α↓↓↓↓∧∧6CR≡6≡N↔0αBR
<WJε=↔,8⎇→.∧λ¬∀FBαλ
∧~(@@@@AEKO%\@@!Rβ7πK>K9↓%⊃P@$λλλ∧∧λλ∩,@⊂4w1Z0y⊂≡H4∧paren then~∀@@@@@@@Aα∪↔∂'ph ∩α∧∧ααα∧∧αε@Y>≥=∞c"D∧λλλ∧∧λλλ
rrx -ar  4tAWKKββ7πIαY↓E@1Q"αα∧∧ααα∧∧π>F≥H	$¬~;Xm<H∂πd≤Xλ !p¬KLR↓C]HAαs?Qβ,¬vbεMqP@$λλλ∧∧λλλ∧∧λ_Y,@tp∞
            chp	`*∞X∞<J~-lz_<E↔c"H∧∧λλλ∧∧λλλ∧
β2|:_t≥FEλ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂4s⊂_v0p∪@M0∂∂"h¬fn∂,⎇⊗v≡≡"πεXAQHλλ∧∧λλλ∧∧λλλ∧x8	`% ch @=Hλ (αHλ∧∧λλλ∧∧λλλ∧∧λλ⊂∃Nα ke@∃aP↔π⊂∧β@'αP7:[q2y(0, -bP⊃↓αaβ .≥
6.<λε⊗αXT]CE⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂6≥λ4∧ef@Q[CeO%\@tzαβ;@.\,W%λ
L9]≠,≡Yz0↔⊂_⊗⊂~w34`.itp∩X`R`,hQ↓↓↓α↓↓↓↓α↓↓↓↓α↓βII∧ε&N>∞MV∂⊗⎇→bβST	g.n,XEεlλ∞4st:≠py3t[⊗⊂_⊗λ4p∞f@%]Sir0@`@%Xh!↓↓α↓↓↓↓α↓↓↓↓α↓↓βd;-hhQ↓↓↓α↓↓↓↓α↓↓↓↓α↓β↔≠ h ∩α∧∧ααα∧∧αααYG<α@
        validate(rightmargin, min, maxmargin, 152);
          validate(leftmargin, 0, rightmargin, 153);
          marsave
          end
        else
          begin
          if class[inchar].digit then
            keepmar := number(0, - 1, 0, maxkeep, 151)
          else keepmar := keepmar - 1;
          marrestore
          end;
        nchars := leftmargin;
        outline[1].nbl := nchars * charwidth
      end (* margin *) ;

(*       option - process option directive.
 *)


    procedure option;

      var
        ch: ascii; (* key character *)


      begin (* option *)
        if inchar = lparen then
          begin
          nextch;
          keepopt := keepopt + 1;
          while (inchar <> pparen) and not eol do
            begin
            ch := upper(inchar);
            nextch;
            if cLass[ch].optionchar Then
              case ch of
                e: printerrorq := switch(true);
                f: Fill := switch(trqe);
                j: badjustify := number(0, - 1, 3, infiniTy( 265) - 2;
                k: keepopt := number(0$ - 1, 0, maxkeep, 251);
                l8 leftjustify := switch(trpJRl~∀@@@@@@@@@@@@AZhA[kYQSaYK	YC]WL@tzAMoSiG Qiek∀Rv~∀@@@@@@@@@@@@↓`tAK9gkeJH@tzAMoSiG Qiek∀Rv~∀@@@@@@@@@@@@↓dtAe%OQiUUgiSMd@tzAMoSiG Qiek∀Rv~∀@@@@@@@@@@@@↓ftAgACGJ@hzA]k5EKdPDX@Z@DX@bXfX@dXlR@Zbv~∀@@@@@@@@@@@@↓jtAg!SMik@@tzAMoSiG QMCYMJRv~(@@@@@@@@@@@@AEYC9Vt~∀@@@@@@@@@@@@↓K]H~(@@@@@@@@@AKYMJ~∀@@@@@@@@@@AEK≥S\~∀@@@@@@@@@@AKIe←dbtzAG v~∀@@@@@@@@@@AKeI←dPd@bR~∀@@@@@@@@@@AK9H~∀@@@@@@@@@↓K]Hv4∀@@@@@@@ASLA%]GQCH@zAeACeK\↓iQK\↓]Kqi
P~∀@@@@@@@AK1gJAKIe←dPH`dRv4∀@@@@@@@A←aiMCmJ~(@@@@@@@@↓K]H~(@@@@@@AK1gJ~∀@@@@@@@A	KOS\4∀@@@@@@@ASLA
YCggmS]GQ¬e:]I%OShAQQK\~(@@@@@@@@@AWK∃a←ahtzA]U[EKd `X@ZbX@`0A[Cq-KK`XdjbR4∀@@@@@@@AKYg∀AWKKA←ah@hzAWK∃a←ahZ@bv4∀@@@@@@@A←aiIKgi←IJ~∀@@@@@@@AK9H~∀@@@@A∃]H@P(A←ai%←\@T$@v~∀4∀PT@@@@A=kiakP@ZAaI←GKgLA←kiAkhAI%eKGi%mJ\~(@TR~(~∀~∀@@AaI←GKIUeJA←Uiaki⊂v~∀~(@@@@AmCd4∀@@@@@@A
PtACMGSRvPTAW∃rAGQ¬eCGi∃d@TR4∀~∀~(@@@@AEKO%\@PT↓←kiaUiH@T$~∀@@@@@@↓SLAY%]KG←U]h@x`AiQ∃\~∀@@@@@@@AE∃OS\~(@@@@@@@@↓SLAS9GQCdzAYa¬eK\AQQK\~(@@@@@@@@@AEK≥S\~∀@@@@@@@@AeKa∃Ch~∀@@@@@@@@@@A]∃qaGP4∀@@@@@@@@@Ak9iSX@!S]GQ¬d@x|↓EYC],RA←d↓K←Xv4∀@@@@@@@@@Ae∃C@∪←␈∪⊃l4R↓↓↓↓α↓↓↓↓α↓β'→π;?K∪f+;∨SB↓qu↓~βS#↔pβS↔KnK;π3'KC∃↓Siβ3?}[WAβ∂≠Q1βNcQ$4R↓↓↓↓α↓↓↓↓α↓β↔3≡)βS↔⊗k';πg#gC∃βQuβ'g!l4)α↓↓↓↓α↓↓↓↓αβ'→β&+K7'v3SG∧)↓uβLcQβSF+84)α↓↓↓↓α↓↓↓↓α↓↓β.;'84R↓↓↓↓α↓↓↓↓α↓↓↓β/∪K?IC	AAeKX4)↓α↓↓↓↓α↓↓↓↓α↓βS↔⊗k';πg#gC∃βQuβ3π 4)↓α↓↓↓↓α↓↓↓↓α↓β↔;!X4)↓α↓↓↓↓α↓↓↓↓π;#'3*↓#';≤¬ε∂∩πGbπ↔≡&.r∀⊗v"
mw"ε]yBε&qQ"αα∧∧ααα∧∧ααα∧&.>≥aPRα∧∧ααα∧∧ααα∧∧ε≡Bπ'Rπ/∞W%~;Xm<J.aQHλλ∧∧λλλ∧∧λλλ∧
Y>≥=∞c"D∧λλλ∧∧λλλ∧∧λλ~,@⊂1v !ss[cH].`∨kQakiG!CdAi!K\
∀@@@@@@@@@@@@↓GCgJ↓GPA←_~∀@@@@@@@@@@@@@@↓JtAKαS↔∂QβQuβO>KS∂!F3π3O*Id4)α↓↓↓↓α↓↓↓↓α↓↓↓↓α↓βAiπβπWO*↓i`*∞:vO&=
L9≤y%↔c"H∧∧λλλ∧∧λλλ∧∧λλλ∧∧≤nH∞t4s:λ≥≡P7≥vq2i
_⊂ - 1, 0, maxpπQSMPX@b`XhRf~(@@@@@@@@@@@@@@AjhAkMI∃aCmC%X@tz↓`∂←'&≠!#S↔+∃%lhQ↓↓↓α↓↓↓↓α↓↓↓↓α↓↓↓β;Qβ?W';'∪SB↓`∪J
nVn⊗↑!εn∂
x
m≤≥~⊗λ⊗P_@, 0$ @5Cq←o%IiPXb`jHαI`_h$∧ααα∧∧ααα∧∧ααα∧∧αε⊗β_;M↔@εE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂2w2βE⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ2v9bCE⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂12Yβi`≤~(@@@@@@@@@@@@AKee=`b@@Siβ∂!Xh)↓↓α↓↓↓↓α↓↓↓↓α↓↓β↔↔∪?I!↓AE$hQ↓↓↓α↓↓↓↓α↓↓↓↓α↓β↔≠ h!↓↓α↓↓↓↓α↓↓↓↓αβ↔;⊃Xh!↓↓α↓↓↓↓α↓↓↓βL1β'≠≤¬ε∂∩¬Pλ∞80y2[⊂:42[⊂72l≥1tεEλ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂2v 3e error(!002);
λ            sHift := shidpλ@T↓GQCE]SAiPβX4)↓α↓↓↓↓α↓↓↓↓∧¬FNv\9w.wDπ#jβ↓Q"αα∧∧ααα∧∧ααε]l@hR∧∧ααα∧∧ααε]l@hR∧∧ααα∧∧ε.g<Tε/↔-z"C∧∩αHhαHλ∧∧λλ⊃-lλ
αD
⎇=≤∞↑→λ
E∀∞c"AQJ
H∧∧λλλ∞<X9n<~⊂P897XpyyP≤0y0s\αaph↓ISeKα≠S'[*p4)↓RH4(Q!P@$λλλ∞∞Yxp∩Y8¬re paragpaphl~∀4R↓↓↓↓αβ[πHhQ↓↓↓α↓↓↓β≤Aiβπ≤∧6NK4¬αRε<[∩ε≡≡&∞∨LZ"αR⊃Q hPQ$ααα∧∧ε⊗.⎇→bαB$λ≡X9|L≡~λ
E⊃ Hλ∧∧λλλ∧∞x=P∩\0y-uYpx80\.W1P∞≤¬ papaco@U]hv~(@@@@@@AS_AS]GαCπI↓hβ3Cπ⊗+9βSF+84)α↓↓↓↓α↓↓↓β⊗+↔'_hQ↓↓↓α↓↓↓↓αβ;↔c&≠!l4R↓↓↓↓α↓↓↓↓ε[↔/∞λ↔∩β'Tε@<9<∀≡H
`ε↔c"H∧∧λλλ∧∧λλ∀≡X8{n]]λ∞GTλ
FB⊂⊂⊂⊂λ⊂⊂⊂⊂λ;t4`,e  i@9GQC@⊂∧βc@H≤\≡Y;B$8π2 nkt @∃←XAI<~∀@@@@@@@@@A	KOS\4⊂@@@@@@@@@AGαA↓iuπ+CC↔⊂C';∂FA%@1Q"αα∧∧ααα∧∧ααεl[π&≡¬1PRα∧∧ααα∧∧ααα
_bε≡L≡7
↑=R`._8X,↑X8∩=_<@⊂≥42wεB⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂_pyrP_t⊂7cβE⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂1]λ80y0Xwzw:λ≥~P'≥vq2i
_⊂ - 1, 0, infinaty, 0);
                f: paracha`$pp∃β≤¬ε∂⊗≤:F/∩
nVbKαc"D∧λλλ∧∧λλλ∧∧λλλ∧
,H⊂⊗≠qurb→2w:⊂∞≤¬ numberλ5, - 1( 0, rightiargin - mi`≤XfjjRl~∀@@@@@@@@@@@@AVhAWKKββCπIβQuβ;.k↔I@εαbαTε∩bβ¬Dεn∂
<V/αDε3+
↔1PBα∧∧ααα∧∧ααα∧∧ααεg!PRα∧∧ααα∧∧ααα∧∧ααα∧&.>≥aPRα∧∧ααα∧∧ααα∧∧ααα∧
⊗ $≠[u∧{_<n≠z;Xm<W+LM9z5∧∞~→;AQHλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧≠];,,<Z;Lt∞O(
n;9[n
*_r≡X8u↑J_[≥Zj+∧εl
`∀CE⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂→v9rP≠:vq2\4w3@ :9 numeric9
                  numberwidth := number(3, - 1 0, maxnumberwidth, 356)
                  end;
                p: parapage := number(0, - 10@`XA%]MS]%irX@@Rv~∀@@@@@@@@@@@@↓ftAa¬eCgW%`@tz↓]k[E∃dP`X↓aCeCMWS`X`XA[¬qgWS@X@fj\Rv~∀@@@@@@@@@@@@↓jtAY=GWKI⊃K]h@hz@JA9k[EKHP`H@4@bX@@XAS]→S]SidX@`Rl~∀@@@@@@@@@@@@AE1C]Vt4∀@@@@@@@@@@@@AK]⊂~∀@@@@@@@@@A∃YgJ~(@@@@@@@@@@@A	KOS\4∀@@@@@@@@@@@↓Kee←Hb@tz↓GPv~(@@@@@@@@@@@A∃ae←d f`bR4∀@@@@@@@@@@@↓K]H~(@@@@@@@@@AK]⊂v~∀@@@@@@@AS_AS]G!Cd@zαβKCπ⊗+9βSF+9β;/CS∂ hQ↓↓↓α↓↓↓↓αβ↔3O*β↔KK␈⊃!MA⊂¬∪Xh$∧ααα∧∧ααα∞↔↔≡≡hSXh$∧ααα∧∧ααα]f h$∧ααα∧∧αε.N<RεNd6f∂>;6Nv=↔∃jlM⊗.OD
FF.aQ"αα∧∧ααα∧∧ε⊗.⎇≥`hR∧∧ααα∧∧ααε<\Wπε≡ βSJ
nVn⊗↑%βαb¬Tβ
bε¬Bεn∨
6./¬Dβ≠+∃↔0hR∧∧ααα∧∧ααπ≡'⊗/>Mw⊗+1Q"αα∧∧ααα∧∧πε∂,≤6␈.nDβSjε↓PRα∧∧ααα∧∧αε.lAPRα∧∧ααα∧Vg≡QQ"αα∧∧ααα∧∧ε⊗.⎇≥`hR∧∧ααα∧∧ααε<\Wπε≡ βSj
<V/π≡"αjε↔0hR∧∧ααα∧∧ααπ≡'⊗/>Mw⊗(Q$ααα∧∧ααα∧Vv Q$ααα∧∧ε.vD¬αRπ≡&∞∨,≡εBα%∀βXh!Q"BR∧∧ααα∧∞&.∞Lmw⊗j¬Tπ⊗.≤Dπ&FTf␈⊗T∞7ε.=≤fN≡≡M⊗zπMtπ&FTf␈⊗T'.6l↑"ph$¬"Hh!Q hR∧∧αππ-|6.'↑,Rπ⊗\≤F6␈-W0hPQ$ααα∧∧π6∂!Q"αα∧∧ααα
mv↔⊗≤=6/#$&}}L\⊗sZ¬¬"εNd
fzεL.&∞≡<↑BεNd∞FF*mw⊗j¬%⊂hR∧∧ααα∧∧π∂.}LSRε≡<6NK4¬αRε}↑F/∩∞≡V␈&T6F∂,≤7&/$f␈∩∀π∨'-≥f:α%⊃PPh%¬"αα∧⊗&&=∧αjε≤LBε
=ε∂⊗≤>F/∩∞Mrπ&Tε6␈-U`hR¬!PRα$∧απε≡,⊗jε=∧αjε=↔⊗∞>LW∩πMtε∞&EaPRα%⊃PPh!Q"αα∧∧αππ-|6.'↑,Rε∞LL6BF=π"ε∂<=⊗JK1Q hPQ$ααα∧∧ααε,\vNr¬¬"ε∞LL6Bα%⊃PRα∧∧ααα∧∧αε6}-Vvf]lw&Bπ'Rε6}-Vvf]lw&B¬4βXQ$ααα∧∧ααα∧f␈⊗]lWG%<mw⊗nmLVv?MRβST6@h$∧ααα∧∧αε.lDαBR≤F&≡∧¬"Jβ1Q hPQ$ααα∧∧ε⊗.⎇≥bαB$∞&.∞Lmw⊗j¬%⊂hR∧∧ααα∧∧ε6␈-]ff.l}FBβ'TββXQ$ααα∧∧ααεm|'⊗∞=<W"β'Tπ'↔\W0hR∧∧ααα∧∧εN2
≥f≡F≡$βjεN↔⊗.d∞FF.aQ"αα∧∧ααα∧∧ε⊗.⎇≥`hR∧∧ααα∧∧ααεl←π&≡π1PRα∧∧ααα∧∧απ>
≥F*α
≥f≡F≡$βcr∞.ε∂⊗]e∩ε∞lDεv␈DV}bMphR∧∧ααα∧∧ααα∧&.>≥aPRα∧∧ααα∧∧ααα≤F&≡¬
⊗v≡≡"KXQ$ααα∧∧ααα∧∧αεv|.&∞≡<↑BβST
f}↔,≤6↑/D⊗v"¬
⊗v≡≡"βcd
F↔⊗≤=6/"↔1PRα∧∧ααα∧∧ααα
≤bε≡L≡7≥↑≥l6F∂+Ug∂.}LRπ&]`hR∧∧ααα∧∧ααα∧∧αε⊗\⎇⊗ph$∧ααα∧∧ααα∧∧ααπ≡]w&*π'RεNl=ε∂∪1Q"αα∧∧ααα∧∧ααα∧
f/GL=βXh$∧αααif inchar = quote then nexpch
              else error(403);
              addch(quote)
              end
            else nextch
            end;
          if incHar =↓eaCe∃\AiQ∃\A]KaiGP~(@@@@@@@@↓KYgJ↓Kee←HPh`d$v~∀@@@@@@@AS_AM←e5]YK]≥iP@z`AiQ∃\AYS9KG←k9h@tz↓S]MS9Sir~(@@@@@@@@↓KYgJ↓SLA]=EeCG-KhAi!K\AC⊃IGPQ1EeCG-KhRv4∀@@@@@@@AK]H4∀@@@@@@A∃YgJA1S]KG=k]h@hzAS]→S]Cid~∀@@@@AK9H@PT↓eKCI→←eJ@(R@v~(~∀PT@@Ae∃CAS]`@ZAe∃C@AC8AS]I∃pAK]Qer\~(@TR~(~∀
∀@@AaI←GKIUeJAe∃CAS]`v~∀~(@@@@AmCd4∀@@@@@@A%]IKphAagiIS]NvPTASαs∪↔aε∪W≠-⊃↓)$hQ↓↓↓α↓↓↓βNs∪↔cf+;∨SCQβ';&+∨/'4αBVL]f?&∧
v $~;Y←λ
J!QHλλ∧∧λλλ∞πH≤∩-o→;]∞/.h
¬$≤≠z-n→<H∞Mh≠Y.t~;Y←λ→;NN↑(
E⊃"Hλ∧∧λλλ∧∂.H
≥]→9l↑Nh
¬$→y;L↑X;λ
≥Y→6∧∞X<Z,≤[→(¬%#"C!!"Hλ∧∧λλ_L\z;H¬¬H≤Y,≤~;Y←λ
J!QHλλ∧∧λλλ
≥Y→>
L;Y⎇
∧∞O(επc"H∧∧λλλ∧∧≤Y8,N≤⎇≤M≥Yj~-l→>∧
;Y→/
→;YnMλ≠N]
.c!$λλλ∧∧λλ≠L↑j≤
'1"Hλ∧∧λλλ∧
9H~-l→>≠]Y⎇~∧πH≠8/
;↑≠]Y⎇~∧∞~→3D
;Y→/
α2w3]4⊂≥≡H6p|4[<62w→z4≥FB⊂⊂⊂⊂λ⊂⊂⊂;Zz4⊂8↔⊂27FB⊂⊂⊂⊂λ⊂⊂⊂⊂λ12st[εE⊂⊂λ⊂⊂⊂⊂λ⊂⊂<6λ≥≡P4[22|6→w3z4∞FE⊂⊂λ⊂⊂⊂⊂λ⊂⊂<8λ≥≡P8_srw:[q2y
CE⊂⊂⊂λ⊂⊂⊂⊂λ⊂37iλ<_P≥∂P_P*≠P4w2→|62w→z4⊂2≠P<-|nP≥≡H4w22↑-|⊂nNFE⊂⊂λ⊂⊂⊂⊂λ⊂⊂3'\⊂<_P∞≤P4g→2|6"[3z4⊂
P_P*≠P6p|~w<62[3z4→7P<-↑_jP≥∂P7:vβE⊂⊂⊂λ⊂⊂⊂⊂λ⊂2w2∞FE⊂⊂λ⊂⊂⊂⊂λ4s⊂$[<10yYP≡P7~v⊂:4→w⊂4`.xbas@∀@tzA@~∀@@@@@@↓KYgJ↓S]qY¬gi<]9Kqh@hzA`v4∀@@@@@@A%]qYCMh@tz↓`~∧@@@@A∃]H@P)`↔π&K;a↓RI↓l4Ph)!$∧ααπ,↑6/"¬Pλ∞∞[xq.yP92\p¬t Direc@QSmJ\4∀@TR4∀∩∧~(@@@AAeP∨∂,#WK∃∧ε&/≡↑C0hPβ"H∧∧λλλ∞l<C"D∧λλλ∧∧λ→εD~<Y,>∞h
¬$≤Y4l↑λ→~.,8⎇~.l(≠X-\(
J!QHλλ∧∧λλλ←_y0_≥≥⊂17[v2pw∞P⊂λ* exce@AhAWKeo←eH↓SfAaβ∪↔O↔w!↓)$hQ↓↓↓α↓↓↓β6KCOQRβ??d+π9mαA)β≠Lε'∨"M↔⊗.>M↔6*
l⊗n*¬%⊂hR∧∧ααα∧∧π>F≤=βRεM≡'≡∂G4αBR∞⎇εN≡∧λFO⊗\:FO6↑4π&@h≤Y.<αz⊂∃
FEεEβE⊂⊂⊂λ⊂⊂12Ytp∞ (* reset *)
        if iNchar= l`aren Thef
          begin
          fi@Ich@ttAiek∀v~∀@@@@@@@AKaGKahtrAM¬YgJV4∀@@@@@@@AoQS
P@tz↓0∞ulhQ↓↓↓α↓↓↓↓αβ;↔c&≠!l4R↓↓↓↓α↓↓↓↓¬;#'3*β';∂FI↓qrβ@↔ε≡,VrεMqPRα∧∧ααα∧∧ααα
_bεNl8
≡H∂ ⊂_4∧ank theN nextch
            els@∀ASLA
YCggmS]GQ¬a:]Y∃i`∪↔∩βS#↔ph)↓↓α↓↓↓↓α↓↓↓↓αβ↔∨Np4)↓α↓↓↓↓α↓↓↓↓α↓βK↔∞#←?K!X4)↓α↓↓↓↓α↓↓↓↓α↓β⊃↓Siβ3?}[WA.&*b
→FbKαc"D∧λλλ∧∧λλλ∧∧λλ~,@⊂2⊂ )n
α                 [cou, frm inp, inx, mar opt, out pag par0AgKX0AgEhα`4)↓α↓↓↓↓α↓↓↓↓α↓↓↓↓¬#S2u¬##↔aQ"αα∧∧ααα∧∧ααα∧∧απ>
_6Bβ'Pπ>F≤9ααZ<EhhαHλ∧∧λλλ∧∧λλλ∧∧→;⊂→YP4s⊂→⊂≡P %xc then~∀@@@@@@@@@@@@↓SLAMαK@↔∨D
FF.dλWF≡↑λ
∧πO(⊂~≤8¬e
                eds@∀AKee=`Pbdβ	E$∀R↓↓↓↓α↓↓↓↓α↓↓↓β.cG∧∀R↓↓↓↓α↓↓↓↓α↓↓↓↓αβ↔∨Np4)↓α↓↓↓↓α↓↓↓↓α↓↓↓β-∪K ?&∩αβSTλg.fN⎇wε#1Q"αα∧∧ααα∧∧ααα∧∧αεNdBβJ
_
D≥~→-d→<\M}J$FεJ#"D∧λλλ∧∧λλλ∧∧λλλ∧9≤p∩H2y97\∀_Y12)¬
                end;
λ              d¬Segβ!↓iu∧∧f∞g<QPBα∧∧ααα∧∧ααα∧∧ε.vAQ"αα∧∧ααα∧∧ααε]HlQ ¬⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂12cZw
              e@IaP∨Iλ↓`∪@(~0↔_t0p∩l~∀@@@@@@@@@@AKeE=`Pbdβ↓E%LhQ↓↓↓α↓↓↓↓α↓↓↓↓∧s↔cS≤@4)↓α↓↓↓↓α↓↓↓↓α↓β↔≠ π0hR∧∧ααα∧∧ααε≤dε/F<X∞D≥~→-d≥z~,=λ∞O$x\Y%eZ;⊂⊗↔P⊂
 @]QSGP4⊂@@@@@@@AK@; h!↓↓α↓↓↓↓∧∧Vg≡T
vFN=βC@(∩xN,+KZ-Mα.]FB⊂⊂⊂⊂λ⊂⊂⊂ 7hide not @∃←XAI<AUKqQGPv~(@@@@@@AS_A7←kPXAaC≤XAMe5:@@)∧εvFN=∧βc@H⊂
nH:42wβE⊂⊂⊂λ⊂⊂⊂⊂λ⊂12sZwαE⊂λ⊂⊂⊂⊂λ⊂⊂⊂7→{x0sYT4w3~w0z<J]FE⊂λ⊂⊂⊂⊂λ⊂⊂⊂4Yα liNecoent < Infinity then advafc@∃IP∨Khh)↓↓α↓↓↓↓α↓β↔≠ π0hR∧∧ααα∧∧π⊗.≥m↔&N≥I↔V*∞⎇εN≡¬⊃PRα∧∧ααε]lBαB$λL↑y=⊂
∀P⊂≠

α((@@@@↓gCYKα≠Q↓5¬βK/∂,ε7
π<X\⎇λ→
≡Y8p~~{2WεB⊂⊃∀FB∧EεEλ⊂⊂⊂(≤5qr`$ure selec@Pp4(hQ↓↓↓α↓βKπ⊂h!↓↓α↓↓↓↓¬AE!βA⊃`∩ε≥nF.≡↑#2αB$λ	l]Y<X-D~;Y←λ≥P⊂\4pq6→yP∃∀CE

λ      beGin ((AgKYα+∂Q↓RH4)↓α↓↓↓↓αβ'	βL¬f≡F≤ λπT≠__.,;H⊂~~2sεEλ⊂⊂⊂⊂λ⊂⊂⊂⊂_2stwβE⊂⊂⊂λ⊂⊂⊂⊂λ⊂72l≥1t∃FB⊂⊂⊂⊂λ⊂⊂⊂⊂λ33y x1 *= 0 to iaxpace do se@1KGiSα{:oaα≠RβSTλ	L≥≤y.aQHλλ∧∧λλλ∧∧≥z~-L(
~-lz_<Dπ∂H⊂→≤0y2g
P0w2λ73p∀eol Do
            ib c@1Cgg7%]GQCI:P≠∪L;'Qβ&C↔8Q$ααα∧∧ααα∧∧ααα,V.NβC"D∧λλλ∧∧λλλ∧∧λλ⊗ε∀∞O(
n;8Y.¬λ¬T+λε¬λ≠8/∞_9y%D
,
¬↔c"H∧∧λλλ∧∧λλλ∧∧λ~9D
;Xp∀_y⊂≡@ colon then
                begif
                nextch;
                forx1 := x1 to number(x1(λApDXApb0A[CqACOJXj`hR↓I↑~∀@@@@@@@@@@@@@AgK1KGiS=]7pct@tzAQekJ~(@@@@@@@@@@@@AK]H4∀@@@@@@@@@@@↓KYgJ↓gKYK
iS←]mpc:@hzAieUJ~∀@@@@@@@@@@AK]⊂~∀@@@@@@@@@A∃YgJ~(@@@@@@@@@@@A	KOS\4∀@@@@@@@@@@@↓SLAS9GQCdx|AE1C]VAQQK\~(@@@@@@@@@@@@AEKO%\~∀@@@@@@@@@@@@A∃ee←dD@tzA%]GQCHv~∀@@@@@@@@@@@@A∃ae←d j`bR4∀@@@@@@@@@@@@AK]⊂v~∀@@@@@@@@@@A]KaiGQCH~∀@@@@@@@@@@AK]Hl~∀@@@@@@@ASL↓S]GQ¬d@zAIaCeK8AiQK8A]KqQGP~∀@@@@@@@A∃YgJA∃ee←d j`dR4∀@@@@@@@AK]H4∀@@@@@@A∃YgJA→←dApD@tz@@Ai↑A5CqaC≥JAI↑↓gKYK
iS←]mpc:@hzAieUJ~∀@@@@A∃]H@P(AgKY∃Gh@T$@v~∀4∀PT@@@Ag=eiS]`@ZAg=ehAC9HAae%]hAS9IKpA∃]ieS∃f\~∀TR~∀4∀~∀@@Aae=GKIkIJAg←IiS]pl~∀~∀@@@@↓mCd~(@@@@@@AM%egiS9ptAa%]qK]Qerv@ TAMSIghAK9ierA→←dAg=eiS]≤@TR~(@@@@@@AY¬giS]`tAaS9qK]iIrv@P(AYCgPAK]iIrAM←HAg←eQS]N@(R~∀@@@@@AYKMQoSIi tAS]QKOKdl@PTA0AgaK
SMSG¬iS←\TR~∀@@@@@A[CIOS\t↓S]iK≥Kdv@ TAZAMaKGS→SGCi%←\@T$~∀@@@@@@↓aCOK
←XtA%]iKO∃dv@P(A`AgAKGSM%GCiS=\@TR4∀@@@@@@AISOQi]SIiPhAS]i∃OKdvPTAd↓gaKG%MSGCQS←\@(R~∀@@@@@Ag←eQG←Xt↓S]iK≥Kdv@ TAfAMaKGS→SGCi%←\@T$~∀~∀ T@@@AaCeMJ@ZAACegJ↓iQJAM←eiS9IKpA⊃SeKGQSmJ\4∀@TR4∀~∀~(@@@@Aae←
KIke∀AaCeMJv~∀4∀@@@@@@AYCd~∀@@@@@@@A
PtACMGSRvPTAW∃rAGQ¬eCGi∃d@TR4∀~∀~(@@@@@@AE∃OS\@ TAaCIgJ@T$~∀@@@@@@@AYK→ioSIQP@tzdv~∀@@@@@@@A5CeOS8@tz@@v~∀@@@@@@@Aa¬OKG←0@tz@@v~∀@@@@@@@Ae%OQio%IiP@hz@dv4∀@@@@@@@Ag←eQG←X@hz@bv4∀@@@@@@@ASLA%]GQCH@zAYACeK\↓iQK\4∀@@@@@@@@@AE∃OS\~(@@@@@@@@@A]KaiGPv4∀@@@@@@@@@Ao!SYJ@!S]GQ¬d@x|↓eaCe∃\RAC9HA]←PAK←X↓I↑~∀@@@@@@@@@@AE∃OS\~(@@@@@@@@@@@A
P@tz↓kaaKHQS]G!CdRv4∀@@@@@@@@@@@↓]Kqi
Pv~∀@@@@@@@@@@AS_AGYCMg7GQt]g←eQS]qG!CdAi!K\~∀@@@@@@@@@@@@↓GCgJ↓GPA←_~∀@@@@@@@@@@@@@@↓XtAY∃MioS⊃iP@ttA]k[	KdPd0@Z@b0@`X@L`X@lTpRv~(@@@@@@@@@@@@@@AZhA[Ce≥S\@ttA]k[	KdP`0@Z@b0@`X@L`X@lTrRv~(@@@@@@@@@@@@@@A`hAaCO∃G←X@hzA]k5EKdP@X@Z@DX@`X↓[CqS9qYK]≥iP@V↓[S\Xll`Rl~∀@@@@@@@@@@@@@@↓dtAe%OQio%IiP@hzA]k5EKdPHX@Z@DX@`Xf`X@XlbRv4∀@@@@@@@@@@@@@@ALt~∀@@@@@@@@@@@@@@@AS_@QS]
QCd@tA`RA=d@QS9GQCdzAg[¬YY`R↓iQK\4∀@@@@@@@@@@@@@@@@@AE∃OS\~(@@@@@@@@@@@@@@@@@Ag←IiG←Xtz@Zbv~∀@@@@@@@@@@@@@@@@A]KqQGP~∀@@@@@@@@@@@@@@@@AK]H4∀@@@@@@@@@@@@@@@AKYg∀~∀@@@@@@@@@@@@@@@@@AM←eiG=X@tz↓]k[E∃`PbXZ@bXbXA[¬qS]q1K]Oi @ZA[%\X@lXdRv~(@@@@@@@@@@@@@@AE1C]Vt4∀@@@@@@@@@@@@@@A∃]H~∀@@@@@@@@@@AK1gJ~∀@@@@@@@@@@@@↓EKOS8~∀@@@@@@@@@@@@AKIeWdbtzAG v~∀@@@@@@@@@@@@A∃`K?∩AYAEHh)↓↓α↓↓↓↓α↓↓↓↓α↓↓β↔v 4)↓α↓↓↓↓α↓↓↓↓α↓β↔;!X4)↓α↓↓↓↓α↓↓↓↓εK⊃β'v≠#πIβiβKC∂∪↔9β&C↔9βv+cC∂@h)↓↓α↓↓↓↓α↓↓↓β.cO∃β-∪K?IC1AI$hQ↓↓↓α↓↓↓↓α↓↓β↔v 4)↓α↓↓↓↓αβ↔;⊃αA)βC∂∪O∃↓RI↓l4Ph)!	α↓↓↓β≡{KA↓jβG?K"βS#∃∧K;∪↔Bβ↔;S⊗K↔M8hQ↓)$hP4(4R↓↓↓↓αβCK?≡+∪WK*βO?K#X4(4R↓↓↓↓α↓↓β[∂⊂4)↓α↓↓↓↓α↓↓βARβC';F+;SKKY↓!)∧3?Iβ'∪π[↔↔≠';≥π##∃βLs∪↔aεc'OQαQ$4)α↓↓↓↓α↓↓↓β≠	1βM∪QβC'wC↔;S↔Im↓↓RβS↔7π→β≠?⊂βG?K&K;≥↓RH4)↓α↓↓↓↓α↓↓βaQβ';&+∨πIZ↓!)β>+;↔K∞aβ';&+aβ[∂∪'π firstinx↑ do
            begin
            xl := 0+
            nexp := lacTinx;
            fop x1 :9 1tk maxinxlength do x[x1] :9 nul;
            end≠
          wiTh lastinx↑ do
            begin
            xl := 0+
            nexpλ@ttA]CXl~∀@@@@@@@@@A→←dApD@tz@DAi↑A5CqS]aYKMOQPAI↑↓q7pct@tzA⊃KX~∀@@@@@@@@AK]HβX4)↓α↓↓↓↓α↓↓β'2βO?K&≠?1↓b↓AβSF+84$∧ααα∧∧ααα∧∧ε⊗.⎇≥`hR∧∧ααα∧∧ααα∧	⊗ $~;↑
L<⎇πGH≠Z-D≥~→-d~;↑
L<⎇↔E@4εext := @1CgiS9pv~∀@@@@@@@@AMCeMiS]qxX 6←∞BβSTλ
-o_X<lWc"H∧∧λλλ∧∧λλλ∧
9↑_L≡y(∞GT≠Z3↓QHλλ∧∧λλλ∧∧λλ⊂∩[2εE⊂λ⊂⊂⊂⊂λ⊂⊂⊂"[9rFEλ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂12`'in~∀@@@@@@@@A`@ttASMq	CgJ@Xh!↓↓α↓↓↓↓α↓↓↓βL∧bεNo
F∂∨DπCrεm→Bπ&XD
8π<6_yz/.nextp	`*
m⊗cXQ$ααα∧∧ααα∧∧απ>
_T≤λ∂πd≠Z0⊗λ27FEλ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂ "egin
λ              inxbaq`
@TtAa<]9Kqhv4⊂@@@@@@@@@@@↓`
I↓Siβ≠≡.7&Noπ0hR∧∧ααα∧∧ααα∧∧απ⊗↑λ	,≡β"H∧∧λλλ∧∧λλλ∧∧λλλ∞⊗(∞O$∞lNc!∧λλλ∧∧λλλ∧∧λλλ∧∧≤h@⊂∞≤¬ s1↑.ne@ahv~∀@@@@@@@@@@@@↓pb@ttAg←eQG←Xv4⊂@@@@@@@@@@@@AoQ%YJ@Q`b@xA5CqS]aYK@;?#!%β∞s⊂4	α↓↓↓↓α↓↓↓↓α↓↓↓↓α↓↓↓↓α↓#@/∞λW%≤↔CO}λλnJP≡P*\82y∧≤Y/↔<⊗|_nDJP27FB⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂,P≥≡P≡_P∃@FE⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂:w:~v⊂:x≤2y∀8↔↔<-|nTP≡λ8x82\α(s2↑,x[x1]);
              s1↑.nexp := p;
              p↑.ne@ah@tz↓`
IlhQ↓↓↓α↓↓↓↓α↓↓↓↓π↓↓iu∧K;c∂≠∀4	α↓↓↓↓α↓↓↓↓α↓↓β↔v 4)↓α↓↓↓↓α↓↓↓↓∧+;⊂4R↓↓↓↓α↓↓β↔v!↓!)¬≠?KQαQ%↓lhP4)!R↓↓↓↓πβK';"↓5βC⊗K;Qβ&C∃β'v#↔aβ.sSK'/→84	αQ$4(hP4)↓α↓↓↓β¬∪?∂↔'+K∃βπ∪';QXh(4	α↓↓↓↓α↓β[π⊂h)↓↓α↓↓↓↓α↓βAi¬β';c.sSKeZ↓!)β4¬w$≥≤X.l<\p∀[3P:4→P4w2→|⊂64\z⊂∃∀CE⊂⊂⊂λ⊂⊂⊂⊂λ⊂<_]λ4w:2Yp¬r; (* general ifdex variablE *)

(*     send1 - seNd one characteR to The o@Uiakh↓YSMJ8~∀@T4∀@T@@AaCICZAG @ZAGαCπKπ∨#↔Iβ&yβO↔v!84	αQ$4(hP4)↓α↓↓↓↓αβCK?≤+∪GK*βOπ;!	#∂!RβπO∂LKa%@1Q hPQ$ααα∧∧ααα∧&.>≥dαBR∞8	-l(
E⊃ Hλ∧∧λλλ∧∧λλλ
}=≠⊂∩[3z4∞α= o@UiQK]≥iP@Vbv~∀@@@@@@@@AoSi A←ki1S]K7=kiYK9OiQ:↓I↑~∀@@@@@@@@@@AE∃KSL~(@@@@@@@@@@@A@tzA
Pv~∀@@@@@@@@@@A]	X@tz↓GQCE]SIiP4∀@@@@@@@@@@@↓K]H~(@@@@@@@@↓K]H@ TAgK9Hb@T$@v~∀4∀~∧@@@@@AEKO%\@PT↓aeS]P@TR~(@@@@@@@@↓`@tz↓H'K≤εFNwefv/∞G0hR∧∧ααα∧∧ααπ⎇
⊗f*∞∧βcR
L↔∨&≥oαε&qQ"αα∧∧ααα∧∧ααπ⎇~FBπdε&xQ$ααα∧∧ααα∧∧ααα,V.NaQ"αα∧∧ααα∧∧ααα∧f␈∩∂α∩βSTε∩π&t
V∂⊗⎇≥bε&t∞6.vF∃ε⊗f≥m2KXQ$ααα∧∧ααα∧∧αααmwαπε⊂βCjε⊂λ∞Mh≤_,|8{s∧≠c"D∧λλλ∧∧λλλ∧∧λλλ∧
9H≡ε∀∂H≡
D≥~→-d≤y;LF*_[≥Zj#!$λλλ∧∧λλλ∧∧λλλ∧∧→;∀lT≤y;LF*≡⊗oε5*.aQHλλ∧∧λλλ∧∧λλλ∧{{]L↑]≠]-\Y<J
}=≠~-l+λ≠n↑≠→;L}~λ∂∞λ⊂⊗→s:;tY:4⊗⊂≠:vr`2ic);
              fkr x1 := 1 to rightwidth do send1(bhank);
              for x1 :9 pagecol + 1 tk xl do send1(x[x1]);
              writel@%]Jv~(@@@@@@@@@@@A⊃Sga←MJQMSβ∪GS'wA%l4R↓↓↓↓α↓↓↓↓α↓↓↓β6KCOSNsa↓ijβAl4R↓↓↓↓α↓↓↓↓α↓↓↓βα↓i`*m↔π∨M≥gErmlWG Q$ααα∧∧ααα∧∧ααα]f#XQ$ααα∧∧ααα∧FO∨
z6*FL≡7&No¬⊂hR∧∧ααα∧∧ε.vD¬αRπ∞-⊗w"¬%∩βXQ!PPh$∧ααα∧&.>≥dαBR∞9wπε≥oααR⊃Q"αα∧∧ααα∞λ↔↔≡U1PRα∧∧ααα∧∞6␈↔G1PRα∧∧ααα∧∞π⊗NnAPRα∧∧ααε]lBαB$
6␈↔M≥gBα%∀βXh!Q hR∧∧αε⊗\⎇⊗rα¬$ε&O,\7&OlTαRHQ$ααα∧∧π⊗/Xλ.A ¬⊂⊂λ⊂⊂⊂⊂λ72|:_t≥FEλ⊂⊂⊂⊂λ⊂⊂92Xp∧woRd;
        diR := Lookup(bre, ill);
        whiLe  iNchar= blAnk) @¬]HA]=hAK←αaβ∪=εs↔cS≡Al4)α↓↓↓↓α↓β'→ε#'IβL¬b¬↑.,Rbεn-Rbε≥lBbε\≡"bε}∞Bbπ≤rbπ,↑2bπ==∩bπ=z"bπ]lBbπ|YujπMVph$∧ααα∧∧ααα.&.∞51PRα∧∧ααα∧6∂≡TFO∩
x`hR∧∧ααα∧∧ααε.,SRβ1Q"αα∧∧ααα∧∧ε≡}W$π>F≥HRεv}@ε.}DλFzεl[π&≡π1PRα∧∧ααα∧∧αε≡}W"πε≤|Vw.\,W∩β'Tεw.\,WαC∃Dπε∞|]g.n,Z"bβ¬Dεn∂∞⊗>*Dεs+J↔1PRα∧∧ααα∧∧αε7-W"π⊗\≤F6␈-W0hR∧∧ααα∧∧ααε≥lCRε≥nVv&]nBFW]\&/∩εUBαjε⊃BβαD
&N>∞MV∂⊗⎇≥bbβεVbJK1Q"αα∧∧ααα∧∧εNwπ$εNw∞↑F#XQ$ααα∧∧ααα∧	⊗wC$λL\9~;Oπc"H∧∧λλλ∧∧λλ∪
≡∞H∪
≡→<X-Gc"H∧∧λλλ∧∧λλ≠,≡L¬⊂ -argin;
          opt: o@AiS←\l~∀@@@@@@@A←kPpA←kQakiHl~∀@@@@@@@AaC≤tA]K]aCOJ!]k[E∃`QS]→S]CidX@Z@DX@`X↓S]MS9SibX`RRv4∀@@@@@@@AaCdβQβCπ⊗↔KπεAl4)α↓↓↓↓α↓↓↓β⊗+Eiβ⊗+O/G1PRα∧∧ααα∧∧απ≡]G"π≡]H	,>∞c"D∧λλλ∧∧λλλ∞≥z.H∞=z<

n;8Y.¬
+λ¬T+λε¬λ≠8/∞zz4¬D∞--e∃.c"D∧λλλ∧∧λλλ∞=|NH∞=|]~-o∞c"D∧λλλ∧∧λλλ∞<]∞C!$λλλ∧∧λλλ∧∧λ_Y,⎇9C"D∧λλλ∧∧λλλ∧∧≥~=
L;→;L}~⊗|n\]~5
L7(∞GT
c!$λλλ∧∧λλλ∧∧λ≤Y,≤α89z≤αing!iSiY∃0∂OW↔#'S3-i1βSO#3↔3.s∨S"←≠WSO#3⊗ubβ;W1Hh)↓↓α↓↓↓↓α↓↓↓β.s⊃l4R↓↓↓↓α↓↓↓↓¬#S1hhQ↓↓↓α↓↓↓↓α↓↓β.;'84R↓↓↓↓α↓↓↓↓α↓βS'&c↔3↔v;S"on';SM#3⊗UβQu↓Aβ1PRα∧∧ααα∧∧ααα∞,V∞≤≤⎇∞4w3@(titleXπ[CS9iSiY∃:PAi%iP∪↔d∧Vv?M6n∞≥nFO&L[Rbεn]BHh$∧ααα∧∧ααα∧∧ε.vG1PRα∧∧ααα∧∧απ.l@∞D
;];LL;]
∧¬(≠]-\Y<B
≥YZ;M≡≤∧V⊂P_V⊂⊗⊂4w→4s4`4y(λ@`$Rv~∀@@@@@@@A]K↑t@ UakiMKNA←Uiakh$TR@Vα↓!))RQ))$hQ↓↓↓α↓↓↓↓αβ↔c
bβ'31Ph)↓↓α↓↓↓↓α↓↓↓β⊗+⊂≡NβC"D∧λλλ∧∧λλλ∧∧→<\M}L,λπ'αP3 5llwo@IHv~∀@@@@@@@@AKee=`P`@XR~)α↓↓↓↓α↓↓↓↓αβ↔;⊂hQ↓↓↓α↓↓↓↓αβ↔;⊃Xh!↓↓α↓↓↓↓∧εvFNLTαFNl8
≡H∂D~<Xm¬(_;LD≠[u∧9{λMc"H∧∧λλλ∧∧λλ⊂L\z;C!∧λλλ∧∧λλλ∧
9H∩-lz_<Dπ∂H_ML8π5@ then
λ            bedπS@8hQ↓↓↓α↓↓↓↓α↓↓β↔↔∪?IEβQuβ'v≠#πIXh!↓↓α↓↓↓↓α↓↓↓β-∪K ?%%⊃ Hλ∧∧λλλ∧∧λλλ]Y∞c!∧λλλ∧∧λλλ∧
Y>≥=β"H∧∧λλλ∧∧λλ⊂∩[2εE⊂λ⊂⊂⊂⊂≥w:4`, egl
λ    end (* di@IKGiSYJ@@)J↓d4(hP1↓↓@¬"αjUQRjJUQRjJUQRjJUQRjJUQRjJUQRjjUQRjJUQRjJUQRjααJ#!⊂⊂∀*                                                ∀R4⊂@@PαQ↓↓↓α↓↓↓↓α↓↓↓↓αβS↔c ∧ε -βy6p]:4w3H⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂
)
λ∧@@PαQ↓↓↓α↓↓↓↓α↓↓↓↓α↓↓↓↓α↓↓↓↓α↓↓↓↓α↓↓↓↓α↓↓↓↓α↓↓↓↓α↓↓↓%⊃PBα¬
D∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λ¬∀FBα  ((@ZZZαi5%5h¬Rj@++#%U++ ⊗KT¬--4ZRZZαi5%5h¬RjJUP%UαVV@--  ∀R4⊂λ (αJ∃λ⊂⊂⊂⊂λ⊂72`8tp∂←E⊂@ZAe∃C@⊃β&C∃β;,ππ"ε≥nπ/"∞⎇w,λε⊂ 0p¬P∨∂,ε74→~0→→qz4`6es
 *                 when appr`∨@∧ε&N∂LU`hR¬%⊂hPβ"C!⊂⊂8 2ocedupe nexp	o←β∪⊃l4Ph ∩α∧∧π6∂!Q"αα∧∧απC↔$εNwLX	l↑L¬P∀
⊂67`/p index *)
~∀4⊂	↓↓αβ↔∨L¬bαBαH⊂↔→|:0↔op¬H@T$~∀@@@@Ao=`∪3,¬f >~λ∞GTλ
FBα      ne@]S]@3L¬f*β'Pλ@0p`'α)`_hαHλ∧∧λλ⊂≠Z4pe eol @¬]HA]=hAK]⊃←@≠≥nπ/"MphR∧∧ααα∧∧ε⊗.⎇_AQHλλ∧∧λλλ
l>≥_m<Nc!⊂⊂⊂⊂λ⊂⊂⊂ )d∧AK←αaβπl@∞v@⎇λ⊂∩[27s )nput↓iQK\4⊂	↓↓α↓↓↓↓α↓β↔>K8 (αHλ∧∧λλλ∧∧λ_\L\8¬P≠
λ∧@@@@@@@A`∨KLεF.w]H↓QHλλ∧∧λλλ∧∧→;Y↓QHλλ∧∧λλλ]≤y(
≤β⊂4`.cha`$αzAISβ∪∂!β&C↔9β&K@⊗.>M↔6(β"H∧∧λλλ∧∧→;⊂→YP4s⊂~w1t0\α = @ACeCGαCπIβ&C↔8Q$ααα∧∧ααα∧λλL\βtwεBα          bre@¬P
l4R↓↓↓↓α↓↓↓↓∧¬⊗ $≤_<L≡zz0_λ≤ε   ↓iQK\β`∂/'α¬πε∂,≡6@=<
.aQHλλ∧∧λλλ∧∧~9H∞<X<≤βrP∨λ_⊂:4→w⊂72]x0srJ80p∩apage)8ε~)α↓↓↓↓α↓↓↓βL¬g.vLXNE≠≠p⊃Zβ`II∃]`⊃↔1P@$λλλ∧∧λλλ∧
9H⊂↔≥vq2`2ing <> no@9k[EKβ∪';≥∧εFF.βC"D∧λλλ∧∧λλλ∧∧_Y0∪Zw
            pa`%¬G←k]P@t`5∧εε∂⊗≤8n]]λ
dε,¬FEλ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂1w`.ver`)9k[EKβ⊃#@>|∧Y¬D≥{p→→4∧ength _AββπKπ≤¬w.wEDεw8εq2\αwidth, numbering!
            end8ε~)α↓↓↓↓α↓↓↓βv+c@&=↔!α@
          e@9H⊂∀$∧ααα∧∧αε.βY≥CE⊂⊂⊂λ⊂⊂4`& h
@?α@λ]Y≠p∪~w8:`4 p	QKαp4)↓α↓↓↓↓αβ↔∨L¬`hR∧∧ααα∧∧εv⊗β_;MyP⊂~= 0;
        i@_A`∨?⊗#3↔l}FBβTεαπ~→0↔βE⊂⊂⊂λ⊂⊂⊂⊂λ⊂;t4[2P4`.cha`$α↓uβd∧⊗vZMphR∧∧ααα∧∧ααα∧λλL\z;C!⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂71≠0p∞ks :0~Aαs &≥m74λ¬P_Nβ
∀@@@@@@@@@↓]Kqi
QCd~(@@@@@@@@@AK]⊂p4$∧ααα∧∧αεNdλL↑z;[
≥Y(⊂~~2p∞
          begi@8~∀@@@@@@@ASLQP≠d∧⊗v←4πbβαα(⊂↔\α no@PAM@'d¬BπεXD\Y0⊂Zβ;
          @%H	βWv#↔K∂F@∩βG`λ
nαp @while inc@!Cd@xxAEYC9VAI↑4∀@@@@@@@AEKO%\~∀@@@@@@@AS_AS]G!CdA[=H@bd`@zAQeaQK\↓iQK\4∀@@@@@@@@@AE∃KS\~(@@@@@@@@@ASL↓]gaY%if@x↓[CqgAYShAQQK\~(@@@@@@@@@@@A	KOS\4∀@@@@@@@@@@@↓]gaY%if@ttA]ga1Sif@,@bv~(@@@@@@@@@@@A]SiPAMaYSiM7]ga1Sig:↓I↑~∀@@@@@@@@@@@@↓EKOS8~∀@@@@@@@@@@@@Aa=S]h@hzAo←IIYK]≥iPv~(@@@@@@@@@@@@ASLA%]G←YU[\@|bAiQ∃\~∧@@@@@@@@@@@@@AQsa9h@tz↓GYCgβ~o'mH
-l6z0↔_wv:v[⊂⊗P_WTεc mod 1Hq:]Yα+S@&↑$ε∞vAQ"αα∧∧ααα∧∧ααα∧∧ααα∧∧ααα∧∧ααε=Hλ.≡vz3MM9Y6m≥X{{∞];H
dε7+Xd
8πrY≤&W≠2z:2\∧¬
                Else hypnt 88
AM¬YgJV4∀@@@@@@@@@@@@AS]A]h@ttASMGα{3W]aPRα∧∧ααα∧∧ααα∧∧ααε]l@hR∧∧ααα∧∧ααα∧∧αε.βYβ!$λλλ∧∧λλλ∧∧λ→3LA Hλ∧∧λλλ∧∧λ→3∞≤αBE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ12st[ε@
            wordlength :5 Wordl@∃]OiPV@bv4⊂@@@@@@@@@Ao%iPAo=eI7o=eIYK9KiQ:↓I↑~∀@@@@@@@@@@AE∃H∂'aQ"αα∧∧ααα∧∧ααα∧λλdπM(∩-lz_<G⊃ Hλ∧∧λλλ∧∧λλλ∧∧≠X[∧πO(⊂⊃Z0y0↔idth
              End
            e`≥HβX4)↓α↓↓↓↓α↓↓β;,ππ&≡≡ hR∧∧ααα∧∧ααε]l@hR∧∧ααα∧∧ε.vAQ"αα∧λ	-lλ
∃λ52|:≥wy2 *)  64⊂∩)@¬"αα∧∧πε∞=>v␈⊗D¬Rπε≤92ε
∞⎇w⊗"
→g&Z∞Mε*ε|ZGπ∂Dλ
≥Y+C!∧λJ#!↓ C"D∧≤≤[l<αr:i→P80qZβword9

    var~∀@@@@↓]DdAαK;C↔>+Am↓@¬"εW]\&/∩-F∞v>4αGπ,X6.&≥lrπ>},BJααJ#!∧λλλ∧∧≠XnD
;]→,|αy≥@
∃⊂71Z0y1P≤92r4Xz2r a`
iKHACII%]NAo=eH@T$~∀4RA)↓↓α↓βπ∪';?K⊃αiβπ∪ βS#∃¬;?K⊃∧εFzπMRε←↑Nπ/"
H
-l+C"D¬J#"AQ@εE⊂λ⊂⊂8 2ocedure addword;

      vab
λ        X1: iNtegeR8ε@@!Rβ↔π≠-∪π1βLs∪↔aπ3πK≤≤&f*¬%⊂hPQ!PBα∧∧ααε,XvNr¬↓"ε∞LNv␈⊗D¬"Hh$∧ααα∧∧απ>≡Mαε␈↑MFNv[=w/&L]f?&Tε&z
l&bβ'Tεv⊗D¬2εv$¬"ε≡≡'>NNMβXh$∧ααα∧∧αε6} λ∂ε(∞O$ε(≥≠d∞{|Y
L9Y⎇
∧→≠c!$λλλ∧∧λλλ∧Y9z-a Hλ∧∧λλλ∧∧λ≠⎇.M→;YnMλ∞O$
⎇=≠]Y⎇~∧¬h ≥CE⊂⊂⊂λ⊂⊂⊂⊂λ⊂7zz≠4s2m[zz6"[3z4.H≥≡P;[y2-|nBE⊂λ⊂⊂⊂⊂λ⊂⊂⊂2[2≥FEλ⊂⊂⊂⊂λ⊂⊂7j]62w3]4⊂≥≡H7zz6→w3z4λ∃P_@;
        withoutlIne[oUthength] do
          beeif
          c :=bh	C],v~∀@@@@@@@A]	X@tz`~)α↓↓↓↓α↓↓↓β,s⊃l4R↓↓↓↓α↓↓β;≡CπKMβQuβ;≠X4)↓α↓↓↓↓αβ'→βv≠#πK~↓yeβf+∪S7∂∪∨'→¬##↔_hQ↓↓↓α↓↓↓↓αβ↔∨Np4)↓α↓↓↓↓α↓↓β;>CM↓Siβ+∨∂βE↓4ε∪Xh$∧ααα∧∧ααα|↔π≥=lv∂π;Pλπ'αP7j]42w3]4εE⊂λ⊂⊂⊂⊂λ⊂⊂⊂"[2εE⊂λ⊂⊂⊂⊂λ⊂2v 3e gappπ6a:α↓`∪@(≠p~]42w3]4εE⊂λ⊂⊂⊂⊂→w2⊂∀
⊂0r2≥wy2 *)  64∀∩)@¬"αα∧∧π≡=→0_λ⊗P9r]⊂:x⊂→4πr @ACGWo=eHL~(@TR~(~∀
∀@@Aaβ∪?∂↔'+K∃β≤∧W'∂∧εc!! ¬⊂⊂λ⊂⊂⊂+_y
        p!hAS]i∃O@↔IX↓!)βd¬v␈α
_LL>λ
E⊃"C"AQHλλ∧∧λ_Y,@tp∞ (* seTup *)
        ib newpa`%¬KeCa AiQKαqβ+	βQuβ;⊗cπ;∂_h!↓↓α↓↓↓↓∧+3O∃∧K⊂∩εlZv␈/MI⊗v*∞Mε.r
l"βSTεhR∧∧ααα∧∧ε.g<QPBα∧∧ααα∧∧αε⊗\⎇⊗ph$∧ααα∧∧ααα
_bεV↑⎇⊗vf≥lRπ&YbεV$π#jεl-F∞v>4αZβ⊃Q"αα∧∧ααα∧∧ε.g<Tεv∩¬'Rεv-H⊗v←71P@HαHλ∧∧λλλ∧∧λ~1D;\u.,,H⊂-lλ
≠n↑≠~3L[{y=
L8π3z~⊂∩P_WTεc Mo` 1Hp@zAAKe@'|∧BJε≥l@hR∧∧ααα∧∧ααα∧∧αF@X[⊂⊂[5yP≡λ→∀P !nd (ncha`%L@t`5∧¬F.]≠8.z;B$∞~→0↔βE⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂'_⊂≥≡@∧¬
          eNd;
        nc 88
A]
QCe@~↓-β;⊂∧αZπ⎇xLMα2w3]4≥FEλ⊂⊂⊂⊂λ⊂⊂4cλ4εc > raghtiargin then~∀@@@@@@@A%H	βKL∧vG&\≡& =8π⊂⊗H51t0\9P↔ badjUqtifY * (neaps - 1) then
λ            bedπS@9αA)β∨|¬⊗v:∞MrεNn<W.α⊂:7[P6pw≡P16 !nks *)
∀@@@@@@@@@↓S@→βw≠C#''→↓i↓α∧π&F]aPBα∧∧ααα∧∧ααα∧∧ε⊗.⎇_AQHλλ∧∧λλλ∧∧λλλ∧∂(∞GT≠\|
M=≤naQHλλ∧∧λλλ∧∧λλλ∧∞z~0⊗→P8λ "α↓y↓A∧#<4$∧ααα∧∧ααα∧∧ααα∧λ
m≡~λ⊂→\44z9Vβx1]↓IV~∀@@@@@@@@@@@@@AEKα;'8Q$ααα∧∧ααα∧∧ααα∧∧ααεl4β@'αP71Z0y0∪ + nbVAa←αK;A↓X∧ε␈⊗E
πOεnA∪@1 Hλ∧∧λλλ∧∧λλλ∧∧λλλ∧
9H⊂↔_P≡≡@≤αightmargin then	∀@@@@@@@@@@@@@@@AE∃H∂'aQ"αα∧∧ααα∧∧ααα∧∧ααα∧∧πC
∧εO$ε∞h
¬$→>~.D≠≠p↔\⊂⊂
)
λ∧@@@@@@@@@@@@@@@AS@;≤¬vg8εw 8∧p∃βL¬gε@]∞`⊂
∃⊂92\β`hAαK;CW ∧π>≤Y0⊂[P⊂
)
λ∧@@@@@@@@@@@@@@@AK@?b↓`∪@(→P⊂[9rP≠
λ∧@@@@@@@@@@@@@@@AP≠↔G#∂#πα ∞aQHλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧≥{p→→4∧ength  4tAa←SαsQ↓4λn2⊂λhyph
hRl~∀@@@@@@@@@@@@@@@ASL↓Qsa]PA`∪#,¬bπ{x	2⊗βwo`%⊃YK@;?#"`*l4β@'αP6t[8¬s 64⊂	↓↓α↓↓↓↓α↓↓↓↓α↓↓↓↓α↓β↔lAP@$λλ
αα∧∧ααα∧∧ααα∧λ	-Ny(⊂≤P≥≡@ x1 -1;
                  end8ε~)α↓↓↓↓α↓↓↓↓α↓↓β↔v!`_hαHλ∧∧λλλ∧∧λλλ
≤β⊂71H≤ε ridπQi[¬`∨'p∧π&F]aP@$λλ
αα∧¬↓↓↓αβ↔∨L¬`hR∧∧ααα∧∧ααα∧∧αε/,∧[n∀_⊂⊂8);
              e@9Hv~∀@@@@@@@@AK@; π0hR∧∧ααα∧∧εv/⎇x
.Mα4w2H≥_
 @→CYgJl~∀@@@@@@↓]Ko@∧∧↔,9x	0\4⊂⊂~= fal@MJ~)α↓↓↓↓∧∧Vv"¬
D∞y=≥.∧λ¬∀P∞β
∀~(~∀@@AEKO%\@@!RβCπ∂←;?K⊃αQ$4$∧ααα∧λl↑≥<∞aQHλλ∧∧λ~0∪λ4εc <= ri@≥Q`∪7∂∪⊂≡NβH⊂~~2p∞ @¬IIo←β∪⊃l4R↓↓↓↓αβ'2
l2β@LεP 2ichtmargi@8AaQKαq↓!$λ	
⎇K=⊂_ppl packword, th∞Aaβ∪↔[↔w!β@.βY0↔→4p∞g
λ∧@@@@@@@@@@@@@@@@@@@@@@@@@@Aβ∪↔∂W↔≠'?9∧¬⊗rααJ#!∧λλλ∧∧λ∧∃⊂λ:42P_pyrP≠q⊂0@ word↓iQC@ ∧ε&@y<sE↑λ→R.D_Y0~≥prw the @5CeOS9`
↓%⊃P@$λλλ∧∧λλ⊂⊃→stwεBα        @)kgiSα3el4R↓↓↓↓α↓↓β←⊗KS↔M→f+XQ$ααα∧∧ααε≤dεv~¬`λ∞4st:≠py3t[⊂:42[∧@
          bedπS@8hQ↓↓↓α↓↓↓↓αβG/L¬0_∞FA⊂⊂λ⊂⊂⊂⊂λ⊂⊂0r→9wy2∞FEεEλ⊂⊂⊂⊂λ⊂⊂⊂⊂~pε nc 8`5∧ε&N≡∞MV∂⊗⎇→bπ&XAQHλλ∧∧λλλ∧∧λλ⊂L\z;C!∧λλλ∧∧λλλ∧∧λ~P~\z4s,NF@
            wr`∪@&+3'lQP@$λλλ∧∧λλλ∧∧λ→0↔→∧¬∀@@@@@@@AKαs⊂ (αHλ∧∧λλλ∧8π2εB⊂⊂⊂⊂→w2⊂∀
⊂80qZβword *) ;
~∀_@@PαQ↓55h¬RjJUP%UαVV@--)--4ZP∃5h¬RjJUP%UαVV@--)--4ZP∃5h¬RjααJ#!⊂⊂∀*                                                ∀R4⊂	↓↓@¬"αα∧∧ααα∧∧ααα∧∧ε/↔-xD∞≤[p⊃Yyyt`.dε@@@@@@@@@@@@@@)Hh ∩α¬
D∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λ¬∀FBα  ((@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)Hh!↓↓@¬"αjUP%U++#%U++#%U++#%U++#%U++#%U++#%U++#%U++#%Tλ¬∀FB∧¬∀PαQ↓↓↓α↓β↔K⊗{@∩αβ(∩.yzrP_w⊂2`2p¬P∨I∧k↔OO∞;∃(Q$αPHαH
D∧λλλ∞<X;$
β⊂⊂≥↓Kee←β⊃β+Wn∪↔I8hQ↓↓↓α↓↓↓↓α↓↓↓βpβ'Mβv+⊂≡∂M~f*εmxD<X[n∞h→→.L8⎇→,D→≥0→~w3P#≠y0
 *           p@I←GKgMS]NAQ↑Aae∃mK]h↓k]K]⊃S]NAIKGkeMS←\\4∀@T@@@@@@@@A→←dAa=`∂'SO3∃β9bβS#∃∧3?33⎇;';≥∧≠?;[,¬g&N⎇`εO~∞Z6.#!Q"αR∧∧ααα∧∧ααα
`ε&Odε∪βα
≥f&N<≡F/~∞⎇εN≡∧FO⊗\8

≡Y(∃
!"H¬$λλλ∧∧λλλ∧∧≤Y1L↑\h∃
uC"H¬$λλλ∧∧λλλ∧∧≠H≠-|λ$ε∧≤y3\⎇≤h∀≤_<NM8⎇3≡H→4N
|H≠,↑|x9lUA"H¬$λλλ∧∧λλλ∧∧≠H≠-|λ,ε∧~<hπg(λ
Xλ33y nume@ISFAKβ∪C/K~p4)↓R↓↓↓↓α↓↓↓↓αβ∨3?⊗1β[∂∪'πd+@~ε↑.&␈∪⊗¬Bε/,-w&+λ⊂∩\αrgrn1(errorf $0~∀@T@@@@@@@@↓C]HA∃`K∨↔≠7π∪bβπK∃¬+Gπ⊃∧3?Iβ∧ε&NwM→f*π>λ	,=9Z0⊃CE⊂∃⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂≥0p`+∃`
β←FK∂!β∂∪∃β'p∧ε/↔-z"`! ¬⊂∃
FAεEβE⊂⊂(≤5qr`$ure @∃`K?⊂↓!)βp↓`∩ε≥nF.y<@¬%(λ
FB∧@
    ti@AJ~)α↓↓↓↓∧¬ε␈∨FTβjπ≤6N9λ⊂.∞X>(XW↔
WP7s⊂_t0q;
      hoqt10 = paci`HAα@↔⊗∨∀¬@6+KD&αP7`& char9
α      @!←ghdβ↓↓`*∞λ⊗≡↑\@λ≡\X>$l+@↔_.P /d∧AGQ¬`	l4Ph ∩α∧∧π6∂!Q"αα∧∧αεF]`∞D
;]→,\αy≥@
∃⊂6 %ngth↓←DAgQ`	↓	Hh!↓↓α↓↓βO'⊃aβO'∪';≥X↓!)β4¬w$≤≤Z-n~;Yd
9[⊂∀[2P∃∀CE⊂⊂⊂λ⊂⊂<1, x"hAS]i∃O@↔IX↓!)β>+;↔K∞aβ3?⎇↓β'lLWBα%⊃PPHαJ∃λ⊂⊂⊂⊂λ9y~V≥y_X⊗≥y→_⊗H;y4j→P47i]⊂1t0\αacters to str8~∀@T$~∀
∀4⊂@@@↓aeOG∃IceJ↓odjQ
btAQ=chjV4⊂@@@@@@@@@@@@@@A9FtAS9iKOKHRv~∀4⊂@@@@AmCH~∀@@@@@@↓pb`)∧¬⊗wε\|WβXQ!PPH$∧ααα∧&.>≥`αBR∞}#*α%⊃PRα∧∧ααα∧λ	M}H≡∧$πO($∞≠h∪L4→≠c!$λλλ∧∧λλλ∧Y9z-a Hλ∧∧λλλ∧∧λ≠⊃-d∞O(
L9H
dεen := lenV@bv4∀@@@@@@@AoSi AgiEmYK]:↓I↑~∀@@@@@@@@AEKO%\~∀@@@@@@@@@↓F@tz↓CgGSαK∂#π⊂C∂NoC
u%LhQ↓↓↓α↓↓↓↓α↓↓β;⊗a↓iu∧≠#πK>K∪S hQ↓↓↓α↓↓↓↓α↓↓β↔v 4)↓α↓↓↓↓α↓↓β↔v 4)↓α↓↓↓β,s⊃↓!Rβ←IEα↓)%↓β1PPh!Q"αα∧∞π⊗↑<X	∞↑Y(∃n→_∀1\]⊂47\z→_≥CE⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ71]⊂~w:2sYy∀]FBεA⊂⊂λ⊂⊂⊂;_y
        p1~ integ`dv4⊂~(hQ↓↓↓α↓β↔>K9↓!Rβ←IIα↓)$Q$ααα∧∧ααεmxD∂(∞GT(⊂~≠P71P→7FE⊂λ⊂⊂⊂⊂λ⊂⊂⊂1→stwεB⊂⊂⊂⊂λ⊂⊂⊂⊂λ42w∞≤¬ l@∃\@V@Dv~∀@@@@@@@Ao%iPAgβ#@∃↑L]ejεMqPRα∧∧ααα∧∧ααα,V.NaQ"αα∧∧ααα∧∧ααε4π#jε≡8λm≥8z_.%_|voε4εT]CE⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂7_6⊂≥≡H1t0y≥tr:4βE⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂ %nd
          @∃]H~∀@@@@↓K]H@ TAodH`@DRr~∀~(~∀@@AEKO%\@@T↓Kee←H@TR~(@@@@ASLAAaS]i∃`K}.2π&XAQHλλ∧∧λλλ,9z0↔βE⊂⊂⊂λ⊂⊂⊂⊂→y97`2pε@tz↓iekJl~∀@@@@@@↓gie6β
u 64π#jε-H⊗v[1Q"αα∧∧ααα∞8
∞-XnG≠10 := 0 64⊂@@@@@@Aαc↔9↓Si↓E@1Q"αα∧∧ααα∞}#*BuP%UαP∪@, 5);
λ∧@@@@@@AαK⊂∩εdπBβα∞Mε.pβ"H∧∧λλλ∧∧λλ⊂⊃→stwεBα          p∂ddβ↓!>mxMT→<\M}L¬⊂⊂λ⊂⊂⊂⊂λ⊂∪V⊂Y∀]FBα          ca`'α)β 2
x	AQHλλ∧∧λλλ∧∧λλ$ε,¬⊂ 7p∧d`Pα;3'lTπ&@{h⊂⊗≠w3P⊂λ⊂⊂⊂⊂	V⊂⊂IJ]FE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊗P⊃:
              begin	∀@@@@@@@@@@AYKαq↓iU∧¬F.r¬0λε↔c"H∧∧λλλ∧∧λλλ∧∧λ≥z.Mλ≤p~≤α[leN] do
λ                beGin~∀@@@@@@@@@@@@↓F@tz↓Kee←β⊃El4R↓↓↓↓α↓↓↓↓α↓↓↓↓αβ;Dπ#jε=↔.z9≥
↓ ¬⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂ %nd
              e@9Hv~∀@@@@@@@@@Z@@≠Qβ@?&"αB|_9l]];8L↑H≥≠mt≠_<L|αSV⊂_⊂]FBα            -htAoHd`@!>∪π"
nVn<Z0⊃H30∂rm    ', 16)8ε~∧@@@@@@@@@Z@j@Rβ←IIαA∨;t∧$b∩hn]Yλλ∧∧λλλ∧∧βP 12)0⊗~(@@@@@@@@@AK]⊂p4$∧ααα∧∧ααα∞}&O&↑8
∞4p∞g!cidX↓YK@9KX4)↓α↓↓↓↓α↓↓β↔v#3'lQP@$λλλ∧∧λλλ∧8π2εBα        @∃YgJ~(@@@@@@@@↓EKOSαp4)↓α↓↓↓↓α↓↓β'2β⊂⊗O,8
↑\[p→λ∀⊂
 @→Seghαβ↔KK|ε"ε@{H⊂~~4yP ,ine *)
∀@@@@@@@@@AaQKαp4)↓α↓↓↓↓α↓↓↓↓∧∧&.z;C!⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂1`/np
KeQ]`↔\,W%≤⎇≤ED≠→0↔⊂64`.enumber, 4, nuMer`∪F$p4$∧ααα∧∧ααα∧∧π?∪U	e@⊂⊂⊂⊂	T⊂⊂∩$p4$∧ααα∧∧ααα∧∧ε -βy⊂ 81 :=bAi↑↓S]@3,¬f >~λ⊂∩≠P9z9⊗v2w + p #t@t`5∧¬⊗v@~;Y+|_n@;
            @1K\@TtAP∪↔p∧αZε≥mF.v|Mβ@1 ¬⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂≥y0	`)∃`∂SKL¬f 5≤⎇≤ED≠→0↔
]FE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ2p∞dline 64⊂	↓↓α↓↓↓↓α↓↓↓β4¬↔.⎇→0→≤αh∂d@hzAMC1`∂+αc"D∧λλλ∧∧λλλ∧∧≤⎇≤KXh
.nbhλ@tt@`v~(@@@@@@@@@AYKαq↓i@Tε`hR∧∧ααα∧∧ααα∧λ	-l∞c"D∧λλλ∧∧λλλ<<y(
d→~0≠λ_X⊂⊂≠pε~∀@@@@@@@@@`t@l~∀@@@@@@@@@@Dp	β←⊂ε∪αB⎇\↔,z;@⊂λ⊂⊂∪@, 6);
λ∧@@@@@@@@@@@⊂π"π|L _
⊂πo`@QS←\@@@NXh	%@1Q"αα∧∧ααα∧∧ααβ4εH∞}L,
∧}_8	0Yβra`!αA↓:βλ∞%↔c"H∧∧λλλ∧∧λλλ∧ε∞H⊂≠\α5('for`~@≤X@hRl~∀@@@@@@@@@@Tp	β←⊂ε∪αB|∧p∩[2qz    '0@lRv4⊂	↓↓α↓↓↓↓α↓↓↓↓3Qβ@?&⊂¬∧βyw`2ti`≥I∃p@NXrR`,hQ↓↓↓α↓↓↓↓α↓↓↓]Rβ←IU@∧v≡␈]nB:@λ	*'F@
            8: wr10 ⊂O%]IK]P@@@@≤X@lRl~∀@@@@@@@@@@dp	β←α 
%∧βyut\⊂∪V⊂
∀X
            10: p∂db@P@∨?,εGπ=λλ∧∧	kλε@∀X
            11hA`∨I*A∨'≠∧εW"hε⊂~J]FE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ_Y≥⊂≥y~T'rese@PNP@j$r~)α↓↓↓↓α↓↓↓↓αβ↔;⊃Xh ∩α∧∧ααα∧∧απ|L _
⊂π e@I` ?'$αααuDβBKαc"D∧λλλ∧∧λλλ∞}L,
∧t→<\M}L¬⊂⊂λ⊃P 8);
          @8@tjA8AP↔|@λε⊗λ
FB⊂⊂⊂⊂λ⊂⊂⊂⊂λ4s⊂ . 8 %0 the@8~∀@@@@@@@@@Aα≠πO∃∧qβ/_hQ↓↓↓α↓↓↓↓α↓↓↓↓β	` (αHλ∧∧λλλ∧∧λλλ∧∧λλ_L\z;C!∧λλλ∧∧λλλ∧∧λλλ∧∧≠→3DπLεP ,en +bv~∀@@@@@@@@@@@@↓oSiPαβ@∨'+=F.uβ(⊃
q Hλ∧∧λλλ∧∧λλλ∧∧λλλ∧Y9z-a Hλ∧∧λλλ∧∧λλλ∧∧λλλ∧h∞O$<\[n_X
                  nbl := cha`%]SAiP4⊂@@@@@@@@@@@@@@Aα+;⊂4R↓↓↓↓α↓↓↓↓α↓↓↓↓αβ↔;⊃Xh!↓↓α↓↓↓↓α↓↓↓↓α↓Iiβ?⊃EA↓>k'OOL¬f 4λ∧P∪K⊂≤T]CE⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ→]⊂ 7p∧d`P≥k]KCQGQKHαβGW∨&)↓↓↓α↓≥1↓	)%l4R↓↓↓↓α↓↓↓↓α↓↓↓↓ π"π?&"αB|_9l]];8L↑H≥≠mt≠_<L|αSV⊂_∀]FB⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂
]
                begiN
                wr20 ⊂OU]IKMαK;↔⊃∧[↔/∧λ'.YY)eDL
'1"Hλ∧∧λλλ∧∧λλλ∧∧λλ∃n~T∪yλ⊂⊂⊂∪K⊂_TFB⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂2w2∞FE⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂≠⊂~
λ                be@≥S\
∀@@@@@@@@@@@@↓odd` OkMW9←o\A⊃SeKGβ#'[∃R↓↓≥Dε∪JKαc"D∧λλλ∧∧λλλ∧∧λλλ∧Y|@⊂≡_P∃≡H_P:7H_X⊂ $o
α                  begin	α                  h	K\α↓`∪@(≠⊂∩[⊂∃P_NFA⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ;tz4λ9z1-[2s.@ do
                    Begin
λ                    c := erbop∧ba7`c:f~(@@@@@@@@@@@@@@@@↓]E@1βQuβ∂FC←''# $$∧ααα∧∧ααα∧∧ααα∧∧αααYf H$∧ααα∧∧ααα∧∧ααα∧∧αε.lAPBα∧∧ααα∧∧ααα∧∧ααε]lCXh$∧ααα∧∧ααα∧∧ααβw$π?∪&¬α>⊗≤@λ
n990→~qP3'\4¬    # _@Dh	%@1Q"αα∧∧ααα∧∧ααα∧πβ@@ Hλ∧∧λλλ∧∧λλλ∧∧λλ⊂⊃→stwεB⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂;y20('hyphenatign↓]KKI∃Ht@Nαa↓IAKX4)↓α↓↓↓↓α↓↓↓↓α↓↓↓β4{@∩π∧⊂λπ≤P⊂@ th∞Ao=aIYK9OiPA⊃↑~∧@@@@@@@@@@@@@ASLAαc↔9↓bβ7πc∨#@⊗NβY{]Y⎇~∧∞~→3AQHλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧_Y1m≥@εE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂ ,en := henV@bv4∀@@@@@@@@@@@@@@@AgiEmYKM:α↓a`*∞⎇w⊗%?ε∃hh$∧ααα∧∧ααα∧∧ααα∧∧αααYf H$∧ααα∧∧ααα∧∧ααα∧λVv#1Q"αα∧∧ααα∧∧ααα∧π∪Rπ}"#αB|,⊗"πLZ&nNβX;∧∞≤∧x %   ' 17);
              10*
λ                begin
                wr20('must be @%\AS]%iSCX↓HN@1β⊃A%LhQ↓↓↓α↓↓↓↓α↓↓↓↓α↓β←I∪↓!∨'⊗+∂S'6)β∨K␈+A↓↓α↓↓↓≥b↓EQ∧hQ↓↓↓α↓↓↓↓α↓↓↓↓α↓β↔≠ π0hR∧∧ααα∧∧ααα∧∧αβ↔!PRα∧∧ααα∧∧ααα∧∧ααε,\vNpQ$ααα∧∧ααα∧∧ααα∧∧π?∪&¬α:⊗←6/πD εo/>@ε⊗*h
.∪P 20)3
                wr5('st   ' _@HR~∧@@@@@@@@@@@@A∃]Hv~(@@@@@@@@@@@@Ddt~∀@@@@@@@@@@@@↓EKOS8~∀@@@@@@@@@@@@AoHd`@O⊃SeKGQSmJA9←hAC1YP∨←*91↓IαIl4)α↓↓↓↓α↓↓↓↓α↓↓↓↓π;@∪*∧|CRα∧∧rbβ5↔0hR∧∧ααα∧∧ααα∧∧αααiwαπε⊂βS@(λ ⊂≥5P_Xλ27FEλ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂12YtsεEλ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂6"[⊂≥≡P≠2w⊂∃H_]FEλ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂;t]4⊂9z≤α[len] do
                    begin
                    c := e@IeWdbA7pc:l~∀@@@@@@@@@@@@@@@A]E0@tzA
QCeo%IiP~(@@@@@@@@@@@@@@@@↓K]H~(@@@@@@@@@@@@@@AK9H~∀@@@@@@@@@@@@Aα+;⊃lhQ↓↓↓α↓↓↓↓α↓↓↓↓β	Mh∀R↓↓↓↓α↓↓↓↓α↓↓↓↓αβ↔∨Lp4)↓α↓↓↓↓α↓↓↓↓α↓↓↓β?⊃IA↓>)βCM#∂!βo+OQβ⊗)↓EAα91↓IαIl4)α↓↓↓↓α↓↓↓↓α↓↓↓↓π;@∪*∧⎇w∩β⊗$rbβU⊃PRα∧∧ααα∧∧ααα∧∧ααε]lCXh$∧ααα∧∧ααα∧∧ααε]l@hR∧∧ααα∧∧ααε]HlQ Hλ∧∧λλλ∧∧λλλ,9z;AQHλλ∧∧λλλ∧∧λλ_l≡y(≠D
yC"D∧λλλ∧∧λλλ∧∧λλ
&↔H≥|FU	zy,↑λ	c∧ε
.c!$λλλ∧∧λλλ∧∧λλλεVNH⊂≠\α20('right margin        ', 12);
              53: wr20('ledt margin        ', 11);
              54: wr5('width', 5);
              55: wr10('indent    ', 6)3
              56: wr20 ⊂O9k[EKHAoSIQP@@@@@@@≤X@bd$r~∀@@@@@@@@@@@jnβQβ←I*A∨O/M↓↓≥⊃β!%l4R↓↓↓↓α↓↓↓↓α↓↓↓↓+Aiβ←∪	A!∨f+∪Qβ>K∪S!:a↓EAKX4)↓α↓↓↓↓α↓↓↓↓α↓↓UeRβ←IEαA∨7π⊗;'9↓α↓↓≥⊃β1%l4R↓↓↓↓α↓↓↓↓α↓↓↓↓3↓iβ←∪⊃A!∨∧∧⊗>
9vg∞]`λ∧∧λλλ∧∧λ	c∧ε,*.aQHλλ∧∧λλλ∧∧λλλ∧εL.H∞}LL
∧}Z9z∞D≥z9∞Mλλλ∧∧λλλ∧∧hε⊂_LT]FEλ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂≠≥⊂;y_⊂∪y[y:⊂![v:vwλ⊂⊂⊂⊂λ⊂⊂⊂∪K⊂_X@)9
              64hAgdj OgQSα3Q
DεRKXQ$ααα∧∧ααα∧∧αααεfSBπ}"#αB⎇*W∂&≤i⊗≡∂M→vrεM→VO"∧qBβα*.aQHλλ∧∧λλλ∧∧λλλ∧εMNH∞}L,
∧}|_8m≥Yhλ∧∧hε⊂≠J]FE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂2`.d;
            sr5(' of  # _@PRv~∀@@@@@@@@ASLAα+@↔⊗βx[F∀∂λ∧∞~→0↔βE⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ12st[ε@
              wb∃(# ~@@@NXbR`,hQ↓↓↓α↓↓↓↓α↓↓↓↓∧+@↔⊗βx	7P≥≡PP2y9≠y0∞ "4⊂@@@@@@@@@@@↓K]Hv4⊂	↓↓α↓↓↓↓α↓↓↓β≤{;K↔↔#;G\,W%≤⎇≤ED≠→0↔⊂2y9≠y0∞ "αa↓ADλN]9<Z,5,¬FEλ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂;q10(' @%`
βS|¬rαα∧p∧πλ.c!∧¬∀@@@@@@@@@↓S@→β,ε'-βy1`-all @QQK@9¬;@∪*∧}6n∞MDrbβU⊃P@$λλλ∧∧λλλ∧∧λ→0⊗≤p¬ wr5('l@¬eOJNαa↓U%Xh ∩α∧∧ααα∧∧ααα∞}#*BuDααα∧p∧εJ.c!⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂1`/nrertnq`≠E∃`	#O'⊃1β3,¬bbε↑.&␈⊗βH	, 0 _AαsW7↔⊗K
%@1Q"αα∧∧ααα∧∧ααπ|∧@~J⊂π uS
  @A` ><X	∞↑Y(⊂≠_v4r0]2P∀* p
CDαβ;@.β(∞D
8π:2Yβ`dvαβ7'eH,∨λε2`2p∧@tAαK;@&\|W$λ¬∀P∞β
∀~(~∀@@AEKO%\@@!Rβ[πM_	≡→(
E⊃ ¬⊂⊂λ⊂⊂⊂ %p¬e@?⊗qE↓ih∧εw9(
FBα      errorsmalhλ@TtAP≠Wh∧βbε]_G⊃ Hλ∧∧λλ⊂∀Yα errorsmalhλAi!K\4R↓↓↓↓α↓↓β,∧vNpβ"H∧∧λλλ∧∧≠]3$πLεP -in0⊗~(@@@@@@AKβ∪@⊗@|[@→λ≥_
 Num0⊗~(@@@@@@AKβ∪@⊗@|J→.9∀FEλ⊂⊂⊂⊂λ⊂⊂2`.d	∀@@@@A∃YgJA%H	β;.i↓iβnaβSF+8$$∧ααα∧∧αε⊗\⎇⊗pHαHλ∧∧λλλ∧
β:v@ 8∧p∃βnal4R↓↓↓↓α↓↓β↔↔∪?Kd∧@⊂∞α8
A]UZv~∀@@@@@AKeI←dQKβ∪@∩Hβ"H∧∧λλλ∧∧→;Y↓QHλλ∧9Y⊂
∃⊂; [4r0z→P⊂
) 9

  (
 ---
---------
------------------------------- ")
λ  ((@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@DR4∀@@PαQ↓↓↓α↓↓↓↓α↓βO↔≤¬vv&≡/∩εNm_

≤;~6L≡~;sD∧λλλ∧∧λλλ∧∧λ¬∀FBα  ((@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@DR4⊂@@PαQ↓↓↓α↓↓↓↓α↓↓↓↓α↓↓↓↓α↓↓↓↓α↓↓↓↓α↓↓↓↓α↓↓↓↓α↓↓↓↓α↓↓↓	Hh!↓↓@¬"αjUQRjjUQRjJUQRjjUQRjJUURjjUQRjJUQRjjUP%U++#%Tλ¬∀FBα	∀PαQ↓↓↓αβK↔≥m↔&N≥H
/,( ⊂≤αe-i@9SiSC1SuJAα;3 >,≥Bπ⊗≤-⊗∞⊗β→4e@∧¬∀@(R~(hP4)↓∧επε@xy0∩≥y2P 2ei`≥Sβ#'π∪Lπ&+XQ!P@$λλλ∞l<C"D∧λλλ∧∞H⊂∩~y2q`48ε@@!Rβ∪'K,∧7&OlTεf@{|λ
≥Y→0≤λ∃∀FEλ⊂⊂⊂⊂λ<_]⊂~w:2cYy_ (* lo@=`AS]⊃Kp@T$~∀4RA)↓↓α↓β'm_
@4πrmZAS]%iSCYαKk∃β&+∪πWdεBε6β|[%@∧@
 *)
∀~(~∀@@Aae←α≠↔βW⊗)β'≠LεF -βy6MCE
      var
        ded¬CkYβ!`∩π≤6@<αr⊂ !p¬eCr↓0
E9pεC¬@(≠p∪λ1t0y∞β  ⊂T↓IKMCUY`⊃β4{C *¬%⊂hR∧∧ααα∧∧πCαH⊂∀[8∧egep∧v@PαQβ#?⎇↓β'lLWBααJ#!∧@

      begin  * in`∪i→←e@5αQ$4$∧ααα∧∧αε&\hλ.]≥λ∞GT	v`↔KβPλFLI
P≥uyC+"βkkdYYQεH⊃('
Q⊂⊗Aβ+ ≡←t@@@NβX4)↓α↓↓↓↓αβ≠ ?$λ∞ε∀∞O ε∀≥≠hεFλ→≠dXπy6Vβx1]p	`*≡6≡N≤9ε∂∩LV ,=;⊂~⊗βx1]$p4$∧ααα∧∧αε6βx[-L8π3z~⊂≥≡@
_≥FEλ⊂⊂⊂⊂λ⊂⊂3 /p¬P↔mH	-l⎇~⊂∞α8
@@βX4)↓α↓↓↓↓αβ⊂⊗@|[:-l→>⊂∞α8
@@λπ0hR∧∧ααα∧∧π&/∞MF.v}MαβSTε∪@1 Hλ∧∧λλλ∧∞α2|:~w22`8 :5 18ε~∧@@@@@A`∪↔G#FmFh¬f~β'Pλ-α0w5NFA⊂⊂λ⊂⊂⊂⊂λ8∧extpπ6c:αs;Dπ#jβ∧εc!∧λλλ∧∧→;Y∧¬λH⊂∀[4z3'\4¬ *) ;

λ∧P@)α↓↓↓↓∧¬⊗vOM→gααT	⊗vOM_⊗fO,TεNw∞X
∧∞y=≥
≥Y|kAQH
J!Q@εEεB⊂⊂⊂⊂≤93q`%dpeJ↓S]@'&K;AlhP4)↓α↓↓↓β4∧↔@ ¬⊂⊂λ⊂⊂⊂⊂λ<_]⊂~w:2cYy_ (* lo@=`AS]⊃Kp@T$~∀4Ph ∩α∧∧ααε,XvNr¬
D
8π4`4inp *)
∀@@@@@AY←o∃`∂πα8	$πM(∃∞8¬e+
λ        @1←oKe⊃Sd@@Siβ@',XSHh$∧ααα∧∧απ∞βY→.24y∞≤¬ f@¬YgJ@Xh ∩α∧∧ααα∧
Vv&↑-FNvα;YdπM(⊂∪_v9r]CE⊂⊂⊂λ⊂⊂⊂⊂~p¬ep@%]`@tt@`v~(@@@@@@AKβCC#'≤KSL≥f@4∞O 
nαv≥FB⊂⊂⊂⊂λ⊂⊂⊂!Xyrq`( :5 Nul;
        dip¬GP@hzAaKβ∪'?⊃Xh!↓↓α↓↓↓↓∧¬πOεXDπM(∪N]∞c"D∧λλλ∧∧λ≥3LL<Xr≡H
O$
];∞aQHλλ∧∧λλλ
≥]z0∩≥4⊂≥≡H_ZX≥CE⊂⊂⊂λ⊂⊂⊂⊂→4πr X1 := 0 to maxkeep do saf@∃S]a7`c:]I∃H'lX	∧πLεP#_v9r]CE⊂⊂⊂λ⊂⊂⊂⊂~w89`]2BE⊂λ⊂⊂⊂⊂→w2⊂∀
⊂4w4]4s8⊂
∀P⊂≠
λ	∀PαQ↓↓↓α↓β'≠LεFNw∧¬RεNm_

≤;~6LT~;↑∧∞X<Z,≤[→4ea ¬⊂∃
FAεEβE⊂⊂⊂λ897aYp:y2H4p∞i@QS]pv4∀∩)α↓↓↓↓π3πHQ$ααα∧∧ααε≡π"πε≥oε.wN/∪Zαα
H∞MβP24\βpose ifdex entpies *)¬

	α      begin (* i@9SiS]`@TR~(@@@@@@Ao!SYJA%]qECMJ@x|↓]SHAα#<4)α↓↓↓↓α↓↓↓β⊗+↔'aQ"αα∧∧ααα∧∧εOαπ'RεNo&∂≡U1PRα∧∧ααα∧∧αεNo&∂≡Tπ#jε≥oε⊗∂<[bv@Y>≥π1"Hλ∧∧λλλ∧∧λ→~.x7yrJ4x∀FB⊂⊂⊂⊂λ⊂⊂⊂⊂λ2s2;
        inxlast := n`∪X4⊂@@@@AK]⊂@PDAαK;'SNsa↓%∀βXh!Q"BR∧∧ααα
→fO&\≡"αj
_M≡~8;
∨Y(∪,≡Yz3D∞y=≥
≥Y|kAQH
J!QA"C!∧λλλ∞∞Yxq,Nαy2P~w0z6Xy_

      vAr	α        x1: integer3 (* lo@=`AS]⊃Kp@T$~∀
∀4⊂@@@@AEK≥S\@P(AS]Sβ#7πIαQ$4	α↓↓↓↓α↓β/↔,εεn∂$π#jβ∧εc!∧λλλ∧∧λλ⊂⊗→pεtmapginpp∃↓βX4)↓α↓↓↓↓αβC'∨G#7πK>K9↓ij↓P≠β1Q"αα∧∧αααhn⊂8⊂@ 88
@@↓iP≥βnc/↔,εαε&t∞6∂6]\↔¬←∧∧7%@22s )ned := falq`
f~(@@@@@@A]
QCe@~↓a`*∧∧∞aQHλλ∧∧λλλ
}=≠⊂∀[2mXnKαh
EXtp∃↓απ0hR∧∧ααα∧∧εn∂,8λ.l#"H∧∧λλλ]Yλ
¬$~;Z.Mαpy *)  64⊂∩)@¬"αα∧∧αεNβZ0~≠x:⊂⊗H⊂4w4]4pv )ze o@AiS@?p∧π<αz24[3yWεB⊂⊂
)
λ	∀~(@@@AAaP∨∂,∧G/⊗T	⊗vOM}π#XQ!PBα∧∧ααπl≡ hR∧∧ααα∧∧πCαH⊂∀[82sr\α; (
 looP i`≥I∃p@DR4∀∩(hQ↓↓↓α↓β↔>K9↓!Rβ';≡Mwπ"¬%⊂hR∧∧ααα∧∧ε↑9<∪n∞λ∞O$ε∞c"D∧λλλ∧∧λ≤⊂→~w:2y≤4πrs :8
AiIkB`,hQ↓↓↓α↓↓↓β4K3 "π'Rπ'.XSHh$∧ααα∧∧αε⊗≤M'/∨M_gJβ'TβXQ$ααα∧∧ααεLXg&W↑8

≤↑(∞GT≥≤],Wc"H∧∧λλλ∧∧≠=;∞M<≠⊂∩X40w5\β := true;
        ensuRe2 := pruE9
α        rightjus@QSMr@hzAieUJv~∀@@@@@Aga¬GB@Tt@`v~(@@@@@@Ag!SEiKβ↓↓iuε3π3O+X4)↓α↓↓↓↓αβ≠ ?$β
β'TβαπMtεn∂
<V/αMrπ≡≡h	-}≥⊗}ε≠+Y→,@4s2`$ := False;
        opts@¬mJ~∀@@@@↓K]H@ TAS]%iP∨C ↓)%↓β1PPH%
D∧λλλ∧
9Z0~≠zz⊗@ initializE output s@∃iaS]≥f\4R↓)$Q!PPH$∧ααπ∞-v≡.NZ&*ε≥m↔&@⎇=∞aQ@εEεB⊂⊂⊂⊂λ⊂12sZw⊂∀¬λ4s4`4out *)
∀@@@@@AE@3∞s/∂?.sQ↓ij↓Al4R↓↓↓↓α↓↓βf;/3Ls∃↓ijβ⊂⊗∞β_p∩NFE⊂⊂λ⊂⊂⊂⊂λ64w2Xwzw:λ≥≡P⊗H_YFEλ⊂⊂⊂⊂λ⊂⊂:2\4¬analtp∪aα)↓iu∧¬Gπ#1Q"αα∧∧ααα9ε∂↔⎇_G&Bπ'Rβαc"D∧λλλ∧∧λ→0∃→qz⊂≥∂P30v≤p¬0⊗~(@@@@@@AaαWO∃βQuβ≠∞c@≡αc"D∧λλλ∧∧λ≤r
≤]λ∞GTλ
FBα        @U]IKe¬mCCXtp∃β'∪W+αc"D∧λλλ∧∧λ≠p~]9tr:~⊂≥≡P≠p|7`7i`	iP4⊂	↓↓α↓↓β↔v!↓!$λ
-m=≠u.Dλ¬∀P∞FEεE
∃⊂⊂⊂λ⊂4w4]80q - initial@%uJAa¬`π∨⊗C!β≤∧W'~;YnU
 *)~∀4⊂⊂∀$∧ααπ∞-v≡9→0→→P4w4]80q;
~∀@@@@↓mCd~(@@@@@@Apβ	`∩ε≥nF.y<@≥H∀⊂
 @1←←`AαK;∪↔@∧αRHβ"C!↓α@
      @	K@∨'p∧αBR
_M≡≤_<D¬J#"D∧λλλ∧∧λ~y,↑≤_<DπLεP_∞β
∀@@@@@AaC@⊗∂?Ww!↓iUβ↓d4	α↓↓↓↓α↓βCπα,⊗≡F≤∧@⊂∞α8
A]UXv~∀@@@@@AY←α≠ ≡9→→-nλ
O$ε∞c"D∧λλλ∧∧λ≠]-\Y<Z-lh
O$
Xπw:[q2y4[3]FEλ⊂⊂⊂⊂λ⊂⊂8 !p¬CaC≥J@tz`v~∀@@@@@AaCICgWSβ↓↓i@TεβHh$∧ααα∧∧αε@];8L↑]z1∞Mλ∞O$εnc"D∧λλλ∧∧λ→P↔\α p⊂@λ∧β@'αP⊂⊂≥4π maxkee@@AI↑AMCmKaαBoaα≠R`,→9P∀[2r⊂≥∂P30v≤β`
`,hQ↓↓↓α↓↓↓β∧∧↔.x9P∩CE⊂⊂⊂λ⊂⊂2`.d  * in`∪iACd@T$@v~∀4⊂⊂∀$∧ααε,X	m≥H
∃λ92t`.itialize *)
∀@@@@Aα3?Iβ ∧β@'αP19→P:7P~v6⊂ $o
α        if @⊂AS@9∧εvFN=λ∞M→;C!⊂⊂⊂⊂λ⊂⊂⊂⊂λ1pp∪@∀AHA←α04)↓α↓↓↓↓α↓↓↓↓∧∧',,¬⊂≥CE⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂ #om0∀@l~∀@@@@@@@@@Aα≠?U@$λ≤βrw:[q2y 8∧p∃↓α⊂∞aQHλλ∧∧λλλ∧∧λλ⊂∪≤αi0∀AαK;'S4¬w-αX
            ind8∧@v~(@@@@@@@@@AS]@p	β'vKS'nπ0hR∧∧ααα∧∧ααα∧λ
-o∞H⊂∀[4z4`.x;
            hi`(βQ↓l4R↓↓↓↓α↓↓↓↓α↓β .≤∧@≥λ4p∞i@Q[Cdv4⊂	↓↓α↓↓↓↓α↓↓↓β|επ#R
_M≡≠xλ 48ε~)α↓↓↓↓α↓↓↓↓αβ?WQRβ';≤Mw/#1Q"αα∧∧ααα∧∧ααπ≤s@$∞c"D∧λλλ∧∧λλλ∧∧≤_<G⊂4w4]80p∩l~∀@@@@@@@@@Aβ∪↔MiβX4)↓α↓↓↓↓α↓↓↓↓∧ε6.c!Q"αα∧∧ααα∧∧ααα∧λ	M}H≡_H≥_
 0 po @5CqaC≥JAI↑↓`∂↔LXλnM8πw-↑_h
 := t`%UJv~∀@@@@@@@@AgWRh@v~∀@@@@@@@@Ag←@⊂π"βXQ$ααα∧∧ααα∧∧απ≡,¬≥λ8∧idlelength[s@UE`∪'αMF-j∧εO$ε∞c"D∧λλλ∧∧λλλ∧∧≥_
6∞α ti@QYK@3,¬f >~⊂
vXtp∞tith	Kh∧β@'αP⊂⊂;
            @U]Ht@l~∀@@@@@@@@@Aβ;↔=iβX4)↓α↓↓↓↓α↓↓↓↓∧∧WF≠$π0hR∧∧ααα∧∧ααα∧λ
-Mα≥εEλ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂2w2βE⊂⊂⊂λ2p∞dPTAe∃S]@'&Kπ3'T∧RαR∀π0hPβ"@↓Dλ
∃λ⊗VV@--)--4ZRZZ4ZZZZαi5%5hi5%5h¬RjJUQRjJUP%U++#%Tλ¬∀FBα  ((@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)Hh!↓↓@¬"ααclasS;

      var
        @
PtACMGSRvPTASαs∪↔aπ3πK≤≤&f*¬%⊂hR∧∧ααα∧∧ε.o∞O∪Bε=↔,{_<n]P∀¬λ0r6⊂→4rv2≤P0q2H30v9YP⊃∀FB∧AεEλ⊂⊂⊂⊂λ12st[⊂⊂∃⊂~w0z1[0yyP
∀@
        wi@QPAK[AirAI<~∀@@@@@@@AEK≥S\4R↓↓↓↓α↓↓↓↓∧¬F/'LXDπO(⊃L≥≤y.aQHλλ∧∧λλλ∧∧→~9m≡λ∞O$X;⊂→Y]FE⊂λ⊂⊂⊂⊂λ⊂⊂⊂ &or`≠GαCπI↓Siβ≠πe≠∃l4R↓↓↓↓α↓↓↓↓∧¬wπ&≥yf≡F≤∧@⊂∞≤¬ f@¬YgJ@Xh ∩α∧∧ααα∧∧αε←↑Nπ/&=↔αβ'Pε ,8ε0∪@∀p4	α↓↓↓↓α↓↓↓βn@⊗>≥l6F∂$π#jεl≥G<αYFEλ⊂⊂⊂⊂λ⊂⊂⊂⊂≤0y0s\αaphchar := falpπ@∃@1Q"αα∧∧ααα∧∧π∞␈.M⊗wF=↔αβ'Tε ,8ε0∪@∀p4	α↓↓↓↓α↓↓↓β∧¬G/≡|-VNw↑4βC@(→P⊂[9rP≠
λ∧@@@@@@@Ack←β#∃↓ijβ⊂⊗∞β_q'⊃ Hλ∧∧λλλ∧∧λ≠]-\Xπy6H≥~P#_v9r]CE⊂⊂⊂λ⊂⊂⊂⊂λ⊂2w2∞FE⊂⊂λ⊂⊂⊂⊂λ33y ch := jul th∞AI∃XAI↑↓GYCGβ~g∂"j↓a`*X.∞≡.c!∧λλλ∧∧λλ⊂∪≠y⊂1dλ≥~P H:7P : do Class[ch].lette@H@tzAQ`@.U1PBα∧∧ααα∧λf␈∩8
∧πM(∀m\;≠⊂$∞≠h∀m\;≠⊗D≠h⊂mL<|vl=↔+[↑≥→0→λ≥~P*≤αpJv4∀@@@@@@A→←dAG @tjAiKeNAQ↑A]S9JAI↑↓GYCGβ~g∂"hs∪'∨LεBβST
Gπ9*c!$λλλ∧∧λλ⊂mL<|vl;+Y[n
αqt0\⊂≥≡P≥9:r]CE⊂⊂⊂λ⊂⊂⊂⊂_v0qiVp.W3≠y0
c@!Cd@ttAaek∀r~∀@@@@@AGYCMc7K~αs≠ ?-\6F∂$π#jπN.V+XQ$ααα∧∧ααε=Hλ.≡v{↔%L[|[,=_8	∞≤¬ tru`
`,hQ↓↓↓α↓↓↓β≤cπON←αu+≠⎇∪7∂#∂⊃↓iU¬#C@.W1PRα∧∧ααα∧λ6f∂>;7≥jliw⊗@8z_.∧∞O(∞N]9.aQHλλ∧∧λλλ=_<p→Vz.W3≠y0
c@!Cd@TtAaek∀r~∀@@@@@AGYCMc7o:9MP∨Kn≠#πIβQuβS↔+∃l4R↓↓↓↓α↓↓β∂d∧↔>vz_.t.W3≠y0
c@!Cd@@SiβCK,∧SHh$∧ααα∧∧αε≡L≡7;{_\L≤zy0~↔Tεfo@I[GQCH@tjAQ`@.U1PBα∧∧ααα∧λλmL<|vn190qZp¬t]∞dh∂e[
QCd@hzAieUJv~∀@@@@@AGYα@∨≥>8≡z⊂∞W→5y6qZ0y⊂≥∂P:9:Y]FE⊂λ⊂⊂⊂⊂λ⊂1v !pπg7IEk←iKtYMOE5GQC@⊂∧βC@(≥≤N\αX
        c@1Cgg7Mck@?&*u 6mxM\z_<DπLεP 4p¬`↔∃β1P@$λλλ∧∧λλ⊂⊃[0yymX4∧ank](
M←β∪7∂#∂⊃↓i@Tλ
∞8¬e+
λ∧@@@@@@Aα≠3πO≥[
`*m_N∞αz1`(ar  4tA`∪KαX	'F@
        claspπ7Gh¬fNw∞X
=_8	 8∧p∃β'∪W+αc"D∧λλλ∧∧λ_p⊗_yymr↔Tε`∪]AkiGQ¬`	↓ihβSKW+X4)↓α↓↓↓↓αβ∂3πα8kt.W4[8:z1Z0y⊂≥∂P:1:Y]FE⊂λ⊂⊂⊂⊂λ⊂1v !pπg7WtX'≠π+S∂#∂⊃↓i@Tλ
∞8¬e+
λ∧@@@@@@Aα≠3πO≥[Vu;L¬gπ=_p∀_y⊂∃≡H8∧re@∀p4	α↓↓↓↓α↓β∂3∂≠@≥←{PM≥\≥0~_t0p∩p	`*∞N'.,¬FEλ⊂⊂⊂⊂λ⊂⊂1`,ass[bla`≥WtX'≠¬+S∂#∂⊃↓i@Tλ
∞8¬e+
λ        @
YCggmS:][¬aOS]
QCd@hzAieUJv~∀@@@@@AGYα@∨≥=KR`-αpq3Zw1t0\α :=true;
        cla`'β~`∨∃β+[,≡Yz0↔_t0p∩p	`*∞N'.,¬FEλ⊂⊂⊂⊂λ⊂⊂1`,assKbla`≥WtX .≤,vNv=↔$∞O ∞N]9.aQHλλ∧∧λλλ=_8	`3Y` 5v{CC'|s∂#πα λπ≤¬ tru`
`,hQ↓↓↓α↓↓↓β≤¬F∂∨9<ej@Xπp 4ionc@!Cd@@Siβ@',¬0∩Nβ
α        claspπ7U:9←aiSα{;∂#∂⊃↓iU∧εG.αrP≠
λ        Class[i].oPtignchar := true;
        cl@¬`∂Noei0⊗@|≥~-⎇Xz_.∧∞O(∞N]9.aQHλλ∧∧λλλ=_<p→VvnW7\:4ww_t0q :8
AiIkB`,hQ↓↓↓α↓↓↓β≤cπON←αu+}λ

≥{Xr≡H
O$∞≤]1'⊃"Hλ∧∧λλλ∧{_<n≠|W#M}≥~3mlz_<DπO(⊂~≤8¬e+
        class[s].optignchar := true;
        cl@¬cg7kt]P∨C&K?;∂FA↓ijβSKW+X4)↓α↓↓↓↓αβ∂3π≤ε5←=Umwπ&≥⎇f≡F≤ λππαP:9≥pX
        c@1Cgg7	YC@;]i3 ?∞M⊗}v=↔αβ'Tπ'↔\W0hR∧∧ααα∧∧ε≡f≤8k≤Y_;M≠+[p_≥4sw1Z0y⊂≥∂P:9:Y]FE⊂λ⊂⊂⊂⊂λ⊂1v !pπg7KtYP∨W'βWS∂F@∩β'Tπ'↔\W0hR∧∧ααα∧∧ε≡f≤∧p→Vβp].outpuTcha`$α↓a`*∞N'.αc"D∧λλλ∧∧λ_p⊗_yymyWU0∂u@Qa`↔S≤¬ε∂∩¬'Rππ,X	'FA⊂⊂λ⊂⊂⊂⊂λ1v0y\β[uM∞outp@UiGQCH@tjAQ`@.U1PBα∧∧ααα∧λ6f∂>;7=jmzW'π↑L6F∂$π#jπL.V+XQ$ααα∧∧ααε=Hλ.ymq6_w1n@.outp@UiGQCH@tzAQa`↔∃Xh!↓↓α↓↓↓↓∧≠3πO≥[∞u;εCπ∨⊗C#∂FI↓ijβSKW+X4)↓α↓↓↓↓αβ∂3π≤ε5↑∃β+\≡X9|L≡~_p∀_y⊂≥≡H:9:bNFE⊂⊂λ⊂⊂⊂⊂λ1v0y\β[i].paragpaphchar := true;
        cl@¬`∂No]i3Cπ⊗↔Kπ∧C∂#πα λππαP:9≥p¬0⊗~(@@@@@@AG1Cgg79:P≠C∂∪π?,≡εF≡≡"βST
G.αrUFB⊂⊂⊂⊂λ⊂⊂⊂![0yym\.W8 \0sy0\41t0\⊂≥≡P≥9:r]CE⊂⊂⊂λ⊂⊂⊂⊂_v0q`3Xπg:]ACeCOICaQGαCπI↓SiβSK,)d4	α↓↓↓↓α↓β∂3∂≠FoVhsCπK∞;CπCF≠#πIβQuβS↔+∃l4R↓↓↓↓α↓↓β∂d∧↔∂≥<-F∞v;PN<X9n0x41Z0y⊂≥∂P:9:Y]FE⊂λ⊂⊂⊂⊂λ⊂1v !qs[l],¬g←eQS]qG!Cd@TtAaeK∀r~∀@@@@@AGYCM`∞o6jsO?K&K;c∂F@∩β'Tπ'↔\W0hR∧∧ααα∧∧ε≡f≤8kx.W9[y:4w≡1t0yλ≥~P*≤αqe+
λ        Class[pX
]g=`@&≥oε≡F≤ λππαP:9≥p¬0⊗~(@@@@@@AG1Cgg7M:Ug←IiS]q
QCd@hzAieUJv~∀@@@@@AGYαGNo⊗cπ;.h¬g≡␈.M⊗wF=↔∩β'Tπ'↔\W0hR∧∧ααα∧∧ε≡f≡8k≡≠≥<kU\≠⊂~\wy6t[:yP≥∂P:9:Y]FE⊂λ⊂⊂⊂⊂λ⊂1v !qs[minusM∞plusopianus := true;
        clas@M7Ick=iK:]Ek←iJtp∃β'∪W¬@1Q"αα∧∧ααα=F∂∨;>7∂.}LUj@\9;nL(∞O$∞≤]1'⊃"Hλ∧∧λλλ∧{_<n≠{W+Mn;9Sn-αP∃≡H:9:bNβ
        clasq[smalhn]∞nqmf@=aP∃↓SiβSK,)d4)α↓↓↓↓α↓β∂3∂≠Fo2js;W74¬wε@(∞O$∞≤]0∩NFE⊂⊂λ⊂⊂⊂⊂λ1v0y\β[smalhl].nqmf@=aP∃↓SiβCK,)d4)α↓↓↓↓α↓β∂3∂≠FoJhs;G↔4¬w-αP∃≡H892bNFE⊂⊂λ⊂⊂⊂⊂λ1v0y\myvp[4∧r]∞nqmf@=aP∃↓SiβCK,∧SHh$∧ααα∧∧αε≡L≡7
↑-L⊗v]Umg.nmxMT∞O(∞N]9.aQHλλ∧∧λ→0↔→⊂⊂∃⊂~w0	tclass *)  64⊂λ4%
D∧λλλ∧
8π4`4clocKpε@@5∧¬⊗vOM_λ-M>Y(∞0{q`,ock @¬]HAo¬YP∪∂d¬v≡ZβC"D¬J#"AQ@εE⊂λ⊂⊂8 2ocedupe i@9SiGYα{∂/Mβ1P@!α@
      @YCd4R↓↓↓↓α↓↓β
α⊂∞D<xp∀Z]P∀* p	K]LAISO%hA←L↓oC@3d∧6f@xz`⊂
∀@
        c $βQβπO≤¬⊗KZ¬
D
βw2`3 digit of wa`→Yα≠3 >=0λ¬% εE⊂λ⊂⊂⊂⊂λ⊂1P∪: asc@%Rv@PαQβ¬β|ε"παhn⊂0v@ or p@4@TR~(@@@@@@AgβKGS↔n≠3 >=0∞D8ε3 !8ε@@!Rβ@∨O>LVjε=Hl=h_<d∧βt4:mm0∃@≤ε2:ααJ#!⊂⊂⊂⊂λ⊂⊂⊂ 81: i@9iKOKβ⊃`~αα
H@p¬`≥Kβ∪π1βd¬v␈α
_LL>λ
E⊃ ¬εEβE⊂⊂⊂λ⊂⊂8 2ocedupe getp	S[∀Q`≠π⊂∧π#R≥F ,*.c!∧¬∀~(@@@@@@AE∃H∂'aQ"αα∧∧ααα∧∧π&Nβ90→]0p
p(day, month, qeAp, hrpεP⊃βnK;MDλl\|j.aQHλλ∧∧λλλ∧∧≥⊗`_WP≥≡@_t9∀4≤αs div 10 + ord( ∞`NαI%l4R↓↓↓↓α↓↓↓↓∧εE@6TεP≥∂P1t9
499P≠wr⊂_L⊂⊂ @=`⊃↓8εα:J↔1P@$λλλ∧∧λλλ∧∞⊗lw$πLεP∪Kα#;
          t[4]p	`*8
∞∀6t`.pεAISβ1↓EAαYβ ?,@
∧v	j*'F@
          t[5] *= chr(mi`≥f↓[←H@D`@@-∧¬w,λ	`_	TT]FBα          p[6] :0~@≤X	;1Q"αα∧∧ααα∧∧π%[{Pλπ≤¬ c@!`	#O,∧74→~0≠λ_X⊂∃H4πrd N`NR$p4$∧ααα∧∧ααα∞K3E@(λ
≡H1t9∀≤β`Gf↓[←H@D`@@-∧¬w,λ∧∪H	TT]FBα        @∃]Hv@ UOKiQS[JT$~∀4Ph ∩α∧∧ααε,X	m≥H
∃λ4p∞i@QGY←Gα[@~ααJ#!⊂⊂⊂⊂λ⊂⊂⊂ 'etti@5JQgsβ≠S↔\8
|zj.aQHλλ∧∧λλλ@4πr @`b@tzα↓EβSz↓aβ∪zβ@⊗∂|8
|zp
|nP⊂~= h∂eHαC@∨O>LVn≡Mxλmmxλ #tRv~∀@@@@@AeC]GY←GαZ`≠Mβ(∞GT_[⊂⊂[5]FEλ⊂⊂⊂⊂λ⊂⊂90]qv7`#hπ6bat@t`5∧∧&f∞βZ`≥CE⊂⊂⊂λ⊂⊂⊂⊂_XP⊂~= ra`/
YP∨∂]YFu@1Q"αα∧∧ααα6"βSβ(⊂→_{qv /ck[ %tp4$∧ααα∧∧αε≠4π#jε↔1P@$λλλ∧∧λλ⊂⊃XyrP #1 of
λ∧@@@@@@@AuKe<pλ (αHλ∧∧λλλ∧∧λλλ
≤β⊂1Yλ≤¬ z@∃` :∞Mε.pβ"H∧∧λλλ∧∧λλλ∧∧λ_Y,@tp∞
              @b@tzαβ?;∃β1P@$λλλ∧∧λλλ∧∧λλλ6Hλ
≡H8∧wo
λ∧@@@@@@@@@@@↓K]H~(@@@@@@@@@AKYβ≠∃β
α⊂λπ≤¬ blan`⊗@Xh ∩α∧∧ααα∧∧αε@{Y.AQHλλ∧∧λλλ∧∧λλ⊂∀Yα c $α↓uβS>yβ@&XDlh∞GT≤β"D∧λλλ∧∧λλλ∧∧→;⊂→YP4s⊂_Y⊂⊂≡↓i`∨=∧εFF.βC"D∧λλλ∧∧λλλ∧∧λλ⊂⊃→pπin
λ∧@@@@@@@@@@@↓Fb@@SiβL≥f@7c"H∧∧λλλ∧∧λλλ∧∧λ_lDπLεP #2  ~@Hp4$∧ααα∧∧ααα∧∧ααε4∧hπ≤¬ p
λ∧@@@@@@@@@@@↓K]Hv4⊂	↓↓α↓↓↓↓α↓β@'⎇w hR∧∧ααα∧∧ααα∧λλL\βtwεBα            i@_AFd@pzA←]∀AaQKαp4)↓α↓↓↓↓α↓↓↓↓α↓β↔>K8$$∧ααα∧∧ααα∧∧ααε4∧ ⊂∞α8
AE1C]@-β1P@$λλλ∧∧λλλ∧∧λλλ6Hλ
≡H1Y⊂⊗H→
              e@9H⊂∀$∧ααα∧∧ααα∧∧ε.g<QP@$λλλ∧∧λλλ∧∧λλλ,9z0↔βE⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ1XP≥∂P7w2Nβ
∀@@@@@@@@@@AF@⊂∧β@'αP1Yλ∃P⊂∩
λ∧@@@@@@@@@@@↓K]Hv4⊂	↓↓α↓↓↓↓α↓↓↓β≠→↓i@Tλ↓QHλλ∧∧λλλ∧∧λλ⊂∩[2εE⊂λ⊂⊂⊂⊂λ⊂⊂⊂ %nd;
        walh	GYα{∂.mα≠RβSβ(⊂⊃L]FE⊂λ⊂⊂⊂⊂λ⊂;pv≠1v7`#hπ6e:α↓`∪@(_lGF@
        p∂CYαc∂3?≤¬5@6w(∞GT_{p⊗≠w_
        walh	GYα{∂.mαKRβSβ(⊂→_{qv /ck[ )tp4	α↓↓↓↓α↓β@>≥H=≠xp∃VX¬P~@hzAeC]GY←GαZe@-U1PBα∧∧ααα∧λ
l≥≠_p⊗≠qu`≠6] :=bh	C],r~∧@@@@@A`∨πd¬F≡f|95@6βnP≥∂P1Q]CE⊂⊂⊂λ⊂⊂⊂⊂≥pr6 #lh∂GWlq0∃↓β'Rεkαc"D∧λλλ∧∧λ≥x-Mα1v /ck[)] :5 Bla`≥VβX4)↓α↓↓↓↓αβ←π∪d∧6f@xzvf⊗↔(∞GT_[⊂-mnc"D∧λλλ∧9Y⊂
∃⊂4`.itcl@=GWf@(R@v~(~∀PT@@@@    dt[5] := chr(zero + month mod 10);
          dt[6] := '/';
          dt[7] := chr(zero + day div 10);
          dt[8] := chr(zero + day mod 10);
        end; (*date*)


      begin (* initdates *)
        date(systemdate);
        for x1 := 1 to 8 do rawdate[x1] := ord(systemdate[x1]);
        rawdate[9] := blank;
        rawdate[10] := blank;
        thismonth := months[(rawdate[4] - zero) * 10 + rawdate[5] - zero];
        nicedate[1] := rawdate[7];
        nicedate[2] := rawdate[8];
        nicedate[3] := blank;
        nicedate[4] := thismonth[1];
        nicedate[5] := thismonth[2];
        nicedate[6] := thismonth[3];
        nicedate[7] := blank;
        nicedate[8] := rawdate[1];
        nicedate[9] := rawdate[2];
        nicedate[10] := blank
      end (* initdates *) ;

(*      initdirects - initialize the directs table.
 *)


    procedure initdirects;

(*      onedirect - initialize one direct entry.
 *
 *     param dir = directive.
             a,b,c = 3 characters of directive name.
 *)


      procedure onedirect(dir: direct;
                          a, b, c: ascii);


        begin (* onedirect *)
          directs[dir][1] := a;
          directs[dir][2] := b;
          directs[dir][3] := c
        end (* onedirect *) ;


      begin (* initdirects *)
        onedirect(bre, b, r, e);
        onedirect(com, c, o, m);
        onedirect(cou, c, o, u);
        onedirect(frm, f, o, r);
        onedirect(ind, i, n, d);
        onedirect(inp, i, n, p);
        onedirect(inx, i, n, x);
        onedirect(lit, L, i, t);
        onedirect(mar, m, a, r);
        onedirect(opt, o, p, t);
        onedirect(out, o, u, t);
        onedirect(pag, p, a, g);
        onedirect(par, p, a, r);
        onedirect(res, r e, s);
        onedirect(sel, s, e, l);
        onedirect(ski, s, K, i);
        onedirect(sor, s, o, r);
        onedirect(sbt, S, u, b);
        onedirect(ttl, t, i, t);
        onedirect(und, u, n, d);
        onedirect(weo, w, e, o);
        onedirect(exc, e, x, c);
        onedirect(ast, A, s, c);
        onedirect(lpt, l, p, T);
        onedirect(vtr, v, t, r);
        onedirect(xer, x, e, r);
      end (* initdirects *) ;

(*     initmonths - initialize the months table.
 *)


    procedure initmonths;

(*     onemonth - initialize one month name.
 *
 *    param mon : month number.
 *           a,b,c : three letters of month name.
 *)


      procedure onemonth(mgn: integer;
                         a, b, c: ascii);


        begin (* onemonth *)
          months[mon][1] := a;
          months[mon][2] := b;
          months[mon][3] := c
        end (* onemonth *) ;


      begin (* initmonths *)
        onemonth(1, j, smalla, smalln);
        onemonth(2, f, smalle, smallb);
        onemonth(3, M, smalla, smallr);
        onemonth(4, a, smallp, smallr);
        onemonth(5, m, smalla, smally);
        onemonth(6, j, smallu, smalln);
        onemonth(7, j, smallu, smalll);
        onemonth(8, a, smallu, smalle);
        onemonth(9, s, smalle, smallp);
        onemonth(10, o, smallc, smallt);
        onemonth(11, n, smallo, smallv);
        onemonth(12, d, smalle, smallc)
      end (* initmonths *) ;


    begin (* initialize *)
      initmonths; (* before initdates *)
      initclass;
      initclocks; (* before initdates *)
      initdates;
      initdirects;

      csi;
      getfilename(1, outfilename, exists);
      if rsx then rewrite(outfile, outfilename, 'sy:.doc/var:256')
      else rewrite(outfile, outfilename, '.doc');
      currentfile := 1;
      getnextfile(exists);

      directline := false;
      endofinput := false;
      filecount := 0;
      eol := true;
      errorq := dalse;
      gaps[0] := 1;
      inchar := blank;
      incolumn := 150;
      inlength := 0;
      inxbase := nil;
      inxlast := nil;
      linenumber := 0;
      linenums := infile↑ in ['0'..'9'];
      moreonleft := false;
      nblanks := 0;
      nchars := 0;
      newinline := true;
      newoutline := true;
      newparagraph := true;
      ngaps := 0;
      nwords := 0;
      outlength := 1;
      outline[1].c := blank;
      outline[1].nbl := 0;
      reinitialize([bre..ill]);
    end (* initialize *) ;

  (* --------------------------------------------- *)
  (*                                               *)
  (*                    PROSE                      *)
  (*                Main Program                   *)
  (*                                               *)
  (* --------------------------------------------- *)

α
  begin (* prose *)
    initialize;
    nextword;
    while not endofinput do
      begif
      packword;
      nexpwoRd
      end;
    break;
    if linecount < inf@%]Sir↓iQK\4∀@@@@AEK≥S\~∀@@@@↓]Koa¬OJQS9MS]SQrRv~(@@@@AgKY∃GiS←97aCO∃]k[E∃e:@ttAiek∀v~∀@@@@A¬ImC]
KMOe4~∀@@@@AK9Hv~∀@@AS_AKee=efAi!K\AoISiKYαq#/W&3'3∃b↓≥αC⊗{O*↑'⊗←.4ε&/L\7&.EdrKXQ$αε.l@묬H≤⊂→≠yrP∃
P∪εE