diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-06-06 22:28:48 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-06-06 22:28:48 +0200 |
commit | 1bbdbb2828dc3642df0b452ef9d1685dc278ae79 (patch) | |
tree | 437db5fe8333ebd061d0edc72e5caef293170670 /sys/doc/sam | |
parent | 1ffd5f9af1ee4c870346a482fee2dc2d9314dba4 (diff) |
/sys/doc: remove autogenerated postscript files
Diffstat (limited to 'sys/doc/sam')
-rw-r--r-- | sys/doc/sam/sam.html | 3705 | ||||
-rw-r--r-- | sys/doc/sam/sam.tut.out | 4863 | ||||
-rw-r--r-- | sys/doc/sam/sam0.png | bin | 38692 -> 0 bytes | |||
-rw-r--r-- | sys/doc/sam/sam1.png | bin | 19764 -> 0 bytes | |||
-rw-r--r-- | sys/doc/sam/sam2.png | bin | 4722 -> 0 bytes | |||
-rw-r--r-- | sys/doc/sam/sam3.png | bin | 4805 -> 0 bytes | |||
-rw-r--r-- | sys/doc/sam/sam4.png | bin | 1236 -> 0 bytes |
7 files changed, 0 insertions, 8568 deletions
diff --git a/sys/doc/sam/sam.html b/sys/doc/sam/sam.html deleted file mode 100644 index e7bda43b6..000000000 --- a/sys/doc/sam/sam.html +++ /dev/null @@ -1,3705 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" -"http://www.w3.org/TR/html4/loose.dtd"> -<html> -<head> -<meta http-equiv=Content-Type content="text/html; charset=utf8"> -<title>The Text Editor sam</title> -</meta> -</head> -<body> -<p style="margin-top: 0; margin-bottom: 0.50in"></p> -<p style="margin-top: 0; margin-bottom: 0.21in"></p> - -<p style="line-height: 1.4em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;"> -<span style="font-size: 12pt"><b>The Text Editor </b></span><span style="font-size: 12pt"><tt>sam</tt></span><span style="font-size: 12pt"><b></b></span></p> -<p style="margin-top: 0; margin-bottom: 0.21in"></p> - -<p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.4em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;"> -<span style="font-size: 10pt"><i>Rob Pike</i></span></p> -<p style="line-height: 1.4em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;"> -<span style="font-size: 10pt"><i>rob@plan9.bell-labs.com</i></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="margin-top: 0; margin-bottom: 0.33in"></p> -<p style="line-height: 1.4em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;"> -<span style="font-size: 10pt"><i>ABSTRACT</i></span></p> -<p style="margin-top: 0; margin-bottom: 0.19in"></p> -<p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.50in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -is an interactive multi-file text editor intended for -bitmap displays. -A textual command language -supplements the mouse-driven, cut-and-paste interface -to make complex or -repetitive editing tasks easy to specify. -The language is characterized by the composition of regular expressions -to describe the structure of the text being modified. -The treatment of files as a database, with changes logged -as atomic transactions, guides the implementation and -makes a general ‘undo’ mechanism straightforward. -</span><span style="font-size: 10pt"></span><span style="font-size: 10pt"></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.35in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -is implemented as two processes connected by a low-bandwidth stream, -one process handling the display and the other the editing -algorithms. Therefore it can run with the display process -in a bitmap terminal and the editor on a local host, -with both processes on a bitmap-equipped host, or with -the display process in the terminal and the editor in a -remote host. -By suppressing the display process, -it can even run without a bitmap terminal. -</span><span style="font-size: 10pt"></span><span style="font-size: 10pt"></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.35in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">This paper is reprinted from Software—Practice and Experience, -Vol 17, number 11, pp. 813-845, November 1987. -The paper has not been updated for the Plan 9 manuals. Although -</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -has not changed much since the paper was written, the system around it certainly has. -Nonetheless, the description here still stands as the best introduction to the editor. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="margin-top: 0; margin-bottom: 0.50in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>Introduction -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -is an interactive text editor that combines cut-and-paste interactive editing with -an unusual command language based on the composition of regular expressions. -It is written as two programs: one, the ‘host part,’ runs on a UNIX system -and implements the command language and provides file access; the other, the -‘terminal part,’ runs asynchronously -on a machine with a mouse and bitmap display -and supports the display and interactive editing. -The host part may be even run in isolation on an ordinary terminal -to edit text using the command -language, much like a traditional line editor, -without assistance from a mouse or display. -Most often, -the terminal part runs on a Blit<sup></sup></span><sup><span style="font-size: 6pt">1</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> terminal -(actually on a Teletype DMD 5620, the production version of the Blit), whose -host connection is an ordinary 9600 bps RS232 link; -on the SUN computer the host and display processes run on a single machine, -connected by a pipe. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -edits uninterpreted -ASCII text. -It has no facilities for multiple fonts, graphics or tables, -unlike MacWrite,<sup></sup></span><sup><span style="font-size: 6pt">2</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> Bravo,<sup></sup></span><sup><span style="font-size: 6pt">3</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> Tioga<sup></sup></span><sup><span style="font-size: 6pt">4</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -or Lara.<sup></sup></span><sup><span style="font-size: 6pt">5</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -Also unlike them, it has a rich command language. -(Throughout this paper, the phrase -</span><span style="font-size: 10pt"><i>command language -</i></span><span style="font-size: 10pt">refers to -textual commands; commands activated from the mouse form the -</span><span style="font-size: 10pt"><i>mouse</i></span><span style="font-size: 10pt"> -</span><span style="font-size: 10pt"><i>language.</i></span><span style="font-size: 10pt">) -</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -developed as an editor for use by programmers, and tries to join -the styles of the UNIX text editor -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt"><sup></sup></span><sup><span style="font-size: 6pt">6,7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -with that of interactive cut-and-paste editors by -providing a comfortable mouse-driven interface -to a program with a solid command language driven by regular expressions. -The command language developed more than the mouse language, and -acquired a notation for describing the structure of files -more richly than as a sequence of lines, -using a dataflow-like syntax for specifying changes. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The interactive style was influenced by -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">1</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -an early cut-and-paste editor for the Blit, and by -</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">8</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -the Blit window system. -</span><span style="font-size: 10pt"><tt>Mux</tt></span><span style="font-size: 10pt"> -merges the original Blit window system, -</span><span style="font-size: 10pt"><tt>mpx</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">1</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -with cut-and-paste editing, forming something like a -multiplexed version of -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt"> -that edits the output of (and input to) command sessions rather than files. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The first part of this paper describes the command language, then the mouse -language, and explains how they interact. -That is followed by a description of the implementation, -first of the host part, then of the terminal part. -A principle that influenced the design of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -is that it should have no explicit limits, such as upper limits on -file size or line length. -A secondary consideration is that it be efficient. -To honor these two goals together requires a method for efficiently -manipulating -huge strings (files) without breaking them into lines, -perhaps while making thousands of changes -under control of the command language. -</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">’s -method is to -treat the file as a transaction database, implementing changes as atomic -updates. These updates may be unwound easily to ‘undo’ changes. -Efficiency is achieved through a collection of caches that minimizes -disc traffic and data motion, both within the two parts of the program -and between them. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The terminal part of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -is fairly straightforward. -More interesting is how the two halves of the editor stay -synchronized when either half may initiate a change. -This is achieved through a data structure that organizes the -communications and is maintained in parallel by both halves. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The last part of the paper chronicles the writing of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -and discusses the lessons that were learned through its development and use. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The paper is long, but is composed largely of two papers of reasonable length: -a description of the user interface of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -and a discussion of its implementation. -They are combined because the implementation is strongly influenced by -the user interface, and vice versa. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>The Interface -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -is a text editor for multiple files. -File names may be provided when it is invoked: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>sam file1 file2 ...</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">and there are commands -to add new files and discard unneeded ones. -Files are not read until necessary -to complete some command. -Editing operations apply to an internal copy -made when the file is read; the UNIX file associated with the copy -is changed only by an explicit command. -To simplify the discussion, the internal copy is here called a -</span><span style="font-size: 10pt"><i>file</i></span><span style="font-size: 10pt">, -while the disc-resident original is called a -</span><span style="font-size: 10pt"><i>disc file. -</i></span><span style="font-size: 10pt"></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -is usually connected to a bitmap display that presents a cut-and-paste -editor driven by the mouse. -In this mode, the command language is still available: -text typed in a special window, called the -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -</span><span style="font-size: 10pt"><i>window,</i></span><span style="font-size: 10pt"> -is interpreted -as commands to be executed in the current file. -Cut-and-paste editing may be used in any window — even in the -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -window to construct commands. -The other mode of operation, invoked by starting -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -with the option -</span><span style="font-size: 10pt"><tt>-d</tt></span><span style="font-size: 10pt"> -(for ‘no download’), -does not use the mouse or bitmap display, but still permits -editing using the textual command language, even on an ordinary terminal, -interactively or from a script. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The following sections describe first the command language (under -</span><span style="font-size: 10pt"><tt>sam\fP-d -and in the -</tt></span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"><tt> -window), and then the mouse interface. -These two languages are nearly independent, but connect through the -</tt></span><span style="font-size: 10pt"><i>current</i></span><span style="font-size: 10pt"><tt> -</tt></span><span style="font-size: 10pt"><i>text,</i></span><span style="font-size: 10pt"><tt> -described below. -</tt></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>The Command Language -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">A file consists of its contents, which are an array of characters -(that is, a string); the -</span><span style="font-size: 10pt"><i>name</i></span><span style="font-size: 10pt"> -of the associated disc file; the -</span><span style="font-size: 10pt"><i>modified bit -</i></span><span style="font-size: 10pt">that states whether the contents match those of -the disc file; -and a substring of the contents, called the -</span><span style="font-size: 10pt"><i>current text -</i></span><span style="font-size: 10pt">or -</span><span style="font-size: 10pt"><i>dot</i></span><span style="font-size: 10pt"> -(see Figures 1 and 2). -If the current text is a null string, dot falls between characters. -The -</span><span style="font-size: 10pt"><i>value</i></span><span style="font-size: 10pt"> -of dot is the location of the current text; the -</span><span style="font-size: 10pt"><i>contents</i></span><span style="font-size: 10pt"> -of dot are the characters it contains. -</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -imparts to the text no two-dimensional interpretation such as columns -or fields; text is always one-dimensional. -Even the idea of a ‘line’ of text as understood by most UNIX programs -— a sequence of characters terminated by a newline character — -is only weakly supported. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The -</span><span style="font-size: 10pt"><i>current file -</i></span><span style="font-size: 10pt">is the file to which editing commands refer. -The current text is therefore dot in the current file. -If a command doesn’t explicitly name a particular file or piece of text, -the command is assumed to apply to the current text. -For the moment, ignore the presence of multiple files and consider -editing a single file. -</span><span style="font-size: 10pt"></span></p><center><img src="fig1.gif" /></center> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 8pt"><i>Figure 1. A typical -</i></span><span style="font-size: 8pt"><tt>sam</tt></span><span style="font-size: 8pt"><i> -screen, with the editing menu presented. -The -</i></span><span style="font-size: 8pt"><tt>sam</tt></span><span style="font-size: 8pt"><i> -(command language) window is in the middle, with file windows above and below. -(The user interface makes it easy to create these abutting windows.) -The partially obscured window is a third file window. -The uppermost window is that to which typing and mouse operations apply, -as indicated by its heavy border. -Each window has its current text highlighted in reverse video. -The -</i></span><span style="font-size: 8pt"><tt>sam</tt></span><span style="font-size: 8pt"><i> -window’s current text is the null string on the last visible line, -indicated by a vertical bar. -See also Figure 2. -</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="margin-top: 0; margin-bottom: 0.02in"></p> - -<p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Commands have one-letter names. -Except for non-editing commands such as writing -the file to disc, most commands make some change -to the text in dot and leave dot set to the text resulting from the change. -For example, the delete command, -</span><span style="font-size: 10pt"><tt>d</tt></span><span style="font-size: 10pt">, -deletes the text in dot, replacing it by the null string and setting dot -to the result. -The change command, -</span><span style="font-size: 10pt"><tt>c</tt></span><span style="font-size: 10pt">, -replaces dot by text delimited by an arbitrary punctuation character, -conventionally -a slash. Thus, -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>c/Peter/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">replaces the text in dot by the string -</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">. -Similarly, -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>a/Peter/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">(append) adds the string after dot, and -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>i/Peter/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">(insert) inserts before dot. -All three leave dot set to the new text, -</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Newlines are part of the syntax of commands: -the newline character lexically terminates a command. -Within the inserted text, however, newlines are never implicit. -But since it is often convenient to insert multiple lines of text, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -has a special -syntax for that case: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>a</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>some lines of text</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>to be inserted in the file,</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>terminated by a period</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>on a line by itself</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>.</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">In the one-line syntax, a newline character may be specified by a C-like -escape, so -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>c/\n/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">replaces dot by a single newline character. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -also has a substitute command, -</span><span style="font-size: 10pt"><tt>s</tt></span><span style="font-size: 10pt">: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>s/</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>/</tt></span><span style="font-size: 9pt"><i>replacement</i></span><span style="font-size: 9pt"><tt>/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">substitutes the replacement text for the first match, in dot, -of the regular expression. -Thus, if dot is the string -</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">, -the command -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>s/t/st/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">changes it to -</span><span style="font-size: 10pt"><tt>Pester</tt></span><span style="font-size: 10pt">. -In general, -</span><span style="font-size: 10pt"><tt>s</tt></span><span style="font-size: 10pt"> -is unnecessary, but it was inherited from -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt"> -and it has some convenient variations. -For instance, the replacement text may include the matched text, -specified by -</span><span style="font-size: 10pt"><tt>&</tt></span><span style="font-size: 10pt">: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>s/Peter/Oh, &, &, &, &!/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">There are also three commands that apply programs -to text: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>< </tt></span><span style="font-size: 9pt"><i>UNIX program</i></span><span style="font-size: 9pt"><tt></tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">replaces dot by the output of the UNIX program. -Similarly, the -</span><span style="font-size: 10pt"><tt>></tt></span><span style="font-size: 10pt"> -command -runs the program with dot as its standard input, and -</span><span style="font-size: 10pt"><tt>|</tt></span><span style="font-size: 10pt"> -does both. For example, -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>| sort</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">replaces dot by the result of applying the standard sorting utility to it. -Again, newlines have no special significance for these -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -commands. -The text acted upon and resulting from these commands is not necessarily -bounded by newlines, although for connection with UNIX programs, -newlines may be necessary to obey conventions. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">One more command: -</span><span style="font-size: 10pt"><tt>p</tt></span><span style="font-size: 10pt"> -prints the contents of dot. -Table I summarizes -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -commands. -</span><span style="font-size: 10pt"></span></p><center><img src="sam0.png"></center> -</center> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="margin-top: 0; margin-bottom: 0.02in"></p> - -<p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The value of dot may be changed by -specifying an -</span><span style="font-size: 10pt"><i>address</i></span><span style="font-size: 10pt"> -for the command. -The simplest address is a line number: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>3</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">refers to the third line of the file, so -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>3d</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">deletes the third line of the file, and implicitly renumbers -the lines so the old line 4 is now numbered 3. -(This is one of the few places where -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -deals with lines directly.) -Line -</span><span style="font-size: 10pt"><tt>0</tt></span><span style="font-size: 10pt"> -is the null string at the beginning of the file. -If a command consists of only an address, a -</span><span style="font-size: 10pt"><tt>p</tt></span><span style="font-size: 10pt"> -command is assumed, so typing an unadorned -</span><span style="font-size: 10pt"><tt>3</tt></span><span style="font-size: 10pt"> -prints line 3 on the terminal. -There are a couple of other basic addresses: -a period addresses dot itself; and -a dollar sign -(</span><span style="font-size: 10pt"><tt>$</tt></span><span style="font-size: 10pt">) -addresses the null string at the end of the file. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">An address is always a single substring of the file. -Thus, the address -</span><span style="font-size: 10pt"><tt>3</tt></span><span style="font-size: 10pt"> -addresses the characters -after the second newline of -the file through the third newline of the file. -A -</span><span style="font-size: 10pt"><i>compound address -</i></span><span style="font-size: 10pt">is constructed by the comma operator -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><i>address1</i></span><span style="font-size: 9pt"><tt>,</tt></span><span style="font-size: 9pt"><i>address2</i></span><span style="font-size: 9pt"><tt></tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">and addresses the substring of the file from the beginning of -</span><span style="font-size: 10pt"><i>address1</i></span><span style="font-size: 10pt"> -to the end of -</span><span style="font-size: 10pt"><i>address2</i></span><span style="font-size: 10pt">. -For example, the command -</span><span style="font-size: 10pt"><tt>3,5p</tt></span><span style="font-size: 10pt"> -prints the third through fifth lines of the file and -</span><span style="font-size: 10pt"><tt>.,$d</tt></span><span style="font-size: 10pt"> -deletes the text from the beginning of dot to the end of the file. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">These addresses are all absolute positions in the file, but -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -also has relative addresses, indicated by -</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt"> -or -</span><span style="font-size: 10pt"><tt>-</tt></span><span style="font-size: 10pt">. -For example, -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>$-3</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">is the third line before the end of the file and -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>.+1</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">is the line after dot. -If no address appears to the left of the -</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt"> -or -</span><span style="font-size: 10pt"><tt>-</tt></span><span style="font-size: 10pt">, -dot is assumed; -if nothing appears to the right, -</span><span style="font-size: 10pt"><tt>1</tt></span><span style="font-size: 10pt"> -is assumed. -Therefore, -</span><span style="font-size: 10pt"><tt>.+1</tt></span><span style="font-size: 10pt"> -may be abbreviated to just a plus sign. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The -</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt"> -operator acts relative to the end of its first argument, while the -</span><span style="font-size: 10pt"><tt>-</tt></span><span style="font-size: 10pt"> -operator acts relative to the beginning. Thus -</span><span style="font-size: 10pt"><tt>.+1</tt></span><span style="font-size: 10pt"> -addresses the first line after dot, -</span><span style="font-size: 10pt"><tt>.-</tt></span><span style="font-size: 10pt"> -addresses the first line before dot, and -</span><span style="font-size: 10pt"><tt>+-</tt></span><span style="font-size: 10pt"> -refers to the line containing the end of dot. (Dot may span multiple lines, and -</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt"> -selects the line after the end of dot, then -</span><span style="font-size: 10pt"><tt>-</tt></span><span style="font-size: 10pt"> -backs up one line.) -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The final type of address is a regular expression, which addresses the -text matched by the expression. The expression is enclosed in slashes, as in -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>/</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The expressions are the same as those in the UNIX program -</span><span style="font-size: 10pt"><tt>egrep</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">6,7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -and include closures, alternations, and so on. -They find the -</span><span style="font-size: 10pt"><i>leftmost longest -</i></span><span style="font-size: 10pt">string that matches the expression, that is, -the first match after the point where the search is started, -and if more than one match begins at the same spot, the longest such match. -(I assume familiarity with the syntax for regular expressions in UNIX programs.<sup></sup></span><sup><span style="font-size: 6pt">9</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">) -For example, -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>/x/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">matches the next -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -character in the file, -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>/xx*/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">matches the next run of one or more -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">’s, -and -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>/x|Peter/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">matches the next -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -or -</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">. -For compatibility with other UNIX programs, the ‘any character’ operator, -a period, -does not match a newline, so -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>/.*/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">matches the text from dot to the end of the line, but excludes the newline -and so will not match across -the line boundary. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Regular expressions are always relative addresses. -The direction is forwards by default, -so -</span><span style="font-size: 10pt"><tt>/Peter/</tt></span><span style="font-size: 10pt"> -is really an abbreviation for -</span><span style="font-size: 10pt"><tt>+/Peter/</tt></span><span style="font-size: 10pt">. -The search can be reversed with a minus sign, so -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt></tt></span><span style="font-size: 9pt"><tt>-/Peter/</tt></span><span style="font-size: 9pt"><tt></tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">finds the first -</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt"> -before dot. -Regular expressions may be used with other address forms, so -</span><span style="font-size: 10pt"><tt>0+/Peter/</tt></span><span style="font-size: 10pt"> -finds the first -</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt"> -in the file and -</span><span style="font-size: 10pt"><tt>$-/Peter/</tt></span><span style="font-size: 10pt"> -finds the last. -Table II summarizes -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -addresses. -</span><span style="font-size: 10pt"></span></p><center><img src="sam1.png"></center> -</center> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="margin-top: 0; margin-bottom: 0.02in"></p> - -<p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The language discussed so far will not seem novel -to people who use UNIX text editors -such as -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt"> -or -</span><span style="font-size: 10pt"><tt>vi</tt></span><span style="font-size: 10pt">.<sup></sup></span><sup><span style="font-size: 6pt">9</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -Moreover, the kinds of editing operations these commands allow, with the exception -of regular expressions and line numbers, -are clearly more conveniently handled by a mouse-based interface. -Indeed, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -mouse language (discussed at length below) is the means by which -simple changes are usually made. -For large or repetitive changes, however, a textual language -outperforms a manual interface. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Imagine that, instead of deleting just one occurrence of the string -</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">, -we wanted to eliminate every -</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">. -What’s needed is an iterator that runs a command for each occurrence of some -text. -</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">’s -iterator is called -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">, -for extract: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>x/</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>/ </tt></span><span style="font-size: 9pt"><i>command</i></span><span style="font-size: 9pt"><tt></tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">finds all matches in dot of the specified expression, and for each -such match, sets dot to the text matched and runs the command. -So to delete all the -</span><span style="font-size: 10pt"><tt>Peters:</tt></span><span style="font-size: 10pt"> -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>0,$ x/Peter/ d</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">(Blanks in these examples are to improve readability; -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -neither requires nor interprets them.) -This searches the entire file -(</span><span style="font-size: 10pt"><tt>0,$</tt></span><span style="font-size: 10pt">) -for occurrences of the string -</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">, -and runs the -</span><span style="font-size: 10pt"><tt>d</tt></span><span style="font-size: 10pt"> -command with dot set to each such occurrence. -(By contrast, the comparable -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt"> -command would delete all -</span><span style="font-size: 10pt"><i>lines</i></span><span style="font-size: 10pt"> -containing -</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">; -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -deletes only the -</span><span style="font-size: 10pt"><tt>Peters</tt></span><span style="font-size: 10pt">.) -The address -</span><span style="font-size: 10pt"><tt>0,$</tt></span><span style="font-size: 10pt"> -is commonly used, and may be abbreviated to just a comma. -As another example, -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>, x/Peter/ p</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">prints a list of -</span><span style="font-size: 10pt"><tt>Peters,</tt></span><span style="font-size: 10pt"> -one for each appearance in the file, with no intervening text (not even newlines -to separate the instances). -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Of course, the text extracted by -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -may be selected by a regular expression, -which complicates deciding what set of matches is chosen — -matches may overlap. This is resolved by generating the matches -starting from the beginning of dot using the leftmost-longest rule, -and searching for each match starting from the end of the previous one. -Regular expressions may also match null strings, but a null match -adjacent to a non-null match is never selected; at least one character -must intervene. -For example, -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>, c/AAA/</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>x/B*/ c/-/</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>, p</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">produces as output -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>-A-A-A-</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">because the pattern -</span><span style="font-size: 10pt"><tt>B*</tt></span><span style="font-size: 10pt"> -matches the null strings separating the -</span><span style="font-size: 10pt"><tt>A</tt></span><span style="font-size: 10pt">’s. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -command has a complement, -</span><span style="font-size: 10pt"><tt>y</tt></span><span style="font-size: 10pt">, -with similar syntax, that executes the command with dot set to the text -</span><span style="font-size: 10pt"><i>between</i></span><span style="font-size: 10pt"> -the matches of the expression. -For example, -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>, c/AAA/</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>y/A/ c/-/</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>, p</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">produces the same result as the example above. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -and -</span><span style="font-size: 10pt"><tt>y</tt></span><span style="font-size: 10pt"> -commands are looping constructs, and -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -has a pair of conditional commands to go with them. -They have similar syntax: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>g/</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>/ </tt></span><span style="font-size: 9pt"><i>command</i></span><span style="font-size: 9pt"><tt></tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">(guard) -runs the command exactly once if dot contains a match of the expression. -This is different from -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">, -which runs the command for -</span><span style="font-size: 10pt"><i>each</i></span><span style="font-size: 10pt"> -match: -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -loops; -</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt"> -merely tests, without changing the value of dot. -Thus, -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>, x/Peter/ d</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">deletes all occurrences of -</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">, -but -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>, g/Peter/ d</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">deletes the whole file (reduces it to a null string) if -</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt"> -occurs anywhere in the text. -The complementary conditional is -</span><span style="font-size: 10pt"><tt>v</tt></span><span style="font-size: 10pt">, -which runs the command if there is -</span><span style="font-size: 10pt"><i>no</i></span><span style="font-size: 10pt"> -match of the expression. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">These control-structure-like commands may be composed to construct more -involved operations. For example, to print those lines of text that -contain the string -</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>, x/.*\n/ g/Peter/ p</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -breaks the file into lines, the -</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt"> -selects those lines containing -</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">, -and the -</span><span style="font-size: 10pt"><tt>p</tt></span><span style="font-size: 10pt"> -prints them. -This command gives an address for the -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -command (the whole file), but because -</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt"> -does not have an explicit address, it applies to the value of -dot produced by the -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -command, that is, to each line. -All commands in -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -except for the command to write a file to disc use dot for the -default address. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Composition may be continued indefinitely. -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>, x/.*\n/ g/Peter/ v/SaltPeter/ p</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">prints those lines containing -</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt"> -but -</span><span style="font-size: 10pt"><i>not</i></span><span style="font-size: 10pt"> -those containing -</span><span style="font-size: 10pt"><tt>SaltPeter</tt></span><span style="font-size: 10pt">. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>Structural Regular Expressions -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Unlike other UNIX text editors, -including the non-interactive ones such as -</span><span style="font-size: 10pt"><tt>sed</tt></span><span style="font-size: 10pt"> -and -</span><span style="font-size: 10pt"><tt>awk</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -is good for manipulating files with multi-line ‘records.’ -An example is an on-line phone book composed of records, -separated by blank lines, of the form -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>Herbert Tic</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>44 Turnip Ave., Endive, NJ</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>201-5555642</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.15in"></p> - -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>Norbert Twinge</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>16 Potato St., Cabbagetown, NJ</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>201-5553145</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.15in"></p> - -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>...</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The format may be encoded as a regular expression: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>(.+\n)+</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">that is, a sequence of one or more non-blank lines. -The command to print Mr. Tic’s entire record is then -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>, x/(.+\n)+/ g/^Herbert Tic$/ p</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">and that to extract just the phone number is -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>, x/(.+\n)+/ g/^Herbert Tic$/ x/^[0-9]*-[0-9]*\n/ p</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The latter command breaks the file into records, -chooses Mr. Tic’s record, -extracts the phone number from the record, -and finally prints the number. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">A more involved problem is that of -renaming a particular variable, say -</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">, -to -</span><span style="font-size: 10pt"><tt>num</tt></span><span style="font-size: 10pt"> -in a C program. -The obvious first attempt, -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>, x/n/ c/num/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">is badly flawed: it changes not only the variable -</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt"> -but any letter -</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt"> -that appears. -We need to extract all the variables, and select those that match -</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt"> -and only -</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>, x/[A-Za-z_][A-Za-z_0-9]*/ g/n/ v/../ c/num/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The pattern -</span><span style="font-size: 10pt"><tt>[A-Za-z_][A-Za-z_0-9]*</tt></span><span style="font-size: 10pt"> -matches C identifiers. -Next -</span><span style="font-size: 10pt"><tt>g/n/</tt></span><span style="font-size: 10pt"> -selects those containing an -</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">. -Then -</span><span style="font-size: 10pt"><tt>v/../</tt></span><span style="font-size: 10pt"> -rejects those containing two (or more) characters, and finally -</span><span style="font-size: 10pt"><tt>c/num/</tt></span><span style="font-size: 10pt"> -changes the remainder (identifiers -</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">) -to -</span><span style="font-size: 10pt"><tt>num</tt></span><span style="font-size: 10pt">. -This version clearly works much better, but there may still be problems. -For example, in C character and string constants, the sequence -</span><span style="font-size: 10pt"><tt>\n</tt></span><span style="font-size: 10pt"> -is interpreted as a newline character, and we don’t want to change it to -</span><span style="font-size: 10pt"><tt>\num.</tt></span><span style="font-size: 10pt"> -This problem can be forestalled with a -</span><span style="font-size: 10pt"><tt>y</tt></span><span style="font-size: 10pt"> -command: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>, y/\\n/ x/[A-Za-z_][A-Za-z_0-9]*/ g/n/ v/../ c/num/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">(the second -</span><span style="font-size: 10pt"><tt>\</tt></span><span style="font-size: 10pt"> -is necessary because of lexical conventions in regular expressions), -or we could even reject character constants and strings outright: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>,y/’[^’]*’/ y/"[^"]*"/ x/[A-Za-z_][A-Za-z_0-9]*/ g/n/ v/../ c/num/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The -</span><span style="font-size: 10pt"><tt>y</tt></span><span style="font-size: 10pt"> -commands in this version exclude from consideration all character constants -and strings. -The only remaining problem is to deal with the possible occurrence of -</span><span style="font-size: 10pt"><tt>\’</tt></span><span style="font-size: 10pt"> -or -</span><span style="font-size: 10pt"><tt>\"</tt></span><span style="font-size: 10pt"> -within these sequences, but it’s easy to see how to resolve this difficulty. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The point of these composed commands is successive refinement. -A simple version of the command is tried, and if it’s not good enough, -it can be honed by adding a clause or two. -(Mistakes can be undone; see below. -Also, the mouse language makes it unnecessary to retype the command each time.) -The resulting chains of commands are somewhat reminiscent of -shell pipelines.<sup></sup></span><sup><span style="font-size: 6pt">7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -Unlike pipelines, though, which pass along modified -</span><span style="font-size: 10pt"><i>data</i></span><span style="font-size: 10pt">, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -commands pass a -</span><span style="font-size: 10pt"><i>view</i></span><span style="font-size: 10pt"> -of the data. -The text at each step of the command is the same, but which pieces -are selected is refined step by step until the correct piece is -available to the final step of the command line, which ultimately makes the change. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">In other UNIX programs, regular expressions are used only for selection, -as in the -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt"> -command, never for extraction as in the -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -or -</span><span style="font-size: 10pt"><tt>y</tt></span><span style="font-size: 10pt"> -command. -For example, patterns in -</span><span style="font-size: 10pt"><tt>awk</tt></span><span style="font-size: 10pt"><sup></sup></span><sup><span style="font-size: 6pt">7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -are used to select lines to be operated on, but cannot be used -to describe the format of the input text, or to handle newline-free text. -The use of regular expressions to describe the structure of a piece -of text rather than its contents, as in the -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -command, -has been given a name: -</span><span style="font-size: 10pt"><i>structural regular expressions. -</i></span><span style="font-size: 10pt">When they are composed, as in the above example, -they are pleasantly expressive. -Their use is discussed at greater length elsewhere.<sup></sup></span><sup><span style="font-size: 6pt">10</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>Multiple files -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -has a few other commands, mostly relating to input and output. -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>e discfilename</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">replaces the contents and name of the current file with those of the named -disc file; -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>w discfilename</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">writes the contents to the named disc file; and -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>r discfilename</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">replaces dot with the contents of the named disc file. -All these commands use the current file’s name if none is specified. -Finally, -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>f discfilename</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">changes the name associated with the file and displays the result: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>’-. discfilename</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">This output is called the file’s -</span><span style="font-size: 10pt"><i>menu line, -</i></span><span style="font-size: 10pt">because it is the contents of the file’s line in the button 3 menu (described -in the -next section). -The first three characters are a concise notation for the state of the file. -The apostrophe signifies that the file is modified. -The minus sign indicates the number of windows -open on the file (see the next section): -</span><span style="font-size: 10pt"><tt>-</tt></span><span style="font-size: 10pt"> -means none, -</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt"> -means one, and -</span><span style="font-size: 10pt"><tt>*</tt></span><span style="font-size: 10pt"> -means more than one. -Finally, the period indicates that this is the current file. -These characters are useful for controlling the -</span><span style="font-size: 10pt"><tt>X</tt></span><span style="font-size: 10pt"> -command, described shortly. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -may be started with a set of disc files (such as all the source for -a program) by invoking it with a list of file names as arguments, and -more may be added or deleted on demand. -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>B discfile1 discfile2 ...</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">adds the named files to -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -list, and -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>D discfile1 discfile2 ...</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">removes them from -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -memory (without effect on associated disc files). -Both these commands have a syntax for using the shell<sup></sup></span><sup><span style="font-size: 6pt">7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -(the UNIX command interpreter) to generate the lists: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>B <echo *.c</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">will add all C source files, and -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>B <grep -l variable *.c</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">will add all C source files referencing a particular variable -(the UNIX command -</span><span style="font-size: 10pt"><tt>grep\fP-l -lists all files in its arguments that contain matches of -the specified regular expression). -Finally, -</tt></span><span style="font-size: 10pt"><tt>D</tt></span><span style="font-size: 10pt"><tt> -without arguments deletes the current file. -</tt></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">There are two ways to change which file is current: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>b filename</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">makes the named file current. -The -</span><span style="font-size: 10pt"><tt>B</tt></span><span style="font-size: 10pt"> -command -does the same, but also adds any new files to -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -list. -(In practice, of course, the current file -is usually chosen by mouse actions, not by textual commands.) -The other way is to use a form of address that refers to files: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>"</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>" </tt></span><span style="font-size: 9pt"><i>address</i></span><span style="font-size: 9pt"><tt></tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">refers to the address evaluated in the file whose menu line -matches the expression (there must be exactly one match). -For example, -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>"peter.c" 3</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">refers to the third line of the file whose name matches -</span><span style="font-size: 10pt"><tt>peter.c</tt></span><span style="font-size: 10pt">. -This is most useful in the move -(</span><span style="font-size: 10pt"><tt>m</tt></span><span style="font-size: 10pt">) -and copy -(</span><span style="font-size: 10pt"><tt>t</tt></span><span style="font-size: 10pt">) -commands: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>0,$ t "peter.c" 0</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">makes a copy of the current file at the beginning of -</span><span style="font-size: 10pt"><tt>peter.c</tt></span><span style="font-size: 10pt">. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The -</span><span style="font-size: 10pt"><tt>X</tt></span><span style="font-size: 10pt"> -command -is a looping construct, like -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">, -that refers to files instead of strings: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>X/</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>/ </tt></span><span style="font-size: 9pt"><i>command</i></span><span style="font-size: 9pt"><tt></tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">runs the command in all -files whose menu lines match the expression. The best example is -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>X/’/ w</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">which writes to disc all modified files. -</span><span style="font-size: 10pt"><tt>Y</tt></span><span style="font-size: 10pt"> -is the complement of -</span><span style="font-size: 10pt"><tt>X</tt></span><span style="font-size: 10pt">: -it runs the command on all files whose menu lines don’t match the expression: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>Y/\.c/ D</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">deletes all files that don’t have -</span><span style="font-size: 10pt"><tt>.c</tt></span><span style="font-size: 10pt"> -in their names, that is, it keeps all C source files and deletes the rest. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Braces allow commands to be grouped, so -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>{</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> </tt></span><span style="font-size: 9pt"><i>command1</i></span><span style="font-size: 9pt"><tt></tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> </tt></span><span style="font-size: 9pt"><i>command2</i></span><span style="font-size: 9pt"><tt></tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>}</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">is syntactically a single command that runs two commands. -Thus, -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>X/\.c/ ,g/variable/ {</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> f</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> , x/.*\n/ g/variable/ p</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>}</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">finds all occurrences of -</span><span style="font-size: 10pt"><tt>variable</tt></span><span style="font-size: 10pt"> -in C source files, and prints -out the file names and lines of each match. -The precise semantics of compound operations is discussed in the implementation -sections below. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Finally, -the undo command, -</span><span style="font-size: 10pt"><tt>u</tt></span><span style="font-size: 10pt">, -undoes the last command, -no matter how many files were affected. -Multiple undo operations move further back in time, so -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>u</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>u</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">(which may be abbreviated -</span><span style="font-size: 10pt"><tt>u2</tt></span><span style="font-size: 10pt">) -undoes the last two commands. An undo may not be undone, however, nor -may any command that adds or deletes files. -Everything else is undoable, though, including for example -</span><span style="font-size: 10pt"><tt>e</tt></span><span style="font-size: 10pt"> -commands: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>e filename</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>u</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">restores the state of the file completely, including its name, dot, -and modified bit. Because of the undo, potentially dangerous commands -are not guarded by confirmations. Only -</span><span style="font-size: 10pt"><tt>D</tt></span><span style="font-size: 10pt">, -which destroys the information necessary to restore itself, is protected. -It will not delete a modified file, but a second -</span><span style="font-size: 10pt"><tt>D</tt></span><span style="font-size: 10pt"> -of the same file will succeed regardless. -The -</span><span style="font-size: 10pt"><tt>q</tt></span><span style="font-size: 10pt"> -command, which exits -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">, -is similarly guarded. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>Mouse Interface -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -is most commonly run -connected to a bitmap display and mouse for interactive editing. -The only difference in the command language -between regular, mouse-driven -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -and -</span><span style="font-size: 10pt"><tt>sam\fP-d -is that if an address -is provided without a command, -</tt></span><span style="font-size: 10pt"><tt>sam\fP-d -will print the text referenced by the address, but -regular -</tt></span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"><tt> -will highlight it on the screen — in fact, -dot is always highlighted (see Figure 2). -</tt></span><span style="font-size: 10pt"></span></p><center><img src="fig3.gif" /></center> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 8pt"><i>Figure 2. A -</i></span><span style="font-size: 8pt"><tt>sam</tt></span><span style="font-size: 8pt"><i> -window. The scroll bar down the left -represents the file, with the bubble showing the fraction -visible in the window. -The scroll bar may be manipulated by the mouse for convenient browsing. -The current text, -which is highlighted, need not fit on a line. Here it consists of one partial -line, one complete line, and final partial line. -</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="margin-top: 0; margin-bottom: 0.02in"></p> - -<p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Each file may have zero or more windows open on the display. -At any time, only one window in all of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -is the -</span><span style="font-size: 10pt"><i>current window, -</i></span><span style="font-size: 10pt">that is, the window to which typing and mouse actions refer; -this may be the -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -window (that in which commands may be typed) -or one of the file windows. -When a file has multiple windows, the image of the file in each window -is always kept up to date. -The current file is the last file affected by a command, -so if the -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -window is current, -the current window is not a window on the current file. -However, each window on a file has its own value of dot, -and when switching between windows on a single file, -the file’s value of dot is changed to that of the window. -Thus, flipping between windows behaves in the obvious, convenient way. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The mouse on the Blit has three buttons, numbered left to right. -Button 3 has a list of commands to manipulate windows, -followed by a list of ‘menu lines’ exactly as printed by the -</span><span style="font-size: 10pt"><tt>f</tt></span><span style="font-size: 10pt"> -command, one per file (not one per window). -These menu lines are sorted by file name. -If the list is long, the Blit menu software will make it more manageable -by generating a scrolling menu instead of an unwieldy long list. -Using the menu to select a file from the list makes that file the current -file, and the most recently current window in that file the current window. -But if that file is already current, selecting it in the menu cycles through -the windows on the file; this simple trick avoids a special menu to -choose windows on a file. -If there is no window open on the file, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -changes the mouse cursor to prompt the user to create one. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The commands on the button 3 menu are straightforward (see Figure 3), and -are like the commands to manipulate windows in -</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">8</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -the Blit’s window system. -</span><span style="font-size: 10pt"><tt>New</tt></span><span style="font-size: 10pt"> -makes a new file, and gives it one empty window, whose size is determined -by a rectangle swept by the mouse. -</span><span style="font-size: 10pt"><tt>Zerox</tt></span><span style="font-size: 10pt"> -prompts for a window to be selected, and -makes a clone of that window; this is how multiple windows are created on one file. -</span><span style="font-size: 10pt"><tt>Reshape</tt></span><span style="font-size: 10pt"> -changes the size of the indicated window, and -</span><span style="font-size: 10pt"><tt>close</tt></span><span style="font-size: 10pt"> -deletes it. If that is the last window open on the file, -</span><span style="font-size: 10pt"><tt>close</tt></span><span style="font-size: 10pt"> -first does a -</span><span style="font-size: 10pt"><tt>D</tt></span><span style="font-size: 10pt"> -command on the file. -</span><span style="font-size: 10pt"><tt>Write</tt></span><span style="font-size: 10pt"> -is identical to a -</span><span style="font-size: 10pt"><tt>w</tt></span><span style="font-size: 10pt"> -command on the file; it is in the menu purely for convenience. -Finally, -</span><span style="font-size: 10pt"><tt>~~sam~~</tt></span><span style="font-size: 10pt"> -is a menu item that appears between the commands and the file names. -Selecting it makes the -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -window the current window, -causing subsequent typing to be interpreted as commands. -</span><span style="font-size: 10pt"></span></p><center><img src="fig2.gif" /></center> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 8pt"><i>Figure 3. The menu on button 3. -The black rectangle on the left is a scroll bar; the menu is limited to -the length shown to prevent its becoming unwieldy. -Above the -</i></span><span style="font-size: 8pt"><tt>~~sam~~</tt></span><span style="font-size: 8pt"><i> -line is a list of commands; -beneath it is a list of files, presented exactly as with the -</i></span><span style="font-size: 8pt"><tt>f</tt></span><span style="font-size: 8pt"><i> -command. -</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="margin-top: 0; margin-bottom: 0.02in"></p> - -<p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">When -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -requests that a window be swept, in response to -</span><span style="font-size: 10pt"><tt>new</tt></span><span style="font-size: 10pt">, -</span><span style="font-size: 10pt"><tt>zerox</tt></span><span style="font-size: 10pt"> -or -</span><span style="font-size: 10pt"><tt>reshape</tt></span><span style="font-size: 10pt">, -it changes the mouse cursor from the usual arrow to a box with -a small arrow. -In this state, the mouse may be used to indicate an arbitrary rectangle by -pressing button 3 at one corner and releasing it at the opposite corner. -More conveniently, -button 3 may simply be clicked, -whereupon -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -creates the maximal rectangle that contains the cursor -and abuts the -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -window. -By placing the -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -window in the middle of the screen, the user can define two regions (one above, -one below) in which stacked fully-overlapping -windows can be created with minimal fuss (see Figure 1). -This simple user interface trick makes window creation noticeably easier. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The cut-and-paste editor is essentially the same as that in Smalltalk-80.<sup></sup></span><sup><span style="font-size: 6pt">11</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -The text in dot is always highlighted on the screen. -When a character is typed it replaces dot, and sets dot to the null -string after the character. Thus, ordinary typing inserts text. -Button 1 is used for selection: -pressing the button, moving the mouse, and lifting the button -selects (sets dot to) the text between the points where the -button was pressed and released. -Pressing and releasing at the same point selects a null string; this -is called clicking. Clicking twice quickly, or -</span><span style="font-size: 10pt"><i>double clicking, -</i></span><span style="font-size: 10pt">selects larger objects; -for example, double clicking in a word selects the word, -double clicking just inside an opening bracket selects the text -contained in the brackets (handling nested brackets correctly), -and similarly for -parentheses, quotes, and so on. -The double-clicking rules reflect a bias toward -programmers. -If -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -were intended more for word processing, double-clicks would probably -select linguistic structures such as sentences. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">If button 1 is pressed outside the current window, it makes the indicated -window current. -This is the easiest way to switch between windows and files. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Pressing button 2 brings up a menu of editing functions (see Figure 4). -These mostly apply to the selected text: -</span><span style="font-size: 10pt"><tt>cut</tt></span><span style="font-size: 10pt"> -deletes the selected text, and remembers it in a hidden buffer called the -</span><span style="font-size: 10pt"><i>snarf buffer, -</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>paste</tt></span><span style="font-size: 10pt"> -replaces the selected text by the contents of the snarf buffer, -</span><span style="font-size: 10pt"><tt>snarf</tt></span><span style="font-size: 10pt"> -just copies the selected text to the snarf buffer, -</span><span style="font-size: 10pt"><tt>look</tt></span><span style="font-size: 10pt"> -searches forward for the next literal occurrence of the selected text, and -</span><span style="font-size: 10pt"><tt><mux></tt></span><span style="font-size: 10pt"> -exchanges snarf buffers with the window system in which -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -is running. -Finally, the last regular expression used appears as a menu entry -to search -forward for the next occurrence of a match for the expression. -</span><span style="font-size: 10pt"></span></p><center><img src="fig4.gif" /></center> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 8pt"><i>Figure 4. The menu on button 2. -The bottom entry tracks the most recently used regular expression, which may -be literal text. -</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="margin-top: 0; margin-bottom: 0.02in"></p> - -<p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The relationship between the command language and the mouse language is -entirely due to the equality of dot and the selected text chosen -with button 1 on the mouse. -For example, to make a set of changes in a C subroutine, dot can be -set by double clicking on the left brace that begins the subroutine, -which sets dot for the command language. -An address-free command then typed in the -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -window will apply only to the text between the opening and closing -braces of the function. -The idea is to select what you want, and then say what you want -to do with it, whether invoked by a menu selection or by a typed command. -And of course, the value of dot is highlighted on -the display after the command completes. -This relationship between mouse interface and command language -is clumsy to explain, but comfortable, even natural, in practice. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>The Implementation -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The next few sections describe how -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -is put together, first the host part, -then the inter-component communication, -then the terminal part. -After explaining how the command language is implemented, -the discussion follows (roughly) the path of a character -from the temporary file on disc to the screen. -The presentation centers on the data structures, -because that is how the program was designed and because -the algorithms are easy to provide, given the right data -structures. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>Parsing and execution -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The command language is interpreted by parsing each command with a -table-driven recursive -descent parser, and when a complete command is assembled, invoking a top-down -executor. -Most editors instead employ a simple character-at-a-time -lexical scanner. -Use of a parser makes it -easy and unambiguous to detect when a command is complete, -which has two advantages. -First, escape conventions such as backslashes to quote -multiple-line commands are unnecessary; if the command isn’t finished, -the parser keeps reading. For example, a multiple-line append driven by an -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -command is straightforward: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>x/.*\n/ g/Peter/ a</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>one line about Peter</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>another line about Peter</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>.</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Other UNIX editors would require a backslash after all but the last line. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The other advantage is specific to the two-process structure of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">. -The host process must decide when a command is completed so the -command interpreter can be called. This problem is easily resolved -by having the lexical analyzer read the single stream of events from the -terminal, directly executing all typing and mouse commands, -but passing to the parser characters typed to the -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -command window. -This scheme is slightly complicated by the availability of cut-and-paste -editing in the -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -window, but that difficulty is resolved by applying the rules -used in -</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">: -when a newline is typed to the -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -window, all text between the newline and the previously typed newline -is made available to the parser. -This permits arbitrary editing to be done to a command before -typing newline and thereby requesting execution. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The parser is driven by a table because the syntax of addresses -and commands is regular enough -to be encoded compactly. There are few special cases, such as the -replacement text in a substitution, so the syntax of almost all commands -can be encoded with a few flags. -These include whether the command allows an address (for example, -</span><span style="font-size: 10pt"><tt>e</tt></span><span style="font-size: 10pt"> -does not), whether it takes a regular expression (as in -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -and -</span><span style="font-size: 10pt"><tt>s</tt></span><span style="font-size: 10pt">), -whether it takes replacement text (as in -</span><span style="font-size: 10pt"><tt>c</tt></span><span style="font-size: 10pt"> -or -</span><span style="font-size: 10pt"><tt>i</tt></span><span style="font-size: 10pt">), -which may be multi-line, and so on. -The internal syntax of regular expressions is handled by a separate -parser; a regular expression is a leaf of the command parse tree. -Regular expressions are discussed fully in the next section. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The parser table also has information about defaults, so the interpreter -is always called with a complete tree. For example, the parser fills in -the implicit -</span><span style="font-size: 10pt"><tt>0</tt></span><span style="font-size: 10pt"> -and -</span><span style="font-size: 10pt"><tt>$</tt></span><span style="font-size: 10pt"> -in the abbreviated address -</span><span style="font-size: 10pt"><tt>,</tt></span><span style="font-size: 10pt"> -(comma), -inserts a -</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt"> -to the left of an unadorned regular expression in an address, -and provides the usual default address -</span><span style="font-size: 10pt"><tt>.</tt></span><span style="font-size: 10pt"> -(dot) for commands that expect an address but are not given one. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Once a complete command is parsed, the evaluation is easy. -The address is evaluated left-to-right starting from the value of dot, -with a mostly ordinary expression evaluator. -Addresses, like many of the data structures in -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">, -are held in a C structure and passed around by value: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>typedef long Posn; /* Position in a file */</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>typedef struct Range{</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> Posn p1, p2;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>}Range;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>typedef struct Address{</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> Range r;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> File *f;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>}Address;</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">An address is encoded as a substring (character positions -</span><span style="font-size: 10pt"><tt>p1</tt></span><span style="font-size: 10pt"> -to -</span><span style="font-size: 10pt"><tt>p2</tt></span><span style="font-size: 10pt">) -in a file -</span><span style="font-size: 10pt"><tt>f</tt></span><span style="font-size: 10pt">. -(The data type -</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt"> -is described in detail below.) -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The address interpreter is an -</span><span style="font-size: 10pt"><tt>Address</tt></span><span style="font-size: 10pt">-valued -function that traverses the parse tree describing an address (the -parse tree for the address has type -</span><span style="font-size: 10pt"><tt>Addrtree</tt></span><span style="font-size: 10pt">): -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>Address</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>address(ap, a, sign)</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> Addrtree *ap;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> Address a;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> int sign;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>{</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> Address a2;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> do</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> switch(ap->type){</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> case ’.’:</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> a=a.f->dot;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> break;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> case ’$’:</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> a.r.p1=a.r.p2=a.f->nbytes;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> break;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> case ’"’: </tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> a=matchfile(a, ap->aregexp)->dot; </tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> break;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> case ’,’:</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> a2=address(ap->right, a, 0);</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> a=address(ap->left, a, 0);</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> if(a.f!=a2.f || a2.r.p2<a.r.p1)</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> error(Eorder);</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> a.r.p2=a2.r.p2;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> return a;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> /* and so on */</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> }</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> while((ap=ap->right)!=0);</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> return a;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>}</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Throughout, errors are handled by a non-local -</span><span style="font-size: 10pt"><tt>goto</tt></span><span style="font-size: 10pt"> -(a -</span><span style="font-size: 10pt"><tt>setjmp/longjmp</tt></span><span style="font-size: 10pt"> -in C terminology) -hidden in a routine called -</span><span style="font-size: 10pt"><tt>error</tt></span><span style="font-size: 10pt"> -that immediately aborts the execution, retracts any -partially made changes (see the section below on ‘undoing’), and -returns to the top level of the parser. -The argument to -</span><span style="font-size: 10pt"><tt>error</tt></span><span style="font-size: 10pt"> -is an enumeration type that -is translated to a terse but possibly helpful -message such as ‘?addresses out of order.’ -Very common messages are kept short; for example the message for -a failed regular expression search is ‘?search.’ -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Character addresses such as -</span><span style="font-size: 10pt"><tt>#3</tt></span><span style="font-size: 10pt"> -are trivial to implement, as the -</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt"> -data structure is accessible by character number. -However, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -keeps no information about the position of newlines — it is too -expensive to track dynamically — so line addresses are computed by reading -the file, counting newlines. Except in very large files, this has proven -acceptable: file access is fast enough to make the technique practical, -and lines are not central to the structure of the command language. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The command interpreter, called -</span><span style="font-size: 10pt"><tt>cmdexec</tt></span><span style="font-size: 10pt">, -is also straightforward. The parse table includes a -function to call to interpret a particular command. That function -receives as arguments -the calculated address -for the command -and the command tree (of type -</span><span style="font-size: 10pt"><tt>Cmdtree</tt></span><span style="font-size: 10pt">), -which may contain information such as the subtree for compound commands. -Here, for example, is the function for the -</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt"> -and -</span><span style="font-size: 10pt"><tt>v</tt></span><span style="font-size: 10pt"> -commands: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>int</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>g_cmd(a, cp)</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> Address a;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> Cmdtree *cp;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>{</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> compile(cp->regexp);</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> if(execute(a.f, a.r.p1, a.r.p2)!=(cp->cmdchar==’v’)){</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> a.f->dot=a;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> return cmdexec(a, cp->subcmd);</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> }</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> return TRUE; /* cause execution to continue */</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>}</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">(</span><span style="font-size: 10pt"><tt>Compile</tt></span><span style="font-size: 10pt"> -and -</span><span style="font-size: 10pt"><tt>execute</tt></span><span style="font-size: 10pt"> -are part of the regular expression code, described in the next section.) -Because the parser and the -</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt"> -data structure do most of the work, most commands -are similarly brief. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>Regular expressions -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The regular expression code in -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -is an interpreted, rather than compiled on-the-fly, implementation of Thompson’s -non-deterministic finite automaton algorithm.<sup></sup></span><sup><span style="font-size: 6pt">12</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -The syntax and semantics of the expressions are as in the UNIX program -</span><span style="font-size: 10pt"><tt>egrep</tt></span><span style="font-size: 10pt">, -including alternation, closures, character classes, and so on. -The only changes in the notation are two additions: -</span><span style="font-size: 10pt"><tt>\n</tt></span><span style="font-size: 10pt"> -is translated to, and matches, a newline character, and -</span><span style="font-size: 10pt"><tt>@</tt></span><span style="font-size: 10pt"> -matches any character. In -</span><span style="font-size: 10pt"><tt>egrep</tt></span><span style="font-size: 10pt">, -the character -</span><span style="font-size: 10pt"><tt>.</tt></span><span style="font-size: 10pt"> -matches any character except newline, and in -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -the same rule seemed safest, to prevent idioms like -</span><span style="font-size: 10pt"><tt>.*</tt></span><span style="font-size: 10pt"> -from spanning newlines. -</span><span style="font-size: 10pt"><tt>Egrep</tt></span><span style="font-size: 10pt"> -expressions are arguably too complicated for an interactive editor — -certainly it would make sense if all the special characters were two-character -sequences, so that most of the punctuation characters wouldn’t have -peculiar meanings — but for an interesting command language, full -regular expressions are necessary, and -</span><span style="font-size: 10pt"><tt>egrep</tt></span><span style="font-size: 10pt"> -defines the full regular expression syntax for UNIX programs. -Also, it seemed superfluous to define a new syntax, since various UNIX programs -(</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">, -</span><span style="font-size: 10pt"><tt>egrep</tt></span><span style="font-size: 10pt"> -and -</span><span style="font-size: 10pt"><tt>vi</tt></span><span style="font-size: 10pt">) -define too many already. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The expressions are compiled by a routine, -</span><span style="font-size: 10pt"><tt>compile</tt></span><span style="font-size: 10pt">, -that generates the description of the non-deterministic finite state machine. -A second routine, -</span><span style="font-size: 10pt"><tt>execute</tt></span><span style="font-size: 10pt">, -interprets the machine to generate the leftmost-longest match of the -expression in a substring of the file. -The algorithm is described elsewhere.<sup></sup></span><sup><span style="font-size: 6pt">12,13</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -</span><span style="font-size: 10pt"><tt>Execute</tt></span><span style="font-size: 10pt"> -reports -whether a match was found, and sets a global variable, -of type -</span><span style="font-size: 10pt"><tt>Range</tt></span><span style="font-size: 10pt">, -to the substring matched. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">A trick is required to evaluate the expression in reverse, such as when -searching backwards for an expression. -For example, -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>-/P.*r/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">looks backwards through the file for a match of the expression. -The expression, however, is defined for a forward search. -The solution is to construct a machine identical to the machine -for a forward search except for a reversal of all the concatenation -operators (the other operators are symmetric under direction reversal), -to exchange the meaning of the operators -</span><span style="font-size: 10pt"><tt>^</tt></span><span style="font-size: 10pt"> -and -</span><span style="font-size: 10pt"><tt>$</tt></span><span style="font-size: 10pt">, -and then to read the file backwards, looking for the -usual earliest longest match. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Execute</tt></span><span style="font-size: 10pt"> -generates only one match each time it is called. -To interpret looping constructs such as the -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -command, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -must therefore synchronize between -calls of -</span><span style="font-size: 10pt"><tt>execute</tt></span><span style="font-size: 10pt"> -to avoid -problems with null matches. -For example, even given the leftmost-longest rule, -the expression -</span><span style="font-size: 10pt"><tt>a*</tt></span><span style="font-size: 10pt"> -matches three times in the string -</span><span style="font-size: 10pt"><tt>ab</tt></span><span style="font-size: 10pt"> -(the character -</span><span style="font-size: 10pt"><tt>a</tt></span><span style="font-size: 10pt">, -the null string between the -</span><span style="font-size: 10pt"><tt>a</tt></span><span style="font-size: 10pt"> -and -</span><span style="font-size: 10pt"><tt>b</tt></span><span style="font-size: 10pt">, -and the final null string). -After returning a match for the -</span><span style="font-size: 10pt"><tt>a</tt></span><span style="font-size: 10pt">, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -must not match the null string before the -</span><span style="font-size: 10pt"><tt>b</tt></span><span style="font-size: 10pt">. -The algorithm starts -</span><span style="font-size: 10pt"><tt>execute</tt></span><span style="font-size: 10pt"> -at the end of its previous match, and -if the match it returns -is null and abuts the previous match, rejects the match and advances -the initial position one character. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>Memory allocation -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The C language has no memory allocation primitives, although a standard -library routine, -</span><span style="font-size: 10pt"><tt>malloc</tt></span><span style="font-size: 10pt">, -provides adequate service for simple programs. -For specific uses, however, -it can be better to write a custom allocator. -The allocator (or rather, pair of allocators) described here -work in both the terminal and host parts of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">. -They are designed for efficient manipulation of strings, -which are allocated and freed frequently and vary in length from essentially -zero to 32 Kbytes (very large strings are written to disc). -More important, strings may be large and change size often, -so to minimize memory usage it is helpful to reclaim and to coalesce the -unused portions of strings when they are truncated. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Objects to be allocated in -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -are of two flavors: -the first is C -</span><span style="font-size: 10pt"><tt>structs</tt></span><span style="font-size: 10pt">, -which are small and often addressed by pointer variables; -the second is variable-sized arrays of characters -or integers whose -base pointer is always used to access them. -The memory allocator in -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -is therefore in two parts: -first, a traditional first-fit allocator that provides fixed storage for -</span><span style="font-size: 10pt"><tt>structs</tt></span><span style="font-size: 10pt">; -and second, a garbage-compacting allocator that reduces storage -overhead for variable-sized objects, at the cost of some bookkeeping. -The two types of objects are allocated from adjoining arenas, with -the garbage-compacting allocator controlling the arena with higher addresses. -Separating into two arenas simplifies compaction and prevents fragmentation due -to immovable objects. -The access rules for garbage-compactable objects -(discussed in the next paragraph) allow them to be relocated, so when -the first-fit arena needs space, it moves the garbage-compacted arena -to higher addresses to make room. Storage is therefore created only -at successively higher addresses, either when more garbage-compacted -space is needed or when the first-fit arena pushes up the other arena. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Objects that may be compacted declare to the -allocator a cell that is guaranteed to be the sole repository of the -address of the object whenever a compaction can occur. -The compactor can then update the address when the object is moved. -For example, the implementation of type -</span><span style="font-size: 10pt"><tt>List</tt></span><span style="font-size: 10pt"> -(really a variable-length array) -is: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>typedef struct List{</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> int nused;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt> long *ptr;</tt></span></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>}List;</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The -</span><span style="font-size: 10pt"><tt>ptr</tt></span><span style="font-size: 10pt"> -cell must always be used directly, and never copied. When a -</span><span style="font-size: 10pt"><tt>List</tt></span><span style="font-size: 10pt"> -is to be created the -</span><span style="font-size: 10pt"><tt>List</tt></span><span style="font-size: 10pt"> -structure is allocated in the ordinary first-fit arena -and its -</span><span style="font-size: 10pt"><tt>ptr</tt></span><span style="font-size: 10pt"> -is allocated in the garbage-compacted arena. -A similar data type for strings, called -</span><span style="font-size: 10pt"><tt>String</tt></span><span style="font-size: 10pt">, -stores variable-length character arrays of up to 32767 elements. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">A related matter of programming style: -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -frequently passes structures by value, which -simplifies the code. -Traditionally, C programs have -passed structures by reference, but implicit allocation on -the stack is easier to use. -Structure passing is a relatively new feature of C -(it is not in the -standard reference manual for C<sup></sup></span><sup><span style="font-size: 6pt">14</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">), and is poorly supported in most -commercial C compilers. -It’s convenient and expressive, though, -and simplifies memory management by -avoiding the allocator altogether -and eliminating pointer aliases. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>Data structures for manipulating files -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Experience with -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt"> -showed that the requirements -of the file data structure were few, but strict. -First, files need to be read and written quickly; -adding a fresh file must be painless. -Second, the implementation must place no arbitrary upper limit on -the number or sizes of files. (It should be practical to edit many files, -and files up to megabytes in length should be handled gracefully.) -This implies that files be stored on disc, not in main memory. -(Aficionados of virtual memory may argue otherwise, but the -implementation of virtual -memory in our system is not something to depend on -for good performance.) -Third, changes to files need be made by only two primitives: -deletion and insertion. -These are inverses of each other, -which simplifies the implementation of the undo operation. -Finally, -it must be easy and efficient to access the file, either -forwards or backwards, a byte at a time. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The -</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt"> -data type is constructed from three simpler data structures that hold arrays -of characters. -Each of these types has an insertion and deletion operator, and the -insertion and deletion operators of the -</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt"> -type itself are constructed from them. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The simplest type is the -</span><span style="font-size: 10pt"><tt>String</tt></span><span style="font-size: 10pt">, -which is used to hold strings in main memory. -The code that manages -</span><span style="font-size: 10pt"><tt>Strings</tt></span><span style="font-size: 10pt"> -guarantees that they will never be longer -than some moderate size, and in practice they are rarely larger than 8 Kbytes. -</span><span style="font-size: 10pt"><tt>Strings</tt></span><span style="font-size: 10pt"> -have two purposes: they hold short strings like file names with little overhead, -and because they are deliberately small, they are efficient to modify. -They are therefore used as the data structure for in-memory caches. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The disc copy of the file is managed by a data structure called a -</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">, -which corresponds to a temporary file. A -</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt"> -has no storage in main memory other than bookkeeping information; -the actual data being held is all on the disc. -To reduce the number of open files needed, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -opens a dozen temporary UNIX files and multiplexes the -</span><span style="font-size: 10pt"><tt>Discs</tt></span><span style="font-size: 10pt"> -upon them. -This permits many files to -be edited; the entire -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -source (48 files) may be edited comfortably with a single -instance of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">. -Allocating one temporary file per -</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt"> -would strain the operating system’s limit on the number of open files. -Also, spreading the traffic among temporary files keeps the files shorter, -and shorter files are more efficiently implemented by the UNIX -I/O subsystem. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">A -</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt"> -is an array of fixed-length blocks, each of which contains -between 1 and 4096 characters of active data. -(The block size of our UNIX file system is 4096 bytes.) -The block addresses within the temporary file and the length of each -block are stored in a -</span><span style="font-size: 10pt"><tt>List</tt></span><span style="font-size: 10pt">. -When changes are made the live part of blocks may change size. -Blocks are created and coalesced when necessary to try to keep the sizes -between 2048 and 4096 bytes. -An actively changing part of the -</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt"> -therefore typically has about a kilobyte of slop that can be -inserted or deleted -without changing more than one block or affecting the block order. -When an insertion would overflow a block, the block is split, a new one -is allocated to receive the overflow, and the memory-resident list of blocks -is rearranged to reflect the insertion of the new block. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Obviously, going to the disc for every modification to the file is -prohibitively expensive. -The data type -</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt"> -consists of a -</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt"> -to hold the data and a -</span><span style="font-size: 10pt"><tt>String</tt></span><span style="font-size: 10pt"> -that acts as a cache. -This is the first of a series of caches throughout the data structures in -</span><span style="font-size: 10pt"><tt>sam.</tt></span><span style="font-size: 10pt"> -The caches not only improve performance, they provide a way to organize -the flow of data, particularly in the communication between the host -and terminal. -This idea is developed below, in the section on communications. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">To reduce disc traffic, changes to a -</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt"> -are mediated by a variable-length string, in memory, that acts as a cache. -When an insertion or deletion is made to a -</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">, -if the change can be accommodated by the cache, it is done there. -If the cache becomes bigger than a block because of an insertion, -some of it is written to the -</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt"> -and deleted from the cache. -If the change does not intersect the cache, the cache is flushed. -The cache is only loaded at the new position if the change is smaller than a block; -otherwise, it is sent directly to the -</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">. -This is because -large changes are typically sequential, -whereupon the next change is unlikely to overlap the current one. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">A -</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt"> -comprises a -</span><span style="font-size: 10pt"><tt>String</tt></span><span style="font-size: 10pt"> -to hold the file name and some ancillary data such as dot and the modified bit. -The most important components, though, are a pair of -</span><span style="font-size: 10pt"><tt>Buffers</tt></span><span style="font-size: 10pt">, -one called the transcript and the other the contents. -Their use is described in the next section. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The overall structure is shown in Figure 5. -Although it may seem that the data is touched many times on its -way from the -</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">, -it is read (by one UNIX system call) directly into the cache of the -associated -</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">; -no extra copy is done. -Similarly, when flushing the cache, the text is written -directly from the cache to disc. -Most operations act directly on the text in the cache. -A principle applied throughout -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -is that the fewer times the data is copied, the faster the program will run -(see also the paper by Waite<sup></sup></span><sup><span style="font-size: 6pt">15</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">). -</span><span style="font-size: 10pt"></span></p><center><img src="sam2.png"></center> -</center> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 8pt"><i>Figure 5. File data structures. -The temporary files are stored in the standard repository for such files -on the host system. -</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="margin-top: 0; margin-bottom: 0.02in"></p> - -<p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The contents of a -</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt"> -are accessed by a routine that -copies to a buffer a substring of a file starting at a specified offset. -To read a byte at a time, a -per-</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt"> -array is loaded starting from a specified initial position, -and bytes may then be read from the array. -The implementation is done by a macro similar to the C standard I/O -</span><span style="font-size: 10pt"><tt>getc</tt></span><span style="font-size: 10pt"> -macro.<sup></sup></span><sup><span style="font-size: 6pt">14</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -Because the reading may be done at any address, a minor change to the -macro allows the file to be read backwards. -This array is read-only; there is no -</span><span style="font-size: 10pt"><tt>putc</tt></span><span style="font-size: 10pt">. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>Doing and undoing -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -has an unusual method for managing changes to files. -The command language makes it easy to specify multiple variable-length changes -to a file millions of bytes long, and such changes -must be made efficiently if the editor is to be practical. -The usual techniques for inserting and deleting strings -are inadequate under these conditions. -The -</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt"> -and -</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt"> -data structures are designed for efficient random access to long strings, -but care must be taken to avoid super-linear behavior when making -many changes simultaneously. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -uses a two-pass algorithm for making changes, and treats each file as a database -against which transactions are registered. -Changes are not made directly to the contents. -Instead, when a command is started, a ‘mark’ containing -a sequence number is placed in the transcript -</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">, -and each change made to the file, either an insertion or deletion -or a change to the file name, -is appended to the end of the transcript. -When the command is complete, the transcript is rewound to the -mark and applied to the contents. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">One reason for separating evaluation from -application in this way is to simplify tracking the addresses of changes -made in the middle of a long sequence. -The two-pass algorithm also allows all changes to apply to the -</span><span style="font-size: 10pt"><i>original</i></span><span style="font-size: 10pt"> -data: no change can affect another change made in the same command. -This is particularly important when evaluating an -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -command because it prevents regular expression matches -from stumbling over changes made earlier in the execution. -Also, the two-pass -algorithm is cleaner than the way other UNIX editors allow changes to -affect each other; -for example, -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">’s -idioms to do things like delete every other line -depend critically on the implementation. -Instead, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -simple model, in which all changes in a command occur effectively -simultaneously, is easy to explain and to understand. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The records in the transcript are of the form ‘‘delete substring from -locations -123 to 456’’ and ‘‘insert 11 characters ‘hello there’ at location 789.’’ -(It is an error if the changes are not at monotonically greater -positions through the file.) -While the update is occurring, these numbers must be -offset by earlier changes, but that is straightforward and -local to the update routine; -moreover, all the numbers have been computed -before the first is examined. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Treating the file as a transaction system has another advantage: -undo is trivial. -All it takes is to invert the transcript after it has been -implemented, converting insertions -into deletions and vice versa, and saving them in a holding -</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">. -The ‘do’ transcript can then be deleted from -the transcript -</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt"> -and replaced by the ‘undo’ transcript. -If an undo is requested, the transcript is rewound and the undo transcript -executed. -Because the transcript -</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt"> -is not truncated after each command, it accumulates -successive changes. -A sequence of undo commands -can therefore back up the file arbitrarily, -which is more helpful than the more commonly implemented self-inverse form of undo. -(</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -provides no way to undo an undo, but if it were desired, -it would be easy to provide by re-interpreting the ‘do’ transcript.) -Each mark in the transcript contains a sequence number and the offset into -the transcript of the previous mark, to aid in unwinding the transcript. -Marks also contain the value of dot and the modified bit so these can be -restored easily. -Undoing multiple files is easy; it merely demands undoing all files whose -latest change has the same sequence number as the current file. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Another benefit of having a transcript is that errors encountered in the middle -of a complicated command need not leave the files in an intermediate state. -By rewinding the transcript to the mark beginning the command, -the partial command can be trivially undone. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">When the update algorithm was first implemented, it was unacceptably slow, -so a cache was added to coalesce nearby changes, -replacing multiple small changes by a single larger one. -This reduced the number -of insertions into the transaction -</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">, -and made a dramatic improvement in performance, -but made it impossible -to handle changes in non-monotonic order in the file; the caching method -only works if changes don’t overlap. -Before the cache was added, the transaction could in principle be sorted -if the changes were out of order, although -this was never done. -The current status is therefore acceptable performance with a minor -restriction on global changes, which is sometimes, but rarely, an annoyance. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The update algorithm obviously paws the data more than simpler -algorithms, but it is not prohibitively expensive; -the caches help. -(The principle of avoiding copying the data is still honored here, -although not as piously: -the data is moved from contents’ cache to -the transcript’s all at once and through only one internal buffer.) -Performance figures confirm the efficiency. -To read from a dead start a hundred kilobyte file on a VAX-11/750 -takes 1.4 seconds of user time, 2.5 seconds of system time, -and 5 seconds of real time. -Reading the same file in -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt"> -takes 6.0 seconds of user time, 1.7 seconds of system time, -and 8 seconds of real time. -</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -uses about half the CPU time. -A more interesting example is the one stated above: -inserting a character between every pair of characters in the file. -The -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -command is -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>,y/@/ a/x/</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">and takes 3 CPU seconds per kilobyte of input file, of which -about a third is spent in the regular expression code. -This translates to about 500 changes per second. -</span><span style="font-size: 10pt"><tt>Ed</tt></span><span style="font-size: 10pt"> -takes 1.5 seconds per kilobyte to make a similar change (ignoring newlines), -but cannot undo it. -The same example in -</span><span style="font-size: 10pt"><tt>ex</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">9</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -a variant of -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt"> -done at the University of California at Berkeley, -which allows one level of undoing, again takes 3 seconds. -In summary, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -performance is comparable to that of other UNIX editors, although it solves -a harder problem. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>Communications -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The discussion so far has described the implementation of the host part of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">; -the next few sections explain how a machine with mouse and bitmap display -can be engaged to improve interaction. -</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -is not the first editor to be written as two processes,<sup></sup></span><sup><span style="font-size: 6pt">16</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -but its implementation -has some unusual aspects. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">There are several ways -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -host and terminal parts may be connected. -The first and simplest is to forgo the terminal part and use the host -part’s command language to edit text on an ordinary terminal. -This mode is invoked by starting -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -with the -</span><span style="font-size: 10pt"><tt>-d</tt></span><span style="font-size: 10pt"> -option. -With no options, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -runs separate host and terminal programs, -communicating with a message protocol over the physical -connection that joins them. -Typically, the connection is an RS-232 link between a Blit -(the prototypical display for -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">) -and a host running -the Ninth Edition of the UNIX operating system.<sup></sup></span><sup><span style="font-size: 6pt">8</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -(This is the version of the system used in the Computing Sciences Research -Center at AT&T Bell Laboratories [now Lucent Technologies, Bell Labs], where I work. Its relevant -aspects are discussed in the Blit paper.<sup></sup></span><sup><span style="font-size: 6pt">1</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">) -The implementation of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -for the SUN computer runs both processes on the same machine and -connects them by a pipe. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The low bandwidth of an RS-232 link -necessitated the split between -the two programs. -The division is a mixed blessing: -a program in two parts is much harder to write and to debug -than a self-contained one, -but the split makes several unusual configurations possible. -The terminal may be physically separated from the host, allowing the conveniences -of a mouse and bitmap display to be taken home while leaving the files at work. -It is also possible to run the host part on a remote machine: -</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 9pt"><tt>sam -r host</tt></span></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> - -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">connects to the terminal in the usual way, and then makes a call -across the network to establish the host part of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -on the named machine. -Finally, it cross-connects the I/O to join the two parts. -This allows -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -to be run on machines that do not support bitmap displays; -for example, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -is the editor of choice on our Cray X-MP/24. -</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -</span><span style="font-size: 10pt"><tt>-r</tt></span><span style="font-size: 10pt"> -involves -</span><span style="font-size: 10pt"><i>three</i></span><span style="font-size: 10pt"> -machines: the remote host, the terminal, and the local host. -The local host’s job is simple but vital: it passes the data -between the remote host and terminal. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The host and terminal exchange messages asynchronously -(rather than, say, as remote procedure calls) but there is no -error detection or correction -because, whatever the configuration, the connection is reliable. -Because the terminal handles mundane interaction tasks such as -popping up menus and interpreting the responses, the messages are about -data, not actions. -For example, the host knows nothing about what is displayed on the screen, -and when the user types a character, the message sent to the host says -‘‘insert a one-byte string at location 123 in file 7,’’ not ‘‘a character -was typed at the current position in the current file.’’ -In other words, the messages look very much like the transaction records -in the transcripts. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Either the host or terminal part of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -may initiate a change to a file. -The command language operates on the host, while typing and some -mouse operations are executed directly in the terminal to optimize response. -Changes initiated by the host program must be transmitted to the terminal, -and -vice versa. -(A token is exchanged to determine which end is in control, -which means that characters typed while a time-consuming command runs -must be buffered and do not appear until the command is complete.) -To maintain consistent information, -the host and terminal track changes through a per-file -data structure that records what portions of the file -the terminal has received. -The data structure, called a -</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt"> -(a weak pun: it’s a file with holes) -is held and updated by both the host and terminal. -A -</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt"> -is a list of -</span><span style="font-size: 10pt"><tt>Strings</tt></span><span style="font-size: 10pt"> -holding those parts of the file known to the terminal, -separated by counts of the number of bytes in the interstices. -Of course, the host doesn’t keep a separate copy of the data (it only needs -the lengths of the various pieces), -but the structure is the same on both ends. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The -</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt"> -in the terminal doubles as a cache. -Since the terminal keeps the text for portions of the file it has displayed, -it need not request data from the host when revisiting old parts of the file -or redrawing obscured windows, which speeds things up considerably -over low-speed links. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">It’s trivial for the terminal to maintain its -</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">, -because all changes made on the terminal apply to parts of the file -already loaded there. -Changes made by the host are compared against the -</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt"> -during the update sequence after each command. -Small changes to pieces of the file loaded in the terminal -are sent in their entirety. -Larger changes, and changes that fall entirely in the holes, -are transmitted as messages without literal data: -only the lengths of the deleted and inserted strings are transmitted. -When a command is completed, the terminal examines its visible -windows to see if any holes in their -</span><span style="font-size: 10pt"><tt>Rasps</tt></span><span style="font-size: 10pt"> -intersect the visible portion of the file. -It then requests the missing data from the host, -along with up to 512 bytes of surrounding data, to minimize -the number of messages when visiting a new portion of the file. -This technique provides a kind of two-level lazy evaluation for the terminal. -The first level sends a minimum of information about -parts of the file not being edited interactively; -the second level waits until a change is displayed before -transmitting the new data. -Of course, -performance is also helped by having the terminal respond immediately to typing -and simple mouse requests. -Except for small changes to active pieces of the file, which are -transmitted to the terminal without negotiation, -the terminal is wholly responsible for deciding what is displayed; -the host uses the -</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt"> -only to tell the terminal what might be relevant. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">When a change is initiated by the host, -the messages to the terminal describing the change -are generated by the routine that applies the transcript of the changes -to the contents of the -</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">. -Since changes are undone by the same update routine, -undoing requires -no extra code in the communications; -the usual messages describing changes to the file are sufficient -to back up the screen image. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The -</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt"> -is a particularly good example of the way caches are used in -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">. -First, it facilitates access to the active portion of the text by placing -the busy text in main memory. -In so doing, it provides efficient access -to a large data structure that does not fit in memory. -Since the form of data is to be imposed by the user, not by the program, -and because characters will frequently be scanned sequentially, -files are stored as flat objects. -Caches help keep performance good and linear when working with such -data. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Second, the -</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt"> -and several of the other caches have some -</span><span style="font-size: 10pt"><i>read-ahead;</i></span><span style="font-size: 10pt"> -that is, the cache is loaded with more information than is needed for -the job immediately at hand. -When manipulating linear structures, the accesses are usually sequential, -and read-ahead can significantly reduce the average time to access the -next element of the object. -Sequential access is a common mode for people as well as programs; -consider scrolling through a document while looking for something. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Finally, like any good data structure, -the cache guides the algorithm, or at least the implementation. -The -</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt"> -was actually invented to control the communications between the host and -terminal parts, but I realized very early that it was also a form of -cache. Other caches were more explicitly intended to serve a double -purpose: for example, the caches in -</span><span style="font-size: 10pt"><tt>Files</tt></span><span style="font-size: 10pt"> -that coalesce updates not only reduce traffic to the -transcript and contents -</span><span style="font-size: 10pt"><tt>Buffers</tt></span><span style="font-size: 10pt">, -they also clump screen updates so that complicated changes to the -screen are achieved in -just a few messages to the terminal. -This saved me considerable work: I did not need to write special -code to optimize the message traffic to the -terminal. -Caches pay off in surprising ways. -Also, they tend to be independent, so their performance improvements -are multiplicative. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>Data structures in the terminal -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The terminal’s job is to display and to maintain a consistent image of -pieces of the files being edited. -Because the text is always in memory, the data structures are -considerably simpler than those in the host part. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -typically has far more windows than does -</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">, -the window system within which its Blit implementation runs. -</span><span style="font-size: 10pt"><tt>Mux</tt></span><span style="font-size: 10pt"> -has a fairly small number of asynchronously updated windows; -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -needs a large number of synchronously updated windows that are -usually static and often fully obscured. -The different tradeoffs guided -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -away from the memory-intensive implementation of windows, called -</span><span style="font-size: 10pt"><tt>Layers</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">17</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -used in -</span><span style="font-size: 10pt"><tt>mux.</tt></span><span style="font-size: 10pt"> -Rather than depending on a complete bitmap image of the display for each window, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -regenerates the image from its in-memory text -(stored in the -</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">) -when necessary, although it will use such an image if it is available. -Like -</span><span style="font-size: 10pt"><tt>Layers</tt></span><span style="font-size: 10pt">, -though, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -uses the screen bitmap as active storage in which to update the image using -</span><span style="font-size: 10pt"><tt>bitblt</tt></span><span style="font-size: 10pt">.<sup></sup></span><sup><span style="font-size: 6pt">18,19</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -The resulting organization, pictured in Figure 6, -has a global array of windows, called -</span><span style="font-size: 10pt"><tt>Flayers</tt></span><span style="font-size: 10pt">, -each of which holds an image of a piece of text held in a data structure -called a -</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">, -which in turn represents -a rectangular window full of text displayed in some -</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">. -Each -</span><span style="font-size: 10pt"><tt>Flayer</tt></span><span style="font-size: 10pt"> -appears in a global list that orders them all front-to-back -on the display, and simultaneously as an element of a per-file array -that holds all the open windows for that file. -The complement in the terminal of the -</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt"> -on the host is called a -</span><span style="font-size: 10pt"><tt>Text</tt></span><span style="font-size: 10pt">; -each connects its -</span><span style="font-size: 10pt"><tt>Flayers</tt></span><span style="font-size: 10pt"> -to the associated -</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">. -</span><span style="font-size: 10pt"></span></p><center><img src="sam3.png"></center> -</center> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 8pt"><i>Figure 6. Data structures in the terminal. -</i></span><span style="font-size: 8pt"><tt>Flayers</tt></span><span style="font-size: 8pt"><i> -are also linked together into a front-to-back list. -</i></span><span style="font-size: 8pt"><tt>Boxes</tt></span><span style="font-size: 8pt"><i> -are discussed in the next section. -</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="margin-top: 0; margin-bottom: 0.02in"></p> - -<p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The -</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt"> -for a -</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt"> -contains the image of the text. -For a fully visible window, the -</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt"> -will be the screen (or at least the -</span><span style="font-size: 10pt"><tt>Layer</tt></span><span style="font-size: 10pt"> -in which -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -is being run), -while for partially obscured windows the -</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt"> -will be off-screen. -If the window is fully obscured, the -</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt"> -will be null. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The -</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt"> -is a kind of cache. -When making changes to the display, most of the original image will -look the same in the final image, and the update algorithms exploit this. -The -</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt"> -software updates the image in the -</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt"> -incrementally; the -</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt"> -is not just an image, it is a data structure.<sup></sup></span><sup><span style="font-size: 6pt">18,19</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -The job of the software that updates the display is therefore -to use as much as possible of the existing image (converting the -text from ASCII characters to pixels is expensive) in a sort of two-dimensional -string insertion algorithm. -The details of this process are described in the next section. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The -</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt"> -software has no code to support overlapping windows; -its job is to keep a single -</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt"> -up to date. -It falls to the -</span><span style="font-size: 10pt"><tt>Flayer</tt></span><span style="font-size: 10pt"> -software to multiplex the various -</span><span style="font-size: 10pt"><tt>Bitmaps</tt></span><span style="font-size: 10pt"> -onto the screen. -The problem of maintaining overlapping -</span><span style="font-size: 10pt"><tt>Flayers</tt></span><span style="font-size: 10pt"> -is easier than for -</span><span style="font-size: 10pt"><tt>Layers</tt></span><span style="font-size: 10pt"><sup></sup></span><sup><span style="font-size: 6pt">17</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> -because changes are made synchronously and because the contents of the window -can be reconstructed from the data stored in the -</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">; -the -</span><span style="font-size: 10pt"><tt>Layers</tt></span><span style="font-size: 10pt"> -software -makes no such assumptions. -In -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">, -the window being changed is almost always fully visible, because the current -window is always fully visible, by construction. -However, when multi-file changes are being made, or when -more than one window is open on a file, -it may be necessary to update partially obscured windows. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">There are three cases: the window is -fully visible, invisible (fully obscured), or partially visible. -If fully visible, the -</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt"> -is part of the screen, so when the -</span><span style="font-size: 10pt"><tt>Flayer</tt></span><span style="font-size: 10pt"> -update routine calls the -</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt"> -update routine, the screen will be updated directly. -If the window is invisible, -there is no associated -</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">, -and all that is necessary is to update the -</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt"> -data structure, not the image. -If the window is partially visible, the -</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt"> -routine is called to update the image in the off-screen -</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">, -which may require regenerating it from the text of the window. -The -</span><span style="font-size: 10pt"><tt>Flayer</tt></span><span style="font-size: 10pt"> -code then clips this -</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt"> -against the -</span><span style="font-size: 10pt"><tt>Bitmaps</tt></span><span style="font-size: 10pt"> -of all -</span><span style="font-size: 10pt"><tt>Frames</tt></span><span style="font-size: 10pt"> -in front of the -</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt"> -being modified, and the remainder is copied to the display. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">This is much faster than recreating the image off-screen -for every change, or clipping all the changes made to the image -during its update. -Unfortunately, these caches can also consume prohibitive amounts of -memory, so they are freed fairly liberally — after every change to the -front-to-back order of the -</span><span style="font-size: 10pt"><tt>Flayers</tt></span><span style="font-size: 10pt">. -The result is that -the off-screen -</span><span style="font-size: 10pt"><tt>Bitmaps</tt></span><span style="font-size: 10pt"> -exist only while multi-window changes are occurring, -which is the only time the performance improvement they provide is needed. -Also, the user interface causes fully-obscured windows to be the -easiest to make — -creating a canonically sized and placed window requires only a button click -— which reduces the need for caching still further. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>Screen update -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Only two low-level primitives are needed for incremental update: -</span><span style="font-size: 10pt"><tt>bitblt</tt></span><span style="font-size: 10pt">, -which copies rectangles of pixels, and -</span><span style="font-size: 10pt"><tt>string</tt></span><span style="font-size: 10pt"> -(which in turn calls -</span><span style="font-size: 10pt"><tt>bitblt</tt></span><span style="font-size: 10pt">), -which draws a null-terminated character string in a -</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">. -A -</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt"> -contains a list of -</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">, -each of which defines a horizontal strip of text in the window -(see Figure 7). -A -</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt"> -has a character string -</span><span style="font-size: 10pt"><tt>str</tt></span><span style="font-size: 10pt">, -and a -</span><span style="font-size: 10pt"><tt>Rectangle</tt></span><span style="font-size: 10pt"> -</span><span style="font-size: 10pt"><tt>rect</tt></span><span style="font-size: 10pt"> -that defines the location of the strip in the window. -(The text in -</span><span style="font-size: 10pt"><tt>str</tt></span><span style="font-size: 10pt"> -is stored in the -</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt"> -separately from the -</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt"> -associated with the window’s file, so -</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt"> -are self-contained.) -The invariant is that -the image of the -</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt"> -can be reproduced by calling -</span><span style="font-size: 10pt"><tt>string</tt></span><span style="font-size: 10pt"> -with argument -</span><span style="font-size: 10pt"><tt>str</tt></span><span style="font-size: 10pt"> -to draw the string in -</span><span style="font-size: 10pt"><tt>rect</tt></span><span style="font-size: 10pt">, -and the resulting picture fits perfectly within -</span><span style="font-size: 10pt"><tt>rect</tt></span><span style="font-size: 10pt">. -In other words, the -</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt"> -define the tiling of the window. -The tiling may be complicated by long lines of text, which -are folded onto the next line. -Some editors use horizontal scrolling to avoid this complication, -but to be comfortable this technique requires that lines not be -</span><span style="font-size: 10pt"><i>too</i></span><span style="font-size: 10pt"> -long; -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -has no such restriction. -Also, and perhaps more importantly, UNIX programs and terminals traditionally fold -long lines to make their contents fully visible. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Two special kinds of -</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt"> -contain a single -character: either a newline or a tab. -Newlines and tabs are white space. -A newline -</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt"> -always extends to the right edge of the window, -forcing the following -</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt"> -to the next line. -The width of a tab depends on where it is located: -it forces the next -</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt"> -to begin at a tab location. -Tabs also -have a minimum width equivalent to a blank (blanks are -drawn by -</span><span style="font-size: 10pt"><tt>string</tt></span><span style="font-size: 10pt"> -and are not treated specially); newlines have a minimum width of zero. -</span><span style="font-size: 10pt"></span></p><center><img src="sam4.png"></center> -</center> -<p style="margin-top: 0; margin-bottom: 0.08in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 8pt"><i>Figure 7. A line of text showing its -</i></span><span style="font-size: 8pt"><tt>Boxes</tt></span><span style="font-size: 8pt"><i>. -The first two blank -</i></span><span style="font-size: 8pt"><tt>Boxes</tt></span><span style="font-size: 8pt"><i> -contain tabs; the last contains a newline. -Spaces are handled as ordinary characters. -</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="margin-top: 0; margin-bottom: 0.02in"></p> - -<p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The update algorithms always use the -</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt"> -image of the text (either the display or cache -</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">); -they never examine the characters within a -</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt"> -except when the -</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt"> -needs to be split in two. -Before a change, the window consists of a tiling of -</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">; -after the change the window is tiled differently. -The update algorithms rearrange the tiles in place, without -backup storage. -The algorithms are not strictly optimal — for example, they can -clear a pixel that is later going to be written upon — -but they never move a tile that doesn’t need to be moved, -and they move each tile at most once. -</span><span style="font-size: 10pt"><tt>Frinsert</tt></span><span style="font-size: 10pt"> -on a Blit can absorb over a thousand characters a second if the strings -being inserted are a few tens of characters long. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Consider -</span><span style="font-size: 10pt"><tt>frdelete</tt></span><span style="font-size: 10pt">. -Its job is to delete a substring from a -</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt"> -and restore the image of the -</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">. -The image of a substring has a peculiar shape (see Figure 2) comprising -possibly a partial line, -zero or more full lines, -and possibly a final partial line. -For reference, call this the -</span><span style="font-size: 10pt"><i>Z-shape. -</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Frdelete</tt></span><span style="font-size: 10pt"> -begins by splitting, if necessary, the -</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt"> -containing the ends of -the substring so the substring begins and ends on -</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt"> -boundaries. -Because the substring is being deleted, its image is not needed, -so the Z-shape is then cleared. -Then, tiles (that is, the images of -</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">) -are copied, using -</span><span style="font-size: 10pt"><tt>bitblt</tt></span><span style="font-size: 10pt">, -from immediately after the Z-shape to -the beginning of the Z-shape, -resulting in a new Z-shape. -(</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt"> -whose contents would span two lines in the new position must first be split.) -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Copying the remainder of the -</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt"> -tile by tile -this way will clearly accomplish the deletion but eventually, -typically when the copying algorithm encounters a tab or newline, -the old and new -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -coordinates of the tile -to be copied are the same. -This correspondence implies -that the Z-shape has its beginning and ending edges aligned -vertically, and a sequence of at most two -</span><span style="font-size: 10pt"><tt>bitblts</tt></span><span style="font-size: 10pt"> -can be used to copy the remaining tiles. -The last step is to clear out the resulting empty space at the bottom -of the window; -the number of lines to be cleared is the number of complete lines in the -Z-shape closed by the final -</span><span style="font-size: 10pt"><tt>bitblts.</tt></span><span style="font-size: 10pt"> -The final step is to merge horizontally adjacent -</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt"> -of plain text. -The complete source to -</span><span style="font-size: 10pt"><tt>frdelete</tt></span><span style="font-size: 10pt"> -is less than 100 lines of C. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>frinsert</tt></span><span style="font-size: 10pt"> -is more complicated because it must do four passes: -one to construct the -</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt"> -list for the inserted string, -one to reconnoitre, -one to copy (in opposite order to -</span><span style="font-size: 10pt"><tt>frdelete</tt></span><span style="font-size: 10pt">) -the -</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt"> -to make the hole for the new text, -and finally one to copy the new text into place. -Overall, though, -</span><span style="font-size: 10pt"><tt>frinsert</tt></span><span style="font-size: 10pt"> -has a similar flavor to -</span><span style="font-size: 10pt"><tt>frdelete</tt></span><span style="font-size: 10pt">, -and needn’t be described further. -</span><span style="font-size: 10pt"><tt>Frinsert</tt></span><span style="font-size: 10pt"> -and its subsidiary routines comprise 211 lines of C. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The terminal source code is 3024 lines of C, -and the host source is 5797 lines. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>Discussion -</b></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>History -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">The immediate ancestor of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -was the original text editor for the Blit, called -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">. -</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -inherited -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">’s -two-process structure and mouse language almost unchanged, but -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt"> -suffered from several drawbacks that were addressed in the design of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">. -The most important of these was the lack of a command language. -Although -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt"> -was easy to use for simple editing, it provided no direct help with -large or repetitive editing tasks. Instead, it provided a command to pass -selected text through a shell pipeline, -but this was no more satisfactory than could be expected of a stopgap measure. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Jim</tt></span><span style="font-size: 10pt"> -was written primarily as a vehicle for experimenting with a mouse-based -interface to text, and the experiment was successful. -</span><span style="font-size: 10pt"><tt>Jim</tt></span><span style="font-size: 10pt"> -had some spin-offs: -</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">, -the second window system for the Blit, is essentially a multiplexed -version of the terminal part of -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">; -and the debugger -</span><span style="font-size: 10pt"><tt>pi</tt></span><span style="font-size: 10pt">’s -user interface<sup></sup></span><sup><span style="font-size: 6pt">20</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> was closely modeled on -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">’s. -But after a couple of years, -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt"> -had become difficult to maintain and limiting to use, -and its replacement was overdue. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">I began the design of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -by asking -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt"> -customers what they wanted. -This was probably a mistake; the answers were essentially a list of features -to be found in other editors, which did not provide any of the -guiding principles I was seeking. -For instance, one common request was for a ‘‘global substitute,’’ -but no one suggested how to provide it within a cut-and-paste editor. -I was looking for a scheme that would -support such specialized features comfortably in the context of some -general command language. -Ideas were not forthcoming, though, particularly given my insistence -on removing all limits on file sizes, line lengths and so on. -Even worse, I recognized that, since the mouse could easily -indicate a region of the screen that was not an integral number of lines, -the command language would best forget about newlines altogether, -and that meant the command language had to treat the file as a single -string, not an array of lines. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Eventually, I decided that thinking was not getting me very far and it was -time to try building. -I knew that the terminal part could be built easily — -that part of -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt"> -behaved acceptably well — and that most of the hard work was going -to be in the host part: the file interface, command interpreter and so on. -Moreover, I had some ideas about how the architecture of -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt"> -could be improved without destroying its basic structure, which I liked -in principle but which hadn’t worked out as well as I had hoped. -So I began by designing the file data structure, -starting with the way -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt"> -worked — comparable to a single structure merging -</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt"> -and -</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">, -which I split to make the cache more general -— and thinking about how global substitute could be implemented. -The answer was clearly that it had to be done in two passes, -and the transcript-oriented implementation fell out naturally. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -was written bottom-up, -starting from the data structures and algorithms for manipulating text, -through the command language and up to the code for maintaining -the display. -In retrospect, it turned out well, but this implementation method is -not recommended in general. -There were several times when I had a large body of interesting code -assembled and no clue how to proceed with it. -The command language, in particular, took almost a year to figure out, -but can be implemented (given what was there at the beginning of that year) -in a day or two. Similarly, inventing the -</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt"> -data structure delayed the -connection of the host and terminal pieces by another few months. -</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -took about two years to write, although only about four months were -spent actually working on it. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Part of the design process was unusual: -the subset of the protocol that maintains the -</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt"> -was simulated, debugged -and verified by an automatic protocol analyzer,<sup></sup></span><sup><span style="font-size: 6pt">21</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> and was bug-free -from the start. -The rest of the protocol, concerned mostly -with keeping menus up to date, -was unfortunately too unwieldy for such analysis, -and was debugged by more traditional methods, primarily -by logging in a file all messages in and out of the host. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>Reflections -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -is essentially the only interactive editor used by the sixty or so members of -the computing science research center in which I work. -The same could not be said of -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">; -the lack of a command language kept some people from adopting it. -The union of a user interface as comfortable as -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">’s -with a command language as powerful as -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">’s† -</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">is essential to -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -success. -When -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -was first made available to the -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt"> -community, -almost everyone switched to it within two or three days. -In the months that followed, even people who had never adopted -</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt"> -started using -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -exclusively. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">To be honest, -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt"> -still gets occasional use, but usually when -something quick needs to be done and the overhead of -downloading the terminal part of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -isn’t worth the trouble. -Also, as a ‘line’ editor, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -</span><span style="font-size: 10pt"><tt>-d</tt></span><span style="font-size: 10pt"> -is a bit odd; -when using a good old ASCII terminal, it’s comforting to have -a true line editor. -But it is fair to say that -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -command language has displaced -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">’s -for most of the complicated editing that has kept line editors -(that is, command-driven editors) with us. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">’s -command language is even fancier than -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">’s, -and most -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -customers don’t come near to using all its capabilities. -Does it need to be so sophisticated? -I think the answer is yes, for two reasons. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">First, the -</span><span style="font-size: 10pt"><i>model</i></span><span style="font-size: 10pt"> -for -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -command language is really relatively simple, and certainly simpler than that of -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">. -For instance, there is only one kind of textual loop in -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -— the -</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt"> -command — -while -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt"> -has three (the -</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt"> -command, the global flag on substitutions, and the implicit loop over -lines in multi-line substitutions). -Also, -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">’s -substitute command is necessary to make changes within lines, but in -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -the -</span><span style="font-size: 10pt"><tt>s</tt></span><span style="font-size: 10pt"> -command is more of a familiar convenience than a necessity; -</span><span style="font-size: 10pt"><tt>c</tt></span><span style="font-size: 10pt"> -and -</span><span style="font-size: 10pt"><tt>t</tt></span><span style="font-size: 10pt"> -can do all the work. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Second, -given a community that expects an editor to be about as powerful as -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">, -it’s hard to see how -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -could really be much simpler and still satisfy that expectation. -People want to do ‘‘global substitutes,’’ and most are content -to have the recipe for that and a few other fancy changes. -The sophistication of the command language is really just a veneer -over a design that makes it possible to do global substitutes -in a screen editor. -Some people will always want something more, however, and it’s gratifying to -be able to provide it. -The real power of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -command language comes from composability of the operators, which is by -nature orthogonal to the underlying model. -In other words, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -is not itself complex, but it makes complex things possible. -If you don’t want to do anything complex, you can ignore the -complexity altogether, and many people do so. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Sometimes I am asked the opposite question: why didn’t I just make -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -a real programmable editor, with macros and variables and so on? -The main reason is a matter of taste: I like the editor -to be the same every time I use it. -There is one technical reason, though: -programmability in editors is largely a workaround for insufficient -interactivity. -Programmable editors are used to make particular, usually short-term, -things easy to do, such as by providing shorthands for common actions. -If things are generally easy to do in the first place, -shorthands are not as helpful. -</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -makes common editing operations very easy, and the solutions to -complex editing problems seem commensurate with the problems themselves. -Also, the ability to edit the -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -window makes it easy to repeat commands — it only takes a mouse button click -to execute a command again. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>Pros and cons -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -has several other good points, -and its share of problems. -Among the good things is the idea of -structural regular expressions, -whose usefulness has only begun to be explored. -They were arrived at serendipitously when I attempted to distill the essence of -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">’s -way of doing global substitution and recognized that the looping command in -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt"> -was implicitly imposing a structure (an array of lines) on the file. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Another of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -good things is its undo capability. -I had never before used an editor with a true undo, -but I would never go back now. -Undo -</span><span style="font-size: 10pt"><i>must</i></span><span style="font-size: 10pt"> -be done well, but if it is, it can be relied on. -For example, -it’s safe to experiment if you’re not sure how to write some intricate command, -because if you make a mistake, it can be fixed simply and reliably. -I learned two things about undo from writing -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">: -first, it’s easy to provide if you design it in from the beginning, and -second, it’s necessary, particularly if the system has some subtle -properties that may be unfamiliar or error-prone for users. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">’s -lack of internal limits and sizes is a virtue. -Because it avoids all fixed-size tables and data structures, -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -is able to make global changes to files that some of our other -tools cannot even read. -Moreover, the design keeps the performance linear when doing such -operations, although I must admit -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -does get slow when editing a huge file. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Now, the problems. -Externally, the most obvious is that it is poorly integrated into the -surrounding window system. -By design, the user interface in -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -feels almost identical to that of -</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">, -but a thick wall separates text in -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -from the programs running in -</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">. -For instance, the ‘snarf buffer’ in -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -must be maintained separately from that in -</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">. -This is regrettable, but probably necessary given the unusual configuration -of the system, with a programmable terminal on the far end of an RS-232 link. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> -is reliable; otherwise, people wouldn’t use it. -But it was written over such a long time, and has so many new (to me) -ideas in it, that I would like to see it done over again to clean -up the code and remove many of the lingering problems in the implementation. -The worst part is in the interconnection of the host and terminal parts, -which might even be able to go away in a redesign for a more -conventional window system. -The program must be split in two to use the terminal effectively, -but the low bandwidth of the connection forces the separation to -occur in an inconvenient part of the design if performance is to be acceptable. -A simple remote procedure call -protocol driven by the host, emitting only graphics -commands, would be easy to write but wouldn’t have nearly the -necessary responsiveness. On the other hand, if the terminal were in control -and requested much simpler file services from the host, regular expression -searches would require that the terminal read the entire file over its RS-232 -link, which would be unreasonably slow. -A compromise in which either end can take control is necessary. -In retrospect, the communications protocol should have been -designed and verified formally, although I do not know of any tool -that can adequately relate the protocol to -its implementation. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Not all of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -users are comfortable with its command language, and few are adept. -Some (venerable) people use a sort of -‘‘</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt"> -subset’’ of -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -command language, -and even ask why -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -command language is not exactly -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">’s. -(The reason, of course, is that -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -model for text does not include newlines, which are central to -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">. -Making the text an array of newlines to the command language would -be too much of a break from the seamless model provided by the mouse. -Some editors, such as -</span><span style="font-size: 10pt"><tt>vi</tt></span><span style="font-size: 10pt">, -are willing to make this break, though.) -The difficulty is that -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">’s -syntax is so close to -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">’s -that people believe it -</span><span style="font-size: 10pt"><i>should</i></span><span style="font-size: 10pt"> -be the same. -I thought, with some justification in hindsight, -that making -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -similar to -</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt"> -would make it easier to learn and to accept. -But I may have overstepped and raised the users’ -expectations too much. -It’s hard to decide which way to resolve this problem. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Finally, there is a tradeoff in -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -that was decided by the environment in which it runs: -</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> -is a multi-file editor, although in a different system there might instead be -multiple single-file editors. -The decision was made primarily because starting a new program in a Blit is -time-consuming. -If the choice could be made freely, however, I would -still choose the multi-file architecture, because it allows -groups of files to be handled as a unit; -the usefulness of the multi-file commands is incontrovertible. -It is delightful to have the source to an entire program -available at your fingertips. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>Acknowledgements -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">Tom Cargill suggested the idea behind the -</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt"> -data structure. -Norman Wilson and Ken Thompson influenced the command language. -This paper was improved by comments from -Al Aho, -Jon Bentley, -Chris Fraser, -Gerard Holzmann, -Brian Kernighan, -Ted Kowalski, -Doug McIlroy -and -Dennis Ritchie. -</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"><b>REFERENCES -</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"> 1. R. Pike, -‘The Blit: a multiplexed graphics terminal,’ -</span><span style="font-size: 10pt"><i>AT&T Bell Labs. Tech. J., -</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>63</b></span><span style="font-size: 10pt">, -(8), -1607-1631 (1984). -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"> 2. L. Johnson, -</span><span style="font-size: 10pt"><i>MacWrite,</i></span><span style="font-size: 10pt"> -Apple Computer Inc., Cupertino, Calif. 1983. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"> 3. B. Lampson, -‘Bravo Manual,’ -in -</span><span style="font-size: 10pt"><i>Alto User’s Handbook, -</i></span><span style="font-size: 10pt">pp. 31-62, -Xerox Palo Alto Research Center, -Palo Alto, Calif. -1979. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"> 4. W. Teitelman, -‘A tour through Cedar,’ -</span><span style="font-size: 10pt"><i>IEEE Software, -</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>1</b></span><span style="font-size: 10pt"> -(2), 44-73 (1984). -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"> 5. J. Gutknecht, -‘Concepts of the text editor Lara,’ -</span><span style="font-size: 10pt"><i>Comm. ACM, -</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>28</b></span><span style="font-size: 10pt">, -(9), -942-960 (1985). -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"> 6. Bell Telephone Laboratories, -</span><span style="font-size: 10pt"><i>UNIX Programmer’s Manual, -</i></span><span style="font-size: 10pt">Holt, Rinehart and Winston, New York 1983. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"> 7. B. W. Kernighan and R. Pike, -</span><span style="font-size: 10pt"><i>The Unix Programming Environment, -</i></span><span style="font-size: 10pt">Prentice-Hall, Englewood Cliffs, New Jersey 1984. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"> 8. </span><span style="font-size: 10pt"><i>Unix Time-Sharing System Programmer’s Manual, Research Version, Ninth Edition, -Volume 1, -</i></span><span style="font-size: 10pt">AT&T Bell Laboratories, Murray Hill, New Jersey 1986. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt"> 9. </span><span style="font-size: 10pt"><i>Unix Time-Sharing System Programmer’s Manual, 4.1 Berkeley Software Distribution, -Volumes 1 and 2C, -</i></span><span style="font-size: 10pt">University of California, Berkeley, Calif. 1981. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">10. R. Pike, -‘Structural Regular Expressions,’ -</span><span style="font-size: 10pt"><i>Proc. EUUG Spring Conf., Helsinki 1987, -</i></span><span style="font-size: 10pt">Eur. Unix User’s Group, Buntingford, Herts, UK 1987. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">11. A. Goldberg, -</span><span style="font-size: 10pt"><i>Smalltalk-80 – The Interactive Programming Environment, -</i></span><span style="font-size: 10pt">Addison-Wesley, Reading, Mass. 1984. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">12. K. Thompson, -‘Regular expression search algorithm,’ -</span><span style="font-size: 10pt"><i>Comm. ACM, -</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>11</b></span><span style="font-size: 10pt">, -(6), -419-422 (1968). -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">13. A. V. Aho, J. E. Hopcroft and J. D. Ullman, -</span><span style="font-size: 10pt"><i>The Design and Analysis of Computer Algorithms, -</i></span><span style="font-size: 10pt">Addison-Wesley, Reading, Mass. 1974. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">14. B. W. Kernighan and D. M. Ritchie, -</span><span style="font-size: 10pt"><i>The C Programming Language, -</i></span><span style="font-size: 10pt">Prentice-Hall, Englewood Cliffs, New Jersey 1978. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">15. W. M. Waite, -‘The cost of lexical analysis,’ -</span><span style="font-size: 10pt"><i>Softw. Pract. Exp., -</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>16</b></span><span style="font-size: 10pt">, -(5), -473-488 (1986). -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">16. C. W. Fraser, -‘A generalized text editor,’ -</span><span style="font-size: 10pt"><i>Comm. ACM, -</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>23</b></span><span style="font-size: 10pt">, -(3), -154-158 (1980). -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">17. R. Pike, -‘Graphics in overlapping bitmap layers,’ -</span><span style="font-size: 10pt"><i>ACM Trans. on Graph., -</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>2</b></span><span style="font-size: 10pt">, -(2) -135-160 (1983). -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">18. L. J. Guibas and J. Stolfi, -‘A language for bitmap manipulation,’ -</span><span style="font-size: 10pt"><i>ACM Trans. on Graph., -</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>1</b></span><span style="font-size: 10pt">, -(3), -191-214 (1982). -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">19. R. Pike, B. Locanthi and J. Reiser, -‘Hardware/software trade-offs for bitmap graphics on the Blit,’ -</span><span style="font-size: 10pt"><i>Softw. Pract. Exp., -</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>15</b></span><span style="font-size: 10pt">, -(2), -131-151 (1985). -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">20. T. A. Cargill, -‘The feel of Pi,’ -</span><span style="font-size: 10pt"><i>Winter USENIX Conference Proceedings, -Denver 1986, -</i></span><span style="font-size: 10pt">62-71, -USENIX Assoc., El Cerrito, CA. -</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p> -<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;"> -<span style="font-size: 10pt">21. G. J. Holzmann, -‘Tracing protocols,’ -</span><span style="font-size: 10pt"><i>AT&T Tech. J., -</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>64</b></span><span style="font-size: 10pt">, -(10), -2413-2434 (1985). -</span></p><p style="margin-top: 0; margin-bottom: 0.50in"></p> -</body> -</html> - diff --git a/sys/doc/sam/sam.tut.out b/sys/doc/sam/sam.tut.out deleted file mode 100644 index 3bdc36596..000000000 --- a/sys/doc/sam/sam.tut.out +++ /dev/null @@ -1,4863 +0,0 @@ -x T utf -x res 720 1 1 -x init -V0 -p1 -x font 1 R -x font 2 I -x font 3 B -x font 4 BI -x font 5 CW -x font 6 H -x font 7 HI -x font 8 HB -x font 9 S1 -x font 10 S -s10 -f1 -H720 -f3 -s12 -V1230 -h1084cA -wh116ct -40u67t40o60r53i34a60lw64f40o60rw83t40h67ewf5 -83s72a72mwf3 -h102cc -53o60mh100cm -h100ca -60n67dw97l34a60n67g60u67a60g60en150 0 -H720 -f2 -s10 -V1470 -h1978cR -61o50bw75P61i28k44en120 0 -H720 -f1 -V1650 -h1812cB -67e44l28lw53L61a44b50o50r33a44t28o50r33i28e44sn120 0 -H720 -V1770 -h1526cM -89u50r33r33a44yw75H72i28l28l28,w50N72e44ww97J39e44r33s39e44yw750507509507504n120 0 -H720 -f2 -V2150 -h1923cA -61B61S50T56R61A61C67Tn140 0 -H720 -f5 -V2410 -h610cs -60a60mwf1 -86i28sw65a44nw76i28n50t28e44r33a44c44t28i28v50ew70t28e44x50tw54e44d50i28t28o50rw59w72i28t28hw76aw70c44o50m78m78a44n50dw77l28a44n50g50u50a44g50ew71t28h50a44tw55m78a44k50e44sw66h50e44a44v50yw77u50s39ew71o50fn120 0 -H720 -V2530 -h360cr -33e44g50u50l28a44rw67e44x50p50r33e44s39s39i28o50n50s39.w84A72l28t28h50o50u50g50hw84t28h50ew78l28a44n50g50u50a44g50ew78i28sw73s39y50n50t28a44c44t28i28c44a44l28l28yw84s39i28m78i28l28a44rw66t28owf5 -83e60df1 -60(33150)33,w58t28h50ew77d50e44t28a44i28l28sn120 0 -H720 -V2650 -h360ca -44r33ew77i28n50t28e44r33e44s39t28i28n50g50l28yw83d50i28f33f33e44r33e44n50t28.w83T61h50i28sw72t28u50t28o50r33i28a44lw61i28n50t28r33o50d50u50c44e44sw72t28h50ew77c44o50m78m78a44n50dw83l28a44n50g50u50a44g50e44,w58b50u50tw61d50o50e44sw72n50o50tn120 0 -H720 -V2770 -h360cd -50i28s39c44u50s39sw85t28h50ew90s39c44r33e44e44nw96a44n50dw96m78o50u50s39ew89i28n50t28e44r33f33a44c44e44.w95W94i28t28hw95a44p50o50l28o50g50i28e44sw84t28ow95t28h50o50s39ew89u50n50f33a44m78i28l28i28a44rw78w72i28t28hw95t28h50en120 0 -H720 -V2890 -h360cN -72i28n50t28hw88E61d50i28t28i28o50nw88B67l28i28tw66s39o50f33t28w72a44r33e44,w63i28tw67i28sw78a44s39s39u50m78e44dw89t28h50a44tw67t28h50ew83s39i28m78i28l28a44r33i28t28yw89o50fwf5 -72s60a60mwf1 -99t28owf5 -89m60u60xf1 -60(33950)w72a44tw67t28h50i28sn120 0 -H720 -V3010 -h360cl -28e44v50e44lw53m78a44k50e44swf5 -64s60a60mf1 -60'33sw64m78o50u50s39ew69l28a44n50g50u50a44g50ew69e44a44s39yw75t28ow75l28e44a44r33n50.n120 0 -H720 -V3166 -h610cT -61h50ewf5 -81s60a60mwf1 -97c44o50m78m78a44n50dw87l28a44n50g50u50a44g50ew81a44p50p50l28i28e44sw76i28d50e44n50t28i28c44a44l28l28yw87t28ow88t28w72ow88e44n50v50i28r33o50n50m78e44n50t28s39:w66w72h50e44nw88r33u50nh50Chy -n120 0 -H720 -V3286 -h360cn -50i28n50gwf5 -95s60a60mwf1 -h104co -50nw94a44nw94o50r33d50i28n50a44r33yw94t28e44r33m78i28n50a44lw72(f2 -33v44i28awf5 -94s60a60mwh120c- -60df1 -60)33,w69a44n50dw94i28nw94t28h50ew88c44o50m78m78a44n50dw94w72i28n50d50o50wwh116co -50fw77an120 0 -H720 -f2 -V3406 -h360cd -50o50w67n50l28o50a50d50e44dwf5 -75s60a60mf1 -60,w50t28h50a44tw53i28s39,w50o50n50ew69u50s39i28n50gw75t28h50ew69b50i28t28m78a44pw75d50i28s39p50l28a44yw75a44n50dw75m78o50u50s39e44.n120 0 -H720 -f3 -V3766 -cI -39n56t33r44o50d56u56c44t33i28o50nn120 0 -H720 -f1 -V3922 -h250cT -61h50i28sw64t28u50t28o50r33i28a44lw53d50e44s39c44r33i28b50e44sw65t28h50ew70c44o50m78m78a44n50dw76l28a44n50g50u50a44g50ew70o50fwf5 -59s60a60mf1 -60,w51a44nw76i28n50t28e44r33a44c44t28i28v50ew70t28e44x50tw54e44d50i28t28o50rw59t28h50a44tw54r33u50n50sw65o50nw76B67l28i28t28sw65a44n50dn120 0 -H720 -V4042 -cs -39o50m78ew77c44o50m78p50u50t28e44r33sw71w72i28t28hw82b50i28t28m78a44pw82d50i28s39p50l28a44y50s39.w82F56o50rw65m78o50s39tw60e44d50i28t28i28n50gw82t28a44s39k50s39,w57t28h50ew76m78o50u50s39e44-33b50a44s39e44dw82e44d50i28t28i28n50gw82f33e44a44t28u50r33e44sw71a44r33ew76s39u50f33f33ih28Chy -n120 0 -H720 -V4162 -cc -44i28e44n50t28,w50a44n50dw75t28h50e44yw75a44r33ew69e44a44s39yw75t28ow75u50s39ew69a44n50dw75t28ow75l28e44a44r33n50.n120 0 -H720 -V4318 -h250cT -61h50ew75c44o50m78m78a44n50dw82l28a44n50g50u50a44g50ew76i28sw71o50f33t28e44nw82u50s39e44f33u50l28,w57h50o50w72e44v50e44r33,w57p50a44r33t28i28c44u50l28a44r33l28yw82w72h50e44nw82m78a44k50i28n50gw82g50l28o50b50a44lw60c44h50a44n50g50e44s39.w82U72n50l28i28k50en120 0 -H720 -V4438 -ct -28h50ew73c44o50m78m78a44n50d50sw68i28nwf5 -79e60df1 -60,w54w72h50i28c44hw79a44r33ew73n50e44c44e44s39s39a44r33yw79t28ow78m78a44k50ew72c44h50a44n50g50e44s39,wf5 -53s60a60mwf1 -88c44o50m78m78a44n50d50sw67t28e44n50dw78t28ow78b50ew72u50s39e44dw78o50n50l28yw78f33o50rw61c44o50mh78Chy -n120 0 -H720 -V4558 -cp -50l28i28c44a44t28e44dw79o50rw62r33e44p50e44t28i28t28i28v50ew74e44d50i28t28i28n50gw80t28a44s39k50s39.w80I33tw58i28sw69i28nw80t28h50e44s39ew74m78o50r33ew74i28n50v50o50l28v50e44dw80u50s39e44sw69t28h50a44tw58t28h50ew74d50i28f33f33e44r33e44n50c44e44sw69b50e44t28w72e44e44nwf5 -80s60a60mwf1 -90a44n50dn120 0 -H720 -V4678 -co -50t28h50e44rw58t28e44x50tw53e44d50i28t28o50r33sw64a44r33ew69m78o50s39tw53e44v50i28d50e44n50t28.n120 0 -H720 -f5 -V4834 -h250cs -60a60mf1 -60'33sw67l28a44n50g50u50a44g50ew72m78a44k50e44sw67i28tw56e44a44s39yw78t28ow78d50ow78s39o50m78ew72t28h50i28n50g50sw67t28h50a44tw57o50t28h50e44rw62e44d50i28t28o50r33s39,w54i28n50c44l28u50d50i28n50gw79p50r33o50g50r33a44m78sw68l28i28k50ewf5 -73s60e60dwf1 -89a44n50dn120 0 -H720 -f5 -V4954 -ca -60w60kf1 -60,w59d50ow84n50o50tw62h50a44n50d50l28ew78g50r33a44c44e44f33u50l28l28y50,w59s39ow84t28h50i28sw73t28u50t28o50r33i28a44lw62s39e44r33v50e44sw73p50a44r33t28l28yw83a44sw72aw77l28e44s39s39o50nw83i28nwf5 -83s60a60mf1 -60'33sw72m78a44n50n50e44rw66o50fw66m78a44n50i28p50u50l28a44t28i28n50gn120 0 -H720 -V5074 -ct -28e44x50t28.w85T61h50ew80e44x50a44m78p50l28e44sw75b50e44l28o50wwh108ct -28h50e44r33e44f33o50r33ew80c44o50n50c44e44n50t28r33a44t28ew80e44n50t28i28r33e44l28yw86o50nw86t28h50ew80l28a44n50g50u50a44g50e44,w61a44s39s39u50m78i28n50gw86t28h50a44tw64f33a44c44i28l28i28t28yw86w72i28t28hw86t28h50en120 0 -H720 -V5194 -cu -50s39ew74o50fw63t28h50ew74m78o50u50s39ew74i28nwf5 -80s60a60mwf1 -89i28sw68a44tw57w72o50r33s39tw57e44a44s39yw79t28ow79p50i28c44kw79u50p50.w79I33nw79f33a44c44t28,wf5 -54s60a60mwf1 -89c44a44nw79b50ew73r33u50nw79w72i28t28h50o50u50tw57t28h50ew73m78o50u50s39ew73a44tw57a44l28lw57(33n50o50tn120 0 -H720 -f2 -V5314 -cd -50o50w67n50l28o50a50d50e44df1 -50)33,w55b50yw80s39p50e44c44i28f33y50i28n50gw80t28h50ewf5 -74-60dwf1 -90f33l28a44g50,w55a44n50dw80i28tw58i28sw69t28h50i28sw69d50o50m78a44i28nw80t28h50a44tw58t28h50ew74t28u50t28o50r33i28a44lw59o50c44c44u50p50i28e44s39;w59t28h50ew75c44o50m78m78a44n50dw81l28a44nh50Chy -n120 0 -H720 -V5434 -cg -50u50a44g50ew69i28nw75t28h50e44s39ew69m78o50d50e44sw64a44r33ew69i28d50e44n50t28i28c44a44l28.n120 0 -H720 -V5590 -h250cA -wh102cw -72o50r33dw80t28ow81t28h50ew75U72n50i28xw81a44d50e44p50t28:w59a44l28t28h50o50u50g50hwf5 -81s60a60mwf1 -91i28sw70s39y50n50t28a44c44t28i28c44a44l28l28yw81v50e44r33yw81s39i28m78i28l28a44rw64t28owf5 -81e60df1 -60,w56i28tw59i28sw70f33u50n50d50a44m78e44n50t28a44l28l28yw81a44n50dn120 0 -H720 -V5710 -cd -50e44l28i28b50e44r33a44t28e44l28yw78d50i28f33f33e44r33e44n50tw56i28nw77d50e44s39i28g50nw77a44n50dw77d50e44t28a44i28l28e44dw77s39e44m78a44n50t28i28c44s39.w77Y72o50uw77m78i28g50h50tw55u50s39ew71k50n50o50w72l28e44d50g50ew71o50fwf5 -60e60dwf1 -87t28ow77p50r33e44d50i28c44tw55h50o50ww99t28h50en120 0 -H720 -V5830 -cs -39u50b50s39t28i28t28u50t28ew70c44o50m78m78a44n50dw76w72o50r33k50s39,w51b50u50tw55y50o50u50'33dw77o50n50l28yw77b50ew71r33i28g50h50tw55i28fw60y50o50uw77h50a44dw77u50s39e44dw77s39o50m78ew71u50n50d50e44r33s39t28a44n50d50i28n50gw77o50fwf5 -60s60a60mf1 -60'33sw66w72o50r33k50i28n50g50sn120 0 -H720 -V5950 -ct -28ow85i28n50f33l28u50e44n50c44ew79y50o50u50rw68p50r33e44d50i28c44t28i28o50n50.w85B67ew79p50a44r33t28i28c44u50l28a44r33l28yw85c44a44r33e44f33u50lw63a44b50o50u50tw63i28d50i28o50m78s39.w85I33d50i28o50m78sw74f33o50r33mwh112ci -28nw84c44u50r33i28o50u50sw73n50o50o50k50sw73o50fw67l28a44nh50Chy -n120 0 -H720 -V6070 -cg -50u50a44g50e44sw78a44n50dw89d50e44p50e44n50dw89o50nw89u50n50d50e44p50e44n50d50a44b50l28ew83p50e44c44u50l28i28a44r33i28t28i28e44s39.wf5 -89e60dwf1 -99i28d50i28o50m78sw78s39i28m78p50l28yw89d50o50n50'33tw68w72o50r33kw90i28nwf5 -90s60a60mf1 -60:wf5 -68160,60$60s60/60a60/60b60/n120 0 -H720 -f1 -V6190 -cm -78a44k50e44sw65o50n50ew70s39u50b50s39t28i28t28u50t28i28o50nw76i28nw76t28h50ew70w72h50o50l28ew70f33i28l28e44,w51n50o50tw54o50n50ew70p50e44rw59l28i28n50e44.wf5 -76s60a60mwf1 -86h50a44sw64i28t28sw64o50w72nw75i28d50i28o50m78s39.w75M89u50c44hw75o50fw58t28h50ew69p50u50r33p50o50s39ew69o50fn120 0 -H720 -V6310 -ct -28h50i28sw64t28u50t28o50r33i28a44lw53i28sw64t28ow75p50u50b50l28i28s39hw75t28h50e44mwh103ca -44n50dw75m78a44k50ew69f33l28u50e44n50c44yw75i28nwf5 -75s60a60mwf1 -85aw69m78a44t28t28e44rw58o50fw58l28e44a44r33n50i28n50g50,w50n50o50tw53c44u50n50n50i28n50g50.n120 0 -H720 -V6466 -h250cT -61h50ew75t28u50t28o50r33i28a44lw59d50e44p50e44n50d50sw70o50nw81f33a44m78i28l28i28a44r33i28t28yw81w72i28t28hw81r33e44g50u50l28a44rw64e44x50p50r33e44s39s39i28o50n50s39,w56a44l28t28h50o50u50g50hw81s39o50m78ew76e44x50p50e44r33i28e44n50c44ew76w72i28t28hw82aw76m78o50r33en120 0 -H720 -V6586 -ct -28r33a44d50i28t28i28o50n50a44lw55U72n50i28xw77e44d50i28t28o50rw60m78a44yw77b50ew71h50e44l28p50f33u50l28.w77T61ow77a44i28dw77r33e44a44d50e44r33sw66f33a44m78i28l28i28a44rw59w72i28t28hwf5 -76e60df1 -60,w51Iw59h50a44v50ew70p50o50i28n50t28e44dw76o50u50tw54i28nw76s39q50u50a44r33ew70b50r33a44c44kh50Chy -n120 0 -H720 -V6706 -ce -44t28sw75[33]w69s39o50m78ew80o50fw69t28h50ew80r33e44l28e44v50a44n50tw65d50i28f33f33e44r33e44n50c44e44sw76b50e44t28w72e44e44nwf5 -87e60dwf1 -97a44n50dwf5 -87s60a60mf1 -60.w87R67e44a44dw87t28h50e44s39ew81c44o50m78m78e44n50t28sw76o50n50l28yw87i28fw70y50o50uw87w72i28s39hw87t28on120 0 -H720 -V6826 -cu -50n50d50e44r33s39t28a44n50dw84t28h50ew78d50i28f33f33e44r33e44n50c44e44s39;w62t28h50ew77l28e44s39s39o50nw83i28sw72a44b50o50u50twf5 -61s60a60mf1 -60,w58n50o50twf5 -61s60a60mwf2 -93v44s39.wf5 -83e60df1 -60.w83A72n50o50t28h50e44rw66t28y50p50o50g50r33a44p50h50i28cw77c44o50n50v50e44n50t28i28o50nw83i28sn120 0 -x font 0 CI -f1 -H720 -V6946 -ct -28h50a44tw53o50u50t28p50u50tw53a44p50p50e44a44r33sw64i28nwf5 -75t60h60i60swh120cf -60o60n60t60,wf1 -85w72h50i28l28ew69t28y50p50e44dw75i28n50p50u50tw53a44p50p50e44a44r33sw64a44swx font 0 CI -f0 -64s60l60a60n60t60ywh120ct -60e60x60t60.n120 0 -H720 -f1 -V7102 -h250cN -72o50m78e44n50c44l28a44t28u50r33e44:wf5 -56s60a60mwf1 -88k50e44e44p50sw67aw72c44o50p50yw78o50fw61t28h50ew72t28e44x50tw56i28tw56i28sw67e44d50i28t28i28n50g50.w78T61h50i28sw67c44o50p50yw78i28sw67c44a44l28l28e44dw78awf2 -72f28i28l28ef1 -44.w78T61ow79a44v50o50i28dw79c44o50n50f33uh50Chy -n120 0 -H720 -V7222 -cs -39i28o50n50,w50Iw58h50a44v50ew69c44a44l28l28e44dw75t28h50ew69p50e44r33m78a44n50e44n50tw53s39t28o50r33a44g50ew69o50nw75d50i28s39cw69awf2 -69U72n50i28xw69f28i28l28e44.n120 0 -V7920 -p2 -x font 1 R -x font 2 I -x font 3 B -x font 4 BI -x font 5 CW -x font 6 H -x font 7 HI -x font 8 HB -x font 9 S1 -x font 10 S -s10 -f1 -H720 -V480 -h2077Chy -w33 252w50 h25Chy -wn120 0 -H720 -f3 -V840 -cT -67e44x50tn120 0 -H720 -f1 -V996 -h250cT -61ow98g50e44tw76s39t28a44r33t28e44d50,w74w72ew93n50e44e44dw99s39o50m78ew93t28e44x50tw77t28ow99p50l28a44yw99w72i28t28h50.w99A72n50yw99t28e44x50tw77w72i28l28lw77d50o50;w77t28r33yw99s39o50m78e44t28h50i28n50gw99f33r33o50mwh127cJ -39a44m78e44sn120 0 -H720 -V1116 -cG -72o50s39l28i28n50g50'33sw64E61m78a44c44sw64m78a44n50u50a44l28:n120 0 -H720 -f5 -V1296 -h360c$ -wx font 0 CI -f0 -h120cs -60a60mwh120c- -60dn120 0 -H720 -V1416 -h360ca -n120 0 -H720 -V1536 -h360cT -60h60i60swh120cm -60a60n60u60a60lwh120ci -60swh120co -60r60g60a60n60i60z60e60dwh120ci -60nwh120ca -wh120cr -60a60t60h60e60rwh120ch -60a60p60h60a60z60a60r60dwh120cm -60a60n60n60e60r60.wh180cT -60h60ewh120cf -60i60r60s60tn120 0 -H720 -V1656 -h360cs -60e60v60e60r60a60lwh120cs -60e60c60t60i60o60n60swh120cw -60e60r60ewh120cw -60r60i60t60t60e60nwh120ch -60a60s60t60i60l60ywh120ci -60nwh120ca -60nwh120ca -60t60t60e60m60p60twh120ct -60owh120cp -60r60o60v60i60d60ewh120ca -n120 0 -H720 -V1776 -h360cg -60e60n60e60r60a60lwh120ci -60n60t60r60o60d60u60c60t60i60o60nwh120ct -60owh120ct -60h60ewh120cc -60o60m60m60a60n60d60swh120ci -60nwh120cE -60m60a60c60swh120ca -60n60dwh120ct -60owh120ct -60r60ywh120ct -60owh120cs -60h60o60wn120 0 -H720 -V1896 -h360ct -60h60ewh120cm -60e60t60h60o60dwh120ci -60nwh120ct -60h60ewh120cm -60a60d60n60e60s60swh120ct -60h60a60twh120ci -60swh120ct -60h60ewh120cE -60m60a60c60swh120cc -60o60m60m60a60n60dwh120cs -60t60r60u60c60t60u60r60e60.n120 0 -H720 -V2016 -h360c. -n120 0 -H720 -V2196 -cs -60a60mwh126c- -60dwf1 -91s39t28a44r33t28swf5 -71s60a60mwf1 -92r33u50n50n50i28n50g50.w82T61h50ewf5 -76awf1 -92c44o50m78m78a44n50dw82a44d50d50sw71t28e44x50tw60u50n50t28i28lw60aw76l28i28n50ew76c44o50n50t28a44i28n50i28n50gw82j28u50s39tw60aw76p50e44r33i28o50d50,w57a44n50dw82s39e44t28sw71t28h50en120 0 -H720 -f2 -V2316 -cc -44u50r39r39e44n50tw63t28e44x44twf1 -63(33a44l28s39ow85c44a44l28l28e44dwf2 -85d50o50tf1 -28)w68t28ow85w72h50a44tw63w72a44sw74t28y50p50e44dwh85Cem -wh135ce -44v50e44r33y50t28h50i28n50gw85b50e44t28w72e44e44nw85t28h50ewf5 -79awf1 -94a44n50dw84t28h50ew78p50e44r33i28o50d50.w84[f5 -33e60dwf1 -94w72o50u50l28dn120 0 -H720 -V2436 -cl -28e44a44v50ew69d50o50tw53s39e44tw53t28ow75o50n50l28yw75t28h50ew69l28a44s39tw53l28i28n50e44.25]w83T61h50ewf5 -69pwf1 -85c44o50m78m78a44n50dw75p50r33i28n50t28sw64t28h50ew69c44u50r33r33e44n50tw53t28e44x50t28:n120 0 -H720 -x font 0 CI -f0 -V2616 -h360cp -n120 0 -H720 -f5 -V2736 -h360cT -60h60i60swh120cm -60a60n60u60a60lwh120ci -60swh120co -60r60g60a60n60i60z60e60dwh120ci -60nwh120ca -wh120cr -60a60t60h60e60rwh120ch -60a60p60h60a60z60a60r60dwh120cm -60a60n60n60e60r60.wh180cT -60h60ewh120cf -60i60r60s60tn120 0 -H720 -V2856 -h360cs -60e60v60e60r60a60lwh120cs -60e60c60t60i60o60n60swh120cw -60e60r60ewh120cw -60r60i60t60t60e60nwh120ch -60a60s60t60i60l60ywh120ci -60nwh120ca -60nwh120ca -60t60t60e60m60p60twh120ct -60owh120cp -60r60o60v60i60d60ewh120ca -n120 0 -H720 -V2976 -h360cg -60e60n60e60r60a60lwh120ci -60n60t60r60o60d60u60c60t60i60o60nwh120ct -60owh120ct -60h60ewh120cc -60o60m60m60a60n60d60swh120ci -60nwh120cE -60m60a60c60swh120ca -60n60dwh120ct -60owh120ct -60r60ywh120ct -60owh120cs -60h60o60wn120 0 -H720 -V3096 -h360ct -60h60ewh120cm -60e60t60h60o60dwh120ci -60nwh120ct -60h60ewh120cm -60a60d60n60e60s60swh120ct -60h60a60twh120ci -60swh120ct -60h60ewh120cE -60m60a60c60swh120cc -60o60m60m60a60n60dwh120cs -60t60r60u60c60t60u60r60e60.n120 0 -H720 -f1 -V3276 -c[ -33A72g50a44i28n50,wf5 -55e60dwf1 -90w72o50u50l28dw80p50r33i28n50tw58o50n50l28yw80t28h50ew74l28a44s39tw58l28i28n50e44.25]w88T61h50ewf5 -75awf1 -91c44o50m78m78a44n50dw81a44d50d50sw70i28t28sw70t28e44x50twf2 -59a50f28t28e44rwf1 -70d50o50t28;w59t28h50ewf5 -75iwf1 -91c44o50m78m78a44n50dw81i28sw70l28i28k50en120 0 -H720 -f5 -V3396 -ca -60,wf1 -85b50u50tw53a44d50d50sw64t28h50ew69t28e44x50twf2 -53b50e44f28o50r39ewf1 -69d50o50t28.n120 0 -H720 -x font 0 CI -f0 -V3576 -h360ci -n120 0 -H720 -V3696 -h360cI -60n60t60r60o60d60u60c60t60i60o60nn120 0 -H720 -V3816 -h360c. -n120 0 -H720 -V3936 -h360cp -n120 0 -H720 -f5 -V4056 -h360cI -60n60t60r60o60d60u60c60t60i60o60nn120 0 -H720 -f1 -V4236 -cT -61h50e44r33ew69i28sw64a44l28s39ow75awf5 -69cwf1 -85c44o50m78m78a44n50dw75t28h50a44tw53c44h50a44n50g50e44sw64(33r33e44p50l28a44c44e44s39)w58t28h50ew69c44u50r33r33e44n50tw53t28e44x50t28,w50a44n50dwf5 -75dwf1 -85t28h50a44tw53d50e44l28e44t28e44sw65i28t28;w54t28h50e44s39ew70a44r33ew70i28l28l28u50s39t28r33a44t28e44dn120 0 -H720 -V4356 -cb -50e44l28o50w72.n120 0 -H720 -V4512 -h250cT -61ow76s39e44ew70a44l28lw54t28h50ew70t28e44x50t28,w51w72ew70c44a44nw76s39p50e44c44i28f33yw76w72h50a44tw54t28e44x50tw54t28ow77p50r33i28n50t28;w55f33o50rw60t28h50ew71m78o50m78e44n50t28,w52s39u50f33f33i28c44ew71i28tw55t28ow77s39a44yw77t28h50a44twx font 0 CI -f0 -55060,60$wf1 -87s39p50e44c44ih28Chy -n120 0 -H720 -V4632 -cf -33i28e44sw64t28h50ew69e44n50t28i28r33ew69f33i28l28e44.w75[f5 -33e60dwf1 -85u50s39e44r33sw64w72o50u50l28dw75p50r33o50b50a44b50l28yw75t28y50p50ewx font 0 CI -f0 -69160,60$f1 -60,w50w72h50i28c44hw75i28nw75p50r33a44c44t28i28c44ew69i28sw64t28h50ew69s39a44m78ew69t28h50i28n50g50,w50b50u50tw53s39e44ew69b50e44l28o50w72.25]n120 0 -H720 -x font 0 CI -f0 -V4812 -h360c0 -60,60$60pn120 0 -H720 -f5 -V4932 -h360cI -60n60t60r60o60d60u60c60t60i60o60nn120 0 -H720 -V5052 -h360cT -60h60i60swh120cm -60a60n60u60a60lwh120ci -60swh120co -60r60g60a60n60i60z60e60dwh120ci -60nwh120ca -wh120cr -60a60t60h60e60rwh120ch -60a60p60h60a60z60a60r60dwh120cm -60a60n60n60e60r60.wh180cT -60h60ewh120cf -60i60r60s60tn120 0 -H720 -V5172 -h360cs -60e60v60e60r60a60lwh120cs -60e60c60t60i60o60n60swh120cw -60e60r60ewh120cw -60r60i60t60t60e60nwh120ch -60a60s60t60i60l60ywh120ci -60nwh120ca -60nwh120ca -60t60t60e60m60p60twh120ct -60owh120cp -60r60o60v60i60d60ewh120ca -n120 0 -H720 -V5292 -h360cg -60e60n60e60r60a60lwh120ci -60n60t60r60o60d60u60c60t60i60o60nwh120ct -60owh120ct -60h60ewh120cc -60o60m60m60a60n60d60swh120ci -60nwh120cE -60m60a60c60swh120ca -60n60dwh120ct -60owh120ct -60r60ywh120ct -60owh120cs -60h60o60wn120 0 -H720 -V5412 -h360ct -60h60ewh120cm -60e60t60h60o60dwh120ci -60nwh120ct -60h60ewh120cm -60a60d60n60e60s60swh120ct -60h60a60twh120ci -60swh120ct -60h60ewh120cE -60m60a60c60swh120cc -60o60m60m60a60n60dwh120cs -60t60r60u60c60t60u60r60e60.n120 0 -H720 -f1 -V5592 -cE -61x50c44e44p50tw67f33o50rw72t28h50ewf5 -83wwf1 -99c44o50m78m78a44n50dw89d50e44s39c44r33i28b50e44dw89b50e44l28o50w72,wf2 -64a50l28lwf1 -67c44o50m78m78a44n50d50s39,w64i28n50c44l28u50d50i28n50gwf5 -89pf1 -60,w64s39e44tw67d50o50tw67t28ow89t28h50ew83t28e44x50tw68t28h50e44yw90t28o50u50c44h50.n120 0 -H720 -V5712 -cT -61h50u50s39,wf5 -54awf1 -89a44n50dwf5 -79iwf1 -89s39e44tw57d50o50tw57t28ow79t28h50ew73n50e44wwh101ct -28e44x50t28,wf5 -54pwf1 -89t28ow79t28h50ew73t28e44x50tw57p50r33i28n50t28e44d50,w54a44n50dw79s39ow79o50n50.w78S56i28m78i28l28a44r33l28y50,w53a44l28lw56c44o50m78m78a44n50d50sw67(33e44x50c44e44p50twf5 -56wf1 -60)n120 0 -H720 -V5832 -cb -50yw88d50e44f33a44u50l28tw66o50p50e44r33a44t28ew82o50nw88t28h50ew82c44u50r33r33e44n50tw66t28e44x50tw66[33u50n50l28i28k50ewf5 -83e60df1 -60,w64f33o50rw72w72h50i28c44hw89s39o50m78ew83c44o50m78m78a44n50d50sw78(33s39u50c44hw89a44swf5 -78gf1 -60)w72d50e44f33a44u50l28tw67t28ow89t28h50en120 0 -H720 -V5952 -ce -44n50t28i28r33ew69f33i28l28e44]33.n120 0 -H720 -V6108 -h250cT -61h50i28n50g50sw89a44r33ew94n50o50tw78g50o50i28n50gwh100ct -28owh100cg -50e44tw78v50e44r33ywh100ci -28n50t28e44r33e44s39t28i28n50gwh100cu -50n50t28i28lw78w72ew94c44a44nwh100cs -39e44tw78d50o50tw78a44r33b50i28t28r33a44r33i28l28y50.wh100cT -61h50i28sw89i28sw89d50o50n50ew95b50yn120 0 -H720 -f2 -V6228 -ca -50d50d50r39e44s39s39e44sf1 -39,w50w72h50i28c44hw75s39p50e44c44i28f33yw75aw69p50i28e44c44ew69o50fw58t28h50ew69f33i28l28e44.w75T61h50ew69a44d50d50r33e44s39swf5 -641f1 -60,w50f33o50rw58e44x50a44m78p50l28e44,w50s39e44t28sw64d50o50tw53t28ow75t28h50ew69f33i28r33s39tw53l28i28n50ew69o50fw58t28h50ew69f33i28l28e44.n120 0 -H720 -x font 0 CI -f0 -V6408 -h360c1 -60pn120 0 -H720 -f5 -V6528 -h360cI -60n60t60r60o60d60u60c60t60i60o60nn120 0 -H720 -x font 0 CI -f0 -V6648 -h360cc -n120 0 -H720 -V6768 -h360cP -60r60e60a60m60b60l60en120 0 -H720 -V6888 -h360c. -n120 0 -H720 -f1 -V7068 -cT -61h50ewf5 -76cwf1 -92c44o50m78m78a44n50dw82d50i28d50n50'33tw60n50e44e44dw82t28ow82s39p50e44c44i28f33yw82d50o50t28;w60t28h50ewf5 -76pwf1 -92l28e44f33tw60i28tw60o50nw82l28i28n50ew76o50n50e44.w83I33t28'33sw72t28h50e44r33e44f33o50r33ew77e44a44s39yw83t28ow83d50e44l28e44t28ew77t28h50ew77f33i28r33s39tn120 0 -H720 -V7188 -cl -28i28n50ew69u50t28t28e44r33l28y50;w53t28h50ew69l28a44s39tw53c44o50m78m78a44n50dw75l28e44f33tw53d50o50tw53s39e44tw53t28ow75l28i28n50ew69o50n50e44:n120 0 -V7920 -p3 -x font 1 R -x font 2 I -x font 3 B -x font 4 BI -x font 5 CW -x font 6 H -x font 7 HI -x font 8 HB -x font 9 S1 -x font 10 S -s10 -f1 -H720 -V480 -h2077Chy -w33 253w50 h25Chy -wn120 0 -H720 -x font 0 CI -f0 -V900 -h360cd -n120 0 -H720 -V1020 -h360c1 -60pn120 0 -H720 -f5 -V1140 -h360cT -60h60i60swh120cm -60a60n60u60a60lwh120ci -60swh120co -60r60g60a60n60i60z60e60dwh120ci -60nwh120ca -wh120cr -60a60t60h60e60rwh120ch -60a60p60h60a60z60a60r60dwh120cm -60a60n60n60e60r60.wh180cT -60h60ewh120cf -60i60r60s60tn120 0 -H720 -f1 -V1320 -c( -33L61i28n50ew69n50u50m78b50e44r33sw64c44h50a44n50g50ew69t28ow75r33e44f33l28e44c44tw53c44h50a44n50g50e44sw64t28ow75t28h50ew69f33i28l28e44.25)n120 0 -H720 -V1476 -h250cT -61h50ew75a44d50d50r33e44s39swf5 -70/f2 -60t28e44x44tf5 -28/wf1 -91s39e44t28sw70d50o50tw59t28ow81t28h50ew75f33i28r33s39tw59a44p50p50e44a44r33a44n50c44ew75o50fwf2 -64t28e44x44tf1 -28,w56a44f33t28e44rw64d50o50t28.w82[f5 -33e60dwf1 -92m78a44t28c44h50e44sw71t28h50ew76f33i28r33s39tw60l28i28n50ew76c44o50nh50Chy -n120 0 -H720 -V1596 -ct -28a44i28n50i28n50gwf2 -75t28e44x44tf1 -28.25]w83I33fwf2 -58t28e44x44twf1 -53i28sw64n50o50tw53f33o50u50n50d50,w50t28h50ew69s39e44a44r33c44hw75r33e44s39t28a44r33t28sw64a44tw53t28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58t28h50ew69f33i28l28ew69a44n50dw75c44o50n50t28i28n50u50e44sw64u50n50t28i28lw53d50o50t28.n120 0 -H720 -x font 0 CI -f0 -V1776 -h360c/ -60E60m60a60c60s60/60pn120 0 -H720 -f5 -V1896 -h360cE -60m60a60c60sn120 0 -H720 -f1 -V2076 -cI -33t28'33sw65d50i28f33f33i28c44u50l28tw54t28ow76i28n50d50i28c44a44t28ew71t28y50p50o50g50r33a44p50h50i28c44a44l28l28y50,w52b50u50tw55i28nw77t28h50i28sw66e44x50a44m78p50l28ew71n50ow77n50e44w72l28i28n50ew71a44p50p50e44a44r33sw66a44f33t28e44rwf5 -60E60m60a60c60sf1 -60:w55t28h50ew71t28e44x50tw55t28ow77b50en120 0 -H720 -V2196 -cp -50r33i28n50t28e44dw84i28sw73t28h50ew78s39t28r33i28n50gw84`f5 -33E60m60a60c60sf1 -60'33,w59e44x50a44c44t28l28y50.w84(33T61h50ew78f33i28n50a44lwf5 -62pwf1 -94m78a44yw84b50ew78l28e44f33tw62o50f33fwh67Cem -wh134ci -28tw61i28sw72t28h50ew77d50e44f33a44u50l28tw61c44o50m78m78a44n50d50.w83W94h50e44nn120 0 -H720 -V2316 -cd -50o50w72n50l28o50a44d50e44d50,w51h50o50w72e44v50e44r33,w51t28h50ew70d50e44f33a44u50l28tw54i28sw65i28n50s39t28e44a44dw76t28ow76s39e44l28e44c44tw54t28h50ew70t28e44x50t28,w51t28ow76h50i28g50h50l28i28g50h50tw54i28t28,w51a44n50dw76t28ow76m78a44k50ew70i28tw54v50i28s39i28b50l28ew70b50yw77m78o50vh50Chy -n120 0 -H720 -V2436 -ci -28n50gw84t28h50ew78w72i28n50d50o50wwh106co -50nw84t28h50ew78f33i28l28ew78i28fw67n50e44c44e44s39s39a44r33y50.w84T61h50u50s39,wf5 -59/60E60m60a60c60s60/wf1 -94i28n50d50i28c44a44t28e44sw72o50nw83t28h50ew77d50i28s39p50l28a44yw83t28h50ew77n50e44x50tw61o50c44c44u50r33r33e44n50c44ew77o50fn120 0 -H720 -V2556 -ct -28h50ew69t28e44x50t28.25)n120 0 -H720 -V2712 -h250cI -33m78a44g50i28n50ew71w72ew71w72a44n50t28e44dw78t28ow78c44h50a44n50g50ew72t28h50ew72w72o50r33dwf5 -78h60a60p60h60a60z60a60r60dwf1 -88t28owf5 -78t60h60o60u60g60h60t60l60e60s60sf1 -60.w78O72b50v50i28o50u50s39l28y50,w53w72h50a44t28'33sw67n50e44e44d50e44dn120 0 -H720 -V2832 -ci -28sw68a44n50o50t28h50e44rwf5 -62cwf1 -89c44o50m78m78a44n50d50,w53b50u50tw56t28h50ew72m78e44t28h50o50dw78u50s39e44dw78s39ow78f33a44rw61t28ow78i28n50s39e44r33tw56t28e44x50tw56i28n50c44l28u50d50e44sw67aw72n50e44w72l28i28n50e44.w78T61h50ew72s39y50n50t28a44xw78f33o50rw61i28n50c44l28u50dh50Chy -n120 0 -H720 -V2952 -ci -28n50gw89t28e44x50tw67w72i28t28h50o50u50tw67n50e44w72l28i28n50e44sw78i28sw78t28ow89s39u50r33r33o50u50n50dw89t28h50ew83t28e44x50tw67w72i28t28hw89s39l28a44s39h50e44sw78(33w72h50i28c44hw89i28sw78t28h50ew83s39a44m78ew83a44sw79t28h50ew84s39y50n50t28a44xw90f33o50rw73t28e44x50tn120 0 -H720 -V3072 -cs -39e44a44r33c44h50e44s39,w53b50u50tw55w72h50a44tw55i28sw66g50o50i28n50gw77o50nw77s39h50o50u50l28dw77b50ew71c44l28e44a44rw60f33r33o50mwh105cc -44o50n50t28e44x50t28)33.w77T61h50ew71t28e44x50tw55m78u50s39tw55a44p50p50e44a44rw60i28m78m78e44d50i28a44t28e44l28yw77a44f33t28e44rw60t28h50ewf5 -71cn120 0 -H720 -f1 -V3192 -c( -33o50rwf5 -58awf1 -85o50rwf5 -58if1 -60)33.w75G72i28v50e44nw75t28h50i28s39,w50i28tw53i28sw64e44a44s39yw75t28ow75m78a44k50ew69t28h50ew69r33e44q50u50i28r33e44dw75c44h50a44n50g50e44:n120 0 -H720 -x font 0 CI -f0 -V3372 -h360c/ -60h60a60p60h60a60z60a60r60d60/60c60/60t60h60o60u60g60h60t60l60e60s60s60/n120 0 -H720 -V3492 -h360c1 -60pn120 0 -H720 -f5 -V3612 -h360cT -60h60i60swh120cm -60a60n60u60a60lwh120ci -60swh120co -60r60g60a60n60i60z60e60dwh120ci -60nwh120ca -wh120cr -60a60t60h60e60rwh120ct -60h60o60u60g60h60t60l60e60s60swh120cm -60a60n60n60e60r60.wh180cT -60h60ewh120cf -60i60r60s60tn120 0 -H720 -f1 -V3792 -c[ -33C67h50a44n50g50e44sw70c44a44nw81a44l28w72a44y50sw70b50ew75d50o50n50ew76w72i28t28hw82awf5 -76cwf1 -92c44o50m78m78a44n50d50,w57e44v50e44nw82i28fw65t28h50ew76t28e44x50tw60i28sw71s39m78a44l28l28e44rw65t28h50a44nw82aw76l28i28n50e44]33.w82Y72o50u50'33l28lw60f33i28n50dw82t28h50a44tn120 0 -H720 -V3912 -ct -28h50i28sw74w72a44yw85o50fw68p50r33o50v50i28d50i28n50gw85t28e44x50tw63t28ow85c44o50m78m78a44n50d50sw74i28sw74m78u50c44hw85m78o50r33ew79c44o50m78m78o50nw84t28h50a44nw84i28sw73t28h50ew78m78u50l28t28i28p50l28e44-33l28i28n50e44sw73s39y50n50t28a44x50.w84I33fw67y50o50un120 0 -H720 -V4032 -cw -72a44n50tw62t28ow84i28n50c44l28u50d50ew78aw78s39l28a44s39hwf5 -84/wf1 -94i28nw84t28h50ew78t28e44x50t28,w60j28u50s39tw63p50r33e44c44e44d50ew79i28tw63w72i28t28hw85aw79b50a44c44k50s39l28a44s39hwf5 -85\f1 -60,w60a44n50dw85u50s39ew79aw79b50a44c44k50s39l28a44s39hw85t28ow85p50r33o50t28e44c44tw63an120 0 -H720 -V4152 -cb -50a44c44k50s39l28a44s39hw75i28t28s39e44l28f33.n120 0 -H720 -x font 0 CI -f0 -V4332 -h360c/ -60E60m60a60c60s60/60c60/60E60m60a60c60s60\60\60360660060/n120 0 -H720 -V4452 -h360c4 -60pn120 0 -H720 -f5 -V4572 -h360cg -60e60n60e60r60a60lwh120ci -60n60t60r60o60d60u60c60t60i60o60nwh120ct -60owh120ct -60h60ewh120cc -60o60m60m60a60n60d60swh120ci -60nwh120cE -60m60a60c60s60\603606600wh120ca -60n60dwh120ct -60owh120ct -60r60ywh120ct -60owh120cs -60h60o60wn120 0 -H720 -f1 -V4752 -cW -94ew69c44o50u50l28dw75a44l28s39ow75m78a44k50ew69t28h50i28sw64p50a44r33t28i28c44u50l28a44rw58c44h50a44n50g50ew69b50yn120 0 -H720 -x font 0 CI -f0 -V4932 -h360c/ -60E60m60a60c60s60/60a60/60\60\60360660060/n120 0 -H720 -f1 -V5148 -h250cT -61h50i28sw67i28sw67a44sw67g50o50o50dw78aw72p50l28a44c44ew72a44sw67a44n50yw78t28ow78i28n50t28r33o50d50u50c44ew72t28h50ewf5 -73uwf1 -89c44o50m78m78a44n50d50,w54w72h50i28c44hw79u50n50d50o50e44sw68t28h50ew73l28a44s39tw57c44o50m78m78a44n50d50.w79Awh101cs -39e44ch44Chy -n120 0 -H720 -V5268 -co -50n50dwf5 -75uwf1 -85w72i28l28lw53u50n50d50ow75t28h50ew69p50e44n50u50l28t28i28m78a44t28ew69c44o50m78m78a44n50d50,w50a44n50dw75s39ow75o50n50.n120 0 -H720 -x font 0 CI -f0 -V5448 -h360cu -n120 0 -H720 -V5568 -h360c4 -60pn120 0 -H720 -f5 -V5688 -h360cg -60e60n60e60r60a60lwh120ci -60n60t60r60o60d60u60c60t60i60o60nwh120ct -60owh120ct -60h60ewh120cc -60o60m60m60a60n60d60swh120ci -60nwh120cE -60m60a60c60swh120ca -60n60dwh120ct -60owh120ct -60r60ywh120ct -60owh120cs -60h60o60wn120 0 -H720 -x font 0 CI -f0 -V5808 -h360cu -n120 0 -H720 -V5928 -h360c3 -60pn120 0 -H720 -f5 -V6048 -h360cT -60h60i60swh120cm -60a60n60u60a60lwh120ci -60swh120co -60r60g60a60n60i60z60e60dwh120ci -60nwh120ca -wh120cr -60a60t60h60e60rwh120ch -60a60p60h60a60z60a60r60dwh120cm -60a60n60n60e60r60.wh180cT -60h60ewh120cf -60i60r60s60tn120 0 -H720 -f1 -V6228 -cU -72n50d50o50i28n50gw75c44a44nw75o50n50l28yw75b50a44c44kw75u50p50;w53t28h50e44r33ew69i28sw64n50ow75w72a44yw75t28ow75u50n50d50ow75aw69p50r33e44v50i28o50u50swf5 -64uf1 -60.n120 0 -H720 -f3 -V6468 -cA -72d56d56r44e44s39s39e44sn120 0 -H720 -f1 -V6624 -h250cW -94e44'33v50ew76s39e44e44nw83t28h50ew77s39i28m78p50l28e44s39tw61f33o50r33m78sw72o50fw66a44d50d50r33e44s39s39e44s39,w58b50u50tw61t28h50e44r33ew77i28sw72m78o50r33ew77t28ow83l28e44a44r33nw83b50e44f33o50r33ew77w72ew77c44a44nw83g50e44tw61t28o50ow83m78u50c44hn120 0 -H720 -V6744 -cf -33u50r33t28h50e44r33.w84A72nw84a44d50d50r33e44s39sw73s39e44l28e44c44t28sw73aw78r33e44g50i28o50nw84i28nw83t28h50ew77f33i28l28ewh77Cem -wh133ca -w77s39u50b50s39t28r33i28n50gwh83Cem -wh133ca -44n50dw83t28h50e44r33e44f33o50r33ew77m78u50s39tw61d50e44f33i28n50ew77t28h50ew77b50e44g50i28n50n50i28n50gn120 0 -H720 -V6864 -ca -44n50dw79t28h50ew73e44n50dw79o50fw62aw73r33e44g50i28o50n50.w79T61h50u50s39,w54t28h50ew73a44d50d50r33e44s39swf5 -681603wf1 -89s39e44l28e44c44t28sw68f33r33o50mwh107ct -28h50ew73b50e44g50i28n50n50i28n50gw79o50fw62l28i28n50ew74t28h50i28r33t28e44e44nw80t28ow80t28h50ew74e44n50dw80o50fw63l28i28n50en120 0 -H720 -V6984 -ct -28h50i28r33t28e44e44n50,w50a44n50dwf5 -75/60E60m60a60c60s60/wf1 -85s39e44l28e44c44t28sw64f33r33o50mwh103ct -28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58t28h50ew69w72o50r33dw75`f5 -33E60m60a60c60sf1 -60'w58t28ow75t28h50ew69e44n50d50.n120 0 -H720 -V7140 -h250cA -72d50d50r33e44s39s39e44sw64m78a44yw75b50ew69c44o50m78b50i28n50e44dw75w72i28t28hw75aw69c44o50m78m78a44:n120 0 -V7920 -p4 -x font 1 R -x font 2 I -x font 3 B -x font 4 BI -x font 5 CW -x font 6 H -x font 7 HI -x font 8 HB -x font 9 S1 -x font 10 S -s10 -f1 -H720 -V480 -h2077Chy -w33 254w50 h25Chy -wn120 0 -H720 -f5 -V900 -h360c1 -60360,601605n120 0 -H720 -f1 -V1080 -cs -39e44l28e44c44t28sw68l28i28n50e44sw68t28h50i28r33t28e44e44nw79t28h50r33o50u50g50hw79f33i28f33t28e44e44n50.w80T61h50ew74d50e44f33i28n50i28t28i28o50nw80o50fw63t28h50ew74c44o50m78m78aw74o50p50e44r33a44t28o50rw63i28sw69t28ow80s39e44l28e44c44tw58f33r33o50mwh108ct -28h50ew74b50e44g50i28n50n50i28n50gn120 0 -H720 -V1200 -co -50fw58t28h50ew69l28e44f33tw53h50a44n50dw75a44d50d50r33e44s39sw64(33t28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58l28i28n50ew69150350)w58t28ow75t28h50ew69e44n50dw75o50fw58t28h50ew69r33i28g50h50tw53h50a44n50dw75a44d50d50r33e44s39sw64(33t28h50ew69e44n50dw75o50fw58l28i28n50ew69150550)33.n120 0 -H720 -V1356 -h250cA -wh104cf -33e44wwh104cs -39p50e44c44i28a44lw60s39i28m78p50l28ew76a44d50d50r33e44s39s39e44sw71c44o50m78ew76i28nw82h50a44n50d50y50:wf5 -60.wf1 -93(33aw77p50e44r33i28o50d50)w66r33e44p50r33e44s39e44n50t28sw72d50o50t28,w58t28h50ew77c44u50r33r33e44n50tw61t28e44x50t28,wf5 -580wf1 -93(33l28i28n50en120 0 -H720 -V1476 -cz -44e44r33o50)w67s39e44l28e44c44t28sw73t28h50ew78n50u50l28lw62s39t28r33i28n50gw84a44tw62t28h50ew78b50e44g50i28n50n50i28n50gw84o50fw67t28h50ew77f33i28l28e44,w58a44n50dwf5 -83$wf1 -93s39e44l28e44c44t28sw72t28h50ew77n50u50l28lw61s39t28r33i28n50gw83a44tw61t28h50ew77e44n50dw83o50fw66t28h50ew77f33i28l28en120 0 -H720 -V1596 -c[ -33n50o50tw53t28h50ew69l28a44s39tw53l28i28n50ew69o50fw58t28h50ew69f33i28l28e44]33.w75T61h50e44r33e44f33o50r33e44,n120 0 -H720 -f5 -V1776 -h360c0 -60,601603n120 0 -H720 -f1 -V1956 -cs -39e44l28e44c44t28sw64f33r33o50mwh103ct -28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58t28h50ew69f33i28l28ew69t28ow75t28h50ew69e44n50dw75o50fw58l28i28n50ew69t28h50i28r33t28e44e44n50,n120 0 -H720 -f5 -V2136 -h360c. -60,60$n120 0 -H720 -f1 -V2316 -cs -39e44l28e44c44t28sw64f33r33o50mwh103ct -28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58t28h50ew69c44u50r33r33e44n50tw53t28e44x50tw53t28ow75t28h50ew69e44n50dw75o50fw58t28h50ew69f33i28l28e44,w50a44n50dn120 0 -H720 -f5 -V2496 -h360c0 -60,60$n120 0 -H720 -f1 -V2676 -cs -39e44l28e44c44t28sw64t28h50ew69w72h50o50l28ew69f33i28l28ew69[33t28h50a44tw53i28s39,w50aw69s39i28n50g50l28ew69s39t28r33i28n50gw75c44o50n50t28a44i28n50i28n50gw75t28h50ew69w72h50o50l28ew69f33i28l28e44,w50n50o50tw53aw69l28i28s39tw53o50fw58a44l28lw53t28h50ew69l28i28n50e44sw64i28nw75t28h50ew69f33i28l28e44]33.n120 0 -H720 -V2832 -h250cT -61h50e44s39ew88a44r33ew88a44l28lwf2 -72a50b50s39o50l28u50t28ewf1 -88a44d50d50r33e44s39s39e44s39:w72t28h50e44yw94r33e44f33e44rw77t28ow94s39p50e44c44i28f33i28cw88p50l28a44c44e44sw83i28nw95t28h50ew89f33i28l28e44.wf5 -95s60a60mwf1 -h105ca -44l28s39ow95h50a44sw84r33e44l28a44t28i28v50en120 0 -H720 -V2952 -ca -44d50d50r33e44s39s39e44s39,w57w72h50i28c44hw82d50e44p50e44n50dw82o50nw82t28h50ew76v50a44l28u50ew76o50fw65d50o50t28,w57a44n50dw82i28nw82f33a44c44tw60w72ew76h50a44v50ew76a44l28r33e44a44d50yw82s39e44e44nw82o50n50ew76f33o50r33m78:wf5 -60/60E60m60a60c60s60/wf1 -92f33i28n50d50sn120 0 -H720 -V3072 -ct -28h50ew73f33i28r33s39tw57o50c44c44u50r33r33e44n50c44ew73o50fwf5 -62E60m60a60c60swf1 -89s39e44a44r33c44h50i28n50gw79f33o50r33w72a44r33d50sw68f33r33o50mwh107cd -50o50t28.w80W94h50i28c44hw80o50c44c44u50r33r33e44n50c44ew74o50fwf5 -63E60m60a60c60swf1 -90i28tw58f33i28n50d50sw69d50e44p50e44n50d50sn120 0 -H720 -V3192 -co -50nw79t28h50ew73v50a44l28u50ew73o50fw62d50o50t28.w79W94h50a44tw57i28fw62y50o50uw79w72a44n50t28e44dw79t28h50ew73f33i28r33s39tw57o50c44c44u50r33r33e44n50c44ewf5 -73b60e60f60o60r60ewf1 -88d50o50t28?w97J39u50s39tw56p50r33e44c44e44d50ew72t28h50ew72p50a44t28t28e44r33nw78w72i28t28hw78an120 0 -H720 -V3312 -cm -78i28n50u50sw64s39i28g50n50,w50w72h50i28c44hw75r33e44v50e44r33s39e44sw64t28h50ew69d50i28r33e44c44t28i28o50nw75o50fw58t28h50ew69s39e44a44r33c44h50:n120 0 -H720 -f5 -V3492 -h360c- -60/60E60m60a60c60s60/n120 0 -H720 -f1 -V3672 -cI -33nw75f33a44c44t28,w50t28h50ew69c44o50m78p50l28e44t28ew69s39y50n50t28a44xw75f33o50rw58f33o50r33w72a44r33dw75s39e44a44r33c44h50i28n50gw75i28sn120 0 -H720 -f5 -V3852 -h360c+ -60/60E60m60a60c60s60/n120 0 -H720 -f1 -V4032 -cb -50u50tw53t28h50ew69p50l28u50sw64s39i28g50nw75i28sw64t28h50ew69d50e44f33a44u50l28t28,w50a44n50dw75i28nw75p50r33a44c44t28i28c44ew69i28sw64r33a44r33e44l28yw75u50s39e44d50.w75H72e44r33ew69i28sw64a44nw75e44x50a44m78p50l28ew69t28h50a44tw53i28n50c44l28u50d50e44sw64i28tw53f33o50rw58c44l28a44r33i28t28y50:n120 0 -H720 -f5 -V4212 -h360c0 -60+60/60E60m60a60c60s60/n120 0 -H720 -f1 -V4392 -cs -39e44l28e44c44t28sw65t28h50ew70f33i28r33s39tw54o50c44c44u50r33r33e44n50c44ew70o50fwf5 -59E60m60a60c60swf1 -86i28nw76t28h50ew70f33i28l28e44;w54r33e44a44dw76i28tw54a44sw65`33`33g50ow76t28ow76l28i28n50ew70050,w52t28h50e44nw77s39e44a44r33c44hw77f33o50r33w72a44r33d50sw66f33o50rwf5 -60E60m60a60c60sf1 -60.25'33'n120 0 -H720 -V4512 -cS -56i28n50c44ew69t28h50ewf5 -69+wf1 -85i28sw64o50p50t28i28o50n50a44l28,w50t28h50i28sw64c44a44nw75b50ew69w72r33i28t28t28e44nwf5 -75060/60E60m60a60c60s60/f1 -60.w75S56i28m78i28l28a44r33l28y50,n120 0 -H720 -f5 -V4692 -h360c$ -60-60/60E60m60a60c60s60/n120 0 -H720 -f1 -V4872 -cf -33i28n50d50sw64t28h50ew69l28a44s39tw53o50c44c44u50r33r33e44n50c44ew69i28nw75t28h50ew69f33i28l28e44,w50s39on120 0 -H720 -f5 -V5052 -h360c0 -60/60E60m60a60c60s60/60,60$60-60/60E60m60a60c60s60/n120 0 -H720 -f1 -V5232 -cs -39e44l28e44c44t28sw64t28h50ew69t28e44x50tw53f33r33o50mwh103ct -28h50ew69f33i28r33s39tw53t28ow75l28a44s39twf5 -53E60m60a60c60sf1 -60,w50i28n50c44l28u50s39i28v50e44.w75S56l28i28g50h50t28l28yw75m78o50r33ew69i28n50t28e44r33e44s39t28i28n50g50:n120 0 -H720 -f5 -V5412 -h360c/ -60E60m60a60c60s60/60+60/60E60m60a60c60s60/n120 0 -H720 -f1 -V5592 -c( -33t28h50e44r33ew69i28sw64a44nw75i28m78p50l28i28c44i28twf5 -53.60+wf1 -85a44tw53t28h50ew69b50e44g50i28n50n50i28n50g50)w58s39e44l28e44c44t28sw64t28h50ew69s39e44c44o50n50dwf5 -75E60m60a60c60swf1 -85f33o50l28l28o50w72i28n50gw75d50o50t28.n120 0 -H720 -V5748 -h250cL -61i28n50ew69n50u50m78b50e44r33sw64m78a44yw75a44l28s39ow75b50ew69r33e44l28a44t28i28v50e44.n120 0 -H720 -f5 -V5928 -h360c- -602n120 0 -H720 -f1 -V6108 -cs -39e44l28e44c44t28sw64t28h50ew69s39e44c44o50n50dw75p50r33e44v50i28o50u50sw64l28i28n50e44,w50a44n50dn120 0 -H720 -f5 -V6288 -h360c+ -605n120 0 -H720 -f1 -V6468 -cs -39e44l28e44c44t28sw64t28h50ew69f33i28f33t28hw75f33o50l28l28o50w72i28n50gw75l28i28n50ew69(33h50e44r33ew69t28h50ew69p50l28u50sw64s39i28g50nw75i28sw64o50b50l28i28g50a44t28o50r33y50)33.n120 0 -H720 -V6624 -h250cS -56i28n50c44ew75a44d50d50r33e44s39s39e44sw70m78a44yw81s39e44l28e44c44tw59(33a44n50dw81d50o50tw59m78a44yw81b50e44)w65m78o50r33ew76t28h50a44nw82o50n50ew76l28i28n50e44,w57w72ew76n50e44e44dw82aw76d50e44f33i28n50i28t28i28o50nw82o50fw65`33p50r33e44v50i28o50u50s39'n120 0 -H720 -V6744 -ca -44n50dw80`33f33o50l28l28o50w72i28n50g50:28'w63`33p50r33e44v50i28o50u50s39'w63m78e44a44n50swf2 -69b50e44f28o50r39ew74t28h50ew74b50e44g50i28n50n50i28n50gwf1 -79o50fw62d50o50t28,w54a44n50dw79`33f33o50l28l28o50w72i28n50g50'w62m78e44a44n50swf2 -68a50f28t28e44rw68t28h50ew73e44n50dwf1 -79o50fw62d50o50t28.n120 0 -H720 -V6864 -cF -56o50rw63e44x50a44m78p50l28e44,w55i28fw63t28h50ew74f33i28l28ew75c44o50n50t28a44i28n50swf5 -70Ax font 0 CI -f0 -60A60Af5 -60Af1 -60,w56w72i28t28hw81d50o50tw59s39e44tw59t28ow81t28h50ew75m78i28d50d50l28ew75t28w72owf5 -81Af1 -60'33sw70(33t28h50ew75s39l28a44n50t28i28n50gw81c44h50a44r33a44c44t28e44r33s39)33,wf5 -56-60/60A60/n120 0 -H720 -f1 -V6984 -cs -39e44t28sw69d50o50tw58t28ow80t28h50ew74f33i28r33s39twf5 -58Af1 -60,w55a44n50dwf5 -80+60/60A60/wf1 -90s39e44t28sw69d50o50tw58t28ow80t28h50ew74l28a44s39twf5 -58Af1 -60.w80E61x50c44e44p50tw58u50n50d50e44rw63o50d50dw80c44i28r33c44u50m78s39t28a44n50c44e44sw69(33s39u50c44hw80a44sw69w72h50e44nw79t28h50en120 0 -H720 -V7104 -co -50n50l28yw90o50c44c44u50r33r33e44n50c44ew84o50fw73t28h50ew84t28e44x50tw68i28nw90t28h50ew84f33i28l28ew84i28sw79a44l28r33e44a44d50yw90t28h50ew84c44u50r33r33e44n50tw68t28e44x50t28)33,w65t28h50ew84t28e44x50tw68s39e44l28e44c44t28e44dw91b50yw91aw85s39e44a44r33c44hw91w72i28l28lw69b50en120 0 -H720 -V7224 -cd -50i28s39j28o50i28n50tw53f33r33o50mwh103cd -50o50t28.n120 0 -V7920 -p5 -x font 1 R -x font 2 I -x font 3 B -x font 4 BI -x font 5 CW -x font 6 H -x font 7 HI -x font 8 HB -x font 9 S1 -x font 10 S -s10 -f1 -H720 -V480 -h2077Chy -w33 255w50 h25Chy -wn120 0 -H720 -V840 -h250cT -61ow75s39e44l28e44c44tw53t28h50ewf5 -69t60r60o60f60fwh120c- -60m60swf1 -85p50a44r33a44g50r33a44p50hw75c44o50n50t28a44i28n50i28n50gw75d50o50t28,w50h50o50w72e44v50e44rw58l28o50n50gw75i28tw53i28s39,w50u50s39en120 0 -H720 -f5 -V1020 -h360c- -60/60.60P60P60/60,60/60.60P60P60/60-601n120 0 -H720 -f1 -V1200 -cw -72h50i28c44hw75w72i28l28lw53i28n50c44l28u50d50ew69t28h50ewf5 -69.60P60Pwf1 -85t28h50a44tw53b50e44g50i28n50sw64t28h50ew69p50a44r33a44g50r33a44p50h50,w50a44n50dw75e44x50c44l28u50d50ew69t28h50ew69o50n50ew69t28h50a44tw53e44n50d50sw64i28t28.n120 0 -H720 -V1356 -h250cW -94h50e44nw81t28y50p50i28n50gw82r33e44l28a44t28i28v50ew76l28i28n50ew76n50u50m78b50e44rw65a44d50d50r33e44s39s39e44s39,w57t28h50ew76d50e44f33a44u50l28tw60n50u50m78b50e44rw65i28swf5 -711f1 -60,w57s39ow82t28h50ew76a44b50o50v50ew76c44o50u50l28dw82b50ew76w72r33i28t28t28e44nn120 0 -H720 -V1476 -cs -39l28i28g50h50t28l28yw75m78o50r33ew69s39i28m78p50l28y50:n120 0 -H720 -f5 -V1656 -h360c- -60/60.60P60P60/60,60/60.60P60P60/60-n120 0 -H720 -f1 -V1872 -h250cW -94h50a44tw55d50o50e44sw66t28h50ew71a44d50d50r33e44s39swf5 -66+60160-601wf1 -87o50rw60t28h50ew71e44q50u50i28v50a44l28e44n50twf5 -55+60-wf1 -87m78e44a44n50?w96I33tw55l28o50o50k50sw66l28i28k50ew71i28tw55d50o50e44sw66n50o50t28h50i28n50g50,w52b50u50tw55r33e44c44a44l28lw56t28h50a44tn120 0 -H720 -V1992 -cd -50o50tw58n50e44e44dw80n50o50tw58b50ew73aw73c44o50m78p50l28e44t28ew73l28i28n50ew73o50fw62t28e44x50t28.wf5 -79+601wf1 -89s39e44l28e44c44t28sw68t28h50ew73l28i28n50ew73a44f33t28e44rw62t28h50ew73e44n50dw79o50fw62t28h50ew73c44u50r33r33e44n50tw57t28e44x50t28,w54a44n50dwf5 -79-601wf1 -89s39e44l28e44c44t28sn120 0 -H720 -V2112 -ct -28h50ew75l28i28n50ew75b50e44f33o50r33ew75t28h50ew75b50e44g50i28n50n50i28n50g50.w81T61h50e44r33e44f33o50r33ewf5 -75+60160-601wf1 -91s39e44l28e44c44t28sw70t28h50ew76l28i28n50ew76b50e44f33o50r33ew76t28h50ew76l28i28n50ew76a44f33t28e44rw65t28h50ew76e44n50dw82o50fw65d50o50t28,w57t28h50a44tw60i28s39,n120 0 -H720 -V2232 -ct -28h50ew71c44o50m78p50l28e44t28ew71l28i28n50ew71c44o50n50t28a44i28n50i28n50gw77t28h50ew71e44n50dw77o50fw60d50o50t28.w77W94ew71c44a44nw77u50s39ew70t28h50i28sw65c44o50n50s39t28r33u50c44t28i28o50nw76t28ow76e44x50p50a44n50dw76aw70s39e44l28e44c44t28i28o50nw76t28ow76i28n50c44l28u50d50ew70an120 0 -H720 -V2352 -cc -44o50m78p50l28e44t28ew69l28i28n50e44,w50s39a44yw75t28h50ew69f33i28r33s39tw53l28i28n50ew69i28nw75t28h50ew69f33i28l28ew69c44o50n50t28a44i28n50i28n50gwf5 -75E60m60a60c60sf1 -60:n120 0 -H720 -x font 0 CI -f0 -V2532 -h360c0 -60/60E60m60a60c60s60/60+60-60pn120 0 -H720 -f5 -V2652 -h360cg -60e60n60e60r60a60lwh120ci -60n60t60r60o60d60u60c60t60i60o60nwh120ct -60owh120ct -60h60ewh120cc -60o60m60m60a60n60d60swh120ci -60nwh120cE -60m60a60c60swh120ca -60n60dwh120ct -60owh120ct -60r60ywh120ct -60owh120cs -60h60o60wn120 0 -H720 -f1 -V2832 -cT -61h50ew69a44d50d50r33e44s39swf5 -64+60-wf1 -85i28sw64a44nw75i28d50i28o50m78.n120 0 -H720 -f3 -V3072 -cL -67o50o50p56sn120 0 -H720 -f1 -V3228 -h250cA -72b50o50v50e44,w52w72ew71c44h50a44n50g50e44dw77o50n50ew71o50c44c44u50r33r33e44n50c44ew71o50fwf5 -60E60m60a60c60swf1 -87t28owf5 -77E60m60a60c60s60\603606600f1 -60,w52b50u50tw55i28fw61t28h50ew72n50a44m78ew72o50fw61t28h50ew72e44d50i28t28o50rw61i28sw67r33e44a44l28l28yn120 0 -H720 -V3348 -cc -44h50a44n50g50i28n50g50,w62i28tw65w72o50u50l28dw87b50ew81u50s39e44f33u50lw65t28ow87c44h50a44n50g50ewf2 -81a50l28lwf1 -65i28n50s39t28a44n50c44e44sw76o50fw70t28h50ew81n50a44m78ew80i28nw86aw80s39i28n50g50l28ew80c44o50m78m78a44n50d50.wf5 -86s60a60mwf1 -96p50r33o50v50i28d50e44sw75an120 0 -H720 -V3468 -cc -44o50m78m78a44n50d50,wf5 -58xwf1 -93(33e44x50t28r33a44c44t28)33,w58f33o50rw66j28u50s39tw61t28h50a44tw61j28o50b50.w83T61h50ew78s39y50n50t28a44xw84i28swf5 -h108cx -60/f2 -60p50a50t28t28e44r39nf5 -50/f2 -60c44o50m72m72a50n50df1 -50.w84F56o50rw67e44a44c44hw84o50c44c44u50r33r33e44n50c44ew78o50fw67t28h50en120 0 -H720 -V3588 -cp -50a44t28t28e44r33nw76i28nw75t28h50ew69s39e44l28e44c44t28e44dw75t28e44x50t28,wf5 -50xwf1 -85s39e44t28sw64d50o50tw53t28ow75t28h50ew69o50c44c44u50r33r33e44n50c44ew69a44n50dw75r33u50n50sw64c44o50m78m78a44n50d50.w75F56o50rw58e44x50a44m78p50l28e44,w50t28ow75c44h50a44n50g50ewf5 -69E60m60a60c60sn120 0 -H720 -f1 -V3708 -ct -28owf5 -75v60i60,n120 0 -H720 -x font 0 CI -f0 -V3888 -h360c0 -60,60$60x60/60E60m60a60c60s60/60c60/60v60i60/n120 0 -H720 -V4008 -h360c0 -60,60$60pn120 0 -H720 -f5 -V4128 -h360cT -60h60i60swh120cm -60a60n60u60a60lwh120ci -60swh120co -60r60g60a60n60i60z60e60dwh120ci -60nwh120ca -wh120cr -60a60t60h60e60rwh120ch -60a60p60h60a60z60a60r60dwh120cm -60a60n60n60e60r60.wh180cT -60h60ewh120cf -60i60r60s60tn120 0 -H720 -V4248 -h360cs -60e60v60e60r60a60lwh120cs -60e60c60t60i60o60n60swh120cw -60e60r60ewh120cw -60r60i60t60t60e60nwh120ch -60a60s60t60i60l60ywh120ci -60nwh120ca -60nwh120ca -60t60t60e60m60p60twh120ct -60owh120cp -60r60o60v60i60d60ewh120ca -n120 0 -H720 -V4368 -h360cg -60e60n60e60r60a60lwh120ci -60n60t60r60o60d60u60c60t60i60o60nwh120ct -60owh120ct -60h60ewh120cc -60o60m60m60a60n60d60swh120ci -60nwh120cv -60iwh120ca -60n60dwh120ct -60owh120ct -60r60ywh120ct -60owh120cs -60h60o60wn120 0 -H720 -V4488 -h360ct -60h60ewh120cm -60e60t60h60o60dwh120ci -60nwh120ct -60h60ewh120cm -60a60d60n60e60s60swh120ct -60h60a60twh120ci -60swh120ct -60h60ewh120cv -60iwh120cc -60o60m60m60a60n60dwh120cs -60t60r60u60c60t60u60r60e60.n120 0 -H720 -f1 -V4668 -cT -61h50i28sw65w72o50r33k50sw65b50yw77s39u50b50d50i28v50i28d50i28n50gw77t28h50ew71c44u50r33r33e44n50tw55t28e44x50tw55(f5 -33060,60$wf1 -h87Cem -wh127ct -28h50ew71w72h50o50l28ew71f33i28l28e44)w60i28n50t28ow77a44p50p50e44a44r33a44n50c44e44sw66o50fw60i28t28sw66t28e44x50t28u50a44lw55a44r33g50u50m78e44n50tn120 0 -H720 -V4788 -c( -f5 -33E60m60a60c60sf1 -60)33,w57a44n50dw82t28h50e44nw82r33u50n50n50i28n50gw81t28h50ew75c44o50m78m78a44n50dw81t28h50a44tw59f33o50l28l28o50w72sw70(f5 -33c60/60v60i60/f1 -60)w64w72i28t28hw81d50o50tw59s39e44tw59t28ow81t28h50ew75t28e44x50t28.w81W94ew75c44a44nw81r33e44a44dw81t28h50i28sn120 0 -H720 -V4908 -ce -44x50a44m78p50l28ew74a44s39,w55`33`33f33i28n50dw80a44l28lw58o50c44c44u50r33r33e44n50c44e44sw69o50fwf5 -63E60m60a60c60swf1 -90i28nw80t28h50ew74f33i28l28e44,w55a44n50dw80f33o50rw63e44a44c44hw80o50n50e44,w55s39e44tw58t28h50ew74c44u50r33r33e44n50tw58t28e44x50tw58t28ow80t28h50ew75o50c44c44u50rh33Chy -n120 0 -H720 -V5028 -cr -33e44n50c44ew73a44n50dw79r33u50nw79t28h50ew73c44o50m78m78a44n50dwf5 -79c60/60v60i60/f1 -60,w54w72h50i28c44hw79w72i28l28lw57r33e44p50l28a44c44ew72t28h50ew72c44u50r33r33e44n50tw56t28e44x50tw56b50ywf5 -78v60i60.f1 -60'33'w61[33T61h50i28sw67c44o50m78m78a44n50dw78i28sw67s39o50m78eh44Chy -n120 0 -H720 -V5148 -cw -72h50a44tw56s39i28m78i28l28a44rw61t28owf5 -78e60df1 -60'33swf5 -67gwf1 -88c44o50m78m78a44n50d50.w78T61h50ew72d50i28f33f33e44r33e44n50c44e44sw67w72i28l28lw56d50e44v50e44l28o50pw78b50e44l28o50w72,w53b50u50tw56n50o50t28ew72t28h50a44tw57t28h50ew73d50e44f33a44u50l28tw57a44d50d50r33e44s39s39,w54a44sn120 0 -H720 -V5268 -ca -44l28w72a44y50s39,w50i28sw64d50o50tw53r33a44t28h50e44rw58t28h50a44nw75t28h50ew69w72h50o50l28ew69f33i28l28e44.25]n120 0 -H720 -V5424 -h250cA -w97s39i28n50g50l28ewf5 -69uwf1 -85c44o50m78m78a44n50dw75i28sw64s39u50f33f33i28c44i28e44n50tw53t28ow75u50n50d50ow75a44nwf5 -75xwf1 -85c44o50m78m78a44n50d50,w50r33e44g50a44r33d50l28e44s39sw64o50fw58h50o50ww97m78a44n50yw76i28n50d50i28v50i28d50u50a44lw54c44h50a44n50g50e44sn120 0 -H720 -V5544 -ct -28h50ewf5 -69xwf1 -85m78a44k50e44s39.n120 0 -H720 -x font 0 CI -f0 -V5724 -h360cu -n120 0 -H720 -V5844 -h360c0 -60,60$60pn120 0 -H720 -f5 -V5964 -h360cT -60h60i60swh120cm -60a60n60u60a60lwh120ci -60swh120co -60r60g60a60n60i60z60e60dwh120ci -60nwh120ca -wh120cr -60a60t60h60e60rwh120ch -60a60p60h60a60z60a60r60dwh120cm -60a60n60n60e60r60.wh180cT -60h60ewh120cf -60i60r60s60tn120 0 -H720 -V6084 -h360cs -60e60v60e60r60a60lwh120cs -60e60c60t60i60o60n60swh120cw -60e60r60ewh120cw -60r60i60t60t60e60nwh120ch -60a60s60t60i60l60ywh120ci -60nwh120ca -60nwh120ca -60t60t60e60m60p60twh120ct -60owh120cp -60r60o60v60i60d60ewh120ca -n120 0 -H720 -V6204 -h360cg -60e60n60e60r60a60lwh120ci -60n60t60r60o60d60u60c60t60i60o60nwh120ct -60owh120ct -60h60ewh120cc -60o60m60m60a60n60d60swh120ci -60nwh120cE -60m60a60c60swh120ca -60n60dwh120ct -60owh120ct -60r60ywh120ct -60owh120cs -60h60o60wn120 0 -H720 -V6324 -h360ct -60h60ewh120cm -60e60t60h60o60dwh120ci -60nwh120ct -60h60ewh120cm -60a60d60n60e60s60swh120ct -60h60a60twh120ci -60swh120ct -60h60ewh120cE -60m60a60c60swh120cc -60o60m60m60a60n60dwh120cs -60t60r60u60c60t60u60r60e60.n120 0 -H720 -f1 -V6540 -h250cO -72fw70c44o50u50r33s39e44,wf5 -62cwf1 -97i28sw76n50o50tw65t28h50ew81o50n50l28yw87c44o50m78m78a44n50dwf5 -87xwf1 -97c44a44nw87r33u50n50.w87A72nwf5 -87awf1 -98c44o50m78m78a44n50dw88c44a44nw88b50ew82u50s39e44dw88t28ow88p50u50tw66p50r33o50p50r33i28e44t28a44r33yn120 0 -H720 -V6660 -cm -78a44r33k50i28n50g50sw64o50nwf5 -75E60m60a60c60sf1 -60:n120 0 -H720 -x font 0 CI -f0 -V6840 -h360c0 -60,60$60x60/60E60m60a60c60s60/60a60/60{60T60M60}60/n120 0 -H720 -V6960 -h360c/ -60E60m60a60c60s60/60+60-60pn120 0 -H720 -f5 -V7080 -h360cg -60e60n60e60r60a60lwh120ci -60n60t60r60o60d60u60c60t60i60o60nwh120ct -60owh120ct -60h60ewh120cc -60o60m60m60a60n60d60swh120ci -60nwh120cE -60m60a60c60s60{60T60M60}wh120ca -60n60dwh120ct -60owh120ct -60r60ywh120ct -60owh120cs -60h60o60wn120 0 -H720 -f1 -V7260 -c[ -33T61h50e44r33ew74i28sw69n50ow80w72a44yw80t28ow80s39e44ew74t28h50ew74c44h50a44n50g50e44sw69a44sw69t28h50e44yw80h50a44p50p50e44n50,w55a44sw69i28nwf5 -80e60df1 -60'33swf5 -69g60/60E60m60a60c60s60/60s60/60/60&60{60T60M60}60/60pf1 -60;w59s39e44ew75t28h50ew75s39e44c44t28i28o50nn120 0 -V7920 -p6 -x font 1 R -x font 2 I -x font 3 B -x font 4 BI -x font 5 CW -x font 6 H -x font 7 HI -x font 8 HB -x font 9 S1 -x font 10 S -s10 -f1 -H720 -V480 -h2077Chy -w33 256w50 h25Chy -wn120 0 -H720 -V840 -co -50nw75M89u50l28t28i28p50l28ew69C67h50a44n50g50e44s39,w50b50e44l28o50w72.25]n120 0 -H720 -V996 -h250cT -61h50ewf5 -69pwf1 -85c44o50m78m78a44n50dw75i28sw64a44l28s39ow75u50s39e44f33u50lw53w72h50e44nw75d50r33i28v50e44nw75b50yw75a44nwf5 -75xf1 -60,w50b50u50tw53b50ew69c44a44r33e44f33u50lw53t28h50a44tw53y50o50uw75s39a44yw75w72h50a44tw53y50o50uw75m78e44a44n50;n120 0 -H720 -x font 0 CI -f0 -V1176 -h360c0 -60,60$60x60/60E60m60a60c60s60/60pn120 0 -H720 -f5 -V1296 -h360cE -60m60a60c60s60E60m60a60c60sn120 0 -H720 -f1 -V1476 -cs -39i28n50c44ewf5 -69xwf1 -85s39e44t28sw64d50o50tw54t28ow76t28h50ew70t28e44x50tw54i28nw76t28h50ew70s39l28a44s39h50e44s39,w51p50r33i28n50t28i28n50gw76o50n50l28yw76t28h50a44tw54t28e44x50tw54i28sw65n50o50tw54g50o50i28n50gw76t28ow76b50ew70v50e44r33yw76i28n50f33o50r33m78a44t28i28v50e44.w76B67u50tw54t28h50en120 0 -H720 -V1596 -cc -44o50m78m78a44n50dw80t28h50a44twf5 -58xwf1 -90r33u50n50sw69c44a44nw80c44o50n50t28a44i28nw80a44d50d50r33e44s39s39e44s39.w80F56o50rw63e44x50a44m78p50l28e44,w55i28fw63w72ew74w72a44n50tw57t28ow79p50r33i28n50tw57a44l28lw57l28i28n50e44sw68c44o50n50t28a44i28n50i28n50gwf5 -79E60m60a60c60sf1 -60,n120 0 -H720 -V1716 -cj -28u50s39tw53u50s39ewf5 -69+60-f1 -60:n120 0 -H720 -x font 0 CI -f0 -V1896 -h360c0 -60,60$60x60/60E60m60a60c60s60/60+60-60pn120 0 -H720 -f5 -V2016 -h360cg -60e60n60e60r60a60lwh120ci -60n60t60r60o60d60u60c60t60i60o60nwh120ct -60owh120ct -60h60ewh120cc -60o60m60m60a60n60d60swh120ci -60nwh120cE -60m60a60c60s60{60T60M60}wh120ca -60n60dwh120ct -60owh120ct -60r60ywh120ct -60owh120cs -60h60o60wn120 0 -H720 -V2136 -h360ct -60h60ewh120cm -60e60t60h60o60dwh120ci -60nwh120ct -60h60ewh120cm -60a60d60n60e60s60swh120ct -60h60a60twh120ci -60swh120ct -60h60ewh120cE -60m60a60c60s60{60T60M60}wh120cc -60o60m60m60a60n60dwh120cs -60t60r60u60c60t60u60r60e60.n120 0 -H720 -f1 -V2316 -cF -56i28n50a44l28l28y50,w58l28e44t28'33sw72r33e44s39t28o50r33ew77t28h50ew77s39t28a44t28ew77o50fw66t28h50ew77f33i28l28ew78w72i28t28hw84a44n50o50t28h50e44rwf5 -67xwf1 -94c44o50m78m78a44n50d50,w59a44n50dw84m78a44k50ew78u50s39ew78o50fw67aw78h50a44n50d50yw84s39h50o50r33t28h50a44n50d50:w62an120 0 -H720 -V2436 -cc -44o50m78m78aw71i28nw77a44nw77a44d50d50r33e44s39sw66h50a44sw66i28t28sw66l28e44f33tw55s39i28d50ew71d50e44f33a44u50l28tw55t28owf5 -770f1 -60,w52a44n50dw77i28t28sw66r33i28g50h50tw55s39i28d50ew71d50e44f33a44u50l28tw54t28owf5 -76$f1 -60,w51s39ow76t28h50ew70e44a44s39y50-33t28o50-33t28y50p50ew70a44d50d50r33e44s39sn120 0 -H720 -f5 -V2556 -c, -wf1 -85r33e44f33e44r33sw64t28ow75t28h50ew69w72h50o50l28ew69f33i28l28e44:n120 0 -H720 -x font 0 CI -f0 -V2736 -h360c, -60x60/60E60m60a60c60s60/wh120c/ -60{60T60M60}60/60dn120 0 -H720 -V2856 -h360c, -60pn120 0 -H720 -f5 -V2976 -h360cT -60h60i60swh120cm -60a60n60u60a60lwh120ci -60swh120co -60r60g60a60n60i60z60e60dwh120ci -60nwh120ca -wh120cr -60a60t60h60e60rwh120ch -60a60p60h60a60z60a60r60dwh120cm -60a60n60n60e60r60.wh180cT -60h60ewh120cf -60i60r60s60tn120 0 -H720 -V3096 -h360cs -60e60v60e60r60a60lwh120cs -60e60c60t60i60o60n60swh120cw -60e60r60ewh120cw -60r60i60t60t60e60nwh120ch -60a60s60t60i60l60ywh120ci -60nwh120ca -60nwh120ca -60t60t60e60m60p60twh120ct -60owh120cp -60r60o60v60i60d60ewh120ca -n120 0 -H720 -V3216 -h360cg -60e60n60e60r60a60lwh120ci -60n60t60r60o60d60u60c60t60i60o60nwh120ct -60owh120ct -60h60ewh120cc -60o60m60m60a60n60d60swh120ci -60nwh120cE -60m60a60c60swh120ca -60n60dwh120ct -60owh120ct -60r60ywh120ct -60owh120cs -60h60o60wn120 0 -H720 -V3336 -h360ct -60h60ewh120cm -60e60t60h60o60dwh120ci -60nwh120ct -60h60ewh120cm -60a60d60n60e60s60swh120ct -60h60a60twh120ci -60swh120ct -60h60ewh120cE -60m60a60c60swh120cc -60o60m60m60a60n60dwh120cs -60t60r60u60c60t60u60r60e60.n120 0 -H720 -f1 -V3516 -cN -72o50t28i28c44ew69w72h50a44tw53t28h50i28swf5 -64xwf1 -85d50o50e44s39:w53f33o50rw58e44a44c44hw75o50c44c44u50r33r33e44n50c44ew69o50fw58E61m78a44c44s39,w50f33i28n50dw75t28h50ewf5 -69{60T60M60}wf1 -85t28h50a44tw53f33o50l28l28o50w72s39,w50a44n50dw75d50e44l28e44t28ew69i28t28.n120 0 -H720 -V3672 -h250cT -61h50ew79`33t28e44x50t28'wf5 -68s60a60mwf1 -95a44c44c44e44p50t28sw74f33o50rw68s39e44a44r33c44h50e44sw74i28nw85a44d50d50r33e44s39s39e44sw74a44n50dw85i28nwf5 -85xwf1 -95c44o50m78m78a44n50d50sw75i28sw75n50o50tw64s39i28m78p50l28ew80t28e44x50t28,w61b50u50tw64r33a44t28h50e44rn120 0 -H720 -f2 -V3792 -cr -39e44g50u50l28a50r39 25e44x44p50r39e44s39s39i28o50n50s39.wf1 -90U72n50i28xw90h50a44sw79s39e44v50e44r33a44lw68d50i28s39t28i28n50c44tw68i28n50t28e44r33p50r33e44t28a44t28i28o50n50sw79o50fw73r33e44g50u50l28a44rw73e44x50p50r33e44s39s39i28o50n50s39.w90T61h50ew84f33o50r33mwh118cu -50s39e44dw89b50yn120 0 -H720 -f5 -V3912 -cs -60a60mwf1 -85i28sw64t28h50a44tw53o50fwf5 -58e60g60r60e60pf1 -60(33150)33,w50i28n50c44l28u50d50i28n50gw75p50a44r33e44n50t28h50e44s39e44swf5 -64(60)wf1 -85f33o50rw58g50r33o50u50p50i28n50gw75a44n50dw75a44nw75`33o50r33'w58o50p50e44r33a44t28o50rwf5 -58|wf1 -85f33o50rw58m78a44t28c44h50i28n50gw75s39t28r33i28n50g50sn120 0 -H720 -V4032 -ci -28nw84p50a44r33a44l28l28e44l28.wf5 -84s60a60mwf1 -94m78a44k50e44sw73t28w72ow84e44x50t28e44n50s39i28o50n50s39:w62a44l28t28h50o50u50g50hwf5 -84.wf1 -94(33t28h50ew78m78o50s39tw62o50v50e44r33l28o50a44d50e44dw84c44h50a44r33a44c44t28e44rw67i28nw84U72n50i28x50)w67m78a44t28c44h50e44sw72a44n50yn120 0 -H720 -V4152 -cc -44h50a44r33a44c44t28e44rwf2 -69e44x44c44e44p50twf1 -65n50e44w72l28i28n50e44,w62t28h50ew81r33e44g50u50l28a44rw70e44x50p50r33e44s39s39i28o50nwf5 -87@wf1 -97(33t28h50i28n50kw87o50fw70i28tw65a44sw76aw81b50i28gw87d50o50t28)w70m78a44t28c44h50e44sw76a44n50yw87c44h50a44r33a44c44t28e44r33,w62e44v50e44nn120 0 -H720 -V4272 -cn -50e44w72l28i28n50e44s39;w62a44n50dw84t28h50ew78c44h50a44r33a44c44t28e44rw66s39e44q50u50e44n50c44ewf5 -77\60nwf1 -93m78a44t28c44h50e44sw72aw77n50e44w72l28i28n50ew77c44h50a44r33a44c44t28e44r33.w83R67e44p50l28a44c44e44m78e44n50tw61t28e44x50t28,w58s39u50c44hw83a44sw72u50s39e44dw83i28nn120 0 -H720 -V4392 -ct -28h50ewf5 -69awf1 -85a44n50dwf5 -75cwf1 -85c44o50m78m78a44n50d50s39,w50i28sw64s39t28i28l28lw53p50l28a44i28nw75t28e44x50t28,w50b50u50tw53t28h50ew69s39e44q50u50e44n50c44ewf5 -69\60nwf1 -85r33e44p50r33e44s39e44n50t28sw64n50e44w72l28i28n50ew69i28nw75t28h50a44tw53c44o50n50t28e44x50t28,w50t28o50o50.n120 0 -H720 -V4548 -h250cH -72e44r33ew77i28sw72a44nw83e44x50a44m78p50l28e44.w83S56a44yw83w72ew77w72a44n50t28e44dw83t28ow83d50o50u50b50l28ew77s39p50a44c44ew77t28h50ew77d50o50c44u50m78e44n50t28,w58t28h50a44tw62i28s39,w59t28u50r33nw84e44v50e44r33yw84n50e44w72l28i28n50ew78i28n50t28on120 0 -H720 -V4668 -ct -28w72ow75n50e44w72l28i28n50e44s39.w75T61h50ew69f33o50l28l28o50w72i28n50gw75a44l28lw53d50ow75t28h50ew69j28o50b50:n120 0 -H720 -x font 0 CI -f0 -V4848 -h360c, -60x60/60\60n60/wh120ca -60/60\60n60/n120 0 -H720 -V4968 -h360c, -60x60/60\60n60/wh120cc -60/60\60n60\60n60/n120 0 -H720 -V5088 -h360c, -60x60/60$60/wh120ca -60/60\60n60/n120 0 -H720 -V5208 -h360c, -60x60/60^60/wh120ci -60/60\60n60/n120 0 -H720 -f1 -V5388 -cT -61h50ew70l28a44s39tw54e44x50a44m78p50l28ew70i28sw65s39l28i28g50h50t28l28yw76d50i28f33f33e44r33e44n50t28,w51b50e44c44a44u50s39ew70i28tw54p50u50t28sw65aw70n50e44w72l28i28n50ewf2 -70b50e44f28o50r39ewf1 -70e44a44c44hw76l28i28n50e44;w54t28h50ew70o50t28h50e44rw59e44x50a44m78p50l28e44sw65p50l28a44c44ew71i28tn120 0 -H720 -V5508 -ca -44f33t28e44r33.w81T61h50ew75f33i28r33s39tw59t28w72ow81e44x50a44m78p50l28e44sw70m78a44n50i28p50u50l28a44t28ew75n50e44w72l28i28n50e44sw70d50i28r33e44c44t28l28yw81[33s39o50m78e44t28h50i28n50gw81o50u50t28s39i28d50ewf5 -75e60df1 -60'33sw70k50e44n50]33;w58t28h50ew74l28a44s39tw58t28w72ow80u50s39en120 0 -H720 -V5628 -cr -33e44g50u50l28a44rw58e44x50p50r33e44s39s39i28o50n50s39:wf5 -53$wf1 -85i28sw64t28h50ew69e44m78p50t28yw75s39t28r33i28n50gw75a44tw53t28h50ew69e44n50dw75o50fw58aw69l28i28n50e44,w50w72h50i28l28ewf5 -69^wf1 -85i28sw64t28h50ew69e44m78p50t28yw75s39t28r33i28n50gw75a44tw53t28h50ew69b50e44g50i28n50n50i28n50g50.n120 0 -H720 -V5784 -h250cT -61h50e44s39ew71s39o50l28u50t28i28o50n50sw66a44l28lw55h50a44v50ew71aw71p50o50s39s39i28b50l28ew71d50r33a44w72b50a44c44k50:w55i28fw60t28h50e44r33ew71i28sw66a44l28r33e44a44d50yw77aw71b50l28a44n50kw77l28i28n50ew72(33t28h50a44tw56i28s39,w53t28w72ow78c44o50n50s39e44c44u50t28i28v50en120 0 -H720 -V5904 -cn -50e44w72l28i28n50e44s39)33,w53t28h50e44yw78m78a44k50ew72i28tw56m78u50c44hw78l28a44r33g50e44rw60(33f33o50u50rw60c44o50n50s39e44c44u50t28i28v50ew71n50e44w72l28i28n50e44s39)33.w77Aw99b50e44t28t28e44rw60m78e44t28h50o50dw77i28sw66t28ow77e44x50t28e44n50dw77e44v50e44r33yw77g50r33o50u50pn120 0 -H720 -V6024 -co -50fw58n50e44w72l28i28n50e44sw64b50yw75o50n50e44:n120 0 -H720 -x font 0 CI -f0 -V6204 -h360c, -60x60/60\60n60+60/wh120ca -60/60\60n60/n120 0 -H720 -f1 -V6384 -cT -61h50ew78r33e44g50u50l28a44rw67e44x50p50r33e44s39s39i28o50nw84o50p50e44r33a44t28o50rwf5 -67+wf1 -95m78e44a44n50sw74`33o50n50ew79o50rw68m78o50r33e44;28'wf5 -68\60n60+wf1 -95i28sw74i28d50e44n50t28i28c44a44lw63t28owf5 -85\60n60\60n60*f1 -60.w85T61h50u50s39,w60t28h50i28sw74e44x50a44m78p50l28en120 0 -H720 -V6504 -ct -28a44k50e44sw64e44v50e44r33yw75s39e44q50u50e44n50c44ew69o50fw58n50e44w72l28i28n50e44sw64a44n50dw75a44d50d50sw64a44n50o50t28h50e44rw58t28ow75t28h50ew69e44n50d50.n120 0 -H720 -V6660 -h250cA -w97m78o50r33ew69c44o50m78m78o50nw75e44x50a44m78p50l28ew69i28sw64i28n50d50e44n50t28i28n50gw75aw69b50l28o50c44kw75o50fw58t28e44x50tw53b50yw75aw69t28a44bw75s39t28o50p50.w75T61h50ew70f33o50l28l28o50w72i28n50gw76a44l28lw54w72o50r33k50,w51a44l28t28h50o50u50g50hn120 0 -H720 -V6780 -ct -28h50ew69f33i28r33s39tw53i28sw64a44r33g50u50a44b50l28yw75t28h50ew69c44l28e44a44n50e44s39tw53(33t28h50ew69b50l28a44n50kw75t28e44x50tw53i28nw75s39l28a44s39h50e44sw64i28sw64aw69t28a44b50)33:n120 0 -V7920 -p7 -x font 1 R -x font 2 I -x font 3 B -x font 4 BI -x font 5 CW -x font 6 H -x font 7 HI -x font 8 HB -x font 9 S1 -x font 10 S -s10 -f1 -H720 -V480 -h2077Chy -w33 257w50 h25Chy -wn120 0 -H720 -x font 0 CI -f0 -V900 -h360c, -60x60/60^60/60a60/wwh200c/ -n120 0 -H720 -V1020 -h360c, -60x60/60^60/60c60/wwh200c/ -n120 0 -H720 -V1140 -h360c, -60x60/60.60*60\60n60/60i60/wwh270c/ -n120 0 -H720 -f1 -V1320 -cT -61h50ew81l28a44s39tw65e44x50a44m78p50l28ew81u50s39e44sw76t28h50ew81p50a44t28t28e44r33nw87(33i28d50i28o50m78,w62r33e44a44l28l28y50)wf5 -70.60*60\60nwf1 -98t28ow88m78a44t28c44hw88l28i28n50e44s39:wf5 -66.60*wf1 -98m78a44t28c44h50e44sw77t28h50ew82l28o50n50g50e44s39tw66p50o50s39s39i28b50l28en120 0 -H720 -V1440 -cs -39t28r33i28n50gw75o50fw58n50o50n50-33n50e44w72l28i28n50ew69c44h50a44r33a44c44t28e44r33s39.w75T61a44k50i28n50gw75i28n50i28t28i28a44lw53t28a44b50sw64a44w72a44yw75i28sw64j28u50s39tw53a44sw64e44a44s39y50:n120 0 -H720 -x font 0 CI -f0 -V1620 -h360c, -60x60/60^wh300c/ -60dn120 0 -H720 -f1 -V1800 -cI -33nw75t28h50e44s39ew69e44x50a44m78p50l28e44sw64Iw58h50a44v50ew69s39p50e44c44i28f33i28e44dw75a44nw75a44d50d50r33e44s39sw64(33t28h50ew69w72h50o50l28ew69f33i28l28e44)33,w50b50u50tw53i28nw76p50r33a44c44t28i28c44ew70c44o50m78m78a44n50d50sw65l28i28k50ew70t28h50e44s39ew70a44r33ew70m78o50r33en120 0 -H720 -V1920 -cl -28i28k50e44l28yw75t28ow75b50ew69r33u50nw75w72i28t28h50o50u50tw53a44nw75a44d50d50r33e44s39s39,w50u50s39i28n50gw75t28h50ew69v50a44l28u50ew69o50fw58d50o50tw53s39e44tw53b50yw75s39e44l28e44c44t28i28n50gw75t28e44x50tw53w72i28t28hw75t28h50ew69m78o50u50s39e44.n120 0 -H720 -f3 -V2160 -cC -72o50n56d56i28t33i28o50n56a50l28sn120 0 -H720 -f1 -V2316 -h250cT -61h50ewf5 -69xwf1 -85c44o50m78m78a44n50dw75i28sw64aw69l28o50o50p50i28n50gw75c44o50n50s39t28r33u50c44t28:w53f33o50rw58e44a44c44hw75m78a44t28c44hw76o50fw59aw70r33e44g50u50l28a44rw59e44x50p50r33e44s39s39i28o50n50,w51i28tw54e44x50t28r33a44c44t28sw65(33s39e44t28sw65d50o50tw54t28o50)n120 0 -H720 -V2436 -ct -28h50ew71m78a44t28c44hw77a44n50dw77r33u50n50sw66aw71c44o50m78m78a44n50d50.wf5 -77s60a60mwf1 -87a44l28s39ow77h50a44sw66aw71c44o50n50d50i28t28i28o50n50a44l28,wf5 -52gf1 -60:wf5 -90g60/f2 -60p50a50t28t28e44r39nf5 -50/f2 -60c44o50m72m72a50n50dwf1 -76r33u50n50sw65t28h50ew70c44o50m78m78a44n50dw76i28fn120 0 -H720 -V2556 -cd -50o50tw55c44o50n50t28a44i28n50sw66aw71m78a44t28c44hw77o50fw60t28h50ew71p50a44t28t28e44r33nwf2 -77w67i28t28h50o50u50tw55c44h50a50n50g50i28n50gw77t28h50ew71v44a50l28u50ew71o50fw55d50o50t28.wf1 -78T61h50ew72i28n50v50e44r33s39e44,wf5 -53vf1 -60,w53r33u50n50sw67t28h50ew72c44o50m78m78a44n50dw78i28fn120 0 -H720 -V2676 -cd -50o50tw57d50o50e44swf2 -68n50o50twf1 -57c44o50n50t28a44i28nw79aw73m78a44t28c44hw79o50fw62t28h50ew73p50a44t28t28e44r33n50.w79(33T61h50ew73l28e44t28t28e44r33swf5 -68gwf1 -89a44n50dwf5 -79vwf1 -89a44r33ew72h50i28s39t28o50r33i28c44a44lw56a44n50dw78h50a44v50ew72n50ow78m78n50e44m78o50n50i28cw72s39i28gh50Chy -n120 0 -H720 -V2796 -cn -50i28f33i28c44a44n50c44e44.w75Y72o50uw75m78i28g50h50tw53t28h50i28n50kw75o50fwf5 -58gwf1 -85a44sw64`33g50u50a44r33d50.25'33)w83[f5 -33e60dwf1 -85u50s39e44r33sw64s39h50o50u50l28dw75r33e44a44dw75t28h50ew69a44b50o50v50ew69d50e44f33i28n50i28t28i28o50n50sw64v50e44r33yw75c44a44r33e44f33u50l28l28y50;w54t28h50en120 0 -H720 -f5 -V2916 -cg -wf1 -h101cc -44o50m78m78a44n50dw91i28nwf5 -91s60a60mwf1 -h101ci -28sw80f33u50n50d50a44m78e44n50t28a44l28l28yw91d50i28f33f33e44r33e44n50tw69f33r33o50mwh119ct -28h50a44tw69i28nwf5 -91e60df1 -60.25]w99H72e44r33ew85i28sw80a44nw91e44x50a44m78p50l28ew85o50fw74t28h50ew84d50i28f33f33e44r33e44n50c44en120 0 -H720 -V3036 -cb -50e44t28w72e44e44nwf5 -75xwf1 -85a44n50dwf5 -75g60:n120 0 -H720 -V3216 -h360c, -60x60/60E60m60a60c60s60/60c60/60v60i60/n120 0 -H720 -f1 -V3396 -cc -44h50a44n50g50e44sw64e44a44c44hw75o50c44c44u50r33r33e44n50c44ew69o50fw58t28h50ew69w72o50r33dwf5 -75E60m60a60c60swf1 -85i28nw75t28h50ew69f33i28l28ew69t28ow75t28h50ew69w72o50r33dwf5 -75v60if1 -60,w50b50u50tn120 0 -H720 -f5 -V3576 -h360c, -60g60/60E60m60a60c60s60/60c60/60v60i60/n120 0 -H720 -f1 -V3756 -cc -44h50a44n50g50e44sw64t28h50ewf2 -69w67h50o50l28ew69f28i28l28ewf1 -69t28owf5 -75v60iwf1 -85i28fw58t28h50e44r33ew69i28sw64t28h50ew69w72o50r33dwf5 -75E60m60a60c60swf1 -85a44n50y50w72h50e44r33ew69i28nw75t28h50ew69f33i28l28e44.n120 0 -H720 -V3912 -h250cN -72e44i28t28h50e44rw66o50fw66t28h50e44s39ew77c44o50m78m78a44n50d50sw73i28sw73p50a44r33t28i28c44u50l28a44r33l28yw84i28n50t28e44r33e44s39t28i28n50gw84i28nw84i28s39o50l28a44t28i28o50n50,w59b50u50tw62t28h50e44yw84a44r33ew78v50a44l28u50a44b50l28ew78w72h50e44nw84c44o50mh78Chy -n120 0 -H720 -V4032 -cb -50i28n50e44dw75w72i28t28hwf5 -75xwf1 -85a44n50dw75w72i28t28hw75t28h50e44m78s39e44l28v50e44s39.n120 0 -H720 -f3 -V4272 -cC -72o50m83p56o50s39i28t33i28o50nn120 0 -H720 -f1 -V4428 -h250cO -72n50ew75w72a44yw81t28ow81t28h50i28n50kw81a44b50o50u50tw59t28h50ewf5 -75xwf1 -91c44o50m78m78a44n50dw82i28sw71t28h50a44t28,w57g50i28v50e44nw82aw76s39e44l28e44c44t28i28o50nw82(33aw76v50a44l28u50ew76o50fw65d50o50t28)w65i28tw60i28t28e44r33a44t28e44sw71t28h50r33o50u50g50hn120 0 -H720 -V4548 -ci -28n50t28e44r33e44s39t28i28n50gw90s39u50b50s39e44l28e44c44t28i28o50n50sw79(33v50a44l28u50e44sw79o50fw72d50o50tw67w72i28t28h50i28n50)33.w89I33nw89o50t28h50e44rw72w72o50r33d50s39,w64i28tw67t28a44k50e44sw78aw83p50i28e44c44ew83o50fw72t28e44x50tw67a44n50dw89c44u50t28sw78i28tw67i28n50t28on120 0 -H720 -V4668 -cs -39m78a44l28l28e44rw59p50i28e44c44e44s39.w76B67u50tw54t28h50ew70t28e44x50tw54t28h50a44tw55i28tw55c44u50t28sw66u50pw77m78a44yw77a44l28r33e44a44d50yw77b50ew71aw71p50i28e44c44ew71c44u50tw55b50yw77aw71p50r33e44v50i28o50u50swf5 -66xwf1 -87c44o50m78m78a44n50dw77o50rw60s39e44l28e44c44t28e44dn120 0 -H720 -V4788 -cb -50yw80awf5 -74gf1 -60.wf5 -80s60a60mf1 -60'33sw69m78o50s39tw58i28n50t28e44r33e44s39t28i28n50gw80p50r33o50p50e44r33t28yw80i28sw69t28h50ew73a44b50i28l28i28t28yw79t28ow79d50e44f33i28n50ew73aw73s39e44q50u50e44n50c44ew73o50fw62c44o50m78m78a44n50d50sw68t28ow79p50e44r33f33o50r33mwh107ca -w73p50a44rh33Chy -n120 0 -H720 -V4908 -ct -28i28c44u50l28a44rw58t28a44s39k50.h25Cdg -wh113cA -w97s39i28m78p50l28ew69e44x50a44m78p50l28ew69i28sw64t28ow75c44h50a44n50g50ew69a44l28lw53o50c44c44u50r33r33e44n50c44e44sw64o50fwf5 -58E60m60a60c60swf1 -85t28owf5 -75e60m60a60c60sf1 -60;w53c44e44r33t28a44i28n50l28yw75t28h50ew69c44o50m78m78a44n50dn120 0 -H720 -x font 0 CI -f0 -V5088 -h360c, -60x60/60E60m60a60c60s60/wh120cc -60/60e60m60a60c60s60/n120 0 -H720 -f1 -V5268 -cw -72i28l28lw53w72o50r33k50,w50b50u50tw53w72ew69c44a44nw75u50s39ew69a44nwf5 -75xwf1 -85c44o50m78m78a44n50dw75t28ow75s39a44v50ew69r33e44t28y50p50i28n50gw75m78o50s39tw53o50fw58t28h50ew69w72o50r33dwf5 -75E60m60a60c60sf1 -60:n120 0 -H720 -x font 0 CI -f0 -V5448 -h360c, -60x60/60E60m60a60c60s60/wh120cx -60/60E60/wh120cc -60/60e60/n120 0 -H720 -f1 -V5628 -c( -33B67l28a44n50k50sw75c44a44nw86b50ew80u50s39e44dw86t28ow86s39e44p50a44r33a44t28ew80c44o50m78m78a44n50d50sw75o50nw86aw80l28i28n50ew80t28ow86m78a44k50ew80t28h50e44mwh114ce -44a44s39i28e44rw69t28ow86r33e44a44d50.25)w94W94h50a44tw65t28h50i28sw76c44o50m78m78a44n50dn120 0 -H720 -V5748 -cd -50o50e44sw65i28sw65f33i28n50dw76a44l28lw53o50c44c44u50r33r33e44n50c44e44sw64o50fwf5 -58E60m60a60c60swf1 -85(f5 -33,60x60/60E60m60a60c60s60/f1 -60)33,w50a44n50dw75t28h50e44nwf2 -75w67i28t28hw75d50o50tw53s39e44tw53t28ow75t28h50a50tw53t28e44x44t28,wf1 -50f33i28n50dw75a44l28lw53o50c44c44u50r33r33e44n50c44e44sn120 0 -H720 -V5868 -co -50fw60t28h50ew71l28e44t28t28e44rwf5 -60Ewf1 -87(f5 -33x60/60E60/f1 -60)33,w52a44n50dw77t28h50e44nwf2 -77w67i28t28hw77d50o50tw55s39e44tw55t28ow77t28h50a50tw55t28e44x44t28,wf1 -52r33u50nw78t28h50ew72c44o50m78m78a44n50dwf5 -78c60/60e60/wf1 -88t28ow78c44h50a44n50g50ew72t28h50ew72c44h50a44r33a44c44t28e44rw61t28on120 0 -H720 -V5988 -cl -28o50w72e44rw71c44a44s39e44.w88N72o50t28ew82t28h50a44tw66t28h50ew82a44d50d50r33e44s39sw76f33o50rw70t28h50ew81c44o50m78m78a44n50dwh87Cem -wh137ct -28h50ew81w72h50o50l28ew81f33i28l28e44,w62s39p50e44c44i28f33i28e44dw87b50yw87aw81c44o50m78m78awh81Cem -wh137ci -28sw76o50n50l28yn120 0 -H720 -V6108 -cg -50i28v50e44nw77t28ow77t28h50ew71l28e44f33t28m78o50s39tw55p50i28e44c44ew71o50fw60t28h50ew71c44o50m78m78a44n50d50;w55t28h50ew71r33e44s39tw55o50fw60t28h50ew72p50i28e44c44e44sw67h50a44v50ew72d50o50tw56s39e44tw56f33o50rw61t28h50e44mwh106cb -50yw78t28h50ew72e44x50e44c44u50t28i28o50nw78o50fn120 0 -H720 -V6228 -ct -28h50ew69p50i28e44c44e44sw64t28ow75t28h50e44i28rw58l28e44f33t28.n120 0 -H720 -V6384 -h250cA -72sw67a44n50o50t28h50e44rw61s39i28m78p50l28ew72e44x50a44m78p50l28e44,w53c44o50n50s39i28d50e44rw61aw72p50r33o50b50l28e44mwh106cs -39o50l28v50e44dw78a44b50o50v50e44:w57p50r33i28n50t28i28n50gw79a44l28lw57l28i28n50e44sw68i28nw79t28h50ew73f33i28l28ew73c44o50n50t28a44i28n50i28n50gn120 0 -H720 -V6504 -ct -28h50ew69w72o50r33dwf5 -75E60m60a60c60s60:n120 0 -H720 -f1 -s8 -V6880 -Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -n100 0 -H720 -V6980 -Cdg -w70T49h40ew55o40b40v40i22o40u40sw51a35n40a35l22o40g40yw60w58i22t22hw60s31h40e35l22lw42p40i22p40e35l22i22n40e35sw51i22sw51o40n40l22yw60p40a35r26t22i22a35l22l22yw60v40a35l22i22d40,w40b40e35c35a35u40s31ew55t22h40ew55i22n40d40i22v40i22d40u40a35lwf5 -42s48a48mwf1 -68c35o40m62m62a35n40d40sw51a35r26ew56a35l22lw43w58o40r26k40i22n40gw61o40nn100 0 -H720 -V7080 -ct -22h40ew55s31a35m62ew55t22e35x40t22;w42i22tw42i22sw51o40n40l22yw60h40o40ww78t22h40ew55t22e35x40tw42i22sw51s31l22i22c35e35dw60u40pw60t22h40a35tw42i22sw51c35h40a35n40g40i22n40g40.n100 0 -V7920 -p8 -x font 1 R -x font 2 I -x font 3 B -x font 4 BI -x font 5 CW -x font 6 H -x font 7 HI -x font 8 HB -x font 9 S1 -x font 10 S -s10 -f1 -H720 -V480 -h2077Chy -w33 258w50 h25Chy -wn120 0 -H720 -x font 0 CI -f0 -V900 -h360c, -60x60/60.60*60\60n60/wh120cg -60/60E60m60a60c60s60/60pn120 0 -H720 -f5 -V1020 -h360cg -60e60n60e60r60a60lwh120ci -60n60t60r60o60d60u60c60t60i60o60nwh120ct -60owh120ct -60h60ewh120cc -60o60m60m60a60n60d60swh120ci -60nwh120cE -60m60a60c60swh120ca -60n60dwh120ct -60owh120ct -60r60ywh120ct -60owh120cs -60h60o60wn120 0 -H720 -V1140 -h360ct -60h60ewh120cm -60e60t60h60o60dwh120ci -60nwh120ct -60h60ewh120cm -60a60d60n60e60s60swh120ct -60h60a60twh120ci -60swh120ct -60h60ewh120cE -60m60a60c60swh120cc -60o60m60m60a60n60dwh120cs -60t60r60u60c60t60u60r60e60.n120 0 -H720 -f1 -V1320 -cT -61h50i28sw79c44o50m78m78a44n50dw90s39a44y50sw79t28ow90b50r33e44a44kw90t28h50ew84f33i28l28ew84i28n50t28ow90l28i28n50e44sw79(f5 -33,60x60/60.60*60\60n60/f1 -60)33,w65a44n50dw90f33o50rw73e44a44c44hw90l28i28n50ew84t28h50a44tw68c44o50n50t28a44i28n50sw79t28h50ew85s39t28r33i28n50gn120 0 -H720 -f5 -V1440 -cE -60m60a60c60swf1 -90(f5 -33g60/60E60m60a60c60s60/f1 -60)33,w55r33u50nw80t28h50ew74c44o50m78m78a44n50dwf5 -80pwf1 -90w72i28t28hw80d50o50tw58s39e44tw58t28ow80t28h50ew74l28i28n50ew73(33n50o50tw57t28h50ew73m78a44t28c44hw79o50fwf5 -62E60m60a60c60sf1 -60)33,w54w72h50i28c44hw79p50r33i28n50t28sn120 0 -H720 -V1560 -ct -28h50ew72l28i28n50e44.w78T61ow78s39a44v50ew72t28y50p50i28n50g50,w53b50e44c44a44u50s39ewf5 -72.60*60\60nwf1 -88i28sw67aw72c44o50m78m78o50nw78p50a44t28t28e44r33nw78i28nwf5 -78xwf1 -88c44o50m78m78a44n50d50s39,w53i28fw61t28h50ewf5 -73xwf1 -89i28sw68f33o50l28l28o50w72e44dw79i28m78m78e44d50ih28Chy -n120 0 -H720 -V1680 -ca -44t28e44l28yw75b50yw75aw69s39p50a44c44e44,w50t28h50ew69p50a44t28t28e44r33nwf5 -75.60*60\60nwf1 -85i28sw64a44s39s39u50m78e44d50.w75T61h50e44r33e44f33o50r33e44,w50t28h50ew69a44b50o50v50ew69c44o50u50l28dw75b50ew69w72r33i28t28t28e44nw75m78o50r33ew69s39u50c44c44i28n50c44t28l28y50:n120 0 -H720 -x font 0 CI -f0 -V1860 -h360c, -60xwh120cg -60/60E60m60a60c60s60/60pn120 0 -H720 -f1 -V2040 -cT -61h50ew69s39o50l28u50t28i28o50nw75w72ew69u50s39e44dw75b50e44f33o50r33ew69w72a44sn120 0 -H720 -x font 0 CI -f0 -V2220 -h360c, -60x60/60E60m60a60c60s60/60+60-60pn120 0 -H720 -f1 -V2400 -cw -72h50i28c44hw81r33u50n50sw70t28h50ew75c44o50m78m78a44n50dwf5 -81+60-60pwf1 -91w72i28t28hw81d50o50tw59s39e44tw59t28ow81e44a44c44hw82m78a44t28c44hw82o50fwf5 -65E60m60a60c60swf1 -92i28nw82t28h50ew76f33i28l28ew76(33r33e44c44a44l28lw60t28h50a44tw60t28h50ew76i28d50i28o50mwf5 -h110c+ -60-60pn120 0 -H720 -f1 -V2520 -cp -50r33i28n50t28sw64t28h50ew69l28i28n50ew69c44o50n50t28a44i28n50i28n50gw75t28h50ew69e44n50dw75o50fw58d50o50t28)33.n120 0 -H720 -V2676 -h250cT -61h50ew77t28w72ow83c44o50m78m78a44n50d50sw72u50s39u50a44l28l28yw83p50r33o50d50u50c44ew77t28h50ew77s39a44m78ew77r33e44s39u50l28tw61(33t28h50ewf5 -77+60-60pwf1 -93f33o50r33mwh111cw -72i28l28lw61p50r33i28n50tw61aw77l28i28n50ew77t28w72i28c44ew77i28fw66i28tw62c44o50nh50Chy -n120 0 -H720 -V2796 -ct -28a44i28n50swf5 -66E60m60a60c60swf1 -87t28w72i28c44e44)33.w77W94h50i28c44hw77i28sw66b50e44t28t28e44r33?wf5 -96,60x60/60E60m60a60c60s60/60+60-60pwf1 -87i28sw66e44a44s39i28e44rw60t28ow77t28y50p50ew71a44n50dw77w72i28l28lw55b50ew70m78u50c44hw76f33a44s39t28e44rw59i28fw59t28h50ew70f33i28l28en120 0 -H720 -V2916 -ci -28sw83l28a44r33g50ew88a44n50dw95t28h50e44r33ew89a44r33ew89f33e44wwh117co -50c44c44u50r33r33e44n50c44e44sw84o50fw78t28h50ew89s39t28r33i28n50g50,w70b50u50tw73i28tw73i28sw84r33e44a44l28l28yw95a44nw95o50d50dw95s39p50e44c44i28a44lw73c44a44s39e44.wf5 -95,60x60/60.60*60\60n60/n120 0 -H720 -V3036 -cg -60/60E60m60a60c60s60/60pwf1 -88i28sw67s39l28o50w72e44rwh61Cem -wh128ci -28tw56b50r33e44a44k50sw67e44a44c44hw78l28i28n50ew72o50u50tw56s39e44p50a44r33a44t28e44l28y50,w53t28h50e44nw77e44x50a44m78i28n50e44sw66i28tw55f33o50rw60aw71m78a44t28c44hwh77Cem -wh127cb -50u50tw55i28sw66c44o50n50c44e44ph50Chy -n120 0 -H720 -V3156 -ct -28u50a44l28l28yw80c44l28e44a44n50e44r33,w55a44n50dw81g50e44n50e44r33a44l28i28z44e44sw70m78o50r33ew75e44a44s39i28l28y50.w81F56o50rw64e44x50a44m78p50l28e44,w56c44o50n50s39i28d50e44rw64t28h50ew75f33o50l28l28o50w72i28n50gw81p50i28e44c44ew75o50fw64t28h50ew75E61m78a44c44sw70m78a44nh50Chy -n120 0 -H720 -V3276 -cu -50a44l28:n120 0 -H720 -f5 -V3456 -h360cc -60o60m60m60a60n60dwh120cn -60a60m60e60=60"60a60p60p60e60n60d60-60t60o60-60f60i60l60e60"60,wh120ck -60e60y60=60"60[60u60n60b60o60u60n60d60]60"n120 0 -H720 -V3576 -h360cT -60a60k60e60swh120ct -60h60ewh120cc -60o60n60t60e60n60t60swh120co -60fwh120ct -60h60ewh120cc -60u60r60r60e60n60twh120cb -60u60f60f60e60rwh120ca -60n60dwh120ca -60p60p60e60n60d60swh120ci -60twh120ct -60owh120ct -60h60en120 0 -H720 -V3696 -h360cn -60a60m60e60dwh120cf -60i60l60e60.wh120cI -60fwh120ct -60h60ewh120cf -60i60l60e60swh120cd -60o60e60s60n60'60twh120ce -60x60i60s60t60,wh120ci -60twh120cw -60i60l60lwh120cb -60ewh120cc -60r60e60a60t60e60d60.n120 0 -H720 -V3936 -h360cc -60o60m60m60a60n60dwh120cn -60a60m60e60=60"60a60p60r60o60p60o60s60"60,wh120ck -60e60y60=60"60E60S60C60-60?60"n120 0 -H720 -V4056 -h360cP -60r60o60m60p60t60swh120cf -60o60rwh120ca -wh120ck -60e60y60w60o60r60dwh120ca -60n60dwh120ct -60h60e60nwh120cp -60r60i60n60t60swh120ca -wh120cl -60i60s60twh120co -60fwh120ct -60h60o60s60ewh120cc -60o60m60m60a60n60d60sn120 0 -H720 -V4176 -h360cw -60h60o60s60ewh120cs -60h60o60r60twh120cd -60e60s60c60r60i60p60t60i60o60nwh120cc -60o60n60t60a60i60n60swh120ct -60h60a60twh120ck -60e60y60w60o60r60d60.wh180cF -60o60rwh120ce -60x60a60m60p60l60e60,n120 0 -H720 -V4296 -h360ci -60fwh120cy -60o60uwh120cf -60o60r60g60e60twh120cw -60h60i60c60hwh120cc -60o60m60m60a60n60d60swh120cd -60e60a60lwh120cw -60i60t60hwh120cw -60i60n60d60o60w60s60,wh120cj -60u60s60twh120ct -60y60p60en120 0 -H720 -V4416 -h360c" -60@60b60[60E60S60C60-60?60]60@60t60[60w60i60n60d60o60w60]60@60b60[60E60S60C60]60"60.n120 0 -H720 -f2 -V4656 -h360ca -50n50dw75s39ow75o50nn120 0 -H720 -f1 -V4836 -cT -61h50i28sw66t28e44x50tw55c44o50n50s39i28s39t28sw66o50fw60g50r33o50u50p50sw66o50fw60n50o50n50-33e44m78p50t28yw77l28i28n50e44s39,w52w72i28t28hw77aw71s39i28m78p50l28ew71f33o50r33m78a44tw55f33o50rw60t28h50ew71t28e44x50tw55w72i28t28h50i28nw77e44a44c44hw78g50r33o50u50p50.w78I33m78a44gh50Chy -n120 0 -H720 -V4956 -ci -28n50ew73t28h50a44tw57w72ew73w72a44n50t28e44dw79t28ow79f33i28n50dw79t28h50ew73d50e44s39c44r33i28p50t28i28o50nw79o50fw62t28h50ew73`33a44p50r33o50p50o50s39'w62c44o50m78m78a44n50d50.w78T61h50ew72p50r33o50b50l28e44mwh106ci -28sw67t28ow78b50r33e44a44kw78t28h50ew72f33i28l28ew72i28n50t28on120 0 -H720 -V5076 -ci -28n50d50i28v50i28d50u50a44lw53d50e44s39c44r33i28p50t28i28o50n50s39,w50a44n50dw75t28h50e44nw75t28ow75f33i28n50dw75t28h50ew69d50e44s39c44r33i28p50t28i28o50nw75o50fw58`33a44p50r33o50p50o50s39'w58a44n50dw75t28ow75p50r33i28n50tw53i28t28.w75T61h50ew69s39o50l28u50t28i28o50nw75i28sw64s39t28r33a44i28g50h50th28Chy -n120 0 -H720 -V5196 -cf -33o50r33w72a44r33d50:n120 0 -H720 -x font 0 CI -f0 -V5376 -h360c, -60x60/60(60.60+60\60n60)60+60/wh120cg -60/60c60o60m60m60a60n60dwh120cn -60a60m60e60=60"60a60p60r60o60p60o60s60"60/60pn120 0 -H720 -f5 -V5496 -h360cc -60o60m60m60a60n60dwh120cn -60a60m60e60=60"60a60p60r60o60p60o60s60"60,wh120ck -60e60y60=60"60E60S60C60-60?60"n120 0 -H720 -V5616 -h360cP -60r60o60m60p60t60swh120cf -60o60rwh120ca -wh120ck -60e60y60w60o60r60dwh120ca -60n60dwh120ct -60h60e60nwh120cp -60r60i60n60t60swh120ca -wh120cl -60i60s60twh120co -60fwh120ct -60h60o60s60ewh120cc -60o60m60m60a60n60d60sn120 0 -H720 -V5736 -h360cw -60h60o60s60ewh120cs -60h60o60r60twh120cd -60e60s60c60r60i60p60t60i60o60nwh120cc -60o60n60t60a60i60n60swh120ct -60h60a60twh120ck -60e60y60w60o60r60d60.wh180cF -60o60rwh120ce -60x60a60m60p60l60e60,n120 0 -H720 -V5856 -h360ci -60fwh120cy -60o60uwh120cf -60o60r60g60e60twh120cw -60h60i60c60hwh120cc -60o60m60m60a60n60d60swh120cd -60e60a60lwh120cw -60i60t60hwh120cw -60i60n60d60o60w60s60,wh120cj -60u60s60twh120ct -60y60p60en120 0 -H720 -V5976 -h360c" -60@60b60[60E60S60C60-60?60]60@60t60[60w60i60n60d60o60w60]60@60b60[60E60S60C60]60"60.n120 0 -H720 -f1 -V6156 -cT -61h50ew73r33e44g50u50l28a44rw62e44x50p50r33e44s39s39i28o50nwf5 -79(60.60+60\60n60)60+wf1 -89m78a44t28c44h50e44sw68o50n50ew73o50rw63m78o50r33ew74l28i28n50e44sw69w72i28t28hw80o50n50ew74o50rw63m78o50r33ew74c44h50a44r33a44c44t28e44r33sw69e44a44c44h50,w55t28h50a44tw58i28s39,w55t28h50en120 0 -H720 -V6276 -ct -28e44x50twh197cb -50e44t28w72e44e44nwh219cb -50l28a44n50kwh219cl -28i28n50e44s39,wh194cs -39owf5 -h219c, -60x60/60(60.60+60\60n60)60+60/wf1 -h228ce -44x50t28r33a44c44t28swh207ce -44a44c44hwh218cd -50e44s39c44r33i28p50t28i28o50n50;wh196ct -28h50e44nn120 0 -H720 -f5 -V6396 -cg -60/60c60o60m60m60a60n60d60 60n60a60m60e60=60"60a60p60r60o60p60o60s60"60/wf1 -85s39e44l28e44c44t28sw64t28h50ew69d50e44s39c44r33i28p50t28i28o50nw75f33o50rw58`33a44p50r33o50p50o50s39'w58a44n50dwf5 -75pwf1 -85p50r33i28n50t28sw64i28t28.n120 0 -H720 -V6552 -h250cI -33m78a44g50i28n50ew70t28h50a44tw54w72ew70h50a44dw76aw70Cw93p50r33o50g50r33a44mwh104cc -44o50n50t28a44i28n50i28n50gw76t28h50ew70v50a44r33i28a44b50l28ewf5 -70nf1 -60,w51b50u50tw54w72ew70w72a44n50t28e44dw77t28ow77c44h50a44n50g50ew71i28tw55t28owf5 -77n60u60mf1 -60.w77T61h50i28sn120 0 -H720 -V6672 -cc -44o50m78m78a44n50dw75i28sw64aw69f33i28r33s39tw53c44u50t28:n120 0 -H720 -x font 0 CI -f0 -V6852 -h360c, -60x60/60n60/wh120cc -60/60n60u60m60/n120 0 -H720 -f1 -V7032 -cb -50u50tw54i28sw65o50b50v50i28o50u50s39l28yw76f33l28a44w72e44d50:w54i28tw54w72i28l28lw54c44h50a44n50g50ew70a44l28lwf5 -54nf1 -60'33sw65i28nw76t28h50ew70f33i28l28e44,w51n50o50tw54j28u50s39tw54t28h50ewf2 -70i28d50e44n50t28i28f28i28e44rwf5 -65nf1 -60.w76Aw98b50e44t28t28e44rw59s39o50l28u50t28i28o50nw77i28sw66t28ow77u50s39en120 0 -H720 -V7152 -ca -44nwf5 -75xwf1 -85c44o50m78m78a44n50dw75t28ow75e44x50t28r33a44c44tw53t28h50ew69i28d50e44n50t28i28f33i28e44r33s39,w50a44n50dw75t28h50e44nw75u50s39ewf5 -69gwf1 -85t28ow75f33i28n50dw75t28h50ewf5 -69nf1 -60'33s39:n120 0 -V7920 -p9 -x font 1 R -x font 2 I -x font 3 B -x font 4 BI -x font 5 CW -x font 6 H -x font 7 HI -x font 8 HB -x font 9 S1 -x font 10 S -s10 -f1 -H720 -V480 -h2077Chy -w33 259w50 h25Chy -wn120 0 -H720 -x font 0 CI -f0 -V900 -h360c, -60x60/60[60a60-60z60A60-60Z60_60]60[60a60-60z60A60-60Z60_60060-60960]60*60/wh120cg -60/60n60/wh120cv -60/60.60.60/wh120cc -60/60n60u60m60/n120 0 -H720 -f1 -V1080 -cI -33tw59l28o50o50k50sw70a44w72f33u50l28,w56b50u50tw59i28t28'33sw70f33a44i28r33l28yw81e44a44s39yw81t28ow81u50n50d50e44r33s39t28a44n50dw81w72h50e44nw81r33e44a44dw81l28e44f33tw60t28ow82r33i28g50h50t28.w82Awh104cC -w99i28d50e44n50t28i28f33i28e44rw65i28sw71a44nw82a44l28p50h50a44b50e44t28i28cw76o50rn120 0 -H720 -V1200 -cu -50n50d50e44r33s39c44o50r33ew75f33o50l28l28o50w72e44dw81b50yw81z44e44r33ow81o50rw63m78o50r33ew74a44l28p50h50a44n50u50m78e44r33i28c44sw69o50rw63u50n50d50e44r33s39c44o50r33e44s39,w55t28h50a44tw58i28s39,w55m78a44t28c44h50e44sw69o50fw63t28h50ew74r33e44g50u50l28a44rw63e44x50p50r33e44sh39Chy -n120 0 -H720 -V1320 -cs -39i28o50nwf5 -80[60a60-60z60A60-60Z60_60]60[60a60-60z60A60-60Z60_60060-60960]60*f1 -60.w80T61h50ewf5 -74gwf1 -90c44o50m78m78a44n50dw80s39e44l28e44c44t28sw69t28h50o50s39ew74i28d50e44n50t28i28f33i28e44r33sw69c44o50n50t28a44i28n50i28n50gwf5 -80nf1 -60,w55a44n50dw80t28h50ewf5 -75vwf1 -91i28sn120 0 -H720 -V1440 -ca -w76t28r33i28c44k50:w60i28tw60r33e44j28e44c44t28sw71t28h50o50s39ew76i28d50e44n50t28i28f33i28e44r33sw70c44o50n50t28a44i28n50i28n50gw81m78o50r33ew75t28h50a44nw81o50n50ew75c44h50a44r33a44c44t28e44r33.w81H72e44n50c44ew75t28h50ewf5 -75c60/60n60u60m60/wf1 -91a44p50p50l28i28e44sw70o50n50l28yw81t28on120 0 -H720 -V1560 -cf -33r33e44e44-33s39t28a44n50d50i28n50gwf5 -75nf1 -60'33s39.n120 0 -H720 -V1716 -h250cT -61h50e44r33ew73i28sw68s39t28i28l28lw57aw73p50r33o50b50l28e44mwh107ch -50e44r33e44:w57w72ew73d50o50n50'33tw57w72a44n50tw57t28ow79c44h50a44n50g50ewf5 -73nf1 -60'33sw68t28h50a44tw58a44r33ew74p50a44r33tw58o50fw63t28h50ew74c44h50a44r33a44c44t28e44rw63c44o50n50s39t28a44n50twf5 -58\60nf1 -60.n120 0 -H720 -V1836 -cT -61h50e44r33ew70i28sw65aw70c44o50m78m78a44n50dwf5 -76yf1 -60,w51c44o50m78p50l28e44m78e44n50t28a44r33yw76t28owf5 -76xf1 -60,w51t28h50a44tw54i28sw65j28u50s39tw53w72h50a44tw53w72ew69n50e44e44d50:wf5 -88y60/f2 -60p50a50t28t28e44r39nf5 -50/f2 -60c44o50m72m72a50n50dwf1 -75r33u50n50sw64t28h50ew69c44o50mh78Chy -n120 0 -H720 -V1956 -cm -78a44n50dw83o50nw83t28h50ew78p50i28e44c44e44sw73o50fw67t28e44x50twf2 -62b50e44t28w67e44e44nwf1 -84m78a44t28c44h50e44sw73o50fw67t28h50ew78p50a44t28t28e44r33n50;w62i28fwf5 -67xwf1 -94s39e44l28e44c44t28s39,wf5 -59ywf1 -94r33e44j28e44c44t28s39.w84H72e44r33ew78i28sw73t28h50ew78f33i28n50a44lw62c44o50mh78Chy -n120 0 -H720 -V2076 -cm -78a44n50d50:n120 0 -H720 -x font 0 CI -f0 -V2256 -h360c, -60y60/60\60\60n60/wh120cx -60/60[60a60-60z60A60-60Z60_60]60[60a60-60z60A60-60Z60_60060-60960]60*60/wh120cg -60/60n60/wh120cv -60/60.60.60/wh120cc -60/60n60u60m60/n120 0 -H720 -f1 -V2436 -cT -61h50ewf5 -78y60/60\60\60n60/wf1 -94(33w72i28t28hw85b50a44c44k50s39l28a44s39hw85d50o50u50b50l28e44dw85t28ow85m78a44k50ew79i28tw63aw79l28i28t28e44r33a44lw63c44h50a44r33a44c44t28e44r33)w68r33e44m78o50v50e44sw74t28h50ew79t28w72o50-33c44h50a44r33a44c44t28e44rw68s39e44q50u50e44n50c44en120 0 -H720 -f5 -V2556 -c\ -60nwf1 -91f33r33o50mwh109cc -44o50n50s39i28d50e44r33a44t28i28o50n50,w56s39ow81t28h50ew75r33e44s39tw59o50fw64t28h50ew75c44o50m78m78a44n50dw81w72i28l28lw59n50o50tw59t28o50u50c44hw81i28t28.w81T61h50e44r33ew75i28sw70m78o50r33ew75w72ew75c44o50u50l28dw81d50ow81h50e44r33e44;w59f33o50rn120 0 -H720 -V2676 -ce -44x50a44m78p50l28e44,w55a44n50o50t28h50e44rwf5 -63ywf1 -90c44o50u50l28dw80b50ew74p50r33e44f33i28x50e44dw80t28ow80p50r33o50t28e44c44tw58c44o50m78m78e44n50t28sw69i28nw80t28h50ew74c44o50d50e44.w80Iw63w72o50n50'33tw58e44l28a44b50o50r33a44t28ew74t28h50ew74e44x50a44m78p50l28ew75a44n50yn120 0 -H720 -V2796 -cf -33u50r33t28h50e44r33,w60b50u50tw63y50o50uw85s39h50o50u50l28dw85h50a44v50ew79a44nw85i28d50e44aw79o50fw68t28h50ew79w72a44yw85i28nw85w72h50i28c44hw85t28h50ew79l28o50o50p50i28n50gw84a44n50dw84c44o50n50d50i28t28i28o50n50a44lw62c44o50m78m78a44n50d50sw73i28nwf5 -84s60a60mn120 0 -H720 -f1 -V2916 -cm -78a44yw75b50ew69c44o50m78p50o50s39e44dw75t28ow75d50ow75i28n50t28e44r33e44s39t28i28n50gw75t28h50i28n50g50s39.n120 0 -H720 -f3 -V3156 -cG -78r44o50u56p56i28n56gn120 0 -H720 -f1 -V3312 -h250cT -61h50e44r33ew82i28sw77a44n50o50t28h50e44rw72w72a44yw89t28ow89a44r33r33a44n50g50ew83c44o50m78m78a44n50d50s39.w89B67yw89e44n50c44l28o50s39i28n50gw89t28h50e44mwh117ci -28nw89b50r33a44c44ew83b50r33a44c44k50e44t28swf5 -78{60}f1 -60,w64c44o50m78m78a44n50d50sn120 0 -H720 -V3432 -cm -78a44yw82b50ew76a44p50p50l28i28e44dw82i28nw82p50a44r33a44l28l28e44l28.w82T61h50i28sw70e44x50a44m78p50l28ew75u50s39e44sw70t28h50ewf5 -75=wf1 -91c44o50m78m78a44n50d50,w56w72h50i28c44hw81r33e44p50o50r33t28sw70t28h50ew75l28i28n50ew75a44n50dw81c44h50a44r33a44c44t28e44rw64n50u50mh78Chy -n120 0 -H720 -V3552 -cb -50e44r33sw64o50fw58d50o50t28,w50t28o50g50e44t28h50e44rw58w72i28t28hwf5 -75pf1 -60,w50t28ow75r33e44p50o50r33tw53o50nw75a44p50p50e44a44r33a44n50c44e44sw64o50fwf5 -58E60m60a60c60swf1 -85i28nw75o50u50rw58o50r33i28g50i28n50a44lw53f33i28l28e44:n120 0 -H720 -x font 0 CI -f0 -V3732 -h360c, -60pn120 0 -H720 -f5 -V3852 -h360cT -60h60i60swh120cm -60a60n60u60a60lwh120ci -60swh120co -60r60g60a60n60i60z60e60dwh120ci -60nwh120ca -wh120cr -60a60t60h60e60rwh120ch -60a60p60h60a60z60a60r60dwh120cm -60a60n60n60e60r60.wh180cT -60h60ewh120cf -60i60r60s60tn120 0 -H720 -V3972 -h360cs -60e60v60e60r60a60lwh120cs -60e60c60t60i60o60n60swh120cw -60e60r60ewh120cw -60r60i60t60t60e60nwh120ch -60a60s60t60i60l60ywh120ci -60nwh120ca -60nwh120ca -60t60t60e60m60p60twh120ct -60owh120cp -60r60o60v60i60d60ewh120ca -n120 0 -H720 -V4092 -h360cg -60e60n60e60r60a60lwh120ci -60n60t60r60o60d60u60c60t60i60o60nwh120ct -60owh120ct -60h60ewh120cc -60o60m60m60a60n60d60swh120ci -60nwh120cE -60m60a60c60swh120ca -60n60dwh120ct -60owh120ct -60r60ywh120ct -60owh120cs -60h60o60wn120 0 -H720 -V4212 -h360ct -60h60ewh120cm -60e60t60h60o60dwh120ci -60nwh120ct -60h60ewh120cm -60a60d60n60e60s60swh120ct -60h60a60twh120ci -60swh120ct -60h60ewh120cE -60m60a60c60swh120cc -60o60m60m60a60n60dwh120cs -60t60r60u60c60t60u60r60e60.n120 0 -H720 -x font 0 CI -f0 -V4332 -h360c, -60x60/60E60m60a60c60s60/60{n120 0 -H720 -V4452 -h610c= -n120 0 -H720 -V4572 -h610c+ -60-60pn120 0 -H720 -V4692 -h360c} -n120 0 -H720 -f5 -V4812 -h360c3 -60;wh120c# -60160760160,60#601607606n120 0 -H720 -V4932 -h360cg -60e60n60e60r60a60lwh120ci -60n60t60r60o60d60u60c60t60i60o60nwh120ct -60owh120ct -60h60ewh120cc -60o60m60m60a60n60d60swh120ci -60nwh120cE -60m60a60c60swh120ca -60n60dwh120ct -60owh120ct -60r60ywh120ct -60owh120cs -60h60o60wn120 0 -H720 -V5052 -h360c4 -60;wh120c# -60260360460,60#602603609n120 0 -H720 -V5172 -h360ct -60h60ewh120cm -60e60t60h60o60dwh120ci -60nwh120ct -60h60ewh120cm -60a60d60n60e60s60swh120ct -60h60a60twh120ci -60swh120ct -60h60ewh120cE -60m60a60c60swh120cc -60o60m60m60a60n60dwh120cs -60t60r60u60c60t60u60r60e60.n120 0 -H720 -f1 -V5352 -c( -33T61h50ew79n50u50m78b50e44rw68b50e44f33o50r33ew79t28h50ew79s39e44m78i28c44o50l28o50nw85i28sw74t28h50ew79l28i28n50ew79n50u50m78b50e44r33;w64t28h50ew80n50u50m78b50e44r33sw75b50e44g50i28n50n50i28n50gw86w72i28t28hwf5 -86#wf1 -96a44r33ew80c44h50a44r33a44c44t28e44rw69n50u50mh78Chy -n120 0 -H720 -V5472 -cb -50e44r33s39.25)w91A72sw72aw77m78o50r33ew77i28n50t28e44r33e44s39t28i28n50gw83e44x50a44m78p50l28e44,w58c44o50n50s39i28d50e44rw66c44h50a44n50g50i28n50gw83a44l28lw61o50c44c44u50r33r33e44n50c44e44sw71o50fwf5 -65E60m60a60c60swf1 -92t28owf5 -82v60iwf1 -92a44n50dw82v50i28c44ew76v50e44r33s39a44.n120 0 -H720 -V5592 -cW -94ew69c44a44nw75t28y50p50en120 0 -H720 -x font 0 CI -f0 -V5772 -h360c, -60x60/60E60m60a60c60s60|60v60i60/60{n120 0 -H720 -V5892 -h610cg -60/60E60m60a60c60s60/wh120cc -60/60v60i60/n120 0 -H720 -V6012 -h610cg -60/60v60i60/wh120cc -60/60E60m60a60c60s60/n120 0 -H720 -V6132 -h360c} -n120 0 -H720 -f1 -V6312 -co -50rw58e44v50e44nn120 0 -H720 -x font 0 CI -f0 -V6492 -h360c, -60x60/60[60a60-60z60A60-60Z60]60+60/60{n120 0 -H720 -V6612 -h610cg -60/60E60m60a60c60s60/wh120cv -60/60.60.60.60.60.60.60/wh120cc -60/60v60i60/n120 0 -H720 -V6732 -h610cg -60/60v60i60/wh120cv -60/60.60.60.60/wh120cc -60/60E60m60a60c60s60/n120 0 -H720 -V6852 -h360c} -n120 0 -H720 -f1 -V7032 -ct -28ow75m78a44k50ew69s39u50r33ew69w72ew69d50o50n50'33tw53c44h50a44n50g50ew69s39t28r33i28n50g50sw64e44m78b50e44d50d50e44dw75i28nw75w72o50r33d50s39.n120 0 -V7920 -p10 -x font 1 R -x font 2 I -x font 3 B -x font 4 BI -x font 5 CW -x font 6 H -x font 7 HI -x font 8 HB -x font 9 S1 -x font 10 S -s10 -f1 -H720 -V480 -h2052Chy -w33 251500w50 h25Chy -wn120 0 -H720 -f3 -V840 -cM -94u56l28t33i28p56l28ew69C72h56a50n56g50e44sn120 0 -H720 -f1 -V996 -h250cY -72o50uw89m78i28g50h50tw67w72o50n50d50e44rw72w72h50y50,w64o50n50c44ewf5 -83E60m60a60c60swf1 -99h50a44sw78b50e44e44nw89c44h50a44n50g50e44dw89t28owf5 -89v60iwf1 -99i28nw90t28h50ew84a44b50o50v50ew84e44x50a44m78p50l28e44,w65t28h50ew84s39e44c44o50n50dn120 0 -H720 -V1116 -cc -44o50m78m78a44n50dw89i28nw89t28h50ew83b50r33a44c44e44sw78d50o50e44s39n50'33tw67p50u50tw67i28tw67b50a44c44kw89a44g50a44i28n50.w89T61h50ew83r33e44a44s39o50nw88i28sw77t28h50a44tw66t28h50ew82c44o50m78m78a44n50d50sw77a44r33ew82r33u50nw88i28nw88p50a44r33a44l28l28e44l28:n120 0 -H720 -V1236 -cw -72i28t28h50i28nw85a44n50yw85t28o50p50-33l28e44v50e44lwf5 -63s60a60mwf1 -95c44o50m78m78a44n50d50,w60a44l28lw63c44h50a44n50g50e44sw74t28ow85t28h50ew79f33i28l28ew79r33e44f33e44rw68t28ow85t28h50ew79s39t28a44t28ew79o50fw68t28h50ew79f33i28l28ew79b50e44f33o50r33ew79a44n50yw85o50fw69t28h50en120 0 -H720 -V1356 -cc -44h50a44n50g50e44sw66i28nw77t28h50a44tw54c44o50m78m78a44n50dw76a44r33ew70m78a44d50e44.w76A72f33t28e44rw59a44l28lw54t28h50ew70c44h50a44n50g50e44sw65h50a44v50ew70b50e44e44nw76d50e44t28e44r33m78i28n50e44d50,w51t28h50e44yw76a44r33ew70a44l28lw54a44p50p50l28i28e44dw76s39i28m78u50lh28Chy -n120 0 -H720 -V1476 -ct -28a44n50e44o50u50s39l28y50.n120 0 -H720 -V1632 -h250cT -61h50i28sw79m78e44a44n50s39,w65a44sw80m78e44n50t28i28o50n50e44d50,w66t28h50a44tw69c44o50m78m78a44n50d50sw80w72i28t28h50i28nw91aw85c44o50m78p50o50u50n50dw91c44o50m78m78a44n50dw91s39e44ew85t28h50ew85s39t28a44t28ew85o50fw74t28h50ew85f33i28l28en120 0 -H720 -V1752 -cb -50e44f33o50r33ew93a44n50yw99o50fw82t28h50ew93c44h50a44n50g50e44sw88a44p50p50l28y50.w99T61h50i28sw88m78e44t28h50o50dw99o50fw82e44v50a44l28u50a44t28i28o50nw99m78a44k50e44sw88s39o50m78ew93t28h50i28n50g50sw88e44a44s39i28e44rw82(33s39u50c44hw99a44sw87t28h50en120 0 -H720 -V1872 -ce -44x50c44h50a44n50g50ew70o50fwf5 -59E60m60a60c60swf1 -86a44n50dwf5 -76v60if1 -60)33,w51a44n50dw76s39o50m78ew70t28h50i28n50g50sw65h50a44r33d50e44r33.w76F56o50rw59i28n50s39t28a44n50c44e44,w51i28tw54i28sw65i28m78p50o50s39s39i28b50l28ew71t28ow77u50s39ew71awf5 -71pwf1 -87c44o50m78m78a44n50dw77t28on120 0 -H720 -V1992 -cp -50r33i28n50tw54t28h50ew70c44h50a44n50g50e44sw65a44sw65t28h50e44yw76h50a44p50p50e44n50,w51b50e44c44a44u50s39ew70t28h50e44yw76h50a44v50e44n50'33tw54h50a44p50p50e44n50e44dw76w72h50e44nw76t28h50ewf5 -70pwf1 -86i28sw65e44x50e44c44u50t28e44d50.w76A72nw75i28n50d50i28r33e44c44tw53r33a44m78ih28Chy -n120 0 -H720 -V2112 -cf -33i28c44a44t28i28o50nw75i28sw64t28h50a44tw53c44h50a44n50g50e44sw64m78u50s39tw53o50c44c44u50rw58i28nw75f33o50r33w72a44r33dw75o50r33d50e44rw58t28h50r33o50u50g50hw75t28h50ew69f33i28l28e44,w50a44n50dw75m78u50s39tw53n50o50tw53o50v50e44r33l28a44p50.n120 0 -H720 -f3 -V2352 -cU -72n56i28xn120 0 -H720 -f5 -V2508 -h250cs -60a60mwf1 -87h50a44sw66aw71f33e44ww99c44o50m78m78a44n50d50sw66t28ow77c44o50n50n50e44c44tw55t28ow77U72n50i28xw77p50r33o50c44e44s39s39e44s39.w77T61h50ew71s39i28m78p50l28e44s39tw55i28swf5 -66!f1 -60,w52w72h50i28c44hw77r33u50n50sw66t28h50ew72c44o50m78m78a44n50dn120 0 -H720 -V2628 -cw -72i28t28hw75i28n50p50u50tw53a44n50dw75o50u50t28p50u50tw53c44o50n50n50e44c44t28e44dw75t28ow75t28h50ew69t28e44r33m78i28n50a44l28.n120 0 -H720 -x font 0 CI -f0 -V2808 -h360c! -60d60a60t60en120 0 -H720 -f5 -V2928 -h360cW -60e60dwh120cM -60a60ywh120c2 -608wh120c2 -60360:60260560:602601wh120cE -60D60Twh120c1 -609608606n120 0 -H720 -V3048 -h360c! -n120 0 -H720 -f1 -V3228 -c( -33W94h50e44nw94d50o50w72n50l28o50a44d50e44d50,w69t28h50ew88i28n50p50u50tw72i28sw84c44o50n50n50e44c44t28e44dw95t28owf5 -95/60d60e60v60/60n60u60l60lwf1 -h105ca -44n50dw95o50n50l28yw95t28h50ew89f33i28r33s39tw73f33e44wwh117cl -28i28n50e44sw84o50fw78o50u50t28p50u50tw73a44r33en120 0 -H720 -V3348 -cp -50r33i28n50t28e44d50;w59a44n50yw81o50v50e44r33f33l28o50wwh103ci -28sw70s39t28o50r33e44dw81i28nwf5 -81$60H60O60M60E60/60s60a60m60.60e60r60rf1 -60.25)w89T61h50ew75f33i28n50a44lwf5 -58!wf1 -90i28sw69aw74p50r33o50m78p50tw58t28ow80i28n50d50i28c44a44t28ew74w72h50e44nw80t28h50ew74c44o50mh78Chy -n120 0 -H720 -V3468 -cm -78a44n50dw75c44o50m78p50l28e44t28e44s39.n120 0 -H720 -V3624 -h250cS -56l28i28g50h50t28l28yw87m78o50r33ew81i28n50t28e44r33e44s39t28i28n50gw87i28swf5 -76>f1 -60,w62w72h50i28c44hw87p50r33o50v50i28d50e44sw76t28h50ew81c44u50r33r33e44n50tw65t28e44x50tw66a44sw77s39t28a44n50d50a44r33dw88i28n50p50u50tw66t28ow88t28h50ew82U72n50i28xw88c44o50mh78Chy -n120 0 -H720 -V3744 -cm -78a44n50d50:n120 0 -H720 -x font 0 CI -f0 -V3924 -h360c1 -60,602wh120c> -60w60cn120 0 -H720 -wf5 -V4044 -h720c2 -wh480c2 -602wh420c1 -603601n120 0 -H720 -V4164 -h360c! -n120 0 -H720 -f1 -V4344 -cT -61h50ew71c44o50m78p50l28e44m78e44n50tw55o50fwf5 -60>wf1 -87i28s39,w53n50a44t28u50r33a44l28l28y50,wf5 -53<f1 -60:w56i28tw56r33e44p50l28a44c44e44sw67t28h50ew72c44u50r33r33e44n50tw56t28e44x50tw56w72i28t28hw78t28h50ew72s39t28a44n50d50a44r33dw78o50u50t28p50u50tw56o50fw61t28h50ew72U72n50i28xw78c44o50mh78Chy -n120 0 -H720 -V4464 -cm -78a44n50d50:n120 0 -H720 -x font 0 CI -f0 -V4644 -h360c1 -wh120c< -60d60a60t60en120 0 -H720 -f5 -V4764 -h360c! -n120 0 -H720 -x font 0 CI -f0 -V4884 -h360c1 -60pn120 0 -H720 -f5 -V5004 -h360cW -60e60dwh120cM -60a60ywh120c2 -608wh120c2 -60360:60260660:604604wh120cE -60D60Twh120c1 -609608606n120 0 -H720 -f1 -V5184 -cT -61h50ew71l28a44s39tw55c44o50m78m78a44n50dw77i28swf5 -66|f1 -60,w52w72h50i28c44hw77i28sw66aw71c44o50m78b50i28n50a44t28i28o50nw77o50fwf5 -60<wf1 -87a44n50dwf5 -77>f1 -60:w55t28h50ew71c44u50r33r33e44n50tw55t28e44x50tw55i28sw66p50r33o50v50i28d50e44dw77a44sw66s39t28a44n50d50a44r33dw78i28n50p50u50tw56t28on120 0 -H720 -V5304 -ct -28h50ew76U72n50i28xw82c44o50m78m78a44n50d50,w57a44n50dw82t28h50ew76U72n50i28xw81c44o50m78m78a44n50d50'33sw70s39t28a44n50d50a44r33dw81o50u50t28p50u50tw59i28sw70c44o50l28l28e44c44t28e44dw81a44n50dw81u50s39e44dw81t28ow81r33e44p50l28a44c44ew75t28h50ew75o50r33i28g50i28n50a44ln120 0 -H720 -V5424 -ct -28e44x50t28.w75F56o50rw58e44x50a44m78p50l28e44,n120 0 -H720 -x font 0 CI -f0 -V5604 -h360c, -60|wh120cs -60o60r60tn120 0 -H720 -f1 -V5784 -cr -33u50n50swf5 -65s60o60r60tf1 -60(33150)w59o50nw76t28h50ew70f33i28l28e44,w51s39o50r33t28i28n50gw76t28h50ew70l28i28n50e44sw65o50fw59t28h50ew70t28e44x50tw54l28e44x50i28c44o50g50r33a44p50h50i28c44a44l28l28y50.w76N72o50t28ew70t28h50a44twf5 -54<f1 -60,wf5 -52>wf1 -87a44n50dwf5 -77|wf1 -87a44r33ewf5 -71s60a60mwf1 -87c44o50mh78Chy -n120 0 -H720 -V5904 -cm -78a44n50d50s39,w50n50o50tw53U72n50i28xw75s39h50e44l28lw53o50p50e44r33a44t28o50r33s39.n120 0 -H720 -V6060 -h250cT -61h50ew69n50e44x50tw53e44x50a44m78p50l28ew69c44o50n50v50e44r33t28sw64a44l28lw53a44p50p50e44a44r33a44n50c44e44sw64o50fwf5 -58E60m60a60c60swf1 -85t28ow75u50p50p50e44rw58c44a44s39ew69u50s39i28n50gwf5 -75t60rf1 -60(33150)33:n120 0 -H720 -x font 0 CI -f0 -V6240 -h360c, -60x60/60E60m60a60c60s60/wh120c| -wh120ct -60rwh120ca -60-60zwh120cA -60-60Zn120 0 -H720 -f5 -V6420 -ct -60rwf1 -88i28sw67r33u50nw78o50n50c44ew72f33o50rw61e44a44c44hw78o50c44c44u50r33r33e44n50c44ew72o50fwf5 -61E60m60a60c60sf1 -60.w78O72fw61c44o50u50r33s39e44,w53y50o50uw78c44o50u50l28dw78d50ow78t28h50i28sw67e44x50a44m78p50l28ew73m78o50r33ew73e44f33f33i28c44i28e44n50t28l28yw79w72i28t28hn120 0 -H720 -V6540 -ca -w76s39i28m78p50l28ewf5 -76cwf1 -92c44o50m78m78a44n50d50,w57b50u50tw60h50e44r33e44'33sw71aw76t28r33i28c44k50i28e44rw65o50n50e44:w60g50i28v50e44nw82aw76U72n50i28xw82m78a44i28lw60b50o50xw82a44sw71i28n50p50u50t28,w57c44o50n50v50e44r33tw60a44l28lw59t28h50ewf5 -75S60u60b60j60e60c60tn120 0 -H720 -f1 -V6660 -ch -50e44a44d50e44r33sw64t28ow75d50i28s39t28i28n50c44tw53f33o50r33t28u50n50e44s39:n120 0 -H720 -x font 0 CI -f0 -V6840 -h360c, -60x60/60^60S60u60b60j60e60c60t60:60.60*60\60n60/wh120cx -60/60[60^60:60]60*60\60n60/wh120c< -wh120c/ -60u60s60r60/60g60a60m60e60s60/60f60o60r60t60u60n60en120 0 -H720 -f1 -V7020 -c( -33T61h50ew91r33e44g50u50l28a44rw80e44x50p50r33e44s39s39i28o50nwf5 -97[60^60:60]wf1 -h107cr -33e44f33e44r33sw86t28ow97a44n50yw97c44h50a44r33a44c44t28e44rwf2 -80e44x44c44e44p50twf5 -75:wf1 -h108ca -44n50dw98n50e44w72l28i28n50e44;w76t28h50ew92n50e44g50a44t28i28o50nw98o50p50e44r33a44t28o50rwf5 -81^n120 0 -H720 -f1 -V7140 -ce -44x50c44l28u50d50e44sw88n50e44w72l28i28n50ew93f33r33o50mwh127ct -28h50ew93l28i28s39tw77o50fw82c44h50a44r33a44c44t28e44r33s39.25)w82A72g50a44i28n50,wf5 -74/60u60s60r60/60g60a60m60e60s60/60f60o60r60t60u60n60ewf1 -h109ci -28sw88r33u50nw99o50n50c44ew93f33o50rw82e44a44c44hn120 0 -H720 -f5 -V7260 -cS -60u60b60j60e60c60twf1 -85l28i28n50e44,w50s39ow75e44a44c44hwf5 -75S60u60b60j60e60c60twf1 -85l28i28n50ew69i28sw64c44h50a44n50g50e44dw75t28ow75aw69d50i28f33f33e44r33e44n50tw53f33o50r33t28u50n50e44.n120 0 -V7920 -p11 -x font 1 R -x font 2 I -x font 3 B -x font 4 BI -x font 5 CW -x font 6 H -x font 7 HI -x font 8 HB -x font 9 S1 -x font 10 S -s10 -f1 -H720 -V480 -h2052Chy -w33 25150150 h25Chy -wn120 0 -H720 -f3 -V840 -cA -w97f33e44ww97o50t33h56e44rw69t33e44x50tw58c44o50m83m83a50n56d56sn120 0 -H720 -f1 -V996 -h250cF -56o50rw71c44o50m78p50l28e44t28e44n50e44s39s39,w63Iw71s39h50o50u50l28dw88m78e44n50t28i28o50nw88t28h50r33e44ew82o50t28h50e44rw71c44o50m78m78a44n50d50sw78t28h50a44tw67m78a44n50i28p50u50l28a44t28ew83t28e44x50t28.w89T61h50ewf5 -83mwf1 -99c44o50m78m78a44n50dn120 0 -H720 -V1116 -cm -78o50v50e44sw64t28h50ew69c44u50r33r33e44n50tw53t28e44x50tw53t28ow75a44f33t28e44rw58t28h50ew69t28e44x50tw53s39p50e44c44i28f33i28e44dw75b50yw75t28h50ew69(33o50b50l28i28g50a44t28o50r33y50)w58a44d50d50r33e44s39sw64a44f33t28e44rw58t28h50ew69c44o50m78m78a44n50d50.w75T61h50u50sn120 0 -H720 -x font 0 CI -f0 -V1296 -h360c/ -60E60m60a60c60s60/60+60-wh120cm -wh120c0 -n120 0 -H720 -f1 -V1476 -cm -78o50v50e44sw65t28h50ew70n50e44x50tw54l28i28n50ew70c44o50n50t28a44i28n50i28n50gwf5 -76E60m60a60c60swf1 -86t28ow76t28h50ew70b50e44g50i28n50n50i28n50gw76o50fw59t28h50ew70f33i28l28e44.w76S56i28m78i28l28a44r33l28y50,wf5 -51twf1 -86(33a44n50o50t28h50e44rw60h50i28s39t28o50r33i28cw71c44h50a44r33a44c44t28e44r33)n120 0 -H720 -V1596 -cc -44o50p50i28e44sw64t28h50ew69t28e44x50t28:n120 0 -H720 -x font 0 CI -f0 -V1776 -h360c/ -60E60m60a60c60s60/60+60-wh120ct -wh120c0 -n120 0 -H720 -f1 -V1956 -cw -72o50u50l28dw75m78a44k50e44,w50a44tw53t28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58t28h50ew69f33i28l28e44,w50aw69c44o50p50yw75o50fw58t28h50ew69n50e44x50tw53l28i28n50ew69c44o50n50t28a44i28n50i28n50gwf5 -75E60m60a60c60sf1 -60.n120 0 -H720 -V2112 -h250cT -61h50ewh163ct -28h50i28r33dwh169cc -44o50m78m78a44n50dwh169ci -28swh158cm -78o50r33ewh163ci -28n50t28e44r33e44s39t28i28n50g50:wh147ci -28twh148cm -78a44k50e44swh159cs -39u50b50s39t28i28t28u50t28i28o50n50s39.wh170cI -33t28swh159cs -39y50n50t28a44xwh170ci -28sn120 0 -H720 -f5 -V2232 -cs -60/f2 -60p50a50t28t28e44r39nf5 -50/f2 -60r39e44p50l28a50c44e44m72e44n50tf5 -28/f1 -60.w78W94i28t28h50i28nw78t28h50ew72c44u50r33r33e44n50tw55t28e44x50t28,w52i28tw55f33i28n50d50sw66t28h50ew71f33i28r33s39tw55o50c44c44u50r33r33e44n50c44ew71o50fw60t28h50ew71p50a44t28t28e44r33nw77a44n50dw77r33e44p50l28a44c44e44sw66i28tn120 0 -H720 -V2352 -cb -50yw75t28h50ew69r33e44p50l28a44c44e44m78e44n50tw53t28e44x50t28,w50l28e44a44v50i28n50gw75d50o50tw53s39e44tw53t28ow75t28h50ew69e44n50t28i28r33ew69a44d50d50r33e44s39sw64o50fw58t28h50ew69s39u50b50s39t28i28t28u50t28i28o50n50.n120 0 -H720 -x font 0 CI -f0 -V2532 -h360c1 -60pn120 0 -H720 -f5 -V2652 -h360cT -60h60i60swh120cm -60a60n60u60a60lwh120ci -60swh120co -60r60g60a60n60i60z60e60dwh120ci -60nwh120ca -wh120cr -60a60t60h60e60rwh120ch -60a60p60h60a60z60a60r60dwh120cm -60a60n60n60e60r60.wh180cT -60h60ewh120cf -60i60r60s60tn120 0 -H720 -x font 0 CI -f0 -V2772 -h360cs -60/60h60a60p60h60a60z60a60r60d60/60t60h60o60u60g60h60t60l60e60s60s60/n120 0 -H720 -V2892 -h360cp -n120 0 -H720 -f5 -V3012 -h360cT -60h60i60swh120cm -60a60n60u60a60lwh120ci -60swh120co -60r60g60a60n60i60z60e60dwh120ci -60nwh120ca -wh120cr -60a60t60h60e60rwh120ct -60h60o60u60g60h60t60l60e60s60swh120cm -60a60n60n60e60r60.wh180cT -60h60ewh120cf -60i60r60s60tn120 0 -H720 -f1 -V3192 -cO -72c44c44u50r33r33e44n50c44e44sw64o50fw58t28h50ew69c44h50a44r33a44c44t28e44rwf5 -58&wf1 -85i28nw75t28h50ew69r33e44p50l28a44c44e44m78e44n50tw53t28e44x50tw53s39t28a44n50dw75f33o50rw58t28h50ew69t28e44x50tw53m78a44t28c44h50i28n50gw75t28h50ew69p50a44t28t28e44r33n50.n120 0 -H720 -x font 0 CI -f0 -V3372 -h360cs -60/60T60/60"60&60&60&60&60"60/n120 0 -H720 -V3492 -h360cp -n120 0 -H720 -f5 -V3612 -h360c" -60T60T60T60T60"60h60i60swh120cm -60a60n60u60a60lwh120ci -60swh120co -60r60g60a60n60i60z60e60dwh120ci -60nwh120ca -wh120cr -60a60t60h60e60rwh120ct -60h60o60u60g60h60t60l60e60s60swh120cm -60a60n60n60e60r60.wh180cT -60h60ewh120cf -60i60r60s60tn120 0 -H720 -f1 -V3792 -cT -61h50e44r33ew69a44r33ew69t28w72ow75v50a44r33i28a44n50t28s39.w75T61h50ew69f33i28r33s39tw53i28sw64t28h50a44tw53aw69n50u50m78b50e44rw58m78a44yw75b50ew69s39p50e44c44i28f33i28e44dw75a44f33t28e44rw58t28h50ewf5 -70sf1 -60,w51t28ow76i28n50d50i28c44a44t28ew70w72h50i28c44hw76o50c44c44u50r33r33e44n50c44en120 0 -H720 -V3912 -co -50fw58t28h50ew69p50a44t28t28e44r33nw75t28ow75s39u50b50s39t28i28t28u50t28e44;w53t28h50ew69d50e44f33a44u50l28tw53i28sw64t28h50ew69f33i28r33s39t28.n120 0 -H720 -x font 0 CI -f0 -V4092 -h360cs -60260/60i60s60/60w60a60s60/n120 0 -H720 -V4212 -h360cp -n120 0 -H720 -f5 -V4332 -h360c" -60T60T60T60T60"60h60i60swh120cm -60a60n60u60a60lwh120cw -60a60swh120co -60r60g60a60n60i60z60e60dwh120ci -60nwh120ca -wh120cr -60a60t60h60e60rwh120ct -60h60o60u60g60h60t60l60e60s60swh120cm -60a60n60n60e60r60.wh180cT -60h60ewh120cf -60i60r60s60tn120 0 -H720 -f1 -V4512 -cT -61h50ew69s39e44c44o50n50dw75i28sw64t28h50a44tw53s39u50f33f33i28x50i28n50gw75awf5 -69gwf1 -85(33g50l28o50b50a44l28)w58c44a44u50s39e44sw64r33e44p50l28a44c44e44m78e44n50tw53o50fw58a44l28lw53o50c44c44u50r33r33e44n50c44e44s39,w50n50o50tw53j28u50s39tw53t28h50ew69f33i28r33s39t28.n120 0 -H720 -x font 0 CI -f0 -V4692 -h360cs -60/60[60a60-60z60A60-60Z60]60/60x60/60gn120 0 -H720 -V4812 -h360cp -n120 0 -H720 -f5 -V4932 -h360c" -60x60x60x60x60"60x60x60xwh120cx -60x60x60x60x60xwh120cx -60x60xwh120cx -60x60x60x60x60x60x60x60xwh120cx -60xwh120cx -wh120cx -60x60x60x60x60xwh120cx -60x60x60x60x60x60x60x60x60x60xwh120cx -60x60x60x60x60x60xwh180cx -60x60xwh120cx -60x60x60x60xn120 0 -H720 -f1 -V5112 -cN -72o50t28i28c44ew69t28h50a44tw53i28nw75a44l28lw53t28h50e44s39ew69e44x50a44m78p50l28e44sw64d50o50tw53i28sw64l28e44f33tw53s39e44tw53t28ow75t28h50ew69e44n50t28i28r33ew69l28i28n50e44.n120 0 -H720 -V5268 -h250c[ -33T61h50ew71s39u50b50s39t28i28t28u50t28ew71c44o50m78m78a44n50dw77i28sw66v50i28t28a44lw55t28owf5 -77e60d60,wf1 -87b50e44c44a44u50s39ew71i28tw55i28sw66t28h50ew71o50n50l28yw78w72a44yw78t28ow78m78a44k50ew72c44h50a44n50g50e44sw67w72i28t28h50i28nw78aw72l28i28n50e44.w78I33tn120 0 -H720 -V5388 -ci -28sw67l28e44s39sw67v50a44l28u50a44b50l28ew72i28nwf5 -78s60a60mf1 -60,w53i28nw78w72h50i28c44hw78t28h50ew72c44o50n50c44e44p50tw56o50fw61aw72l28i28n50ew72i28sw67m78u50c44hw78l28e44s39sw67i28m78p50o50r33t28a44n50t28.w78F56o50rw61e44x50a44m78p50l28e44,w52m78a44n50ywf5 -77e60dwf1 -87s39u50bh50Chy -n120 0 -H720 -V5508 -cs -39t28i28t28u50t28i28o50nw75i28d50i28o50m78sw64a44r33ew69h50a44n50d50l28e44dw75w72e44l28lw53b50ywf5 -75s60a60mf1 -60'33sw64b50a44s39i28cw69c44o50m78m78a44n50d50s39.w50C67o50n50s39i28d50e44rw58t28h50ew69c44o50m78m78a44n50d50sn120 0 -H720 -f5 -V5688 -h360cs -60/60g60o60o60d60/60b60a60d60/n120 0 -H720 -V5808 -h360cs -60/60g60o60o60d60/60/n120 0 -H720 -V5928 -h360cs -60/60g60o60o60d60/60&wh120cb -60y60e60/n120 0 -H720 -f1 -V6108 -cw -72h50i28c44hw75a44r33ew69e44q50u50i28v50a44l28e44n50tw53i28nwf5 -75s60a60mwf1 -85t28on120 0 -H720 -f5 -V6288 -h360c/ -60g60o60o60d60/60c60/60b60a60d60/n120 0 -H720 -V6408 -h360c/ -60g60o60o60d60/60dn120 0 -H720 -V6528 -h360c/ -60g60o60o60d60/60a60/wh120cb -60y60e60/n120 0 -H720 -f1 -V6708 -ca -44n50dw76f33o50rw59w72h50i28c44hw76t28h50ew70c44o50n50t28e44x50tw54s39e44a44r33c44hw76i28sw65l28i28k50e44l28yw76u50n50n50e44c44e44s39s39a44r33yw76b50e44c44a44u50s39ew71t28h50ew71d50e44s39i28r33e44dw77t28e44x50tw55i28sw66a44l28r33e44a44d50yw77d50o50t28.w77A72l28s39o50,w52b50e44w72a44r33en120 0 -H720 -V6828 -ct -28h50i28swf5 -64e60dwf1 -85i28d50i28o50m78:n120 0 -H720 -f5 -V7008 -h360c1 -60,60$60s60/60g60o60o60d60/60b60a60d60/n120 0 -H720 -f1 -V7188 -cw -72h50i28c44hw77c44h50a44n50g50e44sw66t28h50ew71f33i28r33s39twf5 -55g60o60o60dwf1 -87o50nw77e44a44c44hw77l28i28n50e44;w55t28h50ew71s39a44m78ew71c44o50m78m78a44n50dw78i28nwf5 -78s60a60mwf1 -88w72i28l28lw56o50n50l28yw78c44h50a44n50g50ew72t28h50ew72f33i28r33s39tw56o50n50ew72i28nw78t28h50en120 0 -H720 -V7308 -cw -72h50o50l28ew69f33i28l28e44.w75T61h50ew69c44o50r33r33e44c44twf5 -53s60a60mwf1 -85v50e44r33s39i28o50nw75i28sn120 0 -V7920 -p12 -x font 1 R -x font 2 I -x font 3 B -x font 4 BI -x font 5 CW -x font 6 H -x font 7 HI -x font 8 HB -x font 9 S1 -x font 10 S -s10 -f1 -H720 -V480 -h2052Chy -w33 251502w50 h25Chy -wn120 0 -H720 -f5 -V900 -h360c, -60xwh120cs -60/60g60o60o60d60/60b60a60d60/n120 0 -H720 -f1 -V1080 -cb -50u50tw53w72h50a44tw53i28sw64m78o50r33ew69l28i28k50e44l28yw75m78e44a44n50tw53i28sn120 0 -H720 -f5 -V1260 -h360c, -60x60/60g60o60o60d60/wh120cc -60/60b60a60d60/n120 0 -H720 -V1440 -cs -60a60mwf1 -85o50p50e44r33a44t28e44sw64u50n50d50e44rw58d50i28f33f33e44r33e44n50tw53r33u50l28e44s39.25]n120 0 -H720 -f3 -V1680 -cF -61i28l28e44sn120 0 -H720 -f1 -V1836 -h250cS -56ow84f33a44r33,w59w72ew78h50a44v50ew78o50n50l28yw84b50e44e44nw84w72o50r33k50i28n50gw84w72i28t28hw84aw78s39i28n50g50l28ew78f33i28l28e44,w59b50u50twf5 -62s60a60mwf1 -94i28sw73aw78m78u50l28t28i28-33f33i28l28ew79e44d50i28t28o50r33.w85O72n50l28yw85o50n50ew79f33i28l28en120 0 -H720 -V1956 -cm -78a44yw76b50ew70e44d50i28t28e44dw76a44tw54aw70t28i28m78e44,w51b50u50tw54i28tw54i28sw65e44a44s39yw76t28ow76c44h50a44n50g50ew70w72h50i28c44hw76f33i28l28ew70i28sw65t28h50ew70`33c44u50r33r33e44n50t28'w59f33i28l28ew70f33o50rw59e44d50i28t28i28n50g50.w76T61ow76s39e44ew70h50o50ww98t28ow76d50on120 0 -H720 -V2076 -ct -28h50i28s39,w52w72ew71n50e44e44dw77awf5 -71s60a60mwf1 -87w72i28t28hw77aw71f33e44ww99f33i28l28e44s39;w55t28h50ew71e44a44s39i28e44s39tw55w72a44yw77t28ow77d50ow77t28h50i28sw66i28sw66t28ow77s39t28a44r33tw55i28tw55w72i28t28hw77aw71l28i28s39tw56o50fw61U72n50i28xw78f33i28l28ew72n50a44m78e44sw67t28on120 0 -H720 -V2196 -ce -44d50i28t28.n120 0 -H720 -f5 -V2376 -h360c$ -wx font 0 CI -f0 -h120ce -60c60h60owh120c* -60.60m60sn120 0 -H720 -f5 -V2496 -h360cc -60o60n60q60u60e60s60t60.60m60swh120cd -60e60a60t60h60.60m60swh120ce -60m60a60c60s60.60m60swh120cf -60a60m60i60n60e60.60m60swh120cs -60l60a60u60g60h60t60e60r60.60m60sn120 0 -H720 -V2616 -h360c$ -wx font 0 CI -f0 -h120cs -60a60mwh120c- -60dwh120c* -60.60m60sn120 0 -H720 -wf5 -V2736 -h420c- -60.wh120cc -60o60n60q60u60e60s60t60.60m60sn120 0 -H720 -f1 -V2916 -c( -33I33'33mwh105cs -39o50r33r33yw77t28h50ew71H72o50r33s39e44m78e44nw77d50o50n50'33tw55a44p50p50e44a44rw60i28nw77l28i28t28u50r33g50i28c44a44lw56o50r33d50e44r33.25)w86T61h50ew72l28i28n50ew72p50r33i28n50t28e44dw78b50ywf5 -78s60a60mwf1 -88i28sw67a44nw78i28n50d50i28c44a44t28i28o50nw78t28h50a44tw56t28h50en120 0 -H720 -V3036 -cU -72n50i28xw79f33i28l28ewf5 -73c60o60n60q60u60e60s60t60.60m60swf1 -89h50a44sw68b50e44e44nw79r33e44a44d50,w54a44n50dw79i28sw67n50o50wwh100ct -28h50ew72c44u50r33r33e44n50tw56f33i28l28e44.wf5 -78s60a60mwf1 -88d50o50e44sw67n50o50tw56r33e44a44dw78t28h50ew72U72n50i28xw78f33i28l28ew72u50n50t28i28ln120 0 -H720 -V3156 -ct -28h50ew69a44s39s39o50c44i28a44t28e44dwf5 -75s60a60mwf1 -85f33i28l28ew69b50e44c44o50m78e44sw64c44u50r33r33e44n50t28.n120 0 -H720 -V3312 -h250cT -61h50ewf5 -69nwf1 -85c44o50m78m78a44n50dw75p50r33i28n50t28sw64t28h50ew69n50a44m78e44sw64o50fw58a44l28lw53t28h50ew69f33i28l28e44s39:n120 0 -H720 -x font 0 CI -f0 -V3492 -h360cn -n120 0 -H720 -wf5 -V3612 -h420c- -60.wh120cc -60o60n60q60u60e60s60t60.60m60sn120 0 -H720 -wV3732 -h420c- -wh180cd -60e60a60t60h60.60m60sn120 0 -H720 -wV3852 -h420c- -wh180ce -60m60a60c60s60.60m60sn120 0 -H720 -wV3972 -h420c- -wh180cf -60a60m60i60n60e60.60m60sn120 0 -H720 -wV4092 -h420c- -wh180cs -60l60a60u60g60h60t60e60r60.60m60sn120 0 -H720 -f1 -V4272 -cT -61h50i28sw65l28i28s39tw54i28sw65a44l28s39ow76a44v50a44i28l28a44b50l28ew70i28nw76t28h50ew70m78e44n50uw76o50nw76m78o50u50s39ew70b50u50t28t28o50nw76350.w76T61h50ew70c44o50m78m78a44n50dwf5 -76fwf1 -86t28e44l28l28sw65t28h50ew70n50a44m78ew70o50fw59j28u50s39tw54t28h50ew70c44u50r33r33e44n50tn120 0 -H720 -V4392 -cf -33i28l28e44:n120 0 -H720 -x font 0 CI -f0 -V4572 -h360cf -n120 0 -H720 -wf5 -V4692 -h420c- -60.wh120cc -60o60n60q60u60e60s60t60.60m60sn120 0 -H720 -f1 -V4872 -cT -61h50ew87c44h50a44r33a44c44t28e44r33sw82t28ow93t28h50ew87l28e44f33tw72o50fw77t28h50ew88f33i28l28ew88n50a44m78ew88e44n50c44o50d50ew88h50e44l28p50f33u50lw72i28n50f33o50r33m78a44t28i28o50nw94a44b50o50u50tw72t28h50ew88f33i28l28e44.w94T61h50ew88m78i28n50u50sw83s39i28g50nn120 0 -H720 -V4992 -cb -50e44c44o50m78e44sw73aw78p50l28u50sw73s39i28g50nw84i28fw67t28h50ew78f33i28l28ew78h50a44sw73aw78w72i28n50d50o50wwh106co -50p50e44n50,w59a44n50dw84a44nw84a44s39t28e44r33i28s39kw84i28fw67m78o50r33ew78t28h50a44nw84o50n50ew78i28sw73o50p50e44n50.w84T61h50ew77p50e44r33i28o50dn120 0 -H720 -V5112 -c( -33a44n50o50t28h50e44rw58m78e44a44n50i28n50gw75o50fw58d50o50t28)w58i28d50e44n50t28i28f33i28e44sw64t28h50ew69c44u50r33r33e44n50tw53f33i28l28e44.w75T61h50ew69l28e44a44d50i28n50gw75b50l28a44n50kw75c44h50a44n50g50e44sw64t28ow76a44nw76a44p50o50s39t28r33o50p50h50ew70i28fw59t28h50ew70f33i28l28ew70i28sn120 0 -H720 -V5232 -cd -50i28f33f33e44r33e44n50tw61f33r33o50mwh111ct -28h50ew77c44o50n50t28e44n50t28sw72o50fw66t28h50ew77a44s39s39o50c44i28a44t28e44dw83U72n50i28xw83f33i28l28e44,w58a44sw72f33a44rw66a44swf5 -72s60a60mwf1 -93k50n50o50w72s39.w83T61h50i28sw71b50e44c44o50m78e44sw71e44v50i28d50e44n50tw60i28fw65w72en120 0 -H720 -V5352 -cm -78a44k50ew69aw69c44h50a44n50g50e44.n120 0 -H720 -x font 0 CI -f0 -V5532 -h360c1 -60dn120 0 -H720 -V5652 -h360cf -n120 0 -H720 -f5 -V5772 -h360c' -60-60.wh120cc -60o60n60q60u60e60s60t60.60m60sn120 0 -H720 -f1 -V5952 -cI -33fw58t28h50ew69f33i28l28ew69i28sw64r33e44s39t28o50r33e44dw75b50yw75a44nw75u50n50d50ow75c44o50m78m78a44n50d50,w50t28h50ew69a44p50o50s39t28r33o50p50h50ew69d50i28s39a44p50p50e44a44r33s39.n120 0 -H720 -x font 0 CI -f0 -V6132 -h360cu -n120 0 -H720 -V6252 -h360cf -n120 0 -H720 -wf5 -V6372 -h420c- -60.wh120cc -60o60n60q60u60e60s60t60.60m60sn120 0 -H720 -f1 -V6552 -cT -61h50ew69f33i28l28ew69n50a44m78ew69m78a44yw75b50ew69c44h50a44n50g50e44dw75b50yw75p50r33o50v50i28d50i28n50gw75aw69n50e44ww97n50a44m78ew69w72i28t28hw75t28h50ewf5 -69fwf1 -85c44o50m78m78a44n50d50:n120 0 -H720 -f5 -V6732 -h360cf -wh120cp -60e60s60t60i60l60e60n60c60e60.60m60sn120 0 -H720 -V6852 -h360c' -60-60.wh120cp -60e60s60t60i60l60e60n60c60e60.60m60sn120 0 -H720 -x font 0 CI -f0 -V7032 -cf -wf1 -99p50r33i28n50t28sw78t28h50ew83n50e44wwh111cs -39t28a44t28u50sw78o50fw72t28h50ew84f33i28l28e44,w65t28h50a44tw68i28s39,w65i28tw68c44h50a44n50g50e44sw79t28h50ew84n50a44m78ew84i28fw73o50n50ew84i28sw79p50r33o50v50i28d50e44d50,w65a44n50dw90p50r33i28n50t28sw79t28h50ew84n50a44m78en120 0 -H720 -V7152 -cr -33e44g50a44r33d50l28e44s39s39.w75Aw97f33i28l28ew69n50a44m78ew69c44h50a44n50g50ew69m78a44yw75a44l28s39ow75b50ew69u50n50d50o50n50e44.n120 0 -V7920 -p13 -x font 1 R -x font 2 I -x font 3 B -x font 4 BI -x font 5 CW -x font 6 H -x font 7 HI -x font 8 HB -x font 9 S1 -x font 10 S -s10 -f1 -H720 -V480 -h2052Chy -w33 25150350 h25Chy -wn120 0 -H720 -x font 0 CI -f0 -V900 -h360cu -n120 0 -H720 -V1020 -h360cf -n120 0 -H720 -wf5 -V1140 -h420c- -60.wh120cc -60o60n60q60u60e60s60t60.60m60sn120 0 -H720 -f1 -V1356 -h250cW -94h50e44nwf5 -79s60a60mwf1 -89i28sw68d50o50w72n50l28o50a44d50e44d50,w54t28h50ew73c44u50r33r33e44n50tw57f33i28l28ew73m78a44yw79b50ew74c44h50a44n50g50e44dw80s39i28m78p50l28yw80b50yw80s39e44l28e44c44t28i28n50gw80t28h50ew74d50e44s39i28r33e44dw80f33i28l28ew74f33r33o50mn120 0 -H720 -V1476 -ct -28h50ew71m78e44n50uw77(33s39e44l28e44c44t28i28n50gw77t28h50ew71s39a44m78ew71f33i28l28ew71s39u50b50s39e44q50u50e44n50t28l28yw77c44y50c44l28e44sw66t28h50r33o50u50g50hw77t28h50ew71w72i28n50d50o50w72sw66o50p50e44n50e44dw77o50nw76t28h50ew70f33i28l28e44)33.w76O72t28h50e44r33w72i28s39e44,n120 0 -H720 -V1596 -ct -28h50ewf5 -69bwf1 -85c44o50m78m78a44n50dw75c44a44nw75b50ew69u50s39e44dw75t28ow75c44h50o50o50s39ew69t28h50ew69d50e44s39i28r33e44dw75f33i28l28e44:h28Cdg -n120 0 -H720 -x font 0 CI -f0 -V1776 -h360cb -wh120ce -60m60a60c60s60.60m60sn120 0 -H720 -wf5 -V1896 -h420c- -60.wh120ce -60m60a60c60s60.60m60sn120 0 -H720 -f1 -V2076 -cA -72g50a44i28n50,wf5 -54s60a60mwf1 -89p50r33i28n50t28sw68t28h50ew73n50a44m78ew73(33a44c44t28u50a44l28l28y50,w55e44x50e44c44u50t28e44sw69a44nw80i28m78p50l28i28c44i28twf5 -58fwf1 -90c44o50m78m78a44n50d50)w63b50e44c44a44u50s39ew74t28h50ew74U72n50i28xw80f33i28l28ewf5 -74e60m60a60c60s60.60m60sn120 0 -H720 -f1 -V2196 -ci -28sw68b50e44i28n50gw79r33e44a44dw79f33o50rw62t28h50ew73f33i28r33s39tw57t28i28m78e44.w79I33tw57i28sw68a44nw79e44r33r33o50rw62t28ow79a44s39kw79f33o50rw62aw73f33i28l28ewf5 -73s60a60mwf1 -89d50o50e44s39n50'33tw57k50n50o50wwh101ca -44b50o50u50t28,w54b50u50tw57t28h50ewf5 -73Bwf1 -89c44o50m78m78a44n50dn120 0 -H720 -V2316 -cw -72i28l28lw53p50r33i28m78ewf5 -69s60a60mf1 -60'33sw64m78e44n50uw75w72i28t28hw75aw69n50e44ww97f33i28l28e44,w50a44n50dw75m78a44k50ew69i28tw53c44u50r33r33e44n50t28.n120 0 -H720 -x font 0 CI -f0 -V2496 -h360cb -wh120cf -60l60o60o60d60.60p60i60cn120 0 -H720 -f5 -V2616 -h360c? -60n60owh120cs -60u60c60hwh120cf -60i60l60ewh120c` -60f60l60o60o60d60.60p60i60c60'n120 0 -H720 -x font 0 CI -f0 -V2736 -h360cB -wh120cf -60l60o60o60d60.60p60i60cn120 0 -H720 -wf5 -V2856 -h420c- -60.wh120cf -60l60o60o60d60.60p60i60cn120 0 -H720 -x font 0 CI -f0 -V2976 -h360cn -n120 0 -H720 -wf5 -V3096 -h420c- -wh180cc -60o60n60q60u60e60s60t60.60m60sn120 0 -H720 -wV3216 -h420c- -wh180cd -60e60a60t60h60.60m60sn120 0 -H720 -wV3336 -h420c- -wh180ce -60m60a60c60s60.60m60sn120 0 -H720 -wV3456 -h420c- -wh180cf -60a60m60i60n60e60.60m60sn120 0 -H720 -wV3576 -h420c- -60.wh120cf -60l60o60o60d60.60p60i60cn120 0 -H720 -wV3696 -h420c- -wh180cs -60l60a60u60g60h60t60e60r60.60m60sn120 0 -H720 -f1 -V3876 -cB -67o50t28hwf5 -80bwf1 -90a44n50dwf5 -80Bwf1 -90w72i28l28lw58a44c44c44e44p50tw58aw74l28i28s39tw59o50fw64f33i28l28ew75n50a44m78e44s39.wf5 -81bwf1 -91s39i28m78p50l28yw81t28a44k50e44sw70t28h50ew75f33i28r33s39tw59f33i28l28ew75i28nw81t28h50ew75l28i28s39t28,w56b50u50twf5 -59Bwf1 -91l28o50a44d50sw70t28h50e44mwh109ca -44l28l28.n120 0 -H720 -V3996 -cT -61h50ew69l28i28s39tw53m78a44yw75b50ew69t28y50p50e44dw75o50nw75o50n50ew69l28i28n50ewh69Cem -n120 0 -H720 -x font 0 CI -f0 -V4176 -h360cB -wh120cd -60e60v60i60l60.60t60e60xwh120cs -60a60t60a60n60.60t60e60xwh120c6 -60660660.60t60e60xwh120ce -60m60a60c60s60.60t60e60xn120 0 -H720 -f1 -V4356 -Cem -wh125co -50rw58g50e44n50e44r33a44t28e44dw75b50yw75aw69U72n50i28xw75c44o50m78m78a44n50dwh75Cem -n120 0 -H720 -x font 0 CI -f0 -V4536 -h360cB -wh120c< -60e60c60h60owh120c* -60.60t60e60xn120 0 -H720 -f1 -V4716 -cT -61h50ew73l28a44t28t28e44rw63f33o50r33mwh108cr -33e44q50u50i28r33e44sw69aw74U72n50i28xw80c44o50m78m78a44n50d50;wf5 -58s60a60mwf1 -90d50o50e44sw69n50o50tw58u50n50d50e44r33s39t28a44n50dw80t28h50ew74s39h50e44l28lw58f33i28l28ew74n50a44m78ew74m78e44t28a44c44h50a44r33a44c44t28e44r33s39,w55s39on120 0 -H720 -f5 -V4836 -cB -wh130c* -60.60t60e60xwf1 -94a44t28t28e44m78p50t28sw73t28ow84l28o50a44dw84aw78s39i28n50g50l28ew78f33i28l28ew78n50a44m78e44dwf5 -84*60.60t60e60xf1 -60.w84(33T61h50ewf5 -78<wf1 -94f33o50r33mwh112ci -28sw73o50fw67c44o50u50r33s39ew78d50e44r33i28v50e44dw84f33r33o50mwf5 -h112cs -60a60mf1 -60'33swf5 -73<n120 0 -H720 -f1 -V4956 -cc -44o50m78m78a44n50d50.25)wf5 -83e60c60h60owf1 -85i28sw64n50o50tw53t28h50ew69o50n50l28yw75u50s39e44f33u50lw53c44o50m78m78a44n50dw75t28ow75r33u50nw75s39u50b50s39e44r33v50i28e44n50tw53t28owf5 -75Bf1 -60;w53f33o50rw58e44x50a44m78p50l28e44,n120 0 -H720 -x font 0 CI -f0 -V5136 -h360cB -wh120c< -60g60r60e60pwh120c- -60lwh120cE -60m60a60c60swh120c* -n120 0 -H720 -f1 -V5316 -cw -72i28l28lw57l28o50a44dw79o50n50l28yw79t28h50o50s39ew73f33i28l28e44sw68c44o50n50t28a44i28n50i28n50gw79t28h50ew73s39t28r33i28n50gwf5 -79E60m60a60c60sf1 -60.w79F56i28n50a44l28l28y50,w54aw73s39p50e44c44i28a44lw57c44a44s39e44:w58awf5 -74Bwf1 -90w72i28t28hw80n50ow80a44r33g50u50m78e44n50t28sw69c44r33eh44Chy -n120 0 -H720 -V5436 -ca -44t28e44sw64a44nw75e44m78p50t28y50,w50n50a44m78e44l28e44s39sw64f33i28l28ew69w72i28t28h50i28nwf5 -75s60a60mf1 -60.n120 0 -H720 -V5592 -h250cT -61h50ew69c44o50m78p50l28e44m78e44n50tw53o50fwf5 -58Bwf1 -85i28swf5 -64Df1 -60:n120 0 -H720 -x font 0 CI -f0 -V5772 -h360cD -wh120cd -60e60v60i60l60.60t60e60xwh120cs -60a60t60a60n60.60t60e60xwh120c6 -60660660.60t60e60xwh120ce -60m60a60c60s60.60t60e60xn120 0 -H720 -f1 -V5952 -ce -44r33a44d50i28c44a44t28e44sw77t28h50ew82f33i28l28e44sw77f33r33o50mwf5 -h116cs -60a60mf1 -60'33sw78m78e44m78o50r33yw89(33n50o50tw67f33r33o50mwh117ct -28h50ew83U72n50i28xw89m78a44c44h50i28n50e44'33sw78d50i28s39c44)33.wf5 -89Dwf1 -99w72i28t28h50o50u50tw67a44n50yw89f33i28l28ew83n50a44m78e44sn120 0 -H720 -V6072 -cr -33e44m78o50v50e44sw64t28h50ew69c44u50r33r33e44n50tw53f33i28l28ew69f33r33o50mwf5 -h103cs -60a60mf1 -60.n120 0 -H720 -V6228 -h250cT -61h50e44r33ew73a44r33ew73t28h50r33e44ew73o50t28h50e44rw62c44o50m78m78a44n50d50sw68t28h50a44tw57r33e44l28a44t28ew73t28h50ew73c44u50r33r33e44n50tw57f33i28l28ew73t28ow79U72n50i28xw79f33i28l28e44s39.w79T61h50ewf5 -74wwf1 -90c44o50m78m78a44n50dw80w72r33i28t28e44sw69t28h50en120 0 -H720 -V6348 -cf -33i28l28ew79t28ow85d50i28s39c44;w63w72i28t28h50o50u50tw63a44r33g50u50m78e44n50t28s39,w60i28tw63w72r33i28t28e44sw74t28h50ew79e44n50t28i28r33ew79f33i28l28ew78t28ow84t28h50ew78U72n50i28xw84f33i28l28ew78a44s39s39o50c44i28a44t28e44dw84w72i28t28hw84t28h50ew78c44u50r33r33e44n50tw62f33i28l28ew78i28nn120 0 -H720 -f5 -V6468 -cs -60a60mwf1 -86(33i28tw54i28sw65t28h50ew70o50n50l28yw76c44o50m78m78a44n50dw76w72h50o50s39ew70d50e44f33a44u50l28tw54a44d50d50r33e44s39sw65i28sw65n50o50tw54d50o50t28)33.w76O72fw59c44o50u50r33s39e44,w51y50o50uw76c44a44nw76s39p50e44c44i28f33yw76a44nw76a44d50d50r33e44s39sw66t28ow77b50en120 0 -H720 -V6588 -cw -72r33i28t28t28e44n50,w50a44n50dw75aw69d50i28f33f33e44r33e44n50tw53f33i28l28ew69n50a44m78e44,w50w72i28t28hw75t28h50ew69o50b50v50i28o50u50sw64s39y50n50t28a44x50:n120 0 -H720 -s8 -V6880 -Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -h40Cru -n100 0 -H720 -V6980 -Cdg -w70Aw78b40u40gw60p40r26e35v40e35n40t22sw51t22h40ewf5 -55bwf1 -68c35o40m62m62a35n40dw61f26r26o40mw83w58o40r26k40i22n40gw61w58h40e35nw61d40o40w58n40l22o40a35d40e35d40.w61B54e35c35a35u40s31ew56t22h40ew56m62e35n40uw61i22sw52m62o40r26ew56c35o40n40v40e35n40i22e35n40tw43a35n40y40w58a35y40,w41a35n40dw61b40eh35Chy -n100 0 -H720 -V7080 -cc -35a35u40s31ew55t22h40ew55m62e35t22h40o40dw60o40fw46c35h40o40o40s31i22n40gw60f26i22l22e35sw51f26r26o40mw82t22h40ew55c35o40m62m62a35n40dw60l22a35n40g40u40a35g40ew55i22sw51s31l22a35t22e35dw60t22ow60c35h40a35n40g40e35,w40t22h40ew55b40u40gw60h40a35s31n40'26tw42b40e35e35nw60f26i22x40e35d40.n100 0 -V7920 -p14 -x font 1 R -x font 2 I -x font 3 B -x font 4 BI -x font 5 CW -x font 6 H -x font 7 HI -x font 8 HB -x font 9 S1 -x font 10 S -s10 -f1 -H720 -V480 -h2052Chy -w33 251504w50 h25Chy -wn120 0 -H720 -x font 0 CI -f0 -V900 -h360c1 -60,60260wwh120c/ -60t60m60p60/60r60e60v60e60l60a60t60i60o60n60sn120 0 -H720 -f5 -V1020 -h360c/ -60t60m60p60/60r60e60v60e60l60a60t60i60o60n60s60:wh120c# -604604n120 0 -H720 -V1200 -cs -60a60mwf1 -85r33e44s39p50o50n50d50sw64w72i28t28hw75t28h50ew69f33i28l28ew70n50a44m78ew70a44n50dw76t28h50ew70n50u50m78b50e44rw59o50fw59c44h50a44r33a44c44t28e44r33sw65w72r33i28t28t28e44nw76t28ow76t28h50ew70f33i28l28e44.w76T61h50ewf5 -70w60r60i60t60ewf1 -86c44o50m78m78a44n50dw76o50nn120 0 -H720 -V1320 -ct -28h50ew69b50u50t28t28o50nw753w75m78e44n50uw75i28sw64i28d50e44n50t28i28c44a44lw53i28nw75f33u50n50c44t28i28o50nw75t28ow75a44nw75u50n50a44d50o50r33n50e44dwf5 -75wwf1 -85c44o50m78m78a44n50d50.n120 0 -H720 -V1476 -h250cT -61h50ew71o50t28h50e44rw60t28w72ow77c44o50m78m78a44n50d50s39,wf5 -52ewf1 -87a44n50dwf5 -77rf1 -60,w52r33e44a44dw77d50a44t28aw71f33r33o50mwh105cU -72n50i28xw77f33i28l28e44s39.w77T61h50ewf5 -71ewf1 -87c44o50m78m78a44n50dw77c44l28e44a44r33sw66o50u50tw55t28h50ew72c44u50r33r33e44n50tn120 0 -H720 -V1596 -cf -33i28l28e44,w57r33e44a44d50sw71t28h50ew76d50a44t28aw76f33r33o50mwh110ct -28h50ew76n50a44m78e44dw81f33i28l28ew75(33o50rw64u50s39e44sw70t28h50ew75c44u50r33r33e44n50tw59f33i28l28e44'33sw70o50l28dw81n50a44m78ew75i28fw64n50o50n50ew75i28sw70e44x50p50l28i28c44i28t28l28yw81p50r33o50v50i28d50e44d50)33,n120 0 -H720 -V1716 -ca -44n50dw76s39e44t28sw65t28h50ew70f33i28l28ew70n50a44m78e44.w77I33t28'33sw66m78u50c44hw77l28i28k50ew71awf5 -71Bwf1 -87c44o50m78m78a44n50d50,w52b50u50tw55p50u50t28sw66t28h50ew71i28n50f33o50r33m78a44t28i28o50nw77i28nw77t28h50ew71c44u50r33r33e44n50tw55f33i28l28ew71i28n50s39t28e44a44dw77o50fw60an120 0 -H720 -V1836 -cn -50e44ww98o50n50e44.wf5 -76ewf1 -86w72i28t28h50o50u50tw54a44n50yw76f33i28l28ew70n50a44m78ew70i28sw65t28h50e44r33e44f33o50r33ew70a44nw76e44a44s39yw76w72a44yw76t28ow76r33e44f33r33e44s39hwf5 -76s60a60mf1 -60'33sw65c44o50p50yw76o50fw59aw70U72n50i28xw76f33i28l28e44.w76[33U72n50l28i28k50ew69i28nn120 0 -H720 -f5 -V1956 -ce -60df1 -60,wf5 -61ewf1 -96d50o50e44s39n50'33tw64c44o50m78p50l28a44i28nw86i28fw69t28h50ew80f33i28l28ew80i28sw75m78o50d50i28f33i28e44d50.w86T61h50ew80p50r33i28n50c44i28p50l28ew80i28sw75n50o50tw64t28ow86p50r33o50t28e44c44tw64a44g50a44i28n50s39tw64t28h50i28n50g50sw75t28h50a44tw64c44a44nw87b50en120 0 -H720 -V2076 -cu -50n50d50o50n50ew69i28fw58w72r33o50n50g50.25]w83S56i28n50c44ew69i28t28sw64j28o50bw75i28sw64t28ow75r33e44p50l28a44c44ew69t28h50ew69w72h50o50l28ew69t28e44x50t28,wf5 -50ewf1 -85n50e44v50e44rw58t28a44k50e44sw64a44nw75a44d50d50r33e44s39s39.n120 0 -H720 -V2232 -h250cT -61h50ewf5 -78rwf1 -94c44o50m78m78a44n50dw84i28sw73l28i28k50ewf5 -78ef1 -60,w59b50u50tw62i28tw62d50o50e44s39n50'33tw62c44l28e44a44rw67t28h50ew78f33i28l28e44:w62t28h50ew78t28e44x50tw62i28nw84t28h50ew78U72n50i28xw84f33i28l28ew78r33e44p50l28a44c44e44sw73d50o50t28,w60o50rw68t28h50en120 0 -H720 -V2352 -cs -39p50e44c44i28f33i28e44dw75t28e44x50tw53i28fw58a44nw75a44d50d50r33e44s39sw64i28sw64g50i28v50e44n50.n120 0 -H720 -x font 0 CI -f0 -V2532 -h360cr -wh120ce -60m60a60c60s60.60m60sn120 0 -H720 -f1 -V2712 -ch -50a44sw64e44s39s39e44n50t28i28a44l28l28yw75t28h50ew69e44f33f33e44c44tw53o50fn120 0 -H720 -x font 0 CI -f0 -V2892 -h360c< -60c60a60twh120ce -60m60a60c60s60.60m60sn120 0 -H720 -f1 -V3072 -cT -61h50ew73c44o50m78m78a44n50d50swf5 -68rwf1 -89a44n50dwf5 -79wwf1 -89w72i28l28lw57s39e44tw57t28h50ew73n50a44m78ew73o50fw62t28h50ew73f33i28l28ew73i28fw63t28h50ew74c44u50r33r33e44n50tw58f33i28l28ew74h50a44sw69n50ow80n50a44m78ew74a44l28r33e44a44d50yw80d50e44f33i28n50e44d50;wf5 -58ewf1 -90s39e44t28sn120 0 -H720 -V3192 -ct -28h50ew69n50a44m78ew69e44v50e44nw75i28fw58t28h50ew69f33i28l28ew69a44l28r33e44a44d50yw75h50a44sw64o50n50e44.n120 0 -H720 -V3348 -h250cT -61h50e44r33ew77i28sw72aw77c44o50m78m78a44n50d50,w58a44n50a44l28o50g50o50u50sw72t28owf5 -83xf1 -60,w58t28h50a44tw61i28t28e44r33a44t28e44sw72o50v50e44rw66f33i28l28e44sw72i28n50s39t28e44a44dw83o50fw67p50i28e44c44e44sw73o50fw67t28e44x50t28:wf5 -62Xwf1 -94(33c44a44p50i28t28a44lwf5 -62xf1 -60)33.n120 0 -H720 -V3468 -cT -61h50ew79s39y50n50t28a44xw85i28sw74e44a44s39y50;w63i28t28'33sw74j28u50s39tw63l28i28k50ew79t28h50a44tw63o50fwf5 -68xwf1 -h95Cem -wf5 -h134cX -60/f2 -60p50a50t28t28e44r39nf5 -50/f2 -60c44o50m72m72a50n50df1 -50.w84(33T61h50ew78c44o50m78p50l28e44m78e44n50t28a44r33yw84c44o50m78m78a44n50dw84i28swf5 -73Yf1 -60,n120 0 -H720 -V3588 -ca -44n50a44l28o50g50o50u50sw79t28owf5 -90yf1 -60.25)w98T61h50ew84e44f33f33e44c44tw68i28sw79t28ow90r33u50nw90t28h50ew84c44o50m78m78a44n50dw90i28nw90e44a44c44hw90f33i28l28ew84w72h50o50s39ew84m78e44n50uw90e44n50t28r33yw91(33t28h50a44tw69i28s39,w66w72h50o50s39ew85l28i28n50en120 0 -H720 -V3708 -cp -50r33i28n50t28e44dw75b50yw75a44nwf5 -75fwf1 -85c44o50m78m78a44n50d50)w58m78a44t28c44h50e44sw64t28h50ew69p50a44t28t28e44r33n50.w75F56o50rw58e44x50a44m78p50l28e44,w50s39i28n50c44ew69a44nw75a44p50o50s39t28r33o50p50h50ew69i28d50e44n50t28i28f33i28e44sw64m78o50d50i28f33i28e44dw75f33i28l28e44s39,n120 0 -H720 -x font 0 CI -f0 -V3888 -h360cX -60/60'60/wh120cw -n120 0 -H720 -f1 -V4068 -cw -72r33i28t28e44sw66t28h50ew71c44h50a44n50g50e44dw77f33i28l28e44sw66o50u50tw55t28ow77d50i28s39c44.w77H72e44r33ew71i28sw66aw71l28o50n50g50e44rw61e44x50a44m78p50l28e44:w56f33i28n50dw78a44l28lw56u50s39e44sw67o50fw61aw72p50a44r33t28i28c44u50l28a44rw61v50a44r33i28a44b50l28ew72i28nw78t28h50ew72Cn120 0 -H720 -V4188 -cs -39o50u50r33c44ew69f33i28l28e44s39:n120 0 -H720 -x font 0 CI -f0 -V4368 -h360cX -60/60\60.60c60$60/wh120c, -60x60/60v60a60r60i60a60b60l60e60/60+60-60pn120 0 -H720 -f1 -V4548 -cW -94ew69c44a44nw75u50s39ew69a44nwf5 -75fwf1 -85c44o50m78m78a44n50dw75t28ow75i28d50e44n50t28i28f33yw75w72h50i28c44hw75f33i28l28ew69t28h50ew69v50a44r33i28a44b50l28ew69a44p50p50e44a44r33sw64i28n50:n120 0 -H720 -x font 0 CI -f0 -V4728 -h360cX -60/60\60.60c60$60/wh120c, -60g60/60v60a60r60i60a60b60l60e60/wh120c{ -n120 0 -H720 -V4848 -h610cf -n120 0 -H720 -V4968 -h610c, -60x60/60v60a60r60i60a60b60l60e60/60+60-60{n120 0 -H720 -wV5088 -h860c= -n120 0 -H720 -wV5208 -h860cp -n120 0 -H720 -V5328 -h610c} -n120 0 -H720 -V5448 -h360c} -n120 0 -H720 -f1 -V5628 -cH -72e44r33e44,w59t28h50ewf5 -78gwf1 -94c44o50m78m78a44n50dw84g50u50a44r33a44n50t28e44e44sw73t28h50a44tw62o50n50l28yw84t28h50ew78n50a44m78e44sw73o50fw67f33i28l28e44sw73c44o50n50t28a44i28n50i28n50gw84t28h50ew78v50a44r33i28a44b50l28ew78w72i28l28lw63b50ew79p50r33i28n50t28e44dw85(33b50u50tn120 0 -H720 -V5748 -cb -50e44w72a44r33ew73t28h50a44twf5 -57s60a60mwf1 -89m78a44yw79c44o50n50f33u50s39ew73m78a44t28t28e44r33sw68b50yw79p50r33i28n50t28i28n50gw79t28h50ew73n50a44m78e44sw68o50fw62f33i28l28e44sw68i28tw57r33e44a44d50sw68i28nw79d50u50r33i28n50gw78t28h50ew72c44o50m78m78a44n50d50)33.w78T61h50en120 0 -H720 -f5 -V5868 -c= -wf1 -85c44o50m78m78a44n50dw75s39h50o50w72sw64w72h50e44r33ew69i28nw75t28h50ew69f33i28l28ew69t28h50ew69v50a44r33i28a44b50l28ew69a44p50p50e44a44r33s39,w50a44n50dw75t28h50ewf5 -69pwf1 -85c44o50m78m78a44n50dw75p50r33i28n50t28sw64t28h50ew69l28i28n50e44.n120 0 -H720 -V6024 -h250cT -61h50ewf5 -74Dwf1 -90c44o50m78m78a44n50dw80i28sw69h50a44n50d50yw80a44sw69t28h50ew74t28a44r33g50e44tw58o50fw63a44nwf5 -81Xf1 -60.w81T61h50i28sw70e44x50a44m78p50l28ew75d50e44l28e44t28e44sw70f33r33o50mwh109ct -28h50ew75m78e44n50uw81a44l28lw59Cw98f33i28l28e44sw70t28h50a44tn120 0 -H720 -V6144 -cd -50ow75n50o50tw53c44o50n50t28a44i28nw75aw69p50a44r33t28i28c44u50l28a44rw58v50a44r33i28a44b50l28e44:n120 0 -H720 -x font 0 CI -f0 -V6324 -h360cX -60/60\60.60c60$60/wh120c, -60v60/60v60a60r60i60a60b60l60e60/wh120cD -n120 0 -H720 -f1 -V6504 -cI -33fw58n50ow75p50a44t28t28e44r33nw75i28sw64p50r33o50v50i28d50e44dw75f33o50rw58t28h50ewf5 -69Xf1 -60,w50t28h50ew69c44o50m78m78a44n50dw75(33w72h50i28c44hw75d50e44f33a44u50l28t28sw64t28owf5 -75ff1 -60)w58i28sw64r33u50nw75i28nw75a44l28lw53f33i28l28e44s39,w50s39on120 0 -H720 -x font 0 CI -f0 -V6684 -h360cX -wh120cD -n120 0 -H720 -f1 -V6864 -cc -44l28e44a44n50swf5 -64s60a60mwf1 -85u50pw75f33o50rw58aw69f33r33e44s39hw75s39t28a44r33t28.n120 0 -H720 -V7020 -h250cB -67u50tw53r33a44t28h50e44rw58t28h50a44nw75w72o50r33k50i28n50gw75a44n50yw75f33u50r33t28h50e44r33,w50l28e44t28'33sw64s39t28o50pw75n50o50w72:n120 0 -V7920 -p15 -x font 1 R -x font 2 I -x font 3 B -x font 4 BI -x font 5 CW -x font 6 H -x font 7 HI -x font 8 HB -x font 9 S1 -x font 10 S -s10 -f1 -H720 -V480 -h2052Chy -w33 25150550 h25Chy -wn120 0 -H720 -x font 0 CI -f0 -V900 -h360cq -n120 0 -H720 -f5 -V1020 -h360c$ -n120 0 -H720 -f1 -V1236 -h250cS -56o50m78ew75o50fw64t28h50ew75f33i28l28ew75m78a44n50i28p50u50l28a44t28i28n50gw81c44o50m78m78a44n50d50sw70c44a44nw81b50ew75u50n50d50o50n50e44:w59u50n50d50o50i28n50gw81awf5 -75ff1 -60,wf5 -56ef1 -60,w56o50rwf5 -64rwf1 -91r33e44s39t28o50r33e44sw70t28h50ew76p50r33e44v50i28o50u50sn120 0 -H720 -V1356 -cs -39t28a44t28ew69o50fw58t28h50ew69f33i28l28e44,w50b50u50twf5 -53wf1 -60,wf5 -50Bwf1 -85a44n50dwf5 -75Dwf1 -85a44r33ew69i28r33r33e44v50o50c44a44b50l28e44.w75A72n50d50,w50o50fw58c44o50u50r33s39e44,w50s39ow75i28swf5 -64qf1 -60.n120 0 -x trailer -V7920 -x stop diff --git a/sys/doc/sam/sam0.png b/sys/doc/sam/sam0.png Binary files differdeleted file mode 100644 index eb488950f..000000000 --- a/sys/doc/sam/sam0.png +++ /dev/null diff --git a/sys/doc/sam/sam1.png b/sys/doc/sam/sam1.png Binary files differdeleted file mode 100644 index dcc645778..000000000 --- a/sys/doc/sam/sam1.png +++ /dev/null diff --git a/sys/doc/sam/sam2.png b/sys/doc/sam/sam2.png Binary files differdeleted file mode 100644 index dfb72baba..000000000 --- a/sys/doc/sam/sam2.png +++ /dev/null diff --git a/sys/doc/sam/sam3.png b/sys/doc/sam/sam3.png Binary files differdeleted file mode 100644 index f33a701c2..000000000 --- a/sys/doc/sam/sam3.png +++ /dev/null diff --git a/sys/doc/sam/sam4.png b/sys/doc/sam/sam4.png Binary files differdeleted file mode 100644 index 6d85990df..000000000 --- a/sys/doc/sam/sam4.png +++ /dev/null |