%!PS %%Version: 3.3.2 %%DocumentFonts: (atend) %%Pages: (atend) %%EndComments % % Version 3.3.2 prologue for troff files. % /#copies 1 store /aspectratio 1 def /formsperpage 1 def /landscape false def /linewidth .3 def /magnification 1 def /margin 0 def /orientation 0 def /resolution 720 def /rotation 1 def /xoffset 0 def /yoffset 0 def /roundpage true def /useclippath true def /pagebbox [0 0 612 792] def /R /Times-Roman def /I /Times-Italic def /B /Times-Bold def /BI /Times-BoldItalic def /H /Helvetica def /HI /Helvetica-Oblique def /HB /Helvetica-Bold def /HX /Helvetica-BoldOblique def /CW /Courier def /CO /Courier def /CI /Courier-Oblique def /CB /Courier-Bold def /CX /Courier-BoldOblique def /PA /Palatino-Roman def /PI /Palatino-Italic def /PB /Palatino-Bold def /PX /Palatino-BoldItalic def /Hr /Helvetica-Narrow def /Hi /Helvetica-Narrow-Oblique def /Hb /Helvetica-Narrow-Bold def /Hx /Helvetica-Narrow-BoldOblique def /KR /Bookman-Light def /KI /Bookman-LightItalic def /KB /Bookman-Demi def /KX /Bookman-DemiItalic def /AR /AvantGarde-Book def /AI /AvantGarde-BookOblique def /AB /AvantGarde-Demi def /AX /AvantGarde-DemiOblique def /NR /NewCenturySchlbk-Roman def /NI /NewCenturySchlbk-Italic def /NB /NewCenturySchlbk-Bold def /NX /NewCenturySchlbk-BoldItalic def /ZD /ZapfDingbats def /ZI /ZapfChancery-MediumItalic def /S /S def /S1 /S1 def /GR /Symbol def /inch {72 mul} bind def /min {2 copy gt {exch} if pop} bind def /show {show} bind def % so later references don't bind /widthshow {widthshow} bind def /stringwidth {stringwidth} bind def /setup { counttomark 2 idiv {def} repeat pop landscape {/orientation 90 orientation add def} if /scaling 72 resolution div def linewidth setlinewidth 1 setlinecap pagedimensions xcenter ycenter translate orientation rotation mul rotate width 2 div neg height 2 div translate xoffset inch yoffset inch neg translate margin 2 div dup neg translate magnification dup aspectratio mul scale scaling scaling scale addmetrics 0 0 moveto } def /pagedimensions { useclippath userdict /gotpagebbox known not and { /pagebbox [clippath pathbbox newpath] def roundpage currentdict /roundpagebbox known and {roundpagebbox} if } if pagebbox aload pop 4 -1 roll exch 4 1 roll 4 copy landscape {4 2 roll} if sub /width exch def sub /height exch def add 2 div /xcenter exch def add 2 div /ycenter exch def userdict /gotpagebbox true put } def /addmetrics { /Symbol /S null Sdefs cf /Times-Roman /S1 StandardEncoding dup length array copy S1defs cf } def /pagesetup { /page exch def currentdict /pagedict known currentdict page known and { page load pagedict exch get cvx exec } if } def /decodingdefs [ {counttomark 2 idiv {y moveto show} repeat} {neg /y exch def counttomark 2 idiv {y moveto show} repeat} {neg moveto {2 index stringwidth pop sub exch div 0 32 4 -1 roll widthshow} repeat} {neg moveto {spacewidth sub 0.0 32 4 -1 roll widthshow} repeat} {counttomark 2 idiv {y moveto show} repeat} {neg setfunnytext} ] def /setdecoding {/t decodingdefs 3 -1 roll get bind def} bind def /w {neg moveto show} bind def /m {neg dup /y exch def moveto} bind def /done {/lastpage where {pop lastpage} if} def /f { dup /font exch def findfont exch dup /ptsize exch def scaling div dup /size exch def scalefont setfont linewidth ptsize mul scaling 10 mul div setlinewidth /spacewidth ( ) stringwidth pop def } bind def /changefont { /fontheight exch def /fontslant exch def currentfont [ 1 0 fontheight ptsize div fontslant sin mul fontslant cos div fontheight ptsize div 0 0 ] makefont setfont } bind def /sf {f} bind def /cf { dup length 2 idiv /entries exch def /chtab exch def /newencoding exch def /newfont exch def findfont dup length 1 add dict /newdict exch def {1 index /FID ne {newdict 3 1 roll put}{pop pop} ifelse} forall newencoding type /arraytype eq {newdict /Encoding newencoding put} if newdict /Metrics entries dict put newdict /Metrics get begin chtab aload pop 1 1 entries {pop def} for newfont newdict definefont pop end } bind def % % A few arrays used to adjust reference points and character widths in some % of the printer resident fonts. If square roots are too high try changing % the lines describing /radical and /radicalex to, % % /radical [0 -75 550 0] % /radicalex [-50 -75 500 0] % % Move braceleftbt a bit - default PostScript character is off a bit. % /Sdefs [ /bracketlefttp [201 500] /bracketleftbt [201 500] /bracketrighttp [-81 380] /bracketrightbt [-83 380] /braceleftbt [203 490] /bracketrightex [220 -125 500 0] /radical [0 0 550 0] /radicalex [-50 0 500 0] /parenleftex [-20 -170 0 0] /integral [100 -50 500 0] /infinity [10 -75 730 0] ] def /S1defs [ /underscore [0 80 500 0] /endash [7 90 650 0] ] def % % Tries to round clipping path dimensions, as stored in array pagebbox, so they % match one of the known sizes in the papersizes array. Lower left coordinates % are always set to 0. % /roundpagebbox { 7 dict begin /papersizes [8.5 inch 11 inch 14 inch 17 inch] def /mappapersize { /val exch def /slop .5 inch def /diff slop def /j 0 def 0 1 papersizes length 1 sub { /i exch def papersizes i get val sub abs dup diff le {/diff exch def /j i def} {pop} ifelse } for diff slop lt {papersizes j get} {val} ifelse } def pagebbox 0 0 put pagebbox 1 0 put pagebbox dup 2 get mappapersize 2 exch put pagebbox dup 3 get mappapersize 3 exch put end } bind def %%EndProlog %%BeginSetup mark /linewidth 0.5 def /#copies 1 store /landscape false def /resolution 720 def setup 2 setdecoding %%EndSetup %%Page: 1 1 /saveobj save def mark 1 pagesetup 12 B f (The Text Editor)2 827 1 2343 1230 t 12 CW f (sam)3200 1230 w 10 I f (ROB PIKE)1 441 1 2659 1470 t 10 R f (AT&T Bell Laboratories)2 993 1 2383 1650 t (Murray Hill, New Jersey 07974)4 1267 1 2246 1770 t 10 I f (ABSTRACT)2643 2150 w 10 CW f (Sam)1080 2446 w 10 R f ( textual com-)2 541( A)1 129( text editor intended for bitmap displays.)6 1666(is an interactive multi-file)3 1053 4 1291 2446 t ( the mouse-driven, cut-and-paste interface to make complex)7 2450(mand language supplements)2 1150 2 1080 2566 t ( language is characterized by the composi-)6 1719( The)1 208( editing tasks easy to specify.)5 1186(or repetitive)1 487 4 1080 2686 t ( treat-)1 237( The)1 207( regular expressions to describe the structure of the text being modified.)11 2889(tion of)1 267 4 1080 2806 t (ment of files as a database, with changes logged as atomic transactions, guides the imple-)14 3600 1 1080 2926 t (mentation and makes a general `undo' mechanism straightforward.)7 2672 1 1080 3046 t 10 CW f (Sam)1330 3202 w 10 R f ( a low-bandwidth stream, one)4 1224(is implemented as two processes connected by)6 1912 2 1544 3202 t ( it can run)3 435( Therefore)1 453( the other the editing algorithms.)5 1360(process handling the display and)4 1352 4 1080 3322 t ( with both pro-)3 600(with the display process in a bitmap terminal and the editor on a local host,)14 3000 2 1080 3442 t ( process in the terminal and the edi-)7 1442(cesses on a bitmap-equipped host, or with the display)8 2158 2 1080 3562 t ( can even run without a bitmap)6 1243( suppressing the display process, it)5 1388( By)1 167(tor in a remote host.)4 802 4 1080 3682 t (terminal.)1080 3802 w ( 17, number)2 502(This paper is reprinted from Software\320Practice and Experience, Vol)8 2848 2 1330 3958 t (11, pp. 813-845.)2 658 1 1080 4078 t 6 R f (KEY WORDS)1 354 1 1080 4318 t 8 R f ( Undo)1 258( expressions)1 391( Caches Regular)2 642(Text editors)1 382 4 1494 4318 t 10 B f (Introduction)720 4438 w 10 CW f (Sam)720 4594 w 10 R f ( that combines cut-and-paste interactive editing with an unusual command)9 3025(is an interactive text editor)4 1085 2 930 4594 t ( is written as two programs: one, the `host)8 1775( It)1 123( composition of regular expressions.)4 1499(language based on the)3 923 4 720 4714 t ( the command language and provides file access; the other,)9 2428(part,' runs on a Unix* system and implements)7 1892 2 720 4834 t ( bitmap display and supports the)5 1337(the `terminal part,' runs asynchronously on a machine with a mouse and)11 2983 2 720 4954 t ( host part may be even run in isolation on an ordinary terminal to edit)14 2859( The)1 211(display and interactive editing.)3 1250 3 720 5074 t ( command language, much like a traditional line editor, without assistance from a mouse or)14 3763(text using the)2 557 2 720 5194 t ( runs on a Blit)4 583( often, the terminal part)4 952(display. Most)1 573 3 720 5314 t 6 R f (1)2828 5264 w 10 R f (terminal \(actually on a Teletype DMD 5620, the pro-)8 2153 1 2887 5314 t ( Sun com-)2 423(duction version of the Blit\), whose host connection is an ordinary 9600 bps RS232 link; on the)16 3897 2 720 5434 t (puter the host and display processes run on a single machine, connected by a pipe.)14 3283 1 720 5554 t 10 CW f (Sam)970 5710 w 10 R f ( unlike)1 282( has no facilities for multiple fonts, graphics or tables,)9 2210( It)1 117(edits uninterpreted ASCII text.)3 1250 4 1181 5710 t (MacWrite,)720 5830 w 6 R f (2)1149 5780 w 10 R f (Bravo,)1211 5830 w 6 R f (3)1480 5780 w 10 R f (Tioga)1542 5830 w 6 R f (4)1775 5780 w 10 R f (or Lara.)1 322 1 1837 5830 t 6 R f (5)2159 5780 w 10 R f ( this)1 176( \(Throughout)1 561( has a rich command language.)5 1266(Also unlike them, it)3 816 4 2221 5830 t (paper, the phrase)2 708 1 720 5950 t 10 I f (command language)1 800 1 1468 5950 t 10 R f ( commands activated from the mouse)5 1575(refers to textual commands;)3 1157 2 2308 5950 t (form the)1 344 1 720 6070 t 10 I f (mouse language.)1 679 1 1092 6070 t 10 R f (\))1771 6070 w 10 CW f (Sam)1856 6070 w 10 R f (developed as an editor for use by programmers, and tries to join the styles)13 2977 1 2063 6070 t (of the Unix text editor)4 968 1 720 6190 t 10 CW f (ed)1733 6190 w 6 R f (6,7)1853 6140 w 10 R f ( cut-and-paste editors by providing a comfortable)6 2100(with that of interactive)3 967 2 1973 6190 t ( The)1 214( language driven by regular expressions.)5 1658(mouse-driven interface to a program with a solid command)8 2448 3 720 6310 t ( language, and acquired a notation for describing the)8 2186(command language developed more than the mouse)6 2134 2 720 6430 t ( a dataflow-like syntax for specifying)5 1594(structure of files more richly than as a sequence of lines, using)11 2726 2 720 6550 t (changes.)720 6670 w (The interactive style was influenced by)5 1576 1 970 6826 t 10 CW f (jim)2573 6826 w 10 R f (,)2753 6826 w 6 R f (1)2778 6776 w 10 R f ( for the Blit, and by)5 798(an early cut-and-paste editor)3 1144 2 2835 6826 t 10 CW f (mux)4805 6826 w 10 R f (,)4985 6826 w 6 R f (8)5010 6776 w 10 R f (the Blit window system.)3 1000 1 720 6946 t 10 CW f (Mux)1779 6946 w 10 R f (merges the original Blit window system,)5 1662 1 1993 6946 t 10 CW f (mpx)3688 6946 w 10 R f (,)3868 6946 w 6 R f (1)3893 6896 w 10 R f (with cut-and-paste editing,)2 1084 1 3956 6946 t 8 S1 f (__________________)720 7046 w 8 R f (* Unix is a registered trademark of AT&T.)7 1365 1 720 7146 t cleartomark showpage saveobj restore %%EndPage: 1 1 %%Page: 2 2 /saveobj save def mark 2 pagesetup 10 R f (- 2 -)2 166 1 2797 480 t ( like a multiplexed version of)5 1199(forming something)1 768 2 720 840 t 10 CW f (jim)2717 840 w 10 R f (that edits the output of \(and input to\) command ses-)9 2113 1 2927 840 t (sions rather than files.)3 882 1 720 960 t ( paper describes the command language, then the mouse language, and explains)11 3251(The first part of this)4 819 2 970 1116 t ( first of the host part, then of the)8 1290( is followed by a description of the implementation,)8 2076( That)1 234(how they interact.)2 720 4 720 1236 t ( influenced the design of)4 991( principle that)2 555( A)1 122(terminal part.)1 538 4 720 1356 t 10 CW f (sam)2952 1356 w 10 R f (is that it should have no explicit limits, such as)9 1882 1 3158 1356 t ( honor these two)3 663( To)1 161( secondary consideration is that it be efficient.)7 1841( A)1 122( length.)1 300(upper limits on file size or line)6 1233 6 720 1476 t ( breaking them into)3 783(goals together requires a method for efficiently manipulating huge strings \(files\) without)11 3537 2 720 1596 t ( control of the command language.)5 1407(lines, perhaps while making thousands of changes under)7 2280 2 720 1716 t 10 CW f (Sam)4460 1716 w 10 R f ('s method)1 400 1 4640 1716 t ( updates may)2 541( These)1 295( as a transaction database, implementing changes as atomic updates.)9 2783(is to treat the file)4 701 4 720 1836 t ( is achieved through a collection of caches that minimizes)9 2328( Efficiency)1 467( easily to `undo' changes.)4 1031(be unwound)1 494 4 720 1956 t (disc traffic and data motion, both within the two parts of the program and between them.)15 3542 1 720 2076 t (The terminal part of)3 804 1 970 2232 t 10 CW f (sam)1800 2232 w 10 R f ( interesting is how the two halves of the edi-)9 1791( More)1 268(is fairly straightforward.)2 975 3 2006 2232 t ( data structure that)3 746( is achieved through a)4 888( This)1 231(tor stay synchronized when either half may initiate a change.)9 2455 4 720 2352 t (organizes the communications and is maintained in parallel by both halves.)10 3005 1 720 2472 t (The last part of the paper chronicles the writing of)9 2067 1 970 2628 t 10 CW f (sam)3069 2628 w 10 R f ( lessons that were learned)4 1057(and discusses the)2 702 2 3281 2628 t (through its development and use.)4 1324 1 720 2748 t ( is composed largely of two papers of reasonable length: a description of the)13 3164(The paper is long, but)4 906 2 970 2904 t (user interface of)2 653 1 720 3024 t 10 CW f (sam)1401 3024 w 10 R f ( are combined because the implementa-)5 1597( They)1 258(and a discussion of its implementation.)5 1576 3 1609 3024 t (tion is strongly influenced by the user interface, and vice versa.)10 2528 1 720 3144 t 10 B f (The Interface)1 579 1 720 3384 t 10 CW f (Sam)720 3540 w 10 R f ( names may be provided when it is invoked:)8 1765( File)1 206(is a text editor for multiple files.)6 1291 3 925 3540 t 9 CW f (sam file1 file2 ...)3 1026 1 1008 3710 t 10 R f ( are not read until necessary to)6 1255( Files)1 251( files and discard unneeded ones.)5 1349(and there are commands to add new)6 1465 4 720 3890 t ( file is read; the)4 673( operations apply to an internal copy made when the)9 2214( Editing)1 359(complete some command.)2 1074 4 720 4010 t ( simplify the discussion, the)4 1124( To)1 162( is changed only by an explicit command.)7 1672(Unix file associated with the copy)5 1362 4 720 4130 t (internal copy is here called a)5 1144 1 720 4250 t 10 I f (file)1889 4250 w 10 R f (, while the disc-resident original is called a)7 1714 1 2017 4250 t 10 I f (disc file.)1 339 1 3756 4250 t 10 CW f (Sam)970 4406 w 10 R f ( connected to a bitmap display that presents a cut-and-paste editor driven by the)13 3446(is usually)1 400 2 1194 4406 t ( special window, called the)4 1116( this mode, the command language is still available: text typed in a)12 2776(mouse. In)1 428 3 720 4526 t 10 CW f (sam)720 4646 w 10 I f (window,)930 4646 w 10 R f ( editing may be)3 637( Cut-and-paste)1 616( as commands to be executed in the current file.)9 1961(is interpreted)1 529 4 1297 4646 t (used in any window \320 even in the)7 1467 1 720 4766 t 10 CW f (sam)2223 4766 w 10 R f ( mode of operation,)3 812( other)1 241( The)1 216(window to construct commands.)3 1332 4 2439 4766 t (invoked by starting)2 774 1 720 4886 t 10 CW f (sam)1520 4886 w 10 R f (with the option)2 608 1 1726 4886 t 10 CW f (-d)2360 4886 w 10 R f ( the mouse or bitmap display,)5 1193(\(for `no download'\), does not use)5 1341 2 2506 4886 t ( even on an ordinary terminal, interactively or)7 1849(but still permits editing using the textual command language,)8 2471 2 720 5006 t (from a script.)2 535 1 720 5126 t (The following sections describe first the command language \(under)8 2783 1 970 5282 t 10 CW f (sam -d)1 360 1 3789 5282 t 10 R f (and in the)2 418 1 4185 5282 t 10 CW f (sam)4640 5282 w 10 R f (win-)4857 5282 w ( two languages are nearly independent, but connect through the)9 2573( These)1 293( the mouse interface.)3 846(dow\), and then)2 608 4 720 5402 t 10 I f (current text,)1 488 1 720 5522 t 10 R f (described below.)1 676 1 1233 5522 t 10 B f (The Command Language)2 1090 1 720 5762 t 10 R f ( array of characters \(that is, a string\); the)8 1644(A file consists of its contents, which are an)8 1733 2 720 5918 t 10 I f (name)4125 5918 w 10 R f (of the associated)2 671 1 4369 5918 t (disc file; the)2 498 1 720 6038 t 10 I f (modified bit)1 483 1 1245 6038 t 10 R f ( those of the disc file; and a substring of the)10 1758(that states whether the contents match)5 1527 2 1755 6038 t (contents, called the)2 786 1 720 6158 t 10 I f (current text)1 472 1 1540 6158 t 10 R f (or)2046 6158 w 10 I f (dot)2163 6158 w 10 R f ( the current text is a null string, dot falls)9 1689( If)1 126( and 2\).)2 322(\(see Figures 1)2 578 4 2325 6158 t ( The)1 211(between characters.)1 791 2 720 6278 t 10 I f (value)1753 6278 w 10 R f ( the location of the current text; the)7 1441(of dot is)2 340 2 2000 6278 t 10 I f (contents)3811 6278 w 10 R f (of dot are the charac-)4 866 1 4174 6278 t (ters it contains.)2 610 1 720 6398 t 10 CW f (Sam)1381 6398 w 10 R f (imparts to the text no two-dimensional interpretation such as columns or fields; text is)13 3453 1 1587 6398 t ( the idea of a `line' of text as understood by most Unix programs \320 a)15 3037( Even)1 272(always one-dimensional.)1 1011 3 720 6518 t (sequence of characters terminated by a newline character \320 is only weakly supported.)12 3454 1 720 6638 t (The)970 6794 w 10 I f (current file)1 453 1 1156 6794 t 10 R f ( in the)2 264( current text is therefore dot)5 1141( The)1 211(is the file to which editing commands refer.)7 1784 4 1640 6794 t ( explicitly name a particular file or piece of text, the command is)12 2827( a command doesn't)3 870( If)1 137(current file.)1 486 4 720 6914 t ( presence of multiple files and consider)6 1629( the moment, ignore the)4 988( For)1 198(assumed to apply to the current text.)6 1505 4 720 7034 t (editing a single file.)3 794 1 720 7154 t ( for non-editing commands such as writing the file to disc,)10 2354( Except)1 329(Commands have one-letter names.)3 1387 3 970 7310 t cleartomark showpage saveobj restore %%EndPage: 2 2 %%Page: 3 3 /saveobj save def mark 3 pagesetup 10 R f (- 3 -)2 166 1 2797 480 t cleartomark saveobj restore %ps_include: begin save /ed {exch def} def {} /showpage ed {} /copypage ed {} /erasepage ed {} /letter ed currentdict /findfont known systemdict /findfont known and { /findfont systemdict /findfont get def } if 36 dict dup /PS-include-dict-dw ed begin /context ed count array astore /o-stack ed %ps_include: variables begin /llx 24 def /lly 241 def /urx 587.76 def /ury 550.6 def /w 0 def /o 0 def /s 0 def /cx 2880 def /cy -2220 def /sx 4320 def /sy 2520 def /ax 0.5 def /ay 0.5 def /rot 0 def %ps_include: variables end {llx lly urx ury} /bbox ed {newpath 2 index exch 2 index exch dup 6 index exch moveto 3 {lineto} repeat closepath} /boxpath ed {dup mul exch dup mul add sqrt} /len ed {2 copy gt {exch} if pop} /min ed {2 copy lt {exch} if pop} /max ed {transform round exch round exch A itransform} /nice ed {6 array} /n ed n defaultmatrix n currentmatrix n invertmatrix n concatmatrix /A ed urx llx sub 0 A dtransform len /Sx ed 0 ury lly sub A dtransform len /Sy ed llx urx add 2 div lly ury add 2 div A transform /Cy ed /Cx ed rot dup sin abs /S ed cos abs /C ed Sx S mul Sy C mul add /H ed Sx C mul Sy S mul add /W ed sy H div /Scaley ed sx W div /Scalex ed s 0 eq {Scalex Scaley min dup /Scalex ed /Scaley ed} if sx Scalex W mul sub 0 max ax 0.5 sub mul cx add /cx ed sy Scaley H mul sub 0 max ay 0.5 sub mul cy add /cy ed urx llx sub 0 A dtransform exch atan rot exch sub /rot ed n currentmatrix initgraphics setmatrix cx cy translate Scalex Scaley scale rot rotate Cx neg Cy neg translate A concat bbox boxpath clip newpath w 0 ne {gsave bbox boxpath 1 setgray fill grestore} if end gsave %ps_include: inclusion begin /picstr 98 string def 24 241 translate 563.76 309.60 scale 783 430 1 [783 0 0 -430 0 430] {currentfile picstr readhexstring pop} image 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0001 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0001 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0001 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0001 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0001 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0001 02001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfffffffe7fffffffe227ff0feffffffffffffff3ff87ff11ffcffffffff fffffffe7fe7ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffde01ffffe7fffffffe227fe7f9f833900fffffef3ff3e0711ffcffdffff1 e0fffffe7fe7ffe7f3e0ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfcfffffe7fffffffe233fe7f3f3b39e7fffffcf9ff3e7311ffcff9fffe9 ce7fffffffe7ffc7e3ce7fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfcfe3ffe4f879cfff773f80f3e7f3de7f0e73019fc0673bbffc8e03ffe9 ce7ff3907f07ffa7d3ce7fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfcfe3ffe27339cfff779fe7e7e7f25e7e6673cfcff3e73bbffc479fffd9 ce7ff3de7e67ff67b3fe7fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfcfe3ffe7279cdfff779fe7e7e7f25e7ce737cfcff3e73bbffce79fffd9 ce7ff25e7ce7ffe7f3fe7fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02ffdfcfffffe7279c3fffffcfe7e7e7f25e7ce70fcfe7f3e67ffffce79fffb9 ce7ff25e7ce7ffe7f3fcffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fcfffffe7279f7fffffcfe7e7e7f93e7c07dfcfe7f3e0fffffce79fff80 ce7ff25e7ce7ffe7f3f9ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fcfffffe7279e1fffffe7e7e7e7f93e7cff87cff3f3e7fffffce79fff80 ce7ff93e7ce7ffe7f3f3ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fcfe3ffe7279d9fffffe7e7e7e7f93e7cff67cff3f3e7fffffce79ffff9 ce7ff93e7ce7ffe7f3e7ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fcfe3ffe67339cffffff3e7e7f3b93e7e6673cff9f3e7fffffce79ffff9 ce7ff93e7e47ffe7f3c07fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fcfe3ffe0f879cffffff381f3f8393e7f0e73e1f9c0e7fffffce7c3ffe0 e0fff9300f27ff81c0c07fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889ffffffffffffffffffff9fff3fffffffffffffffcffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221ffffffffffffffffffff9fff9fffffffffffffffcffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889ffffffffffffffffffffffffeffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffe7fffffffe227ff0feffffffffffffff3ff87ff11ffcffffffff fffffffe7fe7fffffffffffcfffcffffffffffffffffffefffffffffffffffff fffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffff ff81 02221e07ffffe7fffffffe227fe7f9f833903fffffff3ff3e0711ffcffdffff1 e0fffffe7fe7ff83c1fffffcff7cfffffffffffffeffff9c03ffffffffffff3e 0fffff00ffffffffff3fffffffffffffffffffffffffffffffffffffffffffff ff81 02889e73ffffe7fffffffe233fe7f3f3b3939fffffff9ff3e7311ffcff9fffe9 ce7fffffffe7ff399cfffffffe7cfffffffffffffcffff3f9ffffffffffffe3c e7ffffe7ffffffffff9fffffffffffffffffffffffffffffffffffffffffffff ff81 02221e73e3ffe4f879cfff773f80f3e7f3d39e0f07279fc0673bbffc8e03ffe9 ce7ff3907f07ff399cffe720f80c8fffff9cfff0701fff3f9fffe1ffe73cfd3c ffffffe7fff87ff9cf9fffffffffffffffffffffffffffffffffffffffffffff ff81 02889e73e3ffe27339cfff779fe7e7e7f2539ce67313cff3e73bbffc479fffd9 ce7ff3de7e67ff399cffe7bcfe7c47ffff9effe73cfffe7f9fffccffe73cfb3c ffffffe7fff33ff9cfcfffffffffffffffffffffffffffffffffffffffffffff ff81 02221e77e3ffe7279cdfff779fe7e7e7f253bfe67f39cff3e73bbffce79fffd9 ce7ff25e7ce7ff399cffe4bcfe7ce7ffff92ffff3cfffe7f9fff9cfff37cff3c ffffffe7ffe73ff9efcfffffffffffffffffffffffffffffffffffffffffffff ff81 02889e0fffffe7279c3fffffcfe7e7e7f2507fe63f39e7f3e67ffffce79fffb9 ce7ff25e7ce7ff819cffe4bcfe7ce7ffff92ffff3cfffe7f9fff9cfff0e01f3c 0fffffe7ffe73ffccfcfffffffffffffffffffffffffffffffffffffffffffff ff81 02221e67ffffe7279f7fffffcfe7e7e7f9333e070739e7f3e0fffffce79fff80 ce7ff25e7ce7fff99cffe4bcfe7ce7ffff92fff03cfffe7f9fff80fffde01f3c e7ffffe7ffe03ffcdfcfffffffffffffffffffffffffffffffffffffffffffff ff81 02889e67ffffe7279e1fffffe7e7e7e7f9333ce7e339f3f3e7fffffce79fff80 ce7ff93e7ce7fff99cfff27cfe7ce7ffffc9ffe73cfffe7f9fff9ffff87cff3c e7ffffe7ffe7fffcdfcfffffffffffffffffffffffffffffffffffffffffffff ff81 02221e73e3ffe7279d9fffffe7e7e7e7f9339ce7f339f3f3e7fffffce79ffff9 ce7ff93e7ce7fff99cfff27cfe7ce7ffc7c9ffe73cfffe7f9fc79ff1f67cff3c e78fffe7f1e7fc7e3fcfffffffffffffffffffffffffffffffffffffffffffff ff81 02889e73e3ffe67339cffffff3e7e7f3b9339cc67333f9f3e7fffffce79ffff9 ce7ff93e7e47ff399cfff27cfe7ce7ffc7c9ffe63cfffe7f9fc7ccf1e73cff3c e78fffe7f1f33c7e3fcfffffffffffffffffffffffffffffffffffffffffffff ff81 02221e71e3ffe0f879cffffff381f3f839338e270707f9c0e7fffffce7c3ffe0 e0fff9300f27ff83c1fff2601f0ce7ffc7c9fff13e1fff3f9fc7e1f1e73ffc0e 0f8fffe7f1f87c7f3f9fffffffffffffffffffffffffffffffffffffffffffff ff81 02889ffffffffffffffffffff9fff3ffffffffffff3ffcffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffff ffcfffffffffffff7f9fffffffffffffffffffffffffffffffffffffffffffff ff81 02221ffffffffffffffffffff9fff9ffffffffffff3ffcffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffffffff ffcffffffffffffe7f3fffffffffffffffffffffffffffffffffffffffffffff ff81 02889ffffffffffffffffffffffffeffffffffffff3fffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffff ff9ffffffffffffc7effffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889e0fe7ffffffff0fffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fcfe7fffffffe7fffffffff807fffffffbfffff03ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fcffffffffffe7ffffffffff3ffffffff3fffff39ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fcf07c8f87ff80c670e5bfff3fffc3ffc070fff39ffe73fffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fcfe7c4733ffe7e066601fff3fff99fff3e67ff39ffe7bfffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fcfe7ce673ffe7e64f249fff3fff39fff3cf3ff3bffe4bfffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fcfe7ce673ffe7e7cf249fff3fff39fff3cf3ff07ffe4bfffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fcfe7ce603ffe7e7cf249fff3fff01fff3cf3ff33ffe4bfffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fcfe7ce67fffe7e7cf249fff3fff3ffff3cf3ff33fff27fffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02221fcfe7ce67fffe7e7cf249fff3f8f3ffff3cf3ff39f1f27fffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff81 02889fcfe7ce733ffe7e7e6649fff3f8f99fff3e67ff39f1f27fffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff ff81 02221e0100ce787ff81c1f0e49fff3f8fc3fff870fff38f1f27fffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff80000000800000ffffffffffffffffffffffffffffffffffffffffffff ff81 02221c00000000001fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff3f80000001800000ffffffffffffffffffffffffffffffffffffffffffff ff81 02889c00000000001fff87ffffffffffffffffffffcfffcfffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff0f80078c67f00000ffffffffffffffffffffffffffffffffffffffffffff ff81 02221c00000000001fff3fffffffffc0ffffffffffcfffcffdfffc1f8fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff1f800ccc61800000ffffffffffffffffffffffffffffffffffffffffffff ff81 02889c00000000001fff3fffffffffce7fffffffffffffcff9fff9cf4fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff3f8018cc61800000ffffffffffffffffffffffffffffffffffffffffffff ff81 02221c7c73398f0c7ffc0633872dffce7ffe1ffe320fe0c8e03ff9cf4fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7d80180c61800000ffffffffffffffffffffffffffffffffffffffffffff ff81 02889cc63f1f998c3fff3f033300ffce7ffccfff03cfccc479ffffcecfffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffff980180c61800000ffffffffffffffffffffffffffffffffffffffffffff ff81 02221c063319b0cdbfff3f327924ffcefff9cfff33cf9cce79ffffcecfffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffef080180c61800000ffffffffffffffffffffffffffffffffffffffffffff ff81 02889c06301830cdbfff3f3e7924ffc1fff9cfff3fcf9cce79ffff9dcfffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffce080180c61800000ffffffffffffffffffffffffffffffffffffffffffff ff81 02221c7e301830cdbfff3f3e7924ffccfff80fff3fcf9cce79ffff3c07ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fff8c0000ccee1800000ffffffffffffffffffffffffffffffffffffffffffff ff81 02889cc6301830c6dfff3f3e7924ffccfff9ffff3fcf9cce79fffe7c07ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fff08000078760f00000ffffffffffffffffffffffffffffffffffffffffffff ff81 02221cc6301830c6dfff3f3e7924ffce7c79ffff3fcf9cce79fffcffcfffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe00000000000000000ffffffffffffffffffffffffffffffffffffffffffff ff81 02889cce30181986dfff3f3f3324ffce7c7ccfff3fcfc8ce79fff80fcfffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffc10000000000000000ffffffffffffffffffffffffffffffffffffffffffff ff81 02221c767c3e0f06dffc0e0f8724ffce3c7e1ffe0e01e4ce7c3ff80f07ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff837ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ff81 02889c00000000001ffffffffffffffffffffffffffffcffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffc77ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ff81 02221c00000000001fffffffffffffffffffffffffff9cffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffef7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ff81 02889c00000000001fffffffffffffffffffffffffffc1ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fffffffff7ffffeffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffffffffe7ffffeffffffffffffffffffffffffffffffffffffffffffff ff81 02889f3ffffffffcffffff9fffffc47ffffffcffffffffc47ffffe7ffe7fffff fffffffffffffffffcfffffe1ff83fffffffffffffffffffffffffffffffffff ffff7fc9f078380f0ffeffffffffffffffffffffffffffffffffffffffffffff ff81 02221f3ffffffffcffffff9fffffc47dfffffcfffffff7c47ffffe7fbe7fffff ffffffff7ffffffffcfffffcffff3ffffff7ffffffffffffffffffffffffffff ffff7fc4e7339e7e67feffffffffffffffffffffffffffffffffffffffffffff ff81 02889f3fffffffffffffffffffffc479fffffcffffffe7c47fffffff3e7fffff fffffffe7ffffffffcfffffcffff3fffffe7ffffffffffffffffffffffffffff ffff7fce7f33fe7ce7feffffffffffffffffffffffffffffffffffffffffffff ff81 02221f27c3ce7fe0f91ce41f83ffeee0387ffc8f0f8380eefff3907c0647ffff ce7ff8380fff8723e0fff0f01fff3f078380fff07198ce1e73ffffffffffffff ffff7fce7f31fe7ce7feffffffffffffffffffffffffffffffffffffffffffff ff81 02889f1399ce7ffcf88ce79f39ffeef9f33ffc466739e7eefff3de7f3e23ffff cf7ff39e7fff3311ccffe67cffff3e7339e7ffe7381c0cce7bffffffffffffff ffff7fce70383e7c07feffffffffffffffffffffffffffffffffffffffffffff ff81 02221f393ce6fffcf9ccf79f3fffeef9e79ffce4f33fe7eefff25e7f3e73ffff c97fff9e7ffe73399cffcf3cffff3ff33fe7ffff399cc9e64bffffffffffffff ffff7fce673f1e7cfffeffffffffffffffffffffffffffffffffffffffffffff ff81 02889f393ce1fffcf9ce679f1ffffff9e79ffce4f31fe7fffff25e7f3e73ffff c97fff9e7ffe73399cffcf3cffff3ff31fe7ffff39fcf9e64bffffffffffffff ffff7fce673f9e7cfffeffffffffffffffffffffffffffffffffffffffffffff ff81 02221f393cfbfffcf9ce6f9f83fffff9e79ffce4f383e7fffff25e7f3e73ffff c97ff81e7ffe03399cffcf3cffff3f0383e7fff039fcf9e64bffffffffffffff ffff7fcce6339e7e67feffffffffffffffffffffffffffffffffffffffffffff ff81 02889f393cf0fffcf9ce6f9ff1fffff9e79ffce4f3f1e7fffff93e7f3e73ffff e4fff39e7ffe7f399cffcf3cffff3e73f1e7ffe739fcf9e727ffffffffffffff ffff7fc1f1383f0f0ffeffffffffffffffffffffffffffffffffffffffffffff ff81 02221f393cecfffcf9cf1f9ff9fffff9e79ffce4f3f9e7fffff93e7f3e73ffe3 e4fff39e7ffe7f399cffcf3cffff3e73f9e7ffe739fcf9e727ffffffffffffff ffff7fcffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ff81 02889f3399ce7ffcf9cf1f9f39fffff9f33ffce66739e7fffff93e7f3e73ffe3 e4fff31e7fff3339c8ffe67cffff3e6339e7ffe639fcfccf27ffffffffffffff ffff7fcffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ff81 02221f07c3ce7fe019cf1c0383fffffc387ffce70f83f0fffff9300f8673ffe3 e4fff89f0fff8739e4fff0f03ff8071383f0fff130783e1f27ffffffffffffff ffff7fcffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fffffffffff87feffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fffffffffff3ffeffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fffffffffff3ffeffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fe0e47838cc07feffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fce62339c0f3ffeffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fcfe73f9ccf3ffeffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fc7e73f9cff3ffeffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fe0e7381cff3ffeffffffffffffffffffffffffffffffffffffffffffff ff81 02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffc67339cff3ffeffffffffffffffffffffffffffffffffffffffffffff ff81 02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffe67339cff3ffeffffffffffffffffffffffffffffffffffffffffffff ff81 02001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fce67331cff3ffeffffffffffffffffffffffffffffffffffffffffffff ff81 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00007fe0e738983c0ffe00000000000000000000000000000000000000000000 0001 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00007ffffffffffffffe00000000000000000000000000000000000000000000 0001 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00007ffffffffffffffe00000000000000000000000000000000000000000000 0001 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00007ffffffffffffffe00000000000000000000000000000000000000000000 0001 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffc1fffffcffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fff9fffffcffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221ffffffffffe1e7ffffffffff3ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fff9fffffcffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffffffffcfe7fff03fffff3ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fff9f87c3ce7ffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221ffffffffffcffffff03ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fff9f3399cefffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffffffff0107f077fff9383f87fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fff9e793ccdfffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221ffffffffffcfe7e677fff89f3f33fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fff9e793ccbfffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffffffffcfe7ce71fff9cf3e73fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fff9e793cc3fffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fff80fffffcfe7ce7c7ff9cf3e7ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fff9e793cc9fffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fff80fffffcfe7ce7f3ff9cf3e7ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fff9e793cccfffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221ffffffffffcfe7ce7f3ff9cf3e7ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fff9f3399ce7ffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffff1fffcfe7ce7f3c79cf3e7ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffc0387c3ce7ffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221ffffff1fffcfe7e4673c799f3f33fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffff1fff0300f2707c78380787fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffe7ffff9fffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffffffffffffce7ffff9fffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221ffffffffffffffe0fffff9fffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffefffffffefffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221ff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffcfffffffe7ffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ff9cb7399cf3ffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ff3c03399cf9ffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ff3c1c6633879cfffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fe7c9339cdfcffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fe79ce0703339efffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fc7c9339c3fc7feffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fe7fce67327992fffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fe7c9339f7fcffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fcffce7f3e7992fffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ff3c9339e1f9ffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fcfc0e7f3e7992fffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ff9c9339d9f3ffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f9f9ce7f3e79c9fffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffcc93119ce7ffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f9f9ce7f3e79c9fffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffec93899cefffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f3f98e7f3f33c9fffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f3fc4c1e0f87c9fffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fe7fffffffffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fe7fffffffffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fcffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fcf07198ce1e73effffffffffffffffffffffffffffffffffffffffffff ffe1 0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7f9e7381c0cce7beffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7f9ff399cc9e64beffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7f3ff39fcf9e64beffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7f3f039fcf9e64beffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7e7e739fcf9e727effffffffffffffffffffffffffffffffffffffffffff ffe1 0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7e7e739fcf9e727effffffffffffffffffffffffffffffffffffffffffff ffe1 0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7cfe639fcfccf27effffffffffffffffffffffffffffffffffffffffffff ffe1 0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7cff130783e1f27effffffffffffffffffffffffffffffffffffffffffff ffe1 0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff79fffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff79fffffffffffffeffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0001 00000000000000000000000000000000000000000000077fef81fffff3ffffff fceec00c0303e633f060300060060fc77ffe7feffff8f07fffff3ff3fff3f9f0 7fffff3fdf3fffffffffffffffdfff80e07ff01c1f8ffffffffffffffe000000 0001 0ffffffffffffffffffffffffffffffffffffffffffff77fef9ffffff3ffffff fcee600c060626330000300030060c677ffe7fcffff4e73ffffffff3ffe3f1e7 3fffffff9f3fffffffffffffff9fff80e07ff019cf4ffffffffffffffeffffff ffe1 0ffffffffffffffffffffffffffffffffffffffffffff77fef9ff1fff27c3ce7 fc44603f860c061303e0301e301fcc622ffe4701fff4e73ff9c83f83ffd3e9e7 3ff9c83e0323ffffe4739ffe0e03fffeefffffd9cf4ffffffffffffffeffffff ffe1 0e001ffffffffffffffffffffffffffffffffffffffff77fef9ff1fff1399ce7 fc44300c0c0c06d30060303318060c622ffe23cfffece73ff9ef3f33ffb3d9ff 3ff9ef3f9f11ffffe233dffce79ffffcefffff99cecffffffffffffffeffffff ffe1 0e889ffffffffffffffffffffffffffffcffffe7fffff77fef9ff1fff393ce6f fc44300c0c0c06d30060306318060c622ffe73cfffece73ff92f3e73fff3f9ff 3ff92f3f9f39ffffe7325fffe79ffff9e3ffff39cecffffffffffffffeffffff ffe1 0e221fffffffffffffffbffffffffffffcffffe7fffff77fef83fffff393ce1f fc00180c0c0c06d3e06030630c060cc00ffe73cfffdce73ff92f3e73fff3f9fe 7ff92f3f9f39ffffe7325fffe79ffff3f8fffe79cdcffffffffffffffeffffff ffe1 0e889fffffffffffffff3fffffffffffffffffe7fffff77fef9ffffff393cfbf fc00180c0c0c03630060307f0c060f800ffe73cfffc0673ff92f3e73fff3f9fc fff92f3f9f39ffffe7325ffe079fffe7fe7ffcf9cc07fffffffffffffeffffff ffe1 0e221f19e1f0673c3c1c0707ffc1ffe720f91f070f39f77fef9ffffff393cf0f fc000c0c0c0c03630060306006060c000ffe73cfffc0673ffc9f3e73fff3f9f9 fffc9f3f9f39ffffe7393ffce79fffe7fe7ffcf9cc07fffffffffffffeffffff ffe1 0e889f81cce6673999cf3e73ff9cffe7bcf88e66673df77fef9ff1fff393cecf fc000c0c0c0c03630060306006060c000ffe73cffffce73ffc9f3e73fff3f9f3 fffc9f3f9f39fff1e7393ffce79fffcffe78f9f9cfcffffffffffffffeffffff ffe1 0e221f999cce673399ff3e7ffffcffe4bcf9cce4f325f77fef9ff1fff3399ce7 fc00060c0c0623630060303303060c000ffe73cffffce73ffc9f3f23fff3f9e0 3ffc9f3f9f39fff1e7393ffcc79fffcfce78f9f9cfcffffffffffffffeffffff ffe1 0e889f9f9cce673398ff3e3ffffcffe4bcf9cce4f325f77fef9ff1fff07c3ce7 fc00063f0603e36303fdfe1e031f8c000ffe73e1fff0707ffc980793ffc0e060 3ffc9807c339fff1e7393ffe27c3ffcfe0f8f9fc1f07fffffffffffffeffffff ffe1 0e221f9f80ce67301c1f3f07ffc0ffe4bcf9cce4f325f77fefffffffffffffff fc0003000600000000000000018000000fffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffcfffffffffffffffffffffeffffff ffe1 0e889f9f9fce6733ff8f3fe3ff9cfff27cf9cce4f393f77fefffffffffffffff fc0003000300000000000000018000000fffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffcfffffffffffffffffffffeffffff ffe1 0e221f9f9fce6733ffcf3ff3ff9cfff27cf9cce4f393f77fefffffffffffffff fc0000000080000000000000000000000fffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffff9fffffffffffffffffffffeffffff ffe1 0e889f9fcce4623999cf3e73ff98fff27cf9ce466793f77fefffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221f07e1f2713c3c1f8707ffc4fff26019cf270f93f77fefffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889ffffffe7ffffffffffffffffffffffffffffffff77fefffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221ffffffe7ffffffffffffffffffffffffffffffff77fefffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889ffffffe7ffffffffffffffffffffffffffffffff7088fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221ffffffffffffffffffffffffffffffffffffffff7222fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889ffffffffffffffffffffffffffffffffffffffff7088fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221fffe0ce7ffffffffffffffffffffffffffffffff7222fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889fffcece7ffffffffffffffffffffffffffffffff7088fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221fff9fcf7ff23e1ce7fffffffffffffffffffffff7222fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889fff9fc97ff11cccf7fffffffffffffffffffffff7088fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221fff9fc97ff399cc97fffffffffffffffffffffff7222fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889fff9fc97ff399cc97fffffffffffffffffffffff7088fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221fff9fe4fff3980c97fffffffffffffffffffffff7222fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889fff9fe4fff399fe4ffffffffffffffffffffffff7088fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221fc79fe4fff399fe4fffc7fffffffffffffffffff7222fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889fc7cee4fff39cce4fffc7fffffffffffffffffff7088fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221fc7e0e4fff39e1e4fffc7fffffffffffffffffff7222f07f3ffffffff87 fffffffffffffffffffffffffffff3ffff87c3ffffffffffff0f87ffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889fffffffffffffffffffe7fffffffffffffffffff7088fe7f3ffffffff3f ffffffffe0f83fffffffefffffe733ffff3f9fffffffe07ffe7f3fffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221fffffffffffffffffffe7fffffffffffffffffff7222fe7ffffffffff3f ffffffffe6739fffffffcfffffe733ffff3f9fffffffe73ffe7f3fffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889fffffffffffffffffffcffffffffffffffffffff7088fe783e47c3ffc06 33872dffe7339ffc8fff01c3ffe23279cc0603c38cffe733980c078719ffe0ff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221ffffffffffffffffffffffffffffffffffffffff7222fe7f3e2399fff3f 033300ffe73f9ffc47ffcf99ffe23139cf3f9f99c0ffe7339e7f3f3381ffce7f fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889ffffffffffffffffffffffffffffffffffffffff7088fe7f3e7339fff3f 327924ffe73f9ffce7ffcf3cffe93399cf3f9f39ccffe7739e7f3e7399ffcfff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221fffe0ce7ffffffffffffffffffffffffffffffff7222fe7f3e7339fff3f 3e7924ffe73f3ffce7ffcf3cffe93399cf3f9f39cfffe0f39e7f3e739fffc7ff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889fffcece7ffffffffffffffffffffffffffffffff7088fe7f3e7301fff3f 3e7924ffe73e7ffce7ffcf3cffe93399cf3f9f01cfffe7739e7f3e039fffe0ff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221fff9fcf7ff39e1c670f39fffffffffffffffffff7222fe7f3e733ffff3f 3e7924ffe73cfffce7ffcf3cffe93399cf3f9f3fcfffe7339e7f3e7f9ffffc7f fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889fff9fc97ff39cce066739fffffffffffffffffff7088fe7f3e733ffff3f 3e7924ffe739fe3ce7ffcf3cffef3399cf3f9f3fcff1e7339e7f3e7f9fe3fe7f fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221fff9fc97ff9b9ce64f39bfffffffffffffffffff7222fe7f3e7399fff3f 3f3324ffe6701e3ce7ffcf99ffef33388f3f9f99cff1e7311e7f3f339fe3ce7f fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889fff9fc97ff879ce7cf387fffffffffffffffffff7088f0080673c3ffc0e 0f8724ffe0f01e3ce7ffe1c3ffef307c4c0e07c383f1e078981c0f8707e3e0ff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221fff9fe4fffef80e7cf3effffffffffffffffffff7222fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889fff9fe4fffc39fe7cf3c3fffffffffffffffffff7088fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221fc79fe4fffb39fe7cf3b3fffffffffffffffffff7222fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889fc7cee4fff39cce7e6739fffffffffffffffffff7088fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221fc7e0e4fff39e1c1f0f39fffffffffffffffffff7222fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889ffffffffffffffffffffffffffffffffffffffff7088fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221ffffffffffffffffffffffffffffffffffffffff7222fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889ffffffffffffffffffffffffffffffffffffffff7088fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221ffffffffffffffffffffffffffffffffffffffff7222fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889ffffffffffffffffffffffffffffffffffffffff7088fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221ffffffffffffffffffffffffffffffffffffffff7222fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889ffffffffffffffffffffffffffffffffffffffff7088fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221f878cfffffffffffffffffffffffffffffffffff7222fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889f33c0fffffffffffffffffffffffffffffffffff7088fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221e79ccfffffffffffffffffffffffffffffffffff7222fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889e79cffffffffffffffffffffffffffffffffffff7088fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221e79cffffffffffffffffffffffffffffffffffff7000fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889e79cffffffffffffffffffffffffffffffffffff7ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e221e79cffffffffffffffffffffffffffffffffffff7ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff ffe1 0e889f33cffffffffffffffffffffffffffffffffffff0000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000ffffff ffe1 0e221f8783ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffe0ce7ffffffffe7fffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffcece7ffffffffe7fffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fff9fcf7ff19e1e0e478393f0ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fff9fc97ff81ccce6233989e67fffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfff9fc97ff999ccfe73f99cce7fffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0effdfff9fc97ff9f9cc7e73f99cce7fffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fff9fe4fff9f80e0e73819cc07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fff9fe4fff9f9ffc673399ccfffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fc79fe4fff9f9ffe673399ccffffc7fffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fc7cee4fff9fccce6733199e67ffc7fffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fc7e0e4fff07e1e0e738983f0fffc7fffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffff9ffffffe7fffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffff9ffffffe7fffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffff9ffffffcffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fcffffffff3fffffffffffffffff3ffffffffffffffffffffffffffffff fffffe1fffffffffffcfffffffffffffff07fffffffffffffffffffffffffffc fffffffffff9fff9ffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fcff7fffff3fffffffffffffffdf3ffffffffffffffffffffffffffffff fffffcfffffffffff7cfffffffffffffffe7fffffffffffffffff7fffffffffc fffffffffff9fef9ffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffe7fffff3fffffffffffffff9f3ffffffffffffffffffffffffffffff fffffcffffffffffe7cfffffffffffffffe7ffffffffffffffffe7fffffffffc fffffffffffffcf9ffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221e0f80fff8723c1c8f83c3c1ffe0323e1ffcb7879ce0f87ffe1ce63383c3 c67ff018ce1cb7ff80c8f87ff9ce0e7383e7fff07198ce1e73ff80e1fff83ffc 9f0f39ffce41f0191fffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fcfe7fff33119cc4733999cfff9f11ccffc03339cce733ffccce7033999 e07ffcfc0ccc03ffe7c4733ff9cce67339e7ffe7381c0cce7bffe7ccfff39ffc 4e6739ffcf79fcf88fffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fcfe7ffe7339fcce673399ffff9f399cffc92799ccfe73ff9cce7333f3c e67ffcfcc9e493ffe7ce673ff9ccfe73f9e7ffff399cc9e64bffe79e7fff9ffc e4f39bffc979fcf9cfffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fcfe7ffe7f39fcce673398ffff9f399cffc92799cc7e73ff9fce73f1f3c e7fffcfcf9e493ffe7ce673ff9cc7e73f9e7ffff39fcf9e64bffe79e7fff9ffc e4f387ffc979fcf9cfffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fcfe7ffe7f39c0ce67301c1fff9f3980ffc92799ce0e03ff9fce73f833c e7fffcfcf9e493ffe7ce603ff9ce0e7381e7fff039fcf9e64bffe79e7ff81ffc e4f3efffc979fcf9cfffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fcfe7ffe7f399cce6733ff8fff9f399fffc92799cfc67fff9fce73ff13c e7fffcfcf9e493ffe7ce67fff9cfc67339e7ffe739fcf9e727ffe79e7ff39ffc e4f3c3ffe4f9fcf9cfffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fcfe7ffe7f399cce6733ffcfff9f399fffc92799cfe67fff9fce73ff93c e7fffcfcf9e493ffe7ce67fff9cfe67339e7ffe739fcf9e727ffe79e7ff39ffc e4f3b3ffe4f9fcf9cfffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fcfe7fff333998ce723999cfff9f39ccffc933388ce733ffccc473f3999 e7fffcfcfccc93ffe7ce733ff88ce62331e7ffe639fcfccf27ffe7ccfff31ffc ce6739ffe4f9fcf9cfffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221e01f0fff8739c4ce793c3c1fffc339e1ffc9387c4e0f87ffe1e260f83c3 c1fff0383e1c93fff0ce787ffc4e0f138900fff130783e1f27fff0e1fff89ffc 1f0f39ffe4c03e19cfffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221ffffffffffffffffe73ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffff07ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffffffffff0783fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221ffffffffffffe7f3fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffffffffffe7f3fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f83ffe0cb783e7f3fff838cc670f39fffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f39ffce40339e7f3fff39c0e06673dfffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221ff9ffcfc93f9e7f3ffff9cce64f325fffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ff9ffc7c93f9e7f3ffff9cfe7cf325fffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f81ffe0c9381e7f3fff81cfe7cf325fffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f39fffc49339e7f3fff39cfe7cf393fffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f39fffe49339e7f3fff39cfe7cf393e3fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f31ffce49331e7f3fff31cfe7e6793e3fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f89ffe0c938900807ff8983c1f0f93e3fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000 000000000000001fffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffffffff3fe7fffffffffffffffffffffff3fffffffffffffffffffff fffffff9ffffffffffffff3fffffffffcffffe79ffffffffffffffffffc00003 006000000000001ffffffffffffffffff07fffff3fffffffffffffffffffffff ffe1 0e221f03fffffdf3fe7ffffffff7fffdffffffffdf3fffffffffffffffffffff fffffff9ffffffffffffff3fff7fffffcffffe79ffffffbfffffffffffc00003 006010000000001ffffffffff7fffffffe7fffff3fffffffffffffffffffffff ffe1 0e889fcffffff9f3ffffffffffe7fff9ffffffff9f3fffffffffffffffffffff fffffff9ffffffffffffff3ffe7ffffffffffe7fffffff3fffffffffffc00003 000030000000001fffffffffe7fffffffe7fffff3fffffffffffffffffffffff ffe1 0e221fcf91ffe032307e0fff8380e0e03c3ffffe0323e1ffcb7879ce0f87ff2d e0e73ff93f0fff39c1f0f83ff80e1ffe0f91f041fc3c1c0787ffc1c8ffc7c733 63e0fe731f1ccc7ffc6787c380e0e47c1e7f0fff279cffffffffffffffffffff ffe1 0e889fcf88fff9f11e7ce7ff39e7ce79f99fffff9f11ccffc03339cce733ff00 ce673ff89e67ff399ce6733ffe7ccfffcf88e679f999cf3f33ff9cc47fcc63f3 b060303f318fcc7ffe073399e7ce62399e7e67ff139cffffffffffffffffffff ffe1 0e221fcf9cfff9f39e7cffff3fe7fe79f39fffff9f399cffc92799ccfe73ff24 fe67bff9cce7ff399fce673ffe79e7ffcf9cce79f39fcf3e73fffcce7fc06333 18603033018ccc3ffe667339e7fe67339e7ce7ff399effffffffffffffffffff ffe1 0e889fcf9cfff9f39e7c7fff1fe7fe79f39fffff9f399cffc92799cc7e73ff24 fe733ff9cce7ff398fce673ffe79e7ffcf9cce79f3ffcf3e73fffcce7fc06303 18603030018c067ffe7e733fe7fe67339e7ce7ff39ccffffffffffffffffffff ffe1 0e221fcf9cfff9f39e7e0fff83e7e079f01fffff9f3980ffc92799ce0e03ff24 e0737ff9cc07ff39c1c0673ffe79e7ffcf9cce79f3fc0f3e03ffc0ce7fc7e303 186030301f8c065ffe7e033fe7e067339e7c07ff39cdffffffffffffffffffff ffe1 0e889fcf9cfff9f39e7fc7fff1e7ce79f3ffffff9f399fffc92799cfc67fff24 ce737ff9ccffff39f8cfe73ffe79e7ffcf9cce79f3f9cf3e7fff9cce7fcc6303 18603030318c065ffe7e7f3fe7ce67339e7cffff39cdffffffffffffffffffff ffe1 0e221fcf9cfff9f39e7fe7fff9e7ce79f3fe3fff9f399fffc92799cfe67fff24 ce78fff9ccffff39fccfe73ffe79e7ffcf9cce79f3f9cf3e7fff9cce7fcc6303 18603030318c039ffe7e7f3fe7ce67339e7cffff39e3ffffffffffffffffffff ffe1 0e889fcf9cfff9f39e7ce7ff39e7cc79f99e3fff9f39ccffc933388ce733ff24 cc78fff99e67ff119ce6723ffe7ccfffcf9ce479f9998f3f33ff98ce7fcce303 30603030338c039ffe7f3399e7cc67391e7e67ff33e3ffffffffffffffffffff ffe1 0e221f039cfffc33900e0fff83f0e27c3c3e3fffc339e1ffc9387c4e0f87ff24 e27cfff83f0fff89c1f0f93fff0e1ffe019cf2403c3c4f8787ffc4ce7fc767c3 e3fc1e7c1d9f019ffc1f87c3f0e2673c900f0fff07f3ffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffff3fffffffffffffffffffffffffff fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000 000000000000011fffffffffffffffff9ffffffffff7ffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffff3fffffffffffffffffffffffffff fff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000 000000000000031ffffffffffffffff39fffffffffe7ffffffffffffffffffff ffe1 0e889ffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffff fff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000 000000000000071ffffffffffffffff83fffffffffc7ffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffffffffffe7fffffff9fffffffffffffffffffffffffffffffffffff fffffffffffffffffffe7ffffff83ffffffff3ffffffff3ffffffffffffff9ff fffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221ffffffffffffe7fffffff9ffffdfeffffffff83fffffdffffffffffffff fffffffffffffffffffe7fffffff3ffffffff3ffffffff3fdffffffbfffef9ff fffffffffffffffe7fbfffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffff9ffff9fcffffffff39fffff9ffffffffffffff fffffffffffffffffffe7fffffff3fffffffffffffffffff9ffffff3fffcf9ff ffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f278cf0f078307c8f83ff93ce60301c3c8fff39ffe0e03ffc3c8f87ffe1 e1e3323e1c67ff8391f07ff19e1f3f8783c183e47c1ff83e03ffc1c07ff0191f 0fff8793c9f0f8307c0787ffe1e1e3323e1c67ffffffffffffffffffffffffff ffe1 0e889f13c0e667339e7c4733ff89ce79fcf99c47fff9ffce79fff99c4733ffcc ccf0311cce07ff3988e67ff81ccf3f33399cf3e2399fff3f9fff9cf3fffcf88e 67ff3389c4e6739e7f3f33ffccccf0311cce07ffffffffffffffffffffffffff ffe1 0e221f39ccce67f3fe7ce673ff9cce79fcf3cce7fff9fffe79fff3cce673ff9c 9e733399ce67fff99cce7ff999cf3e73f99ff3e7339fff3f9ffffcf3fffcf9cc e7fe799cce4f33fe7f3e73ff9c9e733399ce67ffffffffffffffffffffffffff ffe1 0e889f39cfce63f1fe7ce673ff9cce79fcf3cce7ffc7fffe79fff3cce673ff9f 9e73f399ce7ffff99cce7ff9f9cf3e73f98ff3e7339fff3f9ffffcf3fffcf9cc e7fe799cce4f31fe7f3e73ff9f9e73f399ce7fffffffffffffffffffffffffff ffe1 0e221f39cfc070783e7ce673ff9cce79fcf3cce7fff9ffe079fff3cce603ff9f 9e73f3980e7fff819cce7ff9f80f3e0381c1f3e7339fff3f9fffc0f3fffcf9cc 07fe799cce4f383e7f3e03ff9f9e73f3980e7fffffffffffffffffffffffffff ffe1 0e889f39cfcffe3f1e7ce673ff9cce79fcf3cce7fff9ffce79fff3cce67fff9f 9e73f399fe7fff399cce7ff9f9ff3e7f39f8f3e7339fff3f9fff9cf3fffcf9cc fffe799cce4f3f1e7f3e7fff9f9e73f399fe7fffffffffffffffffffffffffff ffe1 0e221f39cfcfff3f9e7ce673ff9cce79fcf3cce7fff9ffce79fff3cce67fff9f 9e73f399fe7fff399cce7ff9f9ff3e7f39fcf3e7339fff3f9fff9cf3fffcf9cc fffe799cce4f3f9e7f3e7fff9f9e73f399fe7f8fffffffffffffffffffffffff ffe1 0e889f33cfe667339e7ce723ff99c479fcf99ce7ff39ffcc79fff99ce733ffcc ccf3f39cce7fff319ce47ff9fccf3f33319cf3e7391fff3f9fff98f3fffcf9ce 67ff3399cce6739e7f3f33ffccccf3f39cce7f8fffffffffffffffffffffffff ffe1 0e221f0783f0f078300ce793ff83e27c3e1c3ce7ff83ffe27c3ffc3ce787ffe1 e1e0f39e1c1fff899cf27ff07e18078789c180673c9ff807c3ffc4f87ffe19cf 0fff8783c1f0f8300f8787ffe1e1e0f39e1c1f8fffffffffffffffffffffffff ffe1 0e889f3ffffffffffffffff3ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff9fffffffffffffffffffff ffffff9fcfffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f3ffffffffffffffe73ffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffff39fffffffffffffffffffff ffffff9fcfffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f3fffffffffffffff07ffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffff83fffffffffffffffffffff ffffff9fcfffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffffffffffffffffffffffff9fffffffc1fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f39fffffffffffffffffffffff9ffffffbf9fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f39ffffffffffffffffffffffffffffff3f9fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f11c3c6787ffe1e1e4739e1c8c1fc391c079f39ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f1199e0733ffcccce2339ccc479f9988f3f9f39ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f493ce6673ff9c9e6733d9cce79f399cf3f9f3dffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f493ce7e73ff9f9e673999cce79f399cf3f9f99ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f493ce7e03ff9f9e6739b80ce79f019cf3f9f9bffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f493ce7e7fff9f9e6739b9fce79f3f9cf3f9f9bffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f793ce7e7fff9f9e673c79fce79f3f9cf3f9fc7e3ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f7999e7f33ffcccce73c7ccce79f999cf3f9fc7e3ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f79c3c1f87ffe1e1e73c7e1ce403c39cf8403e7e3ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffeff3ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffcff3ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffff8fe7ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f3fffffffffffffffffffffffffffffff3fffff07fffff3fffffffe0fe7 ffe7ffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f3ffffbfdffffffff07ffffffffffffff3fffffe7fffff3ffffffffcfe7 ffe7ffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f3ffff3f9fffffffe73ffffffffffffffffffffe7fffff3ffffffffcfff ffe7ffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f279cc06038791ffe73ff2de0e73ffc183cb727e7ce7ff27e1fff87cf07 f0e73c3e0fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f139cf3f9f3388ffff3ff00ce673ff9cf3c0313e7ce7ff13ccfff33cfe7 e667799ccfffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f399cf3f9e799cffff3ff24fe67bff9ff3c9339e7cf7ff399cffe73cfe7 ce66f399cfffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f399cf3f9e799cfff8fff24fe733ff8ff3c9339e7e67ff399cffe7fcfe7 cfe5f399cfffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f399cf3f9e799cffff3ff24e0737ffc1f3c9339e7e6fff3980ffe7fcfe7 cfe1f019cfffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f399cf3f9e799cffff3ff24ce737fff8f3c9339e7e6fff399fffe7fcfe7 cfe4f3f9cfffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f399cf3f9e799cffff3ff24ce78ffffcf3c9339e7f1fff399fffe7fcfe7 cfe673f9cf1fffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f3388f3f9f339cffe73ff24cc78fff9cf3c9333e7f1fff33ccfff33cfe7 e667399c8f1fffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f07c4f87c3879cfff07ff24e27cfffc1804930700f9fff07e1fff860100 f0e73c3e4f1fffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffffffffffffffffffffffffdffffffffff3ffffbffffffffffffffff ffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221ffffffffffffffffffffffffff9ffffffffff3ffff3ffffffffffffffff ffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffffffffffffffffffffffff1ffffffffff3fffe3ffffffffffffffff ffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fff9fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fff9fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fff9fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f3991f0e33c39cc9f0f23ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f3d88e6703999cc4e6711ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f259cce733399cce4f339ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f259cce73f399cce4f339ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f259cc073f019cce4f339ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f939ccff3f3f9cce4f339ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f939ccff3f3f9cce4f339ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889f939ce673f9988cce6739ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221f939cf0e0fc3c4c1f0f39ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffffffffffffcffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221ffffffffffffffcffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889ffffffffffffffcffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0e001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffe1 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0001 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0001 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0001 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0001 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff showpage %ps_include: inclusion end grestore PS-include-dict-dw begin o 0 ne {gsave A defaultmatrix /A ed llx lly nice urx ury nice initgraphics 0.1 setlinewidth boxpath stroke grestore} if clear o-stack aload pop context end restore %ps_include: end /saveobj save def mark 8 I f (Figure 1. A typical)3 623 1 720 3580 t 8 CW f (sam)1370 3580 w 8 I f ( The)1 167(screen, with the editing menu presented.)5 1320 2 1541 3580 t 8 CW f (sam)3055 3580 w 8 I f (\(command language\) window is in the middle, with file)8 1814 1 3226 3580 t ( partially obscured window is a)5 1029( The)1 164( user interface makes it easy to create these abutting windows.\))10 2059( \(The)1 191(windows above and below.)3 877 5 720 3680 t ( Each)1 206( typing and mouse operations apply, as indicated by its heavy border.)11 2242( uppermost window is that to which)6 1143( The)1 161(third file window.)2 568 5 720 3780 t ( The)1 162(window has its current text highlighted in reverse video.)8 1810 2 720 3880 t 8 CW f (sam)2714 3880 w 8 I f ( string on the last visible line, indi-)7 1121(window's current text is the null)5 1039 2 2880 3880 t ( also Figure 2.)3 470( See)1 150(cated by a vertical bar.)4 740 3 720 3980 t 10 R f ( and leave dot set to the text resulting from the change.)11 2202(most commands make some change to the text in dot)9 2118 2 720 4220 t (For example, the delete command,)4 1389 1 720 4340 t 10 CW f (d)2135 4340 w 10 R f (, deletes the text in dot, replacing it by the null string and setting dot to)15 2845 1 2195 4340 t ( change command,)2 767( The)1 213(the result.)1 402 3 720 4460 t 10 CW f (c)2135 4460 w 10 R f (, replaces dot by text delimited by an arbitrary punctuation character,)10 2845 1 2195 4460 t ( Thus,)1 275(conventionally a slash.)2 913 2 720 4580 t 9 CW f (c/Peter/)1008 4750 w 10 R f (replaces the text in dot by the string)7 1429 1 720 4930 t 10 CW f (Peter)2174 4930 w 10 R f (. Similarly,)1 473 1 2474 4930 t 9 CW f (a/Peter/)1008 5100 w 10 R f (\(append\) adds the string after dot, and)6 1516 1 720 5280 t 9 CW f (i/Peter/)1008 5450 w 10 R f ( three leave dot set to the new text,)8 1389( All)1 178(\(insert\) inserts before dot.)3 1031 3 720 5630 t 10 CW f (Peter)3343 5630 w 10 R f (.)3643 5630 w ( lexically terminates a command.)4 1335(Newlines are part of the syntax of commands: the newline character)10 2735 2 970 5786 t ( it is often convenient to insert)6 1282( since)1 242( But)1 207(Within the inserted text, however, newlines are never implicit.)8 2589 4 720 5906 t (multiple lines of text,)3 856 1 720 6026 t 10 CW f (sam)1601 6026 w 10 R f (has a special syntax for that case:)6 1330 1 1806 6026 t 9 CW f (a)1008 6196 w (some lines of text)3 972 1 1008 6306 t (to be inserted in the file,)5 1458 1 1008 6416 t (terminated by a period)3 1188 1 1008 6526 t (on a line by itself)4 1026 1 1008 6636 t (.)1008 6746 w 10 R f (In the one-line syntax, a newline character may be specified by a C-like escape, so)14 3291 1 720 6926 t 9 CW f (c/\\n/)1008 7096 w 10 R f (replaces dot by a single newline character.)6 1692 1 720 7276 t cleartomark showpage saveobj restore %%EndPage: 3 3 %%Page: 4 4 /saveobj save def mark 4 pagesetup 10 R f (- 4 -)2 166 1 2797 480 t 10 CW f (Sam)970 840 w 10 R f (also has a substitute command,)4 1241 1 1175 840 t 10 CW f (s)2441 840 w 10 R f (:)2501 840 w 9 CW f (s/)1008 1010 w 9 I f (expression)1116 1010 w 9 CW f (/)1501 1010 w 9 I f (replacement)1555 1010 w 9 CW f (/)2000 1010 w 10 R f ( if dot is the)4 530( Thus,)1 288( expression.)1 490(substitutes the replacement text for the first match, in dot, of the regular)12 3012 4 720 1190 t (string)720 1310 w 10 CW f (Peter)973 1310 w 10 R f (, the command)2 591 1 1273 1310 t 9 CW f (s/t/st/)1008 1480 w 10 R f (changes it to)2 517 1 720 1660 t 10 CW f (Pester)1268 1660 w 10 R f ( general,)1 349(. In)1 164 2 1628 1660 t 10 CW f (s)2172 1660 w 10 R f (is unnecessary, but it was inherited from)6 1653 1 2263 1660 t 10 CW f (ed)3947 1660 w 10 R f ( has some conve-)3 711(and it)1 231 2 4098 1660 t ( instance, the replacement text may include the matched text, specified by)11 2947( For)1 189(nient variations.)1 644 3 720 1780 t 10 CW f (&)4525 1780 w 10 R f (:)4585 1780 w 9 CW f (s/Peter/Oh, &, &, &, &!/)4 1296 1 1008 1950 t 10 R f (There are also three commands that apply programs to text:)9 2376 1 970 2166 t 9 CW f (<)1008 2336 w 9 I f (Unix program)1 513 1 1116 2336 t 10 R f ( the)1 149( Similarly,)1 450(replaces dot by the output of the Unix program.)8 1908 3 720 2516 t 10 CW f (>)3254 2516 w 10 R f (command runs the program with dot as its)7 1699 1 3341 2516 t (standard input, and)2 763 1 720 2636 t 10 CW f (|)1508 2636 w 10 R f ( example,)1 388( For)1 189(does both.)1 411 3 1593 2636 t 9 CW f (| sort)1 324 1 1008 2806 t 10 R f ( special sig-)2 483( newlines have no)3 724( Again,)1 321(replaces dot by the result of applying the standard sorting utility to it.)12 2792 4 720 2986 t ( these)1 235(nificance for)1 512 2 720 3106 t 10 CW f (sam)1497 3106 w 10 R f ( text acted upon and resulting from these commands is not neces-)11 2665(commands. The)1 668 2 1707 3106 t (sarily bounded by newlines, although for connection with Unix programs, newlines may be necessary to)14 4320 1 720 3226 t (obey conventions.)1 727 1 720 3346 t (One more command:)2 843 1 970 3502 t 10 CW f (p)1838 3502 w 10 R f ( I summarizes)2 560( Table)1 277(prints the contents of dot.)4 1019 3 1923 3502 t 10 CW f (sam)3804 3502 w 10 R f ('s commands.)1 555 1 3984 3502 t (The value of dot may be changed by specifying an)9 2015 1 970 3658 t 10 I f (address)3010 3658 w 10 R f ( simplest address is)3 778( The)1 206(for the command.)2 709 3 3347 3658 t (a line number:)2 577 1 720 3778 t 9 CW f (3)1008 3948 w 10 R f (refers to the third line of the file, so)8 1417 1 720 4128 t 9 CW f (3d)1008 4298 w 10 R f ( 3.)1 111(deletes the third line of the file, and implicitly renumbers the lines so the old line 4 is now numbered)19 4209 2 720 4478 t (\(This is one of the few places where)7 1485 1 720 4598 t 10 CW f (sam)2236 4598 w 10 R f ( Line)1 239(deals with lines directly.\))3 1028 2 2447 4598 t 10 CW f (0)3745 4598 w 10 R f ( string at the begin-)4 797(is the null)2 407 2 3836 4598 t ( a command consists of only an address, a)8 1846( If)1 137(ning of the file.)3 679 3 720 4718 t 10 CW f (p)3429 4718 w 10 R f (command is assumed, so typing an)5 1504 1 3536 4718 t (unadorned)720 4838 w 10 CW f (3)1173 4838 w 10 R f ( are a couple of other basic addresses: a period addresses)10 2325( There)1 288(prints line 3 on the terminal.)5 1163 3 1264 4838 t (dot itself; and a dollar sign \()6 1127 1 720 4958 t 10 CW f ($)1847 4958 w 10 R f (\) addresses the null string at the end of the file.)10 1872 1 1907 4958 t ( the address)2 477( Thus,)1 278( single substring of the file.)5 1109(An address is always a)4 917 4 970 5114 t 10 CW f (3)3779 5114 w 10 R f (addresses the characters after)3 1173 1 3867 5114 t ( A)1 125( file.)1 186(the second newline of the file through the third newline of the)11 2515 3 720 5234 t 10 I f (compound address)1 755 1 3574 5234 t 10 R f (is constructed by)2 683 1 4357 5234 t (the comma operator)2 798 1 720 5354 t 9 I f (address1)1008 5524 w 9 CW f (,)1333 5524 w 9 I f (address2)1387 5524 w 10 R f ( the substring of the file from the beginning of)9 1860(and addresses)1 551 2 720 5704 t 10 I f (address1)3157 5704 w 10 R f (to the end of)3 505 1 3544 5704 t 10 I f (address2)4075 5704 w 10 R f ( example,)1 389(. For)1 215 2 4436 5704 t (the command)1 543 1 720 5824 t 10 CW f (3,5p)1290 5824 w 10 R f (prints the third through fifth lines of the file and)9 1936 1 1557 5824 t 10 CW f (.,$d)3520 5824 w 10 R f ( the begin-)2 429(deletes the text from)3 824 2 3787 5824 t (ning of dot to the end of the file.)8 1296 1 720 5944 t (These addresses are all absolute positions in the file, but)9 2247 1 970 6100 t 10 CW f (sam)3242 6100 w 10 R f ( indicated by)2 518(also has relative addresses,)3 1075 2 3447 6100 t 10 CW f (+)720 6220 w 10 R f (or)805 6220 w 10 CW f (-)913 6220 w 10 R f ( example,)1 388(. For)1 214 2 973 6220 t 9 CW f ($-3)1008 6390 w 10 R f (is the third line before the end of the file and)10 1780 1 720 6570 t 9 CW f (.+1)1008 6740 w 10 R f ( no address appears to the left of the)8 1457( If)1 118(is the line after dot.)4 782 3 720 6920 t 10 CW f (+)3104 6920 w 10 R f (or)3191 6920 w 10 CW f (-)3301 6920 w 10 R f (, dot is assumed; if nothing appears to the)8 1679 1 3361 6920 t (right,)720 7040 w 10 CW f (1)959 7040 w 10 R f ( Therefore,)1 467(is assumed.)1 461 2 1044 7040 t 10 CW f (.+1)1997 7040 w 10 R f (may be abbreviated to just a plus sign.)7 1532 1 2202 7040 t (The)970 7196 w 10 CW f (+)1156 7196 w 10 R f (operator acts relative to the end of its first argument, while the)11 2556 1 1247 7196 t 10 CW f (-)3834 7196 w 10 R f (operator acts relative to the)4 1114 1 3926 7196 t (beginning. Thus)1 679 1 720 7316 t 10 CW f (.+1)1428 7316 w 10 R f ( first line after dot,)4 758(addresses the)1 533 2 1637 7316 t 10 CW f (.-)2956 7316 w 10 R f (addresses the first line before dot, and)6 1534 1 3104 7316 t 10 CW f (+-)4666 7316 w 10 R f (refers)4814 7316 w cleartomark showpage saveobj restore %%EndPage: 4 4 %%Page: 5 5 /saveobj save def mark 5 pagesetup 10 R f (- 5 -)2 166 1 2797 480 t (Table I.)1 310 1 2393 900 t 10 CW f (Sam)2728 900 w 10 R f (commands)2933 900 w 10 S f (_ ________________________________________________________________________)1 3605 1 1077 968 t 10 R f (Text commands)1 641 1 1077 1136 t 10 S f (_ ________________________________________________________________________)1 3605 1 1077 1204 t 10 CW f (a/)1077 1372 w 10 I f (text)1197 1372 w 10 CW f (/)1341 1372 w 10 R f (Append text after dot)3 851 1 2160 1372 t 10 CW f (c/)1077 1492 w 10 I f (text)1197 1492 w 10 CW f (/)1341 1492 w 10 R f (Change text in dot)3 736 1 2160 1492 t 10 CW f (i/)1077 1612 w 10 I f (text)1197 1612 w 10 CW f (/)1341 1612 w 10 R f (Insert text before dot)3 834 1 2160 1612 t 10 CW f (d)1077 1732 w 10 R f (Delete text in dot)3 691 1 2160 1732 t 10 CW f (s/)1077 1852 w 10 I f (regexp)1197 1852 w 10 CW f (/)1468 1852 w 10 I f (text)1528 1852 w 10 CW f (/)1672 1852 w 10 R f (Substitute text for match of regular expression in dot)8 2109 1 2160 1852 t 10 CW f (m)1077 1972 w 10 I f (address)1197 1972 w 10 R f (Move text in dot after address)5 1195 1 2160 1972 t 10 CW f (t)1077 2092 w 10 I f (address)1197 2092 w 10 R f (Copy text in dot after address)5 1179 1 2160 2092 t 10 S f (_ ________________________________________________________________________)1 3605 1 1077 2160 t 10 R f (Display commands)1 769 1 1077 2328 t 10 S f (_ ________________________________________________________________________)1 3605 1 1077 2396 t 10 CW f (p)1077 2540 w 10 R f (Print contents of dot)3 814 1 2160 2540 t 10 CW f (=)1077 2660 w 10 R f (Print value \(line numbers and character numbers\) of dot)8 2234 1 2160 2660 t 10 S f (_ ________________________________________________________________________)1 3605 1 1077 2728 t 10 R f (File commands)1 614 1 1077 2896 t 10 S f (_ ________________________________________________________________________)1 3605 1 1077 2964 t 10 CW f (b)1077 3108 w 10 I f (file-list)1197 3108 w 10 R f (Set current file to first file in list that)8 1466 1 2160 3108 t 10 CW f (sam)3651 3108 w 10 R f (has in menu)2 483 1 3856 3108 t 10 CW f (B)1077 3228 w 10 I f (file-list)1197 3228 w 10 R f (Same as)1 330 1 2160 3228 t 10 CW f (b)2515 3228 w 10 R f (, but load new files)4 763 1 2575 3228 t 10 CW f (n)1077 3348 w 10 R f (Print menu lines of all files)5 1086 1 2160 3348 t 10 CW f (D)1077 3468 w 10 I f (file-list)1197 3468 w 10 R f (Delete named files from)3 967 1 2160 3468 t 10 CW f (sam)3152 3468 w 10 S f (_ ________________________________________________________________________)1 3605 1 1077 3536 t 10 R f (I/O commands)1 591 1 1077 3704 t 10 S f (_ ________________________________________________________________________)1 3605 1 1077 3772 t 10 CW f (e)1077 3916 w 10 I f (filename)1197 3916 w 10 R f (Replace file with named disc file)5 1317 1 2160 3916 t 10 CW f (r)1077 4036 w 10 I f (filename)1197 4036 w 10 R f (Replace dot by contents of named disc file)7 1700 1 2160 4036 t 10 CW f (w)1077 4156 w 10 I f (filename)1197 4156 w 10 R f (Write file to named disc file)5 1123 1 2160 4156 t 10 CW f (f)1077 4276 w 10 I f (filename)1197 4276 w 10 R f (Set file name and print new menu line)7 1523 1 2160 4276 t 10 CW f (<)1077 4396 w 10 I f (Unix-command)1197 4396 w 10 R f (Replace dot by standard output of command)6 1770 1 2160 4396 t 10 CW f (>)1077 4516 w 10 I f (Unix-command)1197 4516 w 10 R f (Send dot to standard input of command)6 1577 1 2160 4516 t 10 CW f (|)1077 4636 w 10 I f (Unix-command)1197 4636 w 10 R f (Replace dot by result of command applied to dot)8 1948 1 2160 4636 t 10 CW f (!)1077 4756 w 10 I f (Unix-command)1197 4756 w 10 R f (Run the command)2 733 1 2160 4756 t 10 S f (_ ________________________________________________________________________)1 3605 1 1077 4824 t 10 R f (Loops and conditionals)2 933 1 1077 4992 t 10 S f (_ ________________________________________________________________________)1 3605 1 1077 5060 t 10 CW f (x/)1077 5204 w 10 I f (regexp)1197 5204 w 10 CW f (/)1468 5204 w 10 I f (command)1588 5204 w 10 R f (For each match of regexp, set dot and run command)9 2079 1 2160 5204 t 10 CW f (y/)1077 5324 w 10 I f (regexp)1197 5324 w 10 CW f (/)1468 5324 w 10 I f (command)1588 5324 w 10 R f (Between adjacent matches of regexp, set dot and run command)9 2522 1 2160 5324 t 10 CW f (X/)1077 5444 w 10 I f (regexp)1197 5444 w 10 CW f (/)1468 5444 w 10 I f (command)1588 5444 w 10 R f (Run command in each file whose menu line matches regexp)9 2404 1 2160 5444 t 10 CW f (Y/)1077 5564 w 10 I f (regexp)1197 5564 w 10 CW f (/)1468 5564 w 10 I f (command)1588 5564 w 10 R f (Run command in each file whose menu line does not match)10 2386 1 2160 5564 t 10 CW f (g/)1077 5684 w 10 I f (regexp)1197 5684 w 10 CW f (/)1468 5684 w 10 I f (command)1588 5684 w 10 R f (If dot contains a match of regexp, run command)8 1921 1 2160 5684 t 10 CW f (v/)1077 5804 w 10 I f (regexp)1197 5804 w 10 CW f (/)1468 5804 w 10 I f (command)1588 5804 w 10 R f (If dot does not contain a match of regexp, run command)10 2243 1 2160 5804 t 10 S f (_ ________________________________________________________________________)1 3605 1 1077 5872 t 10 R f (Miscellany)1077 6040 w 10 S f (_ ________________________________________________________________________)1 3605 1 1077 6108 t 10 CW f (k)1077 6252 w 10 R f (Set address mark to value of dot)6 1287 1 2160 6252 t 10 CW f (q)1077 6372 w 10 R f (Quit)2160 6372 w 10 CW f (u)1077 6492 w 10 I f (n)1197 6492 w 10 R f (Undo last)1 386 1 2160 6492 t 10 I f (n)2571 6492 w 10 R f (\(default 1\) changes)2 764 1 2646 6492 t 10 CW f ({ })1 180 1 1077 6612 t 10 R f (Braces group commands)2 987 1 2160 6612 t 10 S f (_ ________________________________________________________________________)1 3605 1 1077 6668 t cleartomark showpage saveobj restore %%EndPage: 5 5 %%Page: 6 6 /saveobj save def mark 6 pagesetup 10 R f (- 6 -)2 166 1 2797 480 t ( multiple lines, and)3 788( may span)2 417( \(Dot)1 239(to the line containing the end of dot.)7 1491 4 720 840 t 10 CW f (+)3687 840 w 10 R f (selects the line after the end of)6 1261 1 3779 840 t (dot, then)1 350 1 720 960 t 10 CW f (-)1095 960 w 10 R f (backs up one line.\))3 754 1 1180 960 t ( addresses the text matched by the expression.)7 1855(The final type of address is a regular expression, which)9 2215 2 970 1116 t (The expression is enclosed in slashes, as in)7 1720 1 720 1236 t 9 CW f (/)1008 1406 w 9 I f (expression)1062 1406 w 9 CW f (/)1447 1406 w 10 R f ( the same as those in the Unix program)8 1647(The expressions are)2 812 2 720 1586 t 10 CW f (egrep)3215 1586 w 10 R f (,)3515 1586 w 6 R f (6,7)3540 1536 w 10 R f (and include closures, alternations,)3 1389 1 3651 1586 t ( find the)2 335( They)1 256(and so on.)2 410 3 720 1706 t 10 I f (leftmost longest)1 632 1 1747 1706 t 10 R f ( match after the)3 623(string that matches the expression, that is, the first)8 2012 2 2405 1706 t ( the search is started, and if more than one match begins at the same spot, the longest such)18 3834(point where)1 486 2 720 1826 t ( assume familiarity with the syntax for regular expressions in Unix programs.)11 3096(match. \(I)1 385 2 720 1946 t 6 R f (9)4201 1896 w 10 R f (\) For example,)2 585 1 4231 1946 t 9 CW f (/x/)1008 2116 w 10 R f (matches the next)2 671 1 720 2296 t 10 CW f (x)1416 2296 w 10 R f (character in the file,)3 797 1 1501 2296 t 9 CW f (/xx*/)1008 2466 w 10 R f (matches the next run of one or more)7 1444 1 720 2646 t 10 CW f (x)2189 2646 w 10 R f ('s, and)1 266 1 2249 2646 t 9 CW f (/x|Peter/)1008 2816 w 10 R f (matches the next)2 677 1 720 2996 t 10 CW f (x)1425 2996 w 10 R f (or)1513 2996 w 10 CW f (Peter)1624 2996 w 10 R f ( character' operator, a)3 885( compatibility with other Unix programs, the `any)7 2014(. For)1 217 3 1924 2996 t (period, does not match a newline, so)6 1459 1 720 3116 t 9 CW f (/.*/)1008 3286 w 10 R f ( from dot to the end of the line, but excludes the newline and so will not match across the)19 3663(matches the text)2 657 2 720 3466 t (line boundary.)1 577 1 720 3586 t ( is forwards by default, so)5 1222( direction)1 416( The)1 241(Regular expressions are always relative addresses.)5 2191 4 970 3742 t 10 CW f (/Peter/)720 3862 w 10 R f (is really an abbreviation for)4 1103 1 1165 3862 t 10 CW f (+/Peter/)2293 3862 w 10 R f ( search can be reversed with a minus sign, so)9 1796(. The)1 230 2 2773 3862 t 9 CW f (-/Peter/)1008 4032 w 10 R f (finds the first)2 595 1 720 4212 t 10 CW f (Peter)1371 4212 w 10 R f ( with other address forms, so)5 1314( expressions may be used)4 1139( Regular)1 397(before dot.)1 463 4 1727 4212 t 10 CW f (0+/Peter/)720 4332 w 10 R f (finds the first)2 539 1 1288 4332 t 10 CW f (Peter)1855 4332 w 10 R f (in the file and)3 561 1 2183 4332 t 10 CW f ($-/Peter/)2772 4332 w 10 R f ( II summarizes)2 599( Table)1 280(finds the last.)2 542 3 3340 4332 t 10 CW f (sam)4788 4332 w 10 R f ('s)4968 4332 w (addresses.)720 4452 w ( who use Unix text editors such as)7 1389(The language discussed so far will not seem novel to people)10 2422 2 970 4608 t 10 CW f (ed)4809 4608 w 10 R f (or)4957 4608 w 10 CW f (vi)720 4728 w 10 R f (.)840 4728 w 6 R f (9)865 4678 w 10 R f ( operations these commands allow, with the exception of regular expres-)10 2897(Moreover, the kinds of editing)4 1222 2 921 4728 t ( Indeed,)1 351( a mouse-based interface.)3 1028(sions and line numbers, are clearly more conveniently handled by)9 2659 3 720 4848 t 10 CW f (sam)4788 4848 w 10 R f ('s)4968 4848 w ( For)1 194( usually made.)2 590(mouse language \(discussed at length below\) is the means by which simple changes are)13 3536 3 720 4968 t (large or repetitive changes, however, a textual language outperforms a manual interface.)11 3523 1 720 5088 t (Imagine that, instead of deleting just one occurrence of the string)10 2708 1 970 5244 t 10 CW f (Peter)3714 5244 w 10 R f ( wanted to eliminate)3 849(, we)1 177 2 4014 5244 t (every)720 5364 w 10 CW f (Peter)970 5364 w 10 R f ( some text.)2 442( needed is an iterator that runs a command for each occurrence of)12 2656(. What's)1 367 3 1270 5364 t 10 CW f (Sam)4788 5364 w 10 R f ('s)4968 5364 w (iterator is called)2 643 1 720 5484 t 10 CW f (x)1388 5484 w 10 R f (, for extract:)2 490 1 1448 5484 t 9 CW f (x/)1008 5654 w 9 I f (expression)1116 5654 w 9 CW f (/)1501 5654 w 9 I f (command)1609 5654 w 10 R f ( text matched)2 554(finds all matches in dot of the specified expression, and for each such match, sets dot to the)17 3766 2 720 5834 t ( to delete all the)4 638( So)1 156(and runs the command.)3 932 3 720 5954 t 10 CW f (Peters:)2471 5954 w 9 CW f (0,$ x/Peter/ d)2 756 1 1008 6124 t 10 R f ( are to improve readability;)4 1163(\(Blanks in these examples)3 1100 2 720 6304 t 10 CW f (sam)3027 6304 w 10 R f ( This)1 247(neither requires nor interprets them.\))4 1542 2 3251 6304 t (searches the entire file \()4 964 1 720 6424 t 10 CW f (0,$)1684 6424 w 10 R f ( of the string)3 514(\) for occurrences)2 680 2 1864 6424 t 10 CW f (Peter)3085 6424 w 10 R f (, and runs the)3 544 1 3385 6424 t 10 CW f (d)3956 6424 w 10 R f (command with dot set to)4 997 1 4043 6424 t ( contrast, the comparable)3 1003( \(By)1 200(each such occurrence.)2 876 3 720 6544 t 10 CW f (ed)2824 6544 w 10 R f (command would delete all)3 1057 1 2969 6544 t 10 I f (lines)4051 6544 w 10 R f (containing)4265 6544 w 10 CW f (Peter)4712 6544 w 10 R f (;)5012 6544 w 10 CW f (sam)720 6664 w 10 R f (deletes only the)2 653 1 938 6664 t 10 CW f (Peters)1629 6664 w 10 R f ( address)1 337(.\) The)1 276 2 1989 6664 t 10 CW f (0,$)2640 6664 w 10 R f ( be abbreviated to just a)5 1011(is commonly used, and may)4 1171 2 2858 6664 t ( another example,)2 712(comma. As)1 480 2 720 6784 t 9 CW f (, x/Peter/ p)2 648 1 1008 6954 t 10 R f (prints a list of)3 556 1 720 7134 t 10 CW f (Peters,)1303 7134 w 10 R f (one for each appearance in the file, with no intervening text \(not even newlines to)14 3290 1 1750 7134 t (separate the instances\).)2 922 1 720 7254 t cleartomark showpage saveobj restore %%EndPage: 6 6 %%Page: 7 7 /saveobj save def mark 7 pagesetup 10 R f (- 7 -)2 166 1 2797 480 t (Table II.)1 343 1 2402 900 t 10 CW f (Sam)2770 900 w 10 R f (addresses)2975 900 w 10 S f (_ _________________________________________________________________)1 3264 1 1248 968 t 10 R f (Simple addresses)1 691 1 1248 1136 t 10 S f (_ _________________________________________________________________)1 3264 1 1248 1204 t 10 CW f (#)1248 1348 w 10 I f (n)1308 1348 w 10 R f (The empty string after character)4 1279 1 2250 1348 t 10 I f (n)3554 1348 w (n)1248 1468 w 10 R f (Line)2250 1468 w 10 I f (n)2458 1468 w 10 R f (.)2508 1468 w 10 CW f (/)1248 1588 w 10 I f (regexp)1308 1588 w 10 CW f (/)1579 1588 w 10 R f (The first following match of the regular expression)7 2038 1 2250 1588 t 10 CW f (-/)1248 1708 w 10 I f (regexp)1368 1708 w 10 CW f (/)1639 1708 w 10 R f (The first previous match of the regular expression)7 1993 1 2250 1708 t 10 CW f ($)1248 1828 w 10 R f (The null string at the end of the file)8 1415 1 2250 1828 t 10 CW f (.)1248 1948 w 10 R f (Dot)2250 1948 w 10 CW f (')1248 2068 w 10 R f (The address mark, set by)4 995 1 2250 2068 t 10 CW f (k)3270 2068 w 10 R f (command)3355 2068 w 10 CW f (")1248 2188 w 10 I f (regexp)1308 2188 w 10 CW f (")1579 2188 w 10 R f (Dot in the file whose menu line matches regexp)8 1908 1 2250 2188 t 10 S f (_ _________________________________________________________________)1 3264 1 1248 2256 t 10 R f (Compound addresses)1 852 1 1248 2424 t 10 S f (_ _________________________________________________________________)1 3264 1 1248 2492 t 10 I f (a1)1248 2636 w 10 CW f (+)1348 2636 w 10 I f (a2)1408 2636 w 10 R f (The address)1 479 1 2250 2636 t 10 I f (a2)2754 2636 w 10 R f (evaluated starting at right of)4 1126 1 2879 2636 t 10 I f (a1)4030 2636 w (a1)1248 2756 w 10 CW f (-)1348 2756 w 10 I f (a2 a2)1 942 1 1408 2756 t 10 R f (evaluated in the reverse direction starting at left of)8 2012 1 2375 2756 t 10 I f (a1)4412 2756 w (a1)1248 2876 w 10 CW f (,)1348 2876 w 10 I f (a2)1408 2876 w 10 R f (From the left of)3 630 1 2250 2876 t 10 I f (a1)2905 2876 w 10 R f (to the right of)3 547 1 3030 2876 t 10 I f (a2)3602 2876 w 10 R f (\(default)3727 2876 w 10 CW f (0,$)4062 2876 w 10 R f (\))4242 2876 w 10 I f (a1)1248 2996 w 10 CW f (;)1348 2996 w 10 I f (a2)1408 2996 w 10 R f (Like)2250 2996 w 10 CW f (,)2458 2996 w 10 R f (but sets dot after evaluating)4 1104 1 2543 2996 t 10 I f (a1)3672 2996 w 10 S f (_ _________________________________________________________________)1 3264 1 1248 3064 t 10 R f (The operators)1 569 1 1440 3232 t 10 CW f (+)2052 3232 w 10 R f (and)2155 3232 w 10 CW f (-)2342 3232 w 10 R f (are high precedence, while)3 1122 1 2445 3232 t 10 CW f (,)3610 3232 w 10 R f (and)3713 3232 w 10 CW f (;)3901 3232 w 10 R f (are low)1 315 1 4005 3232 t ( both)1 208(precedence. In)1 610 2 1440 3352 t 10 CW f (+)2288 3352 w 10 R f (and)2378 3352 w 10 CW f (-)2552 3352 w 10 R f (forms,)2642 3352 w 10 I f (a2)2930 3352 w 10 R f (defaults to 1 and)3 678 1 3060 3352 t 10 I f (a1)3768 3352 w 10 R f (defaults to)1 423 1 3897 3352 t ( both)1 203(dot. If)1 269 2 1440 3472 t 10 I f (a1)1937 3472 w 10 R f (and)2062 3472 w 10 I f (a2)2231 3472 w 10 R f (are present,)1 459 1 2356 3472 t 10 CW f (+)2840 3472 w 10 R f (may be elided.)2 585 1 2925 3472 t 10 S f (_ _________________________________________________________________)1 3264 1 1248 3552 t 10 R f (Of course, the text extracted by)5 1267 1 970 3852 t 10 CW f (x)2265 3852 w 10 R f (may be selected by a regular expression, which complicates decid-)9 2687 1 2353 3852 t ( is resolved by generating the matches)6 1597( This)1 240( matches is chosen \320 matches may overlap.)7 1853(ing what set of)3 630 4 720 3972 t ( starting)1 338(starting from the beginning of dot using the leftmost-longest rule, and searching for each match)14 3982 2 720 4092 t ( adja-)1 228( expressions may also match null strings, but a null match)10 2363( Regular)1 371(from the end of the previous one.)6 1358 4 720 4212 t ( example,)1 388( For)1 189(cent to a non-null match is never selected; at least one character must intervene.)13 3187 3 720 4332 t 9 CW f (, c/AAA/)1 432 1 1008 4502 t (x/B*/ c/-/)1 540 1 1008 4612 t (, p)1 162 1 1008 4722 t 10 R f (produces as output)2 749 1 720 4902 t 9 CW f (-A-A-A-)1008 5072 w 10 R f (because the pattern)2 764 1 720 5252 t 10 CW f (B*)1509 5252 w 10 R f (matches the null strings separating the)5 1529 1 1654 5252 t 10 CW f (A)3208 5252 w 10 R f ('s.)3268 5252 w (The)970 5408 w 10 CW f (x)1150 5408 w 10 R f (command has a complement,)3 1165 1 1235 5408 t 10 CW f (y)2425 5408 w 10 R f ( syntax, that executes the command with dot set to)9 2024(, with similar)2 531 2 2485 5408 t (the text)1 297 1 720 5528 t 10 I f (between)1042 5528 w 10 R f ( example,)1 388( For)1 189(the matches of the expression.)4 1206 3 1394 5528 t 9 CW f (, c/AAA/)1 432 1 1008 5698 t (y/A/ c/-/)1 486 1 1008 5808 t (, p)1 162 1 1008 5918 t 10 R f (produces the same result as the example above.)7 1890 1 720 6098 t (The)970 6254 w 10 CW f (x)1158 6254 w 10 R f (and)1251 6254 w 10 CW f (y)1428 6254 w 10 R f (commands are looping constructs, and)4 1566 1 1521 6254 t 10 CW f (sam)3120 6254 w 10 R f (has a pair of conditional commands to go)7 1707 1 3333 6254 t ( have similar syntax:)3 830( They)1 255(with them.)1 428 3 720 6374 t 9 CW f (g/)1008 6544 w 9 I f (expression)1116 6544 w 9 CW f (/)1501 6544 w 9 I f (command)1609 6544 w 10 R f ( is different from)3 688( This)1 231(\(guard\) runs the command exactly once if dot contains a match of the expression.)13 3288 3 720 6724 t 10 CW f (x)4955 6724 w 10 R f (,)5015 6724 w (which runs the command for)4 1148 1 720 6844 t 10 I f (each)1893 6844 w 10 R f (match:)2106 6844 w 10 CW f (x)2403 6844 w 10 R f (loops;)2488 6844 w 10 CW f (g)2758 6844 w 10 R f ( Thus,)1 275(merely tests, without changing the value of dot.)7 1901 2 2843 6844 t 9 CW f (, x/Peter/ d)2 648 1 1008 7014 t 10 R f (deletes all occurrences of)3 1010 1 720 7194 t 10 CW f (Peter)1755 7194 w 10 R f (, but)1 178 1 2055 7194 t cleartomark showpage saveobj restore %%EndPage: 7 7 %%Page: 8 8 /saveobj save def mark 8 pagesetup 10 R f (- 8 -)2 166 1 2797 480 t 9 CW f (, g/Peter/ d)2 648 1 1008 830 t 10 R f ( string\) if)2 384(deletes the whole file \(reduces it to a null)8 1687 2 720 1010 t 10 CW f (Peter)2822 1010 w 10 R f ( complemen-)1 530( The)1 211(occurs anywhere in the text.)4 1146 3 3153 1010 t (tary conditional is)2 722 1 720 1130 t 10 CW f (v)1467 1130 w 10 R f (, which runs the command if there is)7 1459 1 1527 1130 t 10 I f (no)3011 1130 w 10 R f (match of the expression.)3 976 1 3136 1130 t ( For)1 190(These control-structure-like commands may be composed to construct more involved operations.)10 3880 2 970 1286 t (example, to print those lines of text that contain the string)10 2307 1 720 1406 t 10 CW f (Peter)3052 1406 w 10 R f (:)3352 1406 w 9 CW f (, x/.*\\n/ g/Peter/ p)3 1080 1 1008 1576 t 10 R f (The)720 1756 w 10 CW f (x)908 1756 w 10 R f ( file into lines, the)4 761(breaks the)1 415 2 1001 1756 t 10 CW f (g)2211 1756 w 10 R f (selects those lines containing)3 1190 1 2305 1756 t 10 CW f (Peter)3529 1756 w 10 R f (, and the)2 359 1 3829 1756 t 10 CW f (p)4222 1756 w 10 R f ( This)1 237(prints them.)1 487 2 4316 1756 t (command gives an address for the)5 1416 1 720 1876 t 10 CW f (x)2172 1876 w 10 R f (command \(the whole file\), but because)5 1607 1 2268 1876 t 10 CW f (g)3911 1876 w 10 R f (does not have an explicit)4 1033 1 4007 1876 t ( the value of dot produced by the)7 1359(address, it applies to)3 831 2 720 1996 t 10 CW f (x)2941 1996 w 10 R f ( commands in)2 573( All)1 184(command, that is, to each line.)5 1251 3 3032 1996 t 10 CW f (sam)720 2116 w 10 R f (except for the command to write a file to disc use dot for the default address.)15 3066 1 925 2116 t (Composition may be continued indefinitely.)4 1764 1 970 2272 t 9 CW f (, x/.*\\n/ g/Peter/ v/SaltPeter/ p)4 1782 1 1008 2442 t 10 R f (prints those lines containing)3 1125 1 720 2622 t 10 CW f (Peter)1870 2622 w 10 R f (but)2195 2622 w 10 I f (not)2348 2622 w 10 R f (those containing)1 658 1 2501 2622 t 10 CW f (SaltPeter)3184 2622 w 10 R f (.)3724 2622 w 10 B f (Structural Regular Expressions)2 1350 1 720 2862 t 10 R f ( non-interactive ones such as)4 1177(Unlike other Unix text editors, including the)6 1804 2 720 3018 t 10 CW f (sed)3732 3018 w 10 R f (and)3943 3018 w 10 CW f (awk)4118 3018 w 10 R f (,)4298 3018 w 6 R f (7)4323 2968 w 10 CW f (sam)4384 3018 w 10 R f (is good for)2 445 1 4595 3018 t ( on-line phone book composed of records,)6 1737( example is an)3 604( An)1 182(manipulating files with multi-line `records.')4 1797 4 720 3138 t (separated by blank lines, of the form)6 1461 1 720 3258 t 9 CW f (Herbert Tic)1 594 1 1008 3428 t (44 Turnip Ave., Endive, NJ)4 1404 1 1008 3538 t (201-5555642)1008 3648 w (Norbert Twinge)1 756 1 1008 3868 t (16 Potato St., Cabbagetown, NJ)4 1620 1 1008 3978 t (201-5553145)1008 4088 w (...)1008 4308 w 10 R f (The format may be encoded as a regular expression:)8 2083 1 720 4488 t 9 CW f (\(.+\\n\)+)1008 4658 w 10 R f ( command to print Mr. Tic's entire record is then)9 1958( The)1 205(that is, a sequence of one or more non-blank lines.)9 2010 3 720 4838 t 9 CW f (, x/\(.+\\n\)+/ g/\303Herbert Tic$/ p)4 1674 1 1008 5008 t 10 R f (and that to extract just the phone number is)8 1726 1 720 5188 t 9 CW f (, x/\(.+\\n\)+/ g/\303Herbert Tic$/ x/\303[0-9]*-[0-9]*\\n/ p)5 2754 1 1008 5358 t 10 R f ( Tic's record, extracts the phone number from)7 1862(The latter command breaks the file into records, chooses Mr.)9 2458 2 720 5538 t (the record, and finally prints the number.)6 1636 1 720 5658 t (A more involved problem is that of renaming a particular variable, say)11 2927 1 970 5814 t 10 CW f (n)3932 5814 w 10 R f (, to)1 138 1 3992 5814 t 10 CW f (num)4165 5814 w 10 R f (in a C program.)3 660 1 4380 5814 t (The obvious first attempt,)3 1033 1 720 5934 t 9 CW f (, x/n/ c/num/)2 702 1 1008 6104 t 10 R f ( flawed: it changes not only the variable)7 1628(is badly)1 317 2 720 6284 t 10 CW f (n)2694 6284 w 10 R f (but any letter)2 535 1 2783 6284 t 10 CW f (n)3347 6284 w 10 R f ( need to extract all the)5 904( We)1 192(that appears.)1 508 3 3436 6284 t (variables, and select those that match)5 1486 1 720 6404 t 10 CW f (n)2231 6404 w 10 R f (and only)1 347 1 2316 6404 t 10 CW f (n)2688 6404 w 10 R f (:)2748 6404 w 9 CW f (, x/[A-Za-z_][A-Za-z_0-9]*/ g/n/ v/../ c/num/)4 2430 1 1008 6574 t 10 R f (The pattern)1 458 1 720 6754 t 10 CW f ([A-Za-z_][A-Za-z_0-9]*)1204 6754 w 10 R f ( Next)1 246(matches C identifiers.)2 876 2 2550 6754 t 10 CW f (g/n/)3699 6754 w 10 R f (selects those containing an)3 1074 1 3966 6754 t 10 CW f (n)720 6874 w 10 R f (. Then)1 303 1 780 6874 t 10 CW f (v/../)1131 6874 w 10 R f (rejects those containing two \(or more\) characters, and finally)8 2614 1 1479 6874 t 10 CW f (c/num/)4141 6874 w 10 R f (changes the)1 491 1 4549 6874 t (remainder \(identifiers)1 871 1 720 6994 t 10 CW f (n)1620 6994 w 10 R f (\) to)1 140 1 1680 6994 t 10 CW f (num)1849 6994 w 10 R f ( version clearly works much better, but there may still be problems.)11 2754(. This)1 257 2 2029 6994 t (For example, in C character and string constants, the sequence)9 2510 1 720 7114 t 10 CW f (\\n)3257 7114 w 10 R f ( and)1 170(is interpreted as a newline character,)5 1466 2 3404 7114 t (we don't want to change it to)6 1165 1 720 7234 t 10 CW f (\\num.)1910 7234 w 10 R f (This problem can be forestalled with a)6 1536 1 2235 7234 t 10 CW f (y)3796 7234 w 10 R f (command:)3881 7234 w cleartomark showpage saveobj restore %%EndPage: 8 8 %%Page: 9 9 /saveobj save def mark 9 pagesetup 10 R f (- 9 -)2 166 1 2797 480 t 9 CW f (, y/\\\\n/ x/[A-Za-z_][A-Za-z_0-9]*/ g/n/ v/../ c/num/)5 2808 1 1008 830 t 10 R f (\(the second)1 464 1 720 1010 t 10 CW f (\\)1216 1010 w 10 R f ( reject)1 254(is necessary because of lexical conventions in regular expressions\), or we could even)12 3478 2 1308 1010 t (character constants and strings outright:)4 1592 1 720 1130 t 9 CW f (, y/'[\303']*'/ y/"[\303"]*"/ x/[A-Za-z_][A-Za-z_0-9]*/ g/n/ v/../ c/num/)6 3618 1 1008 1300 t 10 R f (The)720 1480 w 10 CW f (y)907 1480 w 10 R f ( only)1 211( The)1 213( strings.)1 325(commands in this version exclude from consideration all character constants and)10 3292 4 999 1480 t (remaining problem is to deal with the possible occurrence of)9 2439 1 720 1600 t 10 CW f (\\')3186 1600 w 10 R f (or)3332 1600 w 10 CW f (\\")3441 1600 w 10 R f (within these sequences, but it's easy)5 1453 1 3587 1600 t (to see how to resolve this difficulty.)6 1435 1 720 1720 t ( of the command)3 683( simple version)2 615( A)1 124(The point of these composed commands is successive refinement.)8 2648 4 970 1876 t ( can be undone;)3 644( \(Mistakes)1 449( it can be honed by adding a clause or two.)10 1755(is tried, and if it's not good enough,)7 1472 4 720 1996 t ( result-)1 283( The)1 208( the mouse language makes it unnecessary to retype the command each time.\))12 3138( Also,)1 267(see below.)1 424 5 720 2116 t (ing chains of commands are somewhat reminiscent of shell pipelines.)9 2783 1 720 2236 t 6 R f (7)3503 2186 w 10 R f (Unlike pipelines, though, which pass)4 1481 1 3559 2236 t (along modified)1 612 1 720 2356 t 10 I f (data)1361 2356 w 10 R f (,)1539 2356 w 10 CW f (sam)1593 2356 w 10 R f (commands pass a)2 707 1 1802 2356 t 10 I f (view)2538 2356 w 10 R f ( text at each step of the command is the)9 1623( The)1 210(of the data.)2 456 3 2751 2356 t ( by step until the correct piece is available to the final)11 2237(same, but which pieces are selected is refined step)8 2083 2 720 2476 t (step of the command line, which ultimately makes the change.)9 2494 1 720 2596 t (In other Unix programs, regular expressions are used only for selection, as in the)13 3315 1 970 2752 t 10 CW f (sam g)1 272 1 4317 2752 t 10 R f (command,)4621 2752 w (never for extraction as in the)5 1159 1 720 2872 t 10 CW f (x)1907 2872 w 10 R f (or)1995 2872 w 10 CW f (y)2106 2872 w 10 R f ( patterns in)2 448( example,)1 391(command. For)1 611 3 2194 2872 t 10 CW f (awk)3671 2872 w 6 R f (7)3851 2822 w 10 R f (are used to select lines to be)6 1132 1 3908 2872 t ( The)1 207( but cannot be used to describe the format of the input text, or to handle newline-free text.)17 3619(operated on,)1 494 3 720 2992 t ( the structure of a piece of text rather than its contents, as in the)14 2671(use of regular expressions to describe)5 1554 2 720 3112 t 10 CW f (x)4980 3112 w 10 R f (command, has been given a name:)5 1455 1 720 3232 t 10 I f (structural regular expressions.)2 1268 1 2216 3232 t 10 R f (When they are composed, as in the)6 1490 1 3550 3232 t ( use is discussed at greater length elsewhere.)7 1779( Their)1 266(above example, they are pleasantly expressive.)5 1870 3 720 3352 t 6 R f (10)4635 3302 w 10 B f (Multiple files)1 564 1 720 3628 t 10 CW f (Sam)720 3784 w 10 R f (has a few other commands, mostly relating to input and output.)10 2526 1 925 3784 t 9 CW f (e discfilename)1 756 1 1008 3954 t 10 R f (replaces the contents and name of the current file with those of the named disc file;)15 3318 1 720 4134 t 9 CW f (w discfilename)1 756 1 1008 4304 t 10 R f (writes the contents to the named disc file; and)8 1831 1 720 4484 t 9 CW f (r discfilename)1 756 1 1008 4654 t 10 R f ( file's name if)3 590( these commands use the current)5 1350( All)1 188(replaces dot with the contents of the named disc file.)9 2192 4 720 4834 t ( Finally,)1 359(none is specified.)2 696 2 720 4954 t 9 CW f (f discfilename)1 756 1 1008 5124 t 10 R f (changes the name associated with the file and displays the result:)10 2596 1 720 5304 t 9 CW f ('-. discfilename)1 864 1 1008 5474 t 10 R f (This output is called the file's)5 1226 1 720 5654 t 10 I f (menu line,)1 423 1 1978 5654 t 10 R f ( contents of the file's line in the button 3 menu)10 1951(because it is the)3 656 2 2433 5654 t ( The)1 205( first three characters are a concise notation for the state of the file.)13 2677( The)1 206(\(described in the next section\).)4 1232 4 720 5774 t ( sign indicates the number of windows open on the)9 2052( minus)1 271( The)1 206(apostrophe signifies that the file is modified.)6 1791 4 720 5894 t (file \(see the next section\):)4 1071 1 720 6014 t 10 CW f (-)1826 6014 w 10 R f (means none,)1 509 1 1921 6014 t 10 CW f (+)2465 6014 w 10 R f (means one, and)2 636 1 2560 6014 t 10 CW f (*)3230 6014 w 10 R f ( the period)2 445( Finally,)1 368(means more than one.)3 903 3 3324 6014 t ( are useful for controlling the)5 1192( characters)1 432( These)1 292(indicates that this is the current file.)6 1453 4 720 6134 t 10 CW f (X)4119 6134 w 10 R f (command, described)1 831 1 4209 6134 t (shortly.)720 6254 w 10 CW f (Sam)970 6410 w 10 R f ( \(such as all the source for a program\) by invoking it with a)13 2384(may be started with a set of disc files)8 1481 2 1175 6410 t (list of file names as arguments, and more may be added or deleted on demand.)14 3133 1 720 6530 t 9 CW f (B discfile1 discfile2 ...)3 1350 1 1008 6700 t 10 R f (adds the named files to)4 921 1 720 6880 t 10 CW f (sam)1666 6880 w 10 R f ('s list, and)2 414 1 1846 6880 t 9 CW f (D discfile1 discfile2 ...)3 1350 1 1008 7050 t 10 R f (removes them from)2 790 1 720 7230 t 10 CW f (sam)1539 7230 w 10 R f ( these commands have a)4 990( Both)1 250('s memory \(without effect on associated disc files\).)7 2081 3 1719 7230 t cleartomark showpage saveobj restore %%EndPage: 9 9 %%Page: 10 10 /saveobj save def mark 10 pagesetup 10 R f (- 10 -)2 216 1 2772 480 t (syntax for using the shell)4 1005 1 720 840 t 6 R f (7)1725 790 w 10 R f (\(the Unix command interpreter\) to generate the lists:)7 2099 1 1780 840 t 9 CW f (B