[comp.sources.mac] MacLayers 1.00

werner@rascal.ics.utexas.edu (Werner Uhrig) (06/01/90)

[MacLayers 1.00 - part 1 of 6]

---
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#
#	README
#	layers.1
#	macbput.1
#	MacLayers.doc
#
# This archive created: Thu May 31 21:58:05 1990
# By:	Roger L. Long (macintosh@dhw68k.cts.com)
export PATH; PATH=/bin:$PATH
echo shar: extracting "'README'" '(2241 characters)'
if test -f 'README'
then
	echo shar: will not over-write existing file "'README'"
else
sed 's/^X//' << \SHAR_EOF > 'README'
X                             Layers 1.0 Release
X
X                           ***    CONTENTS     ***
X
XThe following files are provided with the MacLayers package:
X
X  README            -  this file
X  layers.1          -  the layers command manual page
X  makefile          -  the layers makefile
X  layers.h          -  Unix source for the layers command
X  layers.c          -                ditto
X  protocol.c        -                ditto
X  layersize.c       -  Unix source for the layersize command
X  layertitle.c      -  Unix source for the layertitle command
X  MacLayers.sit.Hqx -  the MacLayers Application download file
X  MacLayers.doc     -  the MacLayers User's Manual
X  macbput.c         -  a downloading utility
X  macbput.1         -  the macbput command manual page
X
XThe MacLayers.sit.Hqx file is in hexbin format. After downloading it must be
Xprocessed with a Stuffit compatible utility to produce the MacLayers 
Xapplication.
X
XMacbput is a public domain download utility for downloading macbinary files.
XMacbinary files allow downloading to correctly set the Macintosh file creation 
Xdate and file last used date. The version with this package has an important 
Xbug fixed.
X
X
X                         ***  SUPPORTED SYSTEMS  ***
X
XMacLayers has been successfully installed on the following systems:
X
X   SunOS 4.0.3
X   SunOS 3.2
X   Sequent DYNIX 3.0.12 (#DEFINE SEQUENT)
X   Sequent DYNIX 3.0.4  (#DEFINE SEQUENT)
X
XMacLayers has failed to install on these systems:
X
X   AIX 2.2.1 on IBM RT        Unsupported ioctls
X
X
X                           ***   INSTALLATION   ***
X
XThere are two ways to install the layers system:
X
X    make install
X
X or
X    make installnopriv
X
XThe default is to install the 'layers' command set-uid which allows it to 
Xupdate /etc/utmp and perform chown/chmod on its allocated pseudo-ttys. 
XThis enables commands like 'who' to know about the presence of layers users 
Xand commands like 'write' and 'talk' to communicate with them. This is not 
Xa mandatory requirement however and the layers system will otherwise function.
X
XFor set-uid installers (especially Sequent users) there are a few customizing 
Xparameters which may be of interest at the front of layers.c.
X
X                              *end of document*
SHAR_EOF
if test 2241 -ne "`wc -c < 'README'`"
then
	echo shar: error transmitting "'README'" '(should have been 2241 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'layers.1'" '(4858 characters)'
if test -f 'layers.1'
then
	echo shar: will not over-write existing file "'layers.1'"
else
sed 's/^X//' << \SHAR_EOF > 'layers.1'
X.TH LAYERS l  "17 March 1990"
X.SH NAME
X.PP
Xlayers, layertitle \- Protocol for MacLayers Multiwindow Terminal Emulator for Unix
X.SH SYNOPSIS
Xlayers                - start window protocol
X.LP
Xlayers [-l] [command] - create new window
X.LP
Xlayertitle string     - retitle current layers window
X.IX  "layers" "start layers protocol, create new window"
X.IX  "layertitle" "rename current layers window"
X.SH DESCRIPTION
X.PP
XMacLayers provides multi-window capability for a Macintosh (greater than 128K)
Xconnected to a host UNIX(TM) system with sockets support. Each window may be 
Xassociated with a shell, login to a different host, or an individual 
Xcommand. Complete facilities are available for controlling the window 
Xand the associated host processes attached thereto.
X.PP
XTo use MacLayers, you must have the MacLayers vt-100 terminal emulation
Xprogram on a Macintosh and the layers protocol program installed on your
XUnix host.
X.SH MACLAYERS OPERATION
X.PP
XThe Maclayers Application on the Mac starts up as a garden variety 
Xhost-to-terminal vt-100 emulator. (As such you can run it with any
Xhost, not just a Unix machine.) Baud rate and other configurations are set 
Xby selections in the Control Menu.
X.PP
XEnter the 
X.I layers
Xcommand to the Unix host using no options or parameters
Xto start the layers protocol.  The initial terminal window will be closed
Xand replaced with a layers protocol window.  A shell is run in this
Xwindow, either /bin/sh or the shell indicated by your $SHELL variable.
X.PP
XYou can start a new shell layer by picking "New" on the Layers menu. You can
Xalso start a new layer window by issuing the
X.I layers 
Xcommand to a
Xshell layer window. If you use no operands then the new layer window
Xwill be a shell. However, you can specify any command you wish by
Xsimply adding it as a parameter.  Examples: "layers vi testfile.c",
X"layers telnet earth."
X.PP
XIf you are specifying a shell then you can also elect to have it be a 
Xlogin shell by adding a -l option. This allows broadcast/write/talk 
Xcapabilities for that window. The initial layer window shell defaults
Xto a login shell.
X.PP
XWhen a layer process group terminates its window is automatically closed.
XMacLayers exits layers mode when the last (or only) layer window is closed.
XYou may also use the Layers Menu "Shutdown" to terminate layers mode.
XYou cannot quit the MacLayers application while in layers mode but must 
XShutdown the multi-window mode first.
X.PP
XYou can abort host 
X.I layers
Xby using the Control Menu "Abort Host Layers" 
Xitem which is always available. This may be necessary if your Mac 
Xloses contact with the host and you restart the MacLayers application at
Xwhich time the host would still be in multi-window layers mode while
Xthe application would not. If the MacLayers application terminates due
Xto a non-recoverable problem it will always issue an order to terminate
Xlayers mode on the host before returning to the Finder.
X.SH XMODEM DOWNLOADING
X.PP
XMacLayers has a download facility for downloading XMODEM MacTerminal
X('macput' command) and MacBinary ('macbput' command) files. Straight 
Xvanilla XMODEM is not supported.
XOnly one window can be doing a XMODEM download at any one time.
XDownloading does not effect any other MacLayers operations so you can
Xfreely use any other windows or applications (with MultiFinder) while 
Xa download is in progress. Remember though that the topmost window 
Xreceives the highest priority data transfer from the host. So for the 
Xfastest downloading keep the XMODEM layer window the active window.
X.SH FILES
X.PP
X /usr/tmp/layers/<login>       Directory created by 
X.I layers
X /usr/tmp/layers/<login>/host.ttySocket Created by 
X.I layers
X.SH AUTHOR
XDave Trissel
X.SH BUGS AND CAVEATS
X.PP
X *) The shell TERM variable must have the same value in your 
Xlayer shells as it does when you initially start 
X.I layers
Xup.
X.PP
X *) If you set the BSD shell TERMCAP variable then that variable must
Xbe set in your .login file. It may not be changed to something
Xdifferent in .cshrc.
X.PP
X *) The 
X.I layers
Xcommand will not properly work when being issued from a
Xremote login into the same machine which is already running the
Xinitial 
X.I layers
Xstartup command.
X.PP
X *) There is no file upload facility.
X.PP
X *) MacLayers will access the disk less often if you have RAM Cache
Xenabled on the Macintosh.
X.PP
X *)Layers must be installed as set-uid with owner root in order
Xto  be  able to correctly change the owner of the tty device
Xfile for  each  window. Special  permission  may  also  be
Xrequired to write the file "/etc/utmp".
X.SH SEE ALSO
X.PP
XThe MacLayers program is
Xcompletely described in the manual that accompanies it.
X.PP
XManual page courtesy of Peter Newton.
X.PP
XUNIX(TM) is a registered trademark of American Telephone and Telegraph.
XMacintosh is a trademark of McIntosh Laboratories and is licensed to Apple 
XComputer.
SHAR_EOF
if test 4858 -ne "`wc -c < 'layers.1'`"
then
	echo shar: error transmitting "'layers.1'" '(should have been 4858 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'macbput.1'" '(2849 characters)'
if test -f 'macbput.1'
then
	echo shar: will not over-write existing file "'macbput.1'"
else
sed 's/^X//' << \SHAR_EOF > 'macbput.1'
X.TH MACBPUT local "17 Mar 1990"
X.UC 4
X.SH NAME
Xmacbput \- send file to macintosh via macbinary protocol
X.SH SYNOPSIS
X.B macbput
Xfile
X.br
X.B macbput
X[
X.B \-rdu
X] file
X[
X.B \-t
Xtype
X]
X[
X.B \-a
Xowner
X]
X[
X.B \-n
Xname
X]
X.SH DESCRIPTION
X.I Macbput
Xsends a file to a Macintosh running MacTerminal.
XThe File Transfer Protocol settings should specify the "MacBinary"
Xtransfer method.
XMacbput will also work with other communications programs for the Mac
X(e.g. MacLayers);
Xconsult the user's manual for your macbinary-compatable communications
Xprogram for more information.
XThis manual page will only address the use of macbput with MacTerminal.
X.PP
XTo use this program, log into the unix system using MacTerminal,
Xand run macbput specifying the desired options and one file to be sent.
XIf MacTerminal is properly configured, it will recognize that a file
Xis arriving on the serial line and put up an indicator showing how
Xmuch of the file has been sent.
XSeveral Control-X's may be used to force macbput
Xto give up if the transfer fails.
X.PP
XIf none of the
X.B \-rdu
Xflags are specified,
X.I macbput
Xsends three unix files to the Mac:
X.IB file .info ,
X.IB file .data ,
Xand
X.IB file .rsrc .
XThese specify the three parts of one Mac file:  the .data file
Xbecomes the data fork, the .rsrc file becomes the resource fork,
Xand the .info file specifies the sizes of the two forks, as well
Xas the file name, file type, creation date, and other information.
XThis is useful for returning files to the Mac which were stored
Xusing macget or macbget.
X.PP
XThe
X.B \-r
Xflag specifies
X.I resource
Xmode.
XEither
X.IB file .rsrc
Xor
X.I file
Xwill be sent to the Mac, along with a forged
X.B .info
Xfile and an empty
X.B .data
Xfile.
XThe file sent becomes the resource fork of the Mac file.
X.PP
XThe
X.B \-d
Xflag specifies
X.I data
Xmode.
XEither
X.IB file .data
X,
X.IB file .text
Xor
X.I file
Xwill be sent to the Mac, along with a forged
X.B .info
Xfile and an empty
X.B .rsrc
Xfile.
XThe file sent becomes the data fork of the Mac file.
X.PP
XThe
X.B \-u
Xflag requests
X.I unix
Xmode, which is the same as
X.I data
Xmode except unix newline characters are converted
Xinto carriage returns.
XHuman-readable unix text files sent to the Mac using this option
Xwill be compatible with applications which expect "text only" files.
X.PP
XThe remaining options serve to override the default
Xfile type, owner, and file name to be used on the Mac.
XThe default type and owner for
X.I resource
Xand
X.I data
Xmode defaults are "????", "????", and
X.I unix
Xmode defaults are "TEXT" and "MACA".
X.SH SEE ALSO
Xmacput(local), macget(local), xbin(local), macbin(local), mcvert(local)
X.SH BUGS
XThe macbinary protocol may not work over flow controlled communication lines,
Xsome terminal concentrators, or when using rlogin.
X.SH FEATURES
XProperly initializes the Creation Date.
X.SH AUTHOR
XOriginal base code: Dave Johnson, Brown 7/31/84
SHAR_EOF
if test 2849 -ne "`wc -c < 'macbput.1'`"
then
	echo shar: error transmitting "'macbput.1'" '(should have been 2849 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'MacLayers.doc'" '(30876 characters)'
if test -f 'MacLayers.doc'
then
	echo shar: will not over-write existing file "'MacLayers.doc'"
else
sed 's/^X//' << \SHAR_EOF > 'MacLayers.doc'
X
X                        MacLayers Document
X
X                   Version 1.00 March 17, 1990
X
XMacLayers provides multi-window capability for a Macintosh connected
Xto a host UNIX(TM) system with sockets support. Each window may be 
Xassociated with a shell, login to a different host, or an individual 
Xcommand. Complete facilities are available for controlling the window 
Xand the associated host processes attached thereto.
X
X
X                   What You Need To Run MacLayers
X
X1) A Unix host which supports the sockets protocol.
X
X2) A Macintosh with more than 128k of RAM and connected to the host. 
X
X3) The MacLayers Macintosh Application provided with this package.
X
X4) The Unix host server command 'layers' provided with this package.
X
X5) If you want to resize windows which are logged into a second BSD
X   machine or resize windows on a BSD machine running in non-layers 
X   mode then you need the 'layersize' command provided with this package.
X
X6) If you want to specify window titles on your own (such as to indicate
X   your current directory or other such information) you need the Unix 
X   'layertitle' command provided with this package.
X
X
X
X                         MacLayers Operation
X
XThe MacLayers Application on the Macintosh starts up as a garden variety 
Xhost-to-terminal vt-100 emulator. (As such you can run it with any
Xhost, not just a BSD machine.) Baud rate and other configurations 
Xare set by selections in the Control menu. MultiFinder is fully 
Xsupported so you can use other applications while MacLayers is 
Xexecuting and downloading.
X
XThe initial or any document window may be saved via the "Save As" File
Xmenu option. When this happens the file is designated as a MacLayers
Xapplication document and contains not only logged text from the host 
Xcommunications in that window but also the current Control menu settings.
X
XOnce the initial 'layers' command is executed on the host (use no options 
Xor parameters) MacLayers and the host start operating in MacLayers
Xprotocol mode. Automatically the document file window is closed and
Xreopened as layer number 1 running with a new shell. The shell is either
X/bin/sh or the shell indicated by your $SHELL environment variable.
XThe term 'layer' refers to a process group running on the Unix host 
Xand the associated MacLayers window to which the group is attached.
X
XThe Macintosh Layer menu list shows the status of currently opened layers 
Xand read-only text files (described later). Selecting the menu item
Xbrings the associated window up front.
X
XLayer number 1 is always associated with your startup document. Its
Xshell identifies itself to the host as your login shell so that broadcast 
Xmessages and commands like 'talk' and 'write' will be properly redirected 
Xto that window. (The current mesg(1) state remains unchanged.)
X
XYou can start a new shell layer via the New menu item from the Layers
Xmenu. You can also start a new layer window by issuing the 'layers' 
Xcommand in a shell layer window. If you use no operands then the new 
Xlayer window will be a shell. However, instead of a shell you can specify 
Xany command you wish by simply adding it as a parameter.  Examples: 
X
X                      layers vi testfile.c
X
X                      layers telnet earth
X
XIf you are specifying a shell then you can also elect to have it be a 
Xlogin shell by adding a -l option. This allows broadcast/write/talk 
Xcapabilities for that window. By default only the document layer 
X(number 1) always starts out as a login shell.
X
XThe host is always kept informed of your current window size and programs
Xusing curses(3) like 'vi' and 'more' will properly adapt. However, most
Xutilities only size the window once when they start up so changing
Xthe window size is verboten after they are running.  MacLayers normally
Xdisallows window resizing when it recognizes that you are running such 
Xa program. This can be overridden by holding down the shift key when 
Xresizing the window. A 'vi' symbol appears in the lower right window 
X'growbox' area when MacLayers detects you are running a cursor moving
Xtype of program. Zooming also is disallowed at this time unless both the
Xzoomed and non-zoomed state have exactly the same character line width
Xand height.
X
XSee the section "Logging Into Another Host" below for information on
Xproper window sizing when your window is being used to do a login command
Xinto another host.
X
X Note: You may have to hit return once after some programs terminate 
X       to get MacLayers to recognize you are out of 'vi' mode.
X
XThe "enter" key is typically used to send a break (SIGINT) to all 
Xprocesses associated with that layer window. The method can be configured 
Xin the Control menu Terminal item.
X
XYou may terminate the window's processes with the Layers menu 
X"SIGTERM/SIGHUP Layer" item. The layer may also be killed by closing its
Xwindow (SIGHUP). When a layer process group terminates on the host 
Xits window is automatically closed.
X
XMacLayers exits layers mode when the last (or only) layer window is closed.
XYou may also use the Layers menu "Shutdown" to terminate layers mode.
XYou cannot quit the MacLayers application while in layers mode but must 
XShutdown the multi-window mode first.
X
XYou can abort host layers by using the Control menu "Abort Host Layers" 
Xitem which is always available. This may be necessary if your Macintosh 
Xloses contact with the host and you restart the MacLayers application at
Xwhich time the application would not be in layers mode but the host would.
XIf the MacLayers application aborts due to a non-recoverable problem 
Xit will inform the host to terminate layers mode before returning to the 
XFinder.
X
X  More About Window Sizing
X
XEach MacLayers window has two complete window size environments, a zoomed
Xstate size and a non-zoomed state size. Each state may have its own
Xassociated font size and screen location. When you change the window size 
Xby dragging the grow corner (bottom right) you convert the window into 
Xits zoomed state. Clicking the zoom box in the title bar switches between 
Xthe two states. Simply moving a window doesn't change its state. Both the 
Xfont and size for the two states can be set by the Control menu "Default 
XWindow Settings" and "Current Window Settings" items. The default item 
Xsettings are used when any new windows are created.
X
X  Logging Into A Secondary Host
X
XIf you log onto another system from within a layer window then that system 
Xwill not know of your current window's size. MacLayers provides you with
Xa way to inform that system of this information if the system is a BSD 
Xor System V Unix.
X
XFor remote BSD systems you can execute the 'layersize' command provided 
Xwith this package. (The command must be copied or built on the remote 
Xsystem and be accessible by your shell there.) When at the shell command 
Xprompt select the Control menu item "Inform BSD of Window Size" and a 
Xstring will be sent invoking the 'layersize' command. This informs the 
Xremote kernel of the current process window size. If your BSD .login or 
X.profile uses the 'tset' command to set the terminal type then you must 
Xadd the -I option to keep 'tset' from forcing each login window to be 
Xtreated as always having 24 lines (the vt-100 default.)
X
XSystem V allows window (actually screen) sizes to be specified with
Xthe environment variables "COLUMNS" and "LINES". You can automatically
Xset these shell variables when at a shell command prompt by selecting
Xthe Control menu "Inform System V of Window Size" item. 
X
XIt is up to you to inform the indirect login host of any window size 
Xchanges by using the menu items. Your terminal type on such hosts 
Xshould be specified as vt100 if you wish to execute screen oriented 
Xcommands such as 'vi' or 'more'.
X
X                        Other Capabilities
X
X   Cursor Positioning In 'vi' Mode
X
XWhen in 'vi' mode MacLayers provides a useful cursor moving feature.
XDouble-clicking in the window causes a series of vi commands to be 
Xissued which cause the insertion cursor to move to that location.
XYou must not be in vi insert mode or the commands will simply be taken
Xto be text that you have typed. (You can do that just for fun to see
Xwhat MacLayers sends on a double-click.)
X
X   Read-only Text Files
X
XMacLayers can open up text files as read-only windows by using the 
X"Open Text" File menu. Such windows can have their contents copied to 
Xthe clipboard but may never be altered in any way. Text window titles show
Xthe circle-r (registered trademark) to let you know they are read-only 
Xand a "no-write" symbol appears at the bottom right portion of the
Xwindow (the "grow" area.)
X
X   Window Aliasing
X
XAt times you may wish to view two portions of a communication window's 
Xcontents at one time. The File menu "Open Window Alias" will create a 
Xnew read-only window for any communications window and this can be 
Xscrolled to any independent position desired just like a text-only window.
X
XSince in-coming text from the computer always forces a window to the 
Xbottom for proper capturing, the window aliasing feature can be used 
Xto open a surrogate window that is immune to this action.
X
X   XMODEM Downloading
X
XMacLayers has a download facility for accepting downloaded XMODEM 
XMacTerminal ('macput' command) and macbinary ('macbput' command) files. 
XStraight vanilla XMODEM is not supported. A copy of the public domain 
Xmacbinary downloading program 'macbput' is provided with this package.
X
XOnly one window can be doing a XMODEM download at any one time.
XDownloading does not effect any other MacLayers operations so you can
Xfreely use any other windows or applications (with MultiFinder) while 
Xa download is in progress. Remember though that the topmost window 
Xreceives the highest priority data transfer from the host so for the 
Xfastest downloading keep the XMODEM layer window the active window.
X
XThe File menu "Download Site" can be used to preselect the location
Xwhere downloads are to occur. By default files are placed where the
Xstartup document resides. This setting is forgotten each time the 
XMacLayers application terminates.
X
XIf you have an error-free line then setting the "Fast" mode in the 
XControl menu "File Transfer" selection will speed up download by about
X28%.
X
X  Downloading Examples
X
XThe macbput utility provided with this package can be run on the host
XUnix system and is used to ship files to a Macintosh running MacLayers. 
X(Some Unix systems already have a utility called macput which is used in 
Xexactly the same way. But macbput properly updates Macintosh file dates 
Xconcerning the time of original creation and last use.)
X
XTo download a standard Unix text file, for example one created by a 
Xeditor such as vi or emacs, enter the following command:
X
X          macbput -u filename
X
XThe transfer will start automatically and will create a Macintosh file 
Xof type TEXT on the Macintosh which can be opened by applications such as 
XMacWrite and Word.
X
XOther types of Macintosh files and applications may also be downloaded. 
XOn the host Unix system they may take on one of many forms. If you have 
Xa single file which ends in the name "hqx" then it must first be converted 
Xinto three files with names ending in .info, .data and .rsrc with a 
Xutility such as xbin (not provided.)
X
X    xbin  filename.sit.hqx
X
XIf you have the .info, .data and .rsrc files then you are ready to 
Xdownload with the macbput (or macput) command. Specify only the front 
Xpart of the file name, the part before the .info, .data and .rsrc.
X
X    macbput  filename.sit
X
XThe transfer will start automatically and upon completion a copy of the 
Xfile will be available on the Macintosh.
X
XSometimes the host version of the file will not be in three pieces but
Xinstead exist as a single binary (non-text) file. These are called 
Xmacbinary files and almost always end in the suffix ".bin". Macbinary 
Xfiles may be converted to the three file info, data and rsrc format with 
Xutilities such as "mcvert" (not provided) and then downloaded with macbput
Xas above. It is also possible to directly download a macbinary file if 
Xyou have a so-called XMODEM download utility. (One such utility is 
Xcalled "xmodem".) To accomplish this, issue the download command on the 
Xhost:
X
X    xmodem -sb filename.bin
X
Xand then select the File menu "Download File" item. The download 
Xshould start at that time. But if it doesn't you may have to invert the 
XControl menu "File Transfer ..." CRC/Checksum selection and try again.
XNote that downloading via XMODEM utilities will not auto-start the
Xprocess on the Macintosh. You must use the "Download File" menu item
Xto start the Macintosh side of the operation.
X
X  Paste Speed
X
XUnix is known for the ease with which its tty device drivers can be
Xoverrun by input. (This causes data to be lost.) MacLayers provides
Xtime delay options which can be set for pasting text into a window.
X(Data pasted into a window is sent on to the host.) The options are 
Xin the Control menu "File Transfer" selections.
X
X  Preferences Menu Item
X
XThe Control menu Preferences item provides user selectable options for 
Xhighlighted text format and cursor display among other things.
X
X  Window or Selection Printing
X
XThe entire window or the current selection may be printed by activating
Xthe File menu "Print" entry. If you have an early Macintosh model with 
Xonly 64K of ROM then printing will refuse to work due to Apple's lack of
Xsupport for that machine in the MPW programming environment.
X
X  Vertical Window Scrolling With Keyboard Keys
X 
XYou can scroll the active window up or down via the key sequences given
Xbelow. The second sequence for each option is an alternate provided only 
Xfor keyboards not having arrow keys:
X 
X    COMMAND+UPARROW          scroll back one page
X or COMMAND+"'"
X 
X    COMMAND+DOWNARROW        scroll forward one page
X or COMMAND+'/'
X 
X    COMMAND+OPTION+UPARROW   scroll back one line
X or COMMAND+OPTION+"'"
X 
X    COMMAND+OPTION+DOWNARROW scroll forward one line
X or COMMAND+OPTION+'/'
X 
X    COMMAND+SHIFT+UPARROW    scroll to the top of the file
X or COMMAND+SHIFT+"'"
X 
X    COMMAND+SHIFT+DOWNARROW  scroll to the bottom of the file
X or COMMAND+SHIFT+'/'
X
X  Horizontal Window Movement With Keyboard Keys
X
XMacLayers does not directly support horizontal scrolling of window contents.
XHowever, the entire window can be easily moved right or left with keyboard
Xsequences.  Requesting a movement right or left will bring the opposite 
Xedge of the window into view on the screen. If the opposite edge is 
Xalready in view then the window is moved still further in the indicated 
Xdirection.
X 
XThis capability when used with the vertical scrolling key sequences allows
Xsmall screen Macintosh users to comfortably manipulate windows that are 
Xwider than the screen.
X 
XHere are the key sequences provided. The second sequence for each option 
Xis an alternate provided only for keyboards not having arrow keys:
X 
X    COMMAND+LEFTARROW
X or COMMAND+'<'               move window left
X 
X    COMMAND+RIGHTARROW
X or COMMAND+'<'               move window right
X
X
X  Tandem Scrolling
X
XHolding the shift key down while selecting a vertical line or page
Xscroll with the mouse will automatically cause the same scroll to be
Xattempted on the next lower MacLayers window (if any.) This is handy
Xwhen eyeballing two long similar sections of text for differences.
X
X  Special Keyboard Sequences
X
XFor emacs users MacLayers allows a metakey sequence to cause bit 7 (the
Xhigh bit in a character) to be set. Combining both the command and
Xoption keys with any other key sequence will cause bit 7 to be forced
Xon. Thus, keyboards having a built-in control key can generate all 256
Xpossible 8-bit characters. Macintoshes with old non-ADB keyboards will 
Xignore this treatment for the "'" or "/" characters since they are 
Xrequired for the window scrolling movements indicated earlier.
X
XFor users requiring the generation of ASCII NUL (a zero byte, sometimes
Xcalled the IDLE character) an alternative to CONTROL-@ (also CONTROL-2) 
Xis to issue CONTROL-space (also OPTION-space.) This follows vt-100 
Xterminal convention.
X
X  Find Capabilities
X
XThe Find menu items allow searching windows for specific contents or
Xgoing to the current selection.
X
X  Iconed Window Capability
X
XA unique feature of MacLayers is the ability to shrink a window to an
Xicon. While iconed the window will still actively display its contents
Xand scroll just like a standard sized window.
X
XTo iconize a window simply double-click its title bar or select the
XIconize menu item from the Layers menu. While iconed the window may be
Xmoved around just like a Finder Icon and the miniaturized window retains
Xits own independent location.
X
XA window is deiconized when you double click it, type input to it as the 
Xtop window, select it with a Layers menu item, or select the Deiconize 
XLayers menu item.
X
XJust for fun MacLayers allows you to scroll a iconed window with the
Xvertical scroll keys (defined earlier) without causing it to deiconize.
X
XFor users running under MultiFinder standard windows can be auto-iconed
Xtemporarily while MacLayers is not the front most application. A check
Xbox in the Preferences menu dialog box enables this action. If checked
Xthen holding the shift key down while switching to another application
Xwill temporarily inhibit the auto-iconing.
X
X  Icons to Default Positions
X
XThis menu selection from the Control menu item resets the positions of
Xall iconed windows such that when iconed they appear along the top, right,
Xleft or bottom of the screen. There is also an option for the bottom where
Xonly the titles show. This allows the user to treat the titles of iconed 
Xwindows as though they are buttons at the bottom of the screen. By double
Xclicking the button (which is really the title of the iconed window) 
Xthe window returns to its full size.
X
XThe menu item simply resets the position for all icon windows to the
Xdesignated choice selected in the Preferences dialog. They may then be 
Xmoved again by you to other areas of the screen.
X
X  Shrink Window To Title
X
XAt times the desktop becomes too cluttered so MacLayers provides yet 
Xanother feature to ease the busy desktop problem. Any MacLayers window
Xcan be shrunk to just its title bar by shift-double-clicking the title bar 
Xor selecting the Titleize item from the Layers menu item. In effect the
Xwindow is still there but only the title bar remains visible. The window
Xremains titled even if output is being sent to it. Moving the title bar 
Xhas the same effect as moving the window.
X
XThe window may be detitleized by double-clicking the title bar or selecting 
Xthe Detitleize item from the Layers menu.
X
X  Hide Window Capability
X
XYou may also completely hide any MacLayers window at any time by selecting
Xthe Hide item from the Layers menu. The window will stay hidden until 
Xoutput is sent to it from the host or you reactivate it from the Layers 
Xmenu.
X
X  Cycling Through Windows
X
XAll active MacLayers windows may be displayed one after the other in
Xnumerical order by selecting the Layers menu Cycle item. Hidden windows
Xdo not appear in the cycle list.
X
X  Specifying a Layer Window Title
X
XThe 'layertitle' command provided with this package allows a single
Xargument (which may be a string) to specify a title to be displayed
Xfor the controlling window of the process. The source for this command
Xshould compile and execute on any Unix system and so can be used even for
Xwindows which are logged into remote hosts.
X
XAn example use of this feature is to create your own "cd" directory 
Xchange shell command and have it always display the current directory 
Xname in the title bar.
X
XExpert users can examine the 'layertitle' source code to discover 
Xthe control sequence needed to send the ANSI Private Message string which 
Xactually causes the new title to be recognized. Knowing this sequence 
Xstandard shell echo facilities can be used in place of the 'layersize' 
Xcommand.
X
X  Sending an Interrupt to a Window Process
X
XThe Send Interrupt To Layer item of the Layers menu causes a internal
Xpacket to be sent to the host indicating that a SIGINT signal be sent to 
Xthe UNIX process group attached to the window. This is only available in 
Xlayers mode.
X
XAt times the UNIX tty mode settings for a process may become garbled
Xand if the Enter key is sending DEL or CONTROL-C this may not be enough
Xto interrupt the process. Selecting this menu item bypasses the tty
Xdriver and so ensures that an interrupt signal is received.
X
X  Reset Terminal
X
XOccasionally you may have bad data transmitted to the Macintosh which can
Xcause the vt-100 emulation to enter a special graphics mode or setup
Xa vt-100 screen scrolling area smaller than your full window size. If this 
Xoccurs the Control menu item "Reset Terminal" will reinstate normal 
Xoperation. This in no way affects layers mode operation.
X
X  Sending Break in Layers Mode
X
XA hardware 'break' can be placed on the host serial line with the Control
Xmenu Send Hardware Break item. However, when in layers mode this is only
Xallowed if the line is idle to guarantee that no internal control packets 
Xbecome garbled or lost. A beep occurs when the line is busy.
X
X  Aborting Current Activity
X
XPaste and XMODEM operations may be aborted by entering COMMAND-period
X(cmd-.).
X
X  Use of the Macintosh RAM Cache
X
XFor the last few years versions of the Macintosh operating system have
Xprovided a RAM cache feature configurable in the control panel to speed 
Xup data transfers to floppy and hard disks. There are two types of 
Xenvironments where this option is especially useful with MacLayers.
X
XThe first situation is for users running off of floppy disks. In this case
Xrunning with at least the minimal RAM cache size of 32K will inhibit the 
Xconstant whirring of your diskettes and improve screen text display speed.
X
XUsers using high-speed communication connections (9600 and above) make up 
Xthe second group that may need to run with the RAM cache turned on. This 
Xis necessary to avoid data loss when receiving large amounts of 
Xuninterrupted data. An example of this would be the listing of a large 
Xsource file directly to your window. Once the RAM cache is filled it
Xpurges itself by writing the cached data to an output file. The Macintosh 
Xserial driver can lose high speed data coming in if diskette or hard disk 
Xaccesses are being done at the same time. (This is called data overrun.) 
XUsers with this potential situation need to guarantee that the size of 
Xtheir ram cache is at least as big as the largest amount of data they 
Xwant to capture. (This does not concern XMODEM transfers. They do not 
Xrequire RAM cache although cache of at least minimum size can speed 
Xthese up as well.)
X
X  Disk Full Processing
X
XMacLayers will put up a warning box and delete all data in the scroll 
Xfile up to the current output position if the disk where the file resides 
Xbecomes completely filled.
X
X  Minimal Memory Environment
X
XFor users with extremely tight memory requirements MacLayers can be forced 
Xto run in a memory partition approximately 95k bytes smaller than normal. 
XWhen run in this manner MacLayers will beep at startup and issue a warning 
Xthat only a single window is allowed. No more than one window can be open 
Xat a time and no read-only text windows are available in this mode. Also,
Xthe maximum size of data handled by cut and paste operations is more
Xrestrictive.
X
X  Enhanced Terminal Capabilities
X
XMacLayers supports standard vt-100 terminal protocol as described in BSD
XTermcap(5) and System V Terminfo(4). But there are also two extra
Xcapabilities which can speed up screen updating particularly with screen
Xeditors. UNIX users who specify vt100 terminal type only for the sake
Xof running MacLayers can include these extra capabilities by using the
Xreplacement terminal descriptions below. These not only include the extra 
XMacLayers terminal capabilities but also remove timing waits required 
Xby real vt-100's thus providing even further speed improvements.
X
XFor BSD Termcap the following description can be used:
X
X #                    MacLayers vt-100 Termcap
X d0|vt100|vt100-am|MacLayers dec vt100:\
X    :cr=^M:do=^J:nl=^J:bl=^G:co#80:li#44:cl=\E[;H\E[2J:\
X    :le=^H:bs:am:cm=\E[%i%d;%dH:nd=\E[C:up=\E[A:\
X    :ce=\E[K:cd=\E[J:so=\E[7m:se=\E[m:us=\E[4m:ue=\E[m:\
X    :md=\E[1m:mr=\E[7m:mb=\E[5m:me=\E[m:is=\E[1;24r\E[24;1H:\
X    :rf=/usr/lib/tabset/vt100:\
X    :rs=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:ks=\E[?1h\E=:ke=\E[?1l\E>:\
X    :ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:kb=^H:\
X    :ho=\E[H:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:ta=^I:pt:sr=\EM:vt#3:xn:\
X    :sc=\E7:rc=\E8:cs=\E[%i%d;%dr:\
X    :dc=\ED:ic=\EI:
X
XThe System V Terminfo specialized definition is:
X
X #        Special System V Terminfo definition for MacLayers vt100
X vt100|vt100-am|dec vt100 without tabs and with MacLayers extras,
X    am, mir, msgr, xenl, xon, cols#80, lines#24, vt#3,
X    acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
X    bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
X    csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\b,
X    cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
X    cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
X    dch1=\ED, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0,
X    home=\E[H, ich1=\EI, ind=\n, ka1=\EOq, ka3=\EOs, kb2=\EOr,
X    kbs=\b, kc1=\EOp, kc3=\EOn, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC,
X    kcuu1=\EOA, kent=\EOM, kf0=\EOy, kf1=\EOP, kf10=\EOx, kf2=\EOQ,
X    kf3=\EOR, kf4=\EOS, kf5=\EOt, kf6=\EOu, kf7=\EOv, kf8=\EOl,
X    kf9=\EOw, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmkx=\E[?1l\E>,
X    rmso=\E[m, rmul=\E[m, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
X sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t^N%e^O%;,
X    sgr0=\E[m^O, smacs=^N, smkx=\E[?1h\E=,
X    smso=\E[1;7m, smul=\E[4m, tbc=\E[3g,
X
X
X
X                                 Hints
X
X *) MacLayers must internally handle your window display differently
X    whenever the cursor is being positioned above the bottom line such
X    as occurs during the execution of a screen editor on the host. The 
X    "vi" symbol is displayed in the grow box during this time to indicate 
X    this special mode. During so-called "vi" mode you are not allowed
X    to change the window size. Holding the shift key down will override
X    this restriction and allow you to resize the window. But remember 
X    that if you are running a utility then the utility may not be able 
X    to dynamically adjust to a new window size. If it can then you must 
X    do whatever is required of the utility to inform it of the change.
X
X    At times MacLayers may think the window is still in "vi" mode even
X    after an editor or cursor controlling utility has finished. One
X    instance of this is immediately after a "clear screen" command.
X    MacLayers does not know to go out of "vi" mode until a new line is
X    added to the very bottom of the screen causing the screen to scroll
X    up a line. If the window has stayed in "vi" mode and you want to 
X    resize it simply hold the shift key down or type empty lines to the 
X    shell until the window begins to scroll again. (The "vi" will then 
X    disappear from the grow box.)
X
X *) When running in layers mode the host/MacLayers interface always
X    uses vt-100 protocol regardless of your TERM terminal type setting.
X    Thus if you only set your TERM variable to vt100 to run MacLayers 
X    and you always run in layers mode then you need not bother actually
X    setting vt100 as your Unix terminal type.
X
X *) As mentioned at the start of this document MacLayers can be used
X    as a normal vt-100 terminal emulator when connected to any host
X    computer. On BSD and System V systems you can also use the variable 
X    sized window feature in non-layers mode by following the same 
X    instructions given for logging into a remote host as described
X    in the "Logging Into A Secondary Host" section above. (This also
X    holds true for a layers host before the layers command is entered.) On 
X    systems other than BSD and System V changing the current window 
X    size may garble output unless there is a means for you to notify 
X    your connection of the new window size.
X
X
X                            Problems/Caveats
X
X *) The current version does not do data validation with packet retry for 
X    MacLayers/host internal communication. Thus poor line conditions may 
X    cause a host internal message to be missed. This is usually not 
X    catastrophic but means something won't work correctly. For instance
X    a window might not auto-close when a host process death occurs or 
X    output might be sent to the wrong window.
X     
X *) The shell TERM variable must have the same value in your 
X    layer shells as it does when you initially start layers up.
X
X *) If you set the BSD shell TERMCAP variable then that variable must
X    be set in your .login file. It may not be changed to something
X    different in .cshrc.
X
X *) The host/MacLayers system attempts to give highest data communication
X    priority to the topmost MacLayers window at all times by throttling
X    down output to other windows. However due to internal UNIX kernel I/O 
X    buffering the attempts may not always succeed.
X
X *) The "Download Site" folder is always kept open which means if you 
X    want to trash the folder you must first choose a new download site or 
X    quit MacLayers.
X
X *) MacLayers has U.S. keyboard dependencies.
X
X *) The layers command will not properly work when being issued from a 
X    remote login into the same machine which is already running the initial
X    layers startup command.
X
X *) If a layers window text file is read as a file of type TEXT by another
X    application and that file has highlighted characters (as sent by the
X    host) embedded within it then those characters will appear as garbage 
X    in that application. (Specifically such characters have the high bit
X    [bit 7] on.)
X
X
X                                 Bugs
X
X *) Occasionally during or after a cursor moving utility has executed if 
X    the window is scrolled backwards then when it is eventually scrolled 
X    forward to the bottom (last) line of the file the bottom line will 
X    be missing from the display. If you can reproduce this problem then 
X    please send a complete description of how to do so to 
X
X             uunet!rascal.ics.utexas.edu!layers-reply
X
X
X
X                         Acknowledgement
X
X  The author owes a big thanks to Werner Uhrig and his band of testers at the
X  University of Texas for the many bug reports and suggestions delivered 
X  during the intensive beta testing phase of this product. MacLayers is a 
X  substantially improved application as a result.
X
X                                                Dave Trissel
X                                                Austin
X    
X    
X
XUNIX(TM) is a registered trademark of American Telephone and Telegraph.
X
XMacintosh is a trademark of McIntosh Laboratories and is licensed to Apple 
XComputer.
X
X                     **** end of document ****
SHAR_EOF
if test 30876 -ne "`wc -c < 'MacLayers.doc'`"
then
	echo shar: error transmitting "'MacLayers.doc'" '(should have been 30876 characters)'
fi
fi # end of overwriting check
#	End of shell archive
exit 0
--- end of part 1 ---

werner@rascal.ics.utexas.edu (Werner Uhrig) (06/02/90)

[MacLayers 1.00 - part 2 of 6]

---
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#
#	layers.h
#	layersize.c
#	layertitle.c
#	macbput.c
#	makefile
#	protocol.c
#
# This archive created: Thu May 31 21:58:11 1990
# By:	Roger L. Long (macintosh@dhw68k.cts.com)
export PATH; PATH=/bin:$PATH
echo shar: extracting "'layers.h'" '(2049 characters)'
if test -f 'layers.h'
then
	echo shar: will not over-write existing file "'layers.h'"
else
sed 's/^X//' << \SHAR_EOF > 'layers.h'
X/*             Copyright (C) 1989 by David W. Trissel 
X *
X *  Not derived from licensed software.
X *
X * Permission is granted to freely use, copy, modify, and redistribute
X * this software, provided that no attempt is made to gain profit from it,
X * the author is not construed to be liable for any results of using the
X * software, alterations are clearly marked as such, and this notice is
X * not modified.
X *
X */
X
X#define MAXPCHAN	7						/* maximum layers supported */
X
X#define MAXSTR		200
X#define	MAXARGS		64
X#define MAXLINE		1024
X#define IOSIZE		800						/* data gulp handling size */
X
X/* WARNING - packet sizes must be insured to never match the ESCAPE char */
X#define	ESCAPE		'}'						/* datalink escape character */
X
X#define DO 		if (Dflag)					/* for debugging */
X
X/* miscelaneous common data */
Xextern	int	Dflag;							/* debug dump indicator flag */
X
X/* Shape structure passed between MacLayers and ourselves */
Xstruct Shape
X{	short	worigv;							/* verical window bit origin */
X	short	worigh;							/* horizontal window bit origin */
X	short	wlines;							/* window height */
X	short	wchars;							/* window width */
X	short	wfont;							/* window font size */
X	short	wattr;							/* window attributes */
X};
X
X#define Wa_shell	0x01					/* window is a shell */
X
X
X  /* The following modules define the complete protocol/server interface */
X
X				/* layers.c */
X
Xextern void FQuit(/* exitcode */);
Xextern void ReceiveQuit();
Xextern void ReceiveNew(/* chanid, shape */);
Xextern void ReceiveDelete(/* chanid */);
Xextern void ReceiveSignal(/* chanid, signal */);
Xextern void	ReceiveData(/* chanid, buff, cnt */);
Xextern void ReceiveReshape(/*chanid, shape */);
Xextern void DEBUG(/* format, arg1, arg2, arg3, arg4 */);
X
X				/* protocol.c */
X
Xextern int	InitLink();
Xextern int	TopChannel();
Xextern int	SendNew(/* shape */);
Xextern void	SendTitle(/* chan, buff, cnt */);
Xextern void SendDelete(/* chan */);
Xextern void SendQuit();
Xextern void	SendReshape(/* chan, shape */);
Xextern void	SendData(/* chan, buff, cnt */);
Xextern void	ProcessStreamin();
SHAR_EOF
if test 2049 -ne "`wc -c < 'layers.h'`"
then
	echo shar: error transmitting "'layers.h'" '(should have been 2049 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'layersize.c'" '(3586 characters)'
if test -f 'layersize.c'
then
	echo shar: will not over-write existing file "'layersize.c'"
else
sed 's/^X//' << \SHAR_EOF > 'layersize.c'
X/*             Copyright (C) 1989 by David W. Trissel 
X *
X *  Not derived from licensed software.
X *
X * Permission is granted to freely use, copy, modify, and redistribute
X * this software, provided that no attempt is made to gain profit from it,
X * the author is not construed to be liable for any results of using the
X * software, alterations are clearly marked as such, and this notice is
X * not modified.
X *
X */
X				/*         All rights reserved.        */
X
X		/* layersize - update BSD Sun Unix with window size information */
X
X#include <stdio.h>
X#include <errno.h>
X#include <sys/ioctl.h>
X
Xextern int sys_nerr;
Xextern char	*sys_errlist[];
X
Xstatic void gotsyserr(/* char * */);
Xstatic void goterr(/* char * */);
Xstatic int	getnumber(/* char * */);
X
X
X						/* main() - update BSD window size */
X
Xmain(ac, av)
Xint			ac;							/* argument count */
Xchar		**av;						/* argument vector */
X{
X	struct winsize wsize;				/* window size structure for ioctl() */
X	char		*ap;					/* argument scan pointer */
X	int			lines;					/* new lines value */
X	int			cols;					/* new columns value */
X
X	if (--ac != 2)
X		goterr("Missing lines and column options");
X
X	/* get window size (actually do this to set xpixel and ypixel values) */
X	if (ioctl(0, TIOCGWINSZ, &wsize) == -1)
X		gotsyserr("No window support in host"); /* terminate with message */
X
X	/* scan looking for -l and -c line and column numeric sizes */
X	lines = cols = 0;					/* reset values */
X	while (ac > 0)
X	  {	ap = *++av;						/* point to next argument string */
X		if (ac-- > 0 && *ap == '-')		/* if option ... */
X		switch (ap[1])
X		{ case 'l':		/* lines */
X			lines = getnumber(&ap[2]);
X			break;
X
X		  case 'c':		/* columns */
X			cols = getnumber(&ap[2]);
X			break;
X
X		  default:
X			goterr("Usupported option"); /* unsupported option */
X			break;
X
X		} /* end '-' argument */
X		else
X			goterr("Unsupported parameter"); /* unsupported parameter */
X
X	  } /* end while argument vector scan */
X			
X	/* must have both lines and columns */
X	if (lines == 0 || cols == 0)
X		goterr("Must specify both lines and columns");
X
X	wsize.ws_col = cols;				/* set columns */
X	wsize.ws_row = lines;				/* set lines */
X	/* update the kernel */
X	if (ioctl(0, TIOCSWINSZ, &wsize) == -1)
X		gotsyserr("Failed to update window size"); /* didn't go */
X
X} 
X
X
X				/* goterr() - issue error and terminate */
X
Xstatic void
Xgoterr(msg)
Xchar		*msg;						/* error message string */
X{
X	printf("%s\n", msg);				/* send error message to user */
X	exit(1);							/* terminate with error */
X
X} /* goterr() */
X
X
X				/* gotsyserror() - system error return */
X
Xstatic void
Xgotsyserr(msg)
Xchar		*msg;						/* error string */
X{
X	if (errno > 0 && errno < sys_nerr)
X		printf("%s: %s\n", msg, sys_errlist[errno]);
X	else
X		printf("%s: Error %d\n", msg, errno);
X
X	exit(1);							/* exit with failure */
X
X} /* gotsyserr() */
X
X
X					/* getnumber() - parse option number */
X
Xstatic int
Xgetnumber(str)
Xchar		*str;						/* start of option string */
X{
X	int			n;						/* number being built */
X
X	if (str == NULL)
X		goterr("Invalid numeric in option");
X
X	/* skip any leading delimiters */
X	while (*str && (*str == ' ' || *str == '\t'))
X		str++;
X
X	for(n=0; *str && *str >= '0' && *str <= '9'; str++)
X		n = n*10 + *str - '0';			/* add next digit in */
X
X	/* make sure number terminates legally */
X	switch (*str)
X	{ case '\0':
X	  case ' ':
X	  case '\t':
X	  case '\n':
X		if (n <= 0 || n > 200)
X			goterr("Number out of range");
X		break;							/* these are OK */
X
X	  default:
X		goterr("Invalid numeric in option");
X
X	} /* end switch */
X
X	return ( n );						/* return the number */
X
X} /* getnumber() */
SHAR_EOF
if test 3586 -ne "`wc -c < 'layersize.c'`"
then
	echo shar: error transmitting "'layersize.c'" '(should have been 3586 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'layertitle.c'" '(1242 characters)'
if test -f 'layertitle.c'
then
	echo shar: will not over-write existing file "'layertitle.c'"
else
sed 's/^X//' << \SHAR_EOF > 'layertitle.c'
X/*             Copyright (C) 1989 by David W. Trissel
X *
X *  Not derived from licensed software.
X *
X * Permission is granted to freely use, copy, modify, and redistribute
X * this software, provided that no attempt is made to gain profit from it,
X * the author is not construed to be liable for any results of using the
X * software, alterations are clearly marked as such, and this notice is
X * not modified.
X *
X */
X                /*         All rights reserved.        */
X
X            /* layertitle - utility to specify window title */
X
X#include <stdio.h>
X
X#define ESC 0x1b
X
X            /* main() - send string designating layers window title */
X
Xmain(ac, av)
Xint         ac;                         /* argument count */
Xchar        **av;                       /* argument vector */
X{
X    char        *ap;                    /* argument scan pointer */
X
X    if (--ac != 1)
X      { printf("usage: layertitle \"new window title\"\n");
X        exit(1);
X      }
X       
X    ap = *++av;                         /* point to argument string */
X
X    /* Transmit the title string in the ANSI Private Message format
X    ** which is
X    **              ESC '^' message ESC '\'
X    */
X    printf("%c%c%s%c%c", ESC, '^', ap, ESC, '\\');
X
X}  /* main() */
SHAR_EOF
if test 1242 -ne "`wc -c < 'layertitle.c'`"
then
	echo shar: error transmitting "'layertitle.c'" '(should have been 1242 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'macbput.c'" '(9383 characters)'
if test -f 'macbput.c'
then
	echo shar: will not over-write existing file "'macbput.c'"
else
sed 's/^X//' << \SHAR_EOF > 'macbput.c'
X/*
X * (originally macput) -- send file to Macintosh using MacBinary XMODEM protocol
X * Dave Johnson, Brown University Computer Science
X *
X * (c) 1984 Brown University 
X * may be used but not sold without permission
X *
X */
X
X/* To compile:    
X                  cc -O -o macbput macbput.c
X    (Sun 4.2 BSD) cc -O -DSUNBSD42 -o macbput macbput.c
X    (System V)    cc -O -DSYSV -o macbput macbput.c
X
X   Latest modifications 10/20/88 by Trissel -
X
X 1. General cleanup by removal of unused definitions and headers.
X 2. Added #ifdefs to support System V and BSD 4.2 Sun compilation.
X 3. Removed ancient Macterminal Beta 0.5X code.
X 4. Fixed bad bug where XMODEM block count was not bumped up
X    after the first fork transfer.
X
X	Dave Trissel
X	Motorola Inc.
X	ut-sally!oakhill!davet
X
X   This code is fundamentally from two earlier programmers:
X
X	Jon Hueras
X	Symantec/THINK Technologies
X	singer@endor.harvard.edu
X
X    who added 2-Byte CRC capability to code from:
X
X	Dave Johnson
X	ddj%brown@csnet-relay.arpa
X	Brown University Computer Science
X
X   who did the initial MacTerminal 1.1 transfer protocol.
X*/
X
X/* If you have System V define the following: */
X	/* #define SYSV */
X
X/* Sun BSD 4.2 systems should define the following: */
X	/* #define SUNBSD42 */
X
X#include <stdio.h>
X#include <signal.h>
X#include <setjmp.h>
X#ifdef SYSV
X#include <termio.h>
X#else
X#include <sgtty.h>
X#endif
X#include <sys/types.h>
X#include <sys/stat.h>
X
X#ifdef SUNBSD42
X/* RAW is no longer being found on latest Sun system (??) (Trissel) */
X#define RAW 0x20
X#endif
X
X#define RECORDBYTES 132
X#define DATABYTES 128
X#define NAMEBYTES 63
X
X#define RETRIES 10
X#define ACKTIMO 10
X
X#define MAXRECNO 0xff
X#define BYTEMASK 0xff
X
X#define TMO -1
X#define DUP '\000'
X#define SOH '\001'
X#define EOT '\004'
X#define ACK '\006'
X#define NAK '\025'
X#define CAN '\030'
X#define EEF '\032'
X#define ESC '\033'
X
X#define H_NLENOFF 1
X#define H_NAMEOFF 2
X/* 65 <-> 80 is the FInfo structure */
X#define H_TYPEOFF 65
X#define H_AUTHOFF 69
X
X#define H_LOCKOFF 81
X#define H_DLENOFF 83
X#define H_RLENOFF 87
X#define H_CTIMOFF 91
X#define H_MTIMOFF 95
X
X#define H_OLD_DLENOFF 81
X#define H_OLD_RLENOFF 85
X
X#define TEXT 0
X#define DATA 1
X#define RSRC 2
X#define FULL 3
X
Xint mode, txtmode;
X
Xstruct macheader {
X	char m_name[NAMEBYTES+1];
X	char m_type[4];
X	char m_author[4];
X	long m_datalen;
X	long m_rsrclen;
X	long m_createtime;
X	long m_modifytime;
X} mh;
X
Xstruct filenames {
X	char f_info[256];
X	char f_data[256];
X	char f_rsrc[256];
X} files;
X
Xint recno, crc;
Xchar buf[DATABYTES];
X
Xchar usage[] =
X    "usage: \"macbput [-rdu] [-t type] [-c creator] [-n name] filename\"\n";
X
Xmain(ac, av)
Xchar **av;
X{
X	int n;
X	char *filename;
X
X	if (ac == 1) {
X		fprintf(stderr, usage);
X		exit(1);
X	}
X
X	mode = FULL;
X	ac--; av++;
X	while (ac) {
X		if (av[0][0] == '-') {
X			switch (av[0][1]) {
X			case 'r':
X				mode = RSRC;
X				strncpy(mh.m_type, "????", 4);
X				strncpy(mh.m_author, "????", 4);
X				break;
X			case 'u':
X				mode = TEXT;
X				strncpy(mh.m_type, "TEXT", 4);
X				strncpy(mh.m_author, "MACA", 4);
X				break;
X			case 'd':
X				mode = DATA;
X				strncpy(mh.m_type, "????", 4);
X				strncpy(mh.m_author, "????", 4);
X				break;
X			case 'n':
X				if (ac > 1) {
X					ac--; av++;
X					n = strlen(av[0]);
X					if (n > NAMEBYTES) n = NAMEBYTES;
X					strncpy(mh.m_name, av[0], n);
X					mh.m_name[n] = '\0';
X					break;
X				}
X				else goto bad_usage;
X			case 't':
X				if (ac > 1) {
X					ac--; av++;
X					strncpy(mh.m_type, av[0], 4);
X					break;
X				}
X				else goto bad_usage;
X			case 'c':
X				if (ac > 1) {
X					ac--; av++;
X					strncpy(mh.m_author, av[0], 4);
X					break;
X				}
X				else goto bad_usage;
X			default:
Xbad_usage:
X				fprintf(stderr, usage);
X				exit(1);
X			}
X		}
X		else {
X			filename = av[0];
X		}
X		ac--; av++;
X	}
X
X	setup_tty();
X	find_files(filename, mode);
X	if (mode != FULL)
X		forge_info();
X
X	if (send_sync()) {
X		recno = 1;
X		txtmode = 0;
X		send_file(files.f_info, 1);
X
X		if (mode != FULL)
X			unlink(files.f_info);
X
X		if (mode == TEXT) txtmode++;
X		send_file(files.f_data, 1);
X
X		txtmode = 0;
X		send_file(files.f_rsrc, 0);
X	}
X	reset_tty();
X}
X
Xfind_files(filename, mode)
Xchar *filename;
X{
X	int n, tdiff;
X	struct stat stbuf;
X
X	sprintf(files.f_data, "%s.data", filename);
X	sprintf(files.f_rsrc, "%s.rsrc", filename);
X
X	if (mode == FULL) {
X		sprintf(files.f_info, "%s.info", filename);
X		if (stat(files.f_info, &stbuf) != 0) {
X			perror(files.f_info);
X			cleanup(-1);
X		}
X		return;
X	}
X	else {
X		strcpy(files.f_info, "#machdrXXXXXX");
X		mktemp(files.f_info);
X	}
X
X	if (mode == RSRC) {
X		strcpy(files.f_data, "/dev/null");
X		if (stat(files.f_rsrc, &stbuf) != 0) {
X			strcpy(files.f_rsrc, filename);
X			if (stat(files.f_rsrc, &stbuf) != 0) {
X				perror(files.f_rsrc);
X				cleanup(-1);
X			}
X		}
X		mh.m_datalen = 0;
X		mh.m_rsrclen = stbuf.st_size;
X	}
X	else {
X		strcpy(files.f_rsrc, "/dev/null");
X		if (stat(files.f_data, &stbuf) != 0) {
X			sprintf(files.f_data, "%s.text", filename);
X			if (stat(files.f_data, &stbuf) != 0) {
X				strcpy(files.f_data, filename);
X				if (stat(files.f_data, &stbuf) != 0) {
X					perror(files.f_data);
X					cleanup(-1);
X				}
X			}
X		}
X		mh.m_datalen = stbuf.st_size;
X		mh.m_rsrclen = 0;
X	}
X
X	if (mh.m_name[0] == '\0') {
X		n = strlen(filename);
X		if (n > NAMEBYTES) n = NAMEBYTES;
X		strncpy(mh.m_name, filename, n);
X		mh.m_name[n] = '\0';
X	}
X}
X
Xforge_info()
X{
X	int n;
X	char *np;
X	FILE *fp;
X
X	for (np = mh.m_name; *np; np++)
X		if (*np == '_') *np = ' ';
X
X	buf[H_NLENOFF] = n = np - mh.m_name;
X	strncpy(buf + H_NAMEOFF, mh.m_name, n);
X	strncpy(buf + H_TYPEOFF, mh.m_type, 4);
X	strncpy(buf + H_AUTHOFF, mh.m_author, 4);
X	put4(buf + H_DLENOFF, mh.m_datalen);
X	put4(buf + H_RLENOFF, mh.m_rsrclen);
X	put4(buf + H_CTIMOFF, mh.m_createtime);
X	put4(buf + H_MTIMOFF, mh.m_modifytime);
X	fp = fopen(files.f_info, "w");
X	if (fp == NULL) {
X		perror("temp file");
X		cleanup(-1);
X	}
X	fwrite(buf, 1, DATABYTES, fp);
X	fclose(fp);
X}
X
Xsend_sync()
X	{
X		int c;
X		
X		tputc(ESC);
X		tputc('b');
X
X		for (;;) {
X
X			if ((c = tgetc(ACKTIMO)) == TMO)
X			  {
X				return(0);
X				}
X
X			if (c == NAK)
X			  {
X				return(1);
X				}
X
X			if (c == 'C') {
X				crc++;
X				return(1);
X			}
X		}
X	}
X
Xsend_file(fname, more)
Xchar *fname;
Xint more;
X{
X	register int status, i, n;
X	FILE *inf;
X
X	inf = fopen(fname, "r");
X	if (inf == NULL) {
X		perror(fname);
X		cleanup(-1);
X	}
X	for (;;) {
X		n = fread(buf, 1, DATABYTES, inf);
X		if (n > 0) {
X			for (i = 0; i < RETRIES; i++) {
X				send_rec(buf, DATABYTES);
X				while ((status = tgetc(ACKTIMO)) != ACK && status != NAK && status != CAN);
X				if (status != NAK)
X					break;
X			} 
X			if (status != ACK) {
X				if (status != CAN)
X					while ((status = tgetc(ACKTIMO)) != CAN);
X				fclose(inf);
X				cleanup(-1);
X				/* NOTREACHED */
X			}
X		}
X		if (n < DATABYTES) {
X			if (!more) {
X				tputc(EOT);
X				tgetc(ACKTIMO);
X			}
X			return;
X		}
X		recno++;
X		recno &= MAXRECNO;
X	}
X}
X
Xsend_rec(buf, recsize)
Xchar buf[];
Xint recsize;
X{
X	int i, cksum;
X	char *bp;
X 
X	if (txtmode || !crc) {
X		cksum = 0;
X		bp = buf;
X		for (i = 0; i < recsize; i++, bp++) {
X			if (txtmode && *bp == '\n')
X				*bp = '\r';
X			cksum += *bp;
X		}
X	}
X
X	if (crc)
X		cksum = calcrc(buf, recsize);
X
X	tputc(SOH);
X	tputc((char) recno);
X	tputc((char) (MAXRECNO - recno));
X	tputrec(buf, recsize);
X	
X	if (crc) {
X		tputc((char) (cksum >> 8));
X		tputc((char) cksum);
X	} else
X		tputc((char) cksum);
X}
X
Xstatic int ttyfd;
Xstatic FILE *ttyf;
Xstatic jmp_buf timobuf;
X
Xtgetc(timeout)
Xint timeout;
X{
X	int c;
X
X	if (setjmp(timobuf))
X		return TMO;
X
X	alarm(timeout);
X	c = getc(ttyf);
X	alarm(0);
X
X	if (c == -1)	/* probably hung up or logged off */
X		return EOT;
X	else
X		return c & BYTEMASK;
X}
X
Xtputrec(buf, count)
Xchar *buf;
Xint count;
X{
X	write(ttyfd, buf, count);
X}
X
Xtputc(c)
Xchar c;
X{
X	write(ttyfd, &c, 1);
X}
X
Xtimedout()
X{
X	signal(SIGALRM, timedout);	/* for pre-4.2 systems */
X	longjmp(timobuf, 1);
X}
X
X#ifdef SYSV
Xstatic struct termio otty, ntty;
X#else
Xstatic struct sgttyb otty, ntty;
X#endif
X
X/* should turn messages off */
X
Xsetup_tty()
X{
X	int cleanup();
X	int timedout();
X
X	ttyf = stdin;
X	ttyfd = fileno(stdout);
X#ifdef SYSV
X	ioctl(ttyfd, TCGETA, &otty);		/* get termio info */
X#else
X	ioctl(ttyfd, TIOCGETP, &otty);
X#endif
X	signal(SIGHUP, cleanup);
X	signal(SIGINT, cleanup);
X	signal(SIGQUIT, cleanup);
X	signal(SIGTERM, cleanup);
X	signal(SIGALRM, timedout);
X	ntty = otty;
X#ifdef SYSV
X	ntty.c_iflag = BRKINT;				/* only interrupt on break */
X	ntty.c_oflag = 0;					/* no output processing */
X	ntty.c_cflag |= CS8;				/* 8 bit characters */
X	ntty.c_lflag = 0;					/* no echoing */
X	ntty.c_cc[VEOF] = 1;				/* "MIN" minimum chars before input */
X	ntty.c_cc[VEOL] = 1;				/* "TIME" maximum .1 secs before feed */
X	ioctl(ttyfd, TCSETAF, &ntty);		/* set mode and flush input */
X#else
X	ntty.sg_flags = RAW;
X	ioctl(ttyfd, TIOCSETP, &ntty);
X#endif
X}
X
Xreset_tty()
X{
X	if (ttyf != NULL) {
X#ifdef SYSV
X		ioctl(ttyfd, TCSETAF, &otty);	/* reset after output drains */
X#else
X		sleep (5);						/* wait for output to drain */
X		ioctl(ttyfd, TIOCSETP, &otty);
X#endif
X	}
X}
X
Xcleanup(sig)
Xint sig;
X{
X	reset_tty();
X	exit(sig);
X}
X
Xput4(bp, value)
Xchar *bp;
Xlong value;
X{
X	register int i, c;
X
X	for (i = 0; i < 4; i++) {
X		c = (value >> 24) & BYTEMASK;
X		value <<= 8;
X		*bp++ = c;
X	}
X}
X
Xint calcrc(ptr,	count)
Xchar *ptr;
Xint count;
X	{
X		int	crc, i;
X
X		crc	= 0;
X		while (--count >= 0) {
X		 crc ^= ((int) *ptr++) << 8;
X		 for (i = 0; i < 8; ++i)
X				 if (crc & 0x8000)
X			 crc = crc <<	1 ^ 0x1021;
X				 else
X			 crc <<= 1;
X		 }
X		return (crc	& 0xFFFF);
X	}
SHAR_EOF
if test 9383 -ne "`wc -c < 'macbput.c'`"
then
	echo shar: error transmitting "'macbput.c'" '(should have been 9383 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'makefile'" '(1674 characters)'
if test -f 'makefile'
then
	echo shar: will not over-write existing file "'makefile'"
else
sed 's/^X//' << \SHAR_EOF > 'makefile'
X#                   Makefile for Layers 1.0
X
XBIN    = /usr/local
XMANDIR = /usr/local/manl
X
XPGM    = layers
XPGM2   = layersize
XPGM3   = layertitle
XPGM4   = macbput
XMS     = l
XCFLAGS = -O
XCFILES = layers.c protocol.c
XOFILES = layers.o protocol.o
X
Xall: $(PGM) $(PGM2) $(PGM3) $(PGM4)
X
X$(PGM): $(OFILES)
X	$(CC) $(CFLAGS) -o $(PGM) $(OFILES)
X
X#	$(CC) $(CFLAGS) -o $(PGM) $(OFILES) -ltermcap
X
Xlayers.o: layers.c layers.h
X	$(CC) $(CFLAGS) -c layers.c
X
Xprotocol.o: protocol.c layers.h
X	$(CC) $(CFLAGS) -c protocol.c
X
X$(PGM2): layersize.o
X	$(CC) $(CFLAGS) -o $(PGM2) layersize.o
X
X$(PGM3): layertitle.o
X	$(CC) $(CFLAGS) -o $(PGM3) layertitle.o
X
X$(PGM4): macbput.o
X	$(CC) $(CFLAGS) -o $(PGM4) macbput.o
X
Xlayersize.o: layersize.c
X	$(CC) $(CFLAGS) -c layersize.c
X
Xlayertitle.o: layertitle.c
X	$(CC) $(CFLAGS) -c layertitle.c
X
Xmacbput.o: macbput.c
X	$(CC) $(CFLAGS) -c macbput.c
X
Xinstall: $(PGM) $(PGM2) $(PGM3) $(PGM4)
X	rm -f $(BIN)/$(PGM)
X	install -c -s -o root -g daemon -m 4711 $(PGM) $(BIN)/$(PGM)
X	install -c -s $(PGM2) $(BIN)/$(PGM2)
X	install -c -s $(PGM3) $(BIN)/$(PGM3)
X#	install -c -s $(PGM4) $(BIN)/$(PGM4)
X
Xinstallnopriv: $(PGM) $(PGM2) $(PGM3) $(PGM4)
X	rm -f $(BIN)/$(PGM)
X	install -c -s $(PGM) $(BIN)/$(PGM)
X	install -c -s $(PGM2) $(BIN)/$(PGM2)
X	install -c -s $(PGM3) $(BIN)/$(PGM3)
X#	install -c -s $(PGM4) $(BIN)/$(PGM4)
X
Xmanpage: layers.1
X	rm -f $(MANDIR)/$(PGM).$(MS)
X	cp layers.1 $(MANDIR)/$(PGM).$(MS)
X	chmod 664 $(MANDIR)/$(PGM).$(MS)
X
Xclean:
X	rm -f a.out core $(PGM) $(PGM2) $(PGM3) $(PGM4) *.o
X
Xshar: makefile 
X	shar README layers.1 makefile layers.h layers.c \
X	protocol.c layersize.c layertitle.c MacLayers.sit.Hqx MacLayers.doc \
X	macbput.c macbput.1 >layers.shar
SHAR_EOF
if test 1674 -ne "`wc -c < 'makefile'`"
then
	echo shar: error transmitting "'makefile'" '(should have been 1674 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'protocol.c'" '(25546 characters)'
if test -f 'protocol.c'
then
	echo shar: will not over-write existing file "'protocol.c'"
else
sed 's/^X//' << \SHAR_EOF > 'protocol.c'
X/*             Copyright (C) 1989 by David W. Trissel 
X *
X *              Not derived from licensed software.
X *
X * Permission is granted to freely use, copy, modify, and redistribute
X * this software, provided that no attempt is made to gain profit from it,
X * the author is not construed to be liable for any results of using the
X * software, alterations are clearly marked as such, and this notice is
X * not modified.
X *
X */
X
X#include	<stdio.h>
X#include	<signal.h>
X#include	<errno.h>
X#include	"layers.h"
X
X				/* protocol.c - BSD MacLayers protocol driver */
X
X/*	This module handles all interaction with the Macintosh MacLayers
X**	program. Services provided are:
X**
X**		InitLink()	- initialize link to MacLayers
X**
X**		TopChannel() - return highest prority channel
X**
X**		SendNew()	- request new layer channel of MacLayers
X**
X**		SendTitle() - change window title to given string (NOT IMPLENTED YET)
X**
X**		SendDelete()- tell MacLayers indicated layer has died
X**
X**		SendQuit()	- order MacLayers to terminate layers mode
X**
X**		SendData()	- send output to indicated channel's window
X**
X**		SendReshape() - send Shape structure to MacLayers
X**
X**		ProcessStreamin() - data is ready to be processed from MacLayers
X**
X*/
X
X#define DUMPALL
X#undef	DUMPALL
X
X/* C library calls */
Xunsigned alarm();				/* alarm system call */
X
Xstatic int		GetData();
Xstatic void		Packet();
Xstatic void		Parse();
Xstatic void		AwaitInput();
Xstatic void		asciishape();
Xstatic void		fill4();
Xstatic void		fill2();
Xstatic void		fill1();
Xstatic int		parseshape();
Xstatic unsigned	get4();
Xstatic unsigned	get2();
Xstatic unsigned	get1();
X
Xstatic char		inbuff[IOSIZE];		/* input buffer from MacLayers */
Xstatic char 	*inpos;				/* current input position in buffer */
Xstatic int		insize = 0;			/* characters left to process */
Xstatic int		Outstream = -1;		/* current output stream channel */
Xstatic int		Instream = -1;		/* current input stream channel */
X
Xstatic struct Shape	SNshape;		/* SendNew() shape response */
Xstatic int		SNresp = 0;			/* SendNew() reponse poll flag */
Xstatic int		SNchan = 0;			/* SendNew() channel return */
X#define SN_WAITING	-1000			/* SendNew() waiting response value */
X
X#define ATTRSIZE	15				/* size of window attribute string */
X
X#define FLUSH	fflush(stdout)
X
X
X				/* Initlink() - initialize link with MacLayers */
X
X/* Returns:
X**				0 - linkup failed
X**				1 - linkup successful, Maclayers now in protocol mode
X*/
X
Xint
XInitlink()
X{
X	int Outstream = -1;				/* no default stream yet */
X	int	Instream = -1;				/* no default stream yet */
X	int		num1, num2, num3;		/* scanf item result */
X	int		err;					/* error code */
X
X#define WAITTIME	10				/* second wait response time */
X#define INITTIME	2				/* wait time after succesful startup */
X
X	/* we must non-buffer input since all input must be immediate */
X	setbuf(stdin, NULL);			/* non-buffer all input */
X
X	/* send intitial request for terminal type and version number */
X	DO DEBUG("write: ESC [ c\n");
X	if ((err=printf("\033[c")) < 0)
X	  {
X		DO DEBUG(" printf() error code %d\n", err);
X		return ( 0 );				/* problem with stdout */
X	  }
X	FLUSH;							/* force output buffer */
X
X	/* attempt to read "ESC [ ? 8 ; typedigits ; versiondigits c" */
X	num1 = num2 = num3 = -1;		/* default to unsupplied values */
X	(void) alarm(WAITTIME);			/* set timeout */
X	DO DEBUG(" doing first scanf\n");
X	(void) scanf("\033[?%d;%d;%dc", &num1, &num2, &num3);
X	(void) alarm(0);				/* cancel alarm */
X	DO DEBUG("read ESC [ ? %d ; %d; %d c\n", num1, num2, num3);
X	if (num1 != 8 || num2 != 10)
X		return ( 0 );				/* not correct response or layers term ID */
X
X	/* ask terminal if ENC_ENABLE is to be forced */
X	DO DEBUG("write: ESC [ F\n");
X	(void) printf("\033[F");
X	FLUSH;							/* force output buffer */
X	(void) alarm(WAITTIME);			/* set timeout */
X
X	/* attempt to read "ESC [ flag F" (flag indicates ENC_ENABLE status) */
X	num1 = -1;						/* default to invalid response */
X	(void) scanf("\033[%dF", &num1);
X	(void) alarm(0);				/* cancel alarm */
X	DO DEBUG("read ESC [ %d F\n", num1);
X	if (num1 != 2 && num1 != 0)
X		return ( 0 );				/* something's wrong */
X
X	/* now startup packet mode in non ENC_ENABLE processing */
X	DO DEBUG("write: ESC [ 2 ; 0 v\n");
X	(void) printf("\033[2;0v");		/* "ESC [ 2 ; 0 v" */
X	FLUSH;							/* force output buffer */
X
X	/* we are now in packet mode */
X	sleep( INITTIME );				/* let Macintosh keep up with us */
X	return ( 1 );					/* return successful startup */
X
X} /* Initlink() */
X
X
X			/* TopChannel() - return highest prority channel */
X
Xint
XTopChannel()
X{
X	return ( Instream );
X
X} /* TopChannel() */
X
X
X	/*
X	** WARNING: Most of the following functions may be recursively called
X	**			as control commands are processed from the input stream
X	*/
X
X
X			/* ProcessStreamin() - MacLayers has input to process */
X
Xvoid
XProcessStreamin()
X{
X	int		c;						/* input character being processed */
X
X	DO DEBUG("ProcessStreamin()\n");
X
X	GetData(0);						/* read some and don't timeout */
X
X	while (insize > 0)				/* while more data to process ... */
X		Parse();					/* process next chuck of data */
X
X} /* ProcessStreamin() */
X
X
X		/* SendNew() - request new layer channel from MacLayers */
X
X/*	This command is unique in that it returns a response from MacLayers.
X**	To do this we continue processing the input stream until we get
X**	our return. (This leads to recursive conditions.) The variables
X**	'SNresp', 'SNshape' and 'SNchan' are set when our reply is received.
X*/
Xint
XSendNew(shape)
Xstruct Shape	*shape;				/* shape to use for new window */
X{
X	int			i;					/* attribute count variable */
X	char		astring[ATTRSIZE];	/* copy of attribute string */
X
X	DO DEBUG("SendNew() new layer requested: '~%cA'\n", '1'+ATTRSIZE);
X
X	/* check for a recursive call */
X	if (SNresp == SN_WAITING)
X	  {	DO DEBUG("return 0 - recursive call\n");
X		return ( 0 );				/* return failure */
X	  }
X
X	putchar(ESCAPE);				/* send start of control packet char */
X	putchar('1' + ATTRSIZE);		/* send command size */
X	putchar('A');					/* send command */
X	asciishape(shape, astring);		/* convert shape to string */
X	for (i=0; i < ATTRSIZE; i++)
X		putchar(astring[i]);		/* send next attribute digit */
X	FLUSH;
X
X	/* now stay here and process the input stream until we see our response */
X/**** THIS SHOULD BE ENHANCED TO TIMEOUT WITH GetData() AND REISSUE REQUEST */
X	SNresp = SN_WAITING;			/* indicate we are waiting a response */
X	while (SNresp == SN_WAITING)
X	  { DO DEBUG(" while (SNresp %d == %d)\n", SNresp, SN_WAITING);
X		AwaitInput();				/* wait till input from MacLayers arrives */
X		ProcessStreamin();			/* process available input */
X	  }
X
X	if (SNresp == -1)				/* if Maclayers rejected request */
X		SNchan = 0;					/* return failure channel of zero */
X	else
X		*shape = SNshape;			/* else update shape structure */
X
X	DO DEBUG("SendNew() returning channel %d\n", SNchan);
X
X	return ( SNchan );				/* return the indicated channel */
X
X} /* SendNew() */
X
X
X			/* SendReshape() - send to shape to MacLayers */
X
Xvoid
XSendReshape(chan, shape)
Xint				chan;				/* channel shape belongs to */
Xstruct Shape	*shape;				/* shape to use for new window */
X{
X	int			i;					/* attribute count variable */
X	char		astring[ATTRSIZE];	/* copy of attribute string */
X
X	DO DEBUG("SendReshape() reshape: '~%cA'\n", '2'+ATTRSIZE);
X
X	if (chan <= 0 || chan > MAXPCHAN)
X	  {	DO DEBUG("BAD CHANNEL!!!\n");
X		return;						/* ignore request */
X	  }
X
X	putchar(ESCAPE);				/* send start of control packet char */
X	putchar('2' + ATTRSIZE);		/* send command size */
X	putchar('R');					/* send command */
X	putchar(chan + '0');			/* send channel */
X	asciishape(shape, astring);		/* convert shape to string */
X	DO DEBUG("shape: %.*s\n", ATTRSIZE, astring);
X	for (i=0; i < ATTRSIZE; i++)
X		putchar(astring[i]);		/* send next attribute digit */
X	FLUSH;
X
X} /* SendReshape() */
X
X
X			/* SendTitle() - set layer's window title */
X
Xvoid
XSendTitle(chan, buff, cnt)
Xint			chan;					/* layer window ID */
Xchar		*buff;					/* new title string */
Xint			cnt;					/* count of title length */
X{
X	int		i;						/* work variable */
X
X	DO DEBUG("SendTitle(chan%d, len %d, '%.*s')\n", chan, cnt, cnt, buff);
X
X	if (chan <= 0 || chan > MAXPCHAN)
X	  {	DO DEBUG("BAD CHANNEL!!!\n");
X		return;						/* ignore request */
X	  }
X
X	if (cnt < 0)
X	  {	DO DEBUG("BAD COUNT!!!\n");
X		return;						/* ignore request */
X	  }
X
X	/* for now chop title size to 29 chars since that's MacLayer's limit */
X	if (cnt > 29)
X		cnt = 29;					/* due to packet size limit */
X
X	/* we must guarantee that the size will not appear to be another ESCAPE */
X	if ('2' + cnt == ESCAPE)
X		cnt--;						/* truncate to avoid ESCAPE ESCAPE */
X	
X	putchar(ESCAPE);				/* send start of control packet char */
X	putchar('2' + cnt);				/* send size of packet */
X	putchar('T');					/* send command */
X	putchar(chan + '0');			/* send channel ID */
X	for (i=0; i<cnt; i++)
X		putchar(buff[i]);			/* send out title */
X	FLUSH;
X
X} /* SendTitle() */
X
X
X			/* SendDelete() - tell Maclayers layer died */
X
Xvoid
XSendDelete(chan)
Xint		chan;						/* dead channel ID */
X{
X	DO DEBUG("SendDelete(%d) '~2D%d'\n", chan, chan);
X
X	if (chan <= 0 || chan > MAXPCHAN) /* check channel ID */
X	  {	DO DEBUG("BAD CHANNEL!!!\n");
X		return;						/* ignore request */
X	  }
X
X	putchar(ESCAPE);				/* send control packet start char */
X	putchar('2');					/* send command size */
X	putchar('D');					/* send command character */
X	putchar(chan + '0');			/* channel ID in ascii */
X	FLUSH;
X
X} /* SendDelete() */
X
X
X			/* SendQuit() - order MacLayers to end layers mode */
X
Xvoid
XSendQuit(chan)
Xint		chan;						/* dead channel ID */
X{
X	DO DEBUG("SendQuit() '~1E'\n");
X
X	putchar(ESCAPE);				/* send control packet start char */
X	putchar('1');					/* send command size */
X	putchar('E');					/* send command */
X	FLUSH;
X
X} /* SendQuit() */
X
X
X			/* SendData() - send output to layer's window */
X
Xvoid
XSendData(chan, buff, cnt)
Xint			chan;					/* layer window ID */
Xunsigned char *buff;				/* new title string */
Xint			cnt;					/* count of title length */
X{
X	unsigned c;						/* output character being sent */
X
X	DO
X	  {	int		dcnt;
X
X		DEBUG("SendData(chan %d, len %d, '", chan, cnt, cnt, buff);
X		for (dcnt=0; dcnt<cnt; dcnt++)
X			DEBUG("%c", buff[dcnt]); /* dump each char so null doesn't stop */
X		DEBUG("')\n");
X	  }
X
X	if (chan <= 0 || chan > MAXPCHAN)
X	  {	DO DEBUG("BAD CHANNEL!!!\n");
X		return;						/* ignore request */
X	  }
X
X	/* if new output channel stream then prefix redirect command */
X	if (chan != Outstream)
X	  {	DO DEBUG("Redirecting output to %d '~2O%d'\n", chan, chan);
X		putchar(ESCAPE);			/* start of command sequence */
X		putchar('2');				/* send command size */
X		putchar('O');				/* send command */
X		putchar(chan + '0');		/* put out channel in ASCII */
X		Outstream = chan;			/* new output stream set */
X	  }
X
X	/* transmit the buffer converting the ESCAPE sequence to double ESCAPE */
X	while (cnt--)
X	  {	c = *buff++;				/* get next output character */
X#ifdef DUMPALL
X		DO DEBUG("outchar %c 0x%x\n", c, c);
X#endif
X		if (c == ESCAPE || c == (ESCAPE + 0x80))
X		  {	putchar(c);				/* put it out twice */
X#ifdef DUMPALL
X			DO DEBUG(" Doubled Escape!\n");
X#endif
X		  }
X		putchar(c);					/* write character out */
X	  }
X
X	FLUSH;							/* force out queued output characters */
X		
X} /* SendData() */
X
X
X			/* Parse() - process next chunk of input stream */
X
Xstatic void
XParse()
X{
X#define	ST_NULL		0				/* not primed for next state yet */
X#define	ST_STREAM	1				/* processing default stream input */
X#define	ST_PKT		2				/* processing packet data */
X
X	int		c;						/* input character being processed */
X
X	static	int state = ST_NULL;	/* current input state */
X	static	int psize = 0;			/* packet size */
X	static	int	rempsize = 0;		/* remembered packet size */
X	static	char pdata[MAXSTR];		/* area for packet data */
X	static	char *ppos;				/* packet read insert position */
X	static	int escapemode = 0;		/* processing escape character */
X	static	int	escapechar;			/* escape character being processed */
X	static	pchan = -1;				/* packet input stream channel */
X
X	while (insize-- > 0)			/* while more data */
X	  {	c = *inpos++;				/* get next character */
X		switch (state)				/* process according to state */
X		{ case ST_NULL:				/* prepare for new packet */
X			DO DEBUG("ST_NULL\n");
X			psize = 0;				/* clear packet size */
X			ppos = pdata;			/* start fill at data position */
X			pchan = Instream;		/* packet channel is current input stream */
X			state = ST_STREAM;		/* default is stream processing */
X
X		  case ST_STREAM:
X			/* stream keyboard input for layer */
X			/* check for escape char with possible high bit on */
X#ifdef DUMPALL
X			DO DEBUG("ST_STREAM %x/%x esc %d insz %d\n",
X						c, c & 0x7f, escapemode, insize);
X#endif
X			if (c == ESCAPE || c == (ESCAPE | 0x80))
X		 	 {	if (escapemode && c == escapechar) /* previous was ESCAPE */
X				/* this is really a single ESCAPE character */
X					escapemode = 0;		/* back out of ESCAPE mode */
X				else
X					/* what do we do with back to back esc esc+0x80 ? */
X				  {	/* flag in escape mode */
X					escapemode++;
X					escapechar = c;		/* remember character used for escape */
X					continue;			/* and continue scan */
X				  }
X			  }
X			else
X			if (escapemode)
X			  { /* this is the start of a control packet */
X				if (psize)				/* if we have previous data packet */
X					Packet(pchan, psize, pdata); /* finish up previous pkt */
X				/* process packet size */
X				psize = (c & 0x7f) - '0'; /* save size byte */
X				if (psize <= 0 || psize > MAXSTR)
X				  {	/* bad size */
X					DO DEBUG("Bad pkt size %d\n", psize);
X					break;				/* trash this packet */
X				  }
X				rempsize = psize;		/* remember this size for later */
X#if 0
X				ptimo = rtimo;			/* start receive timeout */				
X#endif
X				escapemode = 0;			/* escape mode now off */
X				ppos = pdata;			/* initialize data store pointer */
X				state = ST_PKT;			/* expect packet data next */
X				continue;				/* continue scan */
X			  }
X				  
X			/* process standard data output character for current stream */
X			
X			*ppos++ = c;				/* save next data character */
X				
X			if (++psize >= MAXSTR)		/* if packet full ... */
X			  {	Packet(pchan, psize, pdata); /* process this packet */
X				break;					/* end packet processing */
X			  }				  
X			continue;					/* continue scan */
X												
X		  case ST_PKT:
X			/* process next paket data byte */
X			*ppos++ = c & 0x7f;		/* store next data byte */
X#ifdef DUMPALL
X			DO DEBUG("ST_PKT: %x sz %d\n", c & 0x7f, psize);
X#endif
X			if (--psize != 0)
X				continue;
X#if 0
X			if (crc((unsigned char *) &rpkt, rpkt.pkt.HEADER_DSIZE+2))
X				STATS(Scrcerr);			/* communications error */
X			else
X#endif
X			Packet(0, rempsize, pdata); /* process it */
X				
X			} /* end build packet switch */
X			
X#if 0
X		ptimo = 0;						/* no more receive timeout */
X#endif
X		state = ST_NULL;				/* no more receive packet in progress */
X			
X	  } /* end while (insize) */
X		  
X	if (state == ST_STREAM && psize )	/* if we have some data ... */
X	  {	Packet(Instream, psize, pdata); /* process this data */
X#if 0
X		ptimo = 0;						/* no more receive timeout */
X#endif
X		state = ST_NULL;				/* no more receive packet in progress */
X	  }
X
X} /* Parse() */
X
X
X		/* Packet() - prcess next input data string or control packet */
Xstatic void
XPacket(chan, size, buff)
Xint			chan;						/* channel (0 if control packet) */
Xint			size;						/* amount of data */
Xchar		*buff;						/* pointer to packet data */
X{
X	static struct Shape shape;			/* Shape structure */
X
X	DO DEBUG("Packet(chan %d, size %d, '%.*s')\n", chan, size, size, buff);
X
X	/* verify channel */
X	if (chan < 0 || chan > MAXPCHAN)
X	  {	DO DEBUG("BAD CHANNEL!!\n");
X		return;							/* ignore bad channel */
X	  }
X
X	/* if data packet (chan>0) feed data to server */
X	if (chan > 0)
X	  {	ReceiveData(chan, buff, size);
X		return;							/* we are through */
X	  }
X
X	/* control packet (channel 0) */
X	chan = buff[1] - '0';				/* assume channel specified */
X	if (chan < 0 || chan > MAXPCHAN)	/* if invalid ... */
X		chan = 0;						/* set to zero */
X
X	switch (buff[0])
X	{ case 'I':		/* redirect stream */
X		DO DEBUG("CMD 'I' redirect stream to %c\n", buff[1]);
X		if (size != 2)					/* verify size */
X			break;						/* break if bad */
X		if (chan == 0)					/* verify channel */
X			break;						/* break if bad */
X		Instream = chan;				/* new instream channel */
X		return;							/* we are through */
X
X	  case 'A':		/* returned A_NEWLAYER packet */
X		DO DEBUG("CMD 'A' A_NEWLAYER response %c newchan %c SNresp %d\n",
X					buff[2], buff[1], SNresp);
X		if (size != 3 + ATTRSIZE)
X			break;						/* break if bad */
X
X		/* if SendNew() not waiting for a response this is invalid */
X		if (SNresp != SN_WAITING)
X			break;						/* break if bad */
X
X		if (buff[2] == '1')				/* if response is "failed" ... */
X			SNresp = -1;				/* show -1 response */
X		else
X		if (buff[2] == '0')				/* if response is "success" ... */
X		  {	if (chan == 0)				/* if invalid channel */
X				break;					/* break if bad */
X			/* build shape structure for SendNew() */
X			if (parseshape(&SNshape, &buff[3]) == -1)
X				break;					/* if invalid data then bad packet */
X			SNresp = 0;					/* show good response */
X			SNchan = chan;				/* indicate channel returned */
X		  }
X		else
X			break;						/* break if bad */
X
X		DO DEBUG("SNresp = %d, SNchan = %d\n", SNresp, SNchan);
X		return;							/* we are through */
X		
X	  case 'N':		/* new layer creation */
X		DO DEBUG("CMD 'N' new layer creation newchan %c\n", buff[1]);
X		if (size != 2 + ATTRSIZE)		/* verify size */
X			break;						/* break if bad */
X		if (chan == 0)					/* verify channel */
X			break;						/* break if bad */
X		/* build shape structure */
X		if (parseshape(&shape, &buff[2]) == -1)
X			break;						/* if invalid data then bad packet */
X		ReceiveNew(chan, &shape);		/* pass to server */
X		return;							/* packet is done */
X
X	  case 'D':		/* deleted layer */
X		DO DEBUG("CMD 'D' deleted layer %c\n", buff[1]);
X		if (size != 2)					/* verify size */
X			break;						/* break if bad */
X		if (chan == 0)					/* verify channel */
X			break;						/* break if bad */
X		ReceiveDelete(chan);			/* pass on to server */
X		return;							/* packet is done */
X
X	  case 'E':		/* exit - awaiting shutdown */
X		DO DEBUG("CMD 'E' exit MacLayers awaiting shutdown msg\n");
X		if (size != 1)					/* verify size */
X			break;						/* break if bad */
X		ReceiveQuit();					/* pass to server */
X		/* NOT REACHED*/
X		return;							/* ?? should never reach here */
X
X	  case 'R':		/* reshaped */
X		DO DEBUG("CMD 'R' reshape chan %c\n", buff[1]);
X
X		if (size != 2 + ATTRSIZE)		/* verify size */
X			break;						/* break if bad */
X
X		if (chan == 0)					/* verify channel */
X			break;						/* break if bad */
X
X		/* build shape structure */
X		if (parseshape(&shape, &buff[2]) == -1)
X			break;						/* if invalid data then bad packet */
X
X		ReceiveReshape(chan, &shape); 	/* tell server about shape */
X		return;							/* packet processed */
X
X	  case 'S':		/* signal */
X		DO DEBUG("CMD 'S' SIGNAL chan %c sig %c\n", buff[1], buff[2]);
X		if (size != 3)					/* verify size */
X			break;						/* break if bad */
X		if (chan == 0)
X			break;						/* break if bad */
X
X		if (buff[2] == '0')				/* if SIGINT */
X			size = SIGINT;				/* yes */
X		else
X		if (buff[2] == '1')				/* if SIGHUP */
X			size = SIGHUP;				/* yes */
X		else
X			break;						/* invalid signal */
X			
X		ReceiveSignal(chan, size);		/* pass to server */
X		return;							/* packet processed */
X
X	  default:
X		DO DEBUG("ILLEGAL CONTROL PACKET!!!\n");
X		return;							/* ignore bad packet */
X
X	} /* end command packet switch */
X
X	/* switch falls out if bad size or channel for given command */
X	DO DEBUG("Invalid size or channel!!!\n");	/* dump error */
X	return;								/* ignore packet */
X
X} /* Packet() */
X
X
X			/* GetData() - read next input from MacLayers stream */
X
X/*	An input timout parameter can indicate that we return if nothing
X**	is read within a certain amount of seconds. The return code is:
X**
X**		0 - timeout occured and no data was read
X**
X**		1 - no timeout occured, data read
X*/
Xstatic int
XGetData(timeout)
Xint			timeout;				/* timeout in seconds (or zero) */
X{
X	int		result;					/* return from read() */
X
X	DO DEBUG("GetData(timout %d)\n", timeout);
X
X	/* if buffer still has data simply return (SHOULD NOT OCCUR?) */
X	if (insize > 0)
X		return ( 1 );				/* act as through data read */
X	inpos = inbuff;					/* next get will start at beginning */
X	insize = 0;						/* default insize back to zero */
X
X	/* set timeout if we are to do so */
X	if (timeout)
X		(void) alarm(timeout);		/* set timeout in seconds */
X
X	/* do the read from stdin */
X	result = read(0, inbuff, IOSIZE);
X
X	/* if alarm was set cancel it now */
X	if (timeout)
X		(void) alarm(0);			/* cancel alarm */
X
X	/* check for timeout or error */
X	/* EWOULDBLOCK for no data avail -(but we should not see this) */
X	/* EINTR if signal stopped the read -(rare but could happen) */
X	if (result <= 0)
X		return ( 0 );				/* return nothing read */
X
X	/* return with fresh buffer data */
X	insize = result;
X	DO DEBUG("read %d bytes\n", insize);
X	return ( 1 );					/* return OK code */
X
X} /* GetData() */
X
X
X			/* AwaitInput() - wait for more input from MacLayers */
X
Xstatic void
XAwaitInput()
X{
X	int		r;						/*  read descriptor bits */
X
X	DO DEBUG("AwaitInput()\n");
X
X	do
X	  {	r = 1<<0;					/* wait for read from input device */
X		if (select(32, &r, NULL, NULL, NULL) == -1)	/* if problem waiting ... */
X		  {	if (errno != EINTR)			/* if not simply signal taken ... */
X			  {	/* SHOULD NOT OCCUR - shutdown layers */
X				DO DEBUG("AwaitInput: select error %d\n", errno);
X				printf("layers: AwaitInput: bad select %d\n", errno);
X				FQuit();					/* shutdown layers */
X				/* NOT REACHED */
X			  }
X		  }
X	  } while ((r & 1<<0) == 0);
X		
X} /* AwaitInput() */
X
X				/* asciishape() - convert Shape structure to ASCII */
Xstatic void
Xasciishape(shape, loc)
Xstruct Shape	*shape;						/* Shape structure for channel */
Xchar			*loc;						/* location to start filling result */
X{
X	char		*origloc;					/* (for debuggin) */
X
X	origloc = loc;							/* remember start of string */
X	fill4(&loc, shape->worigh);				/* origin h */
X	fill4(&loc, shape->worigv);				/* origin v */
X	fill2(&loc, shape->wlines);				/* lines high */
X	fill2(&loc, shape->wchars);				/* chars wide */
X	fill1(&loc, shape->wfont);				/* font size */
X	fill2(&loc, shape->wattr);				/* attributes */
X
X	DO DEBUG("asciishape(): %.*s\n", ATTRSIZE, origloc);
X
X} /* asciishape() */
X
X
X					/* fill4() - convert parameter to ASCII */
X
Xstatic void
Xfill4(loc, valu)
Xchar		**loc;							/* pointer to fill area pointer */
Xunsigned	valu;							/* value to use */
X{
X	fill2(loc, valu>>8);					/* fill high half word */
X	fill2(loc, valu & 0xff);				/* fill low half word */
X
X} /* fill4() */
X
X
X					/* fill2() - convert parameter to ASCII */
X
Xstatic void
Xfill2(loc, valu)
Xchar		**loc;							/* pointer to fill area pointer */
Xunsigned	valu;							/* value to use */
X{
X	fill1(loc, valu>>4);					/* fill high byte */
X	fill1(loc, valu & 0xf);					/* fill low byte */
X	
X} /* fill2() */
X
X
X					/* fill1() - convert parameter to ASCII */
X
Xstatic void
Xfill1(loc, valu)
Xchar		**loc;							/* pointer to fill area pointer */
Xunsigned	valu;							/* value to use */
X{
X	*(*loc)++ = "0123456789ABCDEF"[valu & 0xf]; /* return hex value */
X
X} /* fill1() */
X
X
X			/* parseshape() - convert ASCII image to Shape structure */
X				
Xstatic int	Badconvert;						/* indicates bad conversion */
X
Xstatic int
Xparseshape(shape, loc)
Xstruct Shape	*shape;						/* Shape structure for channel */
Xchar			*loc;						/* location to start parsing */
X{
X	Badconvert = 0;							/* clear bad characters indicator */
X	shape->worigh = get4(&loc);				/* origin h */
X	shape->worigv = get4(&loc);				/* origin v */
X	shape->wlines = get2(&loc);				/* lines high */
X	shape->wchars = get2(&loc);				/* chars wide */
X	shape->wfont = get1(&loc);				/* font size */
X	shape->wattr = get2(&loc);				/* attributes */
X
X    DO DEBUG("ParseShape(): origv %d, origh %d, lines %d, chars %d\n",
X                shape->worigv, shape->worigh, shape->wlines, shape->wchars);
X    DO DEBUG("   font %d, attr 0x%x, badconv %d\n",
X					shape->wfont, shape->wattr, Badconvert);
X
X	return ( Badconvert ? -1 : 0 );			/* return conversion code */
X
X} /* parseshape() */
X
X
X					/* get4() - convert ASCII to parameter */
X
Xstatic unsigned
Xget4(loc)
Xchar		**loc;							/* pointer to fill area pointer */
X{
X	unsigned	hi;							/* high portion */
X	unsigned	low;						/* low portion */
X
X	hi = get2(loc);							/* get high byte */
X	low = get2(loc);						/* get low byte */
X
X	return ( (hi<<8) + low );				/* return word value */
X
X} /* get4() */
X
X
X					/* get2() - convert ASCII to parameter */
X
Xstatic unsigned
Xget2(loc)
Xchar		**loc;							/* pointer to fill area pointer */
X{
X	unsigned	hi;							/* high portion */
X	unsigned	low;						/* low portion */
X
X	hi = get1(loc);							/* get high half */
X	low = get1(loc);						/* get low half */
X
X	return ( (hi<<4) + low );				/* return byte value */
X	
X} /* get2() */
X
X
X					/* get1() - convert ASCII to parameter */
X
X/*	This function sets 'Badconvert' if an invalid character is detected */
X
Xstatic unsigned
Xget1(loc)
Xchar		**loc;							/* pointer to fill area pointer */
X{
X	int			c;							/* character to convert */
X	
X	c = *(*loc)++;							/* fetch character */
X	
X	if (c >= '0' && c <= '9')
X		/* zero through nine */
X		return ( c - '0' );					/* return it's binary value */
X	
X	if (c >= 'a' && c <= 'f')
X		/* lower case hex */
X		return ( c - 'a' + 10);				/* return it's binary value */
X		
X	if (c >= 'A' && c <= 'F')
X		/* upper case hex */
X		return ( c - 'A' + 10);				/* return it's binary value */
X		
X	/* invalid digit! */
X	Badconvert++;							/* set bad character flag */
X	return ( 0 );							/* return a zero */
X
X} /* get1() */
SHAR_EOF
if test 25546 -ne "`wc -c < 'protocol.c'`"
then
	echo shar: error transmitting "'protocol.c'" '(should have been 25546 characters)'
fi
fi # end of overwriting check
#	End of shell archive
exit 0
--- end of part 2 ---

werner@rascal.ics.utexas.edu (Werner Uhrig) (06/02/90)

[MacLayers 1.00 - part 3 of 6]

---
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#
#	layers.c
#
# This archive created: Thu May 31 21:58:18 1990
# By:	Roger L. Long (macintosh@dhw68k.cts.com)
export PATH; PATH=/bin:$PATH
echo shar: extracting "'layers.c'" '(56819 characters)'
if test -f 'layers.c'
then
	echo shar: will not over-write existing file "'layers.c'"
else
sed 's/^X//' << \SHAR_EOF > 'layers.c'
X/********					Layers.c
X*********
X*********	Layers - MacLayers Multiwindow BSD Socket Driver
X*********
X*********          Dave Trissel oakhill!davet
X*********
X********* The sockets handling portion of this control module is based 
X********* upon 'screen' by Oliver Laumann whose copyright remains below. 
X********* The rest is
X *
X *             Copyright (C) 1989 by David W. Trissel
X *
X *              Not derived from licensed software.
X *
X * Permission is granted to freely use, copy, modify, and redistribute
X * this software, provided that no attempt is made to gain profit from it,
X * the author is not construed to be liable for any results of using the
X * software, alterations are clearly marked as such, and this notice is
X * not modified.
X *
X */
X
Xstatic char LayersVersion[] = "layers 1.00 17-Mar-1990";
X
X/* Layers Changes:
X
X	Version .92 22-Mar-1989
X
X		Original Distributed version
X
X	Version .93 31-Mar-1989
X
X		Deleted dl and al termcap entries since they didn't help any
X		(al was redundant with sc (scroll) so should never have been created)
X
X		SIGINT no longer causes us to quit (left debugging code in by mistake)
X
X		Layer #1 is always logged in and takes over as user's login console
X		(Real tty disconnected from /etc/utmp file while layers is running)
X
X	Version .93b 05-May-1989
X
X		Try getenv("PWD") before getwd() so Sun networking won't hang us up
X
X    Version .93n 07-Jan-1990
X
X        Reset TTY back to normal if initial link handshake fails.
X
X    Version 1.00b 22-Jan-1990
X
X        Corrected problem of layers forcing all umasks to 000.
X
X    Version 1.00  17-Mar-1990
X
X        First public release.
X*/
X
X
X/* Copyright (c) 1987,1988 Oliver Laumann, Technical University of Berlin.
X * Not derived from licensed software.
X *
X * Permission is granted to freely use, copy, modify, and redistribute
X * this software, provided that no attempt is made to gain profit from it,
X * the author is not construed to be liable for any results of using the
X * software, alterations are clearly marked as such, and this notice is
X * not modified.
X *
X *	Modified by Patrick Wolfe (pat@kai.com, kailand!pat)
X *	Do whatever you want with (my modifications of) this program, but
X *	don't claim you wrote them, don't try to make money from them, and
X *	don't remove this notice.
X */
X
X/*
X *	Beginning of User Configuration Section
X */
X
X/*
X * SEQUENT   -- your host system is Sequent. This changes a setvbuf()
X *              call to a setlinebuf(). [Suggested by Peter Newton 
X *              <newton@cs.utexas.edu>]
X *
X */
X#undef SEQUENT
X
X
X/*
X * GETTTYENT -- your system has the new format /etc/ttys (like 4.3 BSD)
X *              and the getttyent(3) library functions.
X *
X */
X#undef GETTTYENT
X
X
X/*
X * LOGINDEFAULT -- if set to 1 (one), windows will login (add entries to
X *                 /etc/utmp) by default.  Set to 0 if you don't want this.
X *                 (Also see USERLIMIT below). [NOTE: current code always
X *                 logs layer #1 only unless -l option used on 'layers'
X *                 command.]
X */
X#define LOGINDEFAULT 0
X
X/*
X * USERLIMIT  --   count all non-null entries in /etc/utmp before adding a 
X *				   new entry. Some machine manufacturers (incorrectly) count 
X *				   logins by counting non-null entries in /etc/utmp (instead 
X *				   of counting non-null entries with no hostname and not on 
X *				   a pseudo tty). Sequent does this, so you might reach your 
X *				   limited user license early.
X */
X#define USRLIMIT 32
X
X/*
X * SOCKDIR      -- If defined, this directory is where layers sockets will be 
X *				   placed, (actually in a subdirectory by the user's loginid).
X *				   This is neccessary because NFS doesn't support socket 
X *				   operations, and many people's homes are on NFS mounted 
X *				   partitions.  Layers will create this directory if it needs 
X *				   to.
X */
X#define SOCKDIR "/tmp/layers"	/* NFS doesn't support named sockets */
X
X/*
X *	End of User Configuration Section
X */
X
X#include <stdio.h>
X#include <sgtty.h>
X#include <signal.h>
X#include <errno.h>
X#include <ctype.h>
X#include <utmp.h>
X#include <pwd.h>
X#include <nlist.h>
X#include <fcntl.h>
X#include <sys/types.h>
X#include <sys/time.h>
X#include <sys/file.h>
X#include <sys/wait.h>
X#include <sys/socket.h>
X#include <sys/un.h>
X#include <sys/stat.h>
X#include <sys/dir.h>
X#include <sys/ioctl.h>
X
X#include "layers.h"
X
X#ifdef GETTTYENT
X#include <ttyent.h>
X#else
Xstatic struct ttyent
X  { char *ty_name;
X  } *getttyent();
Xstatic char *tt, *ttnext;
Xstatic char ttys[] = "/etc/ttys";
X#endif
X
X#ifndef FSCALE
X#define FSCALE 1000.0		/* Sequent doesn't define FSCALE...grrrr */
X#endif
X
X#ifdef  USRLIMIT
Xstruct utmp utmpbuf;
Xint UserCount;
X#endif
X
X#define Ctrl(c) ((c)&037)
X
X/* C library items */
Xextern char **environ;
Xextern errno;
Xextern sys_nerr;
Xextern char *sys_errlist[];
Xextern char *index(), *rindex(), *malloc(), *getenv();
Xextern char *getlogin(), *ttyname();
X
X/* Local items */
Xstatic void FAbort(), SigHup(), SigChld(), AddCap(), FinitTerm();
Xstatic char  *MakeTermcap(), *Filename(), **SaveArgs(), *GetTtyName();
Xstatic void	InitWorld(), ClearShape(), BuildTitle(), KillPG();
Xstatic void SetWindowSize(), WriteUtmp();
Xstatic int	ReadUtmp(), FindUtmp(), SetUtmp();
X
Xstatic int	loginflag = -1;
Xstatic char PtyName[32], TtyName[32];
Xstatic char *ShellProg;
Xstatic char *ShellArgs[2];
Xstatic inlen;
Xstatic ESCseen;
Xstatic GotSignal;
Xstatic char DefaultShell[] = "/bin/sh";
Xstatic char DefaultPath[] = ":/usr/ucb:/bin:/usr/bin";
Xstatic char PtyProto[] = "/dev/ptyXY";
Xstatic char TtyProto[] = "/dev/ttyXY";
Xstatic int TtyMode = 0622;
Xstatic struct stat RealTtyStat;					/* Real tty stat */
Xstatic char RealTtyName[32] = "";				/* Real tty name */
Xstatic int	RealSlot = 0;						/* Real tty logon slot */
Xstatic struct utmp	RealUtmp;					/* Real tty logon utmp entry */
Xstatic int	RealTtyMode = 0;					/* Real tty mode */
Xstatic int	Oumask;								/* Original user's umask */
Xstatic char SockPath[512];
X#ifdef SOCKDIR
Xstatic char SockDir[] = SOCKDIR;
X#else
Xstatic char SockDir[] = ".layers";
X#endif
Xstatic char *SockNamePtr, *SockName;
Xstatic ServerSocket;
Xstatic char *NewEnv[MAXARGS];
Xstatic char Esc = Ctrl('a');
Xstatic char MetaEsc = 'a';
Xstatic char *home;
Xstatic Abortonmsg;
Xstatic utmp, utmpf;
Xstatic char UtmpName[] = "/etc/utmp";
Xstatic char *LoginName;
Xstatic mflag, nflag, fflag, rflag;
Xstatic char HostName[MAXSTR];
Xstatic char *myname;
Xstatic DevTty;
X
Xstatic struct mode {
X    struct sgttyb m_ttyb;
X    struct tchars m_tchars;
X    struct ltchars m_ltchars;
X    int m_ldisc;
X    int m_lmode;
X} OldMode, NewMode;
X
X#define MSG_CREATE    0
X#define MSG_ERROR     1
X
Xstruct msg
X  {
X    int type;
X    union
X	  { struct
X		  {	int	lflag;				/* login flag */
X			struct Shape shape;		/* window shape */
X	    	int nargs;
X	    	char line[MAXLINE];
X	    	char dir[1024];
X		  } create;
X		char message[MAXLINE];
X      } m;
X  };
X
X
X			/* dynamic keyboard input buffer definition */
Xstruct Kbuff
X  {	struct Kbuff * next;			/* next buffer in chain (or NULL) */
X	int			size;				/* size of data in this buffer */
X	int			offset;				/* start of first data in buffer */
X	unsigned char text[IOSIZE];		/* text buffer itself */
X  };
X
X			/* World layer definition */
Xstruct Layer {
X	int		chan;					/* channel represented by this layer */
X    int		allocated;				/* layer allocated */
X    int		ptyfd;					/* psuedo tty */
X	int		ptymask;				/* mask for pty descriptor */
X	int		lpid;					/* layer head process ID */
X	int		slot;					/* utmp slot number */
X	struct Kbuff *kbuff;			/* keyboard input buffers */
X	struct Shape shape;				/* Shape structure to/from MacLayers */
X    char	cmd[MAXSTR];			/* command to execute */
X    char	tty[MAXSTR];			/* psuedo tty ID */
X	};
X
Xstatic struct Layer World[MAXPCHAN]; /* all layer structures */
X
Xstatic int rows = 24;				/* default window height in lines */
Xstatic int cols = 80;				/* default window width in chars */
Xstatic char Termcap[1024];
Xstatic char Term[MAXSTR] = "TERM=";	/* window's terminal type */
Xstatic char	*UserTerm;				/* terminal ID we are mimmicing */
Xstatic int flowctl;
Xstatic tcLineLen = 100;
X
X/* co#80 and li$24 added dynamically for proper window size */
Xstatic char TermcapConst1[] = "TERMCAP=SC|";
Xstatic char TermcapConst3[] = "|MacLayers virtual terminal|\\\n\
X	:cr=^M:do=^J:nl=^J:bl=^G:cl=\\E[;H\\E[2J:\\\n\
X	:le=^H:bs:am:cm=\\E[%i%d;%dH:nd=\\E[C:up=\\E[A:\\\n\
X	:ce=\\E[K:cd=\\E[J:so=\\E[7m:se=\\E[m:us=\\E[4m:ue=\\E[m:\\\n\
X	:md=\\E[1m:mr=\\E[7m:mb=\\E[5m:me=\\E[m:is=\\E[1;24r\\E[24;1H:\\\n\
X	:rf=/usr/lib/tabset/vt100:\\\n\
X	:rs=\\E>\\E[?3l\\E[?4l\\E[?5l\\E[?7h\\E[?8h:ks=\\E[?1h\\E=:ke=\\E[?1l\\E>:\\\n\
X	:ku=\\EOA:kd=\\EOB:kr=\\EOC:kl=\\EOD:kb=^H:\\\n\
X	:ho=\\E[H:k1=\\EOP:k2=\\EOQ:k3=\\EOR:k4=\\EOS:ta=^I:pt:sr=\\EM:vt#3:xn:\\\n\
X	:sc=\\E7:rc=\\E8:cs=\\E[%i%d;%dr:\\\n\
X	:dc=\\ED:ic=\\EI:";
X/* NOTE: the above two cababilities are beyond vt100 - unique to MacLayers */
X
Xint		Dflag;							/* debug dump flag */
X
X							/* main() */
Xmain(ac, av)
Xchar **av;
X{
X    register n;
X    register len;
X    register struct Layer *layer;
X    char	*ap;
X    struct passwd *ppp;
X    int		s;
X	int		r;							/* read fd test bits */
X	int		w;							/* write fd test bits */
X	int		stall;						/* stall flag for priority channel */
X	int		fderr;						/* error fd test bits */
X    struct timeval tv;
X	struct Shape shape;					/* window shape */
X    time_t	now;
X    char	buf[IOSIZE];
X    char	rc[256];
X    struct stat st;
X	struct Kbuff *kbptr;				/* input keyboard buffer pointer */
X
X	Abortonmsg = 1;						/* quit if message generated */
X	ClearShape(&shape);					/* initialize shape structure */
X	myname = (ac == 0) ? "layers" : av[0];
X	InitWorld();						/* clear World array structures */
X
X    while (ac > 0)
X	  {	ap = *++av;
X		if (--ac > 0 && *ap == '-')
X		  {	switch (ap[1])
X			{ case 'l':		/* login this command line */
X				loginflag = 1;
X				break;
X
X			  case 'd':		/* dump debugging flag */
X				Dflag = 1;
X				(void) freopen("layers.dump", "a", stderr); /* append mode */
X#ifdef SEQUENT
X				setlinebuf(stderr);
X#else
X				setvbuf(stderr, NULL, _IOLBF, 0);
X#endif
X				break;
X
X	    	  case 'u':		/* do not login this command line */
X				loginflag = 0;
X				break;
X
X		      case 'm':		/* force this to be master and not a client */
X				mflag = 1;
X				break;
X
X	    	  case 'n':		/* no flow control */
X				nflag = 1;
X				break;
X
X	    	  case 'f':		/* flow control on */
X				fflag = 1;
X				break;
X
X			  case 'v':		/* do nothing but issue layers version */
X				printf("%s\n", LayersVersion);
X				exit(0);
X
X	    	  default:
X	    	help:
X				Msg (0,"Use: %s [-f] [-l | -u] [-m] [-n] [cmd args]\n", myname);
X
X	    	} /* end switch on '-' option */
X
X	    } /* end if '-' */
X
X		else
X			break;
X
X      } /* end while parameters */
X
X    if (nflag && fflag)
X		Msg (0, "-f and -n are conflicting options.");
X
X    if ((ShellProg = getenv ("SHELL")) == 0)
X		ShellProg = DefaultShell;
X	DO DEBUG("ShellProg %s\n", ShellProg);
X
X	/* we mimmic the user's $TERM ID */
X	if ((UserTerm = getenv("TERM")) == 0)
X		UserTerm = "layers";				/* use "layers" if none */
X	(void) strcat(Term, UserTerm);
X	DO DEBUG("%s\n", Term);
X
X    ShellArgs[0] = ShellProg;
X    if (ac == 0)
X	  { ac = 1;
X		av = ShellArgs;
X		shape.wattr |= Wa_shell;			/* indicate a shell window */
X      }
X
X    if ((home = getenv ("HOME")) == 0)
X		Msg (0, "$HOME is undefined.");
X	DO DEBUG("home %s\n", home);
X
X    if ((LoginName = getlogin ()) == 0 || LoginName[0] == '\0')
X	  { if ((ppp = getpwuid (getuid ())) == 0)
X	   		return;
X		LoginName = ppp->pw_name;
X      }
X	DO DEBUG("LoginName %s\n", LoginName);
X
X    if ((Oumask=umask(0)) == -1)
X		Msg (errno, "Cannot change umask to zero");
X	DO DEBUG("Original umask o%o\n", Oumask);
X
X#ifdef SOCKDIR
X    if (stat (SOCKDIR, &st) == -1)
X	  {	if (errno == ENOENT)
X		  { if (mkdir (SOCKDIR, 0777) == -1)
X				Msg (errno, "Cannot make directory %s", SOCKDIR);
X	    	(void) chown (SOCKDIR, 0, 0);
X		  }
X		else
X			Msg (errno, "Cannot get status of %s", SOCKDIR);
X      }
X	else
X	  { if ((st.st_mode & S_IFMT) != S_IFDIR)
X	    	Msg (0, "%s is not a directory.", SOCKDIR);
X		if ((st.st_mode & 0777) != 0777)
X	    	Msg (0, "Directory %s must have mode 777.", SOCKDIR);
X      }
X    sprintf (SockPath, "%s/%s", SockDir, LoginName);
X#else
X    sprintf (SockPath, "%s/%s", home, SockDir);
X#endif
X	DO DEBUG("SockPath %s\n", SockPath);
X
X    if (stat (SockPath, &st) == -1)
X	  { if (errno == ENOENT)
X		  { if (mkdir (SockPath, 0700) == -1)
X				Msg (errno, "Cannot make directory %s", SockPath);
X	    	(void) chown (SockPath, getuid (), getgid ());
X			DO DEBUG("SockPath directory made\n");
X		  }
X		else
X			Msg (errno, "Cannot get status of %s", SockPath);
X      }
X	else
X	  { if ((st.st_mode & S_IFMT) != S_IFDIR)
X	   		Msg (0, "%s is not a directory.", SockPath);
X		if ((st.st_mode & 0777) != 0700)
X	    	Msg (0, "Directory %s must have mode 700.", SockPath);
X		if (st.st_uid != getuid ())
X	    	Msg (0, "You are not the owner of %s.", SockPath);
X      }
X
X	(void) strcpy(RealTtyName, GetTtyName());		/* real tty name */
X	if (stat(RealTtyName, &RealTtyStat) == -1)		/* get current mode */
X		Msg(errno, "Cannot get status of %s", RealTtyName);
X	DO DEBUG("Mode of %s is %#o\n", RealTtyName, RealTtyStat.st_mode);
X	RealTtyMode = RealTtyStat.st_mode;		/* save mode for later restore */
X
X    (void) gethostname (HostName, MAXSTR);
X    HostName[MAXSTR-1] = '\0';
X	DO DEBUG("HostName %s\n", HostName);
X
X    if (ap = index (HostName, '.'))
X		*ap = '\0';
X	if (ap)
X		DO DEBUG("*ap %s\n", *ap);
X
X    strcat (SockPath, "/");
X    SockNamePtr = SockPath + strlen (SockPath);
X
X	/* if we are a client send create message to startup window and exit */
X    if (GetSockName ())
X	  {	DO DEBUG("GetSockName says that we are client\n");
X		DO DEBUG("SockName '%s'\n", SockName);
X		s = MakeClientSocket (1);
X		DO DEBUG("Client socket is %d\n", s);
X		DO DEBUG("SendCreateMsg()\n");
X		SendCreateMsg (s, ac, av, loginflag, &shape);
X		close (s);
X		DO DEBUG("after SendCreateMsg(), now exit(0)\n");
X		exit (0);
X      }
X
X	/* we are the server */
X	DO DEBUG("SockName '%s'\n", SockName);
X	DO DEBUG("We are server\n");
X    if ((DevTty = open ("/dev/tty", O_RDWR|O_NDELAY)) == -1)
X		Msg (errno, "/dev/tty");
X	DO DEBUG("opened /dev/tty fd %d\n", DevTty);
X
X    ServerSocket = MakeServerSocket ();
X	DO DEBUG("ServerSocket %d\n", ServerSocket);
X    s = ServerSocket;
X
X    if (fflag)
X		flowctl = 1;
X    else
X	if (nflag)
X		flowctl = 0;
X
X    if (loginflag == -1)
X        loginflag = LOGINDEFAULT;
X
X    MakeNewEnv ();
X    InitUtmp ();
X	RealSlot = FindUtmp(RealTtyName);	/* find current logon slot */
X	if (RealSlot)
X	  {	if (ReadUtmp(RealSlot, &RealUtmp) > 0)	/* read real login utmp */
X			RemoveUtmp(RealSlot);		/* remove original logon slot */
X		else
X			RealSlot = 0;				/* something's wrong */
X	  }
X
X    signal (SIGHUP, SigHup);
X    signal (SIGINT, SIG_IGN);			/* we should never see this */
X    signal (SIGQUIT, FAbort);			/* quit layers on these 2 signals */
X    signal (SIGTERM, FAbort);
X    signal (SIGTTIN, SIG_IGN);
X    signal (SIGTTOU, SIG_IGN);
X	signal (SIGALRM, SIG_IGN);			/* alarm clock used by protocol.c */
X
X    GetTTY (0, &OldMode);
X    SetMode (&OldMode, &NewMode);
X    SetTTY (0, &NewMode);
X
X	if (Initlink() == 0)
X	  {	SetTTY(0, &OldMode);			/* revert tty back */
X	    Msg (0, "\n\n  You are not running under MacLayers.");
X	  }
X		
X    sprintf (rc, "%.*s/.layersrc", 245, home);
X#if 0 /* NOT YET SUPPORTED */
X	/* if no window list start up a default shell window */
X    if (ReadRc(rc) == 0)			
X#endif
X      {	n = MakeWindow (0, *av, av, (char *)0, loginflag, &shape);
X    	if (n == -1)
X	  	  { SetTTY (0, &OldMode);
X			FQuit(1);
X			/* NOT REACHED */
X      	  }
X	  }
X
X	(void) chmod(RealTtyName, 0600);		/* lock out broadcasts */
X    Abortonmsg = 0;							/* don't abort on msg from now on */
X    signal (SIGCHLD, SigChld);
X    tv.tv_usec = 0;
X	tv.tv_sec = 0;							/* default no timer wanted */
X
X	/* client/Maclayers processing loop */
X
X	/* poll .20 secs for new startups */
X#define WUSSTARTUP	200000				
X	/* stall nonpriority windows .5 seconds when top window I/O active */
X#define WUSSTALL	500000
X
X	stall = 0;								/* startout no stalled channels */
X	fderr = 0;								/* startout no error fd's */
X
X    while (1)
X	  {	int			priochan;				/* the top window channel */
X
X		priochan = TopChannel();			/* find highest priority channel */
X
X		/* check for I/O on all available I/O descriptors */
X		r = 1<<0;							/* always read MacLayers stream */
X		r |= 1<<s;							/* always read server socket */
X		w = 0;								/* initalize to no write tests */
X		tv.tv_usec = 0;						/* default no startup poll */
X
X		/* for all active layers set read and write bits as appropriate */
X		if (stall)
X			stall = 1;						/* start counting output layers */
X		for (n=0; n<MAXPCHAN; n++)
X		 if ((layer = &World[n])->allocated) /* if layer exists ... */
X		  {	/* if not yet started or has just terminated ... */
X			if (layer->ptymask & fderr)
X				tv.tv_usec = WUSSTARTUP;	/* don't spinloop but wait-a-bit */
X			else
X		  	  {	if (layer->kbuff && layer->kbuff->size)
X					/* keyboard input for layer */
X					w |= layer->ptymask;	/* try write to it */
X				/* read layer output unless we're being nice to top window */
X				if (!stall)
X					r |= layer->ptymask;	/* read output from layer */
X				else
X				if (layer->chan == priochan)
X					r |= layer->ptymask;	/* read top priority output */
X				else
X					stall++;				/* indicate something to stall */
X			   }
X		    }
X
X		if (stall > 1)
X			if (!tv.tv_usec)
X				tv.tv_usec = WUSSTALL;		/* set stall timout */
X
X		/* process signals before trying select */
X		if (GotSignal)
X		  { SigHandler ();
X	    	continue;
X		  }
X
X		DO DEBUG("Select(r %x, w %x, fderr %x, stall %d, prio %d, us %d)\n",
X					r, w, fderr, stall, priochan, tv.tv_usec);
X
X		switch ( select(32, &r, &w, NULL, tv.tv_usec ? &tv : NULL) )
X		{ case -1:
X			/* errno has report */
X			if (errno == EINTR)				/* signal delivered or timout */
X			  { errno = 0;
X				tv.tv_usec = 0;				/* clear timer wait value */
X				fderr = 0;					/* turn off error stall */
X				stall = 0;					/* turn off output priority stall */
X				DO DEBUG("select errno EINTR\n");
X				continue;					/* re-loop */
X	    	  }
X	    	Abortonmsg = 1;
X			DO DEBUG("select errno %d\n", errno);
X	    	Msg (errno, "select");
X	    	/*NOTREACHED*/
X
X		  case 0:
X			/* timeout reached */
X			tv.tv_usec = 0;					/* clear timer wait value */
X			stall = 0;						/* turn off stall */
X			fderr = 0;						/* turn off error stall */
X			continue;						/* re-loop */
X
X		  default:
X			/* a channel has read/write status pending */
X			break;
X		}
X
X		DO DEBUG("after select r %x w %x\n", r, w);
X
X		/* handle any signal arriving up during select wait */
X		if (GotSignal)
X		  { SigHandler ();
X	    	continue;
X		  }
X
X		/* if server socket has command process that now */
X		if (r & 1 << s)
X	      {	ReceiveMsg(s);					/* process client control packet */
X			continue;						/* status may have changed */
X		  }
X
X		/* next process input stream from MacLayers */
X		if (r & 1 << 0)
X		  { ProcessStreamin();				/* key input and control packets */
X			continue;						/* status may have changed */
X		  }
X
X		/* process keyboard input first so output doesn't hold up
X		** keyboard echo and break/interrupt processing
X		*/
X		priochan = TopChannel();			/* find top priority channel */
X		stall = 0;							/* assume no stall needed */
X		for (n=0; n<MAXPCHAN; n++)
X		  if ((layer = &World[n])->allocated)
X			if (w & layer->ptymask)
X				while ((kbptr=layer->kbuff)->size)
X				  {	/* pass as much keyboard as possible */
X					if (layer->chan == priochan)
X						stall = 1;			/* stall lower priority channels */
X					len = write(layer->ptyfd, &kbptr->text[kbptr->offset],
X						 		kbptr->size);
X					DO DEBUG("keyin len %d to chan %d\n", len, layer->chan);
X					if (len <= 0)			/* if no data accepted ... */
X					  {	if (errno == EIO)	/* if I/O error indicated ... */
X							fderr |= layer->ptymask; /* wait-a-bit on this */
X						errno = 0;			/* clear errno */
X						break;				/* try again later */
X					  }
X					/* some of buffer accepted */
X					kbptr->size -= len;		/* length processed */
X					kbptr->offset += len;	/* bump up offset */
X					if (kbptr->size > 0)	/* not all buffer accepted ... */
X						break;				/* try feed again later */
X					/* see if another buffer chained */
X					if (kbptr->next)
X					  {	/* yes, free up current buffer and queue next */
X						layer->kbuff = kbptr->next; /* to next buffer */
X						free(kbptr);	/* free this buffer up */
X					  }
X					else
X					  {	/* otherwise leave this for next input */
X						kbptr->size = 0;	/* empty buffer */
X						kbptr->offset = 0;	/* refill from the start */
X					  }
X				  }
X
X		/* first process the highest priority channel (top window) */
X		if (priochan > 0 && priochan <= MAXPCHAN) /* if valid ... */
X		  if ((layer = &World[priochan-1])->allocated)
X			if (r & layer->ptymask)
X			  {	/* output to send to top MacLayers window */
X				len = read(layer->ptyfd, buf, IOSIZE);
X				if (len >= 0)				/* if no error ... */
X				  {	DO DEBUG("read output len %d chan %d\n", len, layer->chan);
X				  }
X				else
X				  {	/* We expect EIO error if socket not yet open on other end
X					** or if process using socket has terminated. We expect
X					** EWOULDBLOCK also after process terminates.
X					**/
X					DO DEBUG("read output err chan %d errno %d len %d\n",
X								layer->chan, errno, len);
X					if (errno == EIO || errno == EWOULDBLOCK)
X						DO DEBUG(" ...anticipated\n");
X					/* layer not ready or just terminated so wait-a-bit */
X					fderr |= layer->ptymask;
X					r &= ~layer->ptymask; /* don't read it again below */
X					errno = 0;				/* clear errno */
X				  }
X				if (len > 0)
X					SendData(layer->chan, buf, len);
X
X				if (len >= 0)
X					/* To keep lower priority channels from hogging the line
X					** we delay any output from them until the primary window 
X					** has no more data to be sent to it.
X					*/
X					stall = 1;				/* stall output from others */
X			  }
X
X		/* now pass all available output to MacLayers */
X		if (!stall)
X		 for (n=0; n<MAXPCHAN; n++)
X		  if ((layer = &World[n])->allocated)
X			if (r & layer->ptymask)
X			  {	/* output to send to MacLayers window */
X				len = read(layer->ptyfd, buf, IOSIZE);
X				if (len >= 0)				/* if no error ... */
X				  {	DO DEBUG("output chan %d len %d\n", layer->chan, len);
X				  }
X				else
X				  {	/* We expect EIO error if socket not yet open on other end
X					** or if process using socket has terminated. We expect
X					** EWOULDBLOCK also after process terminates.
X					**/
X					DO DEBUG("read output err chan %d errno %d len %d\n",
X								layer->chan, errno, len);
X					if (errno == EIO || errno == EWOULDBLOCK)
X					  {	DO DEBUG(" ...anticipated\n");
X					  }
X					/* layer not ready or just terminated so wait-a-bit */
X					fderr |= layer->ptymask;
X					errno = 0;				/* clear errno */
X				  }
X				if (len > 0)
X					SendData(layer->chan, buf, len);
X			  }
X
X		/* handle signals again */
X		if (GotSignal)
X			SigHandler ();
X
X      } /* end while (1) */
X
X	/* NOT REACHED */
X
X} /* main() */
X
X					/* ReceiveQuit() - MacLayers sends Quit packet */
X
Xvoid
XReceiveQuit()
X{
X	/* We completely quit layers cancelling all active processes */
X	DO DEBUG("ReceiveQuit()\n");
X	FQuit(0);								/* normal termination */
X	/* NOT REACHED */
X
X} /* ReceiveQuit() */
X
X
X				/* ReceiveNew() - MacLayers requests a new shell layer */
X
Xvoid
XReceiveNew(chanid, shape)
Xint		chanid;								/* channel for new shell layer */
Xstruct Shape *shape;						/* shape for new channel */
X{
X	DO DEBUG("ReceiveNew(%d)\n", chanid);
X	(void) MakeWindow (chanid, *ShellArgs, ShellArgs,
X					(char *) 0, loginflag, shape);
X
X} /* ReceiveNew() */
X
X
X				/* ReceiveDelete() - MacLayers has removed a layer */
Xvoid
XReceiveDelete(chanid)
Xint		chanid;								/* channel which was deleted */
X{
X	struct Layer *layer;					/* layer pointer */
X
X	/* validate channel */
X	DO DEBUG("ReceiveDelete(%d)\n", chanid);
X	if (chanid <= 0 || chanid > MAXPCHAN)
X		return;								/* ignore invalid channel */
X
X	/* if this layer active then kill it off, else ignore request */
X	layer = &World[chanid-1];				/* locate target layer */
X	if (layer->allocated)
X		KillWindow(layer);
X
X} /* ReceiveDelete() */
X	
X	
X		/* ReceiveSignal() - send signal to layer's process group */
X
Xvoid
XReceiveSignal(chanid, signal)
Xint			chanid;							/* layer's channel */
Xint			signal;							/* signal.h signal ID */
X{
X	struct Layer *layer;					/* layer pointer */
X
X	DO DEBUG("ReceiveSignal(%d,%d)\n", chanid, signal);
X	/* verify channel */
X	if (chanid <= 0 || chanid > MAXPCHAN)
X		return;								/* ignore invalid channel */
X
X	/* if this layer is active send the signal to the process group */
X	layer = &World[chanid-1];				/* locate target layer */
X	if (layer->allocated && layer->lpid)
X		KillPG(layer, signal);
X
X} /* ReceiveSignal() */
X
X
X				/* ReceiveReshape() - windowsize and location updated */
Xvoid
XReceiveReshape(chanid, shape)
Xint				chanid;					/* channel having shape */
Xstruct Shape	*shape;					/* shape structure */
X{
X	struct Layer *layer;				/* layer pointer */
X
X	DO DEBUG("ReceiveReshape(%d)\n", chanid);
X
X	/* verify channel */
X	if (chanid <= 0 || chanid > MAXPCHAN)
X		return;								/* ignore invalid channel */
X
X	/* if this layer is active then reshape it's window */
X	layer = &World[chanid-1];				/* locate target layer */
X	if (layer->allocated && layer->lpid)
X	  {	layer->shape = *shape;				/* install as our new shape */
X		SetWindowSize(layer);				/* udpate the O/S window info */
X	  }
X
X} /* ReceiveReshape() */
X
X
X			/* SetWindowSize() - tell O/S about new window size */
X
Xstatic void
XSetWindowSize(layer)
Xstruct Layer	*layer;					/* layer to resize */
X{
X#ifdef TIOCSWINSZ
X	struct	winsize	wsize;				/* window size structure */
X	int			retcode;				/* ioctl return code */
X
X	wsize.ws_col = layer->shape.wchars; /* character width */
X	wsize.ws_row = layer->shape.wlines; /* window height */
X	wsize.ws_xpixel = 0;				/* necessary? */
X	wsize.ws_ypixel = 0;
X	/* update O/S window state */
X	retcode = ioctl(layer->ptyfd, TIOCSWINSZ, &wsize);
X	DO DEBUG("SetWindowSize(chan %d) col %d, row %d iotcl() = %d\n",
X			layer->chan, layer->shape.wchars, layer->shape.wlines,
X			retcode);
X
X	retcode = ioctl(layer->ptyfd, TIOCGWINSZ, &wsize);
X	DO DEBUG("TIOCGWINSZ: col %d, row %d iotcl() = %d\n",
X			wsize.ws_col, wsize.ws_row, retcode);
X
X#endif
X}  /* SetWindowSize() */
X
X
X				/* ReceiveData() - received keyboard input for layer */
Xvoid
XReceiveData(chanid, buff, cnt)
Xint		chanid;							/* channel receiving input */
Xchar	*buff;							/* buffer containing data */
Xint		cnt;							/* count of data bytes */
X{
X	struct Layer *layer;				/* layer pointer */
X	struct Kbuff *kb;					/* keybuff pointer */
X
X	DO DEBUG("ReceiveData(%d, '%.*s')\n", chanid, cnt, buff);
X	/* verify channel */
X	if (chanid <= 0 || chanid > MAXPCHAN)
X		return;								/* ignore invalid channel */
X	layer = &World[chanid-1];				/* locate target layer */
X
X	/* add character stream to layer's input buffers for main loop processing */
X	for (kb=layer->kbuff; kb->next; kb=kb->next); /* find oldest buffer */
X	while (cnt--)
X	  {	
X		/* if current buffer full then chain in a new one */
X		if (kb->offset+kb->size >= IOSIZE)
X		  { kb->next = (struct Kbuff *) malloc(sizeof(struct Kbuff));
X			kb = kb->next;					/* base new keybuff */
X			kb->next = NULL;				/* no next yet */
X			kb->size = 0;					/* this character is first */
X			kb->offset = 0;					/* at zero offset */
X		  }
X
X		/* add new character to the end of this buffer */
X		kb->text[kb->offset+kb->size++] = *buff++; /* insert at end of data */
X	  }
X
X} /* ReceiveData() */
X
X
X
X					/* InitWorld() - initialize layer structures */
X
Xstatic void
XInitWorld()
X{
X	struct Layer *layer;				/* layer pointer */
X	struct Kbuff *kb;					/* keybuff pointer */
X	int		i;							/* work variable */
X
X	for (i=0; i<MAXPCHAN; i++)
X	  {	layer = &World[i];				/* point to layer */
X		layer->chan = i+1;				/* channel ID */
X		layer->allocated = 0;			/* does not exist yet */
X		layer->lpid = 0;				/* head process */
X		layer->ptyfd = 0;				/* no pseduo pty yet */
X		layer->ptymask = 0;				/* no pty mask yet */
X		layer->slot = 0;				/* no Utmp slot */
X		ClearShape(&layer->shape);		/* clear shape structure */
X
X		/* allocate the primary input keybuffer for this layer */
X		layer->kbuff = (struct Kbuff *) malloc(sizeof(struct Kbuff));
X		layer->kbuff->next = NULL;		/* no next buffer */
X		layer->kbuff->size = 0;			/* no data in buffer */
X		layer->kbuff->offset = 0;		/* start filling at front */
X
X	  } /* end for layer scan */
X
X} /* InitWorld() */
X
X
X					/* clearshape() - initialize shape structure */
X
Xstatic void
XClearShape(shape)
Xstruct Shape	*shape;					/* shape structure pointer */
X{
X	shape->worigv = 0;					/* default window position */
X	shape->worigh = 0;
X	shape->wlines = 0;					/* default size */
X	shape->wchars = 0;
X	shape->wfont = 0;					/* default font size */
X	shape->wattr = 0;					/* no attributes */
X
X} /* clearshape() */
X
X
X					/* SigHandler() - process signals */
X
XSigHandler ()
X{
X	DO DEBUG("GotSignal()\n");
X    while (GotSignal)
X	  { GotSignal = 0;
X		DoWait ();		/* handle dead or stopped children processes */
X      }
X}
X
Xstatic void
XSigChld ()
X{
X	DO DEBUG("SigChld()\n");
X	/* flag child process is stopped or dead */
X    GotSignal = 1;
X}
X
Xstatic void
XSigHup ()
X{
X	DO DEBUG("SigHup()\n");
X    /* Detach (0); */
X	FQuit(1);			/* stop all processes */
X	/* NOT REACHED */
X
X}
X
X	/* DoWait() -  send SIGCONT to stopped windows, Free dead process windows */
Xstatic
XDoWait()
X{
X    register pid;
X    register struct Layer *layer;
X    union wait wstat;
X	int		i;
X
X	DO DEBUG("DoWait()\n");
X    while ((pid = wait3 (&wstat, WNOHANG|WUNTRACED, NULL)) > 0)
X		/* dead or stopped child process found */
X		for (i=0; i<MAXPCHAN; i++)
X			if ((layer = &World[i])->lpid == pid)
X			  { if (WIFSTOPPED (wstat))
X				  {	/* stopped process so restart it */
X					/*** DO WE REALLY NEED TO DO THIS? ***/
X					DO DEBUG("killpg(, SIGCONT)\n");
X					KillPG(layer, SIGCONT);
X				  }
X				else
X				  {	/* remove dead process's layer */
X					DO DEBUG("kill dead process window %d\n", layer->chan);
X			 		KillWindow (layer);
X					/* tell MacLayers layer is dead */
X					SendDelete(layer->chan);
X				  }
X	 	     }
X
X} /* DoWait() */
X
X
X				/* KillPG() - send signal to layer's process group */
X
Xstatic void
XKillPG(layer, signal)
Xstruct Layer	*layer;					/* layer to signal */
Xint				signal;					/* signal to send */
X{
X	int			retcode;				/* work variable */
X	int			pgrp;					/* process group for layer */
X	int			tgrp;					/* terminal control process group */
X
X	DO DEBUG("KillPG(%d, sig %d)\n", layer->chan, signal);
X
X	if (layer->lpid)
X	  {	pgrp = getpgrp(layer->lpid);	/* get process group */
X		DO DEBUG("getpgrp() = %d\n", pgrp);
X		if (pgrp != -1)
X		  {	retcode = killpg(pgrp, signal);	/* signal it */
X			DO DEBUG("killpg() = %d\n", retcode);
X		  }
X
X		/* After a lot of experimenting it was determined that csh
X		** creates a new terminal control group when it runs a command.
X		** Thus the above code failed to forward SIGINT to such commands.
X		** (Csh would get it but just ignore it.) Thus the following code.
X		*/ 
X
X		/* forward SIGINT to the terminal control group also */
X		if (signal == SIGINT)
X		  {	retcode = ioctl(layer->ptyfd, TIOCGPGRP, &tgrp);
X			DO DEBUG("ioctl(ptyfd,TIOCGPGRP) termcntlgrp %d, retcode = %d\n",
X							tgrp, retcode);
X			/* but only if not the same process group */
X			if (retcode != -1 && tgrp != pgrp)
X			  {	retcode = killpg(tgrp, signal);	/* signal it */
X				DO DEBUG("killpg(%d) = %d\n", tgrp, retcode);
X		  	  }
X		  }
X	  }
X
X} /* KillPG() */
X
X
X				/* KillWindow() - remove a layer from the system */
X
X/* Note: This function does NOT tell MacLayers about the dead layer */
X
Xstatic
XKillWindow (layer)
Xstruct Layer *layer;
X{
X	struct Kbuff	*kb;				/* work buffer free pointer */
X
X	if (layer->allocated)
X	  { 								/* SHOULD THIS BE SIGKILL ??? */
X		if (layer->lpid)				/* if layer process started ... */
X		  {	KillPG(layer, SIGHUP);		/* kill processes */
X			layer->lpid = 0;			/* clear pid field */
X		  }
X    	RemoveUtmp(layer->slot);
X    	(void) chmod(layer->tty, 0666);
X    	(void) chown(layer->tty, 0, 0);
X    	close(layer->ptyfd);
X		DO DEBUG("chmod/chown %s, SendDelete(%d)\n",layer->tty, layer->chan);
X
X		ClearShape(&layer->shape);		/* reset the shape structure */
X		/* free all keybuffers but one and reprime it */
X		for (kb=layer->kbuff; kb->next; kb=kb->next)
X			free(kb);					/* free input buffers */
X		kb->size = 0;					/* empty buffer */
X		kb->offset = 0;					/* start refill from front */
X    	layer->allocated = 0;			/* window no longer allocated */
X	  }
X
X} /* KillWindow() */
X
X
X					/* FAbort() - signal catcher for quitting */
Xstatic void
XFAbort()
X{
X	DO DEBUG("FAbort()\n");
X	FQuit (1);							/* quit with error exit */
X
X} /* FAbort() */
X
X
X					/* FQuit() - terminate layers */
Xvoid
XFQuit(exitcode)
Xint		exitcode;
X{
X	int			i;
X
X	DO DEBUG("FQuit(%d)\n",exitcode);
X	for (i=0; i<MAXPCHAN; i++)
X		KillWindow(&World[i]);			/* kill all windows */
X
X	DO DEBUG("SendQuit()\n");
X	SendQuit();							/* tell MacLayers to exit layers mode */
X    SetTTY (0, &OldMode);
X	if (RealTtyMode)
X		(void) chmod(RealTtyName, RealTtyMode);	/* restore mode */
X	if (RealSlot)
X		WriteUtmp(RealSlot, &RealUtmp);	/* restore original login */
X    FinitTerm ();
X	sleep(2);							/* wait for port to reset */
X    printf ("[layers terminated]\n");
X
X    exit (exitcode);
X
X} /* FQuit() */
X
X
X					/* MakeWindow() - create new layer */
Xstatic
XMakeWindow (chan, prog, args, dir, lflag, shape)
Xint		chan;							/* zero or channel to use for window */
Xchar	*prog;
Xchar 	**args;
Xchar	*dir;
Xint		lflag;							/* one if this to be logged in */
Xstruct Shape *shape;					/* shape to use for window */
X{
X    register struct Layer *layer;
X    register char **cp;
X    register f, j;
X    int tf;
X    int mypid;
X    char ebuf[10];
X
X	DO DEBUG("MakeWindow(%d, %s, %s, dir %s, ",
X				chan, prog, args[0], dir ? dir : "(none)");
X	DO DEBUG("login %d\n", lflag);
X	DO DEBUG("    origv %d, origh %d, lines %d, chars %d, ",
X				shape->worigv, shape->worigh, shape->wlines, shape->wchars);
X	DO DEBUG("font %d, attr 0x%x\n", shape->wfont, shape->wattr);
X					
X    if ((f = OpenPTY ()) == -1)
X	  { Msg (0, "No more PTYs.");
X		return ( -1 );
X      }
X
X	/* if channel not given obtain one from MacLayers */
X	if (chan == 0)
X	  {	chan = SendNew(shape);				/* try to get free window */
X    	if (chan == 0)
X	  	  {	Msg (0, "No more windows.");
X			return ( -1 );
X      	  }
X		DO DEBUG("SendNew() == %d\n", chan);
X	  }
X
X	/* verify channel */
X	if (chan <= 0 || chan > MAXPCHAN)
X	  {	Msg(0, "Invalid channel %d.", chan);
X		return ( -1 );
X	  }
X
X	/* login this window if it's layer #1 */
X	if (chan == 1)
X		lflag = 1;
X					
X    if (lflag == -1)
X		lflag = loginflag;
X	
X#ifdef USRLIMIT
X    /*
X     *	Count current number of users, and if logging windows in,
X     */
X    if (lflag == 1)
X	  { (void) lseek (utmpf, 0, 0);
X		UserCount = 0;
X		while (read(utmpf, &utmpbuf, sizeof(struct utmp)) > 0)
X		  { if (utmpbuf.ut_name[0] != '\0')
X				UserCount++;
X		  }
X		if (UserCount >= USRLIMIT)
X		  { Msg (0, "User limit reached.  Window will not be logged in.");
X	    	lflag = 0;
X		  }
X      }
X#endif USRLIMIT
X
X	layer = &World[chan-1];					/* find layer structure */
X	layer->shape = *shape;					/* install new window shape */
X
X	/* ??? What do we do if layer is still active as far as we're concerned? */
X	if (layer->allocated)
X	  {	DO DEBUG("??? newlayer not free !!!\n");
X		KillWindow(layer);					/* kill off old layer */
X		SendDelete(layer->chan);			/* kill window back off */
X		Msg (0, "Makewindow error: Duplicate active layer %d.", chan);
X		return ( -1 );						/* return failed */
X	  }
X
X	layer->allocated = 1;					/* show layer now in use */
X	BuildTitle(chan, prog, args);			/* install window title */
X
X    (void) fcntl (f, F_SETFL, FNDELAY);
X    layer->ptyfd = f;						/* pseudo pty for task's I/O */
X	layer->ptymask = 1<<f;					/* set pty device mask */
X    strncpy (layer->cmd, Filename (args[0]), MAXSTR-1);
X    layer->cmd[MAXSTR-1] = '\0';
X    strncpy (layer->tty, TtyName, MAXSTR-1);
X	DO DEBUG("forking %s, tty %s, ptyfd %d, mask %x\n",
X				layer->cmd, layer->tty, layer->ptyfd, layer->ptymask);
X    (void) chown (TtyName, getuid (), getgid ());
X    if (lflag == 1)
X	  { layer->slot = SetUtmp(TtyName, chan == 1);
X		if (chan == 1 && RealTtyMode)
X			/* set to original tty umask */
X			(void) chmod(TtyName, RealTtyMode);
X		else
X			/* force to this mode */
X			(void) chmod(TtyName, TtyMode);
X      }
X    else
X	  { layer->slot = -1;
X		/* do not allow any other user access to this device */
X		(void) chmod (TtyName, 0600);
X      }
X    switch (layer->lpid = fork ())
X	{ case -1:
X		Msg (errno, "fork");
X		layer->lpid = 0;					/* clear pid field */
X		return ( -1 );						/* return failed */
X
X      case 0:
X		signal (SIGHUP, SIG_DFL);
X		signal (SIGINT, SIG_DFL);
X		signal (SIGQUIT, SIG_DFL);
X		signal (SIGTERM, SIG_DFL);
X		signal (SIGTTIN, SIG_DFL);
X		signal (SIGTTOU, SIG_DFL);
X		signal (SIGALRM, SIG_DFL);
X		setuid (getuid ());
X		setgid (getgid ());
X		if (dir && chdir (dir) == -1)
X		  { SendErrorMsg ("Cannot chdir to %s: %s", dir, sys_errlist[errno]);
X	    	exit (1);
X		  }
X		mypid = getpid ();
X		ioctl (DevTty, TIOCNOTTY, (char *)0);
X		if ((tf = open (TtyName, O_RDWR)) == -1)
X		  { SendErrorMsg ("Cannot open %s: %s", TtyName, sys_errlist[errno]);
X	    	exit (1);
X		  }
X		DO DEBUG("Now in new process\n");
X		(void) dup2 (tf, 0);
X		(void) dup2 (tf, 1);
X		(void) dup2 (tf, 2);
X		for (f = getdtablesize () - 1; f > 2; f--)
X	    	close (f);
X		ioctl (0, TIOCSPGRP, &mypid);
X		(void) setpgrp (0, mypid);
X		SetTTY (0, &OldMode);
X
X		  {	struct	winsize	wsize;		/* window size structure */
X			int			retcode;		/* ioctl return code */
X
X			wsize.ws_col = layer->shape.wchars; /* character width */
X			wsize.ws_row = layer->shape.wlines; /* window height */
X			wsize.ws_xpixel = 0;				/* necessary? */
X			wsize.ws_ypixel = 0;
X			/* update O/S window state */
X			retcode = ioctl(0, TIOCSWINSZ, &wsize);
X		  }
X		(void) umask(Oumask);			/* restore user's original umask */
X		NewEnv[2] = MakeTermcap(layer->shape.wlines, layer->shape.wchars);
X		sprintf (ebuf, "LAYER=%d", chan);
X		NewEnv[3] = ebuf;
X		execvpe (prog, args, NewEnv);
X		printf("%s: cannot exec %s: %s", myname, prog, sys_errlist[errno]);
X		exit (1);
X    }
X
X    return ( chan );
X
X} /* MakeWindow() */
X
Xstatic
Xexecvpe (prog, args, env)
Xchar *prog, **args, **env;
X{
X    register char *path, *p;
X    char buf[1024];
X    char *shargs[MAXARGS+1];
X    register i;
X	register eaccess = 0;
X
X    if (prog[0] == '/')
X		path = "";
X    else
X	if ((path = getenv ("PATH")) == 0)
X		path = DefaultPath;
X    do
X	  { p = buf;
X		while (*path && *path != ':')
X	    	*p++ = *path++;
X		if (p > buf)
X	    	*p++ = '/';
X		strcpy (p, prog);
X		if (*path)
X	    	++path;
X		execve (buf, args, env);
X		switch (errno)
X		{ case ENOEXEC:
X	    	shargs[0] = DefaultShell;
X	    	shargs[1] = buf;
X	    	for (i = 1; shargs[i+1] = args[i]; ++i);
X	    	execve (DefaultShell, shargs, env);
X	    	return;
X
X		  case EACCES:
X	    	eaccess = 1;
X	    	break;
X
X		  case ENOMEM: case E2BIG: case ETXTBSY:
X	    	return;
X
X		} /* end switch */
X
X    } while (*path);
X
X    if (eaccess)
X		errno = EACCES;
X
X} /* execvpe() */
X
X
X				/* BuildTitle() - create and install window title */
X
Xstatic void
XBuildTitle(chan, prog, args)
Xint			chan;						/* channel for title */
Xchar		*prog;						/* program being executed */
Xchar		**args;						/* arg list */
X{
X	int		i;							/* arg scan index */
X	char	buff[1024];					/* super huge title buffer */
X
X	/* skip any leading "/bin/" */
X	if (strncmp(prog, "/bin/", 5) == 0)
X		strcpy(buff, prog+5);			/* leave /bin off */
X	else
X		strcpy(buff, prog);				/* start with program name */
X
X	/* add all aguments but stop if option ("-") seen */
X	for (i=1; args[i] && args[i][0] != '-'; i++)
X	  {	strcat(buff, " ");				/* delimiter */
X		strcat(buff, args[i]);			/* add next parameter */
X	  }
X
X	SendTitle(chan, buff, strlen(buff)); /* set new window title */
X
X} /* BuildTitle() */
X
X
X#ifdef sequent
Xstatic
XOpenPTY ()
X{
X	char *m, *s;
X	register f;
X
X	f = getpseudotty (&s, &m);
X	strncpy (PtyName, m, sizeof (PtyName));
X	strncpy (TtyName, s, sizeof (TtyName));
X	ioctl (f, TIOCFLUSH, (char *)0);
X	return (f);
X}
X
X#else
X
Xstatic
XOpenPTY ()
X{
X    register char *p, *l, *d;
X    register i, f, tf;
X
X    strcpy (PtyName, PtyProto);
X    strcpy (TtyName, TtyProto);
X    for (p = PtyName, i = 0; *p != 'X'; ++p, ++i);
X    for (l = "qpr"; *p = *l; ++l)
X	  { for (d = "0123456789abcdef"; p[1] = *d; ++d)
X		  { if ((f = open (PtyName, O_RDWR)) != -1)
X			  { TtyName[i] = p[0];
X				TtyName[i+1] = p[1];
X				if ((tf = open (TtyName, O_RDWR)) != -1)
X				  { close (tf);
X		    		return f;
X				  }
X				close (f);
X	    	  }
X		  }
X      }
X
X    return -1;
X
X} /* OpenPTY() */
X#endif
X
Xstatic
XSetTTY (fd, mp)
Xstruct mode *mp;
X{
X    ioctl (fd, TIOCSETP, &mp->m_ttyb);
X    ioctl (fd, TIOCSETC, &mp->m_tchars);
X    ioctl (fd, TIOCSLTC, &mp->m_ltchars);
X    ioctl (fd, TIOCLSET, &mp->m_lmode);
X    ioctl (fd, TIOCSETD, &mp->m_ldisc);
X
X} /* SetTTY() */
X
Xstatic
XGetTTY (fd, mp)
Xstruct mode *mp;
X{
X    ioctl (fd, TIOCGETP, &mp->m_ttyb);
X    ioctl (fd, TIOCGETC, &mp->m_tchars);
X    ioctl (fd, TIOCGLTC, &mp->m_ltchars);
X    ioctl (fd, TIOCLGET, &mp->m_lmode);
X    ioctl (fd, TIOCGETD, &mp->m_ldisc);
X
X} /* GetTTY() */
X
Xstatic
XSetMode (op, np)
Xstruct mode *op, *np;
X{
X    *np = *op;
X#if 1
X	if (flowctl)
X	  {	np->m_ttyb.sg_flags &= ~(CRMOD|ECHO);
X		np->m_ttyb.sg_flags |= CBREAK | ANYP;
X	  }
X	else
X		np->m_ttyb.sg_flags = RAW | ANYP;
X#else
X    np->m_ttyb.sg_flags &= ~(CRMOD|ECHO);
X    np->m_ttyb.sg_flags |= CBREAK | ANYP;
X#endif
X    np->m_tchars.t_intrc = -1;
X    np->m_tchars.t_quitc = -1;
X    if (!flowctl)
X	  { np->m_tchars.t_startc = -1;
X		np->m_tchars.t_stopc = -1;
X      }
X    np->m_ltchars.t_suspc = -1;
X    np->m_ltchars.t_dsuspc = -1;
X    np->m_ltchars.t_flushc = -1;
X    np->m_ltchars.t_lnextc = -1;
X
X} /* SetMode() */
X
Xstatic char *
XGetTtyName ()
X{
X    int n;
X	char *p;
X
X    for (p = 0, n = 0; n <= 2 && !(p = ttyname (n)); n++);
X
X    if (!p || *p == '\0')
X		Msg (0, "layers must run on a tty.");
X
X    return ( p );
X
X} /* GetTtyName() */
X
X
Xstatic
XKill (pid, sig)
X{
X    if (pid != 0)
X		(void) kill (pid, sig);
X}
X
X			/* GetSockName() - set SockName; if LTY env return 1 else 0 */
Xstatic
XGetSockName ()
X{
X    register client;
X    static char buf[2*MAXSTR];
X
X    if (!mflag && (SockName = getenv ("LTY")) != 0 && *SockName != '\0')
X	  { client = 1;
X		setuid (getuid ());
X		setgid (getgid ());
X      }
X	else
X	  { sprintf (buf, "%s.%s", HostName, Filename (RealTtyName));
X		SockName = buf;
X		client = 0;
X      }
X    return client;
X
X} /* GetSockName() */
X
Xstatic
XMakeServerSocket ()
X{
X    register s;
X    struct sockaddr_un a;
X    char *p;
X
X    if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) == -1)
X		Msg (errno, "socket");
X    a.sun_family = AF_UNIX;
X    strcpy (SockNamePtr, SockName);
X    strcpy (a.sun_path, SockPath);
X    if (connect (s, (struct sockaddr *)&a, strlen (SockPath)+2) != -1)
X	  { p = Filename (SockPath);
X		Msg (0, "You already have a layers running on %s.", p);
X		/*NOTREACHED*/
X      }
X	DO DEBUG("MakeServerSocket: unlink(SockPath)/bind()/chown/listen\n");
X    (void) unlink (SockPath);
X    if (bind (s, (struct sockaddr *)&a, strlen (SockPath)+2) == -1)
X		Msg (errno, "bind");
X    (void) chown (SockPath, getuid (), getgid ());
X    if (listen (s, 5) == -1)
X		Msg (errno, "listen");
X    return s;
X
X} /* MakeServerSocket() */
X
Xstatic
XMakeClientSocket (err)
X{
X    register s;
X    struct sockaddr_un a;
X
X    if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) == -1)
X		Msg (errno, "socket");
X    a.sun_family = AF_UNIX;
X    strcpy (SockNamePtr, SockName);
X    strcpy (a.sun_path, SockPath);
X    if (connect (s, (struct sockaddr *)&a, strlen (SockPath)+2) == -1)
X	  { if (err)
X		  { Msg (errno, "connect: %s", SockPath); }
X		else
X		  { close (s);
X	    	return -1;
X		  }
X      }
X    return s;
X
X} /* MakeClientSocket() */
X
Xstatic
XSendCreateMsg (s, ac, av, lflag, shape)
Xchar **av;
Xstruct Shape *shape;
X{
X    struct msg m;
X    register char *p;
X    register len, n;
X	char	*pwd;					/* PWD environment string */
X
X	DO DEBUG("SendCreateMsg(%d, ac %d, lflag %d\n", s, ac, lflag);
X    m.type = MSG_CREATE;
X    p = m.m.create.line;
X    for (n = 0; ac > 0 && n < MAXARGS-1; ++av, --ac, ++n)
X	  { len = strlen (*av) + 1;
X		if (p + len >= m.m.create.line+MAXLINE)
X	    	break;
X		strcpy (p, *av);
X		p += len;
X      }
X	DO DEBUG("  nargs %d, create line = '%s'\n", n, m.m.create.line);
X    m.m.create.nargs = n;
X    m.m.create.lflag = lflag;
X	m.m.create.shape = *shape;			/* pass window shape */
X
X	/* Since Suns can hang up on getwd() [damn their stupid networking]
X	** we try to get the current working directory first from the PWD
X	** environment variable.
X	*/
X	if ((pwd=getenv("PWD")) && strlen(pwd) < 1024)
X		(void) strcpy(m.m.create.dir, pwd);
X	else
X    if (getwd (m.m.create.dir) == 0)
X	  {	DO DEBUG("getwd() failed!!\n");
X		Msg (0, "%s", m.m.create.dir);
X	  }
X	DO DEBUG("  create.dir = '%s'\n", m.m.create.dir);
X
X    if (write (s, (char *)&m, sizeof (m)) != sizeof (m))
X	  {	DO DEBUG("  write failed!!\n");
X		Msg (errno, "write");
X	  }
X	DO DEBUG("SendCreateMsg() done\n");
X
X} /* SendCreateMsg() */
X
X/*VARARGS1*/
Xstatic
XSendErrorMsg (fmt, p1, p2, p3, p4, p5, p6)
Xchar *fmt;
X{
X    register s;
X    struct msg m;
X
X    s = MakeClientSocket (1);
X    m.type = MSG_ERROR;
X    sprintf (m.m.message, fmt, p1, p2, p3, p4, p5, p6);
X    (void) write (s, (char *)&m, sizeof (m));
X    close (s);
X    sleep (2);
X}
X
Xstatic
XReceiveMsg (s)
X{
X    register ns;
X    struct sockaddr_un a;
X    int left, len = sizeof (a);
X    struct msg m;
X    char *p;
X
X	DO DEBUG ("ReceiveMsg()\n");
X    if ((ns = accept (s, (struct sockaddr *)&a, &len)) == -1)
X	  { Msg (errno, "accept");
X		return;
X      }
X    p = (char *)&m;
X    left = sizeof (m);
X    while (left > 0 && (len = read (ns, p, left)) > 0)
X	  { p += len;
X		left -= len;
X      }
X    close (ns);
X    if (len == -1)
X		Msg (errno, "read");
X    if (left > 0)
X		return;
X    switch (m.type)
X	{ case MSG_CREATE:
X		DO DEBUG("MSG_CREATE:\n");
X	    ExecCreate (&m);
X		break;
X
X      case MSG_ERROR:
X		DO DEBUG("MSG_ERROR:\n");
X		Msg (0, "%s", m.m.message);
X		break;
X
X      default:
X		Msg (0, "Invalid message (type %d).", m.type);
X
X    } /* end switch */
X
X} /* ReceiveMsg() */
X
Xstatic
XExecCreate (mp)
Xstruct msg *mp;
X{
X    char *args[MAXARGS];
X    register n;
X    register char **pp = args, *p = mp->m.create.line;
X
X    for (n = mp->m.create.nargs; n > 0; --n)
X	  { *pp++ = p;
X		p += strlen (p) + 1;
X      }
X    *pp = 0;
X    n = MakeWindow (0, mp->m.create.line, args, mp->m.create.dir,
X						mp->m.create.lflag, &mp->m.create.shape);
X
X} /* ExecCreate() */
X
X#if 0
Xstatic
XReadRc (fn)
Xchar *fn;
X{
X    FILE *f;
X    register char *p, **pp, **ap;
X    register argc, num, c;
X    char buf[256];
X    char *args[MAXARGS];
X    int key;
X	struct Shape shape;						/* shape for new window */
X
X	ClearShape(&shape);						/* initialize shape */
X    ap = args;
X    if (access (fn, R_OK) == -1)
X		return;
X    if ((f = fopen (fn, "r")) == NULL)
X		return;
X    while (fgets (buf, 256, f) != NULL)
X	  { if (p = rindex (buf, '\n'))
X	    	*p = '\0';
X		if ((argc = Parse (fn, buf, ap)) == 0)
X	    	continue;
X		if (strcmp (ap[0], "escape") == 0)
X		  { p = ap[1];
X	    	if (argc < 2 || strlen (p) != 2)
X				Msg (0, "%s: two characters required after escape.", fn);
X	    	Esc = *p++;
X	    	MetaEsc = *p;
X            ktab[Esc].type = KEY_OTHER;
X		  }
X		else
X		if (strcmp (ap[0], "login") == 0)
X		  { loginflag = 1;
X		  }
X		else
X		if (strcmp (ap[0], "unlogin") == 0)
X		  { loginflag = 0; }
X		else
X		if (strcmp (ap[0], "nologin") == 0)
X		  { loginflag = 0; }
X		else
X		if (strcmp (ap[0], "chdir") == 0)
X	 	  { p = argc < 2 ? home : ap[1];
X	    	if (chdir (p) == -1)
X			Msg (errno, "%s", p);
X		  }
X		else
X		if (strcmp (ap[0], "mode") == 0)
X		  { if (argc != 2)
X			  { Msg (0, "%s: mode: one argument required.", fn); }
X			else
X			if (!IsNum (ap[1], 7))
X			  { Msg (0, "%s: mode: octal number expected.", fn); }
X			else
X				(void) sscanf (ap[1], "%o", &TtyMode);
X		  }
X		else
X		if (strcmp (ap[0], "bell") == 0)
X		  { if (argc != 2)
X			  { Msg (0, "%s: bell: one argument required.", fn); }
X			else
X			  { if ((BellString = malloc (strlen (ap[1]) + 1)) == 0)
X		    		Msg (0, "Out of memory.");
X				istrcpy (BellString, ap[1]);
X	    	  }
X		  }
X		else
X		if (strcmp (ap[0], "screen") == 0)
X		  { num = 0;
X	    	if (argc > 1 && IsNum (ap[1], 10))
X			  { num = atoi (ap[1]);
X				if (num < 0 || num > MAXWIN-1)
X		    		Msg (0, "%s: illegal screen number %d.", fn, num);
X				--argc; ++ap;
X	    	  }
X	    	if (argc < 2)
X			  { ap[1] = ShellProg; argc = 2; }
X	    	ap[argc] = 0;
X	    	(void) MakeWindow (0, ap[1], ap+1, (char *)0, loginflag, &shape);
X		  }
X		else
X		if (strcmp (ap[0], "bind") == 0)
X		  { p = ap[1];
X	    	if (argc < 2 || *p == '\0')
X				Msg (0, "%s: key expected after bind.", fn);
X	    	if (p[1] == '\0')
X			  { key = *p; }
X			else
X			if (p[0] == '^' && p[1] != '\0' && p[2] == '\0')
X			  { c = p[1];
X				if (isupper (c))
X		    		p[1] = tolower (c);    
X				key = Ctrl(c);
X	    	  }
X			else
X			if (IsNum (p, 7))
X			  { (void) sscanf (p, "%o", &key);
X	    	  }
X			else
X			  { Msg (0, "%s: bind: character, ^x, or octal number expected.", fn); }
X	    	ktab[key].lflag = loginflag;
X	    	if (argc < 3)
X			  { ktab[key].type = 0;
X	    	  }
X			else
X			  { for (pp = KeyNames; *pp; ++pp)
X		    	if (strcmp (ap[2], *pp) == 0) break;
X				if (*pp)
X				  { ktab[key].type = pp-KeyNames+1; }
X				else
X				  { ktab[key].type = KEY_CREATE;
X		    		ktab[key].args = SaveArgs (argc-2, ap+2);
X				  }
X	    	  }
X		  }
X		else
X			Msg (0, "%s: unknown keyword \"%s\".", fn, ap[0]);
X      }
X    (void) fclose (f);
X
X} /* ReadRc() */
X
Xstatic
XParse (fn, buf, args)
Xchar *fn, *buf, **args;
X{
X    register char *p, **ap;
X    register delim, argc;
X
X	p = buf;
X	ap = args;
X    argc = 0;
X    for (;;)
X	  { while (*p && (*p == ' ' || *p == '\t'))
X			++p;
X		if (*p == '\0' || *p == '#')
X	    	return argc;
X		if (argc > MAXARGS-1)
X	    	Msg (0, "%s: too many tokens.", fn);
X		delim = 0;
X		if (*p == '"' || *p == '\'')
X		  { delim = *p; *p = '\0'; ++p; }
X		++argc;
X		*ap = p; ++ap;
X		while (*p && !(delim ? *p == delim : (*p == ' ' || *p == '\t')))
X	    	++p;
X		if (*p == '\0')
X		  { if (delim)
X				Msg (0, "%s: Missing quote.", fn);
X	    	else
X				return argc;
X		  }
X		*p++ = '\0';
X      }
X
X} /* Parse() */
X
Xstatic char **
XSaveArgs (argc, argv)
Xregister argc;
Xregister char **argv;
X{
X    register char **ap, **pp;
X
X    if ((pp = ap = (char **)malloc ((argc+1) * sizeof (char **))) == 0)
X		Msg (0, "Out of memory.");
X    while (argc--)
X	  { if ((*pp = malloc (strlen (*argv)+1)) == 0)
X	    	Msg (0, "Out of memory.");
X		strcpy (*pp, *argv);
X		++pp; ++argv;
X      }
X    *pp = 0;
X    return ap;
X
X} /* SaveArgs() */
X#endif
X
Xstatic
XMakeNewEnv ()
X{
X    register char **op, **np = NewEnv;
X    static char buf[MAXSTR];
X
X    if (strlen (SockName) > MAXSTR-5)
X		SockName = "?";
X    sprintf (buf, "LTY=%s", SockName);
X    *np++ = buf;
X    *np++ = Term;
X    np += 2;
X    for (op = environ; *op; ++op)
X	  { if (np == NewEnv + MAXARGS - 1)
X	    	break;
X		if (   !IsSymbol (*op, "TERM")
X			&& !IsSymbol (*op, "TERMCAP")
X			&& !IsSymbol (*op, "LTY")
X		   )
X	    	*np++ = *op;
X      }
X    *np = 0;
X
X} /* MakeNewEnv() */
X
Xstatic
XIsSymbol (e, s)
Xregister char *e, *s;
X{
X    register char *p;
X    register n;
X
X    for (p = e; *p && *p != '='; ++p);
X    if (*p)
X	  { *p = '\0';
X		n = strcmp (e, s);
X		*p = '=';
X		return n == 0;
X      }
X
X    return 0;
X
X} /* IsSymbol() */
X
X/*VARARGS2*/
XMsg (err, fmt, p1, p2, p3, p4, p5, p6)
Xchar *fmt;
X{
X    char buf[1024];
X    register char *p = buf;
X
X    sprintf (p, fmt, p1, p2, p3, p4, p5, p6);
X    if (err)
X	  { p += strlen (p);
X		if (err > 0 && err < sys_nerr)
X	    	sprintf (p, ": %s", sys_errlist[err]);
X		else
X	    	sprintf (p, ": Error %d", err);
X      }
X    if (!Abortonmsg)
X	  { /* MakeStatus (buf, curr);*/
X		printf("%s\r\n", buf);
X	  } 
X	else
X	  { printf ("%s\r\n", buf);
X		exit (1);
X      }
X
X} /* Msg() */
X
Xstatic char *
XFilename (s)
Xchar *s;
X{
X    register char *p;
X
X    p = s + strlen (s) - 1;
X    while (p >= s && *p != '/')
X		--p;
X    return ++p;
X
X} /* Filename() */
X
Xstatic
XIsNum (s, base)
Xregister char *s;
Xregister base;
X{
X    for (base += '0'; *s; ++s)
X		if (*s < '0' || *s > base)
X	    	return 0;
X    return 1;
X
X} /* IsNum() */
X
X
Xstatic
XInitUtmp ()
X{
X    if ((utmpf = open (UtmpName, O_RDWR)) == -1)
X	  { if (errno != EACCES)
X	    	Msg (errno, UtmpName);
X		return;
X      }
X    utmp = 1;
X
X} /* InitUtmp() */
X
X
Xstatic int
XFindUtmp(name)
Xchar *name;
X{
X    register char *p;
X    register struct ttyent *tp;
X    register slot;
X
X	DO DEBUG("FindUtmp(%s)\n", name);
X	slot = 1;
X    if (!utmp)
X		return 0;
X    if (p = rindex (name, '/'))
X		++p;
X    else
X		p = name;
X    setttyent ();
X    while (   (tp = getttyent ()) != NULL
X		   && strcmp (p, tp->ty_name) != 0
X		  )
X		++slot;
X    if (tp == NULL)
X		return 0;
X
X	DO DEBUG(" slot %d\n", slot);
X    return slot;
X
X} /* FindUtmp() */
X
X
Xstatic int
XSetUtmp (name, mainlogin)
Xchar	*name;							/* tty name */
Xint		mainlogin;						/* this is primary login */
X{
X    register char *p;
X    register slot;
X    struct utmp u;
X
X	if ((slot=FindUtmp(name)) == 0)
X		return ( 0 );
X
X    if (p = rindex (name, '/'))
X		++p;
X    else
X		p = name;
X
X    strncpy (u.ut_line, p, 8);
X    strncpy (u.ut_name, LoginName, 8);
X#if 1
X	strncpy(u.ut_host,  Filename (RealTtyName), 16); /* host is real tty */
X#else
X    u.ut_host[0] = '\0';
X#endif
X	if (RealSlot && mainlogin)
X		u.ut_time = RealUtmp.ut_time;		/* use original login time */
X	else
X    	time (&u.ut_time);
X    (void) lseek (utmpf, (long)(slot * sizeof (u)), 0);
X    (void) write (utmpf, (char *)&u, sizeof (u));
X
X    return ( slot );
X
X} /* SetUtmp() */
X
Xstatic int
XReadUtmp(slot, entry)
Xint		slot;								/* slot to read */
Xstruct utmp	*entry;							/* entry to read into */
X{
X	int		cnt;							/* return count */
X
X	if (!utmp)
X		return;								/* no utmp access */
X
X	(void) lseek(utmpf, (long)(slot * sizeof(struct utmp)), 0);
X	cnt =  read(utmpf, (char *)entry, sizeof(struct utmp));
X	DO DEBUG("ReadUtmp cnt %d, errno %d, line %.8s, name %.8s, host %.16s\n",
X		cnt, errno, entry->ut_line, entry->ut_name, entry->ut_host);
X
X	return ( cnt );
X
X} /* ReadUtmp() */
X
Xstatic void
XWriteUtmp(slot, entry)
Xint		slot;								/* slot to write */
Xstruct utmp	*entry;							/* entry to write from */
X{
X	int		cnt;							/* write return code */
X
X	if (!utmp)
X		return;								/* no utmp access */
X
X	(void) lseek(utmpf, (long)(slot * sizeof(struct utmp)), 0);
X	cnt = write(utmpf, (char *)entry, sizeof(struct utmp));
X	DO DEBUG("WriteUtmp() slot %d cnt %d line %.8s name %.8s host %.16s\n",
X				slot, cnt, entry->ut_line, entry->ut_name, entry->ut_host);
X
X} /* WriteUtmp() */
X
Xstatic
XRemoveUtmp (slot)
X{
X    struct utmp u;
X
X    if (slot)
X	  { bzero ((char *)&u, sizeof (u));
X		(void) lseek (utmpf, (long)(slot * sizeof (u)), 0);
X		(void) write (utmpf, (char *)&u, sizeof (u));
X      }
X
X} /* RemoveUtmp() */
X
X#ifndef GETTTYENT
X
Xstatic
Xsetttyent ()
X{
X    struct stat s;
X    register f;
X    register char *p, *ep;
X
X    if (ttnext)
X	  { ttnext = tt;
X		return;
X      }
X    if ((f = open (ttys, O_RDONLY)) == -1 || fstat (f, &s) == -1)
X		Msg (errno, ttys);
X    if ((tt = malloc (s.st_size + 1)) == 0)
X		Msg (0, "Out of memory.");
X    if (read (f, tt, s.st_size) != s.st_size)
X		Msg (errno, ttys);
X    close (f);
X    for (p = tt, ep = p + s.st_size; p < ep; ++p)
X		if (*p == '\n')
X			*p = '\0';
X    *p = '\0';
X    ttnext = tt;
X
X} /* setttyent() */
X
Xstatic struct ttyent *
Xgetttyent ()
X{
X    static struct ttyent t;
X
X    if (*ttnext == '\0')
X		return NULL;
X    t.ty_name = ttnext + 2;
X    ttnext += strlen (ttnext) + 1;
X    return &t;
X
X} /* getttyend() */
X
X#endif
X
X
X
X					/* FinitTerm() - reset vt100 terminal */
Xstatic void
XFinitTerm ()
X{
X	/* print out termcap 'is' string to reset terminal */
X#if 0
X	/* This string sets scroll region 1-24 and puts cursor at bottom line */
X	printf("\033[1;24r\033[24;1H");
X#endif
X	fflush(stdout);
X}
X
Xstatic void
XAddCap (s)
Xchar *s;
X{
X    register n;
X
X    if (tcLineLen + (n = strlen (s)) > 55)
X	  { strcat (Termcap, "\\\n\t:");
X		tcLineLen = 0;
X      }
X    strcat (Termcap, s);
X    tcLineLen += n;
X}
X
Xstatic char *
XMakeTermcap(lines, chars)
Xint		lines;							/* default window lines */
Xint		chars;							/* default window chars */
X{
X    char buf[1024];
X    register char **pp, *p;
X
X    strcpy(Termcap, TermcapConst1);		/* start TERMCAP build */
X	strcat(Termcap, UserTerm);			/* fill in User's terminal type */
X	strcat(Termcap, TermcapConst3);		/* finish our own definition */
X
X	if (lines <= 0 || lines > 200)
X		lines = rows;					/* force default if none or invalid */
X	if (chars <= 0 || chars > 300)
X		chars = cols;					/* force default if none or invalid */
X
X    sprintf(buf, "li#%d:co#%d:", lines, chars);
X    AddCap(buf);
X
X    return ( Termcap );
X
X} /* MakeTermcap() */
X
X
X				/* DEBUG() - dump output routine */
X
Xvoid
XDEBUG(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
Xchar		*format;
Xint			arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
X{
X	fprintf(stderr, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
X}
SHAR_EOF
if test 56819 -ne "`wc -c < 'layers.c'`"
then
	echo shar: error transmitting "'layers.c'" '(should have been 56819 characters)'
fi
fi # end of overwriting check
#	End of shell archive
exit 0
--- end of part 3 ---

werner@rascal.ics.utexas.edu (Werner Uhrig) (06/03/90)

[MacLayers 1.00 - part 4 of 6]

---
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#
#	Hqx.1
#
# This archive created: Thu May 31 21:58:29 1990
# By:	Roger L. Long (macintosh@dhw68k.cts.com)
export PATH; PATH=/bin:$PATH
echo shar: extracting "'Hqx.1'" '(43662 characters)'
if test -f 'Hqx.1'
then
	echo shar: will not over-write existing file "'Hqx.1'"
else
cat << \SHAR_EOF > 'Hqx.1'
(This file must be converted with BinHex 4.0)

:$8eKBdaKH@9bFbjcDA3!8dP8)90*9#%!N!-"GcJ!N!4k190*9#%!!3!"GcKb6'&
e!3#3"`)!#8eKBdaKH@9bF`![l&K!JG%13)(4'%#"d5J!"!!$FNM!,J"Q!Ri!,qa
Z!#d6I!!`9KS$'J%*!"i!!3#3!brXL%&38%a8FQP-)3#L+(Z`SLKlX!!"mNi!N!8
"GV)!N!3ld`#3#)h)!!!%#"K!h5H"k3i#12!US-1(%#0+K*LJ5CJa6-,N+50RMJ#
(3D"!B8*&6KSQ)!)##3!NBXL4*8qQ",#bjF5ESP$XJ38aJ$`R0i-+(8UdU0'M5)r
''!M))B%B,Q$!+!&9+SK8)',N`*'$4GBF1@#!%*-("*%`GY+3!!&aa3@)Q(2QP'(
MN!$($SXB0A+FNc@Uf"BJKVb"NmIN'64dVRlPkP9Vf,&PckCGfrDYbEKc(4jib56
L!5T&X&!4q*!!4-c1"*--F6+#Y%"k!J28-b+PL"(A!*S1$143!CDQ!`J&&)$J)C'
J(1!-!$5`1@RR!`8!5Tl8U)+&$L%XP"h!AS"l!IJ&`"GJAi"mfEIA%k"!`!)"%!3
`%2"!3!1(,'42r-II2!8)3BMa4Kf*iCA44KdPme!!,8ad5RG"+6!1!8DN`8BC$$`
"4aPZ[&8'(R5i)1*$%@M))9YTZ%(''hH!%!3EDB3aad-&$-(''h)Yf'"[8k"9KSY
cL1M#3a!3`D)E0iDaeK4Td&''N!!20@$N(8LqS53)&9kSid--3''5'iPGNH++Gfc
T9"4e01NJHa&1Q#@'*RC)aBFKM[K%3#9Zf+'B+V,S)S`bdQJMMQ8!F!9"1`DN3)p
fr"K%N!!MCMGPP9Fbk558$NPjC**V[@PQ3&eq'HDB,!)!"D)2%B#QQP&%e-9h3J9
!3"&N0%P!&Aeq#X!!3a#BUQ#%d3L&M%i+HQ%BFZLkk&aPM*(BLh4*e)9lXFjD+af
hjUS&UJlakLX@!4%!E"i!$"&3!F218D`9jpTB"V,+6X'XXhr5&84%Ci5h(hrr8$M
Q!4@UL'P!#35mPK0d4QN`#&k@NGD!-cVN`-,bAZKX'QqimG!$4lcaPXF90dX(aKT
,G!Cmqr,RViS!M`RPE3!82#B)#)-)`"%"0E"```rA-H0a!%`mFmJAC`c!&!&al$%
9)-mlXY%4"5$*H$FGJ-Fj"`J'TKa[X1&"%QkBmBBFEB!`44lUPP'f&5#mB3D+IEE
)T"k&1T3"f'+6$B)38a$4pYYmNQPf'R3rT)'4ETb3!*J8cBkp&K-TPX(A%fDmc63
FZNBJ@"YYe1&''Q1%mE3EN!!1kG!#Fj+GBKKX$!`!"'pD&JETCR$N1S-EZiYX[5"
!lSENZMl3F1ebF$L'j##i[J%4CCJ44KeXM"Uhf@A3-E)ECr#PI+pb&!mQh),,Dhf
+f5FID8!D*$&'aRc4i6(ccN1I'"3i0NPba0cL'H$BL5'"Bf)(fXY$(-!iZ53QG@e
BAE3#-J&jU3J%5%!@'Hk!V"m*SAKK@)0%T#DIUPdYDaQM!pHmKVHaPHeXD9[Ehm$
RTlR9,5"h#jX*ppDh&3DZKB4l)3!1Pc(&JB"akj2$ib)hZFTp$(-1`Ce$02F'cRN
1G++lRqY3aj%%ZS&eVS1GKAj8NYR0JALh5a3!(U!l1I$1Gm"E3[l'1$b1'!pjbS2
Imk,(3VP9lhVPfeiGZXFKkBA[MZ66hSLbJ$leX3m%lM0,mqBi[rU0$Rm#%@-%pLH
(r[f[GhVTb!!,@$d2UHk+#`4!!cQdPJJ+NB,&faX'05L4)T3RCIp!&aSb9SB$%#&
'V6YIc#+)[6V!`A84J-)XIdHpm@'[G"-T!ReJ+8YDfK+AVNX!,mrJ5f!+NjE&a#-
b*4+1m`KP!!B)B%F'J,!b`D"GH4L$PR#`aJ$%!!$[&)J-!$"2JF`!!2F8#!d!X%q
"e!!!ra5)$3!`8)(F!!!(MH4$&)!%YIa)R&%bj1ISKNN%$C!!#Nfk8!iVbK&GAF#
"D`'ENlVRbm3N%U)1SF!8NR!%d%LK#5pBk4'3!&!&+(!d@3jj`"633#!bG8LFN!"
m5$MXmme`CR)1j#b$1G'TcN+a8k&*I'Fm!c$2HJEJR[N-`$ll'B"r"M3!!beS!!k
D8#8UUU&NH'JQ!B#%R%PdSa"03N!FJ&%kD*5L%"d09!2b89+#3+3FN80*%HNaP!C
%T5ae+8aP5P1E'RD-1qhTN@iD9)F-)`$kB#Eca&#(-b4J#'LBhHrB!)*c1Z5cSAA
$D,2b%05+GLiJU#I"32YDdZCcYUPGE6pa@eX3"*5hUS9Y3B'lfS3'a*CeD!-F32#
%NTeV#R33(532-+`aV+&kN!"8`!AIY3Bi[#&&G(J)!TM`KM-`M(m6B3!!e!#!C#%
M!*i)J!XUja"+!1!M$lNA-J"3"9N4S!#8$#p%lR@R+J"J%333J"2H!*%$!)!($`l
!#"!""LUJ)3emZB1&5,Z'$B0JGQ@CTET!`)DMJJ!1A$YHA%#3!)F"J8"G(JjYSd!
J@0@5cbe"5'@,kr$L2IjSab#Ji2F5Z5*%ARJ12h#)HYRVA[J')!Md$BJPlMYJ!0#
#[`&`!!%3%&Nkq,6+"6j`JKIFi!G(H-)92R+3!$hFB6D3!"E%)""aBNU-),kJq!d
UjJZ3!'(XjMMlL-DHqacfF+aM&mr"abafXC!!6HUa)Y2Kb%N'eAVE#i$haKF)96"
`3-K!jIa@'XX%q'q!A3+!-#0B`3aqL)-Kc!-*)`)'AX+cj2M#Cp,@@0"RF)Z4%Xe
M$Fm"$B6pX)!U#B)Qr@!Q!&#[%!#J"`"B)J"mB*!!'CalQi%mC*prB#X!GT(J*kL
aY3$`!J"8!!"d)+)%4A$$qY,k`c,%S3k55mb#&pHX-U5K8ChL@YRmTbiZ!@$CcAi
f&3,!JQNlj$M@GXJqdk$Y8R6lfkFY03!De!j%N!!JhH[q%A4&jc1D[B(HalYh'I,
G4!Mq6mN!i$3E!S#"!,`A"RFS8d$Xd'Q(B-,+!'J&!1!4kP8*f#%j!!#l+K'!+##
#!#,`!Ja%!*(LF!%!,`L!&"!4K#"ih!h&@eqMj"!'-9b)B9`l!pI,9S6ZM3f#-Q,
Z'-D`aq+Y4F12"J&H`)XMB!29hbTRZF[G'A1(m+(Q!ERj,3$!#J$-SqGTqRP!JXi
Z5K3G%3iS1pINd!1PHbAT-@#kH!(`p+K2[3G@Ac$@'lIeVRrp#6%&JH62(X(*VEh
Y)epch1F1TVT6eYmD!aFj!L#+!1`JbJ"!"'i#dLVY&)S*$iF)"J!!"J#JJDU)1!2
B$Pdjd+@KMb"SJpV'9TC%VSm`[$DMA#`fZK8U(34M##hARE@AB$rk4cC+!a`%*%'
h@+BXBAKa'eKh)I%lM@5Q)fP!)4bq%!"d%!!m!(aYPA!"J6-dY`8!)![*pa!5B#V
m9'k)F!,69`I90`EApce0X(eb8"Cj`c$%mL-Q`R@MifrJ!JN!3!d"X()b!(aS-(`
!-"S-9i-1*`$HeR3!)&GbK3f)J!63XQCa`aF90"BqN`IfP`8ZeMNMTNk%dME%*!E
0-cBrjQ+Kdb'$F5,jpcXY3NX"U&iDS`J!J!d"S!GATB!fZ'cXa5kQ-)(Td4,lG!k
)J!*1b'03Q"Lr*PP83Q)QCS9jmb2[eL4iK(,0T`N!`!d"m(`dd(F"X@`-b&r1"`!
-4`U)TbB2X3!!d!8!F"ZcJ!JI-'mJ`#%$FKMC*i)NH(B'FP6q"R$1&J!$9`2!a`)
fD)[Xe4*ab)-3*fQGB3)!F!f)`!#h0!GV8'amB363Xd$+aQba1(!f!(cl0)Qi5"-
!X)Xpk'qr')b)-!'aFhE&H)cNC9dMpiV1+("M"Aa$3Sf6TSYbk)X!!)c#+$4IP`3
[m!5UChBiP@b6eQ6aK31CjK$XK9mJm@Rp&@S$N!!&`!0QP(KUC"BP!+!%p"3!!i!
)0l"V[!B#DrCV'TP),rCR4[BM6J)L(rC!kl-eAI0LJ(4-N5CTTp)8lq8)!D!$`0F
CNpJ%!*!!#!!3"J"3$1m)!"8!!1$5DX((!KYA5Ei%!L[#GYVh24J'!Ql`F4mQGaF
"9%U*CmR94bJ(,X,aAJHB!f`iL@fP-8qR#Mmj!3$3'HbN$4PSBD)$!QD`4FK)BRK
fA@YaGPXBPBPKK64@"Mj6MLKh'cGAJ+33!$d!%4)jLA*e"Td)!+0!!!B`",0c2+%
%!"@SAMJ3!!p`EJX'GZ$&%G4$IV&hGPlbQ@C%"#DaGIk'!J$!QZE!%J(J!`%C%04
JJjN!!,bKFlh`NqVPLBXJ+`K!#aEfP%B33S0$8IYhAHf$"MqLBG2M2Ki6AAe@JSr
fP(-`"X9c)R-3RFaTK)+MBAh'Plr'2a`bFQl"Ehb)R@9`)L2A*'2$&rYA&RS*Pjj
60"d54&PR9fAK150$@ZmACjIdP#Q50pThPfrcRf$iBMNdKUhCS&2fQMm`Q`#`MK!
K9`cRL6ZBM3k4%Tki6lf!#!f3!!4Z9JCR`$SJB!@X!fmX#!"GDB!"m!,!*fk6D'$
N`R#em*-1ePC!B@ipB!9GNj9AL6cc+@-rSR6(Q(l)FK%Ma4Hr-h+a4jeUjP1F%S$
mb*UXq9iY*`35LJZ!"`#$!!!C!!#AB#UCU(KH#J"q)+D,5!!+d!4[N!"@C8-rP33
4&'#0cEB1L1!(T3NQS1PGa1BjD"%'&Q*k6m)`("&DF-!A33!(F(!KdRQ-6qNcj&0
X)D*k6F+FCJ4DEc#&EI#QDR0Lr0-fCP5)G1!9G,"(A'K%LpUSeF-kacJlDk%Zb*)
BB9#L+F+J9PTTHMF%4!!d!#!+0[LPB6UQ82#63AN[H`!!l)!)JQ"eBT!!"ZEeD,1
c"ZhM-9I!%EpM4P@!"SC4NQZKCQ)!UbXN"+f+52'f&b&!PAP4Ch1CIh-!VCm6PeZ
SRkAS"UPe2'YaCf43"r4LKD(cPb[dIQPJ4Xf60h33*#LAUeJD!,hUUj`3V'#UTXA
+La"aV!#3!+c,bJGjk'FcPRmf3!0,m%02d!6UkKDYb+i8a"HFC5'*!AI!YUSAFJ*
md343F!9+k6"c-4K0bBGSib4PF`FAPRj"bU45H@L-'USlCNEVSe`%BMYQ-cBM')"
"q4#i%!$R0)P*T'N"!3VBm4$#S3fa#!+KaLJk"!#H!!"J#`X"),D41CQCm4#(!!!
4S+E)J!JB-#QF8UdZ`UM[BNC)i%B3d3%!B!c`*&p0!4&V'C&Vqep&S!BL%a&5J,B
TYlJ&J*SLea-k),F")*(#S"f"'c3!N!"YaA#i!4'8bH+#cfD6@#X3l1)3*#!4"J!
!&J!!(!!!X0#03R!PeA9G)'G[q2B3TJX!U"X!UVY"4I!3`"J4X6ZlYAZl&B#HP18
L&f-(SJ1BT8YT`eZm8B-c$X'D%C%!!-#*)3!!SAJ"d'Z9c+1NpeDpR1B33ANU,JJ
+d"BE'i3d$J%c%2%!i@YQkB!)0A!&b)*V1N#&E&!@TYKC`+CpR6U#(dDpJqTe2e+
#f15FC$+qlQZ"m6Zr!E#k!A!S#LF4qXZ*%0Dr)a#1@,+-)C!!VS"K"&cc2@k$*A,
*0*K""P3DP1H%"`#`HmZhZJ+"NaG-EXqR",aRJdR89J%a!+cC'Jp4$jS,[Nh`Nr-
!!1i3!!F3!#S!QC+TEQrV%1HdI-G""3C3!-UJ$$-J&4(4%XXh'Q!XaXTJ!fB-%DH
bI*bfaXS3!c,`aJr4I-XAAR3F!cL!a`k"1FXR((3X!c3!b!&a6Xeh(*`3aQ6XaUE
e%#h4I+24b'*-!hmFb3ja+Xh(DCDX$$G`ajSF%-hAI1(eb6N!b4'"1FdR(*DX&D)
F%A4a%,aa$3C!!+*AYR4K$EJC!!e`bdA3+-i9%#ZRAS)`N`B`!%p!"Zhl%)+,$4-
(!2KJ!'-9%B,E$a-A!"e!c8re%+8!!-A4#`#`",HFba$"TF8"$3$3#3B3!9M3A#r
`cNCN"[SQGd&J,K$4$$%$!18!!(PJ!-4)"9)!PrAF"2F-%Gr-YEd3!""3cV3%%ES
!!&`V$3'!!JE`!1rX"[&-13IU-3D0c`r"$!!3#MNF!"&J!!S`"&3`"F(fd4$4c`-
A%1K3!%A#0FY&"!,pBBRKFa$K$cFB!,0E$64G"A,KQAaU4R*UTVFKcNr($G3F6`q
"-pm!!&Z3!'A*$"@rj4"(N!"PRILLe#aE$L&mEB8*!i%)&b"k,@#94R!M,D)e)Y3
e%D')JUX+!-!()"T"G!4%[PX'Q3X4+A&1j`3)L+"Gcl-@8P#pIHd36`I0F"!!&)!
)e)8X6C)(LHd3"4#-!(!"!I!"Jhd@dE8h66)(P3d!PhhCbdF,CVdjRI-jSI0)f44
)%A&c2*%+!E!"N!#(e`I%GD563(3`f[HNcUiN!S-0AB-"fJHEf%%*a*Xla$`F!1!
b($i3X8YFZ1$E"Mr*a,F3!1"lH'fVaC8j6`2`E`!`"JD3!!#iNPCb!#1r%a([a*2
QNJS'B!"JXh9QZJ%!S#!ci%lPIGiFSGjP#drhc9B"i!&K,!3hBPd4`DA,Yem`%,[
RE)(lK3B16VA"pfQJ-1%1`DA!m'RBJ1%"`DAiS+X0(4%L2EHlP`)&-!*[49&AF'&
I4iSXE*``#d8V#"&YT5"9,3)&J!!'RL)GKMd3dAcK65j3B!"F*N+#HKKQfRa!35j
aB!!#)!3-PmF!J$RNdZ%,`!55mkbcm`*(S"%4`4XP!!"6-`')S%Ma3dF5&AXhe#,
dmkk200Sh9kGF5J-J)!!"i!X3FA1G`D@NKHHrX1FX#J"F5JTh(J!ErK!ha`Z%[SL
((Jb#$KY95`'(,J`3F5Iha*12-)a2B"*p&%8C-pUFQ!d!X!%Q$GRFXjeb-0UdLad
[!!#SN!$DkUHNS0P3K`%M5NiqV"klQ6ZlXS!)%%$8S0P'hU0L&q`"V`-!i3A0c3d
8$X%ZiId3QDYH3)%%S@B`%"&dAiU6[i$&EPZCb+jHVmi,R[X3i3fqXdX*L"!"#p2
LE`PGAh)',3Q8!2#kdHB&!D!E%a%!FM8FTi+@5E4m+%"`+IH1,#I4"-m0hZlG%+%
GfX'Dq&!!(8#fCU1H*d+ZJfKbf[F#C46EbBi+0*(-4&!%U2%3)+mGA#VKRa9#)p3
#)*hKbEjIJ'!!#e!$BY%'I,&G'434qk8Gd)`)!#h+fCIcUb6S`JIbZ#$b*"m4)#p
mA!S1jHh@,Irb!E%,&Ei0!f%!II9!J%95F%!($B!#-T8%6N!&+4!4VkXG%"Ea(F!
i@eI8)K!")Z#Y)#!#Jc%kFhpGD"-4l+3GTa,a(L!#DH@SCC!!pf93&R+K)R`K"98
J"%p3"93!!LK`!dC`pJqK4YSa"Y*F!"BJ!Q"Jq)K25Ra4"&-`"*)I!d*Jq3la"FP
H*K&[!HP'U#G+"5d3!eCa"&`("d%E91M4FZ#,$ZAZ%$4AJA&E$fIHpB,epA@IEL-
epdY`q'LH)[B$03iK$J"`6[)!!0#!#"BJ$4(3!Xc2%G0!23m%llSZ%5fK(GXI!3L
N3+pp6"%KI#PaFhL!#!Z!eN$&kX*hFcF($T!!RIm2i31NR%&(#``3rBSD5N!"P"1
cJ%[+Ld23!"+K6J@Pfq$r&-!YB4f65ZNi"!&)Fab"P3N!D@U$fD!!X!38S&*KJ+c
$!3B%C%1"!-!1'$Ih$GK0NdP9"CE,09P[efYEq)%!)!)#J-CSEL82!%J$F!B43&j
+B(4Fi#H"2"I%k*M"`U0-38lEB)kNT`#B"Vp#!bf!DH$!3+CYK!-K#'03!(VN#)J
JI-l*cB%'"5!#Z#NiC6Bf4!B"64`Y)V#Q8m&1J&p%+!kXDIPX2`Y`!hr%"94[jN9
mD"1)`*U+!cY"!JMJ!$L"j'+&9Pe%k!abjHP8JXk'5pj#(YJ3L@ef-4hQi!3#3,*
SENE!Pjd,FI2bU"J!F$cf$4SB2)'3!*NSJ!%L"$AL@1`MKe!F!X,b`3&!6bVS`P'
fI!)#Dm+&"Q!A)M+3!2IK!!!`&)DMV+hJ-("aZi+K-)3)i!+(eD"QL!`4&`$!B@f
&'Ml$Ke#$F"J1diDlN!!3AN0MD,Ybi6Cd#0k``S&$A8J'ak&X-iIKm#&dXlCb$-q
K,h3)l+3HaN1(X&m#!M66Kqc`)8!cQ@B-i@&!G!MS`#'%1)#)b%+F3$#%"K'3!!@
!@RM`'+)Q1hJ#i4G'a&('T3,#IV')4A!FFUPeL-L@$`jM654aP"8((,Cm8Z+$`f(
la58qK2f#`k#C6(3)d!b(*F5E5""a@)MML3$JjJ3%N!!(%Kr#FkY%4G(QM%13!!F
8K8rJ+BM1F"m'""`@%)428J`)0@JU3X9Uq"#-Q&$DL[D3!!LbNq@$"K""!F!#8'!
0(+b)F!XE9&NX!&)J,Dl&N!$)6P)Hd"X#8Q!)""BEClZqSVNa!,Q,$0bcA[39H8)
0qSZ"d3N%!F,)6RK#@rQ,6i"!b)Xi!"'Qi6Jd0iT`-8S"%8)Za#&2U)0(4`S3!9m
#%EjKK6-h"%!++%E#+(ai`Xe"M9KJ09V$3eMP3Z0J&)IjX$B5!#a`'fFL1@4X3#m
`)J%b-![2%$P-L(!!XJ9'&a)4%L)l#A(*m3!%aM%!*LU60$1'%r%D)J)HTb6'!"N
3(6`TL4M#JeIr!+15'!*JBN(F`SUQ(DAMH8`Y#BiFdX6Y1"hT`#8X@dbadF'$lEK
JT-!BX!0#J!-TRll)Q[BMA-3SRHS1pXAPBb"&3aT)N!!2MLIXPreS!+E!&AJ#GN!
1$,02`a1JfAkN,T8N$dLHL'!6bmh1!AT)i%*Qb!fj%krMKf4KB8$lG!q2adj!APQ
XN!!UiS+`%SF!,YK*$BU18d"&+!'13"N&(8m!HIJ!XJe*14!(K-!Fk)`2`5S'4HG
M&T8!&8J#6H"1P%Cb+(b5S`'`NPKbC&9'FZJ0Yk0rY!0+)!LFJI6B&FNKZ)L1Cp+
cKFIVG5T1K5TJ#3H`*j`+a@D$10&PZbIY!!(iJ$f&4i5%4Q)DJH(EHB9C`JE@JNm
"!4%!"1JpZQFI0m48fK!Qi8e*2KH3!!+SP*QT8a*TUMf%--@D#-!i!`""K`"`X#G
!!*KM3+K!38%!IS"$*mkZ&p-j3#Y"%6@h9N%35!%!Z!m2S4fm$K')I#K@#a`0V`X
8))++8*9F%83B%QT%#!3!%h$QX)*@B!aIi6'3!!@cJ"E8!PY`#h"Kr%#%DE"$!-"
VBJ#)3!4BK,,!PqMCHLTJk'F`A*qe`&N5`hcD6Sh58k+PJr#kK0"6m!Yd#J#3!,S
5X,BJf`ai!6(J"Vb!X"!4hX&1#J!I34Jia8e%fV60%3!'H!if2)6"-l[fLkL%#&r
U10J#!&"a5N$XF#%kB)`TR5A3!)+!!bXa%'b!D53[)!0BCY+C!CTRBr)cl6FYYk-
AL!%Pi)5j'BMJ$J$!0)#BQSN!(!$FG`Jm8+!BNjFYfV#!1e3(2%Ie#!&FjcTK%G!
4**S@(T!!%5jJj05"%%"RpN),+"k0#NS'K$Ya!FCE!*!!!"B(T#JKmi)fq3F5HL#
(jJbFJAKc2`J,FQY3bkFC1,FmZ5!LPd-!"`$J1Mb%TY!5l!XIq%P0J8[C&hV`",G
B3%!#"`m,8*AiN!!(e1E0#(#(SKc%"ca!&4f#'1L,bF)K3S39!!$q!3#B!jT*)J!
Ml4$GJ0i#1&RYalM8K@3h'Q`RlZ`))#$S`,&N9i0Q(J2iRAc"MN%%6U-GrXk&8i2
0NPh&J"Q`0ji!%r"9138!X%i"Z!m3J3$3J0I,5ZNGR06Fp)T!'))1!#+SXh0#$J!
!'rK*kSa,Y8r+fGfJi%0S%)VS-18##'#e)J,1f!5'!J$S![ijbRC5XSX$%l%!B)N
6G*SfKC9B#bLJ-kdH-m)i1+2U#`MK46YFJS&3!(6!mbX$0mf"ASPJGL+Db`+e%$i
Ql+h,[C%Q'Z98%JaHcdPdLLeb3A&15cJ'kmc)JCCQ3Df5#d3BQF$+'!3!"C!!c2!
LeBYQXHX`@B*Za$cSc0kS(RGJ2A8)fU**)-*YL&hX!K-`dEQJ%CiS(BLL*`+09*B
'%HKk`'BE4QlXdI!&HA'5QYRP"!!E6R1#!$3+!p3Sp@LM%1%JA,CCi0JX6Z`)3@k
!aq#Y"cUTX%#@((NN5d1-$PCRJE5$ZE%!XD1,d!l3*!KKfd0B2Z##0DfriS68L-@
NQK-JSV+4,SKJ+ZI+"R3)2q"`P9)!X%TE+5SpA!,3P)B,Sc#h!N)-1&aa)0(p!m3
*!(+T,6eFYE3k)!9!m!2q!6q`4Kq"&m`$5+G-)4dTN!!%pq+C4P0S#J#DD@iJ$IS
ZQf,6EFS8Z1NelDEJp*Z+8fdD6P[#4bLQae5B5J4LDNb4D68P$BaZ)2K+H8SDjZN
l$DIk,TlH8`"J6rXT22@QqI5IdY1"ZNr0+3"!TqT8+,$6BfT3Qm*KFUMAG-`e"BN
+!#MU3`@S!1#LAP5+bP'[k8AYTKSeSST8L'T3%@T#*3S,eCf5dh'+8I&T5f@T,R8
J@&0V+Nhj+6@YUGDdT,E6NcS8f'Q)D`QQXLPm"+&k6BFUP5'U52@S+P@MbP5,UP0
0UNd9UMT96j!!"kbI&mJ$lE1BUNkH1K%%J$A`UK$K-!Q"#"!!Z*BJi&Sb+A%q"!%
!$33!%,JjLY-K(#D['"$%DPJ9Ea$c(K$"2m!2A#Fim'N1jJrSJhq3!1q`Jf!PV%d
"I!'"BcS!LQPLT3Q-eE(ZXm@k+e,#Bk@X!m#b6PE'UPN9+fHpTJQ!*I$9Ib!!`%&
L&DepYE5H9L!`@P9Vc'!*P&8!J)$9'PYRDrK+!%!!#cb!$2!*2X%$X+d,!,GLJ3b
3!!N`!A%&"8dKZ1C@iQTF-3&`&Dl-03-ieq3UA$r!)rJ!(q#h8YIPDJJ`3!B)"-M
eYR*Al`THYqY`lDl(GEYqJ8aJ#$j!*RJ%YM@d!S(D5PZ2U@cGVLeK!+66jcTIaiM
V"!$mY5AiJ!1`i3*XP3-!L02!)Nji!'$a+k+M'J&f13b!Ka9KaiKk#E#aLm!e@2%
+"')A$iKG!6CprJ%(%f$9L`-)Eb@@GU&Br+THP-1'9Dj!J!%%!(#`BQrV(`!'$1!
!i)-D'e`K3)ap!$[fa5B!(jXqi3'*TDiqPTT"25'EC!r!c'1b3'!!k+m,Lf5MV!H
XAFr9a`D!I`KPGmk"cE)Y!A-Nf#S,!!CXJ5@c$q#rJYPGX9p2UiqeVkRdY8+!dBT
JA@GaJ!$T9!$iY$ZECrIXkqLc42!$p&8!i!pmQJ$3UecV%A#Y3I"I"`+r!!6miKm
F,NNE%!,"i3S%Mi!rj)0-q`rbJ90-!)UJ!QJB4D!#LN!58!3ki!bN!9*Eq4D"+NJ
6RaB4c0J%!0P`!+eG!$5!eNi!'8"V4d!mk,@r&K%F!Ab3!!M``E"0"--a'5"E&Y!
-T!N'+'q)N!!!5"-$J!'NbD`eBJrJ#I!(I'!63-!Ii!rJi0&'fR&,EXZYZ6fhk$E
GUPYeqfhj3l[p"qmfh[),HHYZYffl"3IhPL$i9cmEhSU$G2#h3-$IJJ"r#`'+``$
!"l83!5J!8BX'&%#T43)+)08fA"9J"&$!!RLeD#$K)S!CL`!5)3lSZ!L!!h4F##!
$1Li)#!FQ0aKdA##`(a&!%""X#'!-K)2Y#!*8,J,)!)DJick!,B-!U'h(jEJD0b"
dA+'EC[m"2NLc2UhSqPG*@h5"3G%&"d8A(K6GSlYYTkl9VETBeqKHADfEGDNZerf
kAMIXEPfafhA(VYRGYKXU)2`$B2!,q%(E93@NS"@FJ943"8*")4!(4B!%P)*b8!T
'34'`ZlqJ(`##$r!2'1`+2',!`!(!!3Z!"N`!'6J#iU!BL)*#%!SB33KJ"$%!'FJ
!,#!"B!!(`!!BJ!'!!5IV%"*G4&J1"!!)T0i(!(9E,qYp[E`d++4H"`"eJB'6*E!
2!"4d!#L!!%$HdqPl4'(jp-)BJ!Nf!!B`[Ji!!b4I!Y!,J`)#!!&G`J!JJJ%!!3B
!+#!!`!!"J)-%!!-m!1LYK40"Ihd!3)!"!%%(!!3D`2b5Ad#!!!$"!`!%"(B!J)-
!B(K[!L!J!1$!!8##cH3"%)%,!!31!!!,i!!m%3B!)eJ3p`A2lBS"`)!EX!0q`"#
B!BHD#8b"+l!&[X!B1!0Vi!h-J6Z`"rl!)$J%Lq!46))r-'Q6%@6!$+#"-k!(m-"
r"!"L)!j%d4&%"qcB$+!"0U!'p)!FF!0D`"rV!J0L#mLI"X!'e-!*@!-lJ!Z`J"I
J"YU!#dJ!)!!-))!"B0q#JJ[S!14Q"A#!$4",Am!!m!!lSJI!!"Y-!fU!$6JSA#%
l3)!ec)EEX"YH``8J!#b!2`!"#!!%B!!3J!0dJ!q!l)*!hc!#51!)D!%X-!6BK4#
)!PHJ#%L",%!&3J!3'!%N`!Z8J"@!!Nc!&e!"+D!22,ipN!!%S%!$B!*+3!3X!4h
!"hM!$h!#6F!(3'%r-)@Vm%e`!5SJ#kq!$A#BS-i!H!&KH!c,J"YXKY'`m(`GEcJ
BYq%i2)IVm"h1`hZi$rrK3$b)#r'r3F5+Q"'6i4bmJh[`$hjm@k!6If)PF!+@3"*
H`UMi#8IK9L`8VR!@hX*Gq![RBM,FLihK,aE'm"J#%'-kE)IaX"lQ``*K!N#Q4+J
"--!!X!!`3!"%J!Y3!#4!"U!!J-$5!J)2!!JDmZ"Yb"hJ!95!$6"N'`!$8!!HB!&
-"`l`!4a!!qJ!#5!3X')UA)kaX2C%a`("#i2KZUU,HI%CGXGU1"kriAPXM1ea-Mk
S2b!Rkf5GM*0hXNrqb8!j+![PR#`8H2*1$JK(H5MMC&6UN`qU8dib8,NR$f@L6*%
!hNh`!e3a)A*9GIS4LN-Ta4CGL`ii'2#Pl-#AHP&fkJ9BJVe5Kd(YQq"5GS*V*L3
'!'$"k)!&F`JH$J!F8qe`PKH#!R""1&'YYNirQ`!%!,"b-"pK))!eP8#lZX%iQ!H
p`"R`9!CJHL@#!1!%!U!DS)")N!!#X)!!#!)8S"VS!4)3!ED!"-!!S)!&cY+(B!!
`4l4c#%+!A$k%+aB3ZS%+Z!FY)(,G!A0`")c"!pJ$"1!*c!&Hm!lq`#l)!pjJ#,L
!HF!,[N%[D!IZi"pS!ZDEli)"),LPhH)KF)!"3!R)3Ej3!))!%b#G3#!#+)%33!%
8)!53!)!#%!ZUPM1!!rIKU3b!Aa!1GJ!d3`"Ji,D8!"H3!+B%`$33"3+J!'#$+G!
2rN!eN!!$eXm1Q)0PF!mH`4jJ!'R!%Gb$6Q!1cN!HX!GRB"GiJh[3#Tkc1h!'M8!
!H)-cN!!,2J%lZ!Ir!$RlJ9[`$[E!([J'UZ!Er)02d!RD35DidFjJ$R##$F!0cN%
1F!BEqKHX!c5J$q,!)i!(2i!0#)!f!!JUJ4-i!p[J%m`)%`!",!!JQ!1E!*S9!"C
3#0`!!F!'@k!I@)%,)!rH!5#`"FeJ(RL!C[!-GX%Xm!ArS"(mJh'3!!I-`4rB"aZ
k'6cRGk!0-1FHk!E[i"l`JhV3$PVd0eJ(Em"&C`09B![Z!52S"ZiJ8Vq$(E#Kpm%
Gk!8YHN26JM&`!e4"0p!(i-!Hr)&IF!RH3$E3!QZ!'l5"E3!'RS!B5!&!`"YXJfi
3m9i!(R!("!!Ir!0XF!p+`#53!!)F`"CJJcrJ!EE"'-!&0Z!Aa'Nlh3rX`4EB!rD
!(l5$jj`,C%&Ef3I0S"rF!Pl3$`Ve([!'-b"4Zi&YN!!%$X!rH!6GZKYdJfp!H2q
"TFE8hrSHd))hm!R836p3"U$J#lJ"GI!'h%%f8!)Ij`[i!cpJ"#i"&!!&rf!EC)-
h%1)+J*Iq"lm!()b#,L!*K-!BX!(`B!aiJQdJ"PL[)CM3jZ!0p)(N[!1-`6eS!lf
!Fq5%!2#R`m'f*Y5CHJXNkQqY!Jc!2H!%[5"5Zi0hJ!1-33aiejRk(X##F+d#lN#
)X`G[!"F)!$G3#C3!'$!!l)!EP!0$8!CJYDc1"Rm(!)J!0e!![-%%`!F(i!Y8S$(
!!Il"-*J('B!CN!!#)f!(q-%lm!-li!mmJ@(J!SD",@!'ElX0q!)8N!!2r!'*rJ5
mi"kdJhEJ$Ia!$2J&hf!6r!09B!$X`6Zi"$Z!2r5$(0d*pS%Gm0(1i&[$Ja1!$9a
!0"!qPJ!2(!"jm!Ck!F$@"lrJ$S!$3i!),%%Pm!E1i!md-cp!!,3"5rJ)&cBLF+f
J8*N(32-&!&!ZdB(H5eUl!#a%X!Nh!3'J!-@EfB4UeJD3!`!BI#N'm(kR&Y9)'ZR
dH*qaK-S"#LX!'0i1SIiLli!`5L9#0p2H5+&dEZ@EF0QZ3rT%5r"EP-M[q%frjlI
m$NV,*bjA9"M)1K[%UpXR3HF&4VFNXfa`KN5k%dJ$A(LLdfN'!)!'`4b8F8E3((,
aGjT#)3!!CZJ4R%)!F*Xk`8Ll4J"J&H3F!"!,!%!Y!!#j!!!%ZQ(`DI6C%,`'!'!
E!)#TeMl6!3#)"`$!(J#!c1)2QX-!#!"aH1-f!-d8!#D!hZRH)@"D@V%AT9A!bN`
+!$rJbI#l!0!*Ti"c#`#[)J`%J$)3!0+!$``!X(-2j,X!8!J#3#))!)`J!$5#!!!
*!J$4)6UD)!"mJJ"3Q&""!'!&!5!@"!"E%!"d3Ci,!-)J!!K4C4!!R%%!1*TSU"X
%!(%3!-j"!%J(!@!G")!T0Jqq3hM!F`)!bVf(q&!"")!'%!!I3!#3!!!"F!)%3!S
3!#e!!-J!!9!$"!!1%!!p3!!-!3'!"!4!%a!!8d!!9!%"i*QhJ!!!!`,!$#aT!3!
(")!F%!"d3!$N!3(J"`5!)"!!KN!!,!)"!!N%!#83!*K!!(3#`b`!8)%!D!8#)"B
)J&NJ!'b"!1!&!J"M%J-"N!!-")!cm-m#!"[%F`(3$35!1"!!k%!![!-"B!m%!$i
3!2hJK`q!!M!!$X!!5!!$J!%-J!M`Mlq`fPfhr)'dNGZ((QN$!$@MCR(B!%"dFhY
IC!8VT@*!h++,G$`AhX*EDD0))If(AcD-,Y)cZNKRk4FGBZk+MhlC9#8eUf)a2DE
(BCG1c8aP4LGY)*fR[r53!#l83bY,Mm-U(D@IG&ATdS@k8!p[0KfP'r@KIY4$HNb
IkKKp9k$d(aklK(T9eqP%2DalpD%Zd'9&5kIUD$fRDh@Q$Y49T8d(hLmGV[p`TQl
4iIV'GHYQ(D`lGDXZdR'k5*rVTM#UGh@JlQ"iZPfIL(NpV*Ge`6j%)rT#J!8m`5'
icX[@1LIl3R$R`"Xh")%3X!(D33NB!q3!!84CH$!*jN%9k!%@3",)VMf`$"4f8f!
'h+!Eq)0jB!bX8#l)"Ib!'6#$Ii!"L)0&M`"3M5$KJ!r!f6dlD"IY!i#da`-K!*T
014+i"`JJm`3%%c!"2-%*b!6Q`,5Jm613!!'H34k3!!C`S"3NJ#6!#Fi!"dJ(5N!
+A!*(F%k!!!JB#-!J%#5!9FT+(i*Fi3H,3"r-J!f`$r5"1L!"S[ee3)**m!IX35S
iR5Q!''J#Z"3%mX%0Q!%c)!*)!%-`#Xa"jD!!ZTd4r#BhF!I)!$mS%6FJ*prS6d!
&IX&qlqrr2F"$!%JJ#3L"#!!%!Q!&H)0U!!'3!)#Pqd%`J!LXK4639Tk!#,!#P+!
8S!!K)!'Z`J0)lj3!&#5"p!i*%N%%!!3M!!HF!aMJ#1B[!9J#M'!Fa!0R%14632e
6"2c!%C!!!2j`$qU""`$`k3m5H)),S!!5`6r`"#ZJ#+`#A+!*e!!"#0-6S"[iJ8-
`!Zb"(XJ$P)!Cc!)+`!J!33C)"*pJ"Y3!2U$EKF'0PJ49i!Z3!(NcMqB&I#H3!!5
3!'#81cHQN`6H`5%!"%X!!M#"8i!$!$%L!!333"2FJa$J!Z5!0`!"XH!"U!%ZF!N
``*,2#!P!!V3%mCi%T%%N5!"%3!p)!8UJ$!K!PiF!L)!5m)-Mc4rUJ3T3"-88([#
"$k$Q8m#[2je0!![`J6*3!SL"2,J%-f!#4!!CF!UfpKL!!e6J'F3#%Y"@mN!LU!F
c)!F`HQBJ!c+"2D!%NU"G1hYSAhLR[CSIpU4!!!J!4P!%!)'0$`L0)!))!RK!#K*
"CRS!#F!#8)*3-15P!!Q)"3P!#d!"Dd!!NX!5B!BL!!'iS!%Jh['!*2MeK%$B8i*
J3!JS!5p)"L&!Y2-$9,rIkd%"N!#Y`#$03i)Hi!D5J@T2!Q,JEj%!)8!!)J#%(rH
Q3"5B!6'!$UM!,8J'4+#YC)*%3!MQ33eJ!Xq!"bJ!5j!!$r!!&IJ!0IrQJi#F,q!
P!F$I&FVJK#F"cC-)*%#4ErM&!G9$J#"Im8P!+NJ!5J!+h+JN-!1N!B"h334![!-
"4r$VL8"k(`I!J!K-JKj`!S$!UCrjNL!%$)"qS!!m`GK2mj*J"EJ#R43#$%%I@!5
C)!1N!J6`#(K!0i!(dd!Eq)%b%!V1`55J!FQ!$k!!2Z!(lJ!GQ!'bJ"R3!JB3"qa
!*[J!Aerb8hl,6rCAI#4`"$TDi(1#@@$`!@`#-!!6J"QF!!aJ#'!!)J!#)F!"A),
Z(J3N`4`S!HNJ#8!#1S!,M)!-N!!#*`!43)%2-!"``6R!!B+!-iX!*F!%!-%`%!6
I2`682dKlZ13[33F(`-!6J1Va!ffF)%F6M&,"6e"J!*a[C0q@i4#!!I)C12$r"B!
$i#4JEYd#ri#-pQla#bMD4XF[[!0h`,M9$[`$e`#r!+Ia#rE!2l!'r!%K6[&@-EP
[mY[X%UE8,Z0,Dp!D!#1Xdj!!-#5m%r[%33&Kh!ZhJ4S"&,3+l!)%mR5)'dKJZ+%
%*S'X$`-hD@J-b8*i3A2J-(m(Er#Pa#h#a`(QJUKf8iBLFVB!+kB!!%$AZ!)4#2P
L`M8kM-i+"`$J8-X!!2!-'%fBM3`heB`$!-!j!!#S!e)-!*!!rHK`2"c54-dS!&R
'fa3!9!!"3!DJc33!54c"P!)`#%aFIP-$"!!j3'`#Qa!"!3$Qa!3%!&#!,0,""!"
9c4F3!)!"!F!B%!$N#ejF'a!!)&"e3!#3!!F%!(e!!"!)N!"a!B#XPFDeFBi(@F-
*P&8"`#K!a`8!$m)U%!#S,E9!(rI(A4C#9$)3!$!$!8!dF-JYJpC!!)$eH!-"!$6
B6H`HMK`l%!$%!pe"H4!!q!1BR#BR(`J!$S!!-!%)!,eG"b!!L!#NR!$!!JJ!-B!
!B!-)!$Z!@b8!+"0+!!q#b`N!9i!!`!8)!''!!&!'#!"UJ!$`"L"cbK`c*`!-!J+
!pa5L53)#`#9`Q3N!SB!!B!S)!+Z!!2!+#!#dJ!#3!!X)!,k!!$!-#!$)J!$3$!J
!dS!!F!d)!0b!!$"8Q!-#`$SJ!-!$!X"kS!m)!2r!!%!!((3$`)Ne!IKZ!d!(-!#
)!!2!#6!!X!!$3!``!0J!!m!1-!"%@8A!!+!%N!!6!i!8-!"B!32!&M!!J!%$3"N
`!+J"!m!E-!$3!30!(M!!q!%$`#"3N3`!MF!!)!N-!*I!K$8!K!)$J#N`!+`#!`!
X-!$8!J0!,M!!q!)$`$!`!#!$!d!c-!")!`2!06!!F!-$3$J`!*J$!i!k-!#m!`2
!2("`6AkU8X@dd`&e1ad34pS%D*YKD9-aR3X"'QIS'CBfSU&P'"S@!1L@!R$cABD
M)@BBS'Q'*aeT1"V#KTCKE6JD[SDcB@ZS'pU'Q#&[Z"[QKVkKD4JE@SDdS@jB(*D
'V'&`1"cqKUjKFJJFCSDXS@L)(&SfTk&[1"fZKYHKFUJG1SI&iADi(AD(c'&ik"f
+Kq4KEeJHRSIMBAUi(&U'MYd"!0Np"*CGC9Fa(3#BAHb5F'afRGeR&pU0GUAGDCI
DVADYA6E`fX9fXeeY9`EFGVRGEYIEE9cY6(#($a&hqH&aaar+!lf!,l!1p!2@`#h
3!0`$fm!Ym'hY!cd!)l!$-!$$3!l!,rKSMX!BJ!#)!GK!2I!+V!&Q3!lJ#-3!Di!
@B!dF!Lr!*`"["9i$@lI@!IB(NGBZm!X%!b$!LHII9ASV(S&Ri#&i#Kk$jq!GI40
HKAIKCAJEASIhi6d")Gi2-1+9H%CLLTIQ43*rfKr3$e!$)B!+m!ld!Xr!Yf82C!2
h`"b`"qJ$eS#leJ"S!jC!,G!+I'[G3$h`"L`!0Q)YX!r8L0E!2A!(F!2r3#i`)hS
#iX!2d!rF!fL!1B!$c)L!iL(`TeNGNpkCTq+TH@bHQ`IRbAPdRTf(jqPjI*kI"qJ
*HS5HSBIS+AVcRU1A#8"kNYir81CCLQQH*p#TE!2pJ$p`#R3$rd![3!KN9rC!*f!
2V!%B`$eJ!i#!rS!p!!8d!Zd!"L!0G!$d`$Z3!2(C!)l!(V!'E!%j!!Li$I`"rN!
Yd!k`!9T!0p!1h!&mSMAJ*`++,CSf3#3fHmpHY1I[H3,@AJ+!l@Plh*kh"qk*Hq5
HZBIZUA[XRMrclX9lmekpGqrPHqJL[bIY8AZG3#X`,IB$rF!FS![m!@MLYq81G!(
23#L`$VJ"f-!rm!im!'j!RGJ1l!(D3$G!#l`$DS!@)!pm!V[!'M!%p!$I`)YQG'Q
,$N$(H++&Llk!Y$J%f!$H`$l`$K#*B4r1Tr2aI$lI$a,dP3&$Ap&hp-N!5Gr5er3
pI9%I"dIe@AeBRpE(pAPpB0m'B22TM!*H*'!`EJ('9!fJ"15+(Z)ri!jd!lh!,M!
aHJ1ZBU&P$pL*('-h8!Zm!68L2I!+l!*XJ$$3$I`#+Z2Cf!li!H+!YhJ(e)Ji`#m
!0`S$f!$Gq!d3LF*IjAIjPAfD(qIRqB&qSKrTCrUKIUSIkqIk`Akb(qeRqq&qZKr
[jrX"Im6Gj'Fi&RmXAKc!#)`"##0'`$#kDrl!0p!$'!*l!!I`$P5,Hd!rm!jB!#R
L!Q!1B!203#J!)q)$Y-!H`!PdM)G!(c!iiJ-cSL1J$h3$V8$*D!Ei!la!(m!)D!2
HJ+3i1#*1rTrm43(L@38Ji3)%))"&`3,i%$5!i"F%H-4)J0DM!)KR@B#49JHi$EL
+'5#jj3piJ*&@$k!M4PVR32[i$a4DN9Bqm!m)L6k0CD0@[@qb5m4#!`)!0Q!mSMe
0+!JN$iK3Q"P!i+Nd"!SG9!hRX341N!"*S,M4"!)!$4al!38U1`$!&&MAi#CR#KB
)!'L"C)kc!3"iJEm+#$F'PS'c`"R)TD5"!!!,a`DkJA!J$#F(!J"dS"f)"aC0Hq!
14fMjJ808)#J"$)+&i#'B#!B!Lf!,d!Kf&C!!S#5i%P##PL!QU!PH!CaJ!1!*JS+
L)#NB!*L#U+!Ub!UkJV#J,-M'"3#eB!"`#mS[ZQ"KdJ[qJJ&!-1M(&5$%B!"J$#+
$bZ$4G$3eJmpJ0"J!6)10A!"J$@+$hS&j`!e#60lJI"!1MS2Pi$QB$Uk$lH!l'!m
#!I1J!&!22J%#!"8J!'3"hj-!-!B)!'M!-(I-h3%#!"mJ!!3#d*`d4md*!*@!!+!
*#!#IJ!!3m+8#!S!V--i*!%TE,b!!#!-#`$%J!$!$!N!di&8*!0Y!D58!P!-#J$U
Jc`N!p)!!N!!2k&N0f"6@!!`!%X!!F!%-!0ZCj'F#$!!V`!!!!``!0F!!S!-d9J-
!%6!!*!&3i43`!'!"!d!A-!#)!32!'6!!X!%$3"``!0J"!m!H)'%9!J1!)M!!2!,
Ff3#3!!N-!*l!!$!+$!#S`!$3#J`!XX!!F!X-!,c!!"!-$!$'`!#`$!`!d-!!8!d
-!0V!!2!0$!$N`!#3!!i-!1j!C$JCpJ-*KY*%!2K*jU&BeaQZP*iKD,JD@SHki@Q
B'Uk'i'&c@"c#KXKK6INEiSE%)AVi(+U(jU&b+"VHP1(KFIK6&TAN)4$(8aU(X5&
4ae*1KbjPG[K5hSC6*9$T8eU9@199U99QP9cP9ZP9ESH1R3)J!84fDPGQ0jKPGJV
!!'"Re4bG!61($"3"H-!2X)De"2i!![!*E$MPfrT@&*aB$0B*`!i3!PI!))!0QNU
X9b+3!,dPJ(TPBRNj2@4l`ar!"DJ$U8!)-&IH&`L!)'!%T!,2!"P`ih%"ZB!`X!r
i!RCJ(EJ$1!2hJ$q!$X!$aN!%X!J3CcY!2$!kIJ$a3'Uf%J3!JX!%!(jC)kA,$5!
2%!!R3$hJ$+J#NJ"C98V08Dq,%+!)i!#(Km[P%""c4`!(-!'F!ck!,a83F!"a`$2
!!F`$l`!RN!!)!!1LJ##!!R!#mB!hN!!$d!043"&!!A`"'-!J%2HP"#$!,92d65)
%598d"(`"[!!-)!ci!Ep!2C!!"dL@2KCPD9PQLj@!#Z##M!('J!P!#2KZJN!#J!(
iE*BADUB-E!$-`"L!!4!$N3!M8!9!!0!!0+"P#AcCN81![&8!@m!m`!#F!1[!2h!
&"*FH(B"PFI`ER`$N3`K!!#8!d*!!%#)$SN$**3!S!LP"(5B#+!)SJ#LJ##!!`Jd
J3!S-!Qb!MaN$p#T4!"&!#J3"%%!J8+HiG`!@!Q!UL8"V&4P8"(`#T%!1m!ci!lq
!2R!)K!16*A%J#2!"+S!P)!TF!0U"+8!)h'D$!!C3$G!$(S!a!!0BAJJ!+#!09!#
XJ)3*$&5B58!%J!6!ArR!-h!(r!$6`![!#V`$2X!cJ!iB!l(!)h"4cJ1F`$p3BU)
#IS"`Z3*P))!!%+!!4!'&!JJ`!3J(V"3Q!!3)!P2!-h"MKR`M`$fR$U!!S-#218F
"!UL!)+!+'*P!!"'3!'35!8)!J("Fm!*a`$R!!I`"K%!%%!*i!&M!1I!)a!,R`)k
*#S`#qa%3m!'3!!,m!K*3$Qafr!'5GR#0QAf!-L!%D!$m!$kJ#L!#dJ!aBQi)!#V
!2`!02!+p`!m!#SJ$%3!Rd!Gm!$K!KBN%L!*r*J,JXbN#4X!-d!6-!4M!-3!$)!(
'`,FjC2),p)!M3!9)!1eDF[F$B*V1*Ji!V)!!&B!Rb(1J!N%!!`!*S!#%J"P"%mJ
+Um!l!!)X!Xq!#B!2!!+`J##3!!+)![+!$i!$f*UijSYj,i!c2LB+J!J`!N6!*&%
"P!%83"5J$*b$LN!T)!,%I#$!XjN$(!0r!"+J"!3#59bQk9r+IUf!+L!"m%mb!#6
`!c!!5F!&8!M3!dq!%6"RKJ!B!#VJr6!#B3!'3!K%!Sd!%Y#VX&qTT6k3!'mf!a+
Q-H!!!*`0A`83'A)#G`!p3!LJ!NmR"M"F-T`+3'MQhN8!T43#J!`)!IkFc*N))%k
T*J)J$l#D2kC`J`M%QMfQ)"!$%!#f*K83"#!!%)!&J`"dPbr!c&Pc"J-9J(NC"33
#`X#1+3U)!)kIXdN+f*G&C`'!rH8ljP4P#8R@!T%!#-!rL3#R*b13!!4!!)*!af8
%a!!0*LUJ$%3!B1H%'3PB!G5!f3N)*!#TT@8j!l3!E5HrS`US!U&@C$KLdJ1!J#8
*!HLGPqEV%K"!2ULHf#*d)3*%J!JJ!FLFCmlVB#TjPciQN!#*##!#T!$l+ARf+NS
!'a!+V'%@6!,3AD)!#!$0+@b'RMNR)#!#Q!"5J-mTf+LH)!"VT@PqQE#RIdN*5J0
S!$"JdA%!rB!`-!FJ!ZI!UA!%(!'N*6L!$Y`$4d!mX!L!!ZJ!,L$QL3&2`$M`#"J
$qF!lS!Ii!$0!"b!')*SHJ!d3#83""YS!X&XH!,!"TEPplTf[5dZ3!!1-!!&AqX2
3`!&2!#F3!4`$#%!F)!`NA(,!#h"GSJ-F3#*`$)J!qX"h'3K%!cM!%%!)&!%4`!H
!!D!Pr)!"`![N!AB)(e"c4J!9!"&JE!i#`B!Q%!)J!Cp!XrN"-$UK#a$JHLDGXDF
Jd")F,M*G`c-8*)$a*5Z&AdLCiJ9IZ4$!"YSRpkPLNJ$Y9JNBDC@!2q+i9@*ZG-S
DZ5@MN9[[!!R),b#-ipBqS!)UDiI,MD8!%&2jcK1!-6d!iX$i9SJHALF9$R#@)D*
F8(+h%"a6"58mS(FH8b#!2q"p5J5UQ5#U@"jBc8Hi-)QiJ1-AAXD2c#eY%`3N!,d
Zj%D$d#$-%q`%Uf'0Q!Zh3@F3ZB!,iJC28LKS%*44XP!(!!$MD$P+MTkMiqJ%KkD
F+F*()`!!H%#4`!ChQj`YA-Xh%`E503e"#6Fb@6dE6M%!!#J$0'4Y3ZU!,Gc!$*I
$e)(+bJfA``%!jS&!%)F"JJq!Be0%)R&+h!TJY6#41J!8al"-F9AF&IFUL!'MB!a
b#S*a!F!Gi%9''mF-)@$'"3!bb533!*!!0Ce!!"!+"!#Q3!$J#q*aVd!!8!#jN3(
!,a!!%!0bC#'h$+)KM%JhmCT)F[!!Gk!2"!$p`$EB$Ak$%J!j+!#BJb1!!'!#a(J
#3%$f$ZB!!J"AkJ-)!%3!,5H@-J(fS"6!bf@5C!"!1-c&!3)!+0N(')5NC&`k5Xk
PT13K)!#%D*1!!*!!#E#5!N!T3"''F`,!,5!!f*)IB6YRDPB$`+3`b4+b!`+!21$
2-C-hB9TCI9N!e142L-3-!#l!!%!$H*0,i3"J"!`!6%"8H%i1!&l!!%!'E)8$J(*
!6r)"!i!JF"Bk![fN*Q"paB9ci3!3#bL8!d![d"F1!-R!!2!-@*3$`$D3!"J1!1I
!!-!1k+#6S6m`J5N!GKJ"B!%3!"`!dN%!S!!%3!Y!!-`!"%!13!$m!,2#PDFU%!"
A!!(3"4!!B`!"J!B3!&iDYU!(%!$hPb&!!$!#")!N3!"F!J4!*d!!L!)%!#T!!,3
#"-!X3!$N!J4!S"1lA(4QC9`(jF3h"1U!LTH"%q"%CUHJ*M-2+[!'6Q4bk&CmNmR
9G4(UJ@V4CA)1+SCkS3kS('U'kU!kU"mUKSUKMUJLkS0kSUDS+'U,QU*qU"mUm"D
LZUJVkSakS,US+1U+kU*QFM&UKRUL#J3*DLBAhqLS!3'%fU"QU%HUJcUKjQ83!B[
UT0+S6fU8LU0+U96UP'UP9UPBkT@UT8DT1UT'pep&A'4Pkf4@hSpS*3'!P[KE$J&
3i&E#PA*PIePAhTAAe$#k9kU9&U-2X!qX!S5AX[B1C++q`$i`Rh'!m'1J+ULQ@hI
!,m"J0CD2C@3CCPD@Pf9QZ9PfPTpPD(N1M*DPj@QC@Uk@NjTV13E!PV,P"P0EhTB
IjJh3$q`$lJ#[H39i!4#EaFLRfSc+QMHJ#i`$RYmqm!fm@f1!1i!$l!2"d"M!D4P
Gi`!MJ!--!maA0r!)A!0I3"f!$3`$[QS`8!GF!ed!(H!kTSRh3$r`$dLVRm!hm!h
F!C8SqmJ[q!2hJ$G`"3!#pL9qU9rbPhfS%3"J#TMM6B&jB')!#HD##AabRD$!JaP
K'Tm@*SDTBDi%(#DSkVjX!I`!GSN(J!#VJ!H3!+VZUIa"RdU`HJ1`3+E4#`KZA3#
rd!8d!pI!(0!(r!0G3!Li$h#VAF#bfJAd!IG!&r!0@!2I!!R!V#kVGm#bZJEF!B#
D1r!,l!25UV6k"mKSpd#f@SPbUpd!$3!)D*PFTTF*C[DABLDCD@DLQGI)QRN2Y*P
[CTbjGGDCGfDHL3(XQEURR`PS#TU%TU'*D#UDM+DMU9q0!B2![hS&i!-rJ*kkUVi
$[-$,UJpF!dh!(r!1f!-p!(rJ$f3$lm!hX!B`!$p!aFUa(J"r3"'`V(B$(1Zk9Je
m!eA!&C!!X9i$p`$*HURG!jhS2d!)i!$KJ#23KAi$GX!pd!$mUS8!$X"f9!20UJG
`$h`$f'Hd1@f'!0AQ$h"YmJ(CjVECEAkEi5B4-'k@QqGQZVPZYT[[CVc*#-bEpHD
pQ@rZQrhQ[aP``Tq$!)-P#2J#mF!Ui!r`!c!!2P"l59SfBpMk$@4XVS$&@!p!!51
@2e!0J+hE3$hJ$B`$)@!RkJY8!`6!$G!0-!!f3"$`$8`$hd!GF!N-!A3!$K#iAJ0
h`#[!X4DZ'Q[-iE(@!IF!&F#XdJ'!Dae3$CbX#qXlJ(d1R8ARdFQ(,TdS302jG&)
98LI9DA9LR9TRm2PeKTeMCpPjGYUE%B$D131`R3[QffN-a*eAUc(3Tei"lk-r))T
qVFDV2P!29!*I3+!fX8kVc8"a&J68!qVD)H!U(J"p`$"`Yh+XA8!hX,FZUmAUY@U
rhJ(H`+M+[Pi$hF!"F!GiV((!29!&M+ci31"D$F3FIX$PLRfbRNM!(YU!LTQcCqe
jHqDHZfI[L3$mRX(Rm&Pm8TM)Tr,*I#Tmq5EdZ@"+Rp5Rh0Q[ZJ0`fLUJYRk`"5Z
VbLp8!eA!,d#i5U[6+U4f$q`"GB#kKU*GV"QJaNV$GJ-J+`j,XYS"XX!Dd!hiX2a
"'3$%rJ&$,10Ua)kXrm!GB!E8!QZ!(F#YBUk!3!,k"bbJhB65+@BqS"(S"&U"AU!
Ck-h!JGi$(LJ)+S+5S#BS#B##UU!XU!X+JmUJ0+J0LS0HP+-UPfPLFUdHE+Vk$aL
XbTU-0Jki!9q!V-SqlJ(M!$Z!!H`$MN!2S)+HX2h!1&#q$J-&!$l3$6J#0d!3B+a
q!id!VrB)$,(F!!Ak$#"TP!!1%!BF!RL!aaTc9!((DL%!$q3$Pi!Hd!d3!TEV0h!
2P+*kk1XTbXUHF@SJ5L3-SK"")CTJ#&hd(3*`BUQYbTSEHcr#XF1X(%[QM9YrV,Q
&ad*dfDVNCQjp@qq@2N[49V+'UN0JLU+LJ)!U5KqdSP9Q4"#-*J@b+%,l%,KQDQX
aG3@BEF%X,&"-q3,!!-&UEK@ZjTBS1ULQ@lTDAm8[H,54eUjDIf9fkJ8c@LipSc#
3!$4+6j!!3pCS5i#0TL8!`$DU"(UM$P`[4@QBSe`Y1YT"qM2Vk*I5MVkM!%!mDPr
-Sa)0!'#2LS%!3$i+!1bMF&42mSm'T!+6j&+3!0*`##NlS*!!kR!0D8J(N8UNKL"
&DJ)%!"BT$)#4DU58B"*!a38!9TcQp*''T#X(!J8lQD5V)%SD!+LNCea,qT)'!$(
T6&U6hU3"3%kkN`U$2LP3DJ`DFSKF!&#8"J"(+IfPP$+P6LNK#C9+T4k!!&$EMR)
U3&EU$JS!2!"['q8)!%D!!%#@NU9QU@IQ"3J!D@P!@-cC!D'N-jF3#J#1J$@R5Nk
hUf4e1pf#!K+K!-!+#!#b!#h*%3S!kpc1f9Cp95RK2CI2Z32)T!#J$j4dbBa#&dh
kBal!!%!#$!!UJ$Cj&!i!2-!!)!3-!%J!9%J&$!"D`&8i!*J"lq3!)!F-!(M!@"J
Fj*-$!#3`!&J#EU%S3&!1!+l!!%!,$!#k`!!!$%#8!`!c-"J1!0M!!1!0F*50BA)
h!0J$qP9*+@9U'43!!D!"%!"LL`P!!,!!")!-3!$J!!5!$d"j%J"+!!&3V&J""%!
5*!DBTqJT!D#HXUF%J(X+RmURiTNR3!"J)QB*,%!!f!)%!#p!!!J$"!!b3!!i!`3
!0G$PeQiGkS"+eFQS##U4+U&#U#jUNMUJ,UN9USEkSPjd0UU('U4LU5@UQ*ZPfVP
EDTllS-+SFqk8@U2ZZ94UPiULmUJ*UTi,TCU9KLk,UJ!QZScZRG[S2VU1EU3,k8k
k+DTMe`!S!Q'Ukq4JY%lBM)2K!"3!9JmR%Yi-"+h,!D$$#3#J`!'!`r%'VC-!-!*
NEh,U8D![!!!I!$4cLRi!kjbTT&q4INGYV1[V#J@XPfDJ$i!!k%,4"d)+",,9FC!
!Q1@9kT3$N!!q'3996$Ve!D!$J%!&!!38#3*!+E9P"!,"MbUed[kkL-kcHe)pAql
Ar0@!$,X5SE(,kN*-CS%'F!U8!)S!d-"C#J2j!'JC%1!!"`"bpJpd!pkA-"!$h!'
G`$PJZ)f1bq5eDeN&!`N!U"N4+!#E`$'ef9#l#J!QJ1eUZ`J!YrXk3!'KJ$#!I'#
Hb)BVGh)"!iq!)D"b)K(6C5m9$K`$Mm!R`!%3!A#!"!$J43)F!"i3"jbmb%!N)!)
3!BP!2*!!B"3(G`lj4XhJ*V4S8!!"Z!L[J*QfKKd"p!!F8!4N!HSZ3C!!l'i!F+)
5S'N3Q#D!DiS""!+8TldC!a!#)`!&N!!"$!'LSi3T#3#IBN!'J1SqAle-`[X3)"X
+3#[!$`!"3F!(%!f!RQ6!a"XZ9,`16a3J$j3#8X#@!3%33rI&@5!"K!$E%9MU&,&
I6%IEaqj"!$F[##!"%!%0J-f,m`kq#)$NZqiN'(9+I%#qE9a!,hd(LfB(Hi1L5Al
"!%J[2L!1T!+NfE(,lK)"'S!US!8`!@l"Vl*QVU[2A!'`D'kp)3!&S!%)!ER!k)J
"5!"NEhUT(D3%Vq#JNhBT#S%!2`!'"!-I`$3`$LJ#T!!N%*C5["B["!!&6&lbDF%
&"pJ%P+IY+Gc%"d5!m$%3*"KiJ1+,"!bpIS-%3!JS!*R!cG[f685@E`3Jm'NHq!A
lC@d%[FF[k!X%2!$8,JF`"lKVr8!pB!@N[ZZZE&8%3!1QJ!j!#-5qDUBdF!m3!ZJ
!0C!!$bJ!')!q%!%3!VN["b!%e!#q,r#V#13%JJ#EG3lX!Tp!1R!*H!0h`#G`"Y!
"B`!@F!bS!mP[G@NahJ29!"BJr@DlGfmJd$CT"k(!)'"ID,rF,dS!!4!$Mi!(F10
HIi,!!b!)%!#%3#)J$K!!jkpCi'PZ'C@!qcY%9ViLJ-`C!JKm$X%m-!`F!Si!"p!
$J!2b(3(!!q!"Fm!`B!dN"fdI+B!%q!*$lrj,l8kVpi!q-!,S!k!!2p#Z!30r`$B
)!S5Jm`$J@313!!FU!#)`G5B"'!!d)`Pm!kRP2A!+d!-BJ"!`!c`#Sm!j!2`Q!K3
!%V"XN!#R'%!a-!*N!+C!,$!kBJ+N`"K3"4!"8N!331Cp!qM!)k!1j+lY9RLJB`8
#iaIr"!qSA+m$!T!!#KKH#%$N!`+F!(XQ!K$q!J(#`84%#q3$%N"`jJ'B!(b!ilY
P6!)L32NE$UKF0Ure'`3%SQm6ZaF*)!"&3*2*R+S!4)!L3!*N!A02fbF+)!+%J%B
#![#rd`%FF!lS!b(!mNS#E*r@"VYl"-!$SS!U3!L3!!!K3$`3GBS!"L`KJ!aM!kN
PedX"D-$!j`J!!BbpLX$lZ3QVL2h!*maSMSiA!!N`"SK'LN!-2!am!ZM!)9!0!!'
3!!!3!!C3[l@`4#-+r-$2&a"!B#%!Di&l"`KX`d3!$N-Ip*kd30X("61qIS-qKJ8
$!BP!jSN&S`!J`#Z)Af6$GL8hh'3b!!3!1#`14`%F!!M3pS8##!#`Ni#b`aJ!k6[
XLJ1J`$cFFMLpIc!i8-lj`ZFJ+!!3Cl%#(cj3%)m!&F$ZQa![a$%!+j!!"!#CV*5
+'!am`U(`k-K2AF4&J!+3!2`Z[p2Z)+!)!!)Km8LF!bHM!F%S)!@JHX@"69!Nc&D
c&8aF()breC40I2lH[#'!qVX6pm3aAb3!$LGa!%!),"#i[#+I84`)I-2K-!N!"FK
@6l()&`Ic[p`Z"(!%C"C&3,&#$h2&"l!#B!fJRZb"#&"k0Ue4!!%J!@LpA'm&N!!
"#!%*-3BJ#DJ!h-"Ec(33!10!*r`*@`+LX)T)#Y#a4S"Hr2E'[HM!)(MYLX68l`j
mAj3#V3,Q5El""d6!&Ma(`F3q9N2@F3%#jLp1A"N6!CFajDX)f!$Pm8$J'9-9fV"
S20mTaDEah)-*L!,R-#L`'P1lad9QJHVb!l-aXQX@3!!(3+m(56)!&+J&LJLB!kG
#")!1j!2H!$r3!AJ!k)!r%!23!4h!"4!"%!1k*ciJ!6`!i`!IF!lN!Kp!"Z!)a!)
Tm!'`!5!"U-![!!0,Z`Q4!T!!Zh,(1E$$)a!3!ii!qq@j`(JJ!!l3$`-$Ki!$J!$
J!'$!pLKd5F-S,b5`mX)"iX!*820b!%"!("!""!-(!0*4(Z0`biC2-`em`Bi!!Y!
$0*N)`*T*"+6"d-$RK3B%!86!%3!(6m9Q@S&-fN!""i!Z@JmRZe4'[S-$#k21&d6
J!#!lDj@eFG!k"G&Z3$$Y!LA1*M!J',05H'qljF[q!blLrDLRRPZ6XJIi#T4ErF!
hi!DB@bKDJEDY`P[Me[Zi$VJ#bPVXG3!Bb,[E9U`JBdreR8Sl&(Lq%N%2&#l%P`J
(MT`i(5k2mVD,@#*JX8*em#X,"3K(P6QqJ61N5l"lA2Jdk))Y"-8a"rS9V1cVFJ!
1cU&ml`S%dQk)Bqf5-J5!6d-!2!$a`,$mkeB(l!5'ma%FbjYZdQ$Z(KHJ5e"5Z`K
!`%L$X%rN4SI*FG"@Y"@G`DN`'Q`,2%N0`Q$-#'9#QR,"'3)(4X'm#"M-#2-"TX'
GY@B,2kA@`MSKA&pd`JdHM)iiBqRJ8!U#C%BZ362G!!"JrGL"HLd1Prh!"L&18lV
"8$-b&PPP!G3fDdX!3$#T!%`F$6"@)#"5A#Ld"%L4rB8@B%8'!'4!&rI&`8ji`"G
jc"`#D&`!m!L3!*%"`!Ce#qU#T8!!F#H*YJ&!,[$("A,(`$%B!!K1d%!!8!d%!(M
NM"8!P!-&33$`$J3!p-"j`*3+I!)!I6JIb,m@J!#`!GLfS*`L@FUj!+bFEc[,eB1
hR#ATbiN"`9cI[!BBF`)!Fm[FkJ%'i62R26d#!S!PS-e"K(fTGMY,CS3EBH5X%8l
1'b('T%ZqFiKT5MJ1&*-#3$c`Q0D%bF`c53&3BCBT#R#,hEFp3$Jj!#`"SQN@)1#
kNfl!!&!($!#XU9QS6dB#!`!Q-!"m!V6T3ARKlJ)$J$$!Qe+8KD')1`#8!mDT5+N
2Z(95jXleR(B!"!!*3!#X!$9ZGTTk%3"(!#jc+`5j"-#3!*X'%!"`!!&`"a!!Y&X
Km*i5!*-!!6#GK3,j+3(J#K!!0iU9#k`@Hp(!PdB!I!-%J$P!!,!$"-"ZQ3q80JG
!!I$T9J!&!!H3!1)8!#J1$&!!h!!&J!p3!"3""3!68!"-!3A!YZ"JA0#AA4@$3@[
3"-%'V4N8G!8GGV""Kp!MY!D0EKd!"KepU%'$G"Gd3CFfTmdX0!bG3XI3+h30c8+
cd#jd$5e$E`FfG!p0aFM30l32,83(d66d$me"cp"#0"#04&-a"4d4283rd@Pc$Qd
+HG!Ap!jp3CY#!S%(I9b!d&6d3N"#Lp"0G,Sm%A64C,3)E8CId@9d'Re'Vp&UG"[
04Vr4ER3F$8I2d@Jd(@e(8p'@VM#3!1Pf,G-U%I6T`R#L,QR`h*Lkpd@UZqUUADi
ZV$XZa`VMeLp3$G$"(b++aJmF!(j!2`!-K)!rE5DY5F12UXD`@qc1,3@`@G!R-l[
#P,0l&&3ar!)rd!rm!US!*1fZrBL9p$j3L9kdaGNQ(DMb!hp!2'",r`-FkhpelYi
jF3JSc4@c[ZpZ["X3c,[eEQL*lqUlr#i'i1m#[!)[m$N'&,a$Efk!m#Um%!($UlE
U!kYd0I!-,)U40,m35hH![N![J!IB!mp!frS,[&[l`#2J#r!!IJ!i-!m-!YG9T(8
-r!-F!!m!"i!$`F!aF!Gm!"hLehJ-2!$j0"cJ"R3$Zi!G`!jd!0%UL[B0i,&rJ2i
iUX@1kTBr-+U@!hr(dC[d,Ve0lkX-p9S$8Qp!329D[9J[I1bc'F4IEpKV(*1pCLm
SJ2DqJQT[rY[f3QbqJ$k!$q`#UX!Y!%krdZ,dU%T1i`)eJ"V!SMPRVD+lGJId!0X
!FIB1@'kGk2[i$Z`#rN!ld#'q!Gr!,P#SEJ0h!$Q!80X"8RA1YP@r!pe!Y&TL[J-
30BSf89qdr)*2Zkf1UY2!F9!9PlkR,`%m6,HqVfrX+`V-[JKQJ(ElBX#k,qrE!3H
rJm$`fmXB[jq[AMbMq3$p!$`3!e3$Yd"B(8lc"q0d`GS,e!(T!)[f#hJ$2J!(@+K
q!lT!fmT86kZZiMlJ!%M9Y`"9REVp!YV!2D!10!-*Y96G$hb0#69BcE,LLU!e['9
@!m$NPPUYYSkUrm"ai2m#`!+`A+dJ(m!*m!+F%M6!$h!%2!&A`"G`"V`"rp8I-!S
3!ZYA)h!*I!+R`#Y`#r`#"`,r!([A!B!$B)!Um!`ieM`eC1e6hp1"9ai3$fc+Ph9
Q6HDG!CHe(4!1$!2hJ#2`YZd$i-!qB!rB!qc!$R!2Q0D&+T[S$P3$V6@Y#&Zl!QF
LbmS[-!"RF"``$J`$$`$Gf!I-e`0e!m!$a!&IibUJ8(X![29a3!IE`AL`(X`Im-&
q-#!X#"2#KM$9Q3L61Ba`"1!)3m+5-#9X#FF!Q,!Q("Flak"`G%`+Qm+SF""`6#%
!1S$J93A%%[!!(-!2C#EqJ&S*!2M8M0B[J!r`!-VX,p!0B!(&P-9i"I`#[`!Xi!F
!DRE!faBUZ`1@3!1`$G`$BF!`-!XF!,r!Q1f[l3)1!$[!!r3"X28hm!Ad!D$Sr8K
DZ`(hJ&Ap#qJ"rB!kX&@c!p[!,T!!B52B[3!SkPZl`r#`2*`Jfm2iX$l-$r[$N!$
!@(`"#-35!%&m!AHp#$%MS"!ca!jaA)`!4-3C`%3m"P6%&h%ic&dl!M`!R`d+Y0*
KY8@YVIi$ih56h3rd!A8!Hrd0q!'lP-9i!kc6[S!r!+MG!@N@INfU@J*5pApG93I
Bp`"Xl3Hd!miCE2d+q!)))aiE9BrCB%#HADMQ!Ahf9Yd1F!0l3)EY$EaY(IEhCK@
$!&La9V`RGm9IX8B5&Sr&['GCI"DRaF5aTXd@Zm9`-AQ+!-c&1ECGA!VA"SEe*q!
$F01a`#2GDNZVX$56rBR+!E8!a2B0[)rm`E8+TrAD[hBR5R$l!iC!X8e9@p@p3'U
YE$2EA[8UF+R9LY+fa@eYlpRCGQZp2hVElS"&,BSH"dF[E#`EZmVXEQem'd15#S"
Z,!,`aViaF)`@$mI&mA'F(0IEcE%RR!&!ak-M!M!G9`(9-AIp#p68qf-V[5LkfJ@
h,)eH8mTU`#k3!!%UD`6hYGS,I*CI)`KiDc[9+6GTIA&IDPMeaVd0j'cV`#6`FE[
Dpf-cd#(LfAVf(Y!(q0QYp6k`#l!$km!Ui!Ud!bThEbhX&Y))-XbGl$,)$V*m%#&
IS"5bh()KCmJEFSIm)BI))h+*I#+Rb#YbLr`LamJcFSd-!r-,Jj8M(8Z8PJ4h6be
,m`I+'Ml3$K3$9cGSI3rm!Sm!,m!"q!(a`$M`$M`#2`#Zc4qm!fff2Jd1I!2qY!H
`!m!#"cA4f3&`!he!2'"Ym`)G!#p0@2d$,%#$I3m-!iAU(Y!,q0N90Mr!"mJ$p`$
kbJ"`f+*SeVB3C"ES3TiXH)[5bqkI20!+"EGPd%!S,jH'FRbT0!8!R$I%eNT2dP#
hk$e,Ii$I&KkELCCE$$ImZ(p(@VKd(0$6eP[c&Nrl!I,5+&SRA8Jlbm-d+3@-cXT
$JDeXL"S(!N(mlAR[eUpfC)eZkGB@VD#kLAU!9MHTA)#AbJDiUX%XldNY4bT&NI!
$dR+X5bhIb[*3"EjYbGpVYDX)Im2Di)"r[8[[i1M@25h8MZ$M9V[Qf'N'lA+V!bp
(-r-b193[Da[iXJ@b,aY3r[,V"!!%c!$!`)``(maBH-)-!#c-(&c$l#Yp-b#2#-F
66-c[P-@m"JBi'V0ae$&rc!QTb!`!N!$-5rB')p+Pc%!0brcH[F`ammcFDPc$0M2
1(!$Sc*jJcqc&Z3%NDG$F#Jl04I24l(JScEPJ!0!d2mdkDG3m03F!96-bL$9Vc9b
c-qJeJmhUJ0K-0T[0r3$DV$B,C!*!fr`felDK($Si0pI0[HdXGcF,!'BT*JR-R3`
RJaXJ!03"cDdSL4!U!J*!*)$0mD86)6LA%Hi#Yb3laeDCK-Mi5DL-)q2H`$!T!$#
Qmi"k+p"0B3p!3qF6cVICT!``!13!RHN4!"9@!3-!&c!!M!'SU6bCi2i"!i!KJ"E
fNj[!!#$KTJ*e)@l+&aB$(Hi!-!eJP--T1[!BRVL8BDLa!2M'"%!'!12bPJ5!#d!
!e!"QX,M!ihkR@!!"m!83!'B!!@$GB![!f4+F#"!!N!$!I%S!1,N1"b[3Ra)!ZJ!
"%!aNZ36!-d!!F(cG!!&!$K!!kd$r6!$mck40!$e!&p!(Y!T3!-3!"3!18!$m!!@
!%9!!0!%&!"93!'`""B!B8!#N!38!(*!!P"F!C3)9E8Acd"fd'Ee&Tp"Xp"IG3T[
3jaB+,8AAd&kd#Ue%bp"KY"(Y4$[4@lPBMND2j6Vd%if@Vq8DY!aY4BIP2E35$CI
$j@`j@aj&Up"6p"dYPDr4l,)Fh88("AkjAKkB$qD#H@&1Q"rQKRPLhNBlGK!!$E"
(ed*pG((`!"`!I0P-&a!`*J["2L!3M!DmR5[B&$`!r)$SpCSa(k6-)Le-HEM5VPk
,,ZKA6jZ$m`-SeS"!AmE&C!HNY'RZkqBliFd(!!iF!0M-3Y!2a!FJ6fGZDBd4S6P
@'""X!#9'L"-5#eh$`IVQ!qJ[eF%HTemTb[5!TJN+X1Ea$9)'Qm[Qf!!E!!1N+3$
@YCXUE"k,0"i!#+K[2"8iNHrSjUl"%I#E"`"9J2hAFJcRbBCS(K$X!@c!2,!20!+
D3",3&'`!cF!jB!LiEGi!9I3!q!"l`$N!Tpd$X`!mi!Ac!0j!#qS*r!-m`$c`$2`
!NZ(b!3`!0Jk!!C!!!B3$YEPdl["q!09j!8!9LPlCH5*c5r9P-%"hMJIi!h!!$!!
'J!'53#6$!1!"-!$TK!%FfI`!k93Dm3&i!$i3T2-$26ScJ!F`!-`!-+$E"HP-HS+
Sfc%$bLm`8"@6jKZ1HY'p!3*J3"L!T4-&k[RJp3jS[#dh$L!#U!*-`$!`RamZ$)"
p6J$X!8CeXa8&0!8A!(rJ$-L1aY3i-!!)iIc#2!!220mr1(p3S9rSm3"qbh`!0J6
1Kcj+B6Klh"P`(8qli)!LN!!+c!!SqS3cKXAQb8k,rVYb!rJ!$1$H83'4$!,!$aM
C2$SH3+3I8h$!mJ%'m!1rkkJqUK[T$!!h!!cNGUSkNIkNkhE+,a#!!H!`jd59(Q&
Jk9Tk-@VZR&l8M#&3`JB$S*G9c!I%!9C!QGjb('QJJReZ!1`"E8#&p```!#!k3I%
(31M$!#!`$c!$jN!rN!!*M!0CRaI-!-`$B)!r-!c-GZ(k$2#R``$a`#$3`*Na--#
cYC-FkJZ#,@"-mFAT3$a3$'3"N!$kdrB$*$U6ZRUaI,6SE!!dJ!pJ!c$!K[l(1!3
B!$-!"bcT`!!iJ+5,0$%km-S-'!1c1M#JT$-$-!!$J!qmkZc!V-kaLqbL&aM3X(p
[FDekBGMU"PXk4$#D(c(8c#2`$E!$pr4[A5[U!kR!,c!-m!Y5Pp6&,m`"K`!B`!D
%!qE!-j!!CL&1*J!l-!2B!rY!12!22!2X!$m`$#3$cd#r1J``!$2!UEkc@qJm!$b
JVXm$rd!-!!m-!LcF!H!2j!(h!#r`$f3$l3![d)*q!YR!2h!'H!,+9$pJ#c5m-[!
pX!qS!kE!2e"dV9hrHT8pZG8Zj`3E!!IJ!3MlK[klCJIF3-I1!f!$q!!q`!(NGM!
!((#UB`!FJ#3!THYf'VZ5hV($!kqkNjkN``"2HQl(!B!")!$1&4$`!8)kN!#1"r3
"m%#@$JZ!!I'!Jai1f!2$J)"H1GJ#BX-`3-dJHZb!dd8(p`-43$p!"I`!1rXr%!q
iAcjlT29A`3((`#$!!*`$i`!mB!D`!h1!XMB2r!,2`2*a"M5Xr-!-X!q-J'!!2M!
-B1Mr`!rJ$hcYHm!m!!Z`F%XAD*d2m0hMeYcq#i$Y-`#GkX3H!FZVhmiI%#k"Hk6
Pdj`6rX!I`f!Tl-I8-38$01iF!!i`UM[`(([+MJ2S!N5kNKkjF`2!+`-!!'lZX(U
QrU5,kNab[1i3a1Ti3$q!$mMZB8!qN!!2l!2c`$e`$ZMZCX!Y%,)C!l%,-2!""1m
3XM[mQqX$U!#*Z(0iEfRkH2-2(!0#ZrNk$$3!88$ZHJ5`!H(@!`$Kr3--!$pJ$-b
d2)$i6VkElcf!I[i$I!0I1aS+!q!cihV@P`e39IR!1K#Z[`-'`0aq#m`#'B!YS&r
&!4Xa26!%U!1J!+5Zi8VUKQfQ4ELl6rPdL,1KFqTk'B$&$X!!XQKS2V)$Vm`(2e!
9Z`+jR3@2$f$`(IX'c`d`!rJ!P-i(N!$Z5cSHB,P[R`k"b!i$0!1B3*B1$S3"V8!
QX!R-!$F!J@X!9!kcJ$%3"J`#e-cJa3i3!q+fH`i"a!&8J!qIP+,TkX8Bm!m3,Tb
$2a!2+!$qq4VB"J!$[KQ%a`GdkiD!&j!!pFd!9rXm`!C)l4Ak--!$$!-c!$VP$-!
!QNqbi3Ar!'0m(P$'Kq[03)AQ#F`#-d!-i-BV[m`[24!%&!03J"d2[A%aH6a[ja#
`!ED!(q!0d!3J3)hq!!lbF!!$%(U0l(p(a5i9m!+FHj+qXC2ZS2Z6[V%c!+6lU!i
$J0IJ'`#3!0!$Vk#m+%r+Qr)cJ!d`"[MZP8-XB!L3!11ar!dr$-`"4bmf)`+!2#c
F,YqXMcGc3$'-)FF"Q%!3`!Ni!)E!'m!)'!22!)5()S-63%#i(Xfc!HCk09qKSr+
rJ'i(!bJa$3$ARJ&39If!'9qK!`-f`"[J$kcaBF!k$rH5k"MFGDl3cI1*M'(E#$J
$`3mrB!G)CM-k"$$4'd0!!-F1$M!$$I[)$Y'AkS-k)*!!X5rdP2c'RU3rkD5lU-k
a1mS)32-ebA2ZRh`S(`E!!a[p+6p3N!!hji!jd-UVmZYjm&k-mZDE1I,q`r2bide
T$VD$!bi)"r!!(!+GU$(`$m`$2m!H`%[j!Fm![r!!J1dS'JpJY[99-`"Tc`bFXkf
"rmiIC!0RqcYJa[-(p$@h+VQYmp6jR3c&hr(d2"ShQep$LhX#'K!J6MM!U`i$%1N
l1[$DSeIZ$`'X2UUrkNBk2i$"dqVB[A6rh(2XbQpJ[`hUCDSk$0!2'2Di`%E2`YX
$"m!iF!bipblm1q#lVqI[!$$3c92fhCaPlp,AjjNpD6i'c!'1-Ze5M6m$pi!KN!!
(M!-H`"c3I"J!2-!cS+$r!`I!,-#J8qMH3$$!$(J$-F!i-!2-p[!!@[)2'!"Rqcf
!#CcYjm!kN!$#IJ,"`$KJ#i`"l-"$$Gc6ZV#"!S#`II9i[('Ib#3bh!!1!`%F,Xc
pHIlFi`'h1SkZbH-a16SP2k3$!hL!NClN*iKi!$$`X![jQ2ac2a+h($i0'p#kiqK
pJ''2#C!!mTM!2(#l1j6$`#Y[$S`"mRe*AppV"YL-,"*$A[B[I6GIQU-F%m''`k4
'",&AA4",+4p!r-XHh[!$dcQ-IbFRG-4p@'rFhq$m!3C)EVd"%"fLAqM$Mb&iZE8
(e!0XqNl,(bMkmpEr2@rClI[!YeARQf[h4A$q`c2V3EbEcaCa9Elk8!#fSHN[Hk6
4j`YDLG0ecZG$Errkp@2B(Q#%[VQ91[,JjYEk1+MQh`EiMNKZCE5EISLMjVY155Q
Shm[EjN1"ND9N[1b%mUU21+hQVli"%1Y,"6BqXMq-iM#)cUpH3'Qi!4$LC$KK"qP
68++rR3!)j%#4Z@3Z,8&EJC2J**(,SI"dU"`FC"8)!"$-(Y#8FA0iF-"++J!!k2[
mrViI-I-%JiHHiiq+0*,C%-6,G-adS$Q3!*!!1Na-M'EH`kP+J#$rY$*hEch3`1-
#A+6j6@EL!`3!3m!8P`PD!3%!&a!!J+62"b&qJ+JKc)&+UJL-NFr',GKlf('Z3#6
ZadQJ3K3b50'J)G$JlY'*6c&Pmcp(@Fkf[GeY5fi+!#p!h4`2aR*"J!"`"!J!5B!
!F"TE!IUJ!-!hGj+fH$+hc2d"!N!K-2!*!!aK0ZF*F(-"RcFR5jTcYZ3kY`c!Fep
928F121-[BG[IcbAC$TJc#8d1!"U!C9VIDZ-h!(kV1SHQ6X!!B%kLNer!!"$i$rl
YC&Fi!0`"!`!kIJMXNfcKlM`!R!)$`#Z!Qri#!m!ai*X@caYPF3SChJ0UT8QjFed
!"-!(3*!![`$CkhD+23GRi+P$6J#F!36!'b!q%`"r!!&`#"!!Mi"'rJN3!+F!!I!
+%!#h3)"+!"`$*6N"F!hFc`6!18!![!-%`$e!!-35!I3$8!!3C"p!!A!#&!![`!+
pNaF!4d!"m!38!&G!!I!&&!"R3!(`"M$P"F!I8!!F!JA!)e!!A!)&J#G3!*J#"B!
V8!$B!J@!,e!!'!-&J$03!&J$A9X"8!i8!1a!!8!2&!"P+'6#!"J!&)!"3#f6!!E
!#Q!!c!!'`!i3Q4J!j-`8B!"X!3E!k93F&!I&!3*!("""aF('P3KYA-9"FI!BJc-
$`"4@("3(a8&a-)89"m9"F6#&)3$%!A%!cT!!@`I!&,CaE9`EemDeF8eK'pI'YA&
YA"[AaM@&E9`E&`,JffeF'pI'YA&YA"[AaM@&)3#qhFD&!2Kf'pI'YA&YA"[AaV9
aE9`E&`,JffeF'pI'YA&YA"[AaV9aE9`EemDeF@eF'pI'YA%K!,iG!N!F%%%)J'q
hF@eF'pI'K3$iGK[A&,CaE9a6f-DeF@eF'pI'YA&YA"[AaV9aE9`EemDeF5%!a!&
a-!"XA-9"F9!F&!I&!3*!("""aF('P3KYA-9"FI!BJc-$`"4@("3(a8&a-)89"m9
"F6#&)3$%!A&!"#P)a8&a8"`8"m9"F9!F&!I&3A&3("3(a8&a8"`8"m9"F9!F&!I
&3A&3("3(a8&a8"`8"m9"F9!F&!I&3A&3("3(a8&a8"`8"m9"F9!F&!I&3A&3("3
(a8&a8"`8"m9"F9!F&!I&3A&3("3(a8&a8"`8"m9"F9!F&!I&3A&3("3(a8&a8"`
8"m9"FE"a&3I&3A&3("3(a8&a8"`8"m9"F9!F&!I&3A&3(#!!M$NFm*LVAGL-C(i
!$!RUa@Xfj4`!Q[Q`IkB6jrEj!rMQ@rY&JBIV2VUaI2lmf&XC8lYcEc@MP9[cicp
!0Z,kZ,iQRGTr!V!ZE`kFYdjR1R&ZRjFkbER`BK283UqS1[@F#e25HD6e#34H-bf
I2crf9XE8lYaEc@J#r"0`![$1T2I,QMj'@VdqVKpT13#fr3lq#I`!9AY8mjl(jfD
kCpkX'qFA5hkqRrIRrhQ!2U#r!`9kdS#J2rJ-ZS0Zc8ISlm#%rUGMk,iE(-@KHqM
9qVlMa[-,[m!Am![i!k[!$p#[cSqp&Er3@qQ)mb0ri!Nm!5I!LI8"I!)rJ!m3TCf
)$i"[p3!i!`H!)h!!2!"r1hm`Q6X!$i#cD`!F!!l!'I!!@(KqJ"P`"MJ!$i!$m!"
dk*9$j@!'(!!q`"r`$1L)k[Zh96mH!rl!(r!*H!*r`2bSERd#2m!h(H+%k@1kXZk
C0q['qCVHTLF!EhTQ)kI6kIb!RBkRm`Gk1TmqE[hT2d#J$Q'!!B5kKekY+k0*K#e
`"LMF[m!Am!(d!PE!0m!*c!2cBfr&,r4@1Z,mU+aj!Nj!*QF%2!#I`+Kf"Fb2AZ-
"31!F!)l!!G#K'`$QfJH3!0Vl!!FUJSUJRJ%2J$PJ"2J"Ucb#LU"@$T@$'A!!r!"
rJ0%qSrN$heEpH!Mi!hr!*q!*r!(cilK9C8GDRm!2m!`-`V@m2R#X*qYQZY&XH+A
Ta[Qc(UdAlG4k8f!$A1[H3,DqVAIVhlT32kkAkqFkeci2I1h2!,[ZVX[keiqmVU@
cC[8kIp"E,Gd2J!F3Sh%#mm$mb!R3U60DEc@Mm3FkSLI`"*J!AS!$m!4i!Rr!*j!
!m[),cX!Ci!'B!@H!!q!(r!!@hKR`$h`!RX!"i!R3-j9$jH!(q!&Q`"R`#CJ$$S!
IB!#B!*9$j6#h9`k9`aP`$Z4NcX!Cm,6l!pp@rIJ*q!2IPMr`"mb2ieD9(@Pp!Mq
!rRpcf1cq!-kZXr2X$d$crJm!l8)ld@kdle,aL0,1Y$[Y8,[86V9El9LleMlDChe
HHi8HYSrYCAZ)VlDcl@ll1`#hbqedqcaJYbYZM`!(F!$`!JC!!h!&k,M`!%Ff#!!
#qT9D14hX#Tr!)r!)C&SkiJR3N6d"RX!Im2@EDrb"0h!%I!)#ZK2J!$`!02`Cm!P
m!!2@-f!-D!0Q`#T["[J"IS!IF!Cm!ZD!"q!(a$H93qA`"hJ#PB-CN!$'(`0G+c-
!YRri$m"NrJ!m!"I0*q!*2!'IJ!2`!$J!$i!"m!3B!"j!j5!&9!i(`#I`!cJ$S$b
R'kd@lmGlmVkm2`$01lr`[%I[dh[eIVeRlk-ppqkpJqp@r$p3[Tr[B,[kcVkllr$
lhbkYcZrp0hpJ[q2[+Hj&3emD!,iV!3!2F'5$`#$`#I$jNPEYXMYhbHED*j!!C$m
#RX!(i!rm!Cq!)f#fQfZH`"(`#4`$MN"mF`!i!QRm*q!2I&[RJ#1J#-3hIS!Ci1`
D!3I!*f!1q!"qJ"Q`bUrb&idR8$QF!3l!!8"lI`+TrIf)S"S!"d#(IJ"m!Tl!%q!
*)+J)UJ(J!9318X!UI`$NC1I!H8qlk2!3!!q[b`2a[I`3Am3rhdLm%Xr%qqe2I"3
ra92S9[`r8,i2!eRm2V$&Gr&6(KM2YBIcihb&MXDVm@bm'hqZB9GIJ#r3!-bdR!$
BhP[0D2a#Ec@MI3)SG+DP)ji!ai!Km!$i!hr!*h!&I!,qJ,RQ#j`!Rm!MB!iF!1D
m'A!!k)J$eM2J#BJ#Ul`IB!BiZdE!!I!*Q!-qJ"pJ"KJ"CS!$B!DJd*j!jA!'2!!
2`!H`aDIfpf2P8$R-l@E!'I!*H!)IJ#FJ"931PB-*m!Ii!*A$&1!!R!(2`#I`!hc
60mGErC[MmVSm%0r,rr)!3$!rc"Icam!aRmc2!-Ym2p$-2r0$26ArS'2cfM`h$bT
mmq(m1&qKPr0c1cU[cUZ9[G8[m!Am!Kk!'mX*J1fpeBc',r4@-pSRJ%,2Mrq!#C!
!P`i"m*B[%+Aa#cl!#I!*I!$R`$0JcTm"jYS(i!NF!*q!*f!)9!jqJ"RJ"rJ"CX$
FEJCi!(j!j@!'q!&Q`"P`$RJ#CN"mF`"i!MRC-j!!fYq2PB-IB!BF!*k!'A!'I!+
H`!IJ#8J"P82PF!BFk*A$&1!*R!'pe3r`6GmF+Eh@aY+cqIcpIbr6H`-d[8f2dq[
d2,e2EkFE!%&p06qZ%rA@r)-q$b$e5Me6lp4$p9,p2%$9@r9B[4Z[F2m#NPi[-02
fUc1DMMJrcQJkBQre#$`#qlFrF!")!,jm6[B0H!,&e#2J"mcY2X!Ci!bB!A2l'A!
1I!)I3'Vr!hJ#rN$P8$Ri!Ak!'6#hQ`%1J"p31CJ"IN$P-,HI!4hkh2i(r!$[3'T
r2aS"PB-Cm!Gi!QE!'I!*H!)2J#FJ"931PF-I!&dD!4@5!b$[I!)r`$FY&2RQPAe
,$m3Iqk6jCYrCIrDKr@KIfTrfU6erX0UcMklp-!$EbrDdIH[dYq2fHB"ZRpUEED9
P"fLhdkRmJD6R$rLZ"!$BhP[0D2a#Ec@McBrm`I`B$TTVkr6p@%`j!Rl!!H!*'!!
(J$0J!"`!RX!"m!"m!N+i2l$+)kJ'J"q3!-Chk%E!+Qm''!"q`#Tr!(J#"i!RN!$
'H`)(`!r`$P6Y!i!rJ+!D!!H!*j!!aRm#RX!4i!P)!@B!JZS((!!1`!%3$XBh"m!
Rm!0mdkS6ISm+k2G!r,([h`2icBGRljX@q!GqJVrJ0rJ2IS3ri82S&Mk'Vq&cq"i
qL)qfMrKSU)Rr$U$i+Mk,lq,6UIb"T0F2F,!%!0MH@meSr%*[0D20Mrc"r1J*(!&
T&YPi2aC6MS$IlJNF!!q!dIi!q&BI3'r&,h`#rS!Cm!!iZ`E!(q!!R!%2J!0J"Uc
bCi!$3+bG!3q!Eq8*Q!&cq`(`!p`$9EYDD3)m!*2j!r!*T2'IJ#F`YdX"Ci!$m!!
B!(r!!r!)R!#I3"T[!"`!Rm!2m%fV6T5pQYr5!r((rJ2SEm6jL'j381F("$c!RAp
*jINZZej'Tr)(NTiri-EfUc1DMMJrcQJkBQp9EXf2ieD9V@j9f6-Dr,LVNPX2`$h
`Yj0EpH1-*X$r!I8MZ98rAZLI!+c,kAGcBQUacf#&qMI"lkC1PIT#`DN2+U6k4db
N4AMe!c-YRcqMkBLF!*hD@meSmf0&[3(Lq[a#DMqSQQ[q!*lZ$r`"p@1TE+kPdUU
'X-qCIrS-9UK[l3F&bMkS`1`I-HkM'm[RcfJk)LG!TrC@-pVmL1[MqK!GdP9PUke
r32e)E[hY1a84(Zi$!10qZ3m!R2[@L,S2!,$l!G5llcl&qb!N[@p#h[XTC,rIlq[
lBMJ!%2$,Y35r%!3!(2`iT,Qdm!-!$Im2#I%c0(8ia9r4b"FBI`#JmA2m(Rm!!2+
,r#6r&hIbMh%U2mY[4[)H!3$-,r-r@$9r!($ckj%krb6hLI[ma!(3$cIMYN5rd3r
,I@C+2p2[p!X!82mq128[E36KeCreEreG[`$`p30SBAmX@FjpYmD!1qI1rC,01%Z
)h[CcEcq$HQ+G@*4TI(Y0CUC)S3rJQ8+&9'&T5Z$'c[3N@DL1Uq2UZ$S1Qd+i!D9
F@1'kmAaK41N-$!$@J2(-')D8++jbHXYS'FqT%5cM'Z3f3)j,)@M23+iA!*%AZAB
!qCcN%J#1!!&J#@cN"%!FmMj6ZEi!!@!-E,NR13(J$H62"!#ZCJpdb`9!'22T@J!
&J!G3!*J!"B!,8!$B!!ed6ei!1!%QHJ(J"43!CS$$9J$B!3@!(e!!'!)&J#03!&J
#lIrl(rr2rrArrCrrlrrp[cP3!,J$"B!p8!$i!`KUKfi"'!!%MJPJ!,J!"S!0B!$
i!!D!%@!!1!%'J"9J!(J"Ul`"i!BB!(D!!H!('!"qJ!&``48(a8&aJ!!3"d43FE"
a*8)E9h&3($c'i-`!-)89"m9"F9!F6'(&3A&3(%aK#!"a3"b!-q6@!6#&E9`EemD
eF@eF8pM'YA&YA"[AaV9a6@%EemD&!2Kf'pI'YA&YA"[AaV9a6@%)J'qhF5%![Yh
'YA&YA"[AaV9aE9`EemD&!2Kf'pI'YA&YA"[AaV9aE9`EemDeF@eF'pI'YA&YA!L
!EiF!%!G%%!,JffeF'pI'YA%K!,lGaM@&E9`Eea5fF@eF'pI'YA&YA"[AaV9aE9`
EemDeF@eF#!"a3"`-!"YAF9!F&!I&3A&3("3(a8&a8"`N3X9"F9!F2-C%8(&3("3
(a8&a8"`8"m9"F9!F&!I&3A'3!(icjm9"F9!F&!I&3A&3("3(a8&a8"`8"m9"F9!
F&!I&3A&3("3(a8&a8"`8"m9"F9!F&!I&3A&3("3(a8&a8"`8"m9"F9!F&!I&3A&
3("3(a8&a8"`8"m9"F9!F&!I&3A&3("3(a8&a8"`8"m9"F9!F&!I&3A&3("3(a8&
a8"`8"m9"F9!F&!I&3A&3("3(a8&a8"`8"m9"F9!F&!I&3A&3("3(a8&a8"`J!)i
G!Q!,J!'+da5JL"A,XPA3c!(3!45!%(-b1+[3J$"J!Q!!Ci!C)!)-!5C!"(!'I$j
$!!Q!!C`"@X$34`*)!'F!&6$d+3&!`"ZJ!33"QB86m"V$B%,-'H"bC4Cb`'Xml`X
h*-!L!!E3!#4!jQ)%#$'X2`Q3!,Pd#(K!,!N#3"M@"Ld!#C`"[6!5-!8!!Qk!23!
'5!"F!"*!!L!#3J#jF3"!!XF8"L$FT$i,`5,N`d3%B%!"F1''TGbJ+Z3#"!&J!md
`%H#RiX"3+!#`K&"!!H!#"!'4%4hJ`r!p"B!qqFP4!kKZ35i%J!dd`d4`IH%#!i$
!Kml4!!@!#q$i%!KKJ!83!V4ce-$6&JDNCqdF0c!"r"dI`3'!15a#FS#4Ljm4!&(
Jkj!!QH`$iJ!+J&mm!'H!!Q"JR!'YQ5I`cLa#K$`e4`lJ!HhA3Q!'+!#+N`"`"LK
HR`!BB!j!!"#'!%!1i!%a!-B%#5a#B3![8!6mFp!!%U!(&!#d!"+J"aJ!R!!5S!I
B[NM!HNS,)!&"Xc#!"1J""S!kJ!6J!3+!-A$-d3(hJ"dJ#1!!QBRbU`+%!C4!%I$
2B30#`#Q!"1J""S!DJ!6S!I-r%V#H#J*)30"XVHN""J!ZJ!6J!4aK&(J"!%Ji!*)
0"aJ"d)#3!!N%`!&'!$3!#*4lCi!"N!!Kdbk,d!M39P!!%m$Im4%F!#3!*)!!U$-
(J'Pm"1#"cI!AB!*!!b$!*`!#I!%Q!$3!!R`$@!!5B!*!!b$!0f!#3!-J`$F3G,,
q)B!%kJ1B!%U!#C!!$0J!`3"2-[""!AJJ"3!&i)&XU,N!F5iE+3!-`!0X1)PI4)i
$m!$-J!)!!r!!kNALe`jJ!49!XK,Gh!&(!"iB!L3"Q381!!FF!")!"f!$--GlJ$(
!!4J#()!&-!a%!FM!2b!2#"(#`!C3!G`,)S!03!M!!HdAZ8%#E-XI3!A!AV!Q(N!
B3!9J$S[3"r!(&&2I-[*'QB8[`*bB1S8P'a,S!J!'m1,chI+Y9U+'9)B#!!8X!!c
!2p!!e)5a"'(P!+!#$i#2$(mV!!N!%a"NE9R3!"j)!%J$H#!Z8`Hma[q!-L!(N!!
!3-!jJ!6BJD1mpF1D!J$r34'!"iB!--!')*(BH4#!"J!1F&k!!$L!"EJ!Pi!%!!K
8!8(![ZB%a!(r!42`$6JBjB!#X!AJJ4b!%I!0,%)#`(bhI+Z9U#%#%*%183Q!%&#
eq!"*!(NJ$#`"rj`ad!6mFp#!(B#I13"*!(NJ#b`"rj`[d!6mFpJ!c8%#@!&+!,Q
a"kJ"#J!FF!m!!q5'"l!YN`"KJ!h`'[m$Z)!F!!(`*2m!(R!%i)&NjLD!!Q`$@!!
MJ!*X!bM!*&"X!!!8!#J`!JJ"qMi&)!4B!S3m0@F1i!&3!$"J$Z!"-3$'"!PJ$SX
3%R!1D1`mb6r3k[d$3)!Gb*S#Bbl!*5!"a&-Z`#@`KKN"hi!iJ!"8!FR!2i!1-!%
E*6P4"j!!!(J!@c85N`"i3$ch!l!Q"X!,J&[CJD`T!"!%*%3D!"cJ$SJ!#X!ES!I
)!"K!&3"P1!!m#6r(N``!83i@!!0Jk@4!&`"PL!%`!"iB#C-E'!!)J!GU!'#!aBF
(X&8M-3Q!"m4c2`"VBJ#m!,L9(FLD!J""3%+N!FJ!'-!8!'@i[!V!'m$MX"Hl,eh
$!KJ"h`!Am!3X3L5!![!'b!"$3'C"!h`"3F!DS!)`!2I#"#!'N!!!dN!3)!2%!!i
2Z4&"a3,D!HCJ"(`$)X!AJ!!)3!R!bE!)[3!I&cq`#,dcF-!l!!BN4+c*2V%Y%#i
M8fe#"I`$QB9p%3E'F4QTc*`a#3$aa43@ah9[,!!1J!(J!Zb&#R!'H$j,GX9'el!
!+!!@)!0!!'D!I)-(`J"b!""`"1#""S!*`!cB!-%!1C!!"0J!`B!0%!`X3Km!Dh)
!M-3I!,Pa!5J"j!B%%*%,!H4'"e!#J!X33!d!,[`('-#fE!&XbhT!4-k6b&Bm53"
J"d!!(`!X3'jF!'H!!E!YA`"R!!@`#&8!Tm)HX!K"!16'"i!!i)'a5`B!"LJ!%!#
j`Ar50E&,"V!YH`"J!1cJ-"%!2)Nr8)1`TZ$-KN-!b!%&3(LN$&J!JB!,F!PBDBX
3#3"K)$S9`&@+1F!!M+r(R!43!i%!)3!-V(+06`@`E*3!i)!58!%X'bD!)4!-`!#
SHAR_EOF
if test 43662 -ne "`wc -c < 'Hqx.1'`"
then
	echo shar: error transmitting "'Hqx.1'" '(should have been 43662 characters)'
fi
if test -f Hqx.1 -a -f Hqx.2 -a -f Hqx.3
then
	echo shar: assembling "'MacLayers.Hqx'" '(131047 characters)'
	if test -f 'MacLayers.Hqx'
	then
		echo shar: will not over-write existing file "'MacLayers.Hqx'"
	else
		cat Hqx.1 Hqx.2 Hqx.3 >MacLayers.Hqx
		if test 131047 -ne "`wc -c < 'MacLayers.Hqx'`"
		then
			echo shar: error transmitting "'MacLayers.Hqx'" '(should have been 131047 characters)'
		else
			rm -f Hqx.1 Hqx.2 Hqx.3
		fi
	fi
fi
fi # end of overwriting check
#	End of shell archive
exit 0
--- end of part 4 ---

werner@rascal.ics.utexas.edu (Werner Uhrig) (06/03/90)

[MacLayers 1.00 - part 5 of 6]

---
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#
#	Hqx.2
#
# This archive created: Thu May 31 21:58:35 1990
# By:	Roger L. Long (macintosh@dhw68k.cts.com)
export PATH; PATH=/bin:$PATH
echo shar: extracting "'Hqx.2'" '(43745 characters)'
if test -f 'Hqx.2'
then
	echo shar: will not over-write existing file "'Hqx.2'"
else
cat << \SHAR_EOF > 'Hqx.2'
$J"$!AUJ!c8FrJ!C!!AKJ"l!))3"dMB14!93!l%@cB3&!!15'"0"mQ*%)!"lSB!c
(j)B&!!'3!"X6!"M!$N!!j!D0N3#!!C4!$A!Ui!',8!9`+Z!"&F#TN!!()!"dMB1
4"ba#*!!H`&D0a#3!(K$2!3&f)'YU+Z#"'d!B`!5m$@%!$'$H33$N"S"%EM#h,F%
rB!BB!#!!(S!!d!01!#4`!3"95J!3X!DdCTr)0l!)#3(NaJCJ"(`$V!bK*3DB!%%
c0Q!0i)%mlJ6J!e`##!"DBK,bSJ,")U3%N!!E%-!Cm#@4'af!'F!!+!(N4J4`"LJ
!5J#j`3'`rSh0)S3j,%)N!"i3cih%*!!H`&BT!H5'(@!'+!"+!,Qa!C`"$%!BJ!b
B!8#Q&!!%R!20acpJ"dJ!M%i%93F)!H4'"a!'b!*Q`*G%EQ`!CJ!jX!L4!(J!@c8
5N`"i3$`("l3$)S!#`'$d!k-m&3!%f)'XUCA"AV!!Ci!(!!&36e@Y%%!,$!(#A(K
4!b`E,N!B!!-B!Gq!%J!%U!(F3"LJ!$3Iri!6!!AJJ4V!d`B%f)'XD86#APJ!C`!
$%!CB!'%!#3!,X"F-!0mF"TJ!Q)-4m!dX3Lr!ai82,%)Q!(YK!0J!j)B#`!630E%
,#l!)'ED3!)!3N!#@3J1V34fJ"*!!'aI!'F!!)!"d6Hb5!E$q2)Nr!!%S!H5'"A!
'-!-)!&hMB'3!C`!a!!'3!"X5J"*!EYJ"C`"J4'lB!B[3YNbp%&VB`"P!$e`!3"8
BX'S'c6T!#2!09$4+3!@`"S6q&N$jRJXm!fF!"P!&-!%3!!8`E,&9$4i!S#2U!d-
!HU#Xl30KJ!B!"R!$,N$3V!1m!*P*"&8($&[ah%JmE,&9%%#T4!*X!5E!&!!-N!!
EGi!%3'lJ!@F!!U#f4133!,Q4"bJ"j!B%F!C3!,!!Z5%"-#Eq!$)!#j!!'a1!'@!
!3!&iB!F!"X!"5J#jS3'F!Bc[%X#6r!-LJ"SJ"JJ"j)B'd(ci!d!!6r)2D!!A!+T
Ae3B"XX!3)-`P#l+!%'!'G&aiS#d%"[J!0F#p`!)S!Hb&"A!'d!!m5EpJ#3!"YJ"
li3#3!!%SJ"*!EP`!Cm"[M!I',KQ!'3!0m#6p!!+J"*!!'aE!'9"`iB%14JCJ"Q#
Hj-B%`*13!&D,d,!9cih%`aCE*3(%8b6!&Q!#6!&2Tad!"`M2J`#jJ3&!!+85-%"
Zh!%8!,P"!3#P%J#M!`-3!`1Z"Q!"N!!EH-!C!!'-6"%j"%"Zj!'FlqS2(eb&VC2
K4fjS!'F!+`!(P(Y,J""!EQJ!cFFq`!i-@r(F5$aXX98N`"CJ!N`"VK!a3'j8!'F
!"S!%R!-0'3c`Gb`!iF#e@`N#!6!!ki5D[3"-`$H``3JaD`!-8!iJ!&X!(XJ"-!$
XaDQ`)5!!bC%Fm!$`*$dk#C!!QDJ"Y!"G)`HF!3K!#E"Xb!&#!(X""dJ"l)AP[Q3
l!K,*'Q!!3!#PdL)%"jJ#5J#jS3'B!B,!)N3`'!&JJ1)d"5KLbZjp!3)%c4`!(8!
"#$%RJl-+$3J$*J!'F!DB!5,!%'!#4!"R`1Fc"*!!!"M!'D!&$(dNJ!4`"P!"3jm
5!!5m!4T!%*!!@6J"Vc%-*X5F!5jACL%([-Ec[R"$!L`#B!!03!*N,ND!%-2kN`#
C5iH!"m55)!#%B@h3!T!!`"R3#b-"8`!Ji!EB!f#!"-!&)!%N!#)J"*!!'`F!*("
-B3$#6HUc%#a#2Na%m,3KK4ZZ(J#D&Z4"!0K!-d`%SN!"`"8@P(`c-e!!Z!""3'4
%"rJ`I!p!mq!1!&!!09Q3!!X"B!20-"'!!UkRJ[[+`3)&J![Jq"!)BB!&%!+dFp6
!daB'T'IY($F`!I`G(m%"J$NX3R+!NBZI%3"4i1Z3!*RX!q)!#S"I2!"RJ!*JB*`
"VCNRm-iX3S3m08F1i!(Yed*J"LJ!LT-!F!BSATm!''!13!!3KJ"!$Z!"-3$'"!N
X3Q%!,e!%r(23!"+J"aJ!0J!5S!FF!"i!%U!('!"U!"+J"a3!0J!5%$3,!dL!(R!
!X!&)!"iJ!"J$aa`GF!rB!B)!$T!!Q5Lr+N!B3!N8!ImF0L!%R!*)J"i!Y5%"HX!
#L!6S!38!&"`d@fYk`!'J!b!"H!"('!9H!!!5$S"N``&'!$3JC!)"F)!4!!d!!ZA
H'@!!C-Ldbb)d!V39&-!%m(Gm"!F!#3!*)!$Uc!&J'Km"H'!cr!@B!0!!#2!*J!"
IJ!N!$B!!h`!@J!5B!0!!#2!0Q!$3!!M`$35GV(m)))(k!#D!%Q!#*!-f3$$!N``
!#!!8J!G5!&!!(XL'QJX3jl+4!X!!2-#'NrK&j$J!$m!-+!!`!!qJAL4ql3!@8!%
N+cM-(A!%i)%K3"+3!&R)!A$!!5!"F!!f!(1m"aJ$()!K`!&B!-0!&)!-r!2bJ"!
K$'`!&F#p)!,B!)3!(0"qN4XN`,Em!93!l!9ViJ&!!15'#4!1R,rN4JP!"3!"-J!
2`!N!!EA!2`F0X2ib!!rJJJ!$eYQb0`BJ!8$!2)%%a&K"`"%3#`b%8J#Q!34Xbb8
!1)!%E-XQ3"LJb3-!Lp!(m!F88pmbmNDCK5r&U*d9hP"QFKJBi$h0GmZh@SND8KN
+!"5`!$!!rd!$8"2'%M@Kr[8!q-M`Y`*3Q-ehblGDL4T5'3S!0,!!-!$r3!03%mB
5K*8$!!Sm!$ibr+d!*!"-3*!!Y@9"!hJJ!5!0i)'i6"h`'[m$TN!Ym-p"!jLj!I!
D$l0b!!N!"*`$5)!G1-Vc-Ra!l2)I&!&iB!J!!f`!%SQG"`&S!1!!j`8)J!0BJ!Y
`#8J!J%!9%!6XDdj!(2!I-!(IJ)04#racd-!Cd-lJNXq!&"B"i*,1`$LJ!!5hjB!
#X!AJJ4b!%I!0,%)#`(bhI+Z9U+&!S!!N!%*!eH)$*!(NJ6#`"2acaN!6m-p"!hB
!IZB!*!(NJ5b`"2ac[N!6m-pK!c3(#@!&+!(NaKkJ"LJ!F-!p!!b3!"XH`,C-!S3
"0X"Vr!rS!R+!!m#6r!0Q`"'!"j+CQ`!+X!eJ!B`!#V!0S!#63,%"!&!!S-!))!6
Sqa5!%'!*%2,8R$Q!"d!"`)!jJ!I%!"J6*)!j,%*)`$QJXI-Nr`!%)!Im!d#!(FJ
(a#jVQ!Y`#8J!mC3,F!QXB8E!0b!1)!"93$,`$k!$6-"'58l8!53!(X"@MF3N!"i
3crd!V)N"m!,J9RBJ(a#l"!%*N3B!"lJ$)S!#m!ES!6)!"P!&3"N1!%mL!2!$2-N
!`10J!6!!PNi'G!&3KKJ!!q#"N6#jJ3'!!(LJ"J!'@(ai!&Xe%T-!H%!mp`1`*JE
!#i"EfB&m31`5"#4%'S!-J!&-!9#'bkX![!%m$RZaqp)e,)!4m!e`!8r!)N3#+!"
[J!``"'3@0-!A%!5X!5S!!h![6!"L!!NJ$33"-N!-i2#3!"X49#bJ(@!14X!h)!*
m!3L!!*3!R!b,d![`FI%$Lp!l!`Hm!f"!3X5Dl"2E!Z%b-Y8Q9-!rN!"Cf"GKB"`
A#Ud%$J"Qi8Sk0YCA44-!i!!i!!D!#l!A+X!Ci2NXf4D!%%$AX!!S!"BJ!d!!CS"
mJ`I#!()!%(!%i)%'J!R!$0J!`3!jN!!%f!$"J!d3$#a#(`"VFJ#-a"m!ZA%"+!(
N"J33N3X"j%B(8!+!#a"!$3!Zr!FB`,CX!@c,HN"%cT0BT6`*Y!%"I!#`!,Pa!C`
""X#fI!'F!46!)P3"R!Tl`#)%!C!!'am!!S!(aLiC!"LJ!%!!j!Er5GI%,KR!YZ`
"J!'`Jm0%!2!NrN!0`JI%,JM!KN-!b!%&3(KN$9J!JB!,F!PBDBX3#3"K"!$S!"*
3#racd-!CB!#3!!!3"L!AMa"ce`rMkc%R!G4!)%!)!!1VA106!5`E*3!iS!48!-Z
'#@!)"!-``#!J",!A+N$cd3m-5RKJ"l!))3"dMB14!93!l%@cB3&!!15'"0"m"!#
@!!+!"cSB`c'jB3&!!16'"!!'X!-3!,P"Bb3!B)$rFLVJ!BY3"A!Ui!%9`+Q3!!F
J!(50Jj%(,%)N!"l!9Sh%*!!H%-m"!ABJ(a#l3!&ii!B3"KJ"Ed-B!!1BGa!!Z3%
JN4[-E8[`$jJ""J!)J!FJ!25!%`!*A!"!P4)!"+`"VGNRmJdX3N)!ZE%"'!(I!#Y
$D&N"*N$3M!eB!hJJMcX"q!#A!!+!PLJBGB!53'j!!'I!Pd4ZG!"Q!!1J"*!!'a(
!'D!!+!(N"JI!qMFfLa$QX!L4!(K!2$F5N`"i!&ZP"*!!'hD!'D!!+!(NaJC`"M!
!B3!bB!B!Q9)!%(!10"rr!"mJ!6!k%93G)!53!"XG3"JJ#jJ"Aa+jX3'B!H6!)N3
#i!&Xe8K-!Z!"m4`Fd!k)!!S!Jp%2D!0K!"8!"0L"I%$X3JZ`&bc!'H!"3!$88e8
V"0!#3i!`&el8!-Z'#a!'`!"'`$HJ"!!"DJ!h%!BS!-h(2d!&3!&iS!E`Y!%"GL!
I%,XS!Hb&"A!'-!"KJ!83"T!!!,!!Hm%!m-eKJ!Q!14J"hm!Lp!*mA2M!)Q3#X"F
'J!e!ELJ!6!"G%lZ`!)Z3!'%,#3J"D5NdX"V8!8S!ZA%"R!%-!!*!em3Z'3$Vcj2
i!`U!%N"Z@!"R!$1!!0!e$NB'F!B3!a!!Z5%"+!(NKKe`"J"'j)BGX!KYbp3,S6@
Ld3-A!&!&"UbD3E-1%!*m!`%!#D!%9!"V31K[!C6[ZF!cF!CJ!&8!%`!"8!$$&P[
9i!%!1U)q-!5J"mVD2K!'D!"J!$IJ!J601X!,N!#CN!!!Lp#`&Fq0a--@@`8"P%S
N`"CJ!N`"`!#jF3G)!13'(R!')!"U5d31!C!!'hQ!%N"Z3!"R!!8!#j!!'a)!Bq)
2)!1`!,Na!CJ""J!8J!Gf!'!!(+!%N!!E'X!C`2JZ!6c*2b!#U!&LJ""!EQJ!cBF
rB!6`*2q!"R!"S(T9E4!J#``"`Pbb)!X)!@C!ai8(fN*JJ!p3!p`,,)!5`&jB!'F
!$F#6p!Z@!""J#l!A$J!CJ!)S!H6'"A!'r-CiB1b5!CJ"d!"2%SSV!H5'"A!'&&a
iS)14!CJ"Q#Hj-3(`*+69)M4XaA-MmE$&9NN!m43*X!@B!&2!dfN(`!(#mb"!EQ!
!%%#T"!b3!"Yh!!9!EP!!3+N%`1M!!-6!J+X"@!$N"Kj`"N!!)e0%$J'3!"Yj!1H
lqX-(9f(VC2L4'aV!'F!+`!(PhK)J"*!!'aT!ml%2m'Er($B`%JpEE"8*X!@B!&1
!+d3-N!!E&F!CJ!%J!HG!3`B$r"d,3$K`l9D#3!!-`$UKCLm!%r!0E$"#c"V!!j3
$#%!Ym-p"!a(j1,$&4L48$4l)!6!!l-@TX#%J!(!!)#!(2!!m#6pJ"T!!!*Q*'N!
,d$9b`"Q!!*3!biBF)!5`&h#!&-"H@1j,YL!JND`""J!%8#SY3R#!+D!%N!!E'N!
$p`rB!B[3ZC!!&48!9&%-F*DG44Z+&@!*r!!34J#`#`X!bX!2!'%%!,[`1rN$3"J
"`#k-8Ii!%%B!X![[4Mm!K"%!l-+fl`m!B33!Zl!"`!(m!""'!,!,'`"1`!m!B33
!Zl!"!!lm!""'!,!,(`$D`!m!B33!Zl$)p`0!'!(!,S`!S!-r!)34!1c#lZ)2!'%
%!,Y`#1!)r!!34J#`#im!Y-!2!'%%!,[`I[B$3"J"`#jF!PJ#2`#%%3$X`LB!#r!
$3"J"`#jX!R!#2`#%%3$X`LF!"r!$3"J"`#k-!PJ!2`#%%3$X`Lk!'[!$3"J"`#i
X!qJ#2`#%%3$X`M-!+[!$3"J"`#j-!h#Y%%B!X![A!(,!$`"K"!#lX!hJ$[`!%%B
!X![I!&)RK"%!l-)iJ!,`!d!B!F!ZR!2S!6m!K"%!l-)qJ"2`!d!B!F!ZI1hq!""
'!,!,!`&F`!m!B33!Zc!3`![m!""'!,!,9j`r!)34!1c#33!Am!0!'!(!,L`%Z!%
r!)34!1c#3`$F#Q%%!,[`%'!%r!!34J#`#`m"F5@%%3$X`N8!-I!$3"J"`#km"*J
"2`#%%3$X`Nk!+3CK"!#lm"2J#2`!%%B!X!Y$!6M!$`"K"!#l-"3J#I`!%%B!X!Y
A!3V!$`"K"!#l-"B!$I`!%%B!X!YR!9c!$`"K"!#lF"C!#2`!%%B!X!YR!C6!$`"
K"!#lX"B!!r`!%%B!X!YV!@M!$`"K"!#lX"E!#[`!%%B!X!YV!Gc!$`"K"!#lm"D
!!2`!%%B!X!Y[!9c!$`"K"!#lm"B!#[`!%%B!X!Y[!Gl!$`"K"!#lm"DJ$r`!%%B
!X!Yc!4E!$`"K"!#l-"F!"2`!%%B!X!Yc!Bc!$`"K"!#l-"GJ#[`!%%B!X!Yc!F6
!$`"K"!#l-"IJ$r`!%%B!X!Yh!6V!$`"K"!#lF"I!"[`!%%B!X!XV(6m!K"%!l-*
HJ"c`!d!B!F!Zl!83!Mm!K"%!l-*HJ#R`!d!B!F!Zl!83!cm!K"%!l-*HJ$R`!d!
B!F!Zr!@BBK"'!,!,I`(%&)34!1c#A`"!!!Yr!EKqm!!3)"@m,p)%%M6i4Cl#J[$
!X(PS%)`RLK&jB36MF#$%-#``KP%LNSa)2L)YL@5&83`(M'-m`%5#X3bQQZ"UGP`
)c``"M'C!!#8"P"T3IKJ"!&!S`##!J!1E`KX3-UV"!MHY`MZ!JUP""$+m`NZ!5'`
&8f)YF"1lBUG8&S$%XS!RpJ8dX6(SDN9#G#mNX8NS!+BR9JNKX8c8L(8L3U`8$)k
*LCf#61`@Gf+ld",V*Da@,rV%IZ%L&Sb"d[M%MMQXeFcTe[E%SQ%Q0SdQX@VLDP9
M61bDL9VEU"+V91%!TdB((SH(`*(aVcQ9'dbJjIPBT0,K+3"LAB(cl!ld@(HJc,S
&"qB0Q8m1B2Q&[Zd0AT!!Bre#lq`C8QIIm$Sq2!lU@1F"!`*qjam)m#eAJMr@UF#
DIbj)BGd,A@8AJbh@cD##G6JSBPea!a(Je&)KMTL'"dS"3)B69LL&a$N4!1#%,Q,
i-'-BfL$44J&UT"+2M[jBJiSEU2L6LJ5T`*!!#M0`!2!#!+RXJ3S8F2cc!`"b,"8
!#"q!)N-9Mm!4`*8k3S2-M'H`XF-Ack"cKJN`Y0!Q%X!`!-JrrkK$b"NBa$PRRAI
Q+FJC#ZMS$$e1Y$+!,&JmSJ3H!MM5"6!#!%(3$N!mJdf65V5KU4Nb2*R&)h+!m8-
!G!6`J3!cNQ'-#"p`q5)`!)bUd#HTVYSU,#4m`-3hlG%5b"N#L)RT-pVB1P!YBRi
JSbjN5+)X!*mdqb`CK(!*bbG@8'TT!-FbF3B2ScCjT4a#"I!#$i33!!!$U05b!TY
)P,X8PSfTbkklm-V,*K&JqS$,!UV!m!'G+`!"M3KJ-,!#T*im!`3F&55mF+)%+$$
UM'#3!-,!*dU"JJ)E)SbDLMiEk`+'*"q(M%+ME$L!""i"d)#a1Sf#3C!!aSp`6%I
,!F5##4X'Q+a2SbQ$d6$)3@-b+4%!E*!!+3l+"X"#+VR-#id-jIi%CGCI310#Z3*
FLEA@+SbklK4*$1'%3Y+N!XUmcd#K4#YERb("h@+I`3$I+TaK`0eeQe'STa!NZQL
M),3KpJX3S"+&iQU-LJSf@ZYJ1HCKfl!$(`!3m!`lR`1!`62Ua1N2'PN!F5`mUT[
4qV(Zc,L#1)TV-D-!,2LKlJ'+Lb(#!H8%%83ldC!!%3)J%!$3U"5(`)%!,)Hi33l
'V1TbJKXB5b$QNc-'`%IMMdFHKFRl32%)%qi!J-Jrq$MKK40e%0*'''QiN5+,rm$
5k6S)H)-,QY3#)2b$&ceS`cU8m!pNJ!N*EZKIPMi3J"Q0330VDK-E$UF0%LK1&id
5JJ)4)$rk+@)0D@!$'qC3"MQmS3jdf&q,!+!%9`!!!AkEf3*`-5-!f#"R(S$$!'!
K*bbBJ3%c!m#CG!%!%H4-!A!)eE-!B)&'PE!1LQ#K'mM`"6()S3aK@)--PI)#i1R
L(fJ!d`pDX-!CK8d%,VLK0!)"JJ#8)a(5!%3G46!3TCKL4PC33Ka09JG[I))+Mb#
N,ciK"RbSNBe+F#-`%1N#&rb$(eFm""RHi%8`LP&'9[L(2[iA3!)d#3a1J)-!L2L
-4*M"!ipF)!4&k8CG#2)IrVL#Y`K#*d5#!39LBU8VBIQ)0FSbJ[T`)b9Zq3pG9SU
ANh`%')T9`IPKNB9b`%-EdN!(1C!!)3mbr)Fc1U8T3Rf!M8MJQ#$!J!8#'P!E#9c
J2mc4!p""i"rSU1%0ci!!1)!!'(++K4N38%p!!#"2B##!%#+SMJG'd"P0FYD0#"(
,51TLIKP%4bbC-#-[Z)j0k%$N&E2B`L'`!BaZU%16P-)L-LlJ#1hB"KE)LBdc-!%
1%!$S-f*a"JTX!(3"@!F52JHrG6#"U2GB)"JJ)!4d%P8I4L9U2KB)TR-+YD2Db#J
EP1),(@N$"Kr-Q9*JJ91GmY3,$fb$0U5JScEUSJZ'b+LId%%R1AK#&S!`!eYT*S5
E-H"EM6+$""3RM1jpleP6`%DM"0!#!,aMTc2+J4,5UJdYY0@LAH""4X%J!FU+iE)
ckJ)+-YT$-*3eS$fPV"VDbY'h+Q#cRAf%9q(!fKPa`4kNCD),HNM4BV+4#5pBJ%!
H!)V33N'%!%5N#5+)5@XH)RrFR%),@6V$Z4,!J*jB!`[q5K!hQ!!D3)$"$J"J!#I
X)d8'!)!%['S(a6&+QKc`UL6FQc-)N!!6(4[d+Lr#fM0V*Q)-D#M$'0E`"ML83Aq
J9-T'erJ-+YL@&"9PX)0e`39,K!mD9d6%&eP)"qPQLEUil)$q&S#R'I@$#%S!a"R
`-FYr(,D(&P$I51%!3`m$1!`I6M!!AM3!$,!JMJK!JIiBX)-4YZN0(23'I4hP+Ia
b8"lmKHNf+QQ!DDS&"!HB`L&5E!Cl0#PKkb"!N4Hi$JJFEmSV3-)k-,!#)kb$!fP
9"clNS+S+AP3F@MhF0K6!ArCK!"MrJ-H-Dpa#-G6"$'B)Tck##p0e11&Zfe""SJ'
!LLm$B4XQf+L1)QeE$5K"6MT!**mBd)S8k525AJ!'e+6f$"fB`3,K-mC55Df8!D!
$eDU1@UCd!1R!FB(@"!&!T0q!J"@!,YL4eR3E)KhFMK)McjZ'YD*!q!K0)h0'@h!
'"#bT$`5N#*&PjEBrJ5&Z)*!!@j5pIJ-*T0!+6)1J"CL'4EXPE3",4rVGQ*i#),)
NJ4NSTBl6V0*brf'2NCkK$"eZiBecc$pMG!"d%@MJ``%`JAmN3`L@9!E'rl'-M4Y
MimcBq$%fhJa9XY),VTPi!2j4mPA+bC8'82NrMN&1EjK"")5$J4Ni%%`jS6cQ32d
(N`)Jc*3(h4MZr!Fm&FK!HS,1!IJ-JM[b0)5T'`-%fF#k3m8j36Yh33I3AVB(q*Y
*$TZ"$@qi!h9GZY`E#Q%&!RM"f`@!Ja[`!8m"d)6GmFk*ZHGJlMZ!`3S#B)FT!1%
#3"#!$Pi`!96-3CA!@%8!X-$2CZ[#!daSe-#E5cp%3*F1G'KK'm,TM4F&!!+q!`-
4X&`1)"`[H5CBD6$AJ#ScZ!!%I@aHj#Gr"Tc$r38lPrNh0Jk1@AT$m!'3!!1G`-G
%'+J2HM8rJbN&%2$T9Bm9l%2!RDaa48Bm[JaP)!2D"r`'4)H6'bpk3*rLU)$@[ji
-,9MT2lJK29MB%!&L1"`lR,"N%%53!2j%K`De"`!4i!qJihrcKh[""J$!J!Uma`!
)b!d8%MU1"`Bb%)'3!10i%3J#GS-#!1!'!i@"%*!!#K83JC!!ji#8T`![B%RF-#-
Gm%12B),QKS*Ri!#(YB,cKc&5S$kIeQTR3!-EQ(X-L)+6*JJJ`),bpJ``F!Cf%)'
8TK60-hNif)++SJNji`9"#)9$b(Y1%)%#J!TimJlr))8XU$LDN!#&!U!8$6KjMA)
'&M#&-l)"(1#&B0J2H)F&M3+(ZX!"$+#('d!*kZ0rli)(!+!"-)!%e!F!%#!,%3J
"+""hCD#)R-!!5Q%!BU#)P-"[!#!035!$1`!"jE82cD1)"-!##N!!%'!)U3J"E*!
!!'`!!3A`"3"`"J5K!P-`LdS"$EGi"L5`Lhjd"EJ)!1$JLj0(M$,J,Zp#L`'J!$S
6!(#J")C3Jl-%$ZDb&!D!#S9`J2mR![m(!bN3!*!!3#IP!!LaK`!-!!Bm%)&5))#
5d#33X!+K)`-S%!#5J!6"!!Z"m)VZ#)m%)!AmH!'m!!!J!!!&%)%`-)re#!ab3%+
ki!3QN!"L24@"h$KrhKJ!H'"iX-#1EJ!,HUJ"RL"@$m!,d#L0%850pr)$ejL06P+
'ZJ!"M!#5R$#5-P15eBL5f!JkHLJ"hJ#5I##6deL6+DQ0mkF%l%L,$i#&rbF%l0L
4+J#55!!(#Q!fb+!c$q!$2NQ6*aQ8![Pr%3"8F8H9(R#9rf#59f+6+ZQ&(YJ2!V!
$1Z-!rL!pCN@,$N!2BNQ@eRL6@cPr!1#"!V#@E8N0$&!!!KQ*$X!-J3N!IR#*$N!
-%YQ0hhL43*!!NI6S"PV3Q"5*N!#`N!!'&YN'p6BQ8))-*KJ!`2#)1b"BPXN0"dQ
2QEQC*&#A3)QA%DL8p+L($b!%M,10MJQ1iNL1dJ1"hBL3!%N`$`4TJSV)Mr*)MrD
)MfqJ&23(!V"!!E3)!04`QUNT#DZ*"e[&J&QSL&YS4%VK#UkCPE$jIdqBKJ5""4'
S"!i)"@H!!`D*N!"d%NIH-!N4k!X1b!4Y!!,eZCjXm)BXq32S3)IrB)GML)Faq(m
+'!"U5)-@!#61J!UG8*189SpYi!r'!+&J%(YP3fQ*i)k#3@Q$m*i"`!K%`"d!8)f
S3!PLFL@SN!!)kXL1qaL2m(Q2qGL2r'L#!M#DDeQ$lPJ!c+F"LU!"cR1Jm`F("+#
M1b"p"!N!HS5J(V'J[+F#fkPl4#J$K`N#r#5KU0#1RTNPTj+LB)!"8pUG)@J!8Q!
)(9!)`SJ"K8#GQ+QCf[3ZQ"#HCDQ9)JUC%4J$3%#26ZL"!E#@HRJ"2L"@$-!&X)L
-+%#,$#!&[XJ!6##,dHN2N!"+%!4!M#D`"EK)Mli)!-k3!!A"5!e9J)X$B!LH'Tf
`3)b!8+S!)!$mJ)`1F!CL!)aR!!5bDJ#hQ'J%!!e(1(rb&JeF)$JjTcHaqBJ[X++
IU6-,S!dpqL4`U#LLS$l)HR9*qBJ`-+`#%!-4f*ANpC8!X!#SN!#YASN$[K1"3B!
1!J!$%4#3!"B*!0!$"`G!2@bJ$Z!+!$Y`V[2DPbq!V'jJVIRDV@,!VmKU"3$EV8S
`X![J!kFj!`))#AQAX1`B!*aJX"D3!*i#U!PYF(ZiHCPjYjTf`!Ccq(p%#E&Y)!&
Z#V(Af3Epj*QT-*8Qi,"j"iiZb`QcbC)9i!Lh1Ap#3+`kS`#N-,!+J!R8qBhK#!c
M@)k,bSma5J!4H*aiB)piY8%4H!%##%kQ9*bK%dGD"JB)F!'cJ!F%J!F&S'8LQT!
!e0-'kJ#3!!)*YQ1kKYi*!2b3!)8+fTeR%"5rUC[!-!llaJ$33%IrTkF"J!CM+`9
!N!#RHkS'55X&66TrIVZ[GBX'9$#iIEZRE"#"5##!D'#XAUSZ,3!01S!+lk!c!'!
)33Z1`B!1!D!)@*!!Z0cJYi#EXDMjMC*3ZL1DZS3E!'SJSSa39qV&Mc0b"(C!Zj%
E!)`lIa2jZUF,$CCEZj2lIjAlYa(i!r2)#0Ai!T[EZHr!Vdk)#UZU&*1R-`N`XDi
V!QR`,L!`Me!!#j'!C(Ui!lC*T25RL)qiH(Q*Q[-iY-c+NK'3!)j*ZC3X13%pkk3
T!JKXq`6[S)L'dk`$J,VZQl2FLJ#H-,T$@l5pU36m5)X))!K6F+0eQj!!FD5eA)X
("J#fl@Ue"!#[lS#f)+#f!-bGE*YSI`Uh8%TjG+Za3iZhFU#hI+ZiHpUk'LX*JPZ
lKN[#9+#kLbZLMJZj1K`!bcYrcAZj9S)P@N+pR1ZjS-X)%#blU%[%1cbkX@Zk,kR
&YSZlZLX"r#J&J6!M45!*`*[%`mX0a9Z4LS#mcKZm5iaqb9Zh*'ULdeZpRSZpj+Q
pjYQp!(!!!k5bS$QYh)S25R#B'f!'$M#[IaS$1R-!jLLB)&!'%R#BA'!'5!b!X2#
)-@!'31LklTJ#jeUZ!H!13J!$rmDm!ZJ1##`1r!UYj-8,eSUYr`F(2[$*jcS'j'8
+TeR+TfbklK!"DMUr8N#Y1Q-!K(#S5V%"Y'J!'S#-&A!'IV#,HV#,K6H,FV#,EV#
,DV#,CV#,BV#,AV#,@K#Ud8N-UPS!cU$1"#N*[PJ![BL,"F#SZ%J!j+#U!C!!DEJ
S!1(mccD!M"bJM,CUck,3cS5`UD5!UE4)!"LJ-`9J$bDi!lbXFai3c)TSbMK3VZH
kbUf-Xp4+R)j)Gh&8IiH`R!@!#m6Td6!!!6"!L1!P!`"3$NJ!$8%3!B"!L)eB!()
!!`cVdY%3d`!JdBKJJZrkL$JJ"LNVP9UVMNSpVr8+!a+0P2-R!"ki$fYCd4Gp"Lk
3!(SI1hmZV34%l6Gp'MTq#3(33p*+$Dr@-,!&m-L)h+m&)!#R+ElNDllSUliXH3-
ZF,2FS!5JI!Bk`0EAZV6cD!G1#`KY)!,TqBJb`#H'IB(ral5,[8('ZV+J'l'j$,r
AUQqe#`Q6$GV"+`N3[*Y'Ze5(qim"1C!!"GRClbLMb%QME5#",2N!#$#kK4HC#pX
SEk!"fmQN,Db#CDJS#Sb@!1!2@chA1M-!jX$9e1ShHSJ!1#00a*f$ZR!!9J$B$0b
[!m$5+dbP$jLpfhZH&%Z2CS!Z),Z`CS!'2AJ&Cd!&IM#rV+G([FN!N!$`"hMb$fB
!!4Y)22CYMNd#!S$3VZGE2G63V!5J"(U)!V#`J@K![S#JKbVJ$J6m,RVB!!3J9XZ
SKpFSSN-E4p#6-b5,S!!1!VfCXk'ceR@Vf-"!2@i!$QY,K&`&`h,,"#"1*cD-`lA
,`p`JQlGEYhM`Z,AEaURTiRK,"`d!$8C)af!JX+jENC!!J-9V[,TE[,pK(1@2+EZ
-!!9Jh-C[r)efJ-9HVVb8DlQS-!Tkb!$X%0`#M)+"*GI%qhm+#ii"!,6-64$NJ+1
mM!0QJ11`$FU)6AL,h3DMA+5H6GRcGjb+(3aie3CKlFEr9p)a!!ZQ,!2jppMA1P#
C2C8Nd)LJI)[CQRJj!1S#)!1LcT@*9pKj(J"8S)F%J!U!AEc#h0(Q#J-5`-S!-!@
kVJ3"B!EB-,"ESSGp1HZ`cG%ZRHY+`HY+iH[!2V!!`!jk1!$8B1b)$J()IZ[+[ZZ
prZ["RZG2SBF"i!$@rVlB6RI*VZ[-6N2H$ZhC`T@J``ER#JC0#1p,-Hp",Y*I#3B
Qq!-AEAXQq!'m(-SLS)IY)!KkU!"LLZ@LMH@5%)MfrUIjUJ(,+L1+SJSj&eLj2GH
#Z+L%B)L)f2(Zk+H`3!Mkm`j#3+GhHCEK6DEAhB+kX!!+l'I`m!r%F%@,`!CKN!!
(,I4#G%"M-D4M,f)k3RC$5X!'i(J'AEK9%-J#!A#qN!"!E#r!!$-5!mM3+&1!p*!
!!!01(m(N5!IQU0SNl)qKJm)%QE3bi26e50[J-28cSJ"1&)0p*0bX-(N$jIE'[9J
XN!$FDqPR"a8reP3)Be!(FU"5DlGMja!!'&$dZ6hh!PchP+F8R-$eK)H4@MpTMU!
%,#!!16"TKN$jAQm#B-m!mce0)acE*Cc5rH5F-`#fCm!1&"`kdDQL*%`pbqNq#UJ
8Mmpl#)$h!k$'BD)Z6J)!DDqE`9!1JI!#0)!"I8MeZS!"TZ$fZM!#LJ$kZ`N#S`m
jdNm#*R$K(!!'KHhi`!$jAZf1Qkm$a4q101S'3D5)jrmNjXrjc1VmTR6KjkJ83#[
qN!![bJU)M122Hm"%q$f*p'H2N!#ImQ0qdJm$F)!8Fq%J319aIJVJ[8J"V3IkB!(
5X`0Y!!Q!!+DR"##"'D!!r8m0NErHjra+J"pS&*4[Yq@!238*FS$@Zh2a6hl&[a`
`rfE%!-!'pQqT9%#NK`RHJ!&`JAB1%dJr"+!&V"r4qRVQU,kXYV,AfXiH#5YqD`m
IY3%CTrrXhX3+%5+3!2HS)1FR!ML"#3!%HSr[l3!rFbF3KA-CI0iNl5#BPS,iL*l
q3!#8$c*C3(Vd"R#!%5aDSfm#dL1dTrD58ck#!%Z3!!#B24rPr!i!+!L$bQd-ZJ-
-m2Fb$"U8!fRJ$+#"S+GMJN[E33"+J2C)!Vma"65Kj6N!D'#a`+0%Z(Nb#4Sm+@B
Jk,&"dl2`EJJhZL&5$V90X!T'%+#!)%)!U1m@DD,U4#FH(8'`!EH`1J@RiI3'H5'
j+@S'!!2`!i&dq[J4M)-(Yc$hLEHfYHIHB)++B@F!+F(#qUAMmYEHZS@X+aJLT"r
f"[e@N!$EKRq,b*9$b5814a5GL#%8J"q*J1b4!d3"iJ+(HmS0J)&cL!"H)4cm4ST
!GN%#i(9$`Z%Ep)F9L4(),MA@T!TLiEU&#"%JbV(@j4#9@$[-A3TTGi@1b2*$'L)
#+'*[X)QPZ9XSY3,!*!JGYl!mF5mX3!ErJ4QN(rrPT1!B'9!'hN"f@S@*VaAf`f)
SY(B6-$&(4i!G%+65C`!X`$)%!5`1(C+Y3m!'fT`e&%)Y6#RBXUHiJ0M@'G#!aC!
!'piYEmLh+L*&r)K!*FZK`b1'$beL9U4(kV!LkN2dG""jiZN5L!6a)ekjJJJk#)"
Bh)Q`8#,HXBUi[&bK@r4K3)$,a8@3!(K$41)S5)Q!E#@fa*GB"f)L'*%$-J!0JKK
qN!"q-)!+L#-3i-H3!#pV'1%B!!V`Ee44peR&Ir8'iF!-XRZ"a"$SP@L)"H9@bLX
%CX!([!!#X)*Zb)ci!!'3!&PYT4XbJIS3N!#C%4-!$aL'#iF"$YK[e!8K3!$NSH2
S!9#""lT00`3%')"aG!5BJfGF!PL!%E5!+A"*A%#9)3!QJ"Y!$ee32I#"#A!&P`3
"m3-9Tl4#ic4dB3D!09C&'L3&T111qiEVF)kj(3(%$e26N!#$A'S4"0`c3)#hm#0
I[)90V"V*!3DKZDEBjkThk&!4d!N48&jdJ3fJ")0a,L)!)!F4h5)Hi(*P,MmbVJJ
j)HrC'E13!0[0)rUY[SJ!%Z5pZ)A(54%3J5"`+U5Bp8+3!!+)$95D)h4$HK8BF'6
YN!!0`))+C3EiQQh8"31!#%$(aKFkX#&SM)lLMd(G3Y-ih+*KC`3"lqk'U-6c422
q`I@`*SK!TFb"-H"#9%JiSBcR32eFaRHK'CpNEZZ-Rc%D6NG!8"h0%3TB!PP!1h*
(IZ!$USarB`,BJ"pF%K'`"+b"S13()J!56)%MJ!51!ANd@qFa26)ApLJI@4L0!`$
bLLV',DYB(`[!IHb+FP%rENMqf!lrBeRF9fD+3!)#!aNU@D5,2"GPSd&D,c#JhNJ
N-"!""@"'d!"TN!!K45@(E)Yjd5+"5"@C$pZKK,b9CZT%dJ!-55c0BQ'dA0AS&N+
[df8MqaL3!2'4K+)f-U3!m*%19(5mNPR5fb4',VN)DpkAl$ae`!f-b6+CRB3HM)!
!Pe!)q#iSd#MV'`LB!qD)28U")f!,MS!EB!H3!%Ib8*lHY`$#KbpJ(&"4B2Bhb`-
!5)!!@!8$kJieLZcc2KMM)KJ$-P%1V%[`X`CRL#A8P'T)B*i"&[!#q*(MX6[[iQm
*!GUM"T!!chqm!IN3q5#jIE2N!J(-9'*J!!F`(XF6-(QIjDNC)B6fS)'9DEYFCM"
B"b2+bpe-0b!cMqET8TU5#`N)c64A#Uh*)QJKBB#&E-`$FrJq*T5XLL)6"*4-#M3
(N!!2B,`5b+H'F88@03Nbe-iXQi0()5*0KSJf"mq83jU+3!B-(NGJMr))&JJ%AfS
59-h1mdAJ`"[i2JJ'P2`$Gr!L$J#m"*N-5'6f2T-j"a,+fj`PlJ!9B!)G-(JN!3q
`QcecB$,-pS8+2%(Tkd-(`2+3!!!qm(`1JFbN%c"1(Gb!)N#2ES!4d%d4*(0QJZ`
$$[k"NV%QKZ#,N!!"14!'e%lAA!#A-2H"!(1M-*8#-lJ&l8!*'Bl3'Ce%%ZfK!p-
c4iP-TF!+3ZF4-CZ`J2CJ*rch0T'2h+4(UHYQYXbi#3eBjY+%2(,L9h'!Y1NdXpM
04!2)*ii*cC[*"X!!$D#IH$0ekFd!`$H$34kj!8(JEm'""K!q!`!LF!--!2QJ!5X
!"2JR'&!!%[4am8qTqEG3!5P3!+XJ43L!b80)4S8,`!8#J"j`#@M`#5`'-4LFGB!
4j!mld%,S!"UF!fq!iF`3dr-iEiJ3N8Srp$-&dCA9**k%()Jl!@"Q")!VJ$'N3C-
i!AX+#N$4!!"FR%6"I(kiB,jG1!S!"P4!%F85kL)!N!!!iS(`CJ!+k%0AY!(3%%$
3!!Q&MQ!(+d*45%$A1AKF()aM"TE(2Vc1)hJ[%8$[J`#@"`1)!IZAIHi%i)1*h54
GMJ%cN!"#)P%P*'4!"XX3!)1L&%j!G#*9+JB0k"Y*Z%R9d#B9!e9!aBL"5CSL-N!
f*+9+`3+FJA5QBVc!&QLPQr5FYG*3QJeMU5f&TEJd'p*5Y**,C@NYlD@a&!b3!)&
6)JE%""M`!US%$'J")I,NM"3BN!!#F+!!S")i8'@8J,X#!dC!HS!")3#9`)!2J!-
,!2c"JA0N!q#!!l"!F1!"J)%"!J'k+"b)!"N+$NJ!-#!#i-!%!!0"K)Y5[!S!"L`
!(,!!R!81A!!`B)-L'K6*!+B"$QL!DB*P+XNPb54KJ!hB8$5!B`lILiJ!J"!!*)a
lS!4-3"Z)"QKJ"5b"j%%dj3$+$!#SJXkm!(94-"@&%aeq-b)EU)-CS3e@K#lB"[!
!5+J"b5(&S%J"-"XdF(29QhZ4#S)U01K-3&@+eCX0995P'$8a'iYRFa8,#3"9RHS
lKDSjN!#%+!Sjd%13!!%jX3DZi@j`e0FR9T9!0J`I'!!L3B&QSbLdJH+3!!1P)`!
m!b@M#lU"&QJUV5Di("BP@J5Dk%P02ST$#1K9iDG%Md!6&5&cG8Cd!a4JHES"$La
J+%kM!J'1qP9TN6r`"hl!VK%2ei-mb%"N29(rK!D4V-hkIPk!VP-FfZ"j4!rVi`D
N!9XG!+PeIEJ$"&!aVdJLF!0[`!hS2*kR-8'-0bJM'qFEK!p`F0,m!I@BRJ&JSbU
"i+S%$N%EX%'+b**m!bNJA6[!)4"'c49P`3'"*eh&!$1i*Gq!*2R1,kTBpB(kF+K
Z&8aqN6!`6(-S*@5$C331E!$QS`dJ!4cB![39%F#"(d"I!3%Fd*R23K[J!6L`!qJ
V()!$-B#qALiB3&p05i%0X1dN`3CB+M%'k'XkB5,S3!jX!,abi9$!"q`KfN!1E!'
mBMKk#$53!!0'!+qF!3LJ4&X!aK!(68+X!!"4)&rTU`h#V`(@!2J*+M!Kq`JP%JD
!J!%%!UAJ,R`#JJdi$2CCC!0b!!H-!22*"M!2!2!"$FYK#aJ%-!-kS)Hi!4&,BX%
+%aQH-S$%QS!HSJAJ+SRP!$d%#T`d'%!p"%F81DjmKSRi!$PJ"e5Xc+!C,1$&aPK
T!JKP!29`*YrL@!!JKmTjBZJFS!-iKJjm!6+3!!BLkKZ)6Zjb!05+4j!!#ZS!#rJ
!h#!J%B3mU`ZdJ3+))f`!!4!5A[!*b!!mb+i'3!"F9kA`"l!-qf"!m#2$Z)%bJ!F
QDN8pI1rQ(KL")IC*I)'G5"%%!-(3!QJ!#-3,!JK&+3)8!!"-m#i!!!d!!'BJTV+
#M5S%j-!I!,,b&4p0'ND3!(-Q$5%3%aXeQrk$c4C6#3'eYEEBGJ[J)cFN9S8!dFL
e3J!-m)%U%@lP+ke8*I9fh++"Q1U2*QZe[EEqG3bX@`[3EYpY#lJ(mGDDqS0kZ`(
!`-53!+bk&Jli!c"36L'Z%ELJp(DbCY-Y!!CD8bY!Z!BAiBDTB!@"jYir!!BI0pl
@Qcq!FK%ZcQ1N%V@&j!qJ"f,S`BZB!"$J#%`GQpX'lS%6X$`X3"))!51J2Z3P$$!
!d!"d`!$%!`!5!!`i!%NA!#aG5`&&KTrPH3(bi2NF!3C`"0T$'m!'8X!)-!!MF%2
DJ$2)2XM!5ii8M)P53NmEJ!0c3)BB9aiD,ir!Z"'CCZS)J#jhN!!*NdpBE32l`!0
`1U*$Hq5!)l-m!X!)l%XCqed,lk3K"K$%(jL$b(XpG!%1S!*+`!e)hNN$#qS*3C!
![+$V0VJ!b4YjdF'-`!&DJ!'i!LT3",!!&I!(kX!-q)()+fKd33bJ"APSap!H9f!
lE-%0d,bQ5a$-%YJaH)3[-(J5(*6hkJ)Ai!L1"6VBS[QPjqU1DG-S9#m9J)4-`#A
Q%*U4C9X"!4!(1F-%l!$Jq`a#`ZJe"kFA"NJ"`1X"pL8!#+&+!3&)S5[U31Z,&0#
mjJ!'R&pBS(R*`A,k"ej!#4b"5B-,G-3p@#flehDS!13M"k,Ze!d!Ym#Gq!0Ki&#
-DpHC%6D!"@38p4&pld&lSEk2i2GDU!!J#2UZiI8FQYFBP0peDPd-52YNITEL!dN
!m#*Hb)Yj!EEq+!$JJSCKJ#IF&Bd!Z%"pV![@khT0F!ML!GFh$6!"di"lQN!3'!*
"i%NJ(q1,I"1`,Q!"h-$j0N!c`!RZVK5bSM2L!8b-)b8`e8GddUm)B2FB%3TJK!F
(qafm$G6`pL%jS3MB+J'3!!(U!biTc%$LH1h''eB#bAG'[!""!#C5`5[)+$$MF0`
$5X"I!V%ZH!&qi&L!!jK"!3Va)3BT(CMhJZ!Cd3!-`IS0[)A8(k##$&0J$Jc-GD5
9%(N@`q+lI%i8608&+i!F1&m1V)L"!Aqj'rY!!rJ02Fal#-#-i!H6e`U2ANP-L5e
af,N(e)#rU!dNM(d9!L#3!"YD``3B$J1-IZ8SdRJ%8X`%T)*5d$*dAr6&"eTeFF3
Jap'bS-!3L*j8B,Z+!'`3"G)Z2i!$#B#9i))c%%6HPCbBark8!FKM(X9!ll(Jq#P
0paRJ!RM-5S!"2ACA"GN0MG1%E)2km6-`b!B!)#H!Kdb3!18%-MM)p[JCA14mc%S
ZFN2Zb2mBG%aNC&#4R`%d`-LXj#4cC$PaNMmb5`l*!4NDF&"2S#1HJ5a3(-U!JjU
#QYb3!"5&-YK(!B!8h%a%J$*09e`"(HMJ'IcFPMS!j)%lNK1qGdrCJDIm$'l"c4b
`!T!!+HZ$%q!T4!%9jFV2`"3m[5rk@X8",YB!&ii%%!VXB@Pb-3c0)SK@$Y!"PE*
*I0Ra[)4'5Je(*j*-H*02'c!#1P9bm')M%TBmK6AJ%dS8"f!-EF"G*XmMZ(YAe!$
`J8E"B-""+Y!%aKJ6(`jmi%&!X"SC2)4J4XJ!F""fm)%-i#q$f3b8dliX"pV!hh#
m++#bLS!Th)SGX3U!"V2i%AaM)S#D@A1SICMll4j-(Z#-5j!!*KD`2!r!&QJHjQ*
E-HEK,!1R'-3i!akcq)B-ALE$GUrHM&Z#i!%X$`13!!FSS0J1RUB&8!b)8`B!"86
Tp!$D3`MQ#3KJ!PS!%E3!*,!i"fM6#JBY)!Mm!hP36aV!RG!(@mFCA'$E'iP"5J[
q"pQJ$CdL5f&*fkP5`(MSd4ki"Mq`R3'!,*K['5##j)23N4P$Kbj8,bH+JG)!@'3
'@-!8f(Y+UimS+,fm0e$d%5(1rU"!kBar`!9JY)bZTqi[(ShRa@BihLrh1NpDbdE
2haQa!1M!h[21'!!@'!,eB3B%`,K5dC'6pjJ!bl-!r!(L8Y+""31N(MEFC(*)'m!
(9X!l5`2e3D&Gl5)%0,iJ`kaA-K#G,@T1,(SpY*pJCb0L5XBY%U$5T##1e%Bd5U3
e5M%"c4!%!&!!k3F$5!G)XApH'Kq!!Hp-"S4`kVbL#d!Ac"8kS6i@SfeGdf*Jr(`
5rS%QHdbEC(ajQI`"`TbbreEIrk-m3l8Ck8cRY`"D)33#"!+!&H#*'$ej4"lm#Kh
TQ4qd)6#J6k"6C4SbZiSIe-RApLimJ!FLeJa!@f'"XqHF4X!Cd!FG,`*dA@3GRd(
!!S!%L!"aj@S'F!!%NL-,*ZL4(lL'T21fKN`%L#$r)(5-*$jN3j4#)EJNE+$%N5p
,`JqN3,K19`#J!5#!!U"'R"iKQ#APqPe8,S)NL*@"A*%6G%8KH3-5DdS#`)qm,iN
D$dLr"H!#H&!dJJ+U0d@mDh'G68QehIZQ!5"ApqX!m+qCLil!"iT!%0Z"JrdRj-$
#cLX0Ql0!E#6bT4Q"p&-!fU"5RqPrX(qXL5))!`If`,$T4MT'%0m!L00j@@4##SL
*5`S8Q"LE##!9J!'$35H1p"9&!24!"!LN#LN#F!!I-68c3J4BJ6MbQ8QfX5SMJTJ
5)',G[*Np!ArCSdFdE*X!V,9P8TV51J!"*`$Sk8IG3`#4E%h$,M($X*!!-V!'fV5
l2$hA@5p,!5'0"9c!i'%#CI[EHLDdrBJY3'PQ"@qlMYD9l"%#9!(GEUj[i'lRlEh
0-$'!cYBqXGDj$1ie`%*ZSK@`8*8a#EJ$Im!2eU4[mU&(LJLPDS,!kQl)&jV9"8T
EcJJ%i!F+L$r!"i&PGbXqFNf)TS!V10i`FKlGCaIJX*@#,5!!l9T"(Hm@F'bdYcU
S)FFlCKbKiad0RVFkN!$!q%!#5i0Ef!-%%#(`"pkJ"6!"bHYj!i!rN!!(,8$ciJ0
r3!mUX$%Bd#b!'@38DI5PHB(`eJ8)!"bSMq8#Hkm"-rJaX0HE,P"B-!*8Xle1Mj8
+%!b2'3%#,!(LdJ5!3!N8!MF`Kkie)d"Fj4Yk&`!LS-%&NKRK3#PF85X!3Q6k&TS
KB!1q3)36'r#0$r6(2dKjclZ(+i!,rSl4-a!ihQ"#@XiMbAdP9Y$aRK%Y)+jSjT1
Y$2K,X+CjrS$hJNNa%!B'M1&Q%Hr!$-4ZGr!1i%#mc+CcqU'4!LrXR3L!*X!",@"
eB))+43Cd3"`h!aE,(h`@aN3!!X%b,!!p`)$`!L43$!5N(bG)JI`Ik!,6@)8$J#Z
B*@ND14U#MI1@dV$!Y(qJ!KiMh`M59Eidc!X"Hi10&M!'B!Bd`-QH[*bFJiX#"Zb
!1i!"+3Cjf*,E26EXH'A'PmkTU9`AJ!!pS$jQbB%GIT!!R-l)JX+,XSi(2Y!()J!
"Q)EMN3mB3$*IUE1N)HN#%J!+EJNFf++dD!$NVJLL"fD%#9M!PX6&EI*rd-fR(b[
3`U2m$"JLK&eAUS'G9D)ji-@+PAmJ0TRbqCEP"XS-3)%Tc(rrJ4d`!f3ArYk3!-N
c5r5!r[ARYGN+L`"pJ-k6%Fh1"aV!mKJ!AG$,ZENMrJ#X)1c5-J%!$ba2!A!&"H3
GX)(CNh`D44Z3!!0$Z2@q1QDXK!qk10mah(a'K!"Md0"CdH()"bVJEBIc9NaHN5-
Kb-h40arB#""Fd'F%#E!%QEP0`!`HS#2bJ46J,e-lTE[HGH'%SE",Vmda(6P5JCS
He0P!)hB$BIbU(eqB6XjP1KTSk!`JU!-#rK+j-CH6X$-U)!Y2m6D3!!rQ#`L@PqL
)HfZKGj!!4[idbBBJI&hkT3"q--!M+$YA50Q!a-D@(q!#`MKJ4`1#h4[iJ!p`Ahb
#!$i$N[S!A*Gr-!cSmA8"!!q!6aLHRM,D)8!8!!*mSJUJGK$`f8@!*(ab5Y3'b(0
TdU"SaJfBl4G8LGD!fDj''RZde38TB'V[p,&He*%M(fMV'bT,V03CS3)F3!jd@`c
p#'L3!*YHA%$`c'lUY-$b%!"IN!#(@A0qUXbA1DNlQDCHa8'`TB%'QFD[KfCGJ!,
`c&c2"dV'-aF6hciM8!!b#$[jS(DBGhaqFfJcFEI#)%#!C`Td3)ZEZMrikZ6F%AF
!&I"lr6N*pY(aGcJclAr`$LB2@DDrf+#Y6ql'lY@"1`M)+!d`qZS$#Y#Eih!E)!'
1@!3i!@+XQbXaTEh%dee()(2q%RD9J"%B&`ai$DL!aZ`'5!!0(Lr)YK+CMZ6,H'E
%#(!!2B3&3+[%`84)`)9A(1*!Cf-!H2!1q!qBR!0KJ)Cqm4fDq1$P4afQD6cBJ(G
-)0j&[-f`lRK$'Z1r8C&%e[Vd)`A4q08%$"6kiHHk2J!#MEJ0k!-Zd1D(-2E0aM,
G%)Mh%(mip-(mN!$[f6J9Q),*AZB,[4VJ,`#Jka)!!A!%rX%hb-Bri!#NJP23k'A
m"ai!e)CmP10ch'#f+pCTajFNdDZ#6UrR"3&r5I5`J0AV!lX1kLIQE$@N1'r@hJ%
13`IbaaQ)ZiV6'AM0IQ,%PBiM"J(F)$f$Jr9-JVhNaXNR0S3"Y+'BA5`'J#[r"qQ
J"G!H,T!!*`*d4(N@*3!@K"ep80eV2C0T%ikX`CX$NJhK3`G""r#ZJ(%[jhp3aId
,(LM&))KS+djq-1b6YYfV@[3dFJ0XEii$aMdXX1,dHZ!FdMU!#1C!'Y!$d&RI(fk
NRFCa!"Xh!c#!F60-(%#fe6[P,J'%(D5d)CUY$ii[r88!Ta[A1jHDL'Md2DIZph2
Db"Be%L$`QE-Z+!(5S,$,H'M!-,Pl$%Vi%@6K+i+$JcdEUH%%pUNiFBY-&F#i0A`
6Mb-Pd"1-qqX"JQ&S)LLFKl00`eG9M,[e-Y0RfV3D#b$hFr(@Cd3*@2&f[Z"8IHE
XAqM!'f$j@Tr,Zm&hF3N2G'HR!CmpY,Z!d@k,82ZP3Ze+J4"F!G31!e3l*d6YD1#
cKi!c!!H8KSlB"q(i[B#"cd)cC,[h&3IY[SiB+&5L4'rljBrF4YiF$'BZm*Kc(5[
qliim$Z%$p8'Frm%i'0*-a"rN$!G`Ad+Ylk-fILped`r"K`C3b1h$L8GEkI-H1[#
di9(8&J0+i!Y!jKkL"aL('2NE(T!!!*3q(J#hXiF&`!EMU)mb!"B!!5KN(4%'be!
I)!&c%rl([a!!!RPNT9UHIJ!%'J@X#!C"B%CB!-m0!)Vr$C(D9"XBq!)9-cP[5+C
2"@0!pJ&S-%B0(m*""k!"G8!EF)RFC@m3e&D0T!*N!05Q%1J$U8!C)!%1""6J'!"
$T64Z`!'B!#k!@pmPj!!594'JmIF!PJ%`&#*3IU4##+!#H#D9%AG$0!!'R!(!d%G
P@S4@88VM)!1q!+)@TIATa!TI!#`!#83N0L!2D$,mJ#"!%+Lp%!!q3HVKT0%3VB!
-Z')e9dH%&102-98j`!9P"DS58"AK)+(C!-'+!["Z+#(BdN0b#0`FpJ+cJS5TG!"
E+Y!2+!'I`"X`Kd%$hX02"59NJ5V)jP)(GS'(J(5cZ8!4#3"8T3AqJI!B8"8$cS!
)L`fSRM`p2iJ8icei$8A9iqGI*3$-bZB#DqJ#`)d8Bi0!JND9$@)(&P8j8+LJ"aS
T80AMCep4JNk#*6JMC!$5cZDb#9C9VQ!dK9@0FTm'01!$Z#'D)"Gi"qD#!`"3"3B
-DV%J8a9933-f5#m)*I!D8H!-U"3S!MSJ[p0($#4@%3*`21`$$i`bC`"-Jpp+la1
L9B,332D3!!(i%cCJlQ034)26i)0M$8k$YS`fD%jaJplJkK%1YNENB$Z`$e`Gjk!
m+-ZSJ`-!0aKRC3!B3&Tf#%Sflf!!Ba@4H0kATj&Ac)&34!-J#!+$d%"#Q&34JJV
K(HK3,A`&i-q60B8H44Z2%DGG3e'DGb)!S!0[%j@N-"&-')-5X"aK1&I8!)!rY3$
m`1c&4q&,$-$)%iq`K(b!(m5"p3NXS8ZBrF'%-Q%r!JKJ#[`!(a!RY)6A$d`i&0D
%`!!d!!NN$2b!(+!%5"lX#DpK3cK!3!K,+!I!!T)(%a!cF'90)4@e!Y!H8%"6f$"
`KA3'&2!98P&0SHAa$@!!PJFiB,T*%b4KGU-!R)4mQLiJ!#!$2!"0k!2NK,4-+K1
S-3#T!%S(p5&HUJ![d!B%K8bD!q!,()Cq`%$4+I!$HS!biP8C!@C!)$'!53&$S4j
39r3$H-8EB!5!!-pI"h3'b%BY&3'!,S5'!p&M&PRT4Mp6JR0&H30ef"Ae$5J#@e3
c`JIi!(98&A!%I%i@#HM#C!d4Kk%H)&(*6"M*!,CD'!2edSR$%pjU*B`Ki!DNBm`
6l`&FP)E&9(5BcpN!bH&1+1!`Kh[2QB)%'!-[J!(3+*842p0Dp4SD!'UK!9!E+JA
iJ1m`G$eX`H(NNKPZKRL&'`!#SBE56@QS"LaHdJ33m"MU!@q!$L"%$%Q3!'%E)!1
)K&'+(DB&,%T!K-Y8Qi'(iZ%a3"jH83+!'l![$9d0d',B%YBfB%"m!5&q8H-KhfB
A-J',%Qq)"f5)M+%Ei!dBKN'Kah)82SMKBBL)H)%!$4#r`b,b!Er0GaJH[SM%RB3
S)YT[$9"H'"6bL&*B6YL+-8a+J2e6L-d"5X!(N!"Sq!0)a$&J,m'%hk&dT"3bKAD
![0%86Nm!`"3P4HdT6)!!',Mj&fh!#m&#E"*h3-IN)T`$4eZE9%R3IGD3!(+i(6S
LSB15&Up0LA1L"e++X#ZLLj`)J5"G5b%3`!pNLDe!8lJ9(SCf`&Gf'*D&rG5l-5K
UL5i%!d!@+SU$iY-M*K+!(!Eaj!BF(%AEX+Gr!3!131Y!*`3#5"-M!"3+K9#IU!J
-N!#+T`Y3k!Id*d2K0H-k#)TkJ!M4%YU+I!$S`JX3Kj%*lG%$BBBjB329!`d9[Q*
,q"Mb!D%@VJLk5!+aBP'B*mk%3D%I0"`DL5rKXbKQ#)Uj)KF3+cC3'"!)%#Y#!V5
((5#i!)8'A4ePH,L+1i$i&"4D),DL(R!X%Jh+iQa',@U(-5&c+!23K0+L!C!!,PS
N35%-&BdJ(%GI4RJ11%kfQjXB4e!!Pj!!,a#0+!A#!%HSPhf'RK)JF$p")ki"dD3
'2$@TN[U83993l0!"J,JX695J!8!dk80iJ)2iiTb"&L,YS3rK6i2(XD5e#8JcJJf
52Zd`&+2)b$,pJZE6K,5eaBa5`-aB0!dHD%$lG,V`6cRMV@4'1!!dJ-rS"S5-)b0
"C6)H9aZ1bXK"S3%H&1m8D)`8-e30a3EN$kJB6R3!@%C3Ar*8!)`M+!"-q"3bJNS
"4*'Mj5U8!,-bU0&INJ!$P-iT"E)!d53*c%lJL1@K$IJ"$U2!e)C3!1C2k)"mE4@
j%K0"$N!Vk`AKU##T&bMDPe))X!#!ipSSRaJ#[J"8b*NiENm2aF8V`Nk`86pK(IS
0*Z2Nf%pYMLm1E!4&@)G0'[6!#f5&E%!TmVKa!T5!*p!fTNlSSBpb4IN$hBq9"3B
J!CT2k$!'#!&i)b4J0eSHf3"SmU4dK(pMi%JEl4L%B`p4X8N6LD-642C*!)eM!)#
0q"Qp8mr@H3a2aG2@1'X*M-(I'k3CR50)31R6Ma`#8i!K-*,8'mj*)b-2'%Ti3R0
PeQ3CFB%VaU,%MG')"j!!HTb2kH2kk%r!!Y$-qbJS@3N(!)Ub6+K'Y-#Pf(e`MhG
!'M!'j&DK4kd&2QC'Q0'Eb!"F3QFM&#$cJ6m+ia[!1a53!!&!j8K&Z3%'`1Si3TS
!)L383$5BN!!UT!BJ3Z)R"N!+q9bCN!"-J!r%3RU3!%f#!QNej3qYQi$4kq9@EPV
iD24!K@I!q(!mUQ&QJ$rar,N!-)hQ9Lh#38lN1#)#i%[%(VB61Z`ph)"S)rlJA6+
N""!H6SJc`Mm!!mL0b8K%Gd9G!rC9P`JQHSQ@"cD`T&Nh6p3D'8ATN!$EBaR33ii
"le8S33f`3VI3)XLHE&U)9B!#,#%!,S$jiJQN!P58fQ"'6!#b3![`"9`5SXbFCpH
`E!QE(%!*N!"B(S$4S%J#4iU!)hP*""B+J#4Cjl8*P4dA3"l5DlF3K8"&(A$Q!!j
!4PjC2S$*m,Cm!-iAU,"jh%RC`$&!8#N"'`$8XJ#!0SP(mr!(j!,,J"RJ$LL58Yf
V3kqP![i!Pq"m(@L8!$rafE%"Sb%B`!,-%JQ1'I%!3&k!&iX"H)PrJ"GP&%%NBlT
!!e!Sd!`l`)[Pr5`9YGrKX!mFH0CGZ%D2i5#BK#iJ!4J$SQ6B`3p)'qCH5h3Q!%p
e@B%"6Na'`jiA1'NJ!S5$2P$+TB(2JJ4JEV%*#ZAK`!qJ!%Z'fL!R,"TVS1[9"[B
$G)-p)!GD'Xq!2#"5q5VJMaI)"Y!!4FBcJ!qd#5#P2A![cJR"!"e!#3J,4i35a32
JG[C&Na&pm3-h*3Mf@PNKMi$#PdPX%R$!4HK)KB"[8%,*Le![cd!bS3Y%!2"!2MR
Ak@USQ@699&SD[NV#m!cB!crP[&GS)3*#@e&jD(@09N!rX%HQ54L!cY82F!0pj(V
LKYa#,B!!`J5BPA#P!!)&p!2B`#rS6TL9"p`lB!38%(KPSi!#Z!"d*@'*$GJICZ9
b)J#i!$5&0%)cm'EH9h@M-`J!TKacJ3V3!HX#*89Tp!02'`r!4#J&U-!Eq!8iPJ&
!$i$E%33j&Fd!"@!-i"N3-2@N!XN2[$!(6$fki2!e5l!$Xi3mN!!+0!+C9k#KS1N
)r8!e*SiGG2J!*"""d!1*R2JA3FJ$U%!SX$Y!9`P$2m!20#0L(cEQ@DB)S@Abjm*
B!3b!)D!8T#(%4Zk6KM"8"X#4KKiZ!#X)AhNFM312KLKR`"!%+-"mS`,JEFk6kUM
k6(!c3*0J"XJ$@!BN8!J)Fi"!k-B,T$3+`0dJAIS%Zd-AFJ$iP`$Q[Y*I&J,)ea`
!"6`,!3!+d&PqPTYPmXHN+3@#`)$j"RK4"d!6TacJ#FTG',8Z+&X1`'B*2E!EdL8
FB!2)'p*PklJlU!(cjG6MH"ad0KF`)!0`'rB)#9!!8!1ZJ&P*#4!#6m)HN6dB!2l
!brJ"N!!!KZ@3!&PN"J$cd)a`!%J!5QBHd32SCbc'FJNNA#LP`)$T`p%!fd#3!!Q
UK!PG!9R($D3#cmJ(F!BXB$a!!X#!-"4RJ(jLFJ%$k*%h)!Hi!#U@R*NLR&aeTKc
3!DKB)`JYm'2JPCb!Q!Q0k!rqJ#G`B@+ASUAKB'$b!p*(q(#6k3)"!(V)!b!#M#E
H3`!X'[5Dif(V6ARp`(lKA"#9N!"3"aK%qKK3(q2M(CN!5jMhm!F!N!"NJ"Mi5qS
4`53!m!GS'96Jq@B(6MhKBBPjBS++Qk@I!@J)'PB6UCNrd!''K[QKBc5@l8pd1@H
%Q2V#!X)DmJ!SjQE*UlNV)ZB#iQ[U#p9QD,PSJTD0CXVLE(D)PNBrm'c@5-IMY0P
YpJ1fe5B48"SBDL)8D'lb#GLQNc!3##C3M2V(E3+ESH9)i@kq!@1!FmC##)`aJS'
*$p#E)DDpf56PQbBQYFP[pJ1q`lHCB5Tr'%#pZ5kd"b6Q@kIq1C`TCQMCVU`56*%
603"%Prc!Ur8q,(b,`#CaD#9D45@RU'0)R0QPmQH9Y!,5CAYLF+Tc&QG8S"4XQlp
QapN2K#NjChR$Fh+FQf@j@@JP!TY%@"N'Z*cp9"#J$`!!9S#l!J`%!65BVJ-0#!%
`$8Y4"c!!3S#c*3EJ!''!@BB$"!"kJ"SJ!mKI5X()K(B+!'D!#B!!$&N!3"LJ$&!
L8PFCS!(3R6Q!'-#'$3"VJ(f"!`J!"qFTSK5J+j4#2Y!Nd!rF54%!!1J"!)$Lq3S
!!)pRj*NeX@PS`"QJ"q!"Bi!G!!#)!A(!(G"#j!&d3!`J!m`!0)!08!2d!$R!$G!
#f%&G`!Za"D3"#a3ES!DF!'[!$X!&N!"-EX$&NJ#!!&V,!"!%6!&%!'"f"'J"@-!
3d#))!9(!&9!%5!&C!"83!J!")`!*i!@8!#X!#Q!#I!%U3!V3"c`"9F!HN!!%3!%
0!"1J"""+1J!I`!2m!%j!%q!$l*jq!!,JH`+I`LIaDA`#!-LRmXPm8J'L*qPTHU+
HULIVbAeZ!GpRq+N%R!",J1e*-U@I,X$ZfAX'!"-!!@!!)!!(J!D!!3`!&N$'&`&
F!!@!"*!!!9!!6)T5J#+N#-i#!0!"2!!9`!D3!!!d$`Q!!Z!",!#3!`I!!A`!$N!
$d!'iQ6I%!,!"T!Ji+!lU!Lai'K8(X!'%S#r!!1!"0"B!3!m!!q5I0%!0B!2F!*!
$$T!!!k3)%%!8+S91S95S&&S!"!"FJ"e!'N!!U-JQ!`&`!"h!"i!LJ!"AJ""`#J!
*,9+&3J!!#8i#3d,m0!S0N!#1m!pJ'%J5mIN%F"N4A4cAqm4aY&%FpbbN!M+!rF0
m"!$a3af!%md!U+ETN!!Sq$50!rm'!Y`IBS)5J!Y3S#-6R5%-6+)@J"R`kH!"&#K
qd`4!!8G!%f!'L#QF+-'e"0BJ+3`&#J*%1!X1He)X5&EqJ$C`"S!"am-ri!S-!IM
!#HUZR(VZ'!b3!!h8SUk!#&#KN!!$)J"#U4T")--Sj$!M*!")3+1J6c!!r)6)Xb@
%F&0K0+Srq$HYJ$p!$[4UeULJ"J*NSqJ!Z(A%D3205,95LUkLSB2Ui!h!!Za*(m)
$D*EKJdRi#"`2m*X)8)VL036!#)!%0%bTU!@`!V#Lri"GFikbS[rSUZ)2b$J$DHK
3N!!LQAY13NS!&+3+J$q3!%p%)bb!4k@00Ja&(J)("c3+KT+k0JQB!I#!4BS1B+3
6`2"'I$i#(HQ#mj'H@Y&H0`U"C+2JJ$lK!'dmLXJhUSebSc3T#!51pU2Sk)+M[@!
TB%#j),%p#`Q!,c![A&Bm+5Z+!N3i)-"mB`F8*!H!eJB-,%-B!")3")"r3ei3)!4
3RA4%KC*N(J!N3!#!P9DP3J!a3*8L!8*!@LS0#!*"!$c!#!d"p)#h%8haSTF%p'!
,9!qqJ+84LrSCc!!qN8Pm!9)!&C!!",J"h!5Z04$X0h3QEc4&)(R@"#&!Da@Qae-
M5JmF!HJ!!-!)0!a+`#3JIB!!8i!6!!R!Mfp,K8)2a!,,3"N!ql3#!5QKd$J%T#(
!'`3UhJhiK1%JQA)JRLP"Y9He!A0S$k(!"C9X(re`#!#QV"FH!*Q+6D&$`F-E#3!
N!!"!$!3$))!3%*DLTF3!-$$q#32!!$83"+#PD@Ndd$!L!,d#r@#F+Le2JK[kb&3
3GF"h5Tbf51G!HU%#!!"UJ!$!`MNpl5N4F#+eS#*FI!S)l!+'3(`D#2`+4BehqL5
!TiA41B!$0%a*9-SM"1`F0J$p#35-Ip)()"!-2&YS+3``!$LScpBmG2k0Ir48FRU
K,UKTU4"J!L3I!!!Hm!"3!i*!0!!)c"'``#$3"K!!N!$!)#!&"!"43&m+$r#RD&C
jqJ@3!+%hM6G3a$N"dF"jfU5*#5$!FN)!-!(3J)l+Sh*U3dpe"LIH%#h!%R"*m**
Q!$m!2ri$DN'8HX8Y3JF&Bf3)(&Tb`"J3"Z54Dk,TF!N923`!-AP%R"*T95-$m%@
K%`!X80#FCa$!"-"[N!!!N!$!ISUPkRje`*ED6B`"EpHCP+55UCG3NhT*9+P[#lf
@qfQTA1SB!!F-P1l5h)F!X*T5`#+J"(!!9LTqX`MNIJZIRLS(R"5*%dkNq,b*F4U
CDUE@LadAP!V`F3"D"QF5TlUTC`$Ia43"I&9AR$UReUQ@QZV@6EJ"I1T+JD5qD8-
'U"US1UR6T30J!F3NMB`b*`!)!4Z!PX%'k!2+UMY`T@)!G`+akCYbUEMUSNT'(+Z
R`![`*23K6m+JpL5J@ES!!D!,I!"2`JR!A`%!)F%!G+lL!1HUE23N#!'T`+[6VFi
)")!bJ!8m!9a#GeS([!$(DTbjR+JJJ056i%8q#4T!+X!'j(rk+VmU"*`"fLS!)!B
Z*ejN`&U)T!,idm%!$#5Xr@U3!1U`mS"5!*1hKLj28i#INJVB!JeVR%8!U!(h+X,
k!G!2r'V$bT!!%!!N3-2UXA)!$5X'3+pkU`)*[3SB,J)Z+le+!mLXp#V*p#6BV1&
Uc&TNdUXFJ)kUL'#X,U[-QJT!!JdVrH-m2!&-DhJ+Y#**ZN!UJ)eYUcB3q%@eVUb
'D#JaG8iG`%"VUL9*!+!!"I!+-3!bJ2B#DqJ$!B#Ejic`$f2Vb@@fHKX53!bJ2k5
B&J!S8!%i!A#V'"!q2(@K"#`JGI32GkYkSEF#QaD!LU-"J!+B%"$`DLJP,5JS!)%
J!%0!C3S#L!$YJpSk&B)#$3$JfXq%$l"'+1%-(+l131+DYqkY9)6MUZ*X!%+!pX)
"+&Z[%!63YLUL6bHLB$Mb$kIVe*'kZUDV+q2UZRSJX+[X#JV!2GISl@Uc2Tf&"40
aNa@ZKbXXS,SZVRbVkaVKc+i%!J"3VJJNY5Y1!3Ui!0'V`3#iiMlr+5c`H%+M[KJ
6i3C%VEX$'23%m+kSkr6+ZMDZ(SJ'B,Bf$l1VF#'3!&a,e5KaSiMX$T2C%f!`S+l
MUjH9XjUZm5[`5VffV[8V+*!!!)b[$N$2DKG5!2FUrG$%H5#$K9f)!k5X&ZX9SE#
H!KTV(c+#p!$j+YMDXSDRjqV!5N@%$pK!+R!%A+eTb,eDYITr!Q[$DJ'N!Nl@Nm$
N"3"Hk`bl,B%#C#K&i+`Z*rk0h!S-b,!QV&d6RSD`#fXU!-YX5kB!%XZbfMA,b4p
eY3B!AN$0'Mk%D89Q`eSK,!6U!2Y+DD*dmbUPU3C!!9rV&+Za@V%kE2K3m!bYi80
%em8q#9h"!05`fJ$234M,Y9+D,N$$5Z*4QLB!'SZaVV(D6a[,42a@3qZjqXB#!&2
DNp$(2JPiV&@Jali,2B3l)-AZUh&(H0T$X!+S!*'Tb6)4e8iDLmNZV#9V$`%*S!)
ffj-3Ccd&(#bGJ,%+!5H!aJU`0U`5!#V3#N!!"`-Ji-SQX4+Xmj!!#X3#[DclqXS
bV+TX$m%$T!+A3#RlCE@b&bX[DlAUX1HU(!X!M"e-"*+`#[La2B31F-N5T`6!QVN
mL3")!!4J5RN!%N!%)!%!!a$!Vi-26!+J53*JH2aD5X%ri!2P2JF&"+"(r+Id!cF
VV$aF8@K#!3&8TM"UfU82B*hF,2f!%mep&q3Ep,5KPi*"(&(,lJ$ZL+p`Te+%h83
AY`D)!@m!)A+YQU&4UarEX)+VD!5jfL@HUd+Ve#A5&PK2JJq3!!T-!0MX'4(!PV"
6E00Ub2i$0%!U)-dk2c6D*A[#mNBkE#U3!!')X6qF6TZarUZ&V(U4#V!!+ZX8#mZ
@V"TVa*S+H!#i,"+JbcDc-Hd55m3@Y4K!+P!#[,,CkVDUX3jU%LX(N!!+V!!`VBh
+*B!#6)!,X0E&!898!K!$8!SJ!2e`5YJ$S!$0DLRiB[U!5r3S4!SdCJS6!-!!Z'J
!!!)K!*!!3#6`-m!#JN!CB!')!&&!#)!-#,BL!#!J"%3!pUJ!S!S8Sb"!LCS+8,*
e!#J`"RLR0qS(%!Ti!#i!)J#irJ1XJ!K`Shi"S-$+QYH+!USYPa!+`"'QE9jV#F5
fV1d)F0Sb!U#!E*IA(M99,"b!!5bXU"krYip+!)*9e%!M+PY5"!DJY&iJ3LS-!$K
C#K$)&i$'1J(33**&!(J#bj!!6'!TL#P2!#J3!#LYhLejN345!HmVKS(!qUk,U`*
J1X3!S)1hS3%XVYl'l%S!"(+8V"HJfPD`d3$mbYkbVKJ!I0Yd&5*QUh[,!G#h!JN
SF0pD#SQ$IQ[G[Up$c8"!pDbhiJ5#'q"D#SrVJZZ`bJqU,AV,Sm)!!d("P0Hk945
Z-l#i8L)",ZL3!)BmVS#FTH!!q%-LJ1c+iBi'%+jr@q%1'HpYI&Z)J!)Y,UJ)ieD
Q(-$Y'YFkZ&a!M@Zk[JJ`!!b`8$LX5X$Ik3LS!8S"+8!(k!-5!*!!35c3!IK!'%!
3J!"Q!"B`"3J"@UlLSmm*0S1-Ye8P""RN"8%5'i@jJTGlmRFU!Qi!%A"%T6!#J#Y
!,lddG1Fr)$J8(edZRC%&2!&V`r**"*`+FS-*F!%i-LNV$X#-q!3JlMm!"0"+UB"
T-`3J!0$!)12B#J#+J"$`jTS!N!##)Q!#6!&`3$V!!+`#8i#J'cUB!Ga!P9Z$[VP
(K*B,!,J$!`!qJ1Q+#8l!**!!+U#Z3`$FZMGBZ34!VXZ!KJ"*J(T"ZG+[8B1b0EN
'!4US0"!-4!(+!$la+c!!9!m@mJ9iZ0!!IXZ-e!j(lMQ3!15UZJL!UfX*l,92EV$
cjVi"dJ!`-)N#0i-,aSB+P,T5!06!"!)$hmfX+b0!!NdZTQX'-#+G,LJ`!P3*)3#
PS!Kd$+KV$0"eTVM""SXEJPb[(%M!-9-C2[`U"6"flJ21cNHS!23PS"dr838)!0)
((1!*J!%DJ--V!%3#cJi"i2&#!KG-QBX!6,bV#V%!"h`#[B)5J1HT&+0%!+$biJ-
"lhFVhNi"%3i')0k#ZfU!"@"Z5&RTK9r,$8!!!8N#i!0F!N5[`fS%f'*e!!%![Jk
Q"3$iqJ6!%%k[%!$eZJ"#`04,"kLf%X!(B$#m!!Q!Vb0pR!)AP`!`#MKCqkJ[CU2
LXNQJ6k"X641N!!$J!kaedB"UbrBUI`3!+%"p#!#NJ!!`pr+SGLm3k2B1!($[!2$
heVeI`0hVpK)!F#m"F2J'[Qe[hPYPm,d'`11Eq!UqH5mAaIG5!*D[iT[hRL0m,`2
3q@+qS#[Ff`!F[MDZLHZDkVbP*G8P2jbh23-d%!8%!p-%&"!-T,k*+`L`Z$B2'-$
D'J*%!3d6jFS#a+i!!'2jkq5pHbmS-!$JYe6QN!!4iqiP-kl5bQIdYbAZL@XkJ!)
4!(lliKj%-Lk4fc03[q*%`)[MBJ#*kq`U!@Lr-blTGk4@[q-[+)!"D,m`V[Db@hL
rkfriqpm#Q`%ZMXX#*+iZ!#K!"1#h$DjU+f-J[Tk[+)#h#3#Q`!(`q!UTb'F+S`#
`!k"!#C!!BV`"M``8)!*8X6)!*R!"ab1LcB1,h3ip--!'c(9ZYJ,T!a`"6m!Q!!N
!"@"H8X3LSJ@i!4V!&"!%Y!%6Lc8P!%!$(JJ#8#RJ%P!!%%!0!!2IU``-"U!$ckj
!3Z0LY`i`"#`""jJS!!I#BdN4"!#M3-,*`'d!"U!hU")iX1pQ32J$26!d!!`)`HS
!m@[A6,[T,ELl"XaQ!`%NF2D#Xb!ZY8$fcJ)A@IHhfRkp#3!Sm"IFYIPXG1X4J,1
Q`3!`!5`!)j6804"!!1)!%'"if#E&V3bJVY#jVX!-F(Ii!kZ+Ch430&eR3-U6!qm
VMM#HX+UB`6#!)aaX#!#2`J)J!UJ"*)!RR)C3(ab!%$#q#!#5F"U#!,J"-kNRl#j
3(`D!*baT(D[M#`(!!!bS)p3,i!BS!"$!f2N###i6J+9`!*M"$J!#-+!5!++`i$!
"!"8h"!1!"r`!!DNM)!BB!-p`X('#rTdHJ02j$f`"-N#)m1"F!FP!A4S%c!""!*2
lGdB#D`!')!%m[)(`!m!!+#LrMKJ)+A!$%d#%dkde!+f2!0!md(kFU$h3"K!"UM#
S'!i$!$`!F9X1[be23!b!"mb&TS2d)!Vm5#4!$"$K2&X@J!&FbS8!%Bi@)(@&!(c
!mTN%,!%YU*J`%EX'#JX9!5SUVAS!#*!!"+Lf4Di2`![S#6cUcNN"$!!$#8A*jF8
)5P9Q-``Z9E"J0jMC'&8q99!m96f%3R%%!&9K$1X%#2!2)U-bB'ULI!!$!3G-jAf
PE,T!!K$he"aQ`0ki*C!!9Th9Cc9Z%#'MPI[4@CP@,)8Z8#Jp$eYAei8!Y!(5!')
P$TLFH1SKm%"fJ'@5QkEi!+V&d!4JH)J4L4Ghm3U[+Ml!MfH$R4G+!3F+"4#L!)"
BTJ13!'!"!#dJU!%!NJ"Y16e-!B!@0-&mM#TaK2VJ"L!!0J![J#G-PJ6!$G"e(DY
6!0VQIDN#hb`6X)kYBac1p`BB[`%d32da'b1em)J!B"BR$f*a!&*l9+#jm@j-"U`
!+i8-+!4-!Fd),"!DMmB%3D@4$c+F')-ZF"chKF[%E+`8'!+fmDVb"JL&`6&Ra4[
,(ViapT4%#MpkdkT52*4@,mfcN!!&1!1#KhRX(AY@+`AN3)+dalVaHraCbFGHEhI
mIYc(HL*p,"cIab0)#$!G5a-%!@JX'QpR#NSQT"d,L02$E#`$q-If-AJXQ@"2mj0
q("E(aaR9Nj!!#JM)b,%DXKaAD,L!JL`!U"[CmBKF)E[(ql'%,)"J6b*MK``!1!)
I-ZLL2Xl'&Pq$V"dRZ4EbGk`8""-VFLNhp8$)k(&D$!$`!J-b0K8MqiHc-3a3)Vm
"+!#3!(`KlmMKX@""(lGLD09ar%6%b!6!KebVqUDEa0*jB+K#A0jHh+X#'F&%p9"
[X&D(3c5`hK%"eJ$M!"E$(K,bpA6!e)9+J#dJjC9"YK8DF$L"(Yc%5A&UmX8q9(%
5!)J#H`p30JV%%61Cp'-%C&-jQJ%`3#%#LidC9R%fbN1CjH%%d!1@aaG!!14KJV)
SS+4aLHp)!$!+Y&N86kF-r`M+DJiBTJYm!HB!)E@c5DZ0d5DaB9"8"SCH['f3!-P
%KjQ-d[c#1N)d`!R-#*QVQb`Faaj3FJ1&2BN!8i#RB*BTblYBh1%N!!rH&dAh#""
0Q189G33JEhqEbJF6S4!Ua'ieAEK,%i#5Z[d"'Ek$(C!!flc*C!#a6%2)b5Q,AQD
Q(!*hDBbc+qpZ6d%2JJ2XBVNbdA"+q"%NA@XQ!33"5*-R31Sa)PP(`Bae,"8!-lG
%kM@-"V2"$)dL%E5(*b$p%!'lkIUS84%%!8!TX(ip!q,!ArAc@&eA9"&!,dA-$"L
9l(h*!Y")'c9!$$m$P2)4$#ahdA++F41@c'2GM'"F@4j'J*Ia$d!V1YEJ-4Al'@Q
ApXM`kAVHXJke*Q*8-%@$i3--")"!STK3)+Z,8Vrd"Z!$R`-cS!!d'(K9&`#3!-P
99X$@r!aF!3$C!2!-B!&HFaB!N!#G$XB!3!B&2!2(J%5QN5&@`J"L43cJ9FR!mI!
-+!-,-pD"GGM0XN$Hh$"M(3"C!f#5i9@a31Q3!*3j!Bq%8ND993C3!LMX*+E*Y-#
-%!480a66Q%Jrb&#%+4h!krPk50p"L`(%5qi6k%!'##p%%aU!-Sh1)ph`Se)*2p,
$UBamI93jQG!%2V3#!S!XJ!)-,Jc!KF2PTXR1J13mQB8*UM-J*3"CA6['4e9mb-j
86bX3!+J$8030NCC0Bam9lU!,"!(b+&QQ1L04Vh-dB(2*cKC2lG`m%`#k-r3F$6L
93B!'`$Ji+K-YeTJj0j!!@d6D)6#'bjT4$cJc#!!pT3#J$PbIeTUFp`J)$*2NA#F
0-(P"J$BEJYe1FJ#eE(RFEep3($Pj%%h#SbD8-![-d42$V$FAc2b'4BC!19!hJ+I
J"!3!KX!$l6G2d&L(-'F)Y#'$JjcJjj!!!@`HT*!!20[2*m!AJ)AUcrcc+$RH`FA
8,"#!#eaM-`0CQbMBcbM!M8V+@3"5CB`(&h0D3!$`)brC!I55P!MJR!#-J$N5+!%
!LX#qe#rp5pBDd-bcf9DI"a1`mhc,m&8"@F)i$Y+!$d41L!Z%C"mK!&L$,S#+4Jr
B#TSH-+!e#&k(Jc53!'AT!Mr!`B50E5iH3#T`c0i!98-pN!!+*!&DJ`B!5,!#%!N
'8$93J,m!hH!2-*9[#9&9!k3#0`!$X'UGd@D!%U!X#!!+`"qY09J!Pr3#S%Q($4,
!*6f#!0*K3kKB62!!V2!Rh4"HdJq!+PddR0)#3!1J5P-IpF)T(3$B!kSd*fe,h`1
UG#KY5r-$UV3T,4!3SUSdcc"-l`1ZG0@3!!r-dRb$,KD@i!fU9&U&0dJ!HJ2IJ2(
q$AL$!J#Xi!d'!23X$4J"-i)2)!cN)CY,4-F$%!&5J"8J"D3#63#K09*`'#T&%h"
Je!'GFbJaHD9*6!@+i5PS!deD+N!,,"5AK""3""b"mm)d)!&i9$+JY6ElJ!"YDLY
J8%mDG9MM`55#'[f000344TUP4NZF-0NpRdA3&aJ5Pd150#!2'!i(R6i38Y-$HX-
+%25*e,-%2Q"jJ!"%3"kQ2I%qH9Rme(B5%YS#hN!-A"!Pe#0`3U93+e3,T6!3!f`
9!%"Y"#Y1F5[`$0!!kKa1,5I3!0Z#'!"GCJSrkl0`!X3p#R83m8mS6+CImQ%b%`"
a)aMd#%JII)$$GU`D!6CHlb&HAY4[b"A&Fp$-Xc0B24$`)$IH!J4hZ!#ii"A9!C5
-2[0Al6N"!1T$2E(Ib!-fRQbk!!J1&H,-XCq4%l)SR$(Il@Fk`M6J6ePGQiX0J!U
B&SV)"q!$&$@,R58K$d6@0q`[KmYZeJ*B*Dd%%!&RJ"&3L0%"6H*S+!33!5B8#J8
2Z!!IJ$IJ8$X!Uh9Vc608@Sh5)L%'Z!1jYCUj@pF"[I8R-!BS&(SA!K"A5GDq3fQ
Y"-5![`S4!$hj+Up%@Ke9q5Uh%5%!9eXmFM9J,8hS*aq9YML26-9aG9LYS&%[f2@
i5J8iSdH!"D-2h&qA4*`J@Bpf)S$K&cTS!rBe!8!0M(CbK(eG!#!$A`$J9`"%0$F
%-c",m&c63&a,1bX$LC`rB(LS$f)%!N!,F"F(`"[%#KM'34i!)!Km)!+!*N"T"!#
m3!#3!+"+!1V&3HF2e'CY3)+0Jb!+Y$2'!`!JDMI%cc-mVpM$QcaJ!J`Z#`#-636
P2Yk'APBAAJ(FJ&La)9NH@)!V)'4l$N$&-l"(TYMqL8Z8#X`#1N-rP#J%!-Y8FT8
T-(8TYS)0#ZGH4*TqC9Ab!',&!I#1cGL@K1k+!1J"0lDe"Q-I!,*-#c!0F!#3!)"
$VB*-@Mme2!!VF!Pi44RJRMb$&c8JP*A0#%j!Pd-J(`#ZJ(b0iYe+CM3!!'5TIeF
8%q!0d$)(J#5`!U6B(-!dF$LJ$T'ef&4Qlp$DJ1@4"2J"0H)Ji`CNfM3fl5`0+!(
H05eb!&6CV1'QRGeJ!fPfMMdh(J$qSDIJ$B`,&epYh*GK6b#!%SAR4CD0@@!ab23
*IAA0V![B!h4!(R*&#3aL"C,*aN8cQ2+b,3Sdfq'SkQaLZYS(3,U-Bm2B"J!c3-m
+-#*6")9+-b!TYPT'AY!#Q00PH6R"a43J5VF!+&([DbY3eb3-dd$Fi@Bh"48!8I%
26!-De4)`$4J!,3!HN!!!f!0j`[%`!!J#MZh!c8(YMPPfU5d!L!2TQ6N3!N`GkX$
!6Eh8fkR!)&"$c"2BA2JM%)T-"Fm9j3'JKjD%1@"j8!'aBD)!!'J#PNF(-%J9-&b
8Ec42R0aZJ""Q5@41P40j)3D@fI+'3CeDVpLT`!G`@2LDVVB"B!I%fM"f!H!0p)d
2#1-a0SN))B"%!alb)ic(KLc4k()mYfB+JI$F)4365*!!l'4C0LS3"q`Up!"@H1S
LelmJjX4iC0T6YMb`@GXr6aHXmYP"*aE!D#F"M(B1`'LhS,'R[8G9BfP-!lEF!+!
C0Y`hpj5Y$cah"F$$p6UVf)@hmU`2F"H"!#C(N!$%V&F8&Z!'L"8$pV[aCXICJ,H
Si&2,eRIf"j!!Cq-rC,ICc36kfFc+&E8%#!1dM$iMAjF-#qUU@#VH6!DGQ`d#U)U
XSL*`-r8NY)G`D$15R6MMi+%(0&$D"!BeRKNHY(IIK5cqhVNL"B"mm!(FBKYJI&F
q(+2iF!0S3J'!(h"pfcN'"Ib9KN`Hm29d'6U%9*3fi&ekGpf[4+CGDG4NkJ#TcE[
3cYV!FdF!k!#'GSreA5VDJ%#hm%`N8@2Ga9h26GN[plZJ-k!L#R9G#!&3'`2iL5+
D""3N03q`STAEViDB%*Hd"q3!L0YMPp[C($B`C@X"S`)pHh)je*!!!C4J)f3hl4q
"$1VK(ZQD'J+#f`Pa#l69(TJ#T3-#)&RV!9Z#Qid"H"YTTlFaHJ3!d`!*d$!)!,L
T2p#$@aV5J$e!8(m"dd$&+IciQMDi$832)0fMh!F89bRCDB9NR3V)!Vj%Hd$@Z0N
N!!iqLe4)6)!1N!"3c!K-!#2#CqYP&)pSJS'6,!-"$Sj%'J#6pTX0H!rG'QF6ML3
a!P"i-V+Ud!-Y3)U0!EK%+rD0bB9liFU)+c"5,QTAe!BJ$@m*cK"k4!m%&K`Sr$@
3!%JK[)YG#!hN$,e25@SA'J2NY&#F[6C98Y8#K43A#qM",NJ)'S0&PI,8%4BK@q!
RD&4j$`L!)HJT8!1Kfib`",!939mH*3k-J'C$&e"c-'QQ@VLp"D,LH1!`hJADfQF
!cl&9ch*@P9*XLJ[&%!"3050F!$S!*+d%&!(+#-"NEU!@")%i-+kJblfa953%X"i
4mVr4KQ0$8JSi[P,mE[I!(I*&$3rRm9QF(Xm)5%#MpJMX5eaAf58+h!e&Z$,5%X2
&&-dC6S0N0!$j"#)La!S&ZAp6N!$VL9Bh3B$M*14"Gq03K"[N%MPA'5#ASeJP)Vi
+BL'0Z%[8KUJ!j!3YRViU!BS!p835PKV84Q!@"9b!"d8Ui)[2iV@i,P!"B!1YH&!
-#"V&ia41(SdIJch9%$8-&J[1H#S`$-,L1(P%+*4E9D@i8(k04bIDpEJ0$%$J!pB
f[P-`IL*9%Ik0rmIJX6K1MUI)j[Lr3DDNieJjGUNPR5I[12&J2-MMc3-DJ`eSAIR
i@c`4ji&*H!m"!MLMc%@L33pi!pP(c5-0$*9[(`ePDMDU5QV+BN4TR-k2mj!!Kd1
M0S#0qAM-e+*65f98jb'!BFLYFSX#H440$KLQ!8@e,2"DMJ#Z-L1%Tb)#Q`4GpU@
5P@XLr)`C-6j1kENm,+m8ZF!d-!9')`C!,V!1b$l[FVa-ME"@pN9,@Qr)"%)8)iY
M@p&#Fmkc4FX"l$1Df$8G!220h3"iMk)pGCh0*C!!!iJ!#d9[1`#TKbPGDHA8J2F
Bi+3&!2)M(2!T)J"cGq('A3`!qK#'IB-T"HiYLN$61&NYJ!`i)e!"dZQ+qZJa%9S
!Y(*GSa+kJ,kK)a!!ZJ-63A4*%e0DHikI9`%q`(l196%4H"MdL&lMje4!JEkL#Uj
-K!G`AY&VVqm4$!dX!P5!&2#%,3&6`"!J"6`"BH*NP+65i`LPLQ%,KB03J!N3i8!
#$PGfc!D)-V(2TVJbXiDhSbP`1i-!ZA-k9j9DPTMPl8C#3+fGjKb!LCX!BS4SX`#
B!Ec!SAT&'!+)eKC4"S`H)!CbL%rVA(0Sir"[TbCJ`'PRTBZ(Uk,TSJJNFY0C"('
Kd!&EHJBb"m`5bN"Jb2%*(A1F0-!2R0EL@iUYBd8[*BVJJJd!!6T!aQ'a5!1M4"%
3TerTmiL-"!3),YV!i#+R``"VD*FqSQcT2)$daJdBkPGk!6!UHZPEZJq3!0Ki!d$
!f%83b$YPYDCH#)4Z2-"!8!Mi!Jp&kqJ$@",13$i1"AL3!(i!&'!BmYZZ`@)S$IJ
$6-M&rBA-!6[!%6#Vl`"'!,pYT3X!!e[N-!TiAJ3!r%#XLa+H&`Q!5b6VPd4,A6A
d!UR!,T!!#L`"F%!'F#km"0EM*""Fk)MP"HfX"V"9!S!J8+fI#p&iYVkYqiJlp,I
H8SAVa"%1FU(-!ARj2h#6J8P%3")`"8!"E)-@S(K5&rcELr!"B!#b'qdf@0i3+N!
IJ5FS!pp@CN3!J!1Q`0&eA33!p8#%,3p`&a[!'k31Q1H)-3#J!i3Z!J!E-!!B!qi
-!L!0$!#1`%HB`*hXi!$+VV+Rl#clbXkaHq`JZc13!-#4l"mK!k"irMS8J%UqS#q
LFb'"h"a-2B6F#q#MP0-lY'A"Sq-pIFNKZ)@PVa#!-%"29L!hK,BBYJ!"%6B9`&d
S!'m3N4TH!(RRZHRJY4X#'e)!)!4-(JjEf'iZMqf-J-e1%!`8-d)0i!jd-$K(-QM
"6#`fi&KXpp`3HkKlVJ[F!(T!(1%Q)bjLa!&!$m#chF8JFl%A@c[!XG@e#bRLBB@
b8d8"5Y4TG[Q&f53CEklC$$)jR0`1h)5$%%$268hAJ!QeRZLjR`&0F)T09ANJE%!
UF!XNbdTf5)jJYL3d3%Lq95$RL"8e--RB!IqJU"ep&#ae1`jS4#5#-L#2A(ZJH$6
$Vdd!U!2"pQ-fb!$[8pYi65AV!ZQ!l(G(kqdb3!Nqb4$N`E[[VQS$8J+kD%B#K0Q
JX0a1AL`DhE[bh,-[-rZ([#d',$2EU2KZ!%JJhEY-EMi6b!E!11'qJiIPqqR5E)I
)b,J-3%k)!cf&5Uj%c3#RT3'!#3J4JcR-,+j1iGB!,@-!r)4*YM@`c0J"DVX"!!Z
$#6$!e'if#!00BU*4C@6`VB-BB3"J!Ga&X%9H3!%BHiT!L9")4S!"3(DjNZllcjU
rb`(0pN2L[RGRqA[c4lrE&qjlhSkI*aDBpbJKYpXJ!P$m$J5J!1T$"[mA%b6H3!Q
[2a3!eN!+Va5Xm%fSM+!Lj1i&`#0@[KF!lBY%3dL,l`8!+E#ck`*4!,BXdAblB,`
M--C23*Kh#!I'5fcaZa4!$Q$HDJ!@,`D-mHNMjNd&+2&81d(#"(!A&5*"3J4)m9S
5llZ)cP-%5CiPEbp8NrFLbM!3*226e#j'&!!8!(GaVK%NHX[@IKLR##B!3J`!D!&
e$3!!$`!!q)##8YF%!2[D#2@K8Qm*UK4`bQX"TdX!8-f*l`6!@f-$DLYrLJX`J(Y
9Y$``d!aU+`2!BMQ!6jVSj`#1mFMY#VN-Q%B[R!p+p`)-b`P@J&3ERp!3I5!-,`A
5l6,JllB2h#&M["*!`FS@F(%kpKch9$Zd&)"A@3(bpk-KYlmKmAX5%+$BJ%m)-X+
'J225J1%bc[q"jEcAM-k2FJ-i39J!U!!$H2*F!)MKSB-[*QmV!Fh0Qcl%Mr&2J16
A(S5MjqHadKl%G`@!$0$FF"rbYKE3h0M[8Q"lJ(38mATl$d#qZqIbpSI1clF('!m
bATJp!rjA9HUi5`j+e'i"E!-@b[ZSJPM&G`5!-0$FZ)[Lq`#!dTA[@)*B-3#3!!(
4"`KJE6aaY$0K(F5*'P"%4(qj'll30D%!"cMe8dPli!,8hiMfrEeS9a#P4P0LJM[
I8rXC!!2`e`"!Zd"e+5-m!(rYkUMeLS"p$@+VpH3!Ibd!H!#6T58JGI"[(h3f%(R
4!bq',Q!1,$J&$L!!BDmU[!$K,VbX+V)!X@9XCGL-Z`"2-dMZhjGB)3$B9jCl95m
!'!*1B,YLIE`"`*!!1Nj'p)#T!")B"!k"FiKRhiBHJ9a#%JJ,,)&QJ$!!1U`e"m"
#-QA,!R&%NhD9[mIU-JJ`H'!"K(M"FN5#h+#KZZD"E)TX)6p#JMcG3EI6EGa(h35
"XcS&N!#jQq+J0J%Fpp-pZ8Te6rI-I3!J$C`TpBGcL!Jd)mC!lKj#0S-'H5U!c5p
U)`K!e4b,pd"X3,JTL9Bh52bq!a!$ID%I%0rVl6U!*Y!AXJ(L[@IPhQ0$4(`PU,I
[!)K!GbIJiqFj!)&()0F-iMd,d!b',#l%PNY0&CNfi((L-L[`dR)c-MM)lG@+)LL
!Z"!Y5qrH`P!mbf-cD1(E)aJq,3-!3!06[91M&"J$jE*UASiVi"1bi'#A9JqLhfD
rdVIdMRd!%2r0p1H*mPl@hrCF1BhI)`-hTVe8r,b2!bD!DV8V+`1l)b(R!K3!9m!
KX*9h9VRpENq)X`!hb"@P!d5!dhd&8(9Epi)MGJqYb!b&A0JbiA$ApLV`E$EJ!(l
'rUD"qaF"C4Y`2f`4))D"M8r(5jC%0,$-al21!!LHqk4V+&F5$Ji!!YIH2"#U+bM
-3,RG!aJ"SJ31`!0i'mL!Sdm%A")k`,LY$*6E)+lZiHJE%1NEPL!&d2Er`$`J"NJ
!FJ!A31V2!f@!!L!(D!'V[XVEqVT%6B)FX!HXq[Q((1!(V2TP!$@4b(NCbcJ@d'"
$!!%&)5i(i!!'!!p!V`(K"(F2IPS,$J!!bJ)!12XhARV4"LJScMjc%F!A!d+l1f*
*c!2-"`r!rRMA[D8qF!BFL)T)k[3XV+%S`VC4kL-M*d!EBNM2)K$!,S)!!#11M"r
3!9a3IX!(B"Vi!Gq2NpEq3!!(!1%H#$4T3X!aI1-p'UMeFae"5'K%J*%b*%%$B65
dfkej!$3JY`B!U*Q(#,GI!(MlT6lcX32)!bK#ElRkMGA3&F'r'6-$+%+M--J`+Dr
ed+AaFlPl!a%39J9pr%6#$e$M!kqebGrID2`)32B8PcKTIi$'rb0YJR(*i%!C1QQ
+H,I@'!*#4`TUJ3RGH0,I0L9fG@Xr%Z!Bp8rPIm10K`PKi`U&%5"3-pf8KkG"'4*
F0[rH%%(i!fIURfejF3"dY6+#!fMmH,8"S2&h!EE(G2fV'!$3Nr3N!ZMpKeGlcJ9
-fB+!C(r!#cqF@'`e@CENAc6&cpN6r-L)DmF#1$3SJ%1$!DJcU1SX3J%J)`d!SD$
1j0eI1%%&m22lrVi"S1p2%hl!J0#Y$3#U@G,"$0LQdG8r%!e39l+rGE@*E&H`3*r
[b`J!,BXP`3aFF-b!h4`'H!!`J,GK"NM`U`S%S2&Mr*P-YkCQ@[`YU1#JmAF!1dI
3,UN6e9@,bUmU*ifKGJ"!Ic6qBA4Dj5N`!B+&dHmhD2``3"QJqMHKBS$0UMaci-!
c`@mfM1$c`,5pi2X#!S$c$r,2rRfql5m00#1C$cE11akAPI$q6rY(!ae!3(+$[P6
Z2[pIq`FN6m!Q)T',!`6r6m1`D#,l2qdI$A3!X-!Sm[m6"#R2fZr#k!!%[kcL!5!
MTT48Y+RB!T[+U4+-U!+JbjZ1M(XDf,JrK4i52hhebmc9LkXU[Md3I6cccd!@)-e
6aEK3%5(0!`1I"'1Q@CV`+ljLRlKRf*6)32*X29[F91c2rpIq!FNIX)Q!,T9'l-r
reri"LD6erbX&P)$eVh*lp6,bK%rmp08[-eF[VN)VcmM$I`C3#E%rrerl"b3hk%[
Pl[2rYAp!mJ4X)KSrT@T+%!(pP-E[**S5m4Ed6rfE%N0!`"%%m"Yp2ZdI$A3!c-2
rAbS6r)5lLT(bprQdIc6Jrm-"(8$Z,rZ2!E%&(&"QJYCSCJF2!1`$V8QIci[dPQa
rFa604a![PEXI$8KKaACF,3UibJK!cF0$@"1-`*Uf"T3"H3"'Lf13!!'G)L39(@P
fQU8-F!B6lX'@"U$B*qiC0L9#BT2B*$EUmHJkDFK8C&)pf#""S(-&RUpD!-#Mkcf
!!6"162KU1PF'!!'`DK8e$4@&ENd`!QlIAGa0f%4V3"R!U2)2T8HA9rHCLldL12+
L-@efL#$ckJCAS%ZK2AJ!!Jd8(j!!@Z1'iN0f%EF+B-6'a,%#r!2LJ0BbFE3!ri!
i3!3`5NUd(-"R+-qU`%qcYealaBF5,3I`'FUc,2$6l#hAAMJ`F3`!PPlI&4Nk!EJ
KfEN[*BGb!*qK2+X#2mhH!Jp*9l6r0p!"k"(&Ka)Y"r!CbV-Xm02X,I#3!(4&qhm
$(B!HBC+iqp09G4@3!)!1i!"aCSGBH0b9T6F'2$+*0K*j82L(dP8brT2%rTHHe&9
Xap@LJ+Z-ZR%I2PZC5%2G8$N8kC&qa'R[b'*jLj3"E!$G+3#)!HN0L-D*H#+JL(N
aLQLSK4&FE!K-)e1f-S!(N!!q%3!0APE2(FqM`k8M5!1F`$3bC5X$))`Id*@)l3A
!"D$L,TE3#MJ,&k2E*FQ8V3c3i%+!b(KA3bYaG"8hVT)"MF)d-Q9,!pIH0k!%M2"
MY9,J#-"YI)EbV!Vm0(Y,"`!)!!(J!0c'CbM2XX"2XlGd!)!!%"!1Q)cHa*5Y#[`
SHAR_EOF
if test 43745 -ne "`wc -c < 'Hqx.2'`"
then
	echo shar: error transmitting "'Hqx.2'" '(should have been 43745 characters)'
fi
if test -f Hqx.1 -a -f Hqx.2 -a -f Hqx.3
then
	echo shar: assembling "'MacLayers.Hqx'" '(131047 characters)'
	if test -f 'MacLayers.Hqx'
	then
		echo shar: will not over-write existing file "'MacLayers.Hqx'"
	else
		cat Hqx.1 Hqx.2 Hqx.3 >MacLayers.Hqx
		if test 131047 -ne "`wc -c < 'MacLayers.Hqx'`"
		then
			echo shar: error transmitting "'MacLayers.Hqx'" '(should have been 131047 characters)'
		else
			rm -f Hqx.1 Hqx.2 Hqx.3
		fi
	fi
fi
fi # end of overwriting check
#	End of shell archive
exit 0
--- end of part 5 ---

werner@rascal.ics.utexas.edu (Werner Uhrig) (06/04/90)

[MacLayers 1.00 - part 6 of 6]

---
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#
#	Hqx.3
#
# This archive created: Thu May 31 21:58:40 1990
# By:	Roger L. Long (macintosh@dhw68k.cts.com)
export PATH; PATH=/bin:$PATH
echo shar: extracting "'Hqx.3'" '(43640 characters)'
if test -f 'Hqx.3'
then
	echo shar: will not over-write existing file "'Hqx.3'"
else
cat << \SHAR_EOF > 'Hqx.3'
dHdX(i&q"!bBM$E#M1Hd#L3$J68cCPke!XQ5+TFX3'3#G,N0N!(BU"+bPGDSF`'F
SckV!6l1hG!$q96KJ-XS"I)Eb,![m0(Y,"q"IQ@8&`)S&mRm$(8"!SND"!l6r0r#
6a2kARY49E-I9SS#VM!$8229Hjk&&N!!"$Kr%ebPDJN28+ci81i*$e#Y1#MlMHq!
clMfF"RHJ[fP(VJ(K"cF"4(C0Sk$+-T6lj)iJ+FL6Mi+Ii&"16GRN3e3m9fcDN@Y
!q-&0V)"kXELF2(AS5"-DX,efIpM!1NB!L"(Tl+L021r3FD0h29#Sj$m5EPMjk&d
#`+)NJ,d",*B565q5ZGhXqBBkA[AQBUqBp)J![J$Yi3(P0[LKmfdZ"NB"&#!J!q6
X0!V8iML%#ZE$8q-iU!!C5"5`*@-4$130P814(RrU'a4F03j0C5"l$842K,@Fi!U
%9A,#+m$iiG3#6bXJ$AJ$MK50&IY29pA95331X"XKj45J9(XC#J!X-!(XBJX!,$!
"Z&N-e!3J@"!590NV)*fMIpi!a89)8'@ZJ(51rRN$(4I)2ee99jZ!--*ZK*46J&,
YCA"APYiBX1&[P@j!B#0G*H-r5Hark8PG6Jpjc9f,![D238N#%IkIjN("IIJABQA
SB3D!(f3!L!%,A&3!qp3"#ea#6UNYj#IL0rS0RR"%i)Re)S&cikZ)R+PkSQ&l0D(
bU$aiV!+'3kMX+3mHUS!kajQU1(%!VeQ5dXj1Hap5NY,1ZN!$e1i"!V"Ik2*T[Jr
&4@0U"k3"3#5)!3XNUE*Ere$hQB[9Ya$Nj@-"VGmI!2X"!+[(Fkqp#!*Q@-X#kK)
G(NJFN!#-FkDi2!!3"r#D*5RYl,6h)58TlD`,0%#jhbJ@q0J"DF!+#',N,ZI![bk
lp3qAd#c"bC,T[ch[34!`@*66,-%)D%iQihT+"43#Ha6HiS%X80M![U%P3#9Xd`r
`mGm,@`U[@C,5cNll#RdXa4%j%&ZB2'[hqSB3m'`j#5[dXG3C1`TpB'j6!(3"J%$
C`PB@!&d!)!#['#)qX`-'V3S"HiqkX%)I5hjl$&)!3!+(30bQ200rES#60J"-ecm
5$F!($!#[#Ae#2ei*+)TT8`"!!SH!&9!rfL563+D(SNJ#9!"f2$diKp#!09NkSd`
+J"*M-CV'`X[81")9!*!!`#&J"8L-K3[H1'T26BH4aeJr5JpX%p)ZI%83M!!UN!!
*i##FV*!![Z$,4K)eCcS%)%eS`2EDr@%$kaMb`3C!!U$$!h!r)4pZ!#3!1M`!kT-
d"!SJN4D!hMm&&PkhckNY*bX&XA-(&3T)!8+6&-!b6BeT6LIdYh4#BFa'6ANJSh8
$"c+Ir3-EVaF!q#[NG3-(XVfq'r6CaUX"EC'm"m&e2DeBM82G`)&XVd$!I2B2E,b
a4l#rBM81G3-(XVf#!I2C2l$a2M+HJLd%"@b[J-"mpJpi!TkA!2!2L!+ca"ThNQ!
*$m#Tm+@FS4(%!c-&$'c!HJ4"#Nb0EYe+K3U`!r68,-%)D%l9NQBi0Hd"9AFI1XA
N!E-%)i!+C!)i##F,Vbp#q)#,N@%`N!"RJ!YK2#9pEa#ar`c!!Y+m3L)!!&NC,aN
3F&4BUV+BfT[@!B[!&c%'P!&TJ*ERmSA*Yr+5LJ"X!%G!24"5,3&+b,iS"c`$-Me
lHJ'!$RA0#p#$B#Qf($YJ"c#9AYB,3!9`bJN$2B!,*!cd!#U3!$$3!h!H%%!2c!e
!!$d3+0)$M!$a*!ZFJDCK85-!d"NE3""3$kK3QTeQ'8CNkTSPHBi$+2D*HiEYhPS
!$92VfJ,8!hbpC%82F!)FlpCF$r$e9MBp`!Nd$&Yc2F$A5eEd3%c5!Y3$p%"Qc(m
R$26!R0)#e!2dJ*%eqF)"3`$cB3&dFZ`!`L-RH&NZ!#c`4R%#6+@Aj3+3!!*046e
3Hb%!eAE#3!p-@d!!28!*0"Ae!'%Y*p#)-(GdSJPm'[8!2G$I[&&D[")b)``3Cri
EK3``P9k@,Xq$Y!,d!#H`BVe4#BkFi'@j!%c!QIp'GGTbJTH94[GbE3!lX)[,#9j
@*8'pd!1X!&2TC3h$Ea3X)bGi@5j!Jp)'X!-GRCcJCEN!X@S,8!p!GUQJ%M)MZ!#
NJ)l3$U5#5JJ8Cq%8-$"!)B@R'J,Da1G4Y28J@)SYe`lBfdS)&!F-m#$h4`$I"V3
$h,X5!X9KEVS!*3+Yf2$d!#e`"9[Cp!!Y8',f%0ql0)(NCF@dJ"b!!6"X4"VhBHq
e!EeH'e!6`4!LHTG(TI-$Eb)Q*#GJ+8V"!p-#d!1mJ'b[2+2-H3A"e3V3!lc!LU8
MY!1-PCcJCE8!0J#d`SDe![3!,d$!Y3-U!&2TCE8!(-JG63mBF(+#PiAekJMY!-N
N*hKC,8$MhJldXA+#Pm8#,"UTNjcJCE8!QX$rH!MScQa!%1%(f$iBJ!83N!#F!"G
!eb@fjmE""92TCE%!bN![e`Dd!`b@R1"PX3#m!!r5#Y!$Y!!rXBab!Xd)ppF#e!2
b3#3L4Y'G!m!P%J"`!*S)*q+*J#,Qa5MLhQ)$!!!f!!$3j'D%!+!0T"KY#(ZB"DJ
BPCL+`B9UPK)!fki,+!#m!1J#$R"L*)!FJ!'3!&J-L3+J#S!Z[I06U3E)!4J!LF@
3!2`XZZ,@A!qFCm*F#e!2d!0(K!M3!Y!$h)!dd!V3!q$!MfTPd`0YB`Y!$e4H"S!
L)eC[@hF$28!*L(%!Q3"3$cKPh(N,8!qJe*K3+d!2F!-UVf4&$l50,3!p!!l-#!D
!9b9@Q`&F`0e!$e!#T9cBA!miC9Bf2G!fYJ$d!-acMD3BJF90b83i!43AjDDFTKJ
IH4HJBR#KQL8eM3S[Sr*!2rAfk!-p4cdJ$j`"rTA,83r)!fH!+3!'%!1&P1@FTfS
6E`!Cm+3AE61#"0#&'6)k3MXJ#LSKYJ2Qe3V3!i,f9D3MY!0KQTcJC58-l`Bp3!j
!!kd!23!15+A,%&0hP5j$6*e@bT@+!#d!2F!)60QU3#@SK-`),!!4S#1d!j!!RCc
JCDd!#!"aY)b5H2i&EY@D494#'d(j8V3$p8!Gh`,8!bMeKNm24*-lAUQKqj6GqdS
2JU@`BDd!2B!*1$)k3MX`iFJ*ATB+%)3&2`N$25!%(8Gr5SV4KQ55+NBPTQ*`!+L
8HM&T@!2#,HM#iPFC5X&29Y3S"F6!h9"fNj!!qr*6-##f!2@!2*!!$3%E6%VC(9i
k2JR&Ze&fLfbq"6dJRCTXJ,(LS!*3NRA&bbCBk!MYJ#A!9(TC+N!pp4BU$HfNMY!
1((bk`!63[K!!TBEZ8hEh)&J+#U!MY!0%YCcJCD8!mJ$e8RBcP9l@#Y#JY!(Y!-m
R*hKC+8$mAF")df9hk(C+-(N*!'2C#Y!$Q%$'@p38#`D!81PI%(eF+KJ"TI-2*cD
E#,"2(Ij!r!a6e!0U!,&I$m!$NFJ!3!c3R3,!*6)!m!+D##ILLB!LjX8SiQh!D[Z
iR)#Pf(,YJ'XP*hKC+B!AN!#(*@QU8Ee"B!m!qKA4%Bd`*$l06Vmee`2`J+9"$r!
#128(!!eS@L@-9MQLb3Q`!#%HPXJ*@)SYe`l!ldV)M*!!!LJ!H4Kkq#a%!-S4m0c
F9#XY!$h!#l!Ep!![F!&iP`**#d!2F!,3J+B&!!`#mJBp`![i32[b!*!!mXZT'T%
BCA*4!S%!,D"L,%"b!TCLbl8$BDbFi'@K!(CZca#ZfZkV5Q$6#Y!$R%$[dHC*6D[
+m#B&9'%DpS`3!FcPMi#5L9F`DFmd2F!*L$*YRY5dUJa[`J#r!Bm)!RL&'EB!b3P
BLLhA$Lc5FS+AK3)`!6*'Z&SUV#VPR,blUVB#p!!VB!D!j()#PQ,,Z3-4V*cJCD%
!)J#RR$$3!lL!()!HfKN3313SfA06LXJ%)!+d!24!4KF)N!!!*KFa%!M3!LU'Tb%
RB#QfR$Z!`bXK-m)*%1@&#35f!1!p+#)63-*!$h42#rJc!!Y8eh)#PQ,,Z3--PTc
JCCd!39LBJ"iq#`m!,1#-bJPB#JUJ)lJ$LEQFi'@G!#ah#d!2X!*-TCH&!R4blJ!
2`&4k@5H!)%!FI4VeJ$a`"K$eV3!p-)rCFZi!%F"8HPNRJ$lR+,3#p!!Z%&De![3
!+0$Ik!MZ!(ZZK-`)*`!6!+h!%5d!23!+K#Nk3Zh!9(TC*d"R,`I`'FScrFH$R)(
N!,Y"$i!#e!Xp!!S`P9i@#[#I@aVd3)MF#Y!$Q-$)"*!!#3$e`+NP*f!TYT`lX&E
*#9k@#3!2m#!Y3$e!$a`4RdBp-&)VEi"MP8%3d(jb!TCLblN$%D#Fi'@C!24pm2-
T"f"b!TCLblN$Q+@Fi'@C!+U!qV!ee`2`J+9"$r!#128(!!eS@L@-9MQLb3Q`!#%
HPXJ*@)SYj`l8BA+#Pa9lj'(SiE2J!)4#`$2SBJP)r0%)3b)!!!+JLjHG-0!$Z%$
#3!r-+A)#PQ,,Z30#N!#Fi'@C!$3!$p)#e!2d3'9i0p!$P-#B+bGJ+EDF1a$pb!P
HPJP!!DJ2'%"!BJ"N!+"$"E$PHJT*V[0H-hYIj[9B2DA&K-jbik#%R2J[-eG2!)J
#14!8J4iq#dY1Sf#N#*Z,8bC"p!eBD`#Bh1c)#9L+,HF1(&pbJTG9!S!#R(,#3!r
3!MMe"`!0D&V+N9BCZlF#p!!QN!#PZ"ce!$bJc[8J@)SYj`lJ8A+#Pe8#S!&&9`Y
3$d3%rVZFJ+9FNff!1p$fb!PHeYRhP08$(9dUU)4iFk0f'q!1Y)*+L0NAL"B`0LZ
B"!G!3Qe!'3!(V!&J+Z*cHX!8pF"J#@6d)&L+#D!MZ!1`M*cJCC%!r&lU*#Gi@5B
!10X'[!2fYK*Le,A+"3bEF358h6e(28!2D+*h!ce!#96ACk#R)5GJ+EEF1p#(+L&
'RE5m,bX4a(ip)!rF)JJ(h4N!L!&E&SM'LAJLS)Kj-BUN&jd*%9%2M06a44Y!$`!
$IX)efAq[kjl)J*F$QA*Y!$d!$2J*ef6r[Dk$(31HrG01kJM[!,MD!1M`iLJpJ!S
3%[-#28$[YJ$e!$e3bPNDp!!K,5GJ+EEF1a#cbJPH&JR`&YV-!GJCL1*BfI3!*J#
3!!N!pF#T*5GJ+EEF1q"DbJPHeJJ!$h4hK45HfU&!3Qe!a1FR,jYb!TCLbld$2ld
5BZ3"!pfG6J%,[!QI4MdJ$m5C1X)l`!F`P9l@#%!+k!M[!%FL*hKC)m!"h`rUM[Y
+#d!2i!,X"Mf!#mJ"%4!Ji!DX&fh!1d!1-*9HeJJ`PEf&da64d3V3!lM!"h3hd!1
J!!%($pME5SL4C`AdFQd!20#(+L&'hTh@!Y!$Z!"6k@@4!#1G!*!!-0!$Y!"1r3&
N%hZ,9PNE[pK@eK94#'`5EN!BFIMd)&L+,3F0-C9HeJMJA3F6V3!p3!Y-'U0%#e!
2d!0K93Y3$m!$jhld!3M+'r3!,R$lD!-p#*CLbm%$+J"6k@@*!-C!(LEQ2`X+J"d
0ZS6)FJ+@BX["!c+m%K+fN3,G(4&4$p!$CN"2dJV3!jc!'4"eLJ&%4$f!"N4E!f)
V3!rJ!Qq!8b`RB#Qfh+R&9(TC)S!FN!#($3(-K`+!XNS6`j4N43r%*()#PQ,,`30
h[*cJCBN!6%!H*ZBr#`U!NL40@#9b!TCLbm%$4+DFi'@*!%THQ#$Q2`X+`2FZ6B3
PFJ+@BX["!fUmR1"PL3!-3"iQjMm,TiJ9S3Y34N[k*Z(fc3(eG,-M*f!TYK`m)!6
*#9j@#,#@Mf0+5(F$8Y)!@U9iFAIm!mq!6-qHfPC#QcEa"T!!!8rkm346e!1aQCb
!TGKbm%$d)bGi@5'!)b"M-"'S`0e!$j!!!T9`$l'0bJPB#S[9"X!$*+ZFi'@&!'`
!Y!*-E2f`3&$J*eb6rIHk,J3!GBF$2+#"k`)+`1m5*U$L*"NU6T+KiXL!MJ!2Q0a
bJTF9!Y46@cml1PE(&fd!2,")b`PH9JK!Xm8$!ES5)Y1pf&C@'*R32P4@8aL!dFT
PfX3E3!BmkBG2$i+Pf(,aJ#NT*hKC!9i[e`E3!pJaHLL3!(J+--#*rc*cp35!+'$
r[00#QjH+UjB"l4)Ee)0J+ECF22#Yb`PH&JM`4Yi0p!!Ui0AJe"p!R%d23!,43#Y
!$c!#M`3pB)XT#KM%A"F2d!(,k%X#2#F-p-!S"MaKRQM(`1QQA3!3J1ef#C8q,md
')-d$!q%!)K!,(!+JJlNX$M)JID"rF`#-!iM!ekD)K!#c!#$3`3J!im!pEJMB!Xk
K0c!&&!*X`(FP*f!T,S#1%!p-1(+#Pr8""#J'qmPe#&5#5JJ(TmZf!I&!(5BRH&N
IJ$*!(!hk*pFKN!"pS!0Ap"N883@FA@S358%ZUF4E8B-,E3$52$$J$3!#k5-E3*I
)#9L+#k!Ma!-fQjcJCAd!H)!($J`F!T@J%X,"X9KY3$aJ#6#9AYB(S!834aii-(!
)d*&eJ&dF8Bd"Fd!##',8K$!#`0i1e!-S!*AHNmJ*@)SY&`m)3A+#Pr@[U`q(Ub"
`MY8$)ee'N`d8YljSce%2S03LB`Y3$lJ$`Y3Y)3L%9EirkDiMa!24MjcJCAN!T8F
E%!rJ8A+#Pq8"5!-k3Mc3dFN*ATB(B!`34h!!(c$1ZAUkJ$pJ"iacri#8U53p!NS
QAJ'-!f3#3$hJ$TJ'@h-p`(I*#9J+$r"Te!2d3(qM)mJ$%DbFi'9j!,`FJ0jce!2
Z3(qM)mJ$**1Fi'9j!',!QDmMb!2XZ4)b)l4I&Gdrd!h-#!B!)T!!-0!$f-!X%3l
-#**C`N!28!-5Z#8a$8J0p)!d-%YN!c0#0jd`d!2&4`44$F`)"S!@N!!`d!2ED!Y
3$p!$@aLaPc$3!p`!369,P!-cJJ&!#53-p%#3!1dSb!PB#KZJ)mJ$GlbFi'9e!13
!p8)2N!!$6+@Ap3'NSI)!(+q%Z#"i9!Y!$l3pFS+Aj3(!!ce(28!2K-pa1ch!$56
M1S)mS-E,#9j@"d#CY`$d!2bZK-`)(S!a%)Hf!I)!+-"8HPNG`"Y*DqJh,K%iB"r
5'[U05d31r-,!KUe"$h!$1C51)!p3jR+#Pp8"D!(8#ce!$M#9ATEqU#2)!lJ!8qP
PG3##93Y!$l3pFS+A*AMe(28!24!qaqhd!$H3!)cV#2+!X#FRH&NG!&[B!Y!$m,X
5-L0i!$a!(0S'b!0YMjcJCA%!lpKEf)bFf"(%-$!M&!!X3-*!$`J$Xm3a-#-8*!N
$2B"da2l,3$J`9!!"p)$'`BrS#2-!HLJRH&NF!$"JT)ac%Q*,aF-'&dbPPm8"S!)
k`M`!$#SK-`)(d)8YMl2%--"@mE$""92TCA%!reSE-!rJm%V)M-!"$&JZ4ceJi43
`5!#SE%QF!i&!'d!2D"aY!$d3FV3"p)!c)%,3!phJPmB2d!0cCbX3"%!"8!!63!m
)!kj"Y$q3!0!$bX!Y-3KN+Ik1*6%)N!!"1AXE-!q)6A+#Pm8"a"j[B6-#6(J!ZIm
r-!L3!!%8`-6K!I`$Ji#1S1JcP9i@"l!T2`*1k3m!!GJ!H%#l3%B)$XM)N4jc"#4
I!"j!#0cieX0q0Fi4QFNc$`[b$`*#`,2P*0"Xp)$TT6cRC'd!2@"kdFkDJ)i`$l!
"6+@AY3'`!VbQR1"PE3#LJ)i`$r!"6+@AY3&B!Zm'28!13!1Y!$d!$N!$QYB!m!p
mE8h5P+d+9)*+b)c!!C!!!MV#2+$'b`PHeJB!Z,3!p!!iB'hY,9qElM0PAlBY!$e
!$Y!"Im"DqQ4qEEV2P(hC#L3I3"laEY!$h!!Gm!F`15[9ekEl60QAl3FJR`3#1X)
m8"R,#9l@"M#ST8jbJTI&!HJ!1X)m)$(,#9k@"[#@U)F&$%Zd#,d2ATerB3G%9'N
!S`@#r(k[ffH09LB"l3!pJ!l!&28!#Y$cb`PBLLdh$k!#6+@Aj8*bbXDE2h#iXJ(
cf6qJ8&J5E%!#8Alp!aY5")&EbaDDPca`J5N+B-GF0`rB!ME3$3dm(h3Km2lk$kK
ibM0XfdHi#e1f+V#H[K[d!$N!$E3#p!!im,8e591f+Y!G'J+m`+G1%#bS%B5ddkd
$0$V#2*!!Nl8"mi#"h3E-!f(k&8dlRj2U`SZP)m`$2*qFi'9*S,1%9dFlL`+c""[
!9(TCdib1-!pdG(+#Pj8I#,FA$Jl3M$J!"pT*aJ"mGNZ)9!5kG(,c!+BX*hKC'3!
He9*TpbH0"d!pf$p[`1VK-8UfrJB!J,Dd%reT83N,j*FI5$maI1HA(`L+%`6!![R
P"p*2D!'`3(ljJ3"#E&CqqB(%K$N!,*!!A`)!SCX8N!"IlMT-N9I&&+dAEF$JcP4
k@4P!-I8@JJ&k!#0R4H%p2#c5VJRS#%mi8qPPC3#N)92TC@8!0)#13!mNjR+#Pj8
"S!!G9Mm95,+61ZAK3!r-dFFU18d2#!0Ie%Yj6El-,081V3,8G%rL@f*Pd`0VR!'
!aD9A-&&%0Al%IId$Sp%1d!2jK*b!TGKbL!*6k@8PDCabHXB,#+V#3!*4I[d$(dI
'!9!c!eX(,(#"+3U[a9a($m`2P+D4l5Ld!25!0!$Yaa%'"([XJ,qCrd"0BHdV+23
!Jpd'd!20,ME3Kp-$aX!r3!hdiI3!0J!rp1(d!$9`553G[)#J+J`N%1AA2i"2bKB
4"#a`J5N+%N$B33mFk&68[)Hj@8eQ4b192a4*Z*DRN!$N1ZmeXrGPASr9rNPdj#N
NZFjlcHapkIIp"If`T@i4!)E4E%AKCBU)R)S"M!1S!"q4JZ2I-3UU!!'8!kJ!#A#
B+JA%!#"!#!3#-BS!%!iJ!PrE*!aN#3,LZY8bS3B#-05HJ(!m@`aJS"bRKJ1)`0F
f#@0E9N[F'JM!8(X#`N(6-)#&84Y3$pJ$1N)pi%h@!i['ZKj+fY*+m[#6#UL2Y[D
&3dflrcRp&l8k&eC0P2h63j!!!M0#"C!!Pb,qbM03#82"4PpU4!9LB!0rkKY%TG2
N#m#N9M0lkcT#28!CY3(e`#,0Tp(1SD3Y(30m8DQ!qQKVAcLkQ2ZIdhp4Uh0Ke86
C2ch%Q#@66`b)[r)-91Cq'!DBG!Dm!@iI0Q%d)ci&T`RY"bB2+MH["&r-0eGqmS!
@@cbEL*22@TN$G$&&+(##%@D5QiE3BT!!,TS"N!!"L"(Z`S+cpa3!VN%'--N6*,'
2!6!b%@6`L!'!F-)#m)J"X')YC2#)!C!!T6"3m%Jhr6IX2Gfd!C!!!BM`j%9X3mQ
N#0$qhU1J(-0E"G[j!`('Qc!9d+6K!*-!T[T1dmT2HJ[KFJ,QJ$)Q9-(X$I")!H!
hC!"LK,Y!!'3!Nca"%[XB!'m#33D2'!!)*b`!MaJ!+pC#"SmB!&N+!`@2G0-'3!B
J`T-AX3dPNb*!qhZ2JR)-!mCqJa)`"I!613"J[+VJ!*-!TRT&0!*c!+eF%p&3FJ!
N4!BFPD(%L3dM!1a6"qjS$@Rj+B),)aN,G#J9&J#Fb30&3!m`HI3J9J!riD2*meM
!h#&hh09%%bC3P((3#M36i#918CKA5fTQ"-ajr330P)N#0p08KLTIC8#C8,DR)!*
[dmBXqK%GRS)jX%&B99LJ#IC4"[Xq`FDmM6THFf#a`!N59%i9!dC"*99Ae!&36,R
p#)!TkCKV!Jbdh4MFeiX%6VQ-aPTCfD%H!41#!,b!IS-R50(qNQcXGd@1UIIZJ#j
mZ4i)(!#YP&2"2N!!,Rbj(JJF!+f88fFF`!(`JZ!#*lS%@)(b#!`)'#X#b)('"`!
-$)#%X!!3i!@$&a1FY"+J#m58#"8$!)$$m-A"9J"8Z43*30P-Q(*!STVcBJ8!"+Q
ZJ%a9BHL(QESJS1J*J-$3%%TD2-2aj"d!#'G)4,d(j)`(1!&q!%L&E'""130H"%#
#*m!8N35N#@R"Y5S!"NcFB8$dcjd6,dlU+(S$TibE1fRFN!"jF`H!BbG@r[P$FLi
#"K0ZIS)&YLS!PM-F'GeU&if,'33h!`M#mJLT"M)#9[fErFFc@&KV*,*ZJ`0L!%K
)J*8$"')1!JDq*3@("QN&N!"RLPENC[*-P23!8*kC#Y,ZQD`Kk`*i!T'0[2PX)J0
)J!1#XqI65!ZiB(d6J,5K&TJ55'9K5TYRjX!K!#crQF2D'`Umd!)d!JJS9LSk+*'
E('CmY'#$"$bS!aJ1+-LJEh*B!B5'%NVdKQ2#X1FH&QBijSKrcj!!Sm4rj*J"!4a
T!5!(33(!T3Y$B-MK4`"f)!$#!H8!`9ddC0`#Mf0Rd("NNNZ5!F*!+`8!$#UHR3(
#P%U5CL@@)%#K"!S!Z'''"'"@L3+@8KaLbb&Zi!)(!V$3q58$Ch!!9N%H)G5!-bp
33&5KU4beN91'KX!3L"4Ce!%3NJRK`Qa)Z#%CL-&C!3LJ&iSNJ"4f-4$EE2piijN
3ZG'4eejpr4AB)Q1`mFBFC5#Q''1243B!C3&JJ%*Q#"cKcMm!+-''4'FJ!!-,%J8
(4S-"Z,"5Hkadk3!5EGKM8(V+!+Q#XJ(3BBB&QfAlfEEG'T!!@VJ0X@[24bm&S-`
h%c"d*c$URX%#%XZkNTSZ5VKb&d0Rk-#Y24)-r)+ep+DRLed31&6`A3%pI0I!3$+
`-!8F2d+Z('m3!-)#B*Lm!"DI%N5"U,UiG+5RS$)S+UP@8I!U)2l3)kYJE)544aP
bd*%'(@b8i4J!N!$p)`YP&f#3!%3lpm!3e94R'!$(2f"`j)FI!K6CTTJQB&QLZ3K
XeYPR"X3jTa[Jh*QR'eS$d(@21V6J$aUDY1%2'6cSE3BRISZ"4$%J&"!)2`!8d!1
PNaN$JJ',0rli2raNkV4C"$%J4dFGrGUY"jVc)kSH5P`ULedFQ+&e!&d$S)rQ[)J
UbT!!V)h0j*@1+B&'Z5d#B)VZBcUf,jHI13B*mEaEK)*UX'L+LaPid-imPNMmlNT
k`LJ"#%0QD2%R!#)J'859,m!!!G1k,-$&pBkp!!&4m"-dr`Ie[i#Qb8L'Z6Z@mNY
&#-!#*"V%5@jd!X!rJ%!l*14QHkf`e`fNTaS!V'*Tcm2#q*!!NJp[J)9LVd,(2c6
a-dDi)9Gd+!-HN!!Q0+)Y$6+1SBaPK[@6Uq%JDeZl'`M!*VEq9DPX[@[9DG6@TEE
*L8ja`a1GkKBlH!bTIVi$RQ1'jd-a0HpiA9*Hr@$`2%(!BPQ#S"l!!Z#+qQ@2M0c
c([M%&lVbPH0mBNVIqK#L!!ENEhi9Z'1LmVFr23i31`dai#%3Q*N&MY%9$N4M"*9
a!c"@m)+1bH!'$k),I$MLJeD"`+[i!SqI0H+%G`J$'p)3KMN%E@JlBTS9BPJC#'$
Q*dqXi[pkpcYcSB&i6S+5&ZU(aFmBBBYGa)eUc!#$4*C4PXAlPIE5q,e(V)PikAZ
-,[,K$0BF8)Q&p%0H%-!AR`'Q$LCmJbK*DFS@TP+9rm#(5ek*QJRXj!F4-33U$J%
"UA!"!8X,L'm3%5N+L!89LJ#$!H!C!%3!9(2i3-8LB(!TI8"$8rLi!4!#S)J*TM-
!MUM#)q!!JhmfiJCI#!!M3-!$aq"c4DHj3'i5%3"5#&5P!@!T+c$c$fm'jK#i-YF
Eh%#(AU@6-J0`*E&d-JH#b[-32l#@!`i+8B8bp+I!N!""3j%3$"F%`"Z!d#K(23U
$$`4R)r9maMhckB"pp[1I!4eS4!bUL-R*!3,3#!3*$K!19B"!!0X%aMrBmE0&R+%
-G"J$'X)JKcQN33p+3fIQc['!ba!VEh[VfppJ)$K)&#iiN!"S"64%X"%i8)!6J*!
!33%N8C%,8(83i@'%$`)J!`0%)3LR$BmLF"!!A16'$Qc3`!f)3#55QK3!+&8!@`,
J!lL))hFPr3P`efB'"m$d$J%3"8cc%)"4J)%"c`f!+UBEJ&8`i!J!+%6*I&$53M#
!#!#!`KX%J!FSq)B4`4%"F"PA##3%34MdYDm3JK"A1@!JVK)0!$%MSSKJ%)-1#B#
')!*-K[G'kJ)"&S0[&"'FFA`2%!%'!aaq)%``[-%!0kM)$f$R'c`%)l9bZ%"F,qF
2hpMKa"5&!L!Za`q3!$`-Ff$j`&Jk`"4RAFSIN!#Sb!2%XV8(CD((F)#!@+5+1@R
`i4rc'(%UhMF&*D!#!))i!jZQ!!)dB"N&8%#+!!$"QT30"!9!U)mF,XB!eS!Q!'l
`M5HJN4Y3R%%"2SJ)+(!3%8q!33S`-!!N0*8jB-J"!HP44BRNd#`C4%319*d@@Y)
M#Km!!!3,%S%F+""AE`!""J8BY'5#FqK%,lV4Mikd!#BG39(J`#+#&M)XMX!'!rM
!!*i3-UL$$)!(`)))YFC"!6!Kj"XF)3#Jf+ei32+$$"eJ)$T1a3C!`#I(%)U5!4"
')Nf45%mJC"ji#$5[ICdE9*5+$3S3Gl%RLJVIS#)iX0#X#'TpJcC!J`3"D(HSCCd
E8k"leqX1J#RJ3'k"IcM%[4Bi$MU$LKcd'`!0ZNT%@!%S5[,$(TCq&X5$Ji4ML##
jXa(')AT+JBLXSL!J#)!)"%"TqB,J!p)!4!k#!!!$`)!#($r'@qFU$P(X5!)4NFQ
P@GjUPm0FjM3R!%0H"BprN!#MK()SJf%4Uk[&0-DRNf'XBhpL%LYMZ8*)8AQC(B-
+Nh6jbe!`#4Gr3J3JP&6YD&*!fbeY%K`B!"YHTS$D$`!0,eZ!a6SJJ#D-J)-IBq)
)4$!#0pM!pL0iJr&e0!)!$Z!''5$"'($)"b`-i3B9I(IbEL""ac-r0`jSR!'3!'!
mRSTJ)idl)28!8-#[c8!!2F"1!%)SJ'q9Zk)c-%!*"@M@UIjaMhpi"LN!)!(bfrX
)T[r$(#@d!p(dm)BhY'%1G!K$#PqibPqG!`"E0e+9VjaP&TMGbi)!mqj2ZMEIH`6
jM1JB`(k#I$mXA5m+a)FRFdTpklp"$QP`"SR4+r'c!1bdIX[9*4S!Gf`("!&@GP1
`GR,RJ"0P#Q#!!3b)!'dAB+$!J"-BB*j!8kEc6Bf3!&0Qm(pYm(m"1)#Ua%VJ4d-
)m%Tf4!9VTi&!B!2%3B0aYi&!!(%JS)-!B!&d"R%59A-rZ(DF0J9&5!#[NRmPP&2
BThe%8`CMd&-%k(d2S"6@!J%U!$(X"!FH!!Z&B!BZF$%8i(k8P!#d-(B"S!"+3!K
SL"!4!!jM*cY))3&k8)IZ!!FI))CQ)!0QH!Bh%MT)m3#q!#51)3e[')G*`3Ge+!a
)%3&@8)HfN!#"EIGU(MKh!"!iHd-iIj-i"!!)5m-"Dd!($##+MJ&RE!!0J!!$1i!
!"Z!%ql!d"J!!4-#!3RJ%VE8&35!,3-!'$U"fJZChPVB&4`!'$#3jP--i#Z!*3'!
5F""UIMGVEk!#*Z%("H!*IZF3ReF!E%!!f!J'&R"jNe-j#Z"TJEB&3$"VhhKVaXK
X"p"Xd$B@'i!8rX!"50%2[("r#0"dI290L8"B*(-(+5Kp9lK1a-*Q&E*lSYKl1X#
3!!Ri'3Q#E5C3CM!!%L8'Bib3!'*a4@3!)"DIm`%"N!!+(@""ML'+RR&GNi33!-!
"$#'#RQ3d5&-'C#!'E&!VD6!'Dh#&P*'&l)4mb)!I*4BFeN)&Kq"L&3B)D!)($B!
0Rq)6",!6q[%$m8J!1ECM4M92F*!!)3!!8##`N`6J1cr"'QD!"*!!a6Gq!cL#iiN
59J#NGJ#*TJ00)AN,`#R!B#eQ)!"$SKq(Fb46!!JZ9`#8*KBr8$I49Sp3544XPM'
*H436S"m#C*)U`4&BX%hqq$1(N!#61h9BL39$"R'!bG@3!1e(!F2h"mDR336a,C9
%"5p*D$qM#'3!@%H60*c*I38)QKcK',eR!j!!Q4rZa"-6S*J'`bFI%Ca(!C92F5V
qm!fRL46ri!IeS3UYL6NrN`LaUCPZ8*XYk(d4!!#a4#9@4#BCK%p3`LE)&%hX!`!
9q3MA0$I3N!!A!-!Aq[G0M,!Bf#N'Ed!(G'"pYZPp"b"82k%$MjDAYKG@AE#6!3!
%$1!B"*!!'3'!!cpR(d%J!cX!!E'i$qYc&lB)!,)!!)B!!1M!L@MJL@6J!i,M#B8
6D'qCD#9&!1#e!2S"DP-!"-&J$)6jE!"`Q,%6SRScSQPTS[jJ"LMU$a*Q!#XD3DT
38NJ*$"BQ"`d39miBS`8`Sc9kSr-SEE&M#L*+SLTUD(#*T#8PT94USaqj)#4`T4X
!"RJ!T%*D1#KkEc"`!%HUACDQ(cLbC&-D"-0`$#53!'R8%!JrX'Sj1T*T+J4EqU-
RkUEf4J*a1UHUN!"a%B%(9!!%R*!!CP"CQ$*+SakAD6%hBQLk6H$`$jhd6BYJRf1
`8h!30'23QGdh)mr!"'HJ"9VeN6S#!L2'&J#3!!`[`!1#J%p,93Xlm!A2J!lSYM!
bJ"$U!!ZX-DXJ+3+hLJHjZUZp#J#r'Uc$@UcG)J6)UJLX-4"LXDZ!)!"0J3Ue!!B
)`"d")!NKJ!`#i'hIT!KV8!CjJ*q%43BXZ*fZ#UZbZP'd+JHffK&5J365kU[NDUh
%+PcGJJA)+J2,bUr01Q)+mJa%-,$8@V$#HV!,3`E)fQB15a!m%+lM@Ui'%!,G!36
YfPIa1UrL*!H,83G@k*R!)MAYB!qc0V0`i!,@JJ#,H52VH!J)!J%c-"")!!M5JJ!
33!0#5l6!X$-ej8NTHkUa+31P0!CTN!!'2J82c2SVQJ)2U3!(!b%$2##Z`U!TrQ!
&`)"H6iJ'D@!'G*!!XPDA'9HEYCV$Y9i,!'#V%Q-V'@D,YZmk"Qe!"Ql,'(#,6Yi
3Xc6dH`D$!+#"C5"!,!1K&!+J-Bhl%d+!!T&V+Ir`$FEb$q!!"MV!P,"!!DGK!F`
S"CIb$4E!$DDEZA`)#kFV"U5M+Gi`ZFlb2*!!"J`&341#J,QDHbcJ`""+),VGFlT
R-)kb5lYF&#fibc3`)3J-3EX4F!54bl65m$1)8*0`!)!m03IFPbU8m3%!LJ"GH"F
RF`CFm,JV%,PS)J6Tq`+mk`F'B!F!d!'fJ!IJJ!IK-!9(p!Ed`!F2`!b&!!HbC`K
[B#3')!F`%&F#j9Bh%&H6`VRSd!LVq`e+-)E+S$RHB*Hjfl`A3!54birim!r'B,h
BUled!+dq9EMR%!$K@lj'J,k4DbhX'lQD!`iD``#LSJDm#b3%--'2HlT+B!-!!!j
Q!!mBV-(-Lf8A),d[`)q!m!r@3-*LN!#pL8%(C0#pXm0BA1L&3e8[8S!(rb!%QU)
2UD%$UD%#,8!Tr#!&J##'jfB!ABJj8P!)5eTak4'jpD)#ZJ!)jdB!FF`23R!%)6B
E[`%'3Y"a8r)T-h!FpD%0*F83E@!#a[BEL)`Na'%F$+!,PN8"1##Raj!!b-9a()N
$#C!!F$RkS!4'F"T5F!5qF&YYB#IYdAi03dN!J!dhN!!EN!!3!*K3KlK3)URR!+c
b'm%X#8*!"',m$rT`blqKbbifSlrf"LD!"-3!!J3`(+(-!%V4&&+J)`!J!4Ba9F!
J#i$!"JM!Cm)maVEe'm@lH`!!##MP!8L4$0*3CMJhcG9mbB`-!DNK!`bKE*!!B&(
kN!#ZdIQ9Gk%%N!"`)+K4,dV!'NV3'9"`"RSA%9!!#kk!13Jb%#F`89#3!0%"`!5
@qAbBQEePB!CT`!D-Yjd)bA8lqAZ3!2!'bUI35*%!8jbDqlb5ZP!!KQ!A'+$-ZB`
*-!Q3!'H3!*p[B!BN`e-(DB$%8XF@%DR"BFHk-!!1m01"BCdlP5XRD06E54Rr1Ei
-J*X+p!r!8!JT"JQ"3!-4!9r#X()XZK)3)!)&!!kK%!@"-'("%3a"N!"SPXB,ZB%
(VY2+4!,4(IF#FQS-,q!ZP#3!S)"m'!#USPUGL`&+8mHUYdNX#0Kl10G[5!`AXJ!
N%Y"YQGd+",$C'e8!"H&Sd4)-DZ%MdcQ#JD%)NEfID(!V9TM9ja"8,,#&1(XAAXe
qAB+2Y1`$K5hBB3F2BFF!GN%"(",F"a"ffP!UHG@dl`U&9KcCrGQ6,CaF[*dm!!!
,5lS43hQA5dh*`)!Qb4%F+N!3[fN5fA-9U$!+)(%R)$QSU+!$`eGmYL&a,@ADL%"
9iUaPk0Y5!BB)51%1!Y#Yq#d+"I(IlUfD!F!#pNJ+F!!%+d)aCX#S%@%(m'B)CU!
"hjdR0Z,20e!%![d5-F%D(rf28ldBrCH#,XZ6@VcE%4Nmh(hKAaAHe32H[J%Fiah
HbJ%-jde8kZeP%0$Hlaf2h#b5mff5bRAI%$"aqXhIJ1$Iq-d+!Bi8l8!#"YlNfTA
Jq(ebUXNdqBKj%Vif&'lK4*,K'plKKr$K[2A2)Li*d@RLlY#2HdA#El$Lp`Uc@Rc
E9j(EA6e8kEh5+U$2Y1`-14iFeSc*jEhMf!!*$(!)5e-)"f)!,T!!A1(&%T[("J,
!"e!`bAK`!dE3@e1`h[2c*M405Hf!"5rJ&*5N$kdB%C!!)%bB3$&XB!,Xl-lYPp!
)83cS`"V+M!R#R"Y`6Z+UN!!l+fh3Cf#0+kh*E#!#m@%%,d$Dp5)$R"0fE"#G1Rh
LeSX(N!#YRE60`PmijPeb)kH1%!(`)`hK'05J)XcP'-T`kbMe*5fUQk2T'jL!k2M
-!+KRQV0K"P*!d"p"k1NK!hk3!&i0S3+FmcPU-9IP)!J[-!-S%$%`S3lH3c&h9Kr
#8'B-%#G,1MI-X+6@SVpJ!!2f6T3!N!$Sq9c6UDR`!F$`$Jra%Jm!kU$6U5%#S)c
*mV22cMhR6cbIJG%)88I88SF'Fc!'*'254rf&%)"5q8&*!m!1p5%20Jd!&#$9G@!
)4Ard*dhE@mh&p%ILQK$)`Ac3$3%#P6`F$mr)*1l)"Ym'"$$*N!#!bUV-bUkX$Ff
mMVMX"Q&T"'r`%G,1NM!!*"43`Fe5(l*!(r8L"(+1!+%kUS'"##4YdR!3"Rp9hE8
G[K(HHik"i"&""I[Fd!(!QSq!)+Qad!fKka%N"BK2%f%[b%pQI'6[%'H[b'T2%f`
2b@prE('IbJL`bRjY"ffJ$BZ*qKc+'RF[6#hG0VJXMSFZ(2QHmp2HclLXbdJa!"U
`q(TP8i+K3NH6p@q!p#iH,1'Zq3$J#d4eprL1!MJ2-Y2qIQ[[2@a--@[!!UHi0!)
3HUcSLV!SLd[Mc4c`p3J"XC8C0m!YpJ%)3!LcbrM41'$`PlLF(B-*LJ$p16reamK
LRMD`0-F0@qd$'i!3ZJ%j8)"RMJ'fM05J"T6!%@!)T1q`kB!bJrS#J1*V2RVKL@Q
r0IGr4XN*5AU15pap"K'`T&!HDK"i%83'%"@EeJmFJG@MJA*JmP8qfJCqf!N+1(D
8i!c`J55$8ZJ!83Nlm)cp$Eb9&%%%3-A,'@B!BHd$ED8,ZJ%'!)%B6J3k`'m"%b6
"%p`B&[!,8Vdl8`!9PLlJ"JD#Ach!!+!'8S-3f(NB`!Pp%d3J"X+!6V+"LHAEYE"
M"`R13"*FHXbP$rkQj32`S0r!@e)0N!!0"J!ma[S#Q8i$!b*JpU@p10K-k'!Ef!G
U!#&`!bCJ6HJHN@J$f-$`q8%RPNkX9b(858S`%6B0Ej!!dY+'$M3$DN"!p"lLT`Z
3!)YM@"qp4`3SJICP"MK!"dJ*Q3YcJB-MPQU@PqjkAL[Y"%#"d)F8p)%N!(J'cFe
3!#8(!#B+&Z"T!B!5+$0*%!!X!8h4"YE,qjQdR@,jAP!1j"GG!JS)!&D!+Rk"CmJ
"bi)5r!D!f!i&'Jk$#6,K)!B!*I!Xa0Y`-!&di$J!#A,Aj,3C9,S![1$50!lde44
N!,43$X&!R-'0*P3,!C)mY"9Q)(Jd$6[3#kXG*GN(l3E@iEYV0J51K4f!!b&!"'#
$+)!--)F-`!BZFH$9[03J"HU$*J"i0I%Ih-333"ji)ZD!!H9KT3d%%*!!%A"CG!T
QQ!#MD651aJ3-(df4!kqT9T3"`S))Z9Ii#eqT330B#p!("Gb-$r",,3-%4!3Q`-D
FQJ$3#Rc-+M!!-r#-jQ)Q$)S*`3hPaEYJ"XT'@"J,b!!-H!#iZ!E$$X8EM([aG6`
)C,"0HYl2)!3N66&B2R$AaG+$@N`@$XdYbX@1pKI,A8+J"(*`,`S"aRKTjQ*G9%h
X*68@4V!`'48MD`5-"8if5NE%@"P,iZ2,M$A*%1kNXmK1f1)Cm!%Z3+*jJXl!""j
GT'X$P-l5%3,"aLfJ!A#ELr9"(-K"#'!MZ)0e&!)``#a3%Rr!#4DICI`QDbiaN!!
"A((52&-[()+r80ITJRYJ#``F9db,IiQMK4N5Kq")h1V3LeE[HYf+-K!d`"p+3fS
ea+'G!6#J8AT-+K!$5Z!,R!%HH1&Qe%c%C+0aSU8H$N$3)-"SC!+``,)!33$3(fQ
#D!1&9*!!Z@J!T-!2D%"pd!Ff$4p`!BTa")2DIQ+2[D)Ii)1HK!'i'JbUMX8PJNJ
$Di%"&S32i!!,iJI8)9E!!!`'a!%!1V+!l4jaP6*!J![3N@P-4ci-(CNTqN'0)@d
(%3"Sam()(4d$)M!@AY*+kNKSX!JJ`5&)BjJ$$&!"A,!"c)#C-!"RJ!$`JJP3PJ4
%RQ!$(2)!9)'iZ!"HBh8%!ZP"q%('`KJ%h%'DA!#3!)#I&)+rP!)Q#K-i%Y!J@c#
"5SNG!S8Zm!I%!#b8'4&`#ii&2aJ$`b1j#)$IF!Ld!A(B3T!!S"#`X5b*$`S*%KJ
)6+FIJ!2-0!INJ'!j3DN%-RK*(MQqP!+a!*,TB8L#(b1**+'"NNah!-!C0%R()+k
mT*48PAE$C&a*IT!!*IR"Ap)%J%!A$#GJ0-U'8c4`"9k5Ufh*c1%'r!&"!*-dB8a
51-FJ#4UPZe56r!!D)!)6!!3Z`6%!!qpM#9J$IM!EF!&hP!*+!%mD!&lJ%`4!Ra`
3K`"3(SP"LA)@!-d3(G!!88B349NU'+8lZ*H3!&*5XM&1H5RjMUENP'%'KqQ#IZ!
+4'9$-!(f%J$%JQ8`"ML"Z,`,Em!#`%9A@5l[`U`%!PkbN!!!N9cjG!CKVa3XYh!
i,JdGi!3)30IS!(V1-Nb0Dp!b(i"cb!E%3!i)J"83",)"-0J!VqmDU!+`14ZZ!5X
SH(D!+9B4D)!0GN3)#!51`@h3#AD!0Qr%!3!'Ki!lA!0J%!%!`8#3!*YZ`"d)!5U
!0Sh%!@"M'6-(3$S!!$MK`9c)"ZrJFEU$`RNNJJ(MS!(F!4Z!J#2`*!$!"DJ)8+"
aI%l`da4B"F34!P1!IG8FeAN!9'F-8*hZbbHiJ+fCSq`@l4`(GNYecJ$!D3Xf5@-
EK)PK0L8'TGNdX!(8k*%j#cV+M8,J"K$@0$!")Q%!(,j(X!1+`$@!"4VP"l5!GF!
%5SHSN!!("30c8!&R-[LNJJi!$D0L,M`$TJN6p%$A%!"'i'UF6```,4f$2X!FAZ"
X!B!0m"ad`,QJ#Hi6!Y62!5"#q%(q4#rmFhh@6j9Jd4"!#kJ)Z3PcC-rYf6d*$EG
B"diJHSS!Ji@YTJ%1L*l&m"&-81kT1Hb"U0!(%1"5f!2b"!$'jjf"!rQ"I8`!(Y#
YPTi+ID%A)(ITJJQJ!VT9HlLK#J!1B!!G1J(1i%D4F%!8$Q3!)QS!'*T88!%Cie*
NMMD!3H83$`"H8J%&4&(-F8%cU#k)!,L!)4b"GS""EjY&i`MKm5TXJ#h8!V+"1`J
)93!!,#jc%!AN+!Hi'`MJFEi$lT!!$C6"#N!#f3!HJ-hBidBh3"X`QpQJ,25"20%
XR+0Mk!GQ`!0%K@Z!#Rb2,fJ&ei!8Z)kj3%R"!"Q3!!)YJ*+ZJ#13!%PM"c1BT*8
8BEE4Gh"R$#RNc!E*!#%-J#$k"r!Q!L0Vr"0bXJGBX%V*J%"S!$T8!J#"1X3)A1N
lJ+8lS!eN!f'3!!hB!5G&"Ac8M`*539S4")!E$4+ZbJ@d!3P36mcQd!S1-N!UZ!#
U!JX#3GB3!)X6!2`"%+"-iB%8D!@"&!)F!P#U5d%!,i@FBX!('&0B'J!$#X+VTBH
!R3E5GaT2!F%8@+94!A*ZZ2%KKh6"id3'!4!-X!BKS%bGD4Ye"e0!``%!Il$ZC-p
&MD3*PC9LJ(fD$!`T)S@S#8%'804Q+MQ6k68!"pF+!VJUM08'TS('(!!KG+B'$d0
!q%"!0e8&ha3BL#')KVQb33FS![r!H'S+E-#5TLFB!!-9BA*N6,hT#NLHBl#F!!"
cYJ20Q33kTa,B##l!$)#!V`S!BX!Cd!#ZbKX)SXHe%@)!S&#CFSSKD)5bHK[!USf
B2iK'&`!!,c"Ajm2TN`+'3'iB!MBJ#V,!)dJ&GH$Pa*YV!!V'!!X`V)MejFJ"$a"
AR!0MR4(0p!aJ!2r36$%V1fJZNY1ck&!))!VN(!B3)F$JCaJ#-J#!T-mjD4U,TE(
-L*GU#UF"%SLHdj0f25id%3$1fbiY""f8#Z$@h1'iVN)f8jjiJK"d8$%`A%@'9!!
"@SCE6!-mJ"!JJ%c)@B*#1Mf#&S"8qF%B[3CFB"'KJ*mD9'%"(1)!T!X!p)(d+J2
5Da+JCJJXVPL!VdN%a#B@U'Mm)+S5Lb5!$L!1+23!()!"(!$ekRZ3!-!Kk$L1&%U
'`89N!#c!-C!!![M9`3*@AF"jY-&!X+cF)*QZ!b9`$G#"hZ3#Ir3D`)-93'LZ!6h
3+0cL'N#$N!$8)eV"!"!!(04jqJ%3DZ"dk!2`!eF$"ELC$L&&8b`A3!LRk2jJJ+C
60'm+VP!-F+!8q44f`#1RKZCmA'd8'C`hj#U'J"%FL!!f&JD-(3&J$+i'G1eX048
5))3(F1q8+8TP!*J!H"@#XmSY%QQddehX3BFk!(j3+YiR*)#bIA3TAB8fQJ`f`K&
BGdA![*S"$(!E0*`%S+M2`)-F"IEK!*6"PY8`6d$38VX"SH&B!*jG"Vi9"S$,#YB
')!i$@*kG9J!3J!eJ29N"(j+cNQ$,[JNU)'LpJ*rN2+LTRQ3$6,X50#dJi,3FBGh
KL8,3D3-!-cLeM0B,i)k'!!(ik$)B!ZfJMdi!@!#YS&@FQ"arD@jif'5V$-!MY'U
cbq$0ZPJTJ)J#3+JN!S+@#VaD-q!%J#e#F!!8S!G8K!'`9blY,3d%Pm-Gl!D1S'(
`K+C`"lh@#K`cakNTj-%aS`I(c"iJ&-h"9ebX%ZLf`9!+#0TJ'!%fMaNJ!qC@&c3
!AG"QQ3&#33J&3"l)!DF"'Gm-!P#hNkIGlYPCqflMEDF&!2"!EYcENfX1pZdamlH
D!Z"U#S%,83KZp$bid"*'"J&"kaKi3C*aZ)k"&La$!1!#N!-FH%cXS`%-8fKT$5*
Z!j!!!D06*Ba6CES-,Zj0BkdFYe5F!6d!FJ2!AMPQJR0V[Gar'h!(VUBSZ!0!#DK
1"$!k#`!!5!#MX`r%RY%j!`$!!KLG0!FjA!Th%#PJ`!AS33e!#CaGK''9BX#di#K
rPeSjN!"HBh8(J$+`&Yr!*bb!b2YfJB30J!-0Jhd`!06iA0d-Q*d'PN"3L)j%5NF
-AX)$(F2&#JJ+63!)Q`ie`%a4C`cF4#@V#-HSjXaY#)$+dJRRL3ZDUa*BFl%)*XJ
!-'#HX#S08!*ee`9F!@!J!(V3@PKD2-mhAMdmd!ES!-[+!jC[!-JXcFRR'!$Z$B1
&M5DS[SD!"(k[lQfHdK8D00I+H6Q2!$hS(E+cYN)I&cXpSqlEYEm[i!*)(J@`a(k
#rA8"Vd+[1,ik8!LSEf$a-V5YL2)j"1$RP)#'il&A3E$4"#d!*0L!!kDbR-GjkKr
kQcX-J2(0R##JUrB1X'S+U3'LiF!ET3p&6)4&$6K!Fmd!i#8"`'##F!6B3Hb4ApG
PFN%!#(X9K*!!rTS6E3!HC!$*J`!b3%SJZUqL*k+ik9Ypa8!G#"lIE[YDbH5T0E!
*#qD!+*MpCPAhkaK1"Y25ISMJVp#"1d$G`Tq`b!cHP`S6%KCX"0E[!IM!@h9cGNi
3X!4%`+8X$pRJ#mG$`%+'[CfH1`!bkaT3!Dk'Hl@`9Y@FR,0hr!G[3(X'!KM3!ZD
h#Xm0&Uak86!F-!"9PJ@6@a6-!@K!k"bkBC8LZSX[C`1!"&Ve#6(!4ZKIZSU2f%F
#X!CPaLTaMBMc+N,9%Mi%DS"Sa!'rGF9SQrCeXL#JqhkKHZ5+1F(S*!$hYb,)AIj
E%@5!h9h&GJ45EL3DN!"SiQXJ5,`0B(+%SUAa!Xq!$,J#8Fi"G)%S4`(!m4RJ!9N
JbZ%!--!%TS"25!$Zf1iDXY%j"Hl#k)`"e%S+['0p,)pC!$ffaa8""Z6MI5ajaG(
Ll4#dc!C!hRG-H4F!3e!TEjFJr0qe'i"rCfZc5@3J&mZ"1*!!C'HEHd53!-jL!M3
eVA8A@*)DJ!JEChPPLT+X9m@(a'N+"@%PUmcia"&*'dQHbAL!)ijLQFb54!&(A'i
hQ59TN!!(B288`G5U@R0JX"5'cCK#[ClK"!F#lXZ4!(B'eJk"8k0k[G(R%H$)a`C
S`&RdF`IS!+#$U)amVX3$`*YA@@G%AkdmKNSD'h$'"r),RHAKa"h@R3LB!P*J%NJ
!@)"2V&jE0QRi1#iA9mX+"ALbAK8$1-J`!i"cf)-%J')f")QA!#KQ2C!!H0d5'QC
*U#$a'UR,I*J6l`&3!TMdSFRL`kZHA01lQRb&CHL&JD9-($ZMAKeIiB!Xdc)2`"U
-6Xa*19Rj-STKVpbD!H"VYKET3$Dc*0Vm#'`cFHKSDeNh!aDiV!J2%&kH""!!!J4
9Dm&4jSC!b!&jSJdBcRF,"Pc!j,21F-!-C1IYI!A)'KM3!("Jjp)*J@!%a[14N!!
$0m!mYih3M#Z6mcH"3i!P-01f#!!"E1m1@BL(&"a!apN+$Y`!M#`#6SdI`*HGP&I
V!5`S&3F%BVS"Dl"0ZNPI#32iU@LF%U*K&[9FX*JDfB!H&1)hI$P"F#*1&SG!H6+
!2mQ#"8&c45!R`Mj`#fV!#4##!3JcF%NA,-c&QeI6lS`Q"6CD"k$NIf%0G63SQ0'
X`%B$NBVS!R5S!B![EB!Dd!)E[4jHmN9L(`DJHN4TAi"ar3&(G+YBQJc-k"&fdp5
"A,3)i!!)U!-'8U3032H-dXi!idU$-`d$cJ%5500VHL6ED"P3%4ICdV!,2+!%4l'
E9Z`fLJ!!"MjK"T4JFB"aGpNMQ0&qiDBjJLeV4`j!&!!%1dR8eMm'jD!F5LYk44G
UD5`SE#!l!J!(#!!Si'T!84%`3Cm"p(5a'L$'cZK1iQ*$U2T8!E'$%R!,EH$X$U)
!f+$2!4hX+LT3",#!jq-"4B!)*!%De!*ip8LHdDCM*+L!(4#X53dd%'FkVAM09%%
d8l&903Lq1*8eF!YA69QFY8TZ!p9!!SJ+#K@Xc`h#UJBZZ&Bh,1hTUKd%0dYY,PB
'$0)!m!a8`2L-@&ik!BL&$r"%8d%4Z"YS95U)J$cTL+P&!R9f8X&,+i#"VE!0GZc
!"ek@BGX0KrdF3!$!KJ-,J')r!a"JX4f$0IJ"2)#!GT98N!!-BSFbb,%6XP@6J1J
CUbq@Yhl9iIS4U%m8N!#VGlA(pYA!HPJ0kf*pV*2eXLlACZpF9`0U,+fTpE#beYM
D+Q!!EIdId!'hVYVH1NMQl((0U*TedSl*k$U$MJ4f2DcF0EHS"JT,AS[34d#[cj3
!L'riHJ$Skj6`$&$![ilB6%PNS`#$VBF()4QS!fd!$JL@-$#iQJBC!mR2F"2pJhd
!&Z!N2j!!fD9$Fqb$k+N#)$FD[JN$3!8NEKq`Z"Zh'V2FA&466'iAU`*SLJNP3Am
lF0Z+-c$jG"*JkFfq%"K-J!M&$K*"J8AAj$BKD)-bmklT3!#X*[`+!L$G!$JCd$8
J#)#ki((0EK`J$!#"13J%UHfTFB#cE3J#S%qq#V2l!$6[k$d!M"5kCJ3"N!!4F-6
3%3$P3F&M(4ISE%Z#!&LhJ"BHL&cX!l%aK!2bNJ2!h#KFk*S5"%!RB"kP,f`#h&j
,1,jZ&fIER()JNhfIE!&!Ji!+"+*c80@K!)!6a&Rf%3!m`2`q!Kf(&p!*#`Y-+6J
$#'4PaZ`Pm!81!KUiG&CD%*`@R1h3U`X#J!Dii"PmJc-P#)i0X"pdDffT'`iiiC6
S3R$J6l$F'q-PC'kVe`Kbq1VHi@DJKl[(!c#Ld3%JN!!$$k"jFiGUS!NN`%Ai&B'
!UN4[!)!'#!lHR1+X!!,!!(cb`016kC+LUK80U*!!0p$L$K)6ceQlP%lF#$q3!*d
64)j12Val`d"`)iUcU0-J2-TTJ)elj-LJ$cT!CPJ!R6X!11j@(FdXU1LQh*KTF*1
-0UlRl1&2-!&-J2J+lc+1%2j"IA`%!j-M+!%qU3j)SPE'HYCAN!!cj6&D$B6"L!C
2E&2KpJk&l5A10TI@Ue3!6$`mDI)VcRCUeDY!S&5SDLma`6Xj%Y$PGCGpr!-f--1
913hBH3MJ20k8a4#&k%#(lMkpF*JlJ%f1`T@jPQd0-+S&4!-d!"G%`'V$6&J!#NL
"*1!%U%!p4QP[[)BmdF+ASrh"dK9ZiTbFJcB9`"$k1'ZV!iFJRDrcGSi&I-Uef9c
A4Q1FB!&3!TmS`T!!Mri!&b!q"6(1brPd8JESA*fcFbU!AK5,iFS-pD304!-`J$Q
S6CjF!8aJT#YdFdF%q+9,5!@"!,,@!4%!-9)1IYP%5%$#-3iHN!$6K3!3L$P@a4Y
m!YBJdhh"*a!$kJ6EN!!"%SXj4VTTI@)$Z)LRJ6Q3!+U%KVd5*@pJFHQjS))FBdp
J@fim)!M34H(D`T9!pX44"5%9(!)Hm!%-kki5ke+!#P#P9!!+6-!AH1QM)0!m0qf
h@RG+IY+&h3HS3)#Z,Pb1JA!,kf1G*6eZYSh@a`)LB1YZ(E((pEPHeqrk!NJ&HGe
0clRXjpMH`"J)!biVN!$$VDdqf+e&B6rXF*fX!`"@F0Bj4bS`"*!![69)GVPq!1L
kAFIVHRfchr#V4mhh%jD)`S6pUqmU)X!%RX!4B%PH`,"5TB6h$p4#+Z!$+1!,4(E
LEY`Tqffrl+1!f[6YalFBV[VUlNr[mE)2!UZA#!`$'I$Z@GfRd!-Hb5hmJ4T!"9%
!0)rd0i-132-ci!%Y)J#!!ac3Sc""@U)X3FUb%+RJJ#B`JEaakcNVU9!VZKlGU8d
Bj"Emi(LMi!E*!&+"+F!"(d#MT)*A)+[E!$r`0QTl3a%!!8!%-TG(D$DTi"4SH!j
[Xa%@2e!&02B4X014ALCU80Zj(2KJaMX%pl+$J)!Tdr%erP,JJlj$p@J-N!"h,`f
&b2mGb2&8GQ48ND+5S1DLYNXM%3C!SM%kcm-T2CACmH3P3j4(CPUFbQ[0+hpT2S!
+#!!mN`SF!@J!!d4b9)&+NQ$86IQ8-qD4P((Z!8'JTU"NarcQDiiNb04KRXi6(He
bjr1m2H!"")!6a&`IN!#0CQkM6#FLB!QFKfi!85Jpj[J'B`c6E`Up)3C%424)*h%
'`*Z"+l#1#%dEk0Tr`p12-6H!!3!m'L$eRpiIY!%'m1Ma3D6AL6V4FiPk!@miJ%(
P%!#[aY8,H$(YkaQ(!*!!5iKHdGF84Zm*CQihQ!,G!#apJd`pl@Z1mq%'UR99mC3
HMNjfC'h$!$c!Y%rhiRi%#K1$r`)1hXAEJZC+i5fm$mM`KjA&AbXAMp&$2(JCm8I
!a$1!ZDlLihf(j`G46'e2,M[#iaX3MKri0El(Ql)Y!&%B2M,$0*Z&)j8e)Bm%K!%
X%!4p$q*V'K8$EbN&2X!4ReiII"L3!-YZpF%2@[-SQ3"!JLR`80)*M8(*JLC6Yha
p`'*UrDh("MT4ZGH0Xp$F4a)IH$N9'4fm*NI)'0$liP)PrS!Am-JIf4DL!%,J"eU
!AeU+T%pYh!a(!'i+832S@6KC,cmQ,fJ"51!IB))H!%Eq!5FiCU)!a@S+3l!M4&,
de!%'Lc9J+hl!U0Af3(JUY-$PA)TeAh55#c*1006jQrd$BU$h2AR,mI[-5lYX"-h
"!`*&"0%!(iG"*Aj9`-ES!r0Lk*SMl4`!5'!)j!X`B"aLqVk!I[h#A`*"q8Jd'`c
cD`Sb%(j(3KpF!&*T!F!"JDferJ%Id"c93e2iJ963#!5[lFr@,YjRS'!GF#N)J5E
3&*rLXPF!cH%(8%%SH#T+kh#8$dPJ#&#1B#SkC4lPU*`[4HM,I-c"mrq!%$$rpQi
-8%%T1-qBL`GJ,LL!ZF4d'qJ(`9F!D!)ikDJc4G+h(ICIkDrqc-ri4B8#1'i[A9&
!58`+R)2Q`!HN!T%!(,#LD3U1L$-KA,3&3`"#N!!2%!2GL[h'!*S"d%!h4!qB9[#
!2`#NS8H,!BDQbZeRj)jcF0m0&dS!3U!2d!(m%VI3$b!!,L$#dJpi$2p"(H$r[A3
ah@&9"lJ!(`!FS!9J&FG08AI8i3-&$ab`!Q``M*-e-8J-!(1$1b$6mB!q)&BK"#*
e"3phd!pXFc$!YGA0L9p+i#Af*mN)8J%B`,$"!)FAQ#Cq`3%65a+M5Md$%T*9!J8
FATk2'RLqk8AL#(I`$03"BT`@U+I""10AR'!(eJ%-%E4L"X30(Ccip36fJ$`!9N(
8kB"'(9*(%d")ida5*`(#BM!30l(E`5DN""YJp&Nqr0Q&p4c`G'h"%L!"5J%Zh@@
A!b*@81!25'Bm!P-J%EJ5()&UB"I)"0)*6U!1b!0k!aP4d08+2S,H!aXJ#8i6NdJ
PD+(4*i1&'h!'e!&``#ES8kJ$hi[8F#`i8d6!F-%%)!4$(VqN"``!0GD[8!a%1kk
"%3#K&3%-3"(31,`"jJ#5a!Ck!'(JZ&B(1(lfJNG`L6Ne'S!6i"*FB[(0L)'bQ5D
TJ"p`h)`2#91H*!Fi6DY'@Y!48")C!2Kd!'KGkd(S)!H3!$B$)8+3!!&`!k9#!1J
Df!QTLHDJ$L#!Yi'QS!k3!#8J`!CJ",#"'m!4m!aS'#"$jk!1TJILJ2U%#04CIJ$
)Ta%f#e[*TkF1N!!KrD"9XV'""Ip2`L-3)J8C30eb&MJ&$D%ZN!!"L!'I%*!$MFL
%BT85F!"SE)GA"EF5V$`-)8qS!p4CK"BQTK(D#1lJ+-B6-J+P3NEi$kJ$,p5!F"8
U%&D*"IJ9RJC+!"'3!#HP"l--3R!2q!+Q93J6Tj%UF%"XFd)SJdf$`(81J#r(c'6
3&Ya@ma%2`#rj!GLJ([3V'(E,$5@"!Ia(2Y-4m(P`!14Ji2!-8!&KK4F`Y1"iB88
L-,5m'Q&&,""8k3%3J$)`Bh4AR@&3jDmdEq#I2K$)N!!Mb38`!&`B!YYB154(53#
aB3m5%05'FT3#!!BS!(k!"L"3q!&TLPl#!CK!Ed"#'*-KKNJ""Z!#P!U"$!c!!`K
N`)!4F"XfF()8"%!!2#0bP!'`'rS"$F"[k!"-#hl!!d!F'SH(SA"$59`!pJ"cH!3
iK`Y+G(JG)Q20`R@)6f30[f(&S*G%!12Kq#$FRBI%J(VS(,*Ed@%@d"9)!9e!9k!
%#)KRJ"!3"A3&1X##k)eGKeI"'B!#3)KBJ3F!)8*A&!#%+#%T!"$L,e!B%BDJN!!
Ii$4j!1')"J#rL#0q`!&!I2N"#!#(i!FN!0ZKEQJ!q!%SJelbHa`"aD&qL"bHKdk
!IbMNV3(84Q2Q"QJ!'C-V8R2`2lr&JJ)"q!%5`'mi!B#(J`q15"lZK`M""3!"q)F
%!*!!b!!)L86LTl%$()Qc5**i&IJ"&F"[D!'!KaG!IKJk8)QkJ!9!$3KcBiarSa!
188'K"F!,#(0&J*ai&La4GD)T%"%UIdM""5!)&)!c&dCS&YS$C!N@X!0mK&6!"U!
Tj!22J"H`!4!"cd!L)!#d!!$!-r!-a!*+3*jBLf#+%-#Qk2[T!eN$!)!TJJ#LSUI
Sqr%$GdDR1'LYLPS'@mJjd!6X%`$`!Y%%5X$lK!kiK2q!23#h"&B,B+rB"[!"m"2
M3"J@J$XL3Q!"'!!3QQ-)AM!!j1"6B3q3!(TVJ"1`*EjG"&#4q#@'DSk""G#5N!!
2kJN!F0jB#mkB%#1Aq!$N43$!"i!"*!"j!3$d!SU4(q!&R'GqJ!q!)VS!+k)(i#+
HLEcKGcJMkSCk#3(!#"`M%)Iid!"mHVlLqH*Vc&aY!"8!2cd$cdN$J#bDK`K""D!
(0)ZIa`-3,DT3%')$X!D3!!$Ai[e$@AQ*B1,5J%mX+)I@-B*R2)IC%RQa2Jb-Gi-
pm(20A&m!mq9mN4S4J#``Fh%"`B!!3(1X"F&!mhB'1!(`dcc`R*!!1mFKaDJ,9!$
-SPkdbR`H%F$'f#Y5L'Z!"h!Y`KRr"FR),GBFG`&jJBbP$16&JJ)cFJ5)!1D&-#*
C&!$#f!C`!8cLa*JB)J38!#Z!-B)A&)$8D!p!L")!JJ)&K)`1#K+J,CD-[mAkS!%
F-rM!h3!$G&hTa0eJ!S"F!N$Lb"(i#4A!f5JqA!"USa4!*VU05!%&%-`jMFkLjf3
h3SJ9`("%$[#0MJ%hm$GZMEi+e92-a!l'3&X31`!$le[XN!#mB3!)Bf%d+M+&e))
TNr$3L8M"")!0e&Q1JIL@!G51Be@HD"-fKA**`X-RpSkZ3*dea@J!NL-F`!&8M[$
6$r#FS'F9BE+i3a%#Ff0,mMRf)"V!'Q!#m)dJ`1Q)*#SA$J$93eld),XKH5'+J)d
mJ'Xi-(U&pN"B@$[+$TM(SGKFq(lq3,2!&Z++5%%mF&a8JL'-0e#GR#Tr5bDBhU%
6mN!cf"F+3lP1I4"#$4Gf8$`J"D!CK'%f+0bT6")!-Y!p3J$NB&M""349E3%b!!L
)N!#QS3#!'ZCjp)#"-V58&+@KdL)(!!%VC+q)3XU3!!4!$BN2h*!!`B%HJ!')KQN
K`hCl$!5Q6!pJ"1!BS8-353$mJj,'6XK"%J(mB-cP$fU(UdC8b%'b!-eKd`Kqc$r
ABS0L!TL2BH+h'!LY$`X+"C!!)VU),5*[##2qLq$K!U!Q*Sh,MFS8!C!!!h"LVkJ
RkJJI38FJ4c)$G53qX#D-$dk+@Z!T43#d3+N!DML)VN9AF#Dq#3VK!b")bT'@3*e
P'*d&qS`H+BF)!R8@H5J(G!L@j"IP"N5%&9j4`%%U!B6L2b!2')UIRMa!PMJ'X-#
P#!$J!f+&+hN1a*+BiLmJ+UU&Rb*()&EiI[4!UBJT#J#l*%6K5cB&`D3GQ8Xq"jb
LmEJ)f"-Hi623"H!#F5)6%-J3$d!%HV-6L*!!,*3qX9DF&9e*@N&3X"@qa@5#8SJ
IT%iUJ!)mMH"&lQ8,m!+%aTZK#-!&!X$G-#JbJIf@'`!&a)6p9KZ!""b,fD0`Sc*
"!(a!pdJ!5)hb!,A)%64(cTH$3J5!NE6)AE!kSP'Z)dH!m"3!UD3EB!9iJIQN%i#
0B)lr*!R324S!"+8k-Kc4!eFMh-)1-*5135d#c-4FXB-eJ$M5!kB8((!!T*)eBr2
&%C!!'JZ!cQK+mS`qiddC0%BjK&0MYd'1@EC!plJ!%*4I!"!`("N#AD3Ei!HJP"V
+qM!1"8)F!"m`!)!"CJ#a#!D)!Ab!dq3&m!'`JaBJ""J"B-"&'5c+!a@1leFr(Sq
j)k8J-kimHD5Rp!!8Gh3J`R-`pPYQJ$)N6,+9B!'1Pr!!8jhN!`!#G)813%9CEN%
!U@3EB!6i!3*"2aP(RPYd&ZIiHB#3!1E!8b%23)J1J*E)*8+9*q09)!3FE!D!(Y!
L#J#JS9FS$pL2H#8!`!qF,fBK@ZQ'N!!YDf%%d6#S61f!'5""#PNK6"4$RiJd54c
,SN!HI8f$1G"N(3[U3&miA,"cZJ!lJ!d-KS8KjNK*1!!pSQ3*AMJ!j'!(m"pF!Ip
!1P!N230CJ!BJ&@!"jU"Rq"q%!HbJ6I"T1C+UL323&FPq3`BhB`rb!2LJ2TJcT!l
Cj4f*&JL5P%3$)!q8#V")H3*)`LK"B323h1K&`K#HT%R'PIQP-0!9%J$!J)%*5!+
@5%%$S!TdK3K!JfPIFT)4TL43+N!!"F!DS!BX+!$!!+!B4#M5`)45S9`S'BS#!!"
i!(B,!2$#+)4!BB3*"Y4CRiY#'"AQPh6PA3!'6*)kJVX3B&)&G+!QZG`%Q"kPAQ3
GVJ&B!)MCS%J"*+D*DD())KR+JJ)#Z*K8*Y+L%+)'35%$!!p)NS"N!S"I!PN3BC!
!#8JQ#&QQ"kNA5B6j*5QJ3@S+jJ!Ub@DD!5b!SjKG2J0A!+Re$'!"Nb*hf8c'!U+
956KHSS6U%ad!22B)[+)jB$YH#ZN!lJJ@2$$TJ%liCHS#$!!9-'KH#36!TfF1Z!%
DaNc*CVB"@)#)k&`#@5a!phJ!5)hQJ)!i(+N$ek+)k4L)!e#PLVNqH)XF31lKXYN
HX3-aS!I%Nik",h!0aJjfJVheI0L6!SbPU8qbL*pQqp!I5TG[&kQj)!j(JJ$IU!G
`PP'P%1!d83q`JaL!"hL9)*ZP1@JT!,9)!*!!m!#B5-%#)!I8@6k!!UKYBJ$F*X5
4m##B#%'K9'Gp"AIPmh%ZT*Xfi9N!B9)5#i!-3&KUQaC!ZTNfV$`B*Vj*!A5&#k1
m#6+FPdl0!S!'!)rq3,PT&TS$U+@mU9Tk%!rRJJ9E%J"X)9+3!!j3!KcJ2c!A"JD
13!SK"l3"LB%SS3bL%pA$pi%"E#jkJ(,(!a#D+dr2ppa&Gd$5Zc!2jJLHNJ+3!"$
G+HjP@!"IrJ2jS%G`++K-#`!5S018NRL!QrN2m$AM&,45#,J%b&)%N4)Z#0U'[4%
N"3#+#*Q8&DadS%dHdK!3@[6NdSN9bRiiTmUN!)bE"+CCL!I!K'+Kf)N*#*f$!%N
%"l`Q`0(*f653!!20i1E5FSda``9CK`l3!"KN!D"")SFU8`)`B5+E#!!j#'8p!kl
!Ul&i[J*bL6N)#d#Ga-#UNm2FR'm93T!!!*J#lZ!!8!rkR2%Pe,N0ARm-h6cS&(3
1QZHRB(EUQeB"#p"IcSD!T"@THF)!#kD&U8RkQ*j5!S!"G)@('Tj%!3#5@'EZ#3"
NNS$NN!$T+5%!l!!S1A4URQ9"4DJTN!!$5ZF(j%a!!(QQ+f"R[J,0*#`31rJ#[#)
j!,GB![LNdh&b-3)Z`91"Gbi[ZDGM4QMF"!+!'*!!'Q5GfCS)F-!4@M!!,"#dT!P
T!hCfIpBDGZ*LCUkX-XMA3'!'L!0`!"B!#d`!h"Tqe3E8%8l59m-2j%cCdm[j!lK
fe9rKk3&`!3d"Y40feJJ'31%K'E#,a0m(qK93P-rR[0PY*MbbTbk!!!J!AD&9k(5
BS%e"`S0l`P9d*)'TD6SGEJ!Tk@Z5!ff!%*!!)R+8#-(Ge$dQRTAPT8!1**99BdQ
C04U*@f-YBLV8)[e!bX!e8JZI(MN3FGB)'e@0@B9DR-K-E+NHH%VQJ&re+S3`%"8
*%[QS%%30AKMBR32r#6ZK"`!!849f%q-i"Tj!`H-#ML1jJEI4`L%#m%mcX94ZDK#
('m!(j$qJ'T+S(J!!238$J%F"9[m0+I$N"!2P&%66L&Bj3T`m%#GN14'"+'$D9!m
K%5"J)bJiTJf'diRQ5A(#(20lR9Ar$B,c&'Sj#mj03!$m3AU4#cK1p4XXL6[`1BJ
ci-1SB!K80Zd('P!%6MQ2D#6kHdijP'MdC)N'G-&Ed,'*3MQID*F6LN)jT1Jm93L
FSYLMPL0dr$GHMLX+LaBdDaEU3`#X3#+$)H#&5J#-c3$Q#1384S-a1!IBRB(GqfF
%M'[#!1#cFH'LMd"dpIk"!H-D4UGAa@[U!82J5F3QCJ"Sa`CB-EqP6f&jD"fEbkj
S+P)+&&GE)!8J"11!2)"QH!3lJ3ZSTI8$HS!,b!IF-2kIER89l!rRM8HDc43!'i&
)LLCdS*e$0#)@D!iAM+CJ$'J1c!$[jrXT!mH0+G32c&L@f-T653)+UBPqq2i""jS
#-m!1UJ0`N[RcD3d8Y9p,+X*S$Y5!6+STd+4@!3PJNkj[15NP+8M50&N#f0B2N!!
#61P3#LGT'jU#Ld4kUJ'D!p*5GL)%$'CCf[UTI[m!dR*kHNT45HIjHGk$31IAF""
D"8a!YI0BkJ)%J+6T0!i5XNI%K!l!!!3!%XS'A)X'J*S!9Di2AN$bX9FpTUp'AUS
3'TmU%`&J!G#B`1FMLCDbS(3JMbN(H*QGj!$J$K#I#L'Ck5N0!!-Q(,4mmU@f3#N
T!f#%*1Jr`,!m!Jk+Z1@#bJ#pPK*!NFi"IX!rS$P!RdP3E#S$"!q#!%ckQiS+NS!
5B2#m'F6!SmF0*%A-`(R`9)J$SNEK8Za"(0'!l+)jF!2(k8L3!*`ZTfAKiI82F!0
q%d9*`'`k"3!$m+%i"Z+&!F!#@$Ve49LkPT+PBHP@NRNq0G%PeD1Q-+AGU3$`R5)
-(!%4i*`Q4G5!G(STJ!1L"RGkR3S!fHPiZThfTrpT24UH0JMrJ+Yd&)SAT'8"J1N
!9k4PB5DIMU9P+Bj`R`S!Ef,1X$9i1!c!)3L'B"A%eb(S"4`#jSU'0`FS!4p!Xc!
&BLf(eBck!E3)S&+@)P0qHM)!h#,"b4kD!Qj+,rfJ0-eHLRY!D)$TRc5BAJSb!",
U"U5DEJ!Dd'TU4%)-%i!(2"Z6U@DD%'L4LLJ3J!FN!*PT*aN!E*Pe*4l`D5Q%S+Q
RK1E9@43!(L!aPUCHUVI9&CU&-N$%1Ca#54C@fcQFDJhr!*b8[1'Tq4d!32,*TZ8
RP$U5ZDP-e[Vj%V5IlkFF0,@*!!A2"9+GhCpZ32jTI`i%r'G'K!AmRiG!!!S!$+!
&k!&+c&'8q"@VabX1TflJ!J1I8M5B!aY!1V3&2`"#m!fN'IXHP1UYI#3rCciiG[3
$hPRBqDIq-5Q$'EA'&+RKT`c!H2`$Z9aaPFd3!(Y-*'@50JkmJ#IU)6QV*kNdJ`Y
%1BX4X4!"L)-QJlFUHHJHhLTkm6S)UTl50r!qA!SKP2-4$j)UBKJkQKLF!GHFd`"
8E#)p#SR#TJ`TKS-b8MNi$T!!3bAcVp)B"@"E8!9S$V+!9XTY[(qfJ2Fd%U`CUN2
@X!0)$mm!#`#Ik"8`AR4c00!N"DN2KaT!$-J(*G!5I#6@JJ53!!U-!3&56[%&E+`
R&a0dKPd&2mP(!,,5-K4BDh$jD3#Qh"kQRl#XpG$,LKE*V%%F5e)Qf+bL!MQ+IdK
IB4KJ)C18!5eVdb!2K(F+hVB`FfN1$54%)C0@0+kP#kKqC@'AJMa!8rJ&k"(,LJD
3!!(Y8@6`Y)*N1+",%2[44V8Ic@9+)K5m(mrj6f`##!8F`!m3*Pe*+P#h+KQd#LS
!#l#YFq[AqTVJ*jUJ%kDId%0,`rl%B5)"'mFj)+S%-N&!31-!L!!B3)cQif!!Y)F
+d!"S!S'!#9!%8!EJ!1i#B)B"Z5B6m!d-!!I!4H!$B!#aJbB!V@!!')!)-1+T"!m
!!S#-%3!"36J3"%J!'!!#!$FY!(P51"!)m+jd3!"JZdiHa3X&d,X+!XLV!a!1#!(
++`,![$S!`DXJS,`5Lbb*')!!&!+p4["D#'J!'-!3-!m8G#4!%R#m"KmD!,6!NKJ
"Y"l%N69SCpZ!*-!ZEJ05J%1`$65*!4EFj"M)!'@!2N2PJ3)Z`-X4$33$dd!`)&"
)!$Y4-S!j(+pi%J&J!M3!ei!Ni"5C!DEV!r!2"!C[D-S3$M3#i'X8i!`J-i&"6`%
#S(XIJ!JJ)D%!-N!#d&-1!-f#"#!-r#9QJ$a`JFJAj)$YCJ#)!#pX)'!'k!-fj98
T!,L`6T(T!!di"M%!L*Q+,!,(N!!'i"K8!@i!KTBdJ!$l#3J3QiLF*1F*B4,N!GJ
(djSqFJ!NjaaJ@"L$)-!B8!F8&[q(Z+)$c!B3J!8J!%!#X3hf)C-N$3p*)@3P$'j
Z`!R""U5a!J!UX!DiC4ZD("$(KJ&cE$&Sad)!T-RC-Y))T(3!#($9*,*Gl"Gl"Va
B88bZ%*d*!0S!+&&e-!D+E"K3dY!N%%!%)!#i!k$%UF*6($fCl#C,"K!!!`!!N!!
%$!&2J"0!b(C[S!4fFXRH!D9XdN!'0!!$!!I`",JX)-"3!`)d!8cVrj%(i,)U`#k
Eb2Ub`'`+)JF-X`-!9F$,)V2"l$+V!!`!4S!Em!D`8iC"(9!)b3%-`!!J"65bmbS
fk`EJJ46!95N&8#(rKjA!"#3'8XGJQ4,p))3""+!"$!"f!"'`8j`!LH`jHkU`,#$
!1RY#c!(ZV&K&"F5cjD`Nd-G'0TJ''e$(BKTM3"hV"U5a!`!U`!5`FdA!&0!$,,5
X,"03"63"6S"&1`CmY$Z!6eA1!J-U""c`Ib5b%kd680'#!"RY4Y[43J!5`!"J$4a
Cka&RmXI1XD9%'8!%L+DcJ64J$L`!!i!mN!!(3!&4J"3`"G!"G3"ZF3IJ!G%C!5!
$b,&A!J"bcG+aGU`"3!!N(RMC@%3'(!"-#%d,"C3L#d"ILX34$5#!%cB(j!%-J0-
%eACNa3&R3XJf+$4Y4hE6KV'#,)&%!"!!K%!feJ,i!%fYDf2HIE9d`%15",`!6`!
)3$6mJiPH0KBiH%J%J#L3!)d*!B!X5lY6T(*X3*NJ`#@b*mJm4)BTYLd!"(!"%!$
%!29e0&aIFbe95b#"!'N!'3!"9!!%!$GJJ!N@T@eG@pQQYNfY2!$9LVB(Q,rbfCN
d$N!"3!"!YDEYE+[D5J!&3*a+FY)"1paF@mheVaK!!B!#''$*E9RlK2@@8'ce!3)
%$Ba''G$E#J(!V@b,f[T5"B!8d0d5EREXGp[ELJ(ME4elfUDf#8!")!G!Y@S!e0+
rFTKm!!`3!mJ!-`!08!2B!$F!$M"c#!&$!"&3""J"%%"ck`MNF(4XE%[HVVGEE3'
!#S3!)F!38!a1$K3P&*X'T#"(3J'!#a3(f8F+!3)J!!8!-!!##%GMUlpL!"3!lij
'&JG3Z(0DDVELRVMD!!L!"q!++ki#8!#)!iTXd(!'p!"B3"!`"#`"0UilN!$M8Mi
mVK-3"#`"!8!"S!md!$BZ2j!!`i@aYJ+ZN!!!'!!)!"-3"'3"4B!83!4XY&$!!Q!
!5!"2VY%c&U838ki(B19LZ9SZPc[PSJ"2,Q&J'$3!"S!-B-4PG9$ZJ!5,!!&RETC
,lMN!"S!5-1Gk#@+Z&!+,D!&jVK4!lM%!"X"j"m#YEVeXB6#P(M!XE6YRk*B*5d!
ZK`GiZF5"J%S&"!'8VU9,!$aTG'd28!!B!0m3M5[U'J#BJ"3l"h"G!3#ZNA)B!+"
!!b!!'!#L`*F3R4N!TS"pLprUYrbYIaX%!,J#,S&VSH!#ZQjqZprfYrpYJ$[JYVV
[6U[,$$3!8!!KB!"mX2r!0D!%P%dPAVA,!j400%$Ca!+8654!fD3"P%d830RN!*4
0#%$Ce$K#-336&%-2c!E@!$X!lj)$m+if!1p#!r"Z6`6&q!,`VLd!leBd8)`T!1p
b![!Z*3$[+J,`VL!!li)a8-c@!-@B!I!Z53I&B!(`VK-!lj+9"S!d)&"B!`+&0L"
3H!-#K6JJ8*J$!S8k)&#i!`+&$'X!f!-#K6iJ82J$B-!"%%mH!0VK!D!E(J$Ii3(
3*"i!Cq)"i"XH!2VL!5!#a,`Q3-b,Uc&a-Hr`G3$B!$([KR!!f)ZY8ma,9RjQ-Dm
6F!!F6Vk5(8!'D"pK3!*`!'J"@DmD32NB"R5!!A!!C'4'3`V5"K3!"`!ES!DN[3A
-!5!(U,KQE4j`pI)"+Li[KJ!F!)6!(+!BL!&44aL`"PbpMJ"4%`C8X@H!efX*S!&
h`"2J@XN"G3$GF!#!!UMCdC!!"hLp1d(MqrK'[QD[,,"#A,KP`)Ga!1J#432S+rU
1,Ir($VIh+J0bE"@5"a3'9bmed2S@JhX[0p$kXR%maGjV$V5q@frfFIA#!kd[6m%
'A,hiJ"`Ef9#j!)!F@q)5!!J!!S!(#%I-V`-J"d#r#%#FfX5Z!Fb["L!(A,r-,`M
!XL#$c5pQ)2K'(GCA(N$P`J##()el!*3cFQ`6Uj03Z8#!(#XF8EP)J0'cUXJ"rb!
#!!8N3D8)mfX&j'5Pb2S,"MJ"2i#!Z`4)!8+!!P#Al,%Q$Di`bG%"%%!)X!$`!&,
!i6X&%!&2J+0EbikaC3#QdFXqXf+959Xd&"8'`!,J"FJ(Ij!!be)#Q`(b34"Jc*E
!EN!,E-`@!!Z!(8!!Z!"#3")3!bm!AD8,%!6S`2,X!L!)6!&%3bCB*Tbd"e"q)YQ
U#3%)"kcDSJ!,J#G!"!-JSX59J!42GDLY'`!#e!'i3PQE"ibieL`GS-Ej+pP,9MI
pYJ%4m!,J36Uk4%"V4GBD!CUX,D[)rKr&34&F"B[!%,!%X!#S!h#!bc)&5h+pl1E
ld&i!#i#AjJF6$4)ZBI%"d`&pF#*lf2iIG35kF!M,!BQ`('!!-!!LJ"'3!08#XTH
`#T!!8q!"1`8Kf`&S!AfX)+IJCLHUE363!F!"aQ`[+eB4!9-GN!!i"E4ZCB!#d!%
)!Jf!D*ZGd!%S3!V3!%!!'8!(i!Jd!#2!#!!#B-"AJ"03h!8"bTS6F!5B28r!&*!
!baN"53!68!4!!-i3+N!-'m0$J2A4"K"ZC%!,!!88`@q!P5"TJJ#rlK-3ec8!$%!
(B!`d!BB3&9Yb9VDf-$8!$im"BN$*ZFa5-ad!1$!%5!&$3!0`!(3!jS#%Z`E-!B!
ENpX"Z!0"3a5LNi!!28$+d3%XZ3p!"m!24#&&!c))#%I%EB(9b!jl!!k!!@EkZLb
pm#pm!3"Bfc",f`33!H*`PTX%2!'h5$SFeb9V$8!&4`28a"k!$C!!FRJ!1-"1V!0
da$`!#`!"M!!HJ!q3!"*6!9,!A6-&'!&C,N[l"$3"8)!e6+cG)P0!&6!%9,4,F4A
Jd@3"[h!%i!')!FA`-I`%*-2,X)!E%qGbRUd(N!$)$J(f49)m"""V4QfCd"42!88
!+qX%%!'r-!AJ!6!#42$1#XDfE[%+(9!%2!&83!m3!rc#')!(i0L'a8p!&C!!bcd
"[i5b0J9)HP-!&1$M&J%3lLmm!AJ![)"jKhd%[Qf!"k`*A`%!5!Ua!&"@8LcAHkT
%[R4!$e$"F3-03!,J!F`Z!$!G-!8m!8K!!p!!H!$S!'jE*NJ"48!,i1-Z!Eq`"1!
"f!05J0&M*5!"V"8l0G9p``GB!r!!I!!+!'4V*Ic$3m!,`"B[!99a%p!!1!!I`!*
#&pr&ah!9N!"f$-Hr-!4JjJ'fGI#+Dmd'X(*X!e!!I!!m!$VmicB!"-!(J$U9!5[
Z!H"9J!"#3((hikBF(`!8)""r!2p1J2`%$-J"`!HJ"4JY%m!(F,k8)XYYG5[GQJ'
$-4A`(IH!*5d9NSjk#4Rb,e`"I!"2R&BEcUS3ePFBF#9FYVVa"f!*q-EUA(#-(M-
!(`!TB"m[!H&XL!`-I`#b3"fX')5c*m3+`H'#aJI3NGX!,!!I`+m&J,3"C8"(eJ[
l9",!"`!88FJGEJFF%Hp`Yh&ZM#5c!aeCK4`40mMiJ'Em!F")5r*)XmNqb3MYP``
#1!#rX-i%!Ac$q,!qr!8cVA!!(I!&ImCM%A3%!U!!CX!Fi1BqY!X)$!!Rbm00E'A
E%'FI$h&1m4$m`M"!2iYBN!!-E5eLmC!!!-D!4BCF"bHb-B$jd59AbCIbK4`L'`P
q`'-Mq*E%%)!-!!)J!LPaPNXUr$Y&J"2!bPB"l9b@Qkb9a`2G-j`*"`(5X-h6"-$
%4F!2NK4hY%ba&2!,c`!J!#m3&V2&Gmd4d#Y6`pD`Vk`8"mXQ34&!"9!"l0`4`'8
N!Eq%UU`1FaP33*Bl"53"d[![c#("!bNaF)`8C`%r5",3"!c'MM'A8DaGaFND64`
!K!"X-[8C!N!!c@qqV#r[bb#!Y[c[Q-Y5!,UF!)3!,-"LF#20!5Aa`'`$q-C',R'
mfSB!3%"LF)+Xb+jE)T[fKViZbd15aSB!rqpa#`+F!%2!#6!(qb[B-6Y9$TF"[c#
%k`E3XAq&KE`GGmFb,RAE!XLi(R2$("Z(!*!!!-0X*!r-VQ[0E#3c!#%!+@$H89m
RFaY3%MX!)B!X)!)@$84cE')dqm)H8JJJ$$3!4X!QflJS`E&*dT!!3PJ*+!!4!-"
ebEfX'q!,!mhN30B-@(6!Mr"EB3'%!2*!5S`-+m02!$1-$[p"-c%4%!,m`LD!#+!
!K-@4AKR3*"r$JSZY!-M5*#"!eC`df$a2!"4!,EHbJk86N!!C(bdLJ!`3&Pm"3F"
$@Ldr*-abVp`%A,N!FUr-cV'b8,&8h#[I0EF)+bX&5!(Qm95F'H[')J$4BpjpGLX
cJC3`L`"f!"j3+`a)*E%#)!*iS[m(N!"i1q-+#)!)`!MXYKqYVq3DL`#@`)FV!Q!
#a$0#h!BFcl8Z*N`+f!(MK,fL*V`"T()*)!,)!T0cjH`%A-iK''3JeL8"YmJp,!6
)bB@c1V`jDmK$X8i8&U-!9J#(*YVeX[k+&N!d$$9Z@3a`05HbMr)E!$9h!#)!2a!
@[mePm5r,1IH)ZGaR#3*B!H-cAJ`"G!!MJ!B3&Yr$9!$48-9@`6'!#k!rB`(3mUi
Xi2l#'F!)J!0-d)E3qGc%lX2[&3IG&([34F![,%&,!56d''"#%aCIF"+3!%*hd,a
bAM`#Z!%$G"#`kDE28J"PR!4S!Eeb4,cDMJ"jE9KXe!,%3,33684$a$l98+`*T-6
XR$GS%Jc44A6+-3+`!MUd+p"$rp$HB""p46r44R3&-!)3!q8bAMB%00&MG"BGRBd
!fJ!9l34BdGmb'He6P3!M!$Z3!#TM!9Ia&2!Y@`'pXMAX$&-"aa`lja4,ZNr!TD6
T"J'k-3NJ!4c,`,%2V3j$d3R!9'Cq8!&C3,F-4EFmQUXm5`+`!'%a1mG!6l5h51C
F*+r,EI3[r!+)(Q'a+@hNSY*)-D`m"2M3Xr)j[$PM!HVb4YY'Sm-Hc9K-%cm!*!!
Hd%TA`keb%)"+4m3L3(4'!L!#)N"+R$RAd9RdAD3*%-F+!!RJ#B6&a9Uhr"CrZ#5
!AD%JrlK6!$Y-!Y!#SS5Y-!DFSD6b"%!##!2PY'GhKMiNBTJG)$'r!HSa#F!0K-8
)G,rF)eB"'*a*B"PIaBhc!Te)El5pmXT"![!$cE4R@`)!!!1dH6c4cY,%@Z&-6*r
5,63`A!*J!-IbAC02Lh9`X83Y5"[6,E3$8!*)cXD`5TX-Jp43p!NJ!*3!3X!*8"b
A!%C!S1[KRU'e,%dL8QX"*XJQ1dqRdb@!f$X2RG1E,$`0@&$$el2`9J,i!Hdd8!h
(AJNZ#e&pJKJ!*B!N!,[fVXd[!A!#-!"PamaX9CZX(V"9hHTj`!(!#H!"k!!)J-M
-a,kaR1`%F!+S!"*ZpG%&9p"#XZ&F"Z!X,X!$F!,i!(ha&'$dT!&eXQ',rriIK1`
*d0%#&RSe!0*AVl+-FpUm!*`!J)Zm3Uq`,),FBTeN1GBV5mX#!G-!*`!IJ#XR(NM
!%D!&m0'VK)*i"@5j@3!9!$'2!#5!&e!#V!!SJ&fR!U3!I8"M[!FN!3Bb%k!%4(S
k!"r!!p5U6B!2N!!!l""'bap`![!#T33CB!DJ!9ZAl5brL!&a`"e!013"G-"pQpr
D!$9!$j!!!p`!,8"[d!@`F9X!Apd!Z,dR`"U`!h!"$SiEd!Di!,qeZC+iVYH*U`[
3!C`h+`!(X!(S'!6"!)!11JBp3,(,kpi!!)"rZc4%C`"fJ#eJ"pJ&3!!3XPQ(!K3
fh!&m!"BL#X!$%'[''UV'""MB+!!TE%jN2532$1!!m-PL@'Bd-5[@+!"ZF@%E24N
f!S!#1#q"$'"K"A`r`KX+`!M)e5aYi'Xdl"6pmPrp9JJ,S-!jkbH2XDY+'#YMcmm
"U5REbD)!ZX#I((A-!64efYaL-`0'YPL98pJ"hipI66+m&4%!#J!1'0P54j*YBhY
)+)!md!4-GBkXpbYeX('q8JHF'(#iK!95bakFSI*X#N!"(,9T0M)SCZrBCACeHmh
1!Gq`5F-!T!!``"!3jCB"1VCF(CfP!$k!RcdJ+E*@Xj)G!D3!8!!43##GcBMf%jX
f*`!TJ"J!B`HqUUd&N!!#X!'&pIG6fF,BjfaN@`4Xf4"!#N!)`0LNmFCDBdrC!8!
+B!QNabN!*S"UPmBGm+JpCHrCUJ#Z8!E)`N1eHM%(2!!T!#kJDar%TfeIE!6ifJe
!#S!-*%dd0DBpD&X$c,E9E'clfT3fX6*L)c!)3!T38+T(Q'bQQJ)mEMc&E-,*4J!
UJ!%`"B3"dSF8kpN"EQ6[L$X(k!!0J!U`@D(E(A!+)55A%MV!!e#kpFP44a2,*0I
8`kd+B!2)e"h`U3)(I-&"YLdV[)d,6IDP$'9AYNTfMq3&k0KNGSmY8`2CF6!R+`'
S!,DcM&e`%`B)GmDYfR)KM%!hI(!2PKS`('c+-J!UJ#GJFRr"drDYX(#c!Lrh)Ka
TSmeEGJ@J!J!$0AGLd!MIh&)fB,ea@`1'0Ui3D#ID0VB$S!+S!pq2P8"6rmlDV3U
J$i!53$I8[GUZ!(,(SqhK0Ye!GpV-!+`!NZh*(A22!ChX#Z!#B0P)0Y)pC5X!cN%
9B(4,(B+f"S$536C+klckEY[F[Lb6V-cQ!3[!#L$fRRG(GX9G"[6GGX!4!&MSf%'
!IP*Bp0e$m1%YG56HeYH[[3)i!SQ`-8L680`m0XUm!RJ#UAB+JAQAf9D6h+J"DpP
6YYA%#d3f0,AK,4K$aJl!#X!-K,iTNE4G+82'-1d+`!edf*ZX53[3UYl(YX`G!D`
!m%$8SA[6e'0h*mX##!$l#Ha0I2ID[MF,-(##`-G`,!b0'%*P3)16!V!`&!!,`!)
!5iM3G9Y+)!hXE,m-'5m!@#6h(Ai2aJ4ZpZd%*%hGGp)%F"[I`G%K&(jMfZ)hJ9X
"X!"f30+8#iRCJ'b52G3m!#a!r'(#Q!52GK8LfM%!,!!RX2p@-5$!&F"Yh`%*!!Z
J#MMDf!PRFJ#`!,4!%L$+FLB+!![!#cMDD$9RJJ#`!-J!&5"ZZlATUc4JclS"q#`
)S-qQXrdX1`[32J([l%#EC'6IlX!,cXrkXqdX$5l3aV-A3!ZJ!2MCI29ME5AF!E4
f92X'f#4-DbIE!SJ!Li("R3Fm*,!`9AFV3!(@&dcE!Y!!Lm(NNm8q*0CXP`%1*`h
b,0Jh"*!!YdS`r8h8@"mXl5LK`eA@"@i,%*XJ@Gph'6$AfL5H(C!!+26dVae!#m!
)I0PHE$KVp,d!SJ64N!$)"YkCp`,3!UJ#UMILVAM2!BUi,G!A1q+4YaBZ$!$LB6E
4G`FBIBUi0G#)2pk2Z#)Z$NcLS(JPANqi!b%JIX,,aY2cG#GV,A$"C#h,kK`(iXB
J%kF"q0"4!!aJ"F3!6B"Rk`+)!%2!'0Y[*l)1q+j!brE&(c,CE3'i!$U!&P"p--P
@3M&ZG4$JIM'p@Z#k!!pTVY#!2q!Q3IDK'03V*S&EZibc!8k!0Lk0Bl,1Z29"1%m
"EQd%i!)S!V#i[b+,Jl2'S#[Z#F6MU'd+%4V6ifI!!q!#b!+-J#l3#&3L2@*9c"C
Ac8`!FqX##!2fl"hJ"JM1ka%mL`jl,@14[i)%6#'VV3[!$BLYC1Y$`SrRidfi1bi
2i12c1*JpVhB%k3!,Xb+T!k01iSSU5!#SJJDJ[klAU)+qq!,!!f$!#`"6#Q5TL!C
3!J3"0B$9NTY`"1V!*m!4T!0'qH6a#YJY'`!Ui)D-)R)[!$!"Z&CQ%BP%"3!J6-$
5i!SB!F#aj+%51&4hF9DHL%$65i-h-!48!8EYdU!10!(la6DM%YJ$kl)6%%I9a!j
!DJGq"!#fJ,*'"@6PkBXi30f"&a-!!5!2)0C1310`id)"Ub`9N!"5UJ#VV"-`!R!
%"S!0m#e(J""(,,)%X-AE6-dK"hL$lGcE050bjKhGbNXADlNFJFc,bJUi6B(2ba(
-"Zbe5iiX1!Be`(Vpa,cQ!%!GX&i(!Ucj55+EjqB!!"+l0+!+Y2NXN!#i0MLmH6!
`R,qlVhN!N!!!*+i#3,UER*FN5d-!8!r-"XKB!)#2c@d"J$e!RA-%T+Zq"JN)!!V
!GLi!,#Mk'M%3!"3Ir`!b*J$F!NbjJ)$)THFKCL#NVi%#!8#lLi`0!0LA[XB,#!!
3`(Bq!*!!!dcjla$#`1F%`"2!P'-#irPfAJ#8!dajmES2E1F(`"l!P--$!S!&#jm
I!-3!8di'"!$j`(D1!$3!GSX'3!d)!!f!Kbi2-1A-3!"`2m(R#F!e%+,6!Y9#EYk
-$1GjhQZq!%JHd6QPB+0h6UP)#j!!Qc-!#&JUmZfqjJb!-$#F``#jH31Ja%ER-8#
56JS-jcY!EZi!m'DTb,ElQMX!3fad,J2NjJ$iF$i$F1PA4R6HlElQeZ&`AJ2NjK#
!&M#Ff`"SZLB`R0m!D,Si-*cM!,Pj"%!#$1GRl'XH!BJ#`hN1N!#E5`$L5R6H!rc
TM@PdcVQpjK*!,TL+@)q[q36`T%IR,d"Z2J'B!m1j%*!!Qe-!"9ed2J6NjKA!R4k
GClZ133@J$3cRPm)r-'8U!!dS4e#M6jN@dh#ZSdqC4Qb22K[!kLL-N!!qUpm&dX#
4IU[(fm0jNfkU!`!0!#d!TGrU$N"(9k86kq$!F,kPrqS2J+A$%AcTc$SZ-*b2k9-
Q)@ZQhqS3J"U`TQ2VUX#EMUfIk0%jRIkV4`"81NH3!+G2Q6PMRhkV5`$HM+#qVJm
Z9pqkcJ`-jickP$N"#1Z3!2UY2J&i#p'jTIkD8`""1NH`UErQ&8#j(J#!kJ"!"D!
1$1G9`+eZ!B`#`hPNm+YI!,&$+S*86HbK`(#HldhX!(Td2JAFkKK!#M#FBjHr1JE
!#!cRB9r*cUqR)K6[Vmi"I)R4ZFAlQRX!PX"`RJ6FkKr!FKkGAlZ[H3L!LU3L5d"
Z(J)Bjp%j%b#dZd[4q4(jUiX!lX"`$JANjLL!8*k+2!&31k8HR8F"YhS+8!%-je,
!VDi#@!2$149`Ukm!d`$$lV!V!K&lEYjr4HFAZf0`!5!#'V[D[J`-jarlDii"C#L
T#-RZ''!!96P(d!6NjKK!KKkGTqalHcF`R,IXMJ%()&r%l,Qj"b"h4HFhqmc1SiY
b3RXA-*`(l6fl*c#F'qdp1i1HY1IQ)J!ei,4$lD&6G%ke[qBS3$)`R'2YU$[M%*e
hlDqj#Y!,K1fjq3UJ9dAR[F#YhJ+N!X-j[rZDZ`#BBR6q#q6Q,N!X-*cV&Drj#a#
E4qI"3'lq!Z3#`lN`N!#E(il(qDd1!a$YU3KblKM-!*[!F$kG[qBd3&+H[HIQ03$
%RVLUlZN&!&!$(!2VY65!aUV[km"kVESV!+'6$E#8,`e@L0i"!1J!BJ(q6J$FkMT
!-C!!Z0)""m#Y(J58lIMl"R#V*`(T&#+D!0cU83$-lKM3!4h!VEi&e&(i1`0`UjF
"Mm!!$`,FkR-!G$l"PqLr1L#!1q([)F#Y(JPX!1YeIl8BlHp$`(VYGId$kd-Sd-%
cjqql+T!!",$AYrSX-!R)m!!!#M!1i3+d1E9N+UBF)N!)X&kRX[Tc1T3$V0I)@!f
3!()i!lkjBj!!!0c$6-#&IF8E3PNm+M%(E2&M3"I2SB(aBRaK33$!`iR"!&"B$`$
llaY`!2cN0B!1I$3!`EF!!!:
SHAR_EOF
if test 43640 -ne "`wc -c < 'Hqx.3'`"
then
	echo shar: error transmitting "'Hqx.3'" '(should have been 43640 characters)'
fi
if test -f Hqx.1 -a -f Hqx.2 -a -f Hqx.3
then
	echo shar: assembling "'MacLayers.Hqx'" '(131047 characters)'
	if test -f 'MacLayers.Hqx'
	then
		echo shar: will not over-write existing file "'MacLayers.Hqx'"
	else
		cat Hqx.1 Hqx.2 Hqx.3 >MacLayers.Hqx
		if test 131047 -ne "`wc -c < 'MacLayers.Hqx'`"
		then
			echo shar: error transmitting "'MacLayers.Hqx'" '(should have been 131047 characters)'
		else
			rm -f Hqx.1 Hqx.2 Hqx.3
		fi
	fi
fi
fi # end of overwriting check
#	End of shell archive
exit 0
--- end of part 6 ---