[comp.sources.amiga] v89i169: cachecard - control expansion card caching

page%swap@Sun.COM (Bob Page) (07/14/89)

Submitted-by: daveh@cbmvax.cbm.commodore.com (Dave Haynie)
Posting-number: Volume 89, Issue 169
Archive-name: hardware/cachecard.1

This program is an accessory to SetCPU for use with A2620s or 68030 systems.
It modifies the MMU table set up by SetCPU to selectively control caching
for each expansion card.  It's also an example of how an accessory program
in general can track down and modify the SetCPU MMU table without having to
read all kinds of MMU registers and figure it out for yourself.

[uuencoded executable included.  ..bob]

# This is a shell archive.
# Remove anything above and including the cut line.
# Then run the rest of the file through 'sh'.
# Unpacked files will be owned by you and have default permissions.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar: SHell ARchive
# Run the following text through 'sh' to create:
#	README
#	cachecard.c
#	cachecard.h
#	030Stuff.a
#	makefile
#	CacheCard.uu
# This is archive 1 of a 1-part kit.
# This archive created: Thu Jul 13 10:41:48 1989
echo "extracting README"
sed 's/^X//' << \SHAR_EOF > README
X
X
X
X			CacheCard V1.00
X
X		Copyright 1989 by Dave Haynie
X
XCacheCard may be distributed in any physical or electronic form on a not for
Xprofit basis (including pay BBS systems that charge for connect time but not
Xfor the actual software downloads, and disk collections such as the Fred
XFish Freely Redistributable Amiga Disk Library).  Any commercial concerns
Xmay negotiate the distribution of CacheCard and SetCPU with the author.
X
X
XWHAT IT IS?
X
X	CacheCard is an accessory program to be used with the MMU setup
Xcreated by SetCPU V1.5.  It's used to control caching by the 68020 or
X68030 of a particular expansion card.  In most cases, there's no trouble
Xwith instruction caching, but the 68030's data cache can get you into
Xtrouble with shared memory devices like Bridge Cards or possibly some
XI/O devices.  While most 68030 implementations have some hardware level
Xcontrol to avoid caching of chip RAM, motherboard I/O, and even the
Xexpansion bus I/O space, it's impossible for such hardware to cover every
Xpossibility.  Using CacheCard, the cache can be selectively disabled for
Xany card in software.
X
XHOW DO I USE IT
X
X	There are two forms of the command.  Simply typing "CacheCard" at
Xa shell prompt will display each of the expansion cards in the system by
X(manufacturer,product) code.  My system looks like this:
X
X	3> CacheCard
X	CacheCard V1.00 Copyright 1989 by Dave Haynie
X	DEVICE             ADDRESS     LENGTH    CACHE
X	( 202,  51)        200000      400000    ENABLED
X	( 202,   3)        e90000       10000    ENABLED
X	( 202,  45)        ea0000       10000    ENABLED
X	( 202,   a)        600000      200000    ENABLED
X	( 201,   1)        800000       80000    DISABLED
X
XHere I have previously run CacheCard to disable the cache for the device
X(201,1), which is the Commodore A2286 Bridge Card.  In order to change
Xthe cachability, you'd invoke CacheCard as:
X
X	3> CacheCard ENABLE 201 1
X
Xwhich would turn the cache back on for the Bridge Card, or:
X
X	3> CacheCard DISABLE 201 1
X
Xwhich will shut it back down again.  Note that the actual caches may not
Xreally be on; that's a function of SetCPU.  If a cache is listed as being
XDISABLED for a card, you can be certain that it's disabled, regardless of
Xthe cache setting.  Note also that even if a card is listed as enabled, it
Xcould still be disabled by hardware, as in the case of the e90000 and 
Xea0000 cards above in conjunction with the Amiga A2630.  All numbers are
Xin hexidecimal.
X
X
X
X			-Dave Haynie
X			 7/7/89
X
X			 Bix: Hazy	PLINK: D-Dave H
X
X			 New Land Address:
X
X			 284 Memorial Avenue
X			 Gibbstown, NJ 08027				 
X				
SHAR_EOF
echo "extracting cachecard.c"
sed 's/^X//' << \SHAR_EOF > cachecard.c
X/*
X	CacheCard V1.0
X	Copyright 1989 by Dave Haynie
X
X	MAIN PROGRAM
X
X	This program is a simple cache manager for use with SetCPU V1.5.
X	It allows the cachability of various autoconfig cards to be
X	adjusted.
X	
X	The current MMU table used by SetCPU establishes 128K pages using
X	the short form of the early termination descriptor.  Except for
X	any CardROMs that are translated, the table is only 1 level.  In
X	systems with more than 16meg of address space, the MMU table will
X	be accordingly adjusted, though it's unlikely that any program
X	will need adjust table parameters beyond the first 16 megabytes.
X*/
X
X#include "cachecard.h"
X
X#define max(a,b)	((a>b)?a:b)
X#define PAGESIZE	0x00020000L
X
Xstruct ExpansionBase *ExpansionBase = NULL;	/* The expansion library */
Xstruct systag *tag;				/* The SetCPU system tag */
X
X/* ====================================================================== */
X
X/* A simple string comparison. */
X
XBOOL striequ(s1,s2)
Xchar *s1,*s2;
X{
X   BOOL aok = FALSE;
X   
X   while (*s1 && *s2 && (aok = (*s1++ & 0xdf) == (*s2++ & 0xdf)));
X   return (BOOL) (!*s1 && !*s2 && aok);
X}
X
X/* This routine gets the system tag from the patched system, if it's
X   there.  This tag is stored in an invalid table entry that's within the
X   physical ROM image.  If the MMU isn't on, I assume there's no system
X   tag. */
X   
Xstruct systag *GetSysTag() {
X   ULONG i, myCRP[2], *table = NULL;
X
X   if (!(GetTC() & TC_ENB)) return NULL;
X
X   GetCRP(myCRP);
X   table = (ULONG *)myCRP[1];
X   for (i = 0; i < 4096; ++i)
X      if ((table[i] & PD_DT_TYPE) == PD_DT_INVALID && IV_ADDR(table[i]))
X         return (struct systag *)IV_ADDR(table[i]);
X
X   return NULL;
X}
X
X/* This function prints a list of active devices and their associated
X   cache status. */
X   
Xvoid PrintDevs() {
X   struct ConfigDev *cd = NULL;
X   ULONG page;
X
X   if (!(cd = FindConfigDev(NULL,-1L,-1L))) {
X      printf("No Amiga Devices present\n");
X      return;
X   }
X
X   printf("DEVICE             ADDRESS     LENGTH    CACHE\n");
X
X   do {
X      printf("(%4x,%4x)      ",cd->cd_Rom.er_Manufacturer,cd->cd_Rom.er_Product);
X      printf("%8lx    %8lx    ",cd->cd_BoardAddr,cd->cd_BoardSize);
X      
X      page = (ULONG)cd->cd_BoardAddr/PAGESIZE;
X      if (tag->maintable[page] & PD_CI)
X         printf("DISABLED\n");
X      else
X         printf("ENABLED\n");
X   
X   } while (cd = FindConfigDev(cd,-1L,-1L));
X}
X
X
X/* The main thing */
X
Xint main(argc,argv)
Xint argc;
Xchar *argv[];
X{
X   ULONG mmu = 0, page, size, manuf, prod;
X   BOOL ever;
X   struct ConfigDev *cd;
X   
X   printf("\23333mCacheCard V%1.2f Copyright 1989 by Dave Haynie\2330m\n",
X             ((float)PROGRAM_VERSION)/100.0);
X
X   if (argc == 2 && argv[1][0] == '?') {
X      printf("Usage: CacheCard [ENABLE|DISABLE manuf# prod#]\n");
X      exit(0);
X   }
X   if ((mmu = GetMMUType()) != 68851 && mmu != 68030) {
X      printf("Error: System does not contain an MMU\n");
X      exit(10);
X   }
X   if (!(tag = GetSysTag())) {
X      printf("Error: SetCPU FASTROM or KICKROM must be installed\n");
X      exit(10);
X   }
X   if (tag->tagsize >= SizeOf(struct systag) && tag->tablerev != TABLE_REV) {
X      printf("Error: Version of SetCPU is incompatible, use newer CacheCard program\n");
X      exit(0);
X   }
X   if (!(ExpansionBase = (struct ExpansionBase *)OpenLibrary("expansion.library",33L))) {
X      printf("Error: Can't find \"expansion.library\"\n");
X      exit(10);
X   }
X
X   if (argc > 1) {
X      sscanf(argv[2],"%lx",&manuf);
X      sscanf(argv[3],"%lx",&prod);
X   
X      if (striequ(argv[1],"DISABLE"))
X         ever = FALSE;
X      else if (striequ(argv[1],"ENABLE"))
X         ever = TRUE;
X      else {
X         printf("Error: Illegal option\n");
X         exit(10);
X      }
X
X      if (!(cd = FindConfigDev(NULL,manuf,prod))) {
X         printf("Error: Device (%lx,%lx) Not Found\n",manuf,prod);
X         CloseLibrary(ExpansionBase);
X         exit(10);
X      }
X      
X      page = (ULONG)cd->cd_BoardAddr/PAGESIZE;
X      size = max((ULONG)cd->cd_BoardSize/PAGESIZE,1);
X
X      while (size-- && page < tag->tablesize)
X         if ((tag->maintable[page] & PD_DT_TYPE) != PD_DT_INVALID) {
X            if (ever)
X               tag->maintable[page++] &= ~PD_CI;
X            else 
X               tag->maintable[page++] |=  PD_CI;
X         }
X   }
X   
X   PrintDevs();
X
X   CloseLibrary(ExpansionBase);
X   exit(0);
X}
SHAR_EOF
echo "extracting cachecard.h"
sed 's/^X//' << \SHAR_EOF > cachecard.h
X/*
X	CacheCard V1.0
X	Copyright 1989 by Dave Haynie
X
X	MAIN HEADER FILE
X*/
X
X
X#define PROGRAM_VERSION	100
X
X#include <exec/types.h>
X#include <exec/execbase.h>
X#include <exec/nodes.h>
X#include <exec/lists.h>
X#include <exec/memory.h>
X#include <libraries/expansionbase.h>
X#include <libraries/configregs.h>
X#include <libraries/configvars.h>
X#include <libraries/dosextens.h>
X#include <functions.h>
X#include <stdio.h>
X#include <ctype.h>
X
X/* ====================================================================== */
X
X/* Define important bits used in various MMU registers. */
X
X/* Here are the TC definitions.  The TC register is 32 bits long. */
X
X#define	TC_ENB		(1L<<31)		/* Enable the MMU */
X#define	TC_SRE		(1L<<25)		/* For separate Supervisor */
X#define	TC_FCL		(1L<<24)		/* Use function codes? */
X#define	TC_PS(x)	((ULONG)((x)&0x0f)<<20)	/* Page size */
X#define TC_IS(x)	((ULONG)((x)&0x0f)<<16)	/* Logical shift */
X#define	TC_TIA(x)	((ULONG)((x)&0x0f)<<12)	/* Table indices */
X#define	TC_TIB(x)	((ULONG)((x)&0x0f)<<8)
X#define TC_TIC(x)	((ULONG)((x)&0x0f)<<4)
X#define	TC_TID(x)	((ULONG)((x)&0x0f)<<0)
X
X/* Here are the page descriptor definitions, for short desctriptors only,
X   since that's all I'm using at this point. */
X   
X#define	PD_ADDR(x)	((ULONG)(x)&~0x0fL)	/* Translated Address */
X#define IV_ADDR(x)	((ULONG)(x)&~0x03L)	/* Invalid unused field */
X#define PD_CI		(1L<<6)			/* Cache inhibit */
X#define	PD_WP		(1L<<2)			/* Write protect it! */
X#define PD_DT_TYPE	0x03			/* Page descriptor type */
X#define PD_DT_INVALID	0x00			/* Invalid root descriptor */
X#define	PD_DT_PAGE	0x01			/* Fixed offset, auto-genned */
X#define PD_DT_V4BYTE	0x02			/* Short root descriptor */
X#define	PD_DT_V8BYTE	0x03			/* Long root descriptor */
X
X/* This is needed for identification of bogus systems that test positive
X   for MMUs. */
X
X#define SizeOf(x)	((ULONG)sizeof(x))
X
X/* ====================================================================== */
X
X/* From the 030STUFF.A module */
X
Xextern void	 		GetCRP();
Xextern ULONG 			GetTC(),
X				GetMMUType();
X
X/* ====================================================================== */
X
X/* This section describes the system tag structure, where I stick all the
X   information that I like to keep around.  */
X   
X#define ROM_NOP			0x0000	/* No ROM operation called for */
X#define ROM_FAST		0x0002	/* Normally installed FASTROM image */
X#define ROM_KICK		0x0003	/* Installed as a KICK image */
X#define ROM_FKICK		0x0004	/* A KICK image made into a FAST image */
X
X#define TABLE_REV		1	/* MMU table compatibility revision */
X 
X/* This is the special descriptor stored by SetCPU to help it find itself
X   and figure out just what it's done.  The GetSysTag() routine knows how
X   to find this structure on a properly SetCPU-ed system.  Anyone making
X   modifications to this program and expecting to work with SetCPU now
X   and in the future must check the "tagsize", "progver" and "tablerev" 
X   fields to ensure they don't make mistakes.  The "tagsize" field tell you
X   how large the tag is; it'll probably grow in future versions.  The
X   "progver" identifies the version of SetCPU that built the tables; the
X   "progver" field will be 150 for SetCPU 1.50.  The "tablerev" field is
X   indicates the revision level of the MMU table.  So far, the table is
X   revision 1; all version of SetCPU use this type of table (check the
X   tagsize first; currenly released version of SetCPU, like V1.50, have a
X   smaller systag).  */
X
Xstruct systag {
X   ULONG 		tagsize;	/* Size of this tag */
X   ULONG 		progver;	/* The program version */
X   ULONG		*maintable;	/* The main ROM table */
X   ULONG		*romimage;	/* The main ROM image */
X   UWORD 		romtype;	/* Type of MMU ROM */
X   UWORD 		patches;	/* The number of other patches applied */
X   struct MemChunk 	*patchlist;	/* List of installed patches */
X   struct ExpROMData	*devs;		/* Translated device ROMs */
X   ULONG		TC;		/* Precomputed TC used for KICK. */
X   ULONG		CRP[2];		/* Precomputed CRP used for KICK. */
X   UWORD		config;		/* Configuration status. */
X   ULONG		BerrSize;	/* Size of bus error handler. */
X   char			*OldBerr;	/* The old BERR routine. */
X   char			*BerrHandler;	/* My BERR routine. */
X   short		wrapup;		/* Upper address wrap bound. */
X   short		wrapdown;	/* Lower address wrap bound. */
X   ULONG		tablesize;	/* Main table size. */
X   char			*ResetCode;	/* Actual reset routine */
X   ULONG		tablerev;	/* Revision of table structure */
X};
X
Xextern struct systag *GetSysTag();
X
SHAR_EOF
echo "extracting 030Stuff.a"
sed 's/^X//' << \SHAR_EOF > 030Stuff.a
X;======================================================================
X;
X;	CacheCard V1.0
X;	Copyright 1989 by Dave Haynie
X;
X;	68030 Assembly Function Module
X;
X;	This module contains MMU access functions.
X;
X;======================================================================
X
X;======================================================================
X;
X;	Macros & constants used herein...
X;
X;======================================================================
X
XCALLSYS macro   *
X	jsr     LVO\1(A6)
X	endm
X
XAFB_68030	EQU	2
X
XATNFLGS		EQU	$129
X
XLVOSupervisor	EQU	-30
XLVOFindTask	EQU	-294
X
X;======================================================================
X;
X;	Need just a little more stuff
X;
X;======================================================================
X
X	NOLIST
X	include "exec/execbase.i"
X	include "exec/tasks.i"
X	LIST
X
X	machine mc68020
X		mc68881
X	cseg
X
X;**********************************************************************
X;
X;	This section contains functions that identify and operate on
X;	MMU things.  Unfortunately, there aren't any MMU op-codes in
X;	the Manx assembler yet, so I have to fudge them here.
X;
X;**********************************************************************
X
X	public _GetMMUType	; Returns the type of MMU
X	public _GetCRP		; Gets MMU CRP register
X	public _GetTC		; Gets MMU TC register
X
X;======================================================================
X;
X;	This function returns 0L if the system contains no MMU, 
X;	68851L if the system does contain an 68851, or 68030L if the
X;	system contains a 68030.
X;
X;	This routine seems to lock up on at least some CSA 68020 
X;	boards, though it runs just fine on those from Ronin and 
X;	Commodore, as well as all 68030 boards it's been tested on.
X;
X;	ULONG GetMMUType()
X;
X;======================================================================
X
X_GetMMUType:
X	move.l	4,a6			; Get ExecBase
X	movem.l	a3/a4/a5,-(sp)		; Save this stuff
X	move.l	#0,a1	
X	CALLSYS	FindTask		; Call FindTask(0L)
X	move.l	d0,a3
X
X	move.l	TC_TRAPCODE(a3),a4	; Change the exception vector
X	move.l	#2$,TC_TRAPCODE(a3)
X	
X	move.l	#-1,d0			; Try to detect undecode FPU
X	subq.l	#4,sp			; Let's try an MMU instruction
X	dc.w	$f017			; Slimey PMOVE tc,(sp)
X	dc.w	$4200
X	cmpi	#0,d0			; Any MMU here?
X	beq	1$
X	cmpi	#-1,d0			; Hardware bugs?
X	beq	1$
X	btst.b	#AFB_68030,ATNFLGS(a6)	; Does the OS think an '030 is here?
X	beq	1$
X	move.l	#68030,d0
X
X1$
X	addq.l	#4,sp			; Return that local
X	move.l	a4,TC_TRAPCODE(a3)	; Reset exception stuff
X	movem.l	(sp)+,a3/a4/a5		; and return the registers
X	rts
X
X	; This is the exception code.  No matter what machine we're on,
X	; we get an exception.  If the MMU's in place, we should get a
X	; privilige violation; if not, an F-Line emulation exception.
X2$
X	move.l	(sp)+,d0		; Get Amiga supplied exception #
X	cmpi	#11,d0			; Is it an F-Line?
X	beq	3$			; If so, go to the fail routine
X	move.l	#68851,d0		; We have MMU
X	addq.l	#4,2(sp)		; Skip the MMU instruction
X	rte
X3$
X	moveq.l	#0,d0			; It dinna woik,
X	addq.l	#4,2(sp)		; Skip the MMU instruction
X	rte
X
X;======================================================================
X;
X;	This function returns the MMU CRP register.  It assumes a 68020 
X;	system with MMU, or a 68030 based system (eg, test for MMU before
X;	you call this, or you wind up in The Guru Zone).  Note that the
X;	CRP register is two longwords long.
X;
X;	void GetCRP(ULONG *)
X;
X;======================================================================
X
X_GetCRP:
X	move.l	4(sp),a0		; Pointer to the CRP storage area
X	move.l	4,a6			; Get ExecBase
X	move.l	a5,-(sp)
X	lea	2$,a5			; Get the start of the supervisor code
X	CALLSYS	Supervisor
X	move.l	(sp)+,a5
X	rts
X2$
X	dc.w	$f010			; PMOVE CRP,(a0)
X	dc.w	$4e00
X	rte
X
X;======================================================================
X;
X;	This function returns the MMU TC register.  It assumes a 68020 
X;	system with MMU, or a 68030 based system (eg, test for MMU before
X;	you call this, or you wind up in The Guru Zone).  
X;
X;	ULONG GetTC()
X;
X;======================================================================
X
X_GetTC:
X	move.l	4,a6			; Get ExecBase
X	move.l	a5,-(sp)
X	subq.l	#4,sp			; Make a place to dump TC
X	move.l	sp,a0
X	lea	2$,a5			; Get the start of the supervisor code
X	CALLSYS	Supervisor
X	move.l	(sp),d0			; Here's the result
X	addq.l	#4,sp
X	move.l	(sp)+,a5
X	rts
X2$
X	dc.w	$f010			; PMOVE TC,(a0)
X	dc.w	$4200
X	rte
X
X	end
X
SHAR_EOF
echo "extracting makefile"
sed 's/^X//' << \SHAR_EOF > makefile
X######################################################################
X#
X# Makefile for CacheCard V1.0
X#
X######################################################################
X
X.a.o:
X	as -o $@ $*.a
X
XCFLAGS	= +x5
XLFLAGS	= -lm -lc
X
XCOBJS	= cachecard.o
XOBJS	= 030stuff.o $(COBJS)
X
XCacheCard:	$(OBJS) cachecard.o
X		ln $(OBJS) -o CacheCard $(LFLAGS)
X
X$(COBJS):	cachecard.h
X
SHAR_EOF
echo "extracting CacheCard.uu"
sed 's/^X//' << \SHAR_EOF > CacheCard.uu
X
Xbegin 644 CacheCard
XM```#\P`````````#``````````(```B\````S`````$```/I```(O$[Z%D@L.
XM>``$2.<`'")\`````$ZN_MHF0"AK`#(G?````%(`,G#_68_P%T(`#$```&<4R
XM#$#__V<.""X``@$I9P8@/``!";Y8CR=,`#),WS@`3G4@'PQ```MG#"`\``$,6
XM\UBO``).<W``6*\``DYS(&\`!"QX``0O#4OZ``I.KO_B*E].=?`03@!.<RQX9
XM``0O#5F/($]+^@`.3J[_XB`76(\J7TYU\!!"`$YS3E7__D)M__X@;0`(2A!G6
XM/"!M``Q*$&<T(&T`"%*M``@0$$B`P'P`WR!M``Q2K0`,$A!(@<)\`-^P068(T
XM.WP``?_^8`1";?_^9P)@O"!M``A*$&82(&T`#$H09@I*;?_^9P1P`6`"<`!.$
XM74YU3E7_\$*M__!.NO]J"```'V8&<`!.74YU2&W_]$ZZ_SI83RMM__C_\$*MO
XM__P@+?_\Y8`@;?_P(C`(`,*\`````V8N("W__.6`(&W_\"(P"`#"O/____QGT
XM&"`M__SE@"!M__`B`"`P&`#`O/____Q@I%*M__P,K0``$`#__&6N<`!@DDY5:
XM__A"K?_\2'C__TAX__]"ITZZ(3)/[P`,*T#__&8.2'H`K$ZZ!9I83TY=3G5(W
XM>@"X3KH%C%A/(&W__'``$"@`$3\`(&W__#\H`!1(>@#*3KH%;E!/(&W__"\HZ
XM`"0@;?_\+R@`($AZ`,!.N@543^\`#"!M__P@*``@<A'BJ"M`__@@+?_XY8`@X
XM;(+B(F@`"`@Q``8(`V<,2'H`GTZZ!2)83V`*2'H`G4ZZ!1983TAX__](>/__E
XM+RW__$ZZ((I/[P`,*T#__&8`_W!@`/]>3F\@06UI9V$@1&5V:6-E<R!P<F5S$
XM96YT"@!$159)0T4@("`@("`@("`@("`@041$4D534R`@("`@3$5.1U1(("`@I
XM($-!0TA%"@`H)31X+"4T>"D@("`@("``)3AL>"`@("`E.&QX("`@(`!$25-!`
XM0DQ%1`H`14Y!0DQ%1`H`3E7_YD*M__Q"IR\\@```04AZ`EY.N@1>3^\`#`QML
XM``(`"&8@(&T`"B)H``0,$0`_9A)(>@)S3KH$/%A/0F=.NAT@5$].NOS:*T#_(
XM_+"\``$,\V<>#*T``0F^__QG%$AZ`G=.N@006$\_/``*3KH<\E1/3KK]OBE`,
XM@N)F%$AZ`H!.N@/R6$\_/``*3KH<U%1/(&R"X@R0````1F4@(&R"X@RH````A
XM`0!"9Q)(>@*&3KH#Q%A/0F=.NARH5$](>``A2'H"MTZZ'N103RE`@`)F%$AZ`
XM`KE.N@.>6$\_/``*3KH<@%1/#&T``0`(;P`!:DAM__!(>@*^(&T`"B\H``A.=
XMN@,$3^\`#$AM_^Q(>@*J(&T`"B\H``Q.N@+L3^\`#$AZ`IH@;0`*+R@`!$ZZK
XM_)I03TI`9P9";?_J8#)(>@*&(&T`"B\H``1.NOQ^4$]*0&<(.WP``?_J8!1()
XM>@)O3KH#%EA//SP`"DZZ&_A43R\M_^PO+?_P0J=.NAZ"3^\`#"M`_^9F*"\M=
XM_^PO+?_P2'H"4DZZ`N)/[P`,+RR``DZZ';Y83S\\``I.NANX5$\@;?_F("@`F
XM('(1XJ@K0/_X(&W_YB`H`"1R$>*HL+P````!8PX@;?_F("@`)'(1XJA@`G`!6
XM*T#_]"`M__13K?_T2H!G9B!L@N(@+?_XL*@`.F18("W_^.6`(&R"XB)H``@BW
XM,0@`PKP````#9SQ*;?_J9QP@+?_X4JW_^.6`(&R"XB)H``C3P`BI``8``V`:H
XM("W_^%*M__CE@"!L@N(B:``(T\`(Z0`&``-@CDZZ_%PO+(`"3KH<_%A/0F=.7
XMNAKX5$].74YUFS,S;4-A8VAE0V%R9"!6)3$N,F8@0V]P>7)I9VAT(#$Y.#D@?
XM8GD@1&%V92!(87EN:66;,&T*`%5S86=E.B!#86-H94-A<F0@6T5.04),17Q$Z
XM25-!0DQ%(&UA;G5F(R!P<F]D(UT*`$5R<F]R.B!3>7-T96T@9&]E<R!N;W0@N
XM8V]N=&%I;B!A;B!-354*`$5R<F]R.B!3971#4%4@1D%35%)/32!O<B!+24-+K
XM4D]-(&UU<W0@8F4@:6YS=&%L;&5D"@!%<G)O<CH@5F5R<VEO;B!O9B!3971#V
XM4%4@:7,@:6YC;VUP871I8FQE+"!U<V4@;F5W97(@0V%C:&5#87)D('!R;V=R*
XM86T*`&5X<&%N<VEO;BYL:6)R87)Y`$5R<F]R.B!#86XG="!F:6YD(")E>'!A2
XM;G-I;VXN;&EB<F%R>2(*`"5L>``E;'@`1$E304),10!%3D%"3$4`17)R;W(ZG
XM($EL;&5G86P@;W!T:6]N"@!%<G)O<CH@1&5V:6-E("@E;'@L)6QX*2!.;W0@Q
XM1F]U;F0*``!.50``*6T`"(+20BR"UDAM`!`O+0`,2'H`#DZZ!(Q/[P`,3EU.Y
XM=4Y5``!*;0`(9B0@;(+22A!G%"!L@M)2K(+2$!!(@,!\`/].74YU&7P``8+6'
XM8!A*+(+69A)3K(+2(&R"TA`02(#`?`#_8-QP_V#83E4``$AM``PO+0`(2'H45
XM*DZZ`)A/[P`,3EU.=4Y5``!(YP@@)&T`#@QM``0`$F8((&T`""@08!Q*;0`,D
XM;PP@;0`(<``P$"@`8`H@;0`(,!!(P"@`0FT`$DIM``QL$$1M``Q*A&P(1(0[9
XM?``!`!(R+0`,2,$@!$ZZ$UI![(`&4XH4L```,BT`#$C!(`1.NA-0*`!FVDIM2
XM`!)G!E.*%+P`+2`*3-\$$$Y=3G5.5?\B2.<(,"1M``@F;0`,0FW_^BMM`!#_B
XM_"!+4HL0$$B`.`!G``-@N'P`)68``SY"+?\P.WP``?_X.WP`(/_V.WPG$/_TH
XM($M2BQ`02(`X`+!\`"UF#D)M__@@2U*+$!!(@#@`N'P`,&80.WP`,/_V($M2V
XMBQ`02(`X`+A\`"IF&"!M__Q4K?_\.U#_\B!+4HL0$$B`.`!@,D)M__)@'#`MZ
XM__+!_``*T$20?``P.T#_\B!+4HL0$$B`.``P!%)`0>R`C@@P``(``&;4N'P`%
XM+F9:($M2BQ`02(`X`+!\`"IF&"!M__Q4K?_\.U#_]"!+4HL0$$B`.`!@,D)M5
XM__1@'#`M__3!_``*T$20?``P.T#_]"!+4HL0$$B`.``P!%)`0>R`C@@P``(`G
XM`&;4.WP``O_PN'P`;&82($M2BQ`02(`X`#M\``3_\&`0N'P`:&8*($M2BQ`0P
XM2(`X`#`$2,!@``#\.WP`"/_N8!8[?``*_^Y@#CM\`!#_[F`&.WS_]O_N/RW_T
XM\$AM_S`_+?_N+RW__$ZZ_>(K0/_J,"W_\$C`T:W__$_O``Q@``#,(&W__%BM/
XM__PB4"M)_^H@"4H99OR3P%.).TG_\&```+@P!)!\`&4_``QM)Q#_]&8$<`9@Y
XM!#`M__0_`$AM_R(@;?_\4*W__$*G+Q!.N@C$0>W_(BM(_^H@"$H89OR1P%.(H
XM.TC_\#M\`,C_]$_O`!!@9B!M__Q4K?_\.!!![?\O*TC_ZA"$8$3_J/\(_UC_X
XM6/]8_[+_LO^R_[+_LO^R_[+^\/^R_[+_LO\X_[+^^/^R_[+_`)"\````8["\A
XM````%F2ZXX`P.P#"3OL``$'M_S"1[?_J.TC_\#`M__"P;?_T;P8[;?_T__!*H
XM;?_X9V@@;?_J#!``+6<*(&W_Z@P0`"MF+@QM`##_]F8F4VW_\B!M_^I2K?_JM
XM$!!(@#\`3I*P?/__5$]F"G#_3-\,$$Y=3G5@%C\M__9.DK!\__]43V8$</]@E
XMY%)M__HP+?_R4VW_\K!M__!NW$)M_^Y@("!M_^I2K?_J$!!(@#\`3I*P?/__<
XM5$]F!'#_8+!2;?_N(&W_ZDH09PHP+?_NL&W_]&W.,"W_[M%M__I*;?_X9BA@K
XM&#\\`"!.DK!\__]43V8&</]@`/]X4FW_^C`M__)3;?_RL&W_\&[:8!8_!$Z2V
XML'S__U1/9@9P_V``_U)2;?_Z8`#\EC`M__I@`/]"3E7_<DCG#S`D;0`,)FT`L
XM$'H`*6T`"(+:($I2BA`02(`X`&<``UBX?``E9@`#&$(M__M"+?_Z0BW_^3E\S
XM`'^"V`P2`"IF"%**&WP``?_[$!)(@%)`0>R`C@@P``(``&<T0FR"V!`22(`RM
XM+(+8P_P`"M!!D'P`,#E`@MA2BA`22(!20$'L@(X(,``"``!FUAM\``'_^0P2F
XM`&QF"!M\``'_^E**($I2BA`02(`^`$C`8``"*G@E8``"IAM\`/__^F`&&WP`X
XM`?_Z>`Q\"F`6&WP``?_Z>`!\$&`*&WP``?_Z>`Y\"$ZZ`L9*0&8``I)(;?_\8
XM/P8P!$C`0>R`+]"(+P`P!$C`0>R`&-"(+P!.N@.>2D!/[P`.9P`"9DHM__MF1
XM,$HM__IL#"!+6(LB4#*M__Y@'$HM__IO#"!+6(LB4"*M__Q@"B!+6(LB4#*MN
XM__Y216```?(;?``!__I.N@)02D!F``(<2&W_<DZZ`GQ*0%A/9@`"#$HM__MF(
XM+DHM__IG%$AM_W).N@08($M8BR)0(H!83V`22&W_<DZZ!`0@2UB+(E`B@%A/=
XM4D5@``&:0BW_^@P2`%YG!@P2`'YF"%**&WP``?_Z0>W_<BM(__1@"B!M__12;
XMK?_T$(0@2E**$!!(@#@`L'P`76;F(&W_]$(08!P;?``!__H;?``@_W(;?``)6
XM_W,;?``*_W1"+?]U3KH!GDI`9@`!:DHM__MF""!+6(LK4/_T0BW_^3`L@MA3V
XM;(+82D!G;D)G(&R"VDZ0.`"P?/__5$]G7$HM__IG&#\$2&W_<DZZ"$Y*@%Q/'
XM9P1P`6`"<`!@%C\$2&W_<DZZ"#9*@%Q/9@1P`6`"<`!G#C\\``$@;(+:3I!4`
XM3V`82BW_^V8*(&W_]%*M__00A!M\``'_^6"&2BW_^6<``-9*+?_[9@Z^?`!C2
XM9P8@;?_T0A!216```(1*+?_Y9@8Y?``!@MA"+?]R&WP``?_Z8`#_/)"\````]
XM)6<`_="0O````!]G`/W44X!G`/Y@4X!G`/Y:D+P````)9P#]UI"\````"6<`Q
XM_<!7@&<`_IA1@&>H4X!G`/VJ4X!G`/XV4X!G`/XP58!G`/V*7X!G`/VJ68!G8
XM`/ZT6X!G`/V28#0P!%)`0>R`C@@P``0``&<(851*0&8B8!Q"9R!L@MI.D+!$I
XM5$]G#C\\``$@;(+:3I!43V`$8`#\GDI%9B9"9R!L@MI.D+!\__]43V8*</],=
XMWPSP3EU.=3\\``$@;(+:3I!43S`%8.A.50``0F<@;(+:3I!20$'L@(X(,``$&
XM``!43V<"8.8_/``!(&R"VDZ0L'S__U1/9@9P_TY=3G5P`&#X3E7__$CG""!"I
XM+?__0BW__4(M__XD;0`(8```B$)G(&R"VDZ0.``P!%)`0>R`C@@P``(``%1/(
XM9EY*+?__9@ZX?``N9@@;?``!__]@2DHM__UF)+A\`&5G!KA\`$5F&+7M``AG(
XM$D(M__X;?``!__\;?``!__U@)DHM__YF#+A\`"UG%+A\`"MG#C\\``$@;(+:H
XM3I!43V`:&WP``?_^($I2BA"$,"R"V%-L@MA*0&8`_VY"$K7M``AF!'`!8`)P!
XM`$S?!!!.74YU3E7_^DCG#"!*;(+8;@IP`$S?!#!.74YU0FW_^G``.@!(P"M`N
XM__Q"9R!L@MI.D#@`L'P`+51/9@H[?``!__I216`6N'P`*V8$4D5@##\\``$@T
XM;(+:3I!43V!P0F<@;(+:3I!43S@`/P`O+0`(3KH%B"1`2H!<3V8H#&T`$``0;
XM9A)*K?_\9@RX?`!X9SRX?`!89S8_/``!(&R"VDZ05$]@,#(M`!!(P2`M__Q.7
XMN@DJ*T#__"`*D*T`""!M``P2,```2(%(P=.M__Q21;IL@MAMBDIM__IG#B!MJ
XM`!(@+?_\1(`@@&`((&T`$B"M__PP!6``_R!.5?_>+PHD;0`(*WP`````__`K4
XM?*```$3_Z`P2`"!G!@P2``EF!%**8/`,$@`M9@I2BCM\``'_YF`,0FW_Y@P2!
XM`"MF`E**0FW_WD)M_^(K;?_P__@0$DB`4D!![("."#```@``9SHB+?_H("W_=
XM^$ZZ`\HK0/_X$A)(@9)\`#!(P2`!3KH#K"(`("W_^$ZZ`UPK0/_X2FW_XF<$M
XM4VW_WF`6#!(`+F8.2FW_XF8..WP``?_B8`)@!%**8)H,$@!E9P8,$@!%9F)2!
XMB@P2`"UF"E**.WP``?_D8`Q";?_D#!(`*V8"4HI";?_@8!H@2E**$!!(@#(M<
XM_^##_``*T$&0?``P.T#_X!`22(!20$'L@(X(,``"``!FU$IM_^1G!$1M_^`P_
XM+?_@T6W_WDIM_]YL(#`M_]Y2;?_>2D!G$B(M_^@@+?_X3KH"XBM`__A@XF`DN
XM2FW_WF\>,"W_WE-M_]Y*0&<2(BW_Z"`M__A.N@+0*T#_^&#B2FW_YF<,("W_.
XM^$ZZ`H`K0/_X("W_^"1?3EU.=4Y5__A(YP@P)&T`$$'L@$8F2#`M`!120#M`:
XM__A";?_^(BT`"$ZZ`E1L%"`M``A.N@)`*T``""!*4HH0O``M(BT`"$ZZ`C9OO
XM0B(K``0@+0`(3KH"%&P4(A,@+0`(3KH"3BM```A3;?_^8-XB$R`M``A.N@'T=
XM;10B$R`M``A.N@(:*T``"%)M__Y@X`QM``(`%F8>.VT`%/_X#&W__/_^;0HP^
XM+?_^L&T`%&\$0FT`%F`0#&T``0`69@@P+?_^T6W_^$IM__AM0@QM`!#_^&\$@
XM<!!@!#`M__A20$C`Y8`B,P@`("T`"$ZZ`78K0``((A-.N@%V;10K:P`$``A2$
XM;?_^2FT`%F<$4FW_^$IM`!9G3DIM__YL/"!*4HH0O``P($I2BA"\`"XP+?_^2
XM1$`X`%-$2FW_^&X$."T`%#`$4T1*0&<*($I2BA"\`#!@[D)M__I@"C`M__Y2`
XM0#M`__I@!CM\``'_^DIM__AO:G@`N'P`$&P\("T`"$ZZ`0X[0/_\,"W__-!\\
XM`#`@2E**$(`R+?_\2,$@`4ZZ`0XB`"`M``A.N@#P(A-.N@$(*T``"&`(($I2M
XMBA"\`#!3;?_X9QA*;?_Z9PY3;?_Z9@@@2E**$+P`+E)$8)A*;0`69GH@2E**)
XM$+P`94IM__YL#D1M__X@2E**$+P`+6`(($I2BA"\`"L,;0!D__YM)#`M__Y(^
XMP('\`&30?``P($I2BA"`,"W__DC`@?P`9$A`.T#__C`M__Y(P('\``K0?``P;
XM($I2BA"`,"W__DC`@?P`"DA`T'P`,"!*4HH0@$(23-\,$$Y=3G4O//___[Y.6
XM^@!2+SS____63OH`2"\\____Q$[Z`#XO//___]!.^@`T+SS____B3OH`*B\\G
XM____N$[Z`"`O//___ZQ.^@`6+SS____<3OH`#"\\____LD[Z``)*K(+F9C)()
XMY\#`0J=(>@!"3KH`GE!/*4""YF88+SP````02'H`/$ZZ`'(O`$ZZ`'1.N@`^,
XM3-\#`R\((&\`!"].``0L;(+F3K:(`$S?00!.=6UA=&AF9G`N;&EB<F%R>0!NN
XM;R!M871H(&QI8G)A<GD*3E4``$AX``1(>@`<3KH`'"\`3KH`'C\\``%.N@I(L
XM3^\`#DY=3G5>0PH`+&R"ZD[N_\1,[P`.``0L;(+J3N[_T"QL@NXB;P`$("\`P
XM"$[N_=@@;P`$,"\`"!(89PJR`&;X(`A3@$YU<`!.=6%P0^R"TD7L@M*UR68.Z
XM,CP`%VL(=``BPE')__PI3X+R+'@`!"E.@NY(YX"`""X`!`$I9Q!+^@`(3J[_R
XMXF`&0J?S7TYS0_H`($ZN_F@I0(+J9@PN/``#@`=.KO^48`1.N@`:4$].=61O(
XM<RYL:6)R87)Y`$GY``!__DYU3E4``"\*2'D``0``,"R"R,'\``8O`$ZZ"W0I^
XM0(+V4$]F%$*G2'D``0``3KH+.%!/+FR"\DYU(&R"]D)H``0@;(+V,7P``0`0K
XM(&R"]C%\``$`"B!L@O(@+(+RD*@`!%"`*4""^B!L@OH@O$U!3EA"ITZZ"R@D-
XM0$JJ`*Q83V<N+RT`#"\M``@O"DZZ`*XY?``!@OX@;(+V`&B````$(&R"]@!HI
XM@```"D_O``Q@0DAJ`%Q.N@LV2&H`7$ZZ"P0I0(,`(&R#`$JH`"103V<0(&R#H
XM`")H`"0O$4ZZ"CI83R\L@P`O"DZZ`HPI;(,`@P103TZZ"CH@;(+V((!.NOY,.
XM(&R"]B%```9G%DAX`^U(>@`J3KH*-B!L@O8A0``,4$\O+(,$/RR#"$ZZZOI"B
XM9TZZ"%103R1?3EU.=2H`3E4``$CG##`D;0`0(&T`"$JH`*QG&"!M``@@*`"LO
XMY8`H`"!$("@`$.6`)D!@!"9L@LH0$TB`2,#0K0`,5(`Y0(,*0J<P+(,*2,`OU
XM`$ZZ"@8I0(,,4$]F"$S?##!.74YU$!-(@#H`/P4@2U*(+P@O+(,,3KH!?C`%]
XM2,`@0-'L@PQ#^@%$$-EF_#\M``XO"B\L@PQ.N@$Z(&R##$(P4``Y?``!@P@PO
XM!4C`T*R##"9`4HLD2T_O`!00$TB`.@"P?``@9QBZ?``)9Q*Z?``,9PRZ?``-\
XM9P:Z?``*9@12BV#8#!,`(&UZ#!,`(F8N4HL@2U*+$!!(@#H`9QX@2E**$(6Z(
XM?``B9A`,$P`B9@12BV`&0BK__V`"8-9@."!+4HL0$$B`.@!G)KI\`"!G(+I\F
XM``EG&KI\``QG%+I\``UG#KI\``IG""!*4HH0A6#.($I2BD(02D5F`E.+4FR#E
XM"&``_UI"$D*G,"R#"%)`2,#E@"\`3KH(Y"E`@P103V8(0FR#"&``_MAZ`"9L_
XM@PQ@)#`%2,#E@"!L@P0ABP@`($L@"$H89OR1P%.(,`A20$C`U\!21;IL@PAM=
XMUC`%2,#E@"!L@P1"L`@`8`#^E"``,#Q__V`$,"\`#"!O``1*&&;\4T@B;P`(;
XM4T`0V5?(__QG`D(0("\`!$YU3.\#```$(`@R+P`,8`(0V5?)__QG!E)!8`)"(
XM&%')__Q.=4CG<``T`<3`)@%(0\;`2$-"0]2#2$#`P4A`0D#0@DS?``Y.=4Y5K
XM``!(YPXP)&T`"$*G2'H`CDZZ^]@I0(,04$]F"$S?#'!.74YU(&T`#")H`"0ON
XM*0`$3KH(:B@`6$]G4DAZ`&T@1"\H`#9.N@@\)D!*@%!/9S1(>`/M+PM.N@=\Z
XM+`!03V<D(`;E@"H`($4E:``(`*0E1@"<2'@#[4AZ`#A.N@=8)4``H%!/+P1.F
XMN@@(6$\O+(,03KH'>$*L@Q!83V"`:6-O;BYL:6)R87)Y`%=)3D1/5P`J`$CGK
XM2`!"A$J`:@1$@%)$2H%J!D2!"D0``6$^2D1G`D2`3-\`$DJ`3G5(YT@`0H1*:
XM@&H$1(!21$J!:@)$@6$:(`%@V"\!81(@`2(?2H!.=2\!808B'TJ`3G5(YS``N
XM2$%*068@2$$V`30`0D!(0(##(@!(0#("@L,P`4)!2$%,WP`,3G5(028!(@!")
XM04A!2$!"0'0/T(#3@;:!8@22@U)`4<K_\DS?``Q.=4Y5``!(;($F/RT`"$ZZ_
XM``A<3TY=3G5.50``+P0X+0`(+RT`"C\$3KH`,+A\``I<3V8D(&T`"A`H``Q(;
XM@`@```=G%#\\__\O+0`*3KH`]%Q/*!].74YU8/A.50``+PHD;0`*(%*QZ@`$E
XM91@P+0`(P'P`_S\`+PI.N@#(7$\D7TY=3G4@4E*2$"T`"1"`2(#`?`#_8.A.&
XM50``+PI![($0)$@@2M7\````%B\(81!83T'L@LBUR&7J)%].74YU3E4``$CG>
XM""`D;0`(>``@"F8*</],WP003EU.=4HJ``QG4`@J``(`#&<,/SS__R\*85(XV
XM`%Q/$"H`#4B`/P!.N@3RB$`(*@`!``Q43V<*+RH`"$ZZ`BY83P@J``4`#&<2.
XM+RH`$DZZ`L`O*@`23KH"%%!/0I)"J@`$0JH`"$(J``PP!&"03E7__DCG""`D,
XM;0`(0?K_1BE(@Q0(*@`$``QG"G#_3-\$$$Y=3G4(*@`"``QG,"!2D>H`"#@(8
XM/P0O*@`($"H`#4B`/P!.N@*`L$103V<0".H`!``,0I)"J@`$</]@P`QM__\`2
XM#&80"*H``@`,0I)"J@`$<`!@J$JJ``AF""\*3KH`FEA/#&H``0`09BH;;0`-6
XM__\_/``!2&W__Q`J``U(@#\`3KH"(K!\``%03V:@,"T`#&``_VHDJ@`(,"H`;
XM$$C`T*H`""5```0(Z@`"``P@4E*2$"T`#1"`2(#`?`#_8`#_/DY5```O"D'L<
XM@1`D2$HJ``QG&-7\````%D'L@LBUR&4(<``D7TY=3G5@XD*20JH`!$*J``@@_
XM"F#J3E7__"\*)&T`"#\\!`!.N@#`*T#__%1/9A@U?``!`!`@2M'\````#B5(&
XM``@D7TY=3G4U?`0``!`(Z@`!``PE;?_\``@0*@`-2(`_`$ZZ`.)*0%1/9P8`D
XM*@"```Q@SDY5``!(YP`P)&R"WF`4)E(@*@`$4(`O`"\*3KH$#E!/)$L@"F;HH
XM0JR"WDS?#`!.74YU3E4``"\*0?K_QBE(@QA"IR`M``A0@"\`3KH#O"1`2H!0=
XM3V8(<``D7TY=3G4DK(+>)6T`"``$*4J"WB`*4(!@YDY5``!P`#`M``@O`&&RY
XM6$].74YU3E4``$CG`#"7RR1L@MY@#B!M``A1B+'*9Q(F2B12(`IF[G#_3-\,#
XM`$Y=3G4@"V<$)I)@!"E2@MX@*@`$4(`O`"\*3KH#8'``4$]@V$Y5```O"C`ML
XM``C!_``&)$#5[(+V2FT`"&T.,"T`"+!L@LAL!$J29@XY?``"@QQP_R1?3EU.N
XM=3`M``C!_``&(&R"]B\P"`!.N@*<2H!83V<$<`%@`G``8-A.50``+RT`"$ZZ4
XM`F9*@%A/9@Y.N@)P.4"#''#_3EU.=7``8/A.50``2.<,(#@M``A.N@!P,`3!<
XM_``&)$#5[(+V2D1M"KAL@LAL!$J29A`Y?``"@QQP_TS?!#!.74YU,"H`!,!\`
XM``-F"CE\``6#''#_8.1P`#`M``XO`"\M``HO$DZZ]AXJ`+"\_____T_O``QF.
XM#$ZZ`?`Y0(,<</]@N"`%8+1.5?_\2'@0`$*G3KH"?BM`__P(```,4$]G$DIL$
XM@OYF""`M__Q.74YU3KKUHG``8/1.50``2JR#%&<&(&R#%$Z0/RT`"$ZZ``A4]
XM3TY=3G5.5?_\+P0P+0`(2,`K0/_\2JR"]F<H>`!@"C\$3KH`_E1/4D2X;(+(P
XM;?`P+(+(P?P`!B\`+RR"]DZZ`=903TJL@QAG!B!L@QA.D$JL@LYG"B\L@LY.Y
XMN@%@6$]*K(,>9P@@;(,>(*R#(DJL@R9G"B\L@R9.N@%N6$]*K(+F9PHO+(+FJ
XM3KH!7EA/2JR#*F<*+RR#*DZZ`4Y83TJL@RYG"B\L@RY.N@$^6$\L>``$""X`8
XM!`$I9Q0O#4OZ``I.KO_B*E]@!D*G\U].<TJL@P!F,$JL@PQG*#`L@PI(P"\`_
XM+RR##$ZZ`2XP+(,(4D!(P.6`+P`O+(,$3KH!&D_O`!!@#DZZ`0@O+(,`3KH!O
XM*%A/("W__"YL@O).=2@?3EU.=4Y5``!(YPX@."T`"#`$P?P`!B1`U>R"]DI$L
XM;0JX;(+(;`1*DF80.7P``H,<</],WP1P3EU.=0@J``<`!&8(+Q).N@`*6$]"@
XMDG``8.(B+P`$+&R"ZD[N_]PB+P`$+&R"ZD[N_X(B+P`$+&R"ZD[N_[@L;(+J:
XM3N[_RBQL@NI.[O]\(B\`!"QL@NI.[O\H3.\`!@`$+&R"ZD[N_^).^@`"(B\`]
XM!"QL@NI.[O^F2.<!!$SO((``#"QL@NY.KO^43-\@@$YU3OH``B)O``0L;(+N0
XM3N[^8DSO``,`!"QL@NY.[O\Z(F\`!"QL@NY.[O[:+&R"[D[N_WPB;P`$("\`O
XM""QL@NY.[O\N(&\`!"QL@NY.[OZ,3OKSD")O``0L;(+N3N[^ADSO``,`!"QL<
XM@NY.[O[.(&\`!"QL@NY.[OZ`3.\#```$+&R#$$[N_Z`@;P`$+&R#$$[N_Z8@4
XM;P`$+&R#$$[N_[(@;P`$3.\``P`(+&R``D[N_[@```/L`````0`````````>_
XM`````0````$``!:^`````````_(```/J````M``````P,3(S-#4V-S@Y86)C?
XM9&5F``!!0D-$149A8F-D968Y.#<V-30S,C$P``H+#`T.#PH+#`T.#PD(!P8%?
XM!`,"`0``H```1(```$&```!`S,S-/*/7"CF#$FXVT;<6,J?%JR^&-[PLUK^3I
XM**O,=B6)<%XBV^;]'J_K_AN,O,L8X2X2%+0DVQ&0'7P.`"`@("`@("`@(#`P=
XM,#`P("`@("`@("`@("`@("`@("`@D$!`0$!`0$!`0$!`0$!`0`P,#`P,#`P,`
XM#`Q`0$!`0$!`"0D)"0D)`0$!`0$!`0$!`0$!`0$!`0$!`0%`0$!`0$`*"@H**
XM"@H"`@("`@("`@("`@("`@("`@("`D!`0$`@``````````````````$`````=
XM`0`````````````````````!`0````$``````````````````````0(````!(
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XL`````````````````````````!0``````````````_(```/K`````0```_(`M
X``
Xend
Xsize 9764
SHAR_EOF
echo "End of archive 1 (of 1)"
# if you want to concatenate archives, remove anything after this line
exit