amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator) (05/08/91)
Submitted-by: grahamw@cpsc.ucalgary.ca (William Graham) Posting-number: Volume 91, Issue 100 Archive-name: devices/virt-alpha/part01 [ includes uuencoded executables ...tad ] The Virtual Device is simply another path on your system, like RAM: (except its called VIR:)....you can copy files to and from it like a RAM disk, and like a RAM disk all files are lost when you power off. But what you can also do, which you cannot do with a RAM disk is not copy a file, but just aquire a virtual reference to that files real location. This way the VIR: device can appear to have hundreds of megabytes of files online, but in fact it actually goes out and retrieves them from where they are really stored (sometimes prompting you to insert a disk). So it acts as a *transparent* disk manager as well. You can access VIR: from anywhere, from SID, from DPAINT, from anyplace you can access any other device (like RAM:, DF0: etc...). This is only an Alpha Version, there is no load save facility (although I have a version here which is struggling to do that). I will be upgrading. What I want at this point is to get feedback, inspiration, suggestions, and any assistance that you may be willing to provide. #!/bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 1 (of 4)." # Contents: bset.asm coal.s coal.uu executeme learn.uu makefile # mountlist.vir readme readme.2 virt_nice.uu virtual.uu # Wrapped by tadguy@ab20 on Tue May 7 20:50:16 1991 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'bset.asm' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'bset.asm'\" else echo shar: Extracting \"'bset.asm'\" \(4775 characters\) sed "s/^X//" >'bset.asm' <<'END_OF_FILE' X X;BSET.ASM X;BZERO.ASM X; X; Uses longword operations if data is aligned on a longword boundry X; and the size is a mulitple of 4. Otherwise, uses byte operations. X X xdef _bset X xdef _bzero X X_bzero X clr.l D1 X bra begin X_bset X move.b 15(A7),D1 ;12(A7)-> msb . . lsb (D1 = data) Xbegin X move.l 4(A7),A0 ;A0 = address X move.l 8(A7),D0 ;D0 = byte count X andi.b #3,11(A7) ;byte count on long word boundry? X bne drop X andi.b #3,7(A7) ;address on longword boundry? X bne drop X bra lwb Xloop move.b D1,(A0)+ ;BYTE SET LOOP Xdrop dbf.w D0,loop ;remember, only effects lower word X sub.l #$10000,D0 ;for buffers >65535 X bpl loop ;branch to loop because D0.W now is FFFF X rts X Xlwb lsr.l #2,D0 ;byte count / 4 (longword chunks) X tst.l D1 ;BZERO X beq dropl X move.b D1,14(A7) ;15(A7) already contains the byte X move.w 14(A7),D1 ;D1 0..15 set X swap D1 X move.w 14(A7),D1 ;D1 16..31 set X bra dropl X Xloopl move.l D1,(A0)+ ;BYTE SET LOOP Xdropl dbf.w D0,loopl ;remember, only effects lower word X sub.l #$10000,D0 ;for buffers >65535 X bpl loopl ;branch to loop because D0.W now is FFFF X rts X X X X;/* X; * The assembly tag for the DOS process: CNOP causes alignment problems X; * with the Aztec assembler for some reason. I assume then, that the X; * alignment is unknown. Since the BCPL conversion basically zero's the X; * lower two bits of the address the actual code may start anywhere around X; * the label.... Sigh.... (see CreatProc() above). X; */ X X xref _debugmain X xdef _debugproc X X cnop 0,2 X nop X nop X nop X_debugproc: X nop X nop X movem.l D2-D7/A2-A6,-(sp) X jsr _debugmain X movem.l (sp)+,D2-D7/A2-A6 X rts X X X X X xdef _FindHandler ; Find Handler of (A1) Name X xref _DOSBase X X X_FindHandler X move.l 4(a7),a1 ; a1 = handler name to find X move.l 8(a7),a0 ; a0 = dosbase X movem.l d2-d7/a2-a6,-(a7) X move.l 44+12(a7),a4 ; a4 = ptr to copy of vir_volumeID stuff X bsr Find100 X movem.l (a7)+,d2-d7/a2-a6 X rts XFind100 X ; A0 = DosBase X ; A1 = Named Handler to Find X ; Capitalize X move.l a1,a3 ; (stash a1, next trashes a1) X X; X; don't capitalize because X; we're looking for the exact same X; instance of device as X; what we had before X; X; later on we can make it less specific when we support keys X; X ; A1 = Capitalize X;2$ move.b (a1)+,d0 ; Parse User Input Chars X; beq.s 3$ X; bmi.s 3$ ; (some error, try contain error) X; cmp.b #':',d0 ; Allow ':' (or 0) X; beq.s 3$ X; cmp.b #' ',d0 ; (some error, try contain error) X; bcs.s 3$ X; cmp.b #'a',d0 ; Ignore if <a X; bcs.s 2$ X; cmp.b #'z',d0 ; Ignore if >z X; bcc.s 2$ X; sub.b #32,-1(a1) ; Change to UpperCase X; bra.s 2$ X;3$ ;clr.b -1(a0) ; terminate X XFind200 X move.l 34(a0),a0 ; dl_root->struct RootNode X move.l 24(a0),a0 ; rn_info->struct DosInfo X add.l a0,a0 ; BPTR -> APTR X add.l a0,a0 X move.l 4(a0),d0 ; dl_DevInfo->struct DevicList X ; Goto Next Device/Handler if Any X0$ add.l d0,d0 ; BPTR -> APTR X beq.s 3$ ; End Device/Handler List? X add.l d0,d0 X move.l d0,a0 X move.l (a0),d0 ; (Stash Next Device/Handler) X cmp.l #2,4(a0) X bne.s 0$ ; dl_Type == 2 != Handler? X X X; (this being an extra picky robust check might be overkill, for example does X; a revalidation change the datestamp (and thus volume ID)?) X; there should be a "be-stupid" option for cases like this, or intentional cases. X X ; this little section deviates from a X ; normal "findhandler" X ;------------------ ; Check if diskkeys match: X X ;move.l 16(a0),vir_VolID(a4) ; Volume->VolDays X ;move.l 20(a0),vir_VolID+4(a4) X ;move.l 24(a0),vir_VolID+8(a4) X ;move.l 4(a0),vir_VolType(a4) ; Volume->Type (must == 2!) X ;move.l 64(a0),vir_VolDiskType(a4) ; Volume->DiskType X ; X ;STRUCT vir_VolID,ds_SIZEOF ; Volume DateStamp Positive ID X ;LONG vir_VolType ; Volume Type X ;LONG vir_VolDiskType ; Volume Disk Type 'NDOS'... X X move.l (a4),d1 ; read vir_VolID X cmp.l 16(a0),d1 ; compare to device VolID X bne.s 0$ X move.l 4(a4),d1 X cmp.l 20(a0),d1 X bne.s 0$ X move.l 8(a4),d1 X cmp.l 24(a0),d1 X bne.s 0$ X X move.l 12(a4),d1 ; read vir_VolType X cmp.l 4(a0),d1 ; compare to device VolType X bne.s 0$ X X move.l 16(a4),d1 ; read vir_VolType X cmp.l 64(a0),d1 ; compare to device VolType X bne.s 0$ X X ;------------------- X ; now check if names match (they should) X ; (as per a normal findhandler search) X move.l 40(a0),d1 X beq.s 0$ ; dl_Name? X add.l d1,d1 X add.l d1,d1 X move.l d1,a2 ; (don't trash a0) X moveq #0,d1 X move.b (a2)+,d1 ; BSTR STRLEN > 0? X beq.s 0$ X move.l a3,a1 ; Compare Handler Names X bra.s 2$ X1$ cmp.b (a1)+,(a2)+ X bne.s 0$ X2$ dbf d1,1$ X cmp.b #':',(a1) ; Both Terminated? X beq.s 4$ X tst.b (a1) ; Permit ':' or 0 on Search String X bne.s 0$ X4$ move.l a0,d0 ; D0/A0 = Handler Node (C wants d0) X moveq #1,d1 ; Success (C doesn't need this but) X rts X3$ moveq #0,d0 ; Failure (C wants D0=0 - just in case) X rts END_OF_FILE if test 4775 -ne `wc -c <'bset.asm'`; then echo shar: \"'bset.asm'\" unpacked with wrong size! fi # end of 'bset.asm' fi if test -f 'coal.s' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'coal.s'\" else echo shar: Extracting \"'coal.s'\" \(9828 characters\) sed "s/^X//" >'coal.s' <<'END_OF_FILE' X;******************************************************************** X; X; NAME : coal 1.0 X; X; TEMPLATE : coal <dir name> <dir name> X; X; DESCRIPTION : coalesce duplicate files to point to single virtual reference X; X; AUTHOR : Anselm Hook, from code from Stuart Mitchell's 'DU' X; (where Stuart got it from he's not saying....) X; X; DATE : 20-3-91 X; X; NOTES : 1) this thing requires the ARP shared library (v39.0+) X; X;******************************************************************** X XARG_SOURCE = 0 XARG_DEST = 4 XARG_MERGE = 8 XARG_DELETE = 12 XARG_REAL = 16 X X X; STRUCTURE FileInfoBlock,0 X; LONG fib_DiskKey ; start of file on media X; LONG fib_DirEntryType ; < 0 = file, > 0 = directory X; STRUCT fib_FileName,108 ; name X; LONG fib_Protection ; sparwed X; LONG fib_EntryType ; ??? X; LONG fib_Size ; byte size X; LONG fib_NumBlocks ; block size X; STRUCT fib_DateStamp,ds_SIZEOF ; last date X; STRUCT fib_Comment,80 ; null terminated comments X; STRUCT fib_padding,36 ; unused X; LABEL fib_SIZEOF X X X X section du,code X X opt d+,c- ;o+ X X incdir "include:" X X include "arpbase.i" X include "libraries/dos_lib.i" X include "libraries/dos.i" X include "exec/memory.i" X Xap_Flags = $10 X X_LVOOpenLibrary equ -$228 X_LVOCloseLibrary equ -$19e X XCALL macro (name) X jsr _LVO\1(a6) X endm X Xstash1 macro (name) X movem.l d0-d7/a0-a6,stash10 X endm Xstash2 macro (name) X movem.l d0-d7/a0-a6,stash20 X endm Xunstash2 macro (name) X movem.l stash20,d0-d7/a0-a6 X endm Xunstash1 macro (name) X movem.l stash10,d0-d7/a0-a6 X endm X X move.l a7,thestack X bra start Xthestack dc.l 0 Xstash10 dcb.l 16,0 Xstash20 dcb.l 16,0 X Xr_anchor equr a2 Xr_finfo equr a3 Xr_current_arg equr a4 Xr_fpath equr a5 Xr_flags equr d1 Xr_files equr d2 Xr_dirs equr d3 Xr_size equr d4 Xr_blocks equr d5 Xr_num_arg equr d6 Xr_zero equr d7 X X; bitdefs for dir scan - should really be picked up from ArpBase.i ... X XDIDDIR equ 3 XDODIR equ 2 X X;******************************************************************** X Xstart: move.l d0,d2 ; cache command line X move.l a0,a2 X X moveq.l #0,r_zero X X; open ARP library X X move.l 4.w,a6 X lea arplib(pc),a1 X move.l r_zero,d0 X CALL OpenLibrary X tst.l d0 X beq exit X move.l d0,a6 X X; parse command line X X move.l a2,a0 ; string X move.l d2,d0 ; length X lea help(pc),a1 X lea args(pc),a2 ; pointer to arg array X lea tplate(pc),a3 X CALL GADS X move.l d0,r_num_arg ; count X X tst.l d0 X bmi closearp2 ; tell user about failure etc X X;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> X; AH - code to check every file against every other file X X move.l args+ARG_SOURCE,r_current_arg ; src arg X bsr find_first X beq closearp X stash1 X0$ move.l args+ARG_DEST,r_current_arg ; dest arg X bsr find_first ; re-loop entire dest X beq closearp X stash2 X1$ bsr issame_coal X unstash2 X bsr find_next ; loop till exhausted X stash2 X bne 1$ X ;bsr print X unstash1 X bsr find_next X stash1 X bne 0$ X bsr print X bra closearp X Xissame_coal unstash1 X movem.l r_finfo/r_fpath,-(a7) X unstash2 X move.l r_finfo,r_anchor X move.l r_fpath,r_current_arg X movem.l (a7)+,r_finfo/r_fpath X ; now if r_anchor == r_finfo we have a match! X X ; not actually same file? X move.l fib_DiskKey(r_finfo),r_size X move.l fib_DiskKey(r_anchor),r_blocks X cmp.l r_size,r_blocks X beq 1$ X ; both same size? X move.l fib_Size(r_finfo),r_size X move.l fib_Size(r_anchor),r_blocks X cmp.l r_size,r_blocks X bne 1$ X ; are both virtual files? X ; (secretively imbedded in FIB) X X ;/* fib_Padding == fib_Reserved depending on your includes!! */ X X move.l fib_Comment+72(r_finfo),r_size X move.l fib_Comment+72(r_anchor),r_blocks X cmp.l r_size,r_blocks X bne 1$ X cmp.l #'VIRT',r_blocks X bne.s 1$ X ; checksums match? X ; (secretively imbedded in FIB) X move.l fib_Comment+76(r_finfo),r_size X move.l fib_Comment+76(r_anchor),r_blocks X cmp.l r_size,r_blocks X bne 1$ X X move.l r_fpath,matchfiles+4 ; name of file X move.l r_current_arg,matchfiles ; name of other file X X ; 1) DELETE DUPLICATE REFERENCE X tst.l args+ARG_DELETE X beq 5$ X lea matchfiles(pc),a1 ; address ptrs to args X lea matchfmt100(pc),a0 ; format string X bsr myprintf X move.l r_current_arg,d1 ; delete dest ref X CALL DeleteFile X bra.s 7$ X ; 2) OR MERGE DUPLICATE REFERENCE X5$ tst.l args+ARG_MERGE X beq.s 7$ X lea matchfiles(pc),a1 ; address ptrs to args X lea matchfmt150(pc),a0 ; format string X bsr myprintf X ; 3) DELETE REAL X7$ tst.l args+ARG_REAL X beq.s 8$ X lea matchfiles(pc),a1 ; address ptrs to args X lea matchfmt200(pc),a0 ; format string X bsr myprintf X rts X8$ ;tst.l args+ARG_REAL ; if all 0 just give stats X ;bne.s 1$ X tst.l args+ARG_MERGE X bne.s 1$ X tst.l args+ARG_DELETE X bne.s 1$ X lea matchfiles(pc),a1 X lea matchfmt(pc),a0 X bsr myprintf X1$ rts X Xmatchfiles dc.l 0,0 Xmatchfmt dc.b "File %s and %s are the same",10,0 Xmatchfmt100 dc.b "Retaining %s, killing duplicate %s",10,0 Xmatchfmt150 dc.b "Copying duplicate %s to %s",10,0 Xmatchfmt200 dc.b "Deleting *REAL* %s",10,0 X even X Xcoalesce X rts X X;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< X X X;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> X; allocate memory for AnchorPath structure - note this is freed automatically Xfind_first move.l #ap_SIZEOF+512,d0 X move.l #MEMF_PUBLIC|MEMF_CLEAR,d1 X CALL ArpAllocMem X tst.l d0 X beq closearp X move.l d0,r_anchor X move.b #%00100001,ap_Flags(r_anchor) ; DOWILD|DODOT X lea ap_Info(r_anchor),r_finfo ; the FIB X X ; (ap_Flags and ap_Length overlap...I must have old docs!) X move.w #512,ap_Length+2(r_anchor) ; 512 bytes for path name X lea ap_Buf(r_anchor),r_fpath ; the file path name X Xinit_regs: move.l r_zero,r_files ; zero results X move.l r_zero,r_dirs X move.l r_zero,r_size X move.l r_zero,r_blocks X ; find first file/directory X move.l r_current_arg,d0 X move.l r_anchor,a0 X CALL FindFirst X tst.l d0 X bne.s no_files X ; loop around in directory until all subdirectories/files exhausted X ; first check if CNTL-C pressed Xdu_loop: move.l r_zero,a1 X CALL CheckAbort X tst.l d0 X bne break_pressed X move.b ap_Flags(r_anchor),r_flags X ; if DirEntryType <0 then we have a file X move.l fib_DirEntryType(r_finfo),d0 X blt.s do_file Xdo_dir: ;tst.l args+ARG_ALL ; Do Sub Dirs? X ;beq.s exit_dir X X btst #DIDDIR,r_flags ; DIDDIR bit set X beq.s enter_dir ; no ... enter dir X ; have just popped out of a directory, mark as finished & increment count Xexit_dir: bclr #DIDDIR,r_flags X addq.l #1,r_dirs X bra.s find_next X ; found a new directory, so enter it at next FindNext Xenter_dir: bset #DODIR,r_flags X bra.s find_next X ; this ones a file, so increment count & size Xdo_file: addq.l #1,r_files X add.l fib_Size(r_finfo),r_size X add.l fib_NumBlocks(r_finfo),r_blocks X moveq #1,d0 ; found a file! AH X rts X ; find next file Xfind_next: move.b r_flags,ap_Flags(r_anchor) ; set directory handling X move.l r_anchor,a0 X CALL FindNext X tst.l d0 X beq.s du_loop ; if zero then got something X ; directory exhausted X bsr.s free_anchor ; free mem X moveq #0,d0 ; failure AH X rts X X;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< X X X; print out results X Xprint: movem.l r_files/r_dirs/r_size/r_blocks,files ; flush results X X move.l r_current_arg,a0 ; print directory name X bsr myprintf X lea fmt(pc),a0 ; format string X lea files(pc),a1 ; address ptrs to args X bsr myprintf X X rts X X;; and do it all again;; don't bother AH X; X;end_loop: subq.l #1,r_num_arg ; decrement arg count X; bra.s main_loop ; and do next arg X X X X;******************************************************************** X; handle case when directory/file doesn't exist... X Xno_files: move.l r_current_arg,a0 X bsr myprintf X lea not_exist(pc),a1 X CALL Puts X bsr.s free_anchor ; free mem X X moveq #0,d0 ; failure AH X rts X X ;bra.s end_loop X X;******************************************************************** X Xmyprintf ;tst.l args+ARG_QUIET X ;bne.s 1$ X jmp _LVOPrintf(a6) X;1$ rts X X;******************************************************************** X; called if CNTL-C detected X; NB: 1 - call to CheckAbort sets up a1 to point to break string X; 2 - drop through to end of program X Xbreak_pressed: ; a1 = 0 X CALL Puts ; output "***BREAK" X bsr.s free_anchor ; free mem X ;bra.s closearp X X;******************************************************************* X; exit program - close ARP & return to DOS - call frees resources X Xclosearp: move.l a6,a1 X move.l 4.w,a6 X CALL CloseLibrary X move.l thestack(pc),a7 X X ; system should exit before hitting this line...but X Xexit: move.l r_zero,d0 X rts X X Xclosearp2 move.l args(pc),a1 X CALL PUTS X bra closearp X X;******************************************************************** X; free anchorpath X Xfree_anchor: move.l r_anchor,a0 ; free anchor X jmp _LVOFreeAnchorChain(a6) X X;******************************************************************** X; data X Xfiles dc.l 0 Xdirs dc.l 0 Xsize dc.l 0 Xblocks dc.l 0 X even Xfmt dc.b " -- %ld files, %ld directories : %ld bytes (%ld blocks)",$0a,0 X even Xarplib dc.b "arp.library",0 X even Xargs dc.l 0,0,0,0,0 ; was char *args[] now is x args X even Xhelp dc.b "FROM TO [MERGE/KILLREF/KILLREAL]",0 X even Xtplate dc.b 'FROM,TO,MERGE/S,KILLREF/S,KILLREAL/S' X even Xnot_exist dc.b " -- directory does not exist",0 X end X X X;* - should not detect itself (using diskkey?) (vir fixed too) X;* - should use checksum (in comment field?) to determine duplc. X; - should print out full path name (lock file using fib?) X; - should do one of these things if duplicate found: X; connect reference to same dest X; delete duplicate reference X; delete real copy, and connect reference to same dest X; delete real copy, delete reference X X; copy "file of name a" to "file of name b" X; delete "file of name b" X; extract real destination, delete that.... X X X; lea comm2(pc),a0 X; move.l a0,d1 X; clr.l d2 X; clr.l d3 X; jmp LVOExecute(a6) X;comm2: dc.b 'copy >nil: :dpaint :kodak',0 END_OF_FILE if test 9828 -ne `wc -c <'coal.s'`; then echo shar: \"'coal.s'\" unpacked with wrong size! fi # end of 'coal.s' fi if test -f 'coal.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'coal.uu'\" else echo shar: Extracting \"'coal.uu'\" \(2599 characters\) sed "s/^X//" >'coal.uu' <<'END_OF_FILE' Xbegin 666 coal XM```#\P`````````!``````````````$,```#Z0```0PCSP````I@``"&````? XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````)``D2'X`. XM+'@`!$/Z`Q(@!TZN_=A*@&<``J8L0"!*(`)#^@,<1?H#!$?Z`S9.KO\$+`!*4 XM@&L``HPH>0```[AA``&J9P`";$CY?_\````.*'D```.\80`!E&<``E9(^7__7 XM````3F$``#I,^7__````3F$``?!(^7__````3F8`_^9,^7__````#F$``=A(W XM^7__````#F8`_[AA``'<8``"$DSY?_\````.2.<`%$SY?_\```!.)$LH34S?( XM*``H*P``*BH``+J$9P``I"@K`'PJ*@!\NH1F``"6*"L`V"HJ`-BZA&8``(BZN XMO%9)4E1F?B@K`-PJ*@#<NH1F``!R(\T```(`(\P```'\2KD```/$9P``%D/Z\ XM`%I!^@![80`!BB(,3J[_N&`42KD```/`9PQ#^@`^0?H`@V$``6Y*N0```\AG( XM#D/Z`"I!^@"+80`!6DYU2KD```/`9A1*N0```\1F#$/Z``Q!^@`080`!/$YUK XM``````````!&:6QE("5S(&%N9"`E<R!A<F4@=&AE('-A;64*`%)E=&%I;FEN& XM9R`E<RP@:VEL;&EN9R!D=7!L:6-A=&4@)7,*`$-O<'EI;F<@9'5P;&EC871EF XM("5S('1O("5S"@!$96QE=&EN9R`J4D5!3"H@)7,*``!.=2`\```#&"(\``$`< XM`4ZN_GI*@&<``+(D0!5\`"$`$$?J`!0U?`(``!)+Z@$8)`<F!R@'*@<@#"!*D XM3J[^2DJ`9F@B1TZN_O)*@&8``'82*@`0("L`!&T4"`$``V<("($``U*#8!0(+ XMP0`"8`Y2@MBK`'S:JP"`<`%.=15!`!`@2DZN_D1*@&>Z85QP`$YU2/D`/```C XM`V(@3&$``"1!^@!>0_H`2F$``!A.=2!,80``$$/Z`.I.KO\082QP`$YU3N[_\ XM'$ZN_Q!A'B).+'@`!$ZN_F(N>OS`(`=.=2)Z`&9.KO\08`#_Y"!*3N[^/@``: XM```````````````````@+2T@)6QD(&9I;&5S+"`E;&0@9&ER96-T;W)I97,@@ XM.B`E;&0@8GET97,@*"5L9"!B;&]C:W,I"@``87)P+FQI8G)A<GD`````````* XM``````````````````!&4D]-(%1/(%M-15)'12]+24Q,4D5&+TM)3$Q214%,9 XM70``1E)/32Q43RQ-15)'12]3+$M)3$Q2148O4RQ+24Q,4D5!3"]3("TM(&1I: XM<F5C=&]R>2!D;V5S(&YO="!E>&ES=``````#[````!,``````````@```,@`= XM``#8````W@```.X```#Z```!!@```1(```$>```!,@```3X```&,```!D@``I XM`9@```&V```!R@```>````'H```#"`````````/P`````49-5`````-R````` XM`4%21U,```.X`````41)4E,```-F`````458250```-,`````4A%3%````/,( XM`````5-)6D4```-J`````D9)3$53```````#8@````)04DE.5````````P0`9 XM```"4U1!4E0```````".`````D%24$Q)0@`````#K`````)"3$]#2U,`````) XM`VX````"1$]?1$E2``````+.`````E103$%410`````#[@````)$3U]&24Q%E XM`````N(````"1%5?3$]/4`````*X`````E-405-(,3``````#@````)35$%3# XM2#(P`````$X````"0TQ/4T5!4E````,^`````D-/04Q%4T-%```"=@````)%4 XM6$E47T1)4@```M0````"34%40TA&350```($`````DU94%))3E1&```#-```7 XM``).3U]&24Q%4P```R`````"5$A%4U1!0TL````*`````T-,3U-%05)0,@``% XM`````U`````#14Y415)?1$E2```````"W`````-&24Y$7TY%6%0```````+PD XM`````TE.251?4D5'4P```````J0````#3D]47T5825-4```````$$@````-&L XM24Y$7T9)4E-4``````)X`````TU!5$-(1DE,15,``````?P````#1E)%15]!A XM3D-(3U(````#7`````-)4U-!345?0T]!3`````$N`````TU!5$-(1DU4,3`PS XM`````B$````#34%40TA&350Q-3`````"10````--051#2$9-5#(P,`````)AC X@````!$)214%+7U!215-3140```````,X`````````_)#1 X`` Xend Xsize 1832 END_OF_FILE if test 2599 -ne `wc -c <'coal.uu'`; then echo shar: \"'coal.uu'\" unpacked with wrong size! fi # end of 'coal.uu' fi if test -f 'executeme' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'executeme'\" else echo shar: Extracting \"'executeme'\" \(1392 characters\) sed "s/^X//" >'executeme' <<'END_OF_FILE' X; run this utility when you are in the same directory as the unpacked archive X; (from whence presumably you got this "executeme" file.... X; X Xecho "you must have ARP LIBRARY!!! to fully exploit the virtual device" Xecho "(the virtual device doesn't need it but learn and coalesce do)" X Xecho "hi there! I'm now going to mount vir: onto your very own system" Xecho "so hold on...it should only take a second or two!" Xecho "note: you may want to edit the startup sequence a bit...when I'm done" X Xcopy mountlist.vir devs: ; the mount info for vir: Xcopy virtual l: ; the silly handler for vir: Xcopy learn c: ; the acquisition utility Xcopy coal c: ; the sorting utility X X ; the proper startup junk X Xecho >ram:gumbyfile "Mount VIR: FROM DEVS:mountlist.vir" Xjoin ram:gumbyfile s:startup-sequence as s:vir-start Xrename s:startup-sequence as s:startup-before-vir Xrename s:vir-start as s:startup-sequence X XMOUNT VIR: FROM DEVS:mountlist.vir X Xecho "now try do this:" Xecho " learn c:a#? vir:#? " Xecho " ;(learn all files starting with an "a" to the virtual device!) Xecho " cd vir: Xecho " type a#? opt h" Xecho " ; you should see what appear to be regular files on vir:" Xecho " virtualoff Xecho " type a#? opt h" Xecho " ; you should see what appear to be small files on vir:" Xecho " virtualon Xecho " ; now copy all kinds of stuff to vir:, see how much fits!!!" END_OF_FILE if test 1392 -ne `wc -c <'executeme'`; then echo shar: \"'executeme'\" unpacked with wrong size! fi # end of 'executeme' fi if test -f 'learn.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'learn.uu'\" else echo shar: Extracting \"'learn.uu'\" \(3856 characters\) sed "s/^X//" >'learn.uu' <<'END_OF_FILE' Xbegin 666 learn XM```#\P`````````!``````````````*A```#Z0```J%(YX"`0_H*/'`?+'@`. XM!$ZN_=A*@&8,4$\N/``#@#9.[O^4+$!,UP$!3^__^$/Z"7(D3T?Z"AM.KO\$X XM2D!#^@EB;P`!]"PO``S0AGX`(#P```,<3J[^@"1`=&=*@&<``?PE?````/\`3 XM$#5\``W__A5\`"$`$"IO``29S"!-$!AG:+`\`"-F$!`89UZP/``_9@9"*/_^C XM8`:P/``J9N`H2$(@(%<@"&8&0?H)OBZ(>O]R`'@`$!AG++`\`#IG\+`\`"]GT XMZK`\`"IG$K`\`"-G!E*!4H1@WDH89@)32$J%:M(J`6#.2H5M+F`P(@UT_DZN\ XM_ZPB`&>L)@%!Z@`4)`A.KO^:2H!G"DJJ`!AM!#X\__\B`TZN_Z9X`'H`(!<@& XM2DZN_DHF$F8"?`$D`&9,871#Z@,80>H!&'(`2JH`&&TF2J\`"&<``!H(*@`#J XM`!-G"`BJ``,`$V`8".H``@`38!!*@V8,<@%P`$ZN_@)*@&<(($I.KOY$8+)PZ XM9R0`M'P`Z&<J(FH#&$ZN_@A*0F<``+!!^@A1M'P`S6```*I.KO\0=`!@WD/Z5 XM__9.[O[R("H#&&<``(PF0&'L0>L`!B)($!AG#K`\`"]G]+`\`#IG[F#N+PE#? XMZ@(8($U@!!`8$L!*$&;X(%\B!V8F(@QG,K`\`"]G"+`\`#IG`M#%$MAF_%-)8 XM($Q*$&<"DL02V&;\8!!P.K`I__]G!!+\`"\2V&;\0>L`!D/J`AAA``"((FH#G XM&"51`QA.KOZD8`#_=$ZN_Q!P`$ZN_H9)^@>=3J[_?"0`(FH#&$ZN_@@@3")/= XM3J[_''`48-Y)^@>.=&=@Y$GZ!W=83V#60?H']W``+PDB3R0`3J[_'%!/(DU.7 XMKOX@(A=.KO^X2?H'E6"X3J[_?$'Z!W@B;P`$8-1.KO]\0?H'5R)78,@O!4CG] XM`-Q*AF8*(D]!^@>R3J[_'"(7=/Y.KO^L(@!G`/]T+P!!^@)B(CP````@3J[^L XMMD'Z!J0@@")7T\G3R4'Z`?`B:0`0T\G3R2%I`!``1"%I`!0`2"%I`!@`3"%IG XM``0`4"%I`$``5"`7(@!!Z@`4)`A.KO^:(A<N@$ZN_Z8@'V<`_Q(J*@"0;P#_< XM"B(\``(``2\.+'@`!$ZN_R@L7^*(!(```!.((CP```/0L(%N`B`!NH!M`BH`- XM(`5.KOZ`2H!G`/[P)D`B%R0\```#[4ZN_G1*@&<`_KXH22(O``0D/````^Y.M XMKOYT(@!G`/[.*DE#^@7J0I%"J0`$D\E.KO[R2H!F`/Z^(A0D"R8%3J[_UDJ`U XM;0#^X&<``$(F`)/)3J[^\DJ`9@#^G"(52.?PP"!"0_H%JDS1``9P`&`($!C4' XM@.(X4H%1R__V2-$`!DS?`P\@`["J`)!F`/^B0?H`U"%Z!8``!"%Z!7X`%"%ZN XM!7P`&"%Z!7H`'"%Z!7@`($/J`!0A?%9)4E0``"%I````)"%I``0`*"%I`'0`, XM+"%I`'@`,"%I`'P`""%I`(``-"%I`(0`."%I`(@`/"%I`(P`0$'H`%@@.@44( XM(CP```/_L(%K`B`!T<!"&$/I`)!P3A(99P80P5'(__A"&$/Z`$:1R28(MKP`4 XM``2H9`XB%20)3J[_T+"#9@#]XB)-3J[^("),3J[^(")+3J[^($I&9@Q!^@6J) XM0^\`!$ZN_QQ,WSL`*A].=0``````````````````````````````````````_ XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````=7-A9V4Z($QE87)N("AW:6QD8V%R9',I/ XM(%M43UT@*'=I;&1C87)D<R!O<B!D:7(I(%M!3$Q=(%M154E%5%T`0V%N)W0@G XM;W!E;B`E<PH`3W5T(&]F(&UE;6]R>0H`"D5R<F]R(')E861I;F<@)7,*``I%# XM<G)O<B!W<FET:6YG("5S"@!$97-T:6YA=&EO;B!F:6QE("(E<R(@<F5M;W9E7 XM9`H`87)P+FQI8G)A<GD``$923TTL5$\O02Q!3$PO4RQ154E%5"]3``HE<PH`P X<("`@)7,N+@!L96%R;G0@=&\@)7,*```````#\DPO/ X`` Xend Xsize 2728 END_OF_FILE if test 3856 -ne `wc -c <'learn.uu'`; then echo shar: \"'learn.uu'\" unpacked with wrong size! fi # end of 'learn.uu' fi if test -f 'makefile' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'makefile'\" else echo shar: Extracting \"'makefile'\" \(344 characters\) sed "s/^X//" >'makefile' <<'END_OF_FILE' Xexecute s:lattice Xassign env: ram: X;lc >errs -v -r -d -y -b0 virtual.c <- works? Xlc >errs -ccw -v -y -r virtual.c Xtype errs Xgenim2 >errs2 bset.asm -L Xtype errs2 X;genim2 >errs3 learn.asm X;type errs3 X;genim2 >errs4 coal.s X;type errs4 Xblink virtual.o bset.o LIBRARY lib:lc.lib lib:amiga.lib to virtual SC SD ADDSYM Xcopy virtual l:Virtual-Handler END_OF_FILE if test 344 -ne `wc -c <'makefile'`; then echo shar: \"'makefile'\" unpacked with wrong size! fi # end of 'makefile' fi if test -f 'mountlist.vir' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'mountlist.vir'\" else echo shar: Extracting \"'mountlist.vir'\" \(87 characters\) sed "s/^X//" >'mountlist.vir' <<'END_OF_FILE' X XVIR: Handler = L:Virtual X Stacksize = 20000 X Priority = 5 X GlobVec = 1 X# END_OF_FILE if test 87 -ne `wc -c <'mountlist.vir'`; then echo shar: \"'mountlist.vir'\" unpacked with wrong size! fi # end of 'mountlist.vir' fi if test -f 'readme' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'readme'\" else echo shar: Extracting \"'readme'\" \(4020 characters\) sed "s/^X//" >'readme' <<'END_OF_FILE' X X THE VIRTUAL DEVICE BY ANSELM HOOK X --------------------------------- X X This file contains some quick info about the virtual device X XCOMPILING: X---------- X X I compiled under Lattice 5.1, genim2, Blink 5.1, and used CED with X tab stops set to 8,8,8,8 for C code, and 16,8,8,8,8,8 for Machine code X To remake the virtual handler go "execute makefile" X To remake learn or coalesce go "genim2 learn.asm", "genim2 coal.s" X There are some bugs in lattice 5.1 discussed in the file "virtual.c" X X XARCHIVE CONTENTS: X----------------- X X There should be enclosed in this archive: X virtual - virtual-handler X readme - some quick info (this file) X executeme - install vir: ("execute executeme") X mountlist.vir - mountlist junk X learn - virtual file acquisition utility X coal - virtual file coalescing utility X virt_nice.wp - nice user document X virt_mean.wp - project proposal selling document X virt_mine.doc - development "process", read for amusement.... X virtual.c - source (tek folk please read header) X bset.asm - findhandler + other crap X learn.asm - source for acquisition X coal.s - source for coalesce X makefile - (pseudo makefile, just execute don't make!!!) X XGENERAL COMMENTS: X----------------- X X The virtual device is both an ordinary device driver and a virtual Xdevice driver. X X You can "copy" files, to have real instances.... X X You can "learn" files to have virtual instances.... X X * You can determine the difference by going to the backdoor mode (which X is a secret command "virtualoff" as typed right after "cd vir:" :-) X X The real benefit of the virtual device is to copy up *EVERYTHING* in Xyour software universe by virtual reference. X X The device recognizes some secret commands: X Just "cd vir:" and type any of the following: X X "virtualon" X "virtualoff" X "debugon" X "debugoff" X XCREDITS: X-------- X X1) The Dos Handler is Matt Dillons Dos Handler (thanks oh unwitting Matt!). X X There is a new layer of functionality added onto the DOS handler, this X comprises the major portion of my contribution. Some bugs were fixed X also. See "virtual.c" very bottom. X X2) Learn is based on the arp-copy command as "resourced" by yours truly. X X3) Coalesce is based on 'DU' by Stuart Mitchell X X Everything else is by moi, Andy Hook. X X "Well Gee Andy...what did U do????" X X "Well John Doe, its like this you see: X X Christopher Columbus was sitting around a table with a group of men, X and they get to talking, and the men say 'Christopher, we don't X believe that you actually sailed to America'. And Cristopher being the X circumglobular guy that he is says 'You see this egg? Try and make it X stand up by itself without any outsides supports'. So this egg gets X passed around the table...and nobody can make it stand up no matter X how hard they try (for more than a moment). So Christopher gets the X egg back, and he goes THWACK, smashing into the table. One of the X men says 'Gee I could have done that'. To which Chistopher replies, X 'but you didnt'." X X Anyway, if it crashes don't forget your moral obligation to flame as X many people who were (wittingly or unwittingly) involved in the project X as you feel merits the severity of your annoyance! X X X Anselm Hook X Spring 1991 XPS: X--- X This device is by no means complete, if you read the specs in the X "virtual.doc" you'll see where I'm trying to head with this idea, X I'd love to get some help from other programmers in the Amiga X Community. I'd actually like to make it a community supported X project, like the ARP library; such that the responsibility for X its update passes beyond the scope of any single individual. But X there is significant work to be done...for example virtual.c must X be rewritten completely in machine code. X XPPS: X---- X Help! Am trapped in computer game development sweatshop! X Anybody got anything more sane for me to do? X XPPPS: X----- X Chek out my latest at a retailer near U: X "Sword of Sodan for the Sega Genesis" X (By Innerprise and EA) X (Its even got my picture on the inside cover!) END_OF_FILE if test 4020 -ne `wc -c <'readme'`; then echo shar: \"'readme'\" unpacked with wrong size! fi # end of 'readme' fi if test -f 'readme.2' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'readme.2'\" else echo shar: Extracting \"'readme.2'\" \(2434 characters\) sed "s/^X//" >'readme.2' <<'END_OF_FILE' XDate: Sun, 28 Apr 91 17:55:14 MDT XFrom: grahamw@cpsc.ucalgary.ca (William Graham) XSubject: amiga virtual device X XAnselm Hook asked me to submit his virtual device to comp.sys.amiga. XHere is a short poster file which he wrote; a longer doc file is included Xin the uuencoded .lzh archive which I'll send in my next mail message. X X------------------------------------------------------------------------------- X XA VIRTUAL DEVICE DRIVER FOR THE AMIGA Xor "THE POOR MANS FLOPTICAL" X XALPHA APRIL 15th 1991 XBy Anselm Hook X X Its amazing that the Amiga is 5 yrs old and yet still has the best Xoperating system on the market. We all know that the Amiga supports a true Xmultitasking operating system. But the real proof of the pudding is the Xfact that its extensible. The customer supported open architecture of the XAmiga Enviroment makes it possible for me to extend the functionality of Xthe entire system. The Virtual Device is in this sense, made possible by Xthe excellence and forethought that went into the design of the OS. X X Matt Dillion wrote the original File System on which this one is Xbased. X X The Virtual Device is simply another path on your system, like RAM: X(except its called VIR:)....you can copy files to and from it like a RAM disk, Xand like a RAM disk all files are lost when you power off. But what you Xcan also do, which you cannot do with a RAM disk is not copy a file, but just Xaquire a virtual reference to that files real location. This way the VIR: Xdevice can appear to have hundreds of megabytes of files online, but in fact Xit actually goes out and retrieves them from where they are really stored X(sometimes prompting you to insert a disk). So it acts as a *transparent* Xdisk manager as well. You can access VIR: from anywhere, from SID, from DPAINT, Xfrom anyplace you can access any other device (like RAM:, DF0: etc...). X X This is only an Alpha Version, there is no load save facility (although XI have a version here which is struggling to do that). I will be upgrading. X X What I want at this point is to get feedback, inspiration, suggestions, Xand any assistance that you may be willing to provide. X X I can be reached on the AMUC VBBS in Calgary. X X Yours Truly X X Anselm Hook X C/O The Computer Shop X 3515 18th St Sw X Calgary Alberta Canada X T2T 4T9 X FAX: 243 2684 X X X------------------------------------------------------------------------------- X X - William Graham - grahamw@cpsc.ucalgary.ca - VE6UUG - END_OF_FILE if test 2434 -ne `wc -c <'readme.2'`; then echo shar: \"'readme.2'\" unpacked with wrong size! fi # end of 'readme.2' fi if test -f 'virt_nice.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'virt_nice.uu'\" else echo shar: Extracting \"'virt_nice.uu'\" \(14743 characters\) sed "s/^X//" >'virt_nice.uu' <<'END_OF_FILE' Xbegin 666 virt_nice.wp XM@("RLPH*"0E6:7)T=6%L(%=O<FL@4W!A8V4@;W(@5FER='5A;"!7;W)K($)E3 XM;F-H"@K#`"HAPT$@4%)/2D5#5"!04D]03U-!3(,*PP`J(\-B>2!!;G-E;&T@! XM2&]O:X,*PP`J)<-*=6QY(#(@,3DX-X,*PP`J)<-*86X@,B`Q.3DQ@PH*"4%RV XM92!Y;W4@;VYE(&]F('1H;W-E('!E;W!L92!W:&\@:&%S(&UA<W-E<R!A;F0@* XM;6%S<V5S(&]F#69L;W!P>7,_($%N9"!D;V5S;B=T(&MN;W>R(")Q=6ET92!FB XM;W(@<W5R92*S('=H:6-H(&9L;W!P:65S#6-O;G1A:6X@9'5P;&EC871E<R!O@ XM<B!M;W)E(')E8V5N="!V97)S:6]N<R!O9B!F:6QE<S\*"@E)9B!Y;W4G<F4@- XM;&EK92!M92!Y;W4@<')O8F%B;'D@<F5L>2!O;B!T:&4@LB)T:&EN9W,@86QWN XM87ES#6=E="!B:6=G97(BLR!H=6UA;B!A>&EO;2!T;R!F:6YD('1H92!M;W-T^ XM(')E8V5N="!V97)S:6]N(&]F('-O;64-9FEL92!T:&%T('EO=2!A<F4@=V]R; XM:VEN9R!O;BX@($%N9"!Y;W4@<')O8F%B;'D@87!P;'D@82"R(FET<R!F;W(-> XM<W5R92!I;B!T:&4@;F5X="!A<F-H:79E(K,@86QG;W)I=&AM('1O(&9I;F1IA XM;F<@=&AA="!F:6QE+@H*"5=E;&P@=V4@86QL(&MN;W<@86)O=70@=&AE<V4@- XM;&ET=&QE(&AU;6%N(&9O;&EB;&5S+B`@0G5T(%=H>0U)(&%S:RP@9&]N)W0@E XM=V4@;&5T('1H92!C;VUP=71E<B!T86ME(&-A<F4@;V8@86QL('1H:7,_("!"8 XM>2!T:&ES#4D@;65A;B!N;W0@82!D:7-K(&UA;F%G97(@;W(@<V]M92!S=6-H( XM('5N=V]R:V%B;&4@;V1D:71Y+"!B=70@80V4(G9I<G1U86PBE2!E;G9I<F]M` XM96YT+"!A(&MI;F0@;V8@E")S=7!E<B!W;W)K8F5N8V@BE2!W:&5R90UE=F5R( XM>71H:6YG(&%P<&5A<G,@=&\@8F4@=FES:6)L92!A="!O;F4@=&EM92P@LF5V6 XM96X@:68@:70@:6X-87)C:&EV9;,@;W(@;V9F(&]N('-O;64@9FQO<'!Y('-O! XM;65W:&5R92X@($%N9"!Y;W5R(&UE;G1A;`UA;F=U:7-H(&ES(')E9'5C960@2 XM;65R96QY('1O(&9I;F1I;F<@=&AE(&-O<G)E8W0@9&ES:R`M(&%S(&%G<F5ES XM9`UU<&]N(&)E='=E96X@=&AE(&-O;7!U=&5R(&%N9"!Y;W5R<V5L9B!B>2!SG XM;VUE('-I;7!L92!N=6UB97)I;F<-<V-H96UE("T@<F%T:&5R('1H86X@=')Y1 XM:6YG('1O(&1E8VED92!I9B!T:&4@9&ES:R!Y;W4@9&ED(&9I;F0@:7,-<FEGT XM:'0@869T97(@86QL+@H*"4YO=R!H;W!E9G5L;'D@>6]U)VQL(&%G<F5E('=I^ XM=&@@;64@=&AA="!A(%9I<G1U86P@5V]R:R!3<&%C90UW;W5L9"!B92!A(")C[ XM;V]L(&YE871O(B!T:&EN9R!T;R!H879E+"!A;F0@<')O8F%B;'D@9F%N=&%S[ XM=&EC86QL>0UU<V5F=6PN("!!;F0@<')O8F%B;'D@>6]U)VQL('-A>2`B9V5EK XM('=H>2!D:61N)W0@<V]M96)O9'D@=&AI;FL-;V8@=&AA="!B969O<F4_(BX@' XM($)U="!W:&%T(&%B;W5T(&%L;"!U<R!P;V]R('5N9F]R='5N871E(&UI<V9IN XM=',-=VAO(&AA=F4@86QR96%D>2!B=7)I960@;W5R<V5L=F5S(&EN(&$@;6%S$ XM<VEV92!L86YD<VQI9&4@;V8@,R`Q+S(-:6YC:"!F;&]P<&EE<RP@8F5R;F]U) XM;&QI<RP@<WEQ=65S=',@86YD('-U8VAL:6ME/R`@5VAA="!H;W!E(&ES#71H@ XM97)E(&9O<B!U<S\@($%R92!W92!F;W)C960@=&\@9FQI;F<@;W5T(&]U<B!W) XM;VYD97)F=6P@<V]L=71I;VX-=&\@=&AE('EO=6YG97(@9V5N97)A=&EO;B!A# XM;F0@97AC;&%I;2`B9V\@;VX@=VET:&]U="!M92$_(@H*"4QU8VMI;'D@<&5RS XM:&%P<R!N;W0A("!)9B!W92!W97)E('9E<GD@9V]O9"!S;V9T=V%R90UD97-IH XM9VYE<G,@=V4@=V]U;&0@;6%K92!O=7(@5FER='5A;"!7;W)K(%-P86-E(&ENG XM('-U8V@@82!W87D@=&AA=`UI="!N;W0@;VYL>2!M86EN=&%I;F5D('1H:7,@% XM<F5P<F5S96YT871I;VYA;"!E;G9I<F]M96YT+"!B=70-8V]U;&0@86-T=6%L\ XM;'D@=6YS;F%R92!T:&4@9V]R9&EA;B!K;F]T('=E)W9E('=O=6YD(&]U<G-E; XM;'9E<PUI;G1O+@H*"51H92!H=6UB;&4@<V-H96UE('=H:6-H($D@<W5B;6ETO XM(&9O<B!Y;W5R(&%P<')O=F%L(&AA<PUT:')E92!P87)T<RP@=&AE('9I<G1U- XM86P@=V]R:W-P86-E($DG=F4@86QR96%D>2!M96YT:6]N960L('1H90UI9&5AY XM(&]F(&$@(F9L870B('=O<FMS<&%C92!W:&EC:"!I(&)R:65F;'D@=&]U8VAEA XM9"!U<&]N('=H96X@20UU<V5D('1H92!W;W)D(")A<F-H:79E(B!A8F]V92`HW XM86YD('=I;&P@8VQA<FEF>2!L871E<BDL(&%N9`UF:6YA;&QY(&%N9"!M;W-TG XM(&EM<&]R=&%N=&QY('1H92!I9&5A(&]F(&%U=&]M871I8R!C;VQL871I;VX@8 XM86YD#7-O<G1I;F<@=VAI8V@@22!W:6QL(&YO=R!G<F%C969U;&QY('-T97`@X XM:6YT;RX*"@H*W&H```````#<C`E%86-H(&1I<VL@;W(@:&%R9&1R:79E(")K* XM;F]W;B(@8GD@=&AE('-Y<W1E;2!W;W5L9"!H879E(&$-<&AY<VEC86P@;G5MO XM8F5R(&%S<V]C:6%T960@=VET:"!I="X@(%1H:7,@;G5M8F5R('=O=6QD(&)ES XM(&=I=F5N#6]U="!B>2!T:&4@3W!E<F%T:6YG('-Y<W1E;2!A;F0@=V]U;&0@& XM8F4@=6YI<75E('1O(&5V97)Y(&1I<VL@86YD#65V97)Y(&EN<W1A;F-E(&]F, XM('1H92!6:7)T=6%L(%-Y<W1E;2!I='-E;&8N("!&;W(@97AA;7!L92!I9B!T8 XM=V\-9G)I96YD<R!E86-H(&AA9"!A(&-O<'D@;V8@=&AE('9I<G1U86P@<WEST XM=&5M(')U;FYI;F<L(&%N9"!T:&5Y#6)O=&@@<VAA<F5D(&%C8V5S<R!T;R!AG XM(&)E<FYO=6QL:2P@=&AE(&)E<FYO=6QL:2!D:7-K<R!W;W5L9"!B90UK;F]WA XM;B!B>2!D:69F97)E;G0@;G5M8F5R<R!O;B!E86-H('-Y<W1E;2X@(%1H92!NL XM=6UB97(@=V]U;&0@8F4@80UC;VUP;W-I=&4@;V8@86X@86)S;VQU=&4@240@> XM*'1H:7,@<&%R="!W;W5L9"!B92!S:&%R960@8GD@8F]T:`US>7-T96US*2!A7 XM;F0@82!S>7-T96T@<W!E8VEF:6,@240@*'!R;V)A8FQY('1H92!U<V5R<R!O0 XM<@UC;VUP=71E<G,@<&5R<V]N86P@;F%M92DN"@H)02!U<V5R(&-O=6QD(&%C5 XM8V5S<R!S;VUE(&UE9&EA(&1I<F5C=&QY+"!O<B!T:&4@=7-E<B!C;W5L9`US& XM<&5C:69I8V%L;'D@87-K('1H96ER('-Y<W1E;2!T;R`B8V]N<W5M92(@=&AEG XM(&UE9&EA.R!T;R!B=6EL9"!U<`UA(&UE;G1A;"!I;6%G92!O9B!T:&%T(&UE] XM9&EA)W,@8V]N=&5N=',L(&%N9"!T;R!C:&5C:R!F;W(-<F5D=6YD86YC:65S? XM(&%G86EN<W0@86YY(&]F(&ET<R!P<F5V:6]U<VQY(&5S=&%B;&ES:&5D(&UEP XM;6]R:65S#2AR971A:6YE9"!I;B!A(&UE9V$M9&%T86)A<V4@<V]M97=H97)E3 XM(&EN("IA8W1I=F4J(&UE9&EA#7)E<V5R=F5S*2X*"@E7:&5N('1H92!S>7-T= XM96T@8V]N<W5M97,@=&AE(&-O;G1E;G1S(&]F('-O;64@;65D:6$@*&QI:V4-Q XM9&8P.B!D:#`Z(&1I,#HN+BXI(&ET(&1O97,@<V]M92!V97)Y('-P96-I86P@W XM=&AI;F=S+B`@270@8V]L;&5C=',-86QL('1H92!S=7!E<F9I8VEA;"!I;F9O; XM<FUA=&EO;B!A8F]U="!A(&9I;&4@=&AA="!I="!C86XL('1H90UF:6QE<R!N1 XM86UE+"!A;GD@8V]M;65N=',L(&%N>2!D871E<W1A;7`L('1H92!F:6QE('-I- XM>F4L('!E<FAA<',-979E;B!T:&4@9FEL97,@<&AY<VEC86P@8FQO8VL@861D> XM<F5S<V5S(&]N('1H92!M961I82P@=&AE(&UE9&EA#69R;VT@=VAE;F-E(&ET8 XM(&-A;64N("!!<R!W96QL(&ET(&)U:6QD<R!U<"!A('-E<FEE<R!O9B!C:&5CE XM:W-U;7,-9F]R(&5V97)Y(#(U-B!B>71E<R!O<B!S;R`H9&5P96YD:6YG(&]N, XM('1H92!F:6QE('-I>F4I(&%S('=E;&P@87,-82!V97)Y('5N:7%U92!E>'1R/ XM82UL;VYG(&UA<W1E<B!C:&5C:W-U;2!U<VEN9R!S;VUE(&MI;F0@;V8-=6YL. XM:6ME;'DM=&\M8F4M<F5P96%T960@8WEC;&EC+7)E9'5N9&%N8WDM8VAE8VMSH XM=6T@<V-H96UE("A#4D,I+@H*"4EF('1H92!M961I82!H87,@;F\@9FEL97,@G XM*&9O<B!E>&%M<&QE(&$@9V%M92!L:6ME(%9/4E1%6"D-=&AE;B!I="!J=7-T+ XM(&MN;W=S('1H92!E;G1I<F4@9&ES:R!A<R!A('-I;F=L92!T:&EN9RP@86YDU XM('!E<FAA<',-8G5I;&1S('5P('-O;64@;W)I9VEN86P@:6YF;W)M871I;VX@7 XM9F]R('1H92!E;G1I<F4@;65D:6$@87,@=V5L;"X*"@E!<R!W96QL('1H92!/: XM<&5R871I;F<@4WES=&5M('=I;&P@871T96UP="!T;R!P97)F;W)M(&$-(G=HC XM871I<R(@;VX@9FEL97,L('1R>6EN9R!T;R!P96YE=')A=&4@87)C:&EV97,LX XM(&%N9"!D971E<FUI;F4-=&AE(&YA='5R92!O9B!P87)T:6-U;&%R(&9I;&5SL XM("AS=6-H(&%S($E&1BP@3%I7+"!4249&+"!2249&+`U!3DE-+"!!4D,L(%I/* XM3RP@5T%24"DN("!)="!W:6QL('1R96%T('1H92!C;VYT96YT<R!O9B!A;B!A5 XM<F-H:79E#6%S(&EN9&EV:61U86P@9FEL97,L(&AO=V5V97(@<VAO=6QD(')E0 XM=&%I;B!T:&4@<F5L871I;VYA;"!L:6YK86=E#71O('1H96ER(&]W;F5R+@H*, XM"4]N8V4@:70@:&%S(&)U:6QT('5P(&%L;"!T:&4@:6YF;W)M871I;VX@86)O^ XM=70@=&AE(&9I;&5S(&ET#71H96X@<V5A<F-H97,@:71S(&UE9V$M9&%T86)A8 XM<V4@9F]R(&%N>2!D=7!L:6-A=&4@:6YS=&%N8V5S.R!A<PUV97)I9FEE9"!BV XM>2!T:&4@;6%S=&5R(&-H96-K<W5M+@H*"4%D9&ET:6]N86QL>2!B>2!U<VEN\ XM9R!T:&4@<W5B(&-H96-K<W5M<R!I="!P97)F;W)M<R`@80UC;V%R<V4@(F1I= XM9F9E<F5N8V4B(&]N(&%L;"!T:&4@9FQE9&=L:6YG(&9I;&5S+B`@5&AE(")D+ XM:69F(B!I<PUU<V5D('1O(&-H96-K(&9O<B!M;W)E+7)E8V5N="!F:6QE<R`H5 XM8F%S960@;VX@=&AE(&EN9F%M;W5S#2)T:&EN9W,@9W)O=R(@87AI;VTI(&%NR XM9"!A<R!W96QL(&ET(&-H96-K<R!F;W(@;&EN:RUV:7)U<V5S+@H*"51H92!UN XM<V5R(&-A;B!N;W<@96YT97(@:&ES(%9I<G1U86P@5V]R:R!3<&%C92!A;F0@[ XM<V5E('1H:7,-;65D:6$@<')E<V5N=&5D('1H97)E+B`@5&AE('5S97(@;6%Y9 XM(&5N=&5R('1H92!P87)T:6-U;&%R(&UE9&EA#6%N9"!S964@86QL('1H92!FS XM:6QE<R!T:&5R96EN+B`@268@=&AE(&9I;&5S(&%R92!D=7!L:6-A=&5S(&]F( XM#69I;&5S(&5L<V5W:&5R92!O;B!T:&4@<WES=&5M('1H96X@=&AE>2!W:6QLH XM(&=R87!H:6-A;&QY(&9L87-H+`UO<B!W:&%T979E<BX*W&H```````#<C`E)V XM9B!A(&9I;&4@:7,@;6]R92!R96-E;G0@;W(@870@;&5A<W0@<V]M96AO=R!RZ XM96QA=&5D('1O#7-O;64@9FEL92!A;')E861Y(&EN('1H92!M96=A+61A=&%BP XM87-E('1H96X@:70@86QS;R!A<'!R;W!R:6%T96QY#7-T86YD<R!O=70N"@H)= XM3F]W(&-O;65S('1H92!F=6X@<&%R="$@(%1H92!U<V5R(&-A;B!M;W9E('1H2 XM92!F:6QE<R!A<F]U;F0-:6X@=&AE:7(@=FER='5A;"!E;G9I<F]M96YT+"!MH XM86MI;F<@=&AE:7(@96YV:7)O;65N="!L;V]K#2IE>&%C=&QY*B!T:&4@=V%YO XM('1H97D@=V%N="P@=VET:&]U="!A8W1U86QL>2!S:'5F9FQI;F<@9FEL97,-Y XM87)O=6YD(&]N('1H92!P:'ES:6-A;"!M961I82X@665T('=H96X@82!F:6QE7 XM(&AA<R!T;R!E>&5C=71E+"!O<@UC86QL('5P;VX@<F5S;W5R8V5S('1H92!P6 XM<F]C97-S(&]F(&-O;FYE8W1I;F<@=&AE(&AU;6%N('5S97)S#6UE;G1A;"!L2 XM:6YK86=E<R!T;R!P:'ES:6-A;"!M961I82!L;V-A;&ET:65S(&ES(&AA;F1LN XM960-9FQA=VQE<W-L>2!B>2!T:&4@;&]W(&QE=F5L<R!O9B!T:&4@;W!E<F%T6 XM:6YG('-Y<W1E;2X@(%!O<W-I8FQY"F%S:VEN9R!T:&4@=7-E<B!F;W(@82!CX XM97)T86EN(&YU;6)E<F5D(&1I<VL@:68@=&AA="!I<R!R97%U:7)E9"X*"@E,4 XM970@;64@:G5S="!F:6YI<V@@=7`@=&AE(&ED96$@;V8@1FQA="!B969O<F4@Z XM22!G;W1O#6=E;F5R86P@8V%V96%T<RX*"@E&;&%T(&UE86YS('1H870@979E+ XM<GET:&EN9R!I<R!P97)C96EV960@=&\@97AI<W0@870@=&AE('-A;64-;&5V8 XM96P@:6X@=&AE('9I<G1U86P@<W!A8V4L('1H92!U<V5R(&-A;B!O<&5R871E* XM(&]N(&$@9FEL92P-<F5A9"]W<FET92]E9&ET+V1E;&5T92!R96=A<F1L97-SP XM(&]F(&EF(&ET(&ES(&EN(&%R8VAI=F4@;W(@;F]T+B`-5&AE('-Y<W1E;2!M6 XM87D@;65N=&EO;B!T;R!T:&4@=7-E<B!T:&%T('1H92!F:6QE(&ES(&=O:6YG9 XM('1O(&)E#7)E+6%R8VAI=F5D('-O('1H870@=&AE('5S97(@8V%N(&%B;W)T> XM('1H92!P<F]C961U<F4@:68@=&AE>2!A<F4-:6X@82!H=7)R>2`H86YD(&IUD XM<W0@<W1O<F4@=&AE(&9I;&4@=6YC;VUP<F5S<V5D*2!;;V8@8V]U<G-E#69I3 XM;&5S('1H870@87)E(&YO="!N;W)M86QL>2!I;B!A<F-H:79E(')E;6%I;B!D% XM9:EA<F-H:79E9%TN"@H)5&AE<F4@87)E('-O;64@8V%V96%T<SH*"@E7:&5N0 XM(&%D9&EN9R!A(&YE=R!D:7-K('EO=2!A;F0@=&AE(&-O;7!U=&5R(&UU<W0@& XM86=R964@=&\@80IN=6UB97(@9F]R('1H870@9&ES:RP@=&AE(&-O;7!U=&5RZ XM('=I;&P@<W5G9V5S="!A(&YU;6)E<BP@8F%S960-;VX@=&AE(&1A=&5S=&%MM XM<"P@=6YI<75E('!R;W!E<G1I97,@;V8@=&AE(&1I<VLL('1H92!C;VUP=71E+ XM<G,-;F%M92!O<B!Y;W5R(&YA;64@86YD('-U8VAL:6ME+B`@66]U(&UU<W0@# XM=&AE;B!P:'ES:6-A;&QY('=R:71E#75P;VX@=&AE(&1I<VL@=&AE(&YU;6)EO XM<B!T;R!W:&EC:"!Y;W4@:&%V92!B;W1H(&%G<F5E9"X@($EN('1H:7,-87-P, XM96-T('1H92!/<&5R871I;F<@<WES=&5M(&1O97,@86-T(&QI:V4@82!D:7-K? XM(&UA;F%G97(@+2!B=70@=&\-<V%Y('1H870@:7,@=&\@9&5N>2!I=',@<F5AX XM;"!A<'!L:6-A=&EO;BX*"@E4:&4@<')O8V5S<R!O9B!B=6EL9&EN9R!U<"!TG XM:&4@;65G82UD871A8F%S92!I<R!P<F]B86)L>0UG;VEN9R!T;R!B92!P86ENS XM9G5L;'D@<VQO=RP@8G5T('EO=2!P<F]B86)L>2!S:6UP;'D@8V%N)W0@979EK XM;@UC;VYC96EV92!O9B!J=7-T(&AO=R!M=6-H('1I;64@>6]U('=A<W1E(&]TP XM:&5R=VES92X@($%N9"!I;@UC;VUP87)I<V]N('1O('1H870@:70@:7,@8FQA3 XM>FEN9VQY(&9A<W0N"@H)5&AE('-Y<W1E;2!P<F]B86)L>2!W;W5L9"!F965L> XM(&UO<W0@870@:&]M92!O;B!A(&AA<F0M9')I=F4L#69R;VT@=VAE;F-E(&ETI XM<R!P<F]B:6YG('1E;G1A8VQE<R!C;W5L9"!S869E;'D@97AT96YD+B`@($1IE XM<VL-=7-E<G,@=V]U;&0@8V5R=&%I;FQY(&AA=F4@=&\@:&%V92!A="!L96%S8 XM="!O;F4@9')I=F4@=VAE<F4@=&AE#6UA<W1E<BUD:7-K(&-O=6QD(&%L=V%Y2 XM<R!S:70@<W5C:"!T:&%T('1H92!M96=A+61A=&%B87-E(&-O=6QD(&)E#75P4 XM9&%T960@<V%F96QY+@H*"51H97)E(&ES;B=T(&%N>2!R96%S;VX@=VAY('1HR XM92!M96=A+61A=&%B87-E(&-O=6QD;B=T(&)E#6)R;VME;B!U<"!I;G1O('-M5 XM86QL97(@<V5G;65N=',@*&]R(&1U<&QI8V%T92!I;G-T86YC97,@<W5C:"!A6 XM<PUI;B!A(&YE='=O<FLI+@H*"51H92!6:7)T=6%L(%=O<FL@4W!A8V4@<VAO7 XM=6QD(&)E(&%B;&4@=&\@86QL;W<@=&AE('5S97(@=&\-=V]R:R!W:71H(&%N` XM>2!S<&5C:6%L(&9O<FUA="!I;B!A(&UO9'5L87(@=V%Y+"!T:&5R92!S:&]UC XM;&0@8F4@86X-249&('9I97=E<B!O;B!T87`L(&5D:71O<G,@*&QI:V4@140LD XM($-%1"P@2$5$+"!74"D@86YD('9A<FEO=7,-87)C97)S(&%N9"!D92UA<F-ER XM<G,N"MQJ````````W(P)5&AE(%9I<G1U86P@5V]R:R!3<&%C92!E>&ES=',@K XM870@82!L;W<@;&5V96P@;V8@=&AE(&1I<VL-;W!E<F%T:6YG('-Y<W1E;2X@* XM($ET('=O=6QD('!H>7-I8V%L;'D@:G5S="!B92!A;F]T:&5R(%)!33H@;&EK" XM90UD979I8V4L(&5X8V5P="!M=6-H(&UO<F4@;6%G:6-A;"X@(%1H97)E(&ESG XM(&$@=FES:6)L92!F<F]N="!E;F0-:G5S="!U<V5D('1O('-A>2`B8V]N<W5M: XM92(@<&]S<VEB;'D@:6YS:61E(&%N9"!A;&]N9R!W:71H(&$-=&]O;'-P86-EP XM(&QI:V4@=&AE(").95A4(B!F96%T=7)E<RX*"@E4;R!R;W5N9"!O=70@=&AE7 XM('!A8VMA9V4@=&AE<F4@<VAO=6QD(&)E('-P96-I86P@<W5P<&]R="!F;W(-L XM=&AI;F=S('1H870@87)E(&ER<FET871I;F<@8W5R<F5N=&QY+B`@4W5C:"!A= XM<R!P<F]P97(@87)C:&EV86P-8F%C:W5P+"!W:&5R92!E86-H(&9L;W!P>2!OY XM<B!M961I82!S=6)S970@;V8@86X@87)C:&EV92!C;VYT86EN<PUA(&AO;&]G4 XM<F%P:&EC(&EM86=E(&]F('1H92!C;VYT96YT<R!O9B!T:&4@96YT:7)E(&%RN XM8VAI=F4@+2!S=6-H#71H870@=&AE(&5N=&ER92!A<F-H:79E(&ES;B=T(&QOW XM<W0@9F]R(&QA8VL@;V8@9&ES:R`C,2$*"@E!<R!W96QL('1H92!E;G9I<F]M$ XM96YT('-H;W5L9"!B92!A8FQE('1O('1E;&P@>6]U('=H97)E('1H90HJ;&%RQ XM9V5S="H@9FEL97,@87)E(&%N>7=H97)E("AH;W<@;V9T96X@:&%V92!Y;W4@> XM<&EC:V5D('EO=7(@=V%Y#71H<F]U9V@@475A<G1E<B!"86-K('1R>6EN9R!T$ XM;R!F:6YD(&%N9"!D97-E;&5C="!T:&4@;&%R9V5S=`UF:6QE<S\I+@H*"4%NA XM9"!O9B!C;W5R<V4@=VAE;B!Y;W4@8G5Y('EO=7(@1FQO<'1I8V%L(%)E860O! XM5W)I=&4@*&]R#4AO;&]3=&]R92$I('EO=2!C86X@87-K('1H92!S>7-T96T@> XM=&\@=')A;G-F97(@=&\@>6]U<B!N97<@<WES=&5M#6$@<F5A;"!C;W!Y(&]F+ XM(&5V97)Y=&AI;F<@=VAI8V@@<&5R9F5C=&QY(&UI;6EC<R!Y;W5R('9I<G1UQ XM86P-8V]P>2X@(%1H96X@>6]U(&-A;B!M86ME(&%N(&5X=')E;65L>2!L87)G3 XM92!B;VYF:7)E(&%N9"!B=7)N(&%L;`UY;W5R(&]L9"!D:7-K(&=L965F=6QLC XM>2P@=VET:&]U="!T:&4@<VQI9VAT97-T(&YA9V=I;F<@9&]U8G0N"@H)5&AI: XM<R!S>7-T96T@:&%S('-O;64@=F5R>2!N:6-E(&%D=F%N=&%G97,L(&UO<W1L& XM>2!J=7-T(&$-<F5C87`@;V8@=&AE('1H<F5E('!R:6UE(&9E871U<F5S.@K`& XM"DH42L`*,2D@5FER='5A;"`M(&)L87-T('1H<F]U9V@@=&AE(&)O='1L96YE? XM8VL@;V8@<&AY<VEC86P*("`@;65D:6$L('!H>7-I8V%L(&QO8V%L:71I97,N* XM"@HR*2!/<F=A;FEZ871I;VYA;"`M('-O;'9E('EO=7(@:&%I<BUP=6QL:6YG" XM(&1I<VL*("`@<V]R=&EN9R!A;F=U:7-H(&9O<F5V97(A"@HS*2!&;&%T("T@( XM87)C:&EV97,@87)E(&IU<W0@86YO=&AE<B!F;W)M(&]F(&QO8V%L:71Y+`H@$ XM("!B<FEN9R!T:&4@9FEL92!C;VYT96YT<R!U<"!T;R!T:&4@=FER='5A;"!L= XM979E;"!A<PH@("!W96QL+@H*P!1*"DK`"D$@8V]U<&QE(&]F(&]T:&5R(&9E' XM871U<F5S.@H*"51H97)E(&ES('1H92!A<F-H:79A;"!B86-K=7`@87,@22!MJ XM96YT:6]N960@8F5F;W)E+`UB87-I8V%L;'D@86YY=&AI;F<@8F5T=&5R('1HZ XM86X@=VAA="!I<R!O=70@=&AE<F4@86QR96%D>2!W:6QL(&1O#79E<GD@=V5L7 XM;"X@($D@:6UA9VEN92!A(&MI;F0@;V8@875T;VUA=&5D(&)A8VMU<"!A<F-H1 XM:79A;"!S>7-T96T-=VET:"!A('-M87)T97(@9&ES:R!F;W)M870@;W)G86YIM XM>F%T:6]N("AH;VQO9W)A<&AI8R!I;6%G92!O9@UD:7)E8W1O<GD@;V8@86QLU XM(&1I<VMS(&]N(&5A8V@@9&ES:R!W:&5N('!O<W-I8FQE*2X*"@E4:&5R92!S) XM:&]U;&0@8F4@82!F=6QL(&-O;7!L96UE;G0@;V8@3F]R=&]N(%5T:6QI=&EEI XM<R!T>7!E#61I<VL@=&]O;',@=&\@9V\@=VET:"!T:&4@<&%C:V%G92X*"@E4? XM:&5R92!I<R!T:&4@=&]O;'-P86-E(&]F(&-O=7)S92P@=VAI8V@@86QL;W=SB XM(&%C8V5S<R!T;PUC;VUM;VYL>2!U<V5D('1O;VQS+"!A)VQA($YE6%0L(&%NM XM9"!A8V-E<W,@=&\@<W!E8VEA;"!F=6YC=&EO;G,-:6X@=&AE('9I<G1U86P@_ XM9&5V:6-E+@H*"51H97)E('=I;&P@8F4@;65D:6$@8F%C:W5P+"!I93H@8V]P> XM>7!R;W1E8W1E9"!M961I82!E=&,N+BX*W&H```````#<C`I3;VUE($UI;&1LQ XM>2!496-H;FEC86P@0V]M;65N=',Z"@H)5&AE('-Y<W1E;2!C;VYS:7-T<R!OL XM9B!T=V\@<&%R=',Z"@H@"3$I(&$@9&5V:6-E(&1R:79E<B!V:7-I8FQE('1O) XM('1H92!#3$D@86YD(%=/4DM"14Y#2"!A<R!A"B`)("`@9&5V:6-E('9E<GD@M XM;75C:"!L:6ME(%)!33H*"@DR*2!A(")T;V]L<W!A8V4B(&5X86-T;'D@;&EK- XM92!O;B!T:&4@3F585"!W:&EC:"!P<F]G<F5S<V5S"@D@("!D;W=N('1H92!R` XM:6=H="!O<B!L969T('-I9&4@;V8@=&AE('-C<F5E;B!A;F0@<W1O<F5S"@D@Y XM("!W:&%T979E<B!F<F5Q=65N=&QY('5S960@<V-R:7!T<R!A;F0@97AE8W5T/ XM86)L97,@=&AA=`H)("`@=&AE('5S97(@=VES:&5S+@H*"51H92!T;V]L<W!AL XM8V4@86QS;R!C;VYT86EN<R!T:&4@9V%D9V5T(")C;VYS=6UEJ6UE(B!W:&ECG XM:`UT96QL<R!T:&4@<WES=&5M('1O(&%D9"!S;VUE(&UE9&EA('1O(&ET<R!I[ XM;G1E<FYA;"!M96=AJ61A=&%B87-E+@H*"45V97)Y=&AI;F<@22=V92!S86EDH XM(&AE<F4@:&%S(&)E96X@06UI9V$@4W!E8VEF:6,@9F]R#6-L87)I='D@;V8@@ XM97AA;7!L92X@(%1H97)E(&ES(&YO(')E87-O;B!W:'D@=&AI<R!T;V]L(&-O3 XM=6QD(&YO=`UB92!M861E(&%V86EL86)L92!O;B!T:&4@36%C:6YT;W-H+"!)[ XM0DTL($%T87)I+"!.95A4+@H*02!L:71T;&4@8FET(&%B;W5T('1H92!A=71HU XM;W(Z"@H)06YS96QM($AO;VL@:7,@82!R871H97(@;F]M861I8R!F<F5E+6QAC XM;F-E('!R;V=R86UM97(@=VAO#6AA<R!B965N('%U:71E(&)U<VEL>2!O8V-U- XM<&EE9"!S:6YC92`Q.3<X('=R:71I;F<@(FIU<W0@86)O=70-979E<GET:&EN? XM9R!F<F]M($]I;"!0871C:"!3;V9T=V%R92!T;R!!<F-A9&4@1V%M97,B('1O/ XM('!R;W!O<V%L<PUV97)Y(&UU8V@@;&EK92!T:&ES(&]N92P@=&AA;FL@>6]U! XM('9E<GD@;75C:"X*"@H*66]U<G,@5')U;'D*06YS96QM($AO;VL*"F]F(%-O1 X/9G1W87)E($%L8VAE;7D*V X`` Xend Xsize 10500 END_OF_FILE if test 14743 -ne `wc -c <'virt_nice.uu'`; then echo shar: \"'virt_nice.uu'\" unpacked with wrong size! fi # end of 'virt_nice.uu' fi if test -f 'virtual.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'virtual.uu'\" else echo shar: Extracting \"'virtual.uu'\" \(19321 characters\) sed "s/^X//" >'virtual.uu' <<'END_OF_FILE' Xbegin 666 virtual XM```#\P`````````"``````````$```H;```!B@```^D```H;3E7Z0$CG/SI)( XM^0````!P!"M`_NPY?``!!@J1R"E(``@I2``$<``I0`8&(&W^["E0!:PO`$ALX XM``Q.NB?^*4`%L$*73KHGC"E`!:`@0-#\`%PNB$ZZ)[P@;`6@T/P`7"Z(3KHG@ XMFE!/($`F:``**T#_]DJL!;!G``"$(FP%L"!I`"(@*``8Y8!(>``L*T#^Z&$`X XM$V183R1`("L`'.6`*4`%I"E*!:AR`B5!``0@;`6@(DC2_`!<)4D`""5\1$]3@ XM```@(FP%I"!I`"@E2``H(&W^Z"2H``0@"N2`(4``!"!L!:#0_`!<(FP%I"-(. XM``AP_R=```QP`"=``!!@#D*K``PO"V$`$H)@`!'V+PMA`!)X6$]*;`8*9@1AK XM`!EZ(&P%I"`H`"CE@'(`($`2$$AL!>XK0/[H.T'^YDZZ'9A(;`7Z3KH=D$AX. XM`#I(;`6T3KH<8#E\``$%RDAL!>).NB6F2&P%UDZZ'6XP+?[F2,!2@$AX``$O+ XM`$ZZ)=0I0`7`(&W^Z%*(,"W^YDC`+H`O+`7`+PA.NB;`(&P%P#`M_N8B2-+`& XM0A%(P"ZL!<`O`$AL`!AA`!FZ3^\`,!M\``'_]4HM__5G`!!@(&P%H-#\`%POM XM"$ZZ)D)83R!L!:#0_`!<+PA.NB8>6$\K0/_V9](@0"9H``IP_R=```Q"JP`02 XM?@`O*P`(80`6YBZ`+RL`'"\K`!@O*P`4+RL`"$AL`"YA`!E.3^\`&"`K``A;1 XM@&<``*17@&<`#'13@&<`#Z1=@&<`#2I3@&<`"RI3@&<`#DQ3@&<`#XQ3@&<`# XM#-Q3@&<`#X!3@&<`#3I3@&<`"\Q3@&<`"*Y3@&<`![A3@&<`"BQ3@&<`"AI3- XM@&<`#U93@&<`#613@&<`"HA5@&<`#TAR,Y"!9P`#>%N`9P`$2`2````#BV<`U XM#RQR"I"!9R!3@&<<4X!G&%.`9P`&'%.`9P`&?F``#PY"+?_U8``/"B\K`!AA] XM`!12*T#^X)'(0JW^T$AM_O4O*P`<*TC^U"M(_MAA`!%*2&W^]4AL`%1A`!ADZ XM2&P`6DAM_O5.NB!P3^\`'$J`9@HY?``!!@IA`!?X2&P`9$AM_O5.NB!24$]*[ XM@&8(0FP&"F$`%U9(;`!L2&W^]4ZZ(#A03TJ`9A!(;`!V80`8$EA/<`$I0```W XM2&P`ADAM_O5.NB`64$]*@&8.2&P`DF$`%_!83T*L``!(;?[<2&W^]4AM_N!AK XM`!/*3^\`#"M`_N1*@&<``:IR`2!`LF@`%F8(/CP`U&```CXT*``82D)J"#X\; XM`,I@``(N#*L```/M``AF``%*4F@`&$JL``!G``&J0^@`(B\)80`0NDAX`E@O- XM`$AM_'AA`!D@3^\`$"M`_'!F#DAL`*)A`!=H6$]@``%Z2&W\T$AL`,AA`!=6? XM2&W\O"\L!;!(;?S03KH:#$_O`!0K0/QT2H!F'DAM_-!(;`#F80`7+E!//CP`! XMS2!M_N13:``88``!H"!`+R@`"$AM_-!(;`#\80`7"B!M_'0K:``(_MA(>``P@ XM2&W\0"\+3KHCVD*M_%A(;?S03KH>VAM`^D!(>`'^2&W\T$AM^D%.NAZB0>WZI XM0"`(Y(`K0/Q<+JW^V$AM_$!A`!?V3^\`+$J`9A`^/`#-(&W^Y%-H`!A@``$F9 XM2&P!%F$`%II83TJM_$QF$"XM_%`@;?[D4V@`&&```09(;`$J80`6>B`K`!3E< XM@")`(&D`)"Z(2&P!.BM(_M1A`!9@4$]P`2M`_M!@;"!M_N0P*``82D!O!CX\] XM`,I@6@RK```#[@`(9A`O"&$`$%!83R!M_N1"J``:4V@`&&`Z("W^X&8(/CP`\ XMTF```)H,JP```^X`"&8>+RW^W$AX__\O`&$`#XI/[P`,($!3:``8*T#^Y&`$+ XM/CP`S4I'9F@O/``!``%(>``@3KHAN"(K`!3E@2!!(4``)"!`(6W^Y``((FW^F XMY-+\`"(NB2M`_LQA``[D4$\@;?[,(4``#$JM_M!F#)/)(4D`&"%)`!Q@#"%M+ XM_M@`&"%M_M0`'"\(2&P%[DZZ(9!03TAL!>YA``ZH6$]*@&8`"^)(;`7Z80`.$ XMF%A/2H!F``O20BW_]6``"\H@:P`4*V@`#/[@*VL`&/[<+"L`'"\++PA(;`%.O XM*TC^Y&$`#-!/[P`,2H!F``N<2H9G``",2JW^X&<``(0@;?[D("@`%"!M_N`B. XM*``,DH`J`;R%;"8B;?[@(&D`"-'`+P8O+?[<+PA.NB'43^\`#"!M_N3=J``4$ XM?`!@M")M_N`@:0`(T<`O!2\M_MPO"$ZZ(:Z<A=NM_MP@;?[@("@`#"!M_N319 XMJ``00J@`%"ZM_N!A``VZ3^\`#"M`_N!@`/]R(&W^Y"%M_N``#"`K`!R0AB=`& XM``Q@``KT(&L`%"MH``S^X"MK`!C^W"MK`!S^V"\++PA(;`%4*TC^Y&$`"_A/8 XM[P`,2H!F``K$("W^V&<``:)*K?[@9P``Y"\`(&W^X"\H``Q(;`%:80`4+D_OS XM``P@;?[D("@`%"!M_N`B*``,)`&4@$CM``3^U"8M_MBV@FQ&T(.R@&0,2&P!9 XM<&$`$_I83V`@(FW^X"!I``@B;?[DT>D`%"\#+P@O+?[<3KH@PD_O``P@+?[8X XM(&W^Y-&H`!1"K?[88`#_=-""LH!D#$AL`7YA`!.T6$]@(")M_N`@:0`((FW^5 XMY-'I`!0O`B\(+RW^W$ZZ('Q/[P`,("W^U-&M_MR1K?[8(&W^X"`H``P@;?[DW XMT:@`$$*H`!0O+?[@80`,?EA/*T#^X&``_Q!(>``!2'@`$$ZZ'S)(>``!+RW^0 XMV"M`_N!.NA\B3^\`$"!M_N`A0``(9V`@+?[8(4``#")M_N0@:0`(T:@`'M&IV XM`!!"J0`4T:P&!B!I``A#Z``B+RW^X"\)3KH?*B!M_N`NJ``,2&P!C&$`$O(N: XMK?[8(&W^X"\H``@O+?[<3KH?QD_O`!1"K?[88"1(>``0+PA.NA["+JW^V$AL? XM`9QA`!*^3^\`#"!M_N1"J``48`A"K?[@8`#^6B`K`!R0K?[8)T``#"!M_N0AO XM;?[@``Q@``D"(&L`%"MH``C^X"\++PA(;`'**TC^Y&$`"A(NK?[D3KH>K$AXK XM`"`O+?[D3KH>6$_O`!0@;?[@4V@`&&P$0F@`&$AL!>YA``MX6$]*@&8`"+)(" XM;`7Z80`+:%A/2H!F``BB0BW_]6``")H@:P`4+PLO"$AL`=`K2/[D80`)L$_OG XM``Q*@&8`"'P@;?[D("@`%"(H`!`D`=2`)T(`#"@K`!@@*P`<9@HB*``0TJ@`I XM%-B!4X!F""!H``C8J``>2H1K#B)M_N0@:0`(N*@`'F,(/CP`VV``""YP`"!MV XM_N0A0``4(4``$"!H``A#Z``B+PEA``K06$\K0/[@2JW^X&="(&W^Y"`H`!`@M XM;?[@(B@`#"0!U("TA&,.)`24@")M_N0C0@`48!P@*``,(&W^Y-&H`!`O+?[@K XM80`*;EA/*T#^X&"X(&W^Y"%M_N``#&``![8@*P`8Y8`O*P`4*T#^Y&$`#/18A XM3RM`_N!R_R!`LF@`%F8(/CP`U&``!XQ#Z``B+PEA``I`6$\@;?[D(DC2_`#4: XM0B@`TRM`_MPK2?[82I%G``""0^@`"'``$!$K0/[42JW^W&=&(&W^W"\H``Q.G XMNAC&6$\B+?[4L(%F("!M_N30_``)+P$O"")M_MPO*0`,80`*!D_O``Q*@&80* XM+RW^W&$`";983RM`_MQ@M"`M_MQG#B\`80`)HEA/*T#^W&`4(&W^X-#\`"(O5 XM"&$`":A83RM`_MQP`2!M_M@@@'[_*VW^W/[P2JW^\&8(/CP`Z&``!L8@*P`8; XMY8`K0/[D2D=G""MM_O#^X&`H+RL`%&$`"_A83W(`(&W^Y!%!`-,100#4$4$`5 XMU1%!`-8100#7*T#^X'X`(&W^X#`H`!9(P")M_N0C0``$3>D`"2\H``PO#DZZ- XM%_H@;?[@+J@`#$ZZ%]I03R!M_N010``((FW^X"%I`!H`=#`I`!9(P"%``'@@S XMB2`I`!XA0`!\(CP```(`3KH9D"%``(!-Z`"$0>D`+BS8+-@LV"!M_N`@*``0? XM9RX@;?[DT/P`D4AX`$$O`"\(3KH75"!M_N`NJ``03KH7;$_O``P@;?[D$4``A XMD&`((&W^Y$(H`)!*K```9P`%SB!M_N`P*``62D!J``7`0^@`(B\)80`(=$AX% XM`%@O`$AM_H1A`!#:2'@`6"\`2&P!UBM`_H!A``\B3^\`'$JM_H!F#DAL`>9A5 XM``\06$]@``5^("W^C"!M_N0A0`!\(CP```(`3KH8T"%``(!"*`#30^@`V"*\; XM5DE25"-M_H@`!"M)_GQ@``5(("L`&.6`?O\K0/[P2D=G"B!M_O`K2/[D8`P@V XM*P`4Y8`K0/[D($!^`$AX`"0O"$ZZ$.9P4B!M_N0A0``(("P&!N"`XH!2@"%`/ XM``PA0``0(7P```(``!0A?$1/4P``&"`L!:3D@"%``!Q(;`7Z80`'ED_O``P@\ XM;?[D(4``(&``!,@O*P`480`*$%A/*T#^Y'+_($"R:``69@@^/`#-8``$J#(HU XM`!A*06H(/CP`RF``!)@B*``(9Q9(>/_^+P%A``D&4$_D@"=```Q@``1\/CP`1 XMS6``!'0O*P`480`)O"M`_N1(;?[U+RL`&&$`!L)"ETAM_O5(;?[D80`)RD_O3 XM`!0K0/[@2H!G7"!`2F@`&&8(0^P%M+")9@@^/`#*8``$*G(!LF@`%F860^@`M XM(B\)80`&UEA/2H!G#CX\`-A@""\`80`'KEA/2D=F*B\M_N!A``@:(&W^Y-#\\ XM`"XNB$ZZ&0Y83V`02JW^Y&8&/CP`TF`$/CP`S4AL!>YA``:,6$]*@&8``\9(H XM;`7Z80`&?%A/2H!F``.V0BW_]6```ZXO*P`480`(]BM`_N1(;?[U+RL`&&$`G XM!?Q(;?[<2&W^]4AM_N1A``D"3^\`&"M`_N!G"#X\`,M@``-T("W^Y&8(/CP`\ XMTF```V8O+?[<2'@``2\`80`&<$AX__\O`"M`_N!A``?(3^\`%.2`)T``#&``' XM`SPO*P`480`(A"M`_N1(;?[U+RL`&&$`!8HNJP`<2&W^]4AL`@1A``R@0I=(V XM;?[U2&W^Y&$`"()/[P`<*T#^X&<V($`R*``82D%K#DI!9Q(B*P`<=/^R@F8(Z XM/CP`RF```MPO*P`<+P!A``=04$_D@"=```Q@``+&2JW^Y&8(/CP`TF```K@^H XM/`#-8``"L"\K`!1A``?X6$\K0/[D($`P*``82D!J"#X\`,I@``*02'C__B\(3 XM80`'!%!/Y(`G0``,8``">B`K`!3E@"\`80`'>$AL!>YA``4D4$]*@&8``EY(Y XM;`7Z80`%%%A/2H!F``).0BW_]6```D8O*P`880`'CBM`_N!(;?[U+RL`'&$`' XM!)1(;?[<2&W^]4AM_N!A``>:3^\`&"M`_N1G#"!`(6L`(``:8``""$JM_N!G& XM"#X\`,U@``'Z/CP`TF```?(O*P`880`'.BM`_N!(;?[U+RL`'&$`!$!(;?[<X XM2&W^]4AM_N!A``=&3^\`&"M`_N1G7DAM_O4O*P`@80`$&E!/(&W^Y"`H`!!G_ XM&"\`3KH3(E*`+H`@;?[D+R@`$$ZZ%Q903TAM_O5.NA,(4H!(>``!+P!.NA;H! XM(&W^Y"%``!!(;?[U+P!.NA+^3^\`%&```6)*K?[@9P@^/`#-8``!5#X\`-)@0 XM``%,+RL`%&$`!I0K0/[@+JL`'&$`!H@K0/[<2&W^]2\K`!AA``..2&W^]4ZZD XM$J`N@$AM_O5(;`(.80`*GD*72&W^]4AM_N!A``:`3^\`("M`_N1G``#B2&W^W XM]2\K`"!A``-22&W^]4ZZ$F0N@$AM_O5(;`(D80`*8DAM_MA(;?[U2&W^W&$`K XM!D)/[P`@2H!G"#X\`,M@``"V("W^W&<``)(@;?[DL<!F"#X\`,I@``">+RW^$ XMV$ZZ$A8N@"\M_MA(;`(R80`*%"!M_N#0_``N+HA.NA6>(&W^W-#\`"XNB$ZZ$ XM%9`NK?[D3KH6,"ZM_MA.NA'<4H!(>``!+P!.NA6\(&W^Y"%```PA;?[<``@NK XMK?[8+R@`#$ZZ$<H@;?[<T/P`(BZM_N0O"$ZZ%<!/[P`<8!P^/`#28!9*K?[@< XM9P8^/`#-8`H^/`#28`0^/`#1(`MG`._R2D=G("`'2,`O`$AL`D!A``EV4$]PG XM`"=```P@!TC`)T``$&`.+RL`#$AL`DIA``E84$\O"V$``6Q83V``[[1(;`)6, XM80`)0DAX`#).NA3F3KH4]BZL!:!A``&04$]*@&8J2&P%[F$``E)83TJ`9AQ(S XM;`7Z80`"1%A/2H!F#DAL!=9A``(V6$]*@&<23KH4RDAL`G!A``CR6$]@`.\X> XM(&P%I$*H``@B;`6P(&D`(B`H`!CE@"!`0^@`!"(H``3E@2M`_N@K0?[D*TG^N XMX"`M_N1G&+"L!:AG$BM`_N`@;?[D(!#E@"M`_N1@XB!M_N0B;`6HL\AF$")M6 XM_N`BD"\(80`!0EA/8`I(;`*`80`(?%A/80`(*"\L!;!.NA4J3.U<_/H83EU." XM=4Y5_]!(YP`X2?D`````)FT`""1M``Q*J@`89U9(>``P2&W_T"\M`!!.NA4@N XM*VH`'/_D+HM(;`*H80`(*"ZJ`!A(;?_080`)6$_O`!1*@&8*2&P"MF$`"`Q8W XM3R!M`!`A;?_<``PO"TAL`LIA``?V<`%@`G``3.T<`/_$3EU.=4Y5__A(YP`X# XM2?D`````)FT`""!K``0D4R)L!:#2_`!<)TD`!"5+``J3R22))4D`!"\*+P@K$ XM2/_X3KH4)DSM'`#_[$Y=3G5(YP`H2?D`````(&P%H-#\`'0D;`6@(FH`<+/(E XM5L!$`$B`2,!,WQ0`3G5(YP$82?D`````+B\`$%B'+SP``0`!+P=.NA,Z4$\F_ XM0":'0>L`!"`(3-\8@$YU2.<`&$GY`````"9O``Q9BR\3+PM.NA,H4$],WQ@`Z XM3G5(YP`X2?D`````)F\`$"1O`!0@"^6`)D!!ZP`!<``0$R\`+PHO"$ZZ$^9/= XM[P`,<``0$T(R``!,WQP`3G5(YP`82?D`````)F\`#"93(!-G`B`+3-\8`$YU\ XM2.<`&$GY`````"9O``Q!ZP`$(E.QR6<$(`E@`G``3-\8`$YU2.<!.$GY````? XM`"9O`!0D;P`8/B\`'E-';11P((`S<`!R(((R<`"P`6?L<`!@`G`!3-\<@$YUT XM3E7__$CG`3A)^0`````F;0`(+BT`#"\\``$``4AX`#I.NA(R)$!!ZP`B+HHO6 XM"$ZZ$FPE2P`(+JT`$$ZZ#BQ2@$AX``$O`$ZZ$@PE0``,+JT`$"\`3KH.)B`') XM-4``%D*J`!I!Z@`B+HA.N@ER0>H`+BZ(3KH1F"!J``A#Z``N+HE.NA&*(`I,2 XM[1R`_^Q.74YU2.<`.$GY`````"9O`!`@*P`>D:P&!D'K`"(O"$ZZ$AI83R1`F XM(`IG+B\J``PO*@`(+PI(;`+>80`%K"ZJ``PO*@`(3KH1F$AX`!`O"DZZ$8Y/9 XM[P`<8,!"JP`>0>L`+B\(3KH1&B!K``A#Z``N+HE.NA$,6$],WQP`3G5(YP`8Z XM2?D`````)F\`#"\+3KH1F%A/("L`#&<4+P!.N@T^4H`N@"\K``Q.NA$V4$\@] XM*P`09Q0O`$ZZ#212@"Z`+RL`$$ZZ$1Q03TAX`#HO"TZZ$1!03TS?&`!.=4Y5! XM__A(YP$X2?D`````)FT`""XM``Q(>``480#]?EA/)$!P_[Z`9P)^_DAX``%(Y XM>``,3KH0NBZ`2&P%^BM`__A.NA#<3^\`#"!M__@A2@`()(@E2P`$)4<`""!LN XM!:#0_`!<)4@`#"`L!:3D@"5``!!P_KZ`9@92:P`88`8W?/__`!@@"DS?'(!.O XM74YU2.<`.$GY`````"9O`!`D:P`$+Q-.NA"L2'@`#"\33KH06D_O``QP_K"K: XM``AF!E-J`!A@!$)J`!@O"V$`_0!83TS?'`!.=4CG`#A)^0`````F;P`0(`OE8 XM@"1`(`IG""!J``0@"&`&0>P%M"`(3-\<`$YU3E7_\$CG(#A)^0`````F;0`(G XM)&T`$"M3__Q"DR!M``Q*$&<``/)*K?_\9P``ZDAM__9(;0`,80``^%!/(&T`N XM#!(0*T#_\G0ZL@)F#E*M``Q![`6T*TC__&#"<"\@;?_RL!!F$B!M__P@*``(. XM9P``NBM`__Q@IG#_(&W__+!H`!9F!G``8```HD/H`"(O"6$`_+)83RM`__A*W XMK?_X9U8@;?_X2F@`%F<\+R@`#$ZZ"U983S(M__9(P;"!9B@P+?_V2,`O`"\M$ XM__(@;?_X+R@`#&$`_)1/[P`,2H!G""MM__C__&`0+RW_^&$`_#Q83RM`__A@; XMI$JM__AF`/\B(&T`#!`02@!F!":M__P@"F<$)*W_\G``8!(@"F<$)*W_\B!MQ XM__PFJ``((`A,WQP$3EU.=4Y5__1(YP$X2?D`````)FT`""13?@`@2BM(__Q*D XM$&<J<"^P$F8&4HI21V`>$!)G$G(OL`%G#'(ZL`%G!E**4D=@ZG`OL!)F`E**O XM)HH@;0`,,(<@+?_\3-\<@$Y=3G5(YP$(2?D`````+B\`#"`'6X!G``"<5X!GC XM``$F4X!G``%878!G``$J4X!G``$$4X!G``$V4X!G``%(4X!G``$*4X!G``%$@ XM4X!G``$.4X!G``#H4X!G``"T4X!G``"D4X!G``"\4X!G``"L4X!G``$B4X!GJ XM``#L4X!G``"N58!G``#P<C.0@6=06X!G5@2````#BV<``01R"I"!9QY3@&<DS XM4X!G*E.`9T13@&=*8```\D'L`OH@"&```.Y![`+^(`A@``#D0>P#!B`(8```N XMVD'L`Q`@"&```-!![`,:(`A@``#&0>P#("`(8```O$'L`R8@"&```+)![`,L* XM(`A@``"H0>P#,B`(8```GD'L`T`@"&```)1![`-,(`A@``"*0>P#4B`(8```< XM@$'L`UP@"&!V0>P#9B`(8&Y![`-N(`A@9D'L`W@@"&!>0>P#?B`(8%9![`.&R XM(`A@3D'L`Y`@"&!&0>P#G"`(8#Y![`.H(`A@-D'L`[`@"&`N0>P#N"`(8"9!Y XM[`/$(`A@'D'L`]`@"&`60>P#WB`(8`Y![`/D(`A@!D'L`^P@"$S?$(!.=4CGN XM`!A)^0````!"ITZZ#3!83R9`2JP`!&9H<``O`"\`3KH+5"E```@0*P`)2(!(7 XMP%*`0?H#5"((Y(%(>!``+P$O`$AL!`1.N@P*3^\`&$J`9R8O+``(3KH-)BZLA XM``A.N@T*2&P$#&$``&Y(;`0V80``9D_O``Q@"B\L``A.N@GT6$],WQ@`3G5.& XM5?_L+PQ)^0`````@+``$9S9";?_^2&W_["\`3KH,K"ZL``A.N@S0+JP`"$ZZ5 XM#+0NK``(3KH)M$*L``1(>``R3KH+N$_O``PH7TY=3G5.5?[\2.<'&$GY````" XM`"XM``@L+0`,*BT`$$JL``1G=$IL!@IF;B\M`"PO+0`H+RT`)"\M`"`O+0`<> XM+RT`&"\M`!0O!2\&+P=(;?\`3KH([$AM_P!.N@>><A70@2Z\``$``2\`3KH+: XM>B9`2&W_`$ZZ!X12@#=``!)!ZP`42&W_`"\(3KH'A"Z++RP`!$ZZ"^Y/[P!$; XM3-\8X$Y=3G5(YP$X2?D`````<``O`"\`3KH)\BE```1(>`/N2&P$3DZZ"G(D8 XM0$AL!@PO+``(3KH+L$_O`!@O+``$3KH+T"ZL``1.N@NT6$\F0#XK`!)*1V<J3 XM4T=!ZP`4(`=(P"\`+P@O"DZZ"F`@!TC`<A70@2Z`+PM.N@KH3^\`$&"Z+PI.R XMN@HP+JP`!$ZZ"'A(;`8,+RP`"$ZZ"TQ/[P`,3-\<@$YU3E7_^$CG`#A)^0``Y XM```F;0`()&T`#'``+P`O`$ZZ"4903RM`__AG."!3)T``!"%+``J3R2")(4D`` XM!"\(+PHK2/_\3KH*_"ZM__A.N@L@+JW_^$ZZ"P0NK?_X3KH(!'`!3.T<`/_LU XM3EU.=4Y5__1(YP<X2?D`````)FT`""1M``PN+0`0*TO_^'H`+RH`#"\'2&P$1 XM:F$`_BY/[P`,2H=G0B`*9SXL*@`,OH9L%B\'+PLO*@`(3KH*]D_O``S:AWX`T XM8-HO!B\++RH`"$ZZ"N">AMJ&U\8NBF$`]P)/[P`,)$!@NB!M__@,D%9)4E1G# XM!'``8`PO!4AL!(YA`/W*(`5,[1S@_]Q.74YU0H%@```&$B\`#R!O``0@+P`(( XM`B\``P`+9@``$@(O``,`!V8```A@```4$,%1R/_\!(```0``:@#_\DYUY(A*2 XM@6<``!8?00`.,B\`#DA!,B\`#F````0@P5'(__P$@``!``!J`/_R3G5.<4YQ- XM3G%.<4YQ2.<_/DZY```<!$S??/Q.=2)O``0@;P`(2.<_/BAO`#AA```(3-]\M XM_$YU)DD@:``B(&@`&-'(T<@@*``$T(!G;M"`($`@$`RH`````@`$9NPB%+*H7 XM`!!FY"(L``2RJ``49MHB+``(LJ@`&&;0(BP`#+*H``1FQB(L`!"RJ`!`9KPBX XM*``H9[;2@=*!)$%R`!(:9ZHB2V`$M0EFHE')__H,$0`Z9P1*$6:4(`AR`4YU& XM<`!.=2!O``0@B%B00J@`!"%(``A.=0``3E7_Q$CG)S`F;0`()&T`#'X`?`!Z0 XM`'``&WP`(/_[<@`K0?_V=/\K0O_R0>W_T!M`__$;0/_\*T'_Y"M!_^@K2/_,# XM$!-G+'(`$@`$00`@9Q1706<444%G"%5!9A9^`6`.?`%@"GH!8`8;?``!__Q2: XMBV#0$!-R,+`!9@92BQM!__MP*K`39@P@4EB2*U#_]E*+8`Y(;?_V+PM.N@2^D XM4$_7P!`3<BZP`68B4HMP*K`39@P@4EB2*U#_\E*+8`Y(;?_R+PM.N@244$_7G XMP!`3<FRP`68*&WP``?_Q4HM@"')HL`%F`E*+$!MR`!(`&T#_\`1!`%!G``%LA XM44%G``%Z!$$`"V<``@9306<D!$$`"V<``0Y306<``4Q706<``;9506<``.!7* XM06<``4Y@``'T2BW_\6<((%)8DB`08`8@4EB2(!`K0/_L;`IR`42M_^PK0?_H. XM("W_Z&<$<BU@"DH&9P1R*V`"<B`;0?_0<@`2!H"!<@`2!8"!9PA2K?_,4JW_K XMY"\M_^PO+?_,3KH#-%!/*T#_R"`M__)*@&H&<@$K0?_R("W_R"(M__*2@$CM% XM``+_Q&\T(&W_S-'!+P`O""\M_\Q.N@0X3^\`#'``$"W_^R(M_\0@;?_,8`(0P XMP%.!9/H@+?_R*T#_R-&M_^1![?_0*TC_S$H'9P`!,!M\`"#_^V```29*+?_Q& XM9P@@4EB2(!!@!B!26)(@$"M`_^Q@`/]D2BW_\6<((%)8DB`08`8@4EB2(!`K% XM0/_L2BW__&<2(&W_S!#\`#!R`2M!_^0K2/_,+P`O+?_,3KH"F%!/*T#_R&``3 XM_S(@+?_R2H!J!G`(*T#_\AM\``'_\4HM__%G""!26)(@$&`&(%)8DB`0*T#_# XM[$HM__QG%B!M_\P0_``P$/P`>'("*T'_Y"M(_\PO`"\M_\Q.N@)\4$\K0/_(A XM""T`!?_P9P#^T$AM_]!.N@%(6$]@`/["(%)8DB)0*TG_S&8(0?H`V"M(_\P@F XM;?_,2AAF_%.(D>W_S"M(_^0@+?_R2H!K)K'`;R(K0/_D8!QP`2M`_^0@4EB2V XM(!`;0/_00BW_T6`&<`!@``",("W_Y"(M__:R@&P(=``K0O_V8`21K?_V2@=G: XM-E.M_^1M&'``(&W_S!`8+P`K2/_,(&T`$$Z06$]@XE.M__9M2'``$"W_^R\`? XM(&T`$$Z06$]@Z%.M__9M$G``$"W_^R\`(&T`$$Z06$]@Z%.M_^1M&'``(&W_" XMS!`8+P`K2/_,(&T`$$Z06$]@XB`+3-\,Y$Y=3G4``$Y5__1(YP$P)FT`""1M; XM``PK;0`0__8>&DH'9S1P);X`9B*P$F8$4HI@&B\+2&W_]B\*80#\%$_O``PKM XM0/_Z9P0D0<``0!R\`3I-83V#&3-\,@$Y=3G5(YR`P)F\`$"1+$!)G)'(`U XM$@!![`2="#```1@`9PIR`!(`=""2@F`$<@`2`!2!4HI@V"`+3-\,!$YU````( XM``````!P82)O``@@;P`$("\`#"((8`00V6<(4X!D^&`&0AA3@&3Z(`%.=2!O1 XM``0@"$H89OQ32)'`(`A.=0``(F\`""!O``0@"!#99OQ.=2!O``0B;P`($ABRQ XM&68(2@%F]G``3G5N!'#_3G5P`4YU("\`""!O``1.5?_T(D]R"DZZ`<0&00`PJ XM$L%*@&;P(`D0X;_)9OI"$)"/3EU.=0``("\`""!O``1.5?_T(D\B``)!``<&W XM00`P$L'FB&;P(`D0X;_)9OI"$)"/3EU.=0``,#$R,S0U-C<X.6%B8V1E9B`O: XM``@@;P`$0^\`!#(``D$`#Q+[$-SHB&;R(`DB#UB!$.&RB6;Z0A"0@4YU(&\`* XM!")(<@!P`"\"#!``*V<&#!``+68"4D@0&`0``#!M$@P```EN#"0!Y8'2@M*!< XMTH!@Y@P1`"UF`D2!)!\@"%.`(&\`"""!D(E.=2\'+B\`"%*L!B0@!R!L!B`0- XMP"E(!B`N'TYU3E4``$CG`#`F;0`()&T`#$*L!B0I2P8@2&T`$"\*2'K_QDZZ@ XM_=8@;`8@0A`@+`8D3.T,`/_X3EU.=2!O``0B;P`(("\`#&\6L\AE#-'`T\`3F XM(%.`9OI.=1+84X!F^DYU``!(YP`2)F\`#$JK``IG"B)++'@`!$ZN_I@7?`#_! XM``AP_R=``!1P`!`K``\L>``$3J[^L")+<").KO\N3-](`$YU2H!J```>1(!*\ XM@6H```Q$@6$``"!$@4YU80``&$2`1(%.=4J!:@``#$2!80``!D2`3G4O`DA!X XM-`%F```B2$!(04A"-`!G```&A,$P`DA`-`"$P3`"2$(R`B0?3G4O`W80#$$`L XM@&0```;AF5%##$$(`&0```;IF5E##$$@`&0```;EF55#2D%K```&XYE30S0`$ XMYJA(0D)"YJI(0X#!-@`P`C0#2$'$P9""9```"%-#T(%D_G(`,@-(0^>X2$#!& XM028?)!].=4CG`S(F;P`8+B\`''#_+'@`!$ZN_K9\`!P`</^\@&8$<`!@9G`B2 XM(CP``0`!3J[_.B1`(`IF""`&3J[^L&!*)4L`"B`'%4``"15\``0`"$(J``X@! XM!A5```^3R4ZN_MHE0``0(`MG"")*3J[^GF`:0>H`&"5(`!1!Z@`4)4@`'$*J? XM`!@5?``"`"`@"DS?3,!.=4CG(`(L>0``!;!,[P`&``Q.KO_B3-]`!$YU```OE XM#BQY```%L"(O``A.KO_<+%].=4CG,`(L>0``!;!,[P`.`!!.KO_03-]`#$YU_ XM``!(YS@"+'D```6P3.\`'@`43J[_=DS?0!Q.=0``+PXL>0``!;`B+P`(3J[_6 XM0"Q?3G4O#BQY```%L"(O``A.KO\Z+%].=2\.+'D```6L3J[_?"Q?3G4O#BQY[ XM```%K$ZN_W8L7TYU+PXL>0``!:Q,[P`#``A.KO\Z+%].=0``+PXL>0``!:PB! XM;P`(("\`#$ZN_RXL7TYU+PXL>0``!:Q,[P,```A.KO\0+%].=0``+PXL>0``= XM!:Q,[P,```A.KO\*+%].=0``+PXL>0``!:PB;P`(3J[_!"Q?3G4O#BQY```%J XMK"!O``A.KO[^+%].=2\.+'D```6L(F\`"$ZN_MHL7TYU+PXL>0``!:Q,[P,`H XM``A.KOZ2+%].=0``+PXL>0``!:P@;P`(3J[^C"Q?3G4O#BQY```%K"!O``A.8 XMKOZ`+%].=2\.+'D```6L(F\`"$ZN_F(L7TYU+PXL>0``!:PB;P`(("\`#$ZN3 XM_=@L7TYU+PXL>0``!:Q,[P,```@@+P`03J[]D"Q?3G4``````^P````!````B XM````'B0````N`````0``*%0``"@\```H*```*!0``"@````GZ```)]0``"?`V XM```GK```)Y0``"=\```G9```)TP``"<\```G+```)Q@``"<$```FZ@``)LX`3 XM`":X```FG@``'1@``!RN```<"@``&W(``!LB```:F```&.P``!B2```78@``J XM%S(``!;L```69```%@0``!6*```4_@``%,0``!2@```4A```%$@``!0H```3? XM^@``$]```!..```3$`````H````````#\`````)?<W1R;F-P>0``(S@````$Q XM7V-R96%T97)A;69I;&4`````%/0````#7T%L;&]C365M```````G2`````)?W XM<W1R8W!Y````(W`````"7T=E=$AE860``!2:````!%]#;&]S94QI8G)A<GD`' XM`````"@D`````E]!9&1486EL```GD`````-?9V5T;&]C:V9I;&4``!<L````E XM`U]A;F1Y8V]D90``````$P8````"7T-O<'E-96T``"A0`````E]S=&-U;%]DD XM```CH`````)?061D2&5A9```)W@````"7T-81#,S`````"5$`````5]?<&8`B XM`"*<`````U]F<F5E<F%M9FEL90``%?X````"7U)E;4AE860``">\`````E]N> XM8V-M<``````4O@````)?7W!F;70`````'N0````#7W)A;75N;&]C:P`````6R XMY@````-?<V5A<F-H<&%T:````!=8`````E]D;W-F<F5E```4(@````)?<W1C$ XM;%]O````(]`````"7U!E<FUI=````"<X`````E]#6$0R,@`````E=@````)?^ XM<W!R:6YT9@``)*(````"7VUO=FUE;0```"3<`````E]S=&-I7V\````CT```3 XM``1?<F5T=7)N<&%C:V5T```````3A`````)?4F5M;W9E````)Z@````#7W-EJ XM;F1P86-K970````<I`````)?5W)I=&4`````)L@````"7TYE=TQI<W0``![0Y XM`````U]D96)U9W!R;V,`````'AH````#7V1B=6YI;FET```````;&@````)?J XM1F]R8FED````)R@````#7V1O<V%L;&]C```````3]`````)?8G-E=```````N XM';(````"7T1E;&%Y`````"<4`````U]M>7)E861S;VUE````'0X````#7T1EH XM;&5T95!O<G0````E!`````-?1&%T95-T86UP`````"<``````E]?0UA$,C(`' XM```E=@````-?9G)E961A=&$``````!6$`````E]B>F5R;P`````=K`````-?` XM3W!E;DQI8G)A<GD``"@X`````E]#;&]S90`````FM`````)?<W1C9%]I````/ XM)#P````#7V1B<')I;G1F```````;:`````)?9&)I;FET````&I(````"7VYOC XM;F%M90```````````E]S=')U<'(````B]`````)?<W1C:5]H````)!`````$; XM7W!A8VME='-Q=65U960`````$\H````"7T=E=$US9P```"?\`````E]&<F5E> XM365M```G8`````)?<W1C;&5N````(UP````#7W1Y<&5T;W-T<@`````8Y@``M XM``)?8G1O<P``````%$(````#7T-R96%T95!R;V,````FY`````)?<W1C;%]HA XM````)!`````#7T9I;F1487-K```````GT`````-?3F5X=$YO9&4``````!1^Z XM`````U]786ET4&]R=```````*!`````"7W-T<FQE;@```"-<`````E]R86UL9 XM;V-K```66@````)?<W1C=5]D````(Z`````"7W-T<F-M<````".``````U]&8 XM:6YD2&%N9&QE<@``'BX````"7U]#6$0S,P```"5$`````E]/<&5N```````F, XMF`````-?9&5B=6=M86EN`````!P$`````E]0=71-<V<````GY`````-?0W)E. XM871E4&]R=````"8(````!%]G971P871H96QE;65N=````!B(`````````_(`< XM``/J```!B@````$``````````&1O<RYL:6)R87)Y`%)/3U0@3D%-13H@)6QDV XM("<E<R<*``!086-K970Z("4S;&0@)3`X;'@@)3`X;'@@)3`X;'@@)3$P<R``6 XM`"<E<R<@`&1E8G5G;V9F``!D96)U9V]N`'9I<G1U86QO;@!6:7)T=6%L(&ESS XM(&]N"@``=FER='5A;&]F9@``5FER='5A;"!I<R!O9F8*`&YO="!V:7)T=6%L) XM(&9I;&4L('1R96%T:6YG(&%S(&YO<FUA;`H`=FER='5A;#H@;F%M92!T;R!F< XM:6YD(&ES("5S"@``9&5V:6-E("5S(&YO="!F;W5N9`H``&1E=FEC92`E<R!W7 XM87,@9F]U;F0@)6QX"@``,#`Q.B!P86-K970@<V5N="$*```P,#(Z(&YO(&5RK XM<F]R"@``9FEL92!H86YD;&4@:7,@)6QD"@!R96%D``!W<FET90!&14XZ("5LO XM9"`@;&5F=#H@)6QD"@``4$%.24,A($%74C`*``!004Y)0R$@05=2,0H``$Y%< XM5T9%3CH@*"5L9"D*``!.15=&14XZ("HJ*BHJ*B!5;F%B;&4@=&\@86QL;V-AY XM=&4@8G5F9F5R("5L9`H`8VQO<V4`<V5E:P``8V]O;&\@)6QD("5L9`H``&5X] XM86UI;F4Z(&9I;&4@:7,@;F]T('9I<G1U86P``"<E<R<@)6QD(``*4D5.04U%U XM("<E<R<@*"5L9"D@(```5$\@)R5S)R`H)6QD*0!214X@)R5S)R`E;&0``$522 XM4CTE;&0*``!215,])3`V;'@*``!#86X@=V4@<F5M;W9E(&]U<G-E;'9E<S\@1 XM`"`N+B`@;F]T('EE="$*```J*BHJ4$%.24,Z(%5N86)L92!T;R!F:6YD('9OW XM;'5M92!N;V1E"@``86-C97-S:6YG("5S"@!(;VQY(%-H:70@0F%T;6%N(0H`G XM`&%C8V5S<VEN9R!D;VYE("5S"@``1E)%12!&14XZ("4P.&QX("4P.&QX("5L@ XM9`H``$1)10!/4$5.+5)7`$]014XM3TQ$``!/4$5.+4Y%5P``4D5!1```5U))= XM5$4`0TQ/4T4`4T5%2P``15A!34E.12!.15A4``!%6$%-24Y%($]"2@!)3D9/+ XM``!$25-+($E.1D\`4$%214Y41$E2`$1%3$5410``0U)%051%1$E2`$Q/0TL`/ XM`$154$Q/0TL`1E)%14Q/0TL``%-%5%!23U1%0U0``%-%5$-/34U%3E0``%)%` XM3D%-10``24Y(24))5`!214Y!344@1$E32P!-3U)%($-!0TA%``!704E4($9/\ XM4B!#2$%2`$9,55-(`%)!5TU/1$4`+2TM+2TM+2TM54Y+3D]73BTM+2TM+2T`A XM1$567T1"``!$96)U9V=E<B!R=6YN:6YG(%8Q+C$P+"`R($YO=F5M8F5R(#$YF XM.#<*``!7;W)K<R!W:71H(%=/4DM"14Y#2"$*``!C;VXZ,"\P+S8T,"\Q,#`O: XM9&5B=6=W:6YD;W<`<F5A9'-O;64@;&5F="P@9F5N+3YB>71E<R`E;&0@)6QD[ XM"@``=&]T86P@:7,@)6QD"@``("`@("`@("`@*"@H*"@@("`@("`@("`@("`@1 XM("`@("!($!`0$!`0$!`0$!`0$!`0A(2$A(2$A(2$A!`0$!`0$!"!@8&!@8$!W XM`0$!`0$!`0$!`0$!`0$!`0$!`1`0$!`0$(*"@H*"@@("`@("`@("`@("`@("; XM`@("`@("$!`0$"`@("`@("`@("`H*"@H*"`@("`@("`@("`@("`@("`@($@0L XM$!`0$!`0$!`0$!`0$!"$A(2$A(2$A(2$$!`0$!`0$(&!@8&!@0$!`0$!`0$!& XM`0$!`0$!`0$!`0$!$!`0$!`0@H*"@H*"`@("`@("`@("`@("`@("`@("`@(0P XM$!`0(```````````````````````````````````````````````````````0 XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM``````````````/P`````U]$0D1I<V%B;&4`````!@H````"7U)&4F]O=```\ XM``6T`````E]$8F%C:P``````"`````)?1&]S3F]D90``!:0````#7T1U;6UY; XM37-G```````&#`````)?4WES0F%S90``!:P````"7T1B<&]R=``````$````5 XM`E]$979,:7-T```%J`````)?3$-"87-E````!?H````"7U]C='EP90````2<X XM`````E]&2$)A<V4````%[@````)?5FER='5A;``````````"7T1O<U!R;V,`` XM``6@`````U]4;W1A;$)Y=&5S````!@8````"7T1/4T)A<V4```6P````````5 X"`_*@5 X`` Xend Xsize 13772 END_OF_FILE if test 19321 -ne `wc -c <'virtual.uu'`; then echo shar: \"'virtual.uu'\" unpacked with wrong size! fi # end of 'virtual.uu' fi echo shar: End of archive 1 \(of 4\). cp /dev/null ark1isdone MISSING="" for I in 1 2 3 4 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 4 archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Mail submissions (sources or binaries) to <amiga@uunet.uu.net>. Mail comments to the moderator at <amiga-request@uunet.uu.net>. Post requests for sources, and general discussion to comp.sys.amiga.misc.