home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume44
/
unzip
/
part13
< prev
next >
Wrap
Internet Message Format
|
1994-09-19
|
72KB
From: zip-bugs@wkuvx1.wku.edu (Info-ZIP group)
Newsgroups: comp.sources.misc
Subject: v44i078: unzip - Info-ZIP portable UnZip, version 5.12, Part13/20
Date: 18 Sep 1994 23:16:06 -0500
Organization: Sterling Software
Sender: kent@sparky.sterling.com
Approved: kent@sparky.sterling.com
Message-ID: <35j3a6$qps@sparky.sterling.com>
X-Md4-Signature: 86063dfa1a7b4e10764aaad844e434ac
Submitted-by: zip-bugs@wkuvx1.wku.edu (Info-ZIP group)
Posting-number: Volume 44, Issue 78
Archive-name: unzip/part13
Environment: UNIX, VMS, OS/2, MS-DOS, MACINTOSH, WIN-NT, LINUX, MINIX, COHERENT, AMIGA?, ATARI TOS, SGI, DEC, Cray, Convex, Amdahl, Sun
Supersedes: unzip50: Volume 31, Issue 104-117
#! /bin/sh
# This is a shell archive. Remove anything before this line, then feed it
# into a shell via "sh file" or similar. To overwrite existing files,
# type "sh file -c".
# Contents: unzip-5.12/funzip.c unzip-5.12/mac/thinkc.hqx
# unzip-5.12/unix/Makefile unzip-5.12/vms/makesfx.com
# Wrapped by kent@sparky on Sat Sep 17 23:33:43 1994
PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin:$PATH ; export PATH
echo If this archive is complete, you will see the following message:
echo ' "shar: End of archive 13 (of 20)."'
if test -f 'unzip-5.12/funzip.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'unzip-5.12/funzip.c'\"
else
echo shar: Extracting \"'unzip-5.12/funzip.c'\" \(14247 characters\)
sed "s/^X//" >'unzip-5.12/funzip.c' <<'END_OF_FILE'
X/* funzip.c -- put in the public domain by Mark Adler */
X
X#define VERSION "3.83 of 28 August 1994"
X
X
X/* You can do whatever you like with this source file, though I would
X prefer that if you modify it and redistribute it that you include
X comments to that effect with your name and the date. Thank you.
X
X History:
X vers date who what
X ---- --------- -------------- ------------------------------------
X 1.0 13 Aug 92 M. Adler really simple unzip filter.
X 1.1 13 Aug 92 M. Adler cleaned up somewhat, give help if
X stdin not redirected, warn if more
X zip file entries after the first.
X 1.2 15 Aug 92 M. Adler added check of lengths for stored
X entries, added more help.
X 1.3 16 Aug 92 M. Adler removed redundant #define's, added
X decryption.
X 1.4 27 Aug 92 G. Roelofs added exit(0).
X 1.5 1 Sep 92 K. U. Rommel changed read/write modes for OS/2.
X 1.6 6 Sep 92 G. Roelofs modified to use dummy crypt.c and
X crypt.h instead of -DCRYPT.
X 1.7 23 Sep 92 G. Roelofs changed to use DOS_OS2; included
X crypt.c under MS-DOS.
X 1.8 9 Oct 92 M. Adler improved inflation error msgs.
X 1.9 17 Oct 92 G. Roelofs changed ULONG/UWORD/byte to ulg/ush/uch;
X renamed inflate_entry() to inflate();
X adapted to use new, in-place zdecode.
X 2.0 22 Oct 92 M. Adler allow filename argument, prompt for
X passwords and don't echo, still allow
X command-line password entry, but as an
X option.
X 2.1 23 Oct 92 J-l. Gailly fixed crypt/store bug,
X G. Roelofs removed crypt.c under MS-DOS, fixed
X decryption check to compare single byte.
X 2.2 28 Oct 92 G. Roelofs removed declaration of key.
X 2.3 14 Dec 92 M. Adler replaced fseek (fails on stdin for SCO
X Unix V.3.2.4). added quietflg for
X inflate.c.
X 3.0 11 May 93 M. Adler added gzip support
X 3.1 9 Jul 93 K. U. Rommel fixed OS/2 pipe bug (PIPE_ERROR)
X 3.2 4 Sep 93 G. Roelofs moved crc_32_tab[] to tables.h; used FOPx
X from unzip.h; nuked OUTB macro and outbuf;
X replaced flush(); inlined FlushOutput();
X renamed decrypt to encrypted
X 3.3 29 Sep 93 G. Roelofs replaced ReadByte() with NEXTBYTE macro;
X revised (restored?) flush(); added FUNZIP
X 3.4 21 Oct 93 G. Roelofs renamed quietflg to qflag; changed outcnt,
X H. Gessau second updcrc() arg and flush() arg to ulg;
X added inflate_free(); added "g =" to null
X getc(in) to avoid compiler warnings
X 3.5 31 Oct 93 H. Gessau changed DOS_OS2 to DOS_NT_OS2
X 3.6 6 Dec 93 H. Gessau added "near" to mask_bits[]
X 3.7 9 Dec 93 G. Roelofs added extent typecasts to fwrite() checks
X 3.8 28 Jan 94 GRR/JlG initialized g variable in main() for gcc
X 3.81 22 Feb 94 M. Hanning-Lee corrected usage message
X 3.82 27 Feb 94 G. Roelofs added some typecasts to avoid warnings
X 3.83 22 Jul 94 G. Roelofs changed fprintf to FPRINTF for DLLs
X - 2 Aug 94 - public release with UnZip 5.11
X - 28 Aug 94 - public release with UnZip 5.12
X */
X
X
X/*
X
X All funzip does is take a zip file from stdin and decompress the
X first entry to stdout. The entry has to be either deflated or
X stored. If the entry is encrypted, then the decryption password
X must be supplied on the command line as the first argument.
X
X funzip needs to be linked with inflate.o and crypt.o compiled from
X the unzip source. If decryption is desired, the full version of
X crypt.c (and crypt.h) from zcrypt21.zip or later must be used.
X
X */
X
X#define FUNZIP
X#include "unzip.h"
X#include "crypt.h"
X
X#ifdef EBCDIC
X# undef EBCDIC /* don't need ebcdic[] */
X#endif
X#include "tables.h" /* crc_32_tab[] */
X
X/* PKZIP header definitions */
X#define ZIPMAG 0x4b50 /* two-byte zip lead-in */
X#define LOCREM 0x0403 /* remaining two bytes in zip signature */
X#define LOCSIG 0x04034b50L /* full signature */
X#define LOCFLG 4 /* offset of bit flag */
X#define CRPFLG 1 /* bit for encrypted entry */
X#define EXTFLG 8 /* bit for extended local header */
X#define LOCHOW 6 /* offset of compression method */
X#define LOCTIM 8 /* file mod time (for decryption) */
X#define LOCCRC 12 /* offset of crc */
X#define LOCSIZ 16 /* offset of compressed size */
X#define LOCLEN 20 /* offset of uncompressed length */
X#define LOCFIL 24 /* offset of file name field length */
X#define LOCEXT 26 /* offset of extra field length */
X#define LOCHDR 28 /* size of local header, including LOCREM */
X#define EXTHDR 16 /* size of extended local header, inc sig */
X
X/* GZIP header definitions */
X#define GZPMAG 0x8b1f /* two-byte gzip lead-in */
X#define GZPHOW 0 /* offset of method number */
X#define GZPFLG 1 /* offset of gzip flags */
X#define GZPMUL 2 /* bit for multiple-part gzip file */
X#define GZPISX 4 /* bit for extra field present */
X#define GZPISF 8 /* bit for filename present */
X#define GZPISC 16 /* bit for comment present */
X#define GZPISE 32 /* bit for encryption */
X#define GZPTIM 2 /* offset of Unix file modification time */
X#define GZPEXF 6 /* offset of extra flags */
X#define GZPCOS 7 /* offset of operating system compressed on */
X#define GZPHDR 8 /* length of minimal gzip header */
X
X/* Macros for getting two-byte and four-byte header values */
X#define SH(p) ((ush)(uch)((p)[0]) | ((ush)(uch)((p)[1]) << 8))
X#define LG(p) ((ulg)(SH(p)) | ((ulg)(SH((p)+2)) << 16))
X
X/* Function prototypes */
Xulg updcrc OF((uch *, ulg));
Xint inflate OF((void));
Xvoid err OF((int, char *));
Xvoid main OF((int, char **));
X
X/* Globals */
XFILE *in, *out; /* input and output files */
Xunion work area; /* inflate sliding window */
Xuch *outptr; /* points to next byte in output buffer */
Xulg outcnt; /* bytes in output buffer */
Xulg outsiz; /* total bytes written to out */
Xint encrypted; /* flag to turn on decryption */
Xint qflag = 1; /* turn off messages in inflate.c */
X
X/* Masks for inflate.c */
Xush near mask_bits[] = {
X 0x0000,
X 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
X 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
X};
X
X
Xulg updcrc(s, n)
Xuch *s; /* pointer to bytes to pump through */
Xulg n; /* number of bytes in s[] */
X/* Run a set of bytes through the crc shift register. If s is a NULL
X pointer, then initialize the crc shift register contents instead.
X Return the current crc in either case. */
X{
X register ulg c; /* temporary variable */
X
X static ulg crc = 0xffffffffL; /* shift register contents */
X
X if (s == (uch *)NULL)
X c = 0xffffffffL;
X else
X {
X c = crc;
X while (n--)
X c = crc_32_tab[((int)c ^ (*s++)) & 0xff] ^ (c >> 8);
X }
X crc = c;
X return c ^ 0xffffffffL; /* (instead of ~c for 64-bit machines) */
X}
X
X
Xvoid err(n, m)
Xint n;
Xchar *m;
X/* Exit on error with a message and a code */
X{
X FPRINTF(stderr, "funzip error: %s\n", m);
X exit(n);
X}
X
X
Xint flush(w) /* used by inflate.c (FLUSH macro) */
Xulg w; /* number of bytes to flush */
X{
X updcrc(slide, w);
X if (fwrite((char *)slide,1,(extent)w,out) != (extent)w && !PIPE_ERROR)
X err(9, "out of space on stdout");
X outsiz += w;
X return 0;
X}
X
X
Xvoid main(argc, argv)
Xint argc;
Xchar **argv;
X/* Given a zip file on stdin, decompress the first entry to stdout. */
X{
X ush n;
X uch h[LOCHDR]; /* first local header (GZPHDR < LOCHDR) */
X int g = 0; /* true if gzip format */
X#ifdef CRYPT
X char *s = " [-password]";
X char *p; /* password */
X#else /* !CRYPT */
X char *s = "";
X#endif /* ?CRYPT */
X
X /* skip executable name */
X argc--;
X argv++;
X
X#ifdef CRYPT
X /* get the command line password, if any */
X p = (char *)NULL;
X if (argc && **argv == '-')
X {
X argc--;
X p = 1 + *argv++;
X }
X#endif /* CRYPT */
X
X /* if no file argument and stdin not redirected, give the user help */
X if (argc == 0 && isatty(0))
X {
X FPRINTF(stderr, "fUnZip (filter UnZip), version %s\n", VERSION);
X FPRINTF(stderr, "usage: ... | funzip%s | ...\n", s);
X FPRINTF(stderr, " ... | funzip%s > outfile\n", s);
X FPRINTF(stderr, " funzip%s infile.zip > outfile\n", s);
X FPRINTF(stderr, " funzip%s infile.gz > outfile\n", s);
X FPRINTF(stderr, "Extracts to stdout the gzip file or first zip entry of\
X stdin or the given file.\n");
X exit(3);
X }
X
X /* prepare to be a binary filter */
X if (argc)
X {
X if ((in = fopen(*argv, FOPR)) == (FILE *)NULL)
X err(2, "cannot find input file");
X }
X else
X {
X#ifdef DOS_NT_OS2
X setmode(0, O_BINARY); /* some buggy C libraries require BOTH setmode() */
X#endif /* call AND the fdopen() in binary mode :-( */
X if ((in = fdopen(0, FOPR)) == (FILE *)NULL)
X err(2, "cannot find stdin");
X }
X#ifdef DOS_NT_OS2
X setmode(1, O_BINARY);
X#endif
X if ((out = fdopen(1, FOPW)) == (FILE *)NULL)
X err(2, "cannot write to stdout");
X
X /* read local header, check validity, and skip name and extra fields */
X n = getc(in); n |= getc(in) << 8;
X if (n == ZIPMAG)
X {
X if (fread((char *)h, 1, LOCHDR, in) != LOCHDR || SH(h) != LOCREM)
X err(3, "invalid zip file");
X if (SH(h + LOCHOW) != STORED && SH(h + LOCHOW) != DEFLATED)
X err(3, "first entry not deflated or stored--can't funzip");
X for (n = SH(h + LOCFIL); n--; ) g = getc(in);
X for (n = SH(h + LOCEXT); n--; ) g = getc(in);
X g = 0;
X encrypted = h[LOCFLG] & CRPFLG;
X }
X else if (n == GZPMAG)
X {
X if (fread((char *)h, 1, GZPHDR, in) != GZPHDR)
X err(3, "invalid gzip file");
X if (h[GZPHOW] != DEFLATED)
X err(3, "gzip file not deflated");
X if (h[GZPFLG] & GZPMUL)
X err(3, "cannot handle multi-part gzip files");
X if (h[GZPFLG] & GZPISX)
X {
X n = getc(in); n |= getc(in) << 8;
X while (n--) g = getc(in);
X }
X if (h[GZPFLG] & GZPISF)
X while ((g = getc(in)) != 0 && g != EOF) ;
X if (h[GZPFLG] & GZPISC)
X while ((g = getc(in)) != 0 && g != EOF) ;
X g = 1;
X encrypted = h[GZPFLG] & GZPISE;
X }
X else
X err(3, "input not a zip or gzip file");
X
X /* if entry encrypted, decrypt and validate encryption header */
X if (encrypted)
X#ifdef CRYPT
X {
X ush i, e;
X
X if (p == (char *)NULL)
X if ((p = (char *)malloc(PWLEN+1)) == (char *)NULL)
X err(1, "out of memory");
X else if ((p = getp("Enter password: ", p, PWLEN+1)) == (char *)NULL)
X err(1, "no tty to prompt for password");
X init_keys(p);
X for (i = 0; i < RAND_HEAD_LEN; i++)
X e = NEXTBYTE;
X if (e != (ush)(h[LOCFLG] & EXTFLG ? h[LOCTIM + 1] : h[LOCCRC + 3]))
X err(3, "incorrect password for first entry");
X }
X#else /* !CRYPT */
X err(3, "cannot decrypt entry (need to recompile with full crypt.c)");
X#endif /* ?CRYPT */
X
X /* prepare output buffer and crc */
X outptr = slide;
X outcnt = 0L;
X outsiz = 0L;
X updcrc(NULL, 0L);
X
X /* decompress */
X if (g || h[LOCHOW])
X { /* deflated entry */
X int r;
X
X if ((r = inflate()) != 0)
X if (r == 3)
X err(1, "out of memory");
X else
X err(4, "invalid compressed data--format violated");
X inflate_free();
X }
X else
X { /* stored entry */
X register ulg n;
X
X n = LG(h + LOCLEN);
X if (n != LG(h + LOCSIZ) - (encrypted ? RAND_HEAD_LEN : 0)) {
X FPRINTF(stderr, "len %ld, siz %ld\n", n, LG(h + LOCSIZ));
X err(4, "invalid compressed data--length mismatch");
X }
X while (n--) {
X ush c = getc(in);
X#ifdef CRYPT
X if (encrypted)
X zdecode(c);
X#endif
X *outptr++ = (uch)c;
X if (++outcnt == WSIZE) /* do FlushOutput() */
X {
X updcrc(slide, outcnt);
X if (fwrite((char *)slide, 1,(extent)outcnt,out) != (extent)outcnt
X && !PIPE_ERROR)
X err(9, "out of space on stdout");
X outsiz += outcnt;
X outptr = slide;
X outcnt = 0L;
X }
X }
X }
X if (outcnt) /* flush one last time; no need to reset outptr/outcnt */
X {
X updcrc(slide, outcnt);
X if (fwrite((char *)slide, 1,(extent)outcnt,out) != (extent)outcnt
X && !PIPE_ERROR)
X err(9, "out of space on stdout");
X outsiz += outcnt;
X }
X fflush(out);
X
X /* if extended header, get it */
X if (g)
X {
X if (fread((char *)h + LOCCRC, 1, 8, in) != 8)
X err(3, "gzip file ended prematurely");
X }
X else
X if ((h[LOCFLG] & EXTFLG) &&
X fread((char *)h + LOCCRC - 4, 1, EXTHDR, in) != EXTHDR)
X err(3, "zip file ended prematurely");
X
X /* validate decompression */
X if (LG(h + LOCCRC) != updcrc(slide, 0L))
X err(4, "invalid compressed data--crc error");
X if (LG(h + (g ? LOCSIZ : LOCLEN)) != outsiz)
X err(4, "invalid compressed data--length error");
X
X /* check if there are more entries */
X if (!g && fread((char *)h, 1, 4, in) == 4 && LG(h) == LOCSIG)
X FPRINTF(stderr,
X "funzip warning: zip file has more than one entry--rest ignored\n");
X
X exit(0);
X}
END_OF_FILE
if test 14247 -ne `wc -c <'unzip-5.12/funzip.c'`; then
echo shar: \"'unzip-5.12/funzip.c'\" unpacked with wrong size!
fi
# end of 'unzip-5.12/funzip.c'
fi
if test -f 'unzip-5.12/mac/thinkc.hqx' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'unzip-5.12/mac/thinkc.hqx'\"
else
echo shar: Extracting \"'unzip-5.12/mac/thinkc.hqx'\" \(24586 characters\)
sed "s/^X//" >'unzip-5.12/mac/thinkc.hqx' <<'END_OF_FILE'
X(This file must be converted with BinHex 4.0)
X
X:$(9ZHQP`,R4SD@jVB`"38Np+5d&)6!#3#%r--XF!N!3"!*!$6I)!!%cb!!!"fJ#
X3!`)14'9cDh4[F#"'EfaNCA*%!3#3"dakT9J-G@jkDA!ZG'KTEQYMFJ)!N!038Np
X+5d&)6!%!!*`"!*!$8&*25NY"5%`"!!#F!3#3%kThLmN!N!C2c&4"8NC839)J!3$
XrN!3!N!49C!#3"&!!N!03!*!,TGA!%+A9`#`!N"-#!!#C"J!8!*!k!r!!N2m!N2m
X!N2m!N2)9!*!$#!!%rbN"*J#3"4J!N!JM!"3XarP!!)!FM@J!()Ui!*!$#J#3!`J
X!N!-)!*!&&L0TEQ0XG@4P)$a0B@0)C@&NCA*c2J#3!`&B!!#`"3!!4&*@8J'B!#5
X+c!!!rc!!YJ#3#%MN!*!$9!!NLX`!!!%!N!-"!*!$$#S!N!0-!#5-!!03i!!!(!"
X'!!&)390)!*!$%PT26N8!N!-H!!%!!!)!!$)!+NM`!!$rr`)!"#B!+NMN"@eVB@K
XX!*!$%!!NLX`!!2m`!,B!N!98!#5+c!!!!3#3!`%!N!--+J#3!d`!*)`!!e$J!!!
XF!%B!!8K"8dJ!N!-5@Np143#3!ai!!3!!!J!!-J!U52!!!2rr!J!%*J!U513&E@Y
XKD'`!N!-3!#5+c!!!rc!!YJ#3"93!*)V-!!!"!*!$!3#3!``U!*!$6!!NM!!$81!
X!!"`!4J99ERTTF#!e,M%a-d&&!*!$(J!"!!!#!!!b!#T)m!!!rrm#!!3Q!#T)j!9
XYDf&SE!#3!a!!*)V-!!$r-!#f!!""8&"-99TTF!!!!J#3!`9!!*!$!J#3!f!!N"-
X%!*!+CB3!N"%35%%#"!!5!*!$!`#3!f!!N"-%!*!+9a3!N"(f4&)"!J!+!*!$"!#
X3!f!!N"-%!*!+9+!!N"!"9N4#!`-!#3#3!`8!N!0J!*!6"!#3#Jr#!*!3$@!!+J)
X%!!%!N!-'!*!$B!#3%`3!N!S)-J#3%%Lm!!!#"!!1!*!$"`#3!f!!N"-%!*!Frrm
X!!!)%!!X!N!-)!*!$B!#3%`3!N!S+M!#3%4`r2!)%!!`!N!-*!*!$B!#3%`3!N!T
X1pJ#3%!Db2c`#"!!0!*!'!5!!!#%U!*!$9!#3"J0)!!"Ea!!!5Y!!!#TB!*!9*)V
X-!3)!%3#3!`S!N!0J!*!6"!#3#P*B!*!3!Hd"r3%#!!B!N!-,!*!$B!#3%`3!N!T
X1SJ#3%'`!r`!"!J!$!*!$$!#3!f!!N"-%!*!+6rS!N"0)!3)!"!#3!`d!N!0J!*!
X6"!#3#Nr'!*!3@YB!!3%#!!8!N!-1!*!$B!#3%`3!N!TE#!#3%&C5!CJ"!J!2!*!
X$$`#3!f!!N"-%!*!+8ii!N"3"!J!3!*!$%!#3!f!!N"-%!*!J!J3!"`#3!a%!N!0
XJ!*!6"!#3#Y)-!*!3mdJ"!!)%!*!&%J#3!f!!N"-%!*!+9'i!N"!%F!HB!J3!%`#
X3!a-!N!0J!*!6"!#3#P'@!*!3)&"bE`%#!!)!N!-8!*!$B!#3%`3!N#!$!`!)!*!
X'%JJ!!'9B!!!&d!#3"M%!N!0ZFJ!!+&!!N"`$!`!8!*!$"J!4!!!JE`#3!aB!d`!
X$!A`"cJ$6!3i"I!(mP#!!N!Bi!!!Tm+J!+I5S!#Rdb!!Tpe3!+IS%!#RmfJ!TrIJ
X!+Im5!#Rr5!!U!0)!+J0F!#S&k!!U#(3!+JX#!#S0N!!!+K"N!#S6&J!U%d`!+KC
X)!#SBd!!U'k!!+K[5!#SEp!!U++J!N,N'`8!!N!d'`6!!N'N'`-3!"X$!!*!$#!!
X"!%%!J3$"!C!$33'"!F%#!3*"!S%#`3-"!d%$J32""!%%335""-%&!39""B%&`3B
X""N%'J3E""`%(33H""m%)!3K"#)%)`3N"#8%*J3R"#J%+33U"#X%,!3Y"#i%,`3`
X"$%%-J3c"$3%033f"$F%1!3j"$S%1`3m"$d%2J3r"!!%!J3'3!i%#!3+"!`%$J33
X"")%&!3@""J%'J3F""i%)!3L"#3%*J3S"#S%,!3Z"$!%-J3d"$B%1!3k"$`%2J4!
X"%)%4!4'"%J%5J4-"%i%8!45"&3%9J4B"&S%A!4H"'!%BJ4N"'B%D!4U"'`%EJ4`
X"()%G!4f"(J%HJ4m"(i%!!##3!h0VDA"`D@jR1L!P,6)bFb!JEQ9PC#!PFb"MEfe
X`BA3Z)(BPG5iPG5!SBf&Z)'4[)(BPG5iPG5N+!##3!h0VDA"`D@jR1L!P,6)bFb!
XJBfpYF(*PFh0TEfiJE@9dD'pN)#9N#J!!*A-k)#"LB@3JCQPXC@jKE@8JE'9ZCh4
XS)#JPFbN+!!!PFcSJ)'*KC#"PH(4bB5"QD@9XC#"XC@jRG'JJ+#9c+3S!CQPXC5!
XM*@3k)#"LB@3JHQP`CQPXC5"[CQCcCA3J+#9c+6SJ)#9XC!S!*6KcD@jR1L!P,6)
XbFb!J*A-PF`!PFb!J*A-k)#!PE'3JBRPdCA-JFQ9aG@PbC@3JG'mJG@jMEfe`FQ9
XcFb"dEb!PE(8JBRPdCA-l#L#3"#9c)*!'Fh9`F'pcC@3JG'mJFQ9aG@PbC5!PE(8
XJBRPdCA-PFb9c*A-+!!!+*A-k)#"LB@3JCQPX3!!!EfeYC@jd)'aPEQGdD!S!!'a
X[Bf&X)'KPB@4PFJS!c(q8!!c(q8!!!!%!!2q3#+Te@qi!'!!"!!"8FPT*8%N
X!#ATTF'PZCQmZB`!!!D5A`JQNPm)*T*I##3!D!!)!!&-H68&$5!%+6@&M5'9KC'9
XbF`#3!`'UG9bNUR9FT+TeA+3!&J!"!!"8FP91@NN!"h9ZHQP`,QJ!!!+N-adpT$-
XG2D3c(6d!&J!#!!"5f9084%N""h0dC'P[,QJ!!!1N,ErlT#frqk3Y[rX!'!!#!!"
X5f90*@N8!#(0THQ9IG#jS!(-!!U3VMFUN+ih+T#Z0bJ!@!!)!!&,C3e4C8!%(Bh4
XjF'8ZD!!!!U3VM+#N+ibJT#Z-S!!@!!)!!&,C49*56J%(CA*bEQmZD!!!!U3Y`,1
XN,F#cT#h!X`!B!!)!!&,C8e4553%)Fh4bD@jR,QJ!F`!#T#apRk3XICqN,(fI!"J
X!!J!!8YP-58e*!3KXD@eTG(-ZD!"c!!+N,F"!T#h!3+3Y`%!!'!!#!!"5f9084%3
X"#(0dC'4PCLjS!(-!!k3Y`#+N,F!LT#h!)J!B!!)!!&,C9d0)33!*Gf0SBA*IG#j
XS!!!#T#j4$D3Z83fN,P%0!"J!!J!!8YP69%4-!3KcG'4XD@)ZD!#3!`+N,E[0T#f
XlcD3YZmd!'!!#!!"5f90*4di"#(0TCfjKE#jS!*!$!U3arj!!T$(rN!#N-Iq3!!!
X@!!)!!&,C4N019!%(CQ0ZG'`ZD!!!!UNe"e5T03G8U68(9!!B!!%!!&4b68&$8`!
X*E@&MFh4KG#jS!!!$T#h!LD3Y`)QN,F#*!"B!!J!!8YP858e&!3CdD@eP,QJ!,J!
X#U68(8UNe"e+T03G5!"J!!3!!9(*0380%!!KYB@0NDA)ZD!!!#J!8,-Ij3!!8,-I
Xj3!!!!3!!rj!)URC5B!!B!!%!!&4b49K88J!*CAKdFQ&MG#jM!!!"T*I##D5A`JQ
XNPm)*!"S!!J!!8aj0380)!3T0B@0)C@&NCA*c!*!$!DTeA+5UG9bNUR9FT!!@!!%
X!!&4b98jD53!(G@jkDA!ZD!!!!U3c(6fN-adpT$-G23!@!!)!!&,C8e4%53%(Fh4
XND@mZD!!!!k3Y[rZN,ErlT#frq`!B!!)!!&,C8dPD43!)FfPkC9pd,QJ!F`!#T#Z
X0bU3VMFUN+ih+!"B!!J!!8YP$9&P3!3GMG(P`C5jS!!!#T#Z-S+3VM+#N+ibJ!"B
X!!J!!8YP&8P*1!3GPFR*ZEbjS!!!#T#h!Xk3Y`,1N,F#c!"J!!J!!8YP69&**!3K
XcG(*TEQFZD!"c!!+N,(fIT#apRk3XICm!'!!#!!"5f8a*68N"#'aTE@PdFbjS!(-
X!!U3Y`%#N,F"!T#h!3!!B!!)!!&,C8e4%4!%)Fh4NC'9Q,QJ!F`!$T#h!)U3Y`#+
XN,F!L!"J!!J!!8YPA3dK"!!PhBfKKFPpd,QJ!!!+N,P%0T#j4$D3Z83d!'!!#!!"
X5f9084%`"#(0dC'aTBLjS!*!$!U3YZmfN,E[0T#flc3!B!!)!!&,C8dP(6J%)FfP
XREQ&X,QJ!N!-#T$(rN!#N-Iq3!+3arj!!!"B!!J!!8YP'3dj8!3GQBfjdE#jS!!!
X#U68(9+Ne"e5T03G8!"J!!3!!9(*03806!!PYB@0cG'&d,QJ!!!1N,F#*T#h!LD3
XY`)N!&J!#!!"5f94*688""R4TE@8ZD!!Z!!+T03G5U68(8UNe"e)!'!!"!!"8FNe
X"3d3!#'eKBf4TFLjS!*!$!DTP-PUUC6*DUQ8b@J!@!!%!!&4b3e*C8!!(Bh*jF(3
XZD!!+!"3XarP!!"3XarP!!!!"!!$rN!LUG9[#!"J!!3!!9(*'58a&!!PQD@aPAfP
X[,Q-!!!'NPm)*T*I##D5A`JN!'J!#!!"6(Ne"3dJ"#NeKBdKPB@4PFR-!N!-"UR9
XFT+TeA+5UG9bN!"B!!3!!9(*96PT*!!GeERTTF#jS!!!#T$-G2D3c(6fN-adp!"B
X!!J!!8YP69%4*!3GcG'4TEbjS!!!$T#frqk3Y[rZN,Erl!"J!!J!!8YP659T&!!K
XcDATPAh3ZD!"c!!+N+ih+T#Z0bU3VMFS!&J!#!!"5f808@9!""f0dHA"P,QJ!!!+
XN+ibJT#Z-S+3VM+!!&J!#!!"5f8958Ni""f9bFQj[,QJ!!!+N,F#cT#h!Xk3Y`,-
X!'!!#!!"5f9088NN"#(0dFQPZCbjS!(-!!U3XICqN,(fIT#apR`!B!!)!!&,C6%P
X053%)E'PYDA4c,QJ!F`!#T#h!3+3Y`%#N,F"!!"J!!J!!8YP69%4%!3KcG'4NC@B
XZD!"c!!1N,F!LT#h!)U3Y`#)!'!!#!!"5f9G$5%%!#AGMD'&bAh3ZD!!!!U3Z83f
XN,P%0T#j4$3!B!!)!!&,C8e4%6!%)Fh4NE'PL,QJ!N!-#T#flcD3YZmfN,E[0!"J
X!!J!!8YP658G1!3KcD@GZB@`ZD!#3!`+N-Iq3!+3arj!!T$(rN!!!&J!#!!"5f8C
X$6P3""fCMER4X,QJ!!!+T03G8U68(9+Ne"e3!'!!"!!"8FNe"3e-!#@eKBh0dBA3
XZD!!!!k3Y`)QN,F#*T#h!L3!@!!)!!&,C9%P043%'G'PYC5jS!#i!!UNe"e+T03G
X5U68(8J!B!!%!!&4b68&$4!!)E@&MC'Pb,QJ!N!-"UQ8b@UTP-PUUC6*D!"B!!3!
X!9(*$8PP3!!GMFRP`G#jS!!!"UH+c2URLXckTiV-q!"J!!3!!9(*838*-!!KdB@*
XXCA-ZD!!!#J!8,-Ij3!!8,-Ij3!!!!3!!rj!)U68(8J!D!!%!!&4b68&$8`!,E@&
XMFf0bC@9Z,Q-!!!'NPm)*T*I##D5A`JN!'J!#!!"6(Ne"3dJ"#NeKBdKPB@4PFR-
X!N!-"T"Bj`+3@1F#N&MR!!"S!!J!!8ap498P$!3Y4G@PMDd4bBAFZD!!!!D3c(6f
XN-adpT$-G23!@!!)!!&,C8e4%53%(Fh4ND@mZD!!!!U3Y[rZN,ErlT#frq`!B!!)
X!!&,C8dPD43!)FfPkC9pd,QJ!,J!"T#fm%k3Y["1N,E`6!"J!!J!!8YP69%4"!3K
XcG'4KFQFZD!!Z!!'N,F#cT#h!Xk3Y`,-!'!!#!!"5f9088NN"#(0dFQPZCbjS!#i
X+!"3XarP!!"3XarP!!!!"!!$rN!LT03G5!"J!!3!!9(*03806!!PYB@0cG'&d,Q-
X!!!'NPm)*T*I##D5A`JN!'J!#!!"6(Ne"3dJ"#NeKBdKPB@4PFR-!N!-"T&"Z@k4
X3EPZN8'jE!"J!!J!!8h*3390$!3K`BA0MB@`ZD!"c!!'N,F#cT#h!Xk3Y`,-!'!!
X#!!"5f9088NN"#(0dFQPZCbjS!(-!!U3Y[rZN,ErlT#frq`!B!!)!!&,C8dPD43!
X)FfPkC9pd,QJ!F`!"U68(9+Ne"e5T03G8!"J!!3!!9(*03806!!PYB@0cG'&d,QJ
X!!!+N,F#*T#h!LD3Y`)N!&J!#!!"5f94*688""R4TE@8ZD!!Z!!!8,-Ij3!!8,-I
Xj3!!!!3!!rj!)T*ceA`!B!!)!!&0k68&$9!!)6@&M9(*KF(-!!!S!c(q8!!c
X(q8!!!!%!!2q3#+Ne"e)!'!!"!!"8FNe"3d3!#'eKBf4TFLjM!()!!D5A`JQNPm)
X*T*I##3!D!!)!!&-H68&$5!%+6@&M5'9KC'9bF`#3!`'N&MR!T"Bj`+3@1F!!'!!
X#!!"6(d958Nm"#%9bFQpbFbjS!(-!!D3c,TUN-bkDT$-ZQJ!@!!)!!&-I4NP-43%
X(4QPXCA-ZD!!!!D3VM+#N+ibJT#Z-S!!@!!)!!&,C49*56J%(CA*bEQmZD!!!!D3
XZ83fN,P%0T#j4$3!B!!)!!&,C8e4%6!%)Fh4NE'PL,QJ!F`!#T#frqk3Y[rZN,Er
Xl!"J!!J!!8YP659T&!!KcDATPAh3ZD!"c!!+N,F!LT#h!)U3Y`#)!'!!#!!"5f9G
X$5%%!#AGMD'&bAh3ZD!!!!D3Y`,1N,F#cT#h!X`!B!!)!!&,C8e4553%)Fh4bD@j
XR,QJ!N!-"U68(8UNe"e+T03G5!"J!!3!!9(*0380%!!KYB@0NDA)ZD!!!#J!8,-I
Xj3!!8,-Ij3!!!!3!!rj!)UQlrNJ!@!!%!!&4b68&83`!(E@&dBfJZB`!!!D5A`JQ
XNPm)*T*I##3!D!!)!!&-H68&$5!%+6@&M5'9KC'9bF`#3!`'UG9bNUR9FT+TeA+3
X!&J!"!!"8FP91@NN!"h9ZHQP`,QJ!!!+N-adpT$-G2D3c(6d!&J!#!!"5f9084%N
X""h0dC'P[,QJ!!!1N,ErlT#frqk3Y[rX!'!!#!!"5f90*@N8!#(0THQ9IG#jS!(-
X!!U3VMFUN+ih+T#Z0bJ!@!!)!!&,C3e4C8!%(Bh4jF'8ZD!!!!U3VM+#N+ibJT#Z
X-S!!@!!)!!&,C49*56J%(CA*bEQmZD!!!!U3Y`,1N,F#cT#h!X`!B!!)!!&,C8e4
X553%)Fh4bD@jR,QJ!F`!#T#apRk3XICqN,(fI!"J!!J!!8YP-58e*!3KXD@eTG(-
XZD!"c!!+N,F"!T#h!3+3Y`%!!'!!#!!"5f9084%3"#(0dC'4PCLjS!(-!!k3Y`#+
XN,F!LT#h!)J!B!!)!!&,C9d0)33!*Gf0SBA*IG#jS!!!#T#j4$D3Z83fN,P%0!"J
X!!J!!8YP69%4-!3KcG'4XD@)ZD!#3!`+N,E[0T#flcD3YZmd!'!!#!!"5f90*4di
X"#(0TCfjKE#jS!*!$!U3arj!!T$(rN!#N-Iq3!!!@!!)!!&,C4N019!%(CQ0ZG'`
XZD!!!!UNe"e5T03G8U68(9!!B!!%!!&4b68&$8`!*E@&MFh4KG#jS!!!$T#h!LD3
XY`)QN,F#*!"B!!J!!8YP858e&!3CdD@eP,QJ!,J!#U68(8UNe"e+T03G5!"J!!3!
X!9(*0380%!!KYB@0NDA)ZD!!!#J!8,-Ij3!!8,-Ij3!!!!3!!rj!)UP'S)J!B!!%
X!!&4b49K36!!*CAK`E'pNC5jM!!!"T*I##D5A`JQNPm)*!"S!!J!!8aj0380)!3T
X0B@0)C@&NCA*c!*!$!DTeA+5UG9bNUR9FT!!@!!%!!&4b98jD53!(G@jkDA!ZD!!
X!!U3c(6fN-adpT$-G23!@!!)!!&,C8e4%53%(Fh4ND@mZD!!!!k3Y[rZN,ErlT#f
Xrq`!B!!)!!&,C8dPD43!)FfPkC9pd,QJ!F`!#T#Z0bU3VMFUN+ih+!"B!!J!!8YP
X$9&P3!3GMG(P`C5jS!!!#T#Z-S+3VM+#N+ibJ!"B!!J!!8YP&8P*1!3GPFR*ZEbj
XS!!!#T#h!Xk3Y`,1N,F#c!"J!!J!!8YP69&**!3KcG(*TEQFZD!"c!!+N,(fIT#a
XpRk3XICm!'!!#!!"5f8a*68N"#'aTE@PdFbjS!(-!!U3Y`%#N,F"!T#h!3!!B!!)
X!!&,C8e4%4!%)Fh4NC'9Q,QJ!F`!$T#h!)U3Y`#+N,F!L!"J!!J!!8YPA3dK"!!P
XhBfKKFPpd,QJ!!!+N,P%0T#j4$D3Z83d!'!!#!!"5f9084%`"#(0dC'aTBLjS!*!
X$!U3YZmfN,E[0T#flc3!B!!)!!&,C8dP(6J%)FfPREQ&X,QJ!N!-#T$(rN!#N-Iq
X3!+3arj!!!"B!!J!!8YP'3dj8!3GQBfjdE#jS!!!#U68(9+Ne"e5T03G8!"J!!3!
X!9(*03806!!PYB@0cG'&d,QJ!!!1N,F#*T#h!LD3Y`)N!&J!#!!"5f94*688""R4
XTE@8ZD!!Z!!+T03G5U68(8UNe"e)!'!!"!!"8FNe"3d3!#'eKBf4TFLjS!!!+!"3
XXarP!!"3XarP!!!!"!!$rN!LTfrqS!"J!!3!!9(*&6PC"!!PPERCKFQGc,Q-!!!'
XNPm)*T*I##D5A`JN!'J!#!!"6(Ne"3dJ"#NeKBdKPB@4PFR-!N!-"UR9FT+TeA+5
XUG9bN!"B!!3!!9(*96PT*!!GeERTTF#jS!!!#T$-G2D3c(6fN-adp!"B!!J!!8YP
X69%4*!3GcG'4TEbjS!!!$T#frqk3Y[rZN,Erl!"J!!J!!8YP659T&!!KcDATPAh3
XZD!"c!!+N+ih+T#Z0bU3VMFS!&J!#!!"5f808@9!""f0dHA"P,QJ!!!+N+ibJT#Z
X-S+3VM+!!&J!#!!"5f8958Ni""f9bFQj[,QJ!!!+N,F#cT#h!Xk3Y`,-!'!!#!!"
X5f9088NN"#(0dFQPZCbjS!(-!!U3XICqN,(fIT#apR`!B!!)!!&,C6%P053%)E'P
XYDA4c,QJ!F`!#T#h!3+3Y`%#N,F"!!"J!!J!!8YP69%4%!3KcG'4NC@BZD!"c!!1
XN,F!LT#h!)U3Y`#)!'!!#!!"5f9G$5%%!#AGMD'&bAh3ZD!!!!U3Z83fN,P%0T#j
X4$3!B!!)!!&,C8e4%6!%)Fh4NE'PL,QJ!N!-#T#flcD3YZmfN,E[0!"J!!J!!8YP
X658G1!3KcD@GZB@`ZD!#3!`+N-Iq3!+3arj!!T$(rN!!!&J!#!!"5f8C$6P3""fC
XMER4X,QJ!!!+T03G8U68(9+Ne"e3!'!!"!!"8FNe"3e-!#@eKBh0dBA3ZD!!!!k3
XY`)QN,F#*T#h!L3!@!!)!!&,C9%P043%'G'PYC5jS!#i!!UNe"e+T03G5U68(8J!
XB!!%!!&4b68&$4!!)E@&MC'Pb,QJ!!!S!c(q8!!c(q8!!!!%!!2q3#+ME6B3
X!'J!"!!"8FP918N8!#R9ZFQ9NG@0P,Q-!N!-"T*I##D5A`JQNPm)*!"S!!J!!8aj
X0380)!3T0B@0)C@&NCA*c!*!$!DTeA+5UG9bNUR9FT!!@!!%!!&4b98jD53!(G@j
XkDA!ZD!!!!U3c(6fN-adpT$-G23!@!!)!!&,C8e4%53%(Fh4ND@mZD!!!!k3Y[rZ
XN,ErlT#frq`!B!!)!!&,C8dPD43!)FfPkC9pd,QJ!F`!#T#Z0bU3VMFUN+ih+!"B
X!!J!!8YP$9&P3!3GMG(P`C5jS!!!#T#Z-S+3VM+#N+ibJ!"B!!J!!8YP&8P*1!3G
XPFR*ZEbjS!!!#T#h!Xk3Y`,1N,F#c!"J!!J!!8YP69&**!3KcG(*TEQFZD!"c!!+
XN,(fIT#apRk3XICm!'!!#!!"5f8a*68N"#'aTE@PdFbjS!(-!!U3Y`%#N,F"!T#h
X!3!!B!!)!!&,C8e4%4!%)Fh4NC'9Q,QJ!F`!$T#h!)U3Y`#+N,F!L!"J!!J!!8YP
XA3dK"!!PhBfKKFPpd,QJ!!!+N,P%0T#j4$D3Z83d!'!!#!!"5f9084%`"#(0dC'a
XTBLjS!*!$!U3YZmfN,E[0T#flc3!B!!)!!&,C8dP(6J%)FfPREQ&X,QJ!N!-#T$(
XrN!#N-Iq3!+3arj!!!"B!!J!!8YP'3dj8!3GQBfjdE#jS!!!#U68(9+Ne"e5T03G
X8!"J!!3!!9(*03806!!PYB@0cG'&d,QJ!!!1N,F#*T#h!LD3Y`)N!&J!#!!"5f94
X*688""R4TE@8ZD!!Z!!+T03G5U68(8UNe"e)!'!!"!!"8FNe"3d3!#'eKBf4TFLj
XS!!!+!"3XarP!!"3XarP!!!!"!!$rN!LUG9[3!"S!!3!!9(*96P0)!!TeER0SFQP
XZDbjM!*!$!D5A`JQNPm)*T*I##3!D!!)!!&-H68&$5!%+6@&M5'9KC'9bF`#3!`'
XUG9bNUR9FT+TeA+3!&J!"!!"8FP91@NN!"h9ZHQP`,QJ!!!+N-adpT$-G2D3c(6d
X!&J!#!!"5f9084%N""h0dC'P[,QJ!!!1N,ErlT#frqk3Y[rX!'!!#!!"5f90*@N8
X!#(0THQ9IG#jS!(-!!U3VMFUN+ih+T#Z0bJ!@!!)!!&,C3e4C8!%(Bh4jF'8ZD!!
X!!U3VM+#N+ibJT#Z-S!!@!!)!!&,C49*56J%(CA*bEQmZD!!!!U3Y`,1N,F#cT#h
X!X`!B!!)!!&,C8e4553%)Fh4bD@jR,QJ!F`!#T#apRk3XICqN,(fI!"J!!J!!8YP
X-58e*!3KXD@eTG(-ZD!"c!!+N,F"!T#h!3+3Y`%!!'!!#!!"5f9084%3"#(0dC'4
XPCLjS!(-!!k3Y`#+N,F!LT#h!)J!B!!)!!&,C9d0)33!*Gf0SBA*IG#jS!!!#T#j
X4$D3Z83fN,P%0!"J!!J!!8YP69%4-!3KcG'4XD@)ZD!#3!`+N,E[0T#flcD3YZmd
X!'!!#!!"5f90*4di"#(0TCfjKE#jS!*!$!U3arj!!T$(rN!#N-Iq3!!!@!!)!!&,
XC4N019!%(CQ0ZG'`ZD!!!!UNe"e5T03G8U68(9!!B!!%!!&4b68&$8`!*E@&MFh4
XKG#jS!!!$T#h!LD3Y`)QN,F#*!"B!!J!!8YP858e&!3CdD@eP,QJ!,J!#U68(8UN
Xe"e+T03G5!"J!!3!!9(*0380%!!KYB@0NDA)ZD!!!#J!8,-Ij3!!8,-Ij3!!!!3!
X!rj!)URC%R!!@!!%!!&4b98jD53!(G@jkDA!ZB`!!!D5A`JQNPm)*T*I##3!D!!)
X!!&-H68&$5!%+6@&M5'9KC'9bF`#3!`'UG9bNUR9FT+TeA+3!&J!"!!"8FP91@NN
X!"h9ZHQP`,QJ!!!+N-adpT$-G2D3c(6d!&J!#!!"5f9084%N""h0dC'P[,QJ!!!1
XN,ErlT#frqk3Y[rX!'!!#!!"5f90*@N8!#(0THQ9IG#jS!(-!!U3VMFUN+ih+T#Z
X0bJ!@!!)!!&,C3e4C8!%(Bh4jF'8ZD!!!!U3VM+#N+ibJT#Z-S!!@!!)!!&,C49*
X56J%(CA*bEQmZD!!!!U3Y`,1N,F#cT#h!X`!B!!)!!&,C8e4553%)Fh4bD@jR,QJ
X!F`!#T#apRk3XICqN,(fI!"J!!J!!8YP-58e*!3KXD@eTG(-ZD!"c!!+N,F"!T#h
X!3+3Y`%!!'!!#!!"5f9084%3"#(0dC'4PCLjS!(-!!k3Y`#+N,F!LT#h!)J!B!!)
X!!&,C9d0)33!*Gf0SBA*IG#jS!!!#T#j4$D3Z83fN,P%0!"J!!J!!8YP69%4-!3K
XcG'4XD@)ZD!#3!`+N,E[0T#flcD3YZmd!'!!#!!"5f90*4di"#(0TCfjKE#jS!*!
X$!U3arj!!T$(rN!#N-Iq3!!!@!!)!!&,C4N019!%(CQ0ZG'`ZD!!!!UNe"e5T03G
X8U68(9!!B!!%!!&4b68&$8`!*E@&MFh4KG#jS!!!$T#h!LD3Y`)QN,F#*!"B!!J!
X!8YP858e&!3CdD@eP,QJ!,J!#U68(8UNe"e+T03G5!"J!!3!!9(*0380%!!KYB@0
XNDA)ZD!#3!`'UC6*DUQ8b@UTP-PS!&J!"!!"8FN05@9!!"f0bHA"d,QJ!!!'UGMZ
X@URBlPUTf1jB!'!!"!!"8FPC&8P-!#ACPFR0TEfiZD!!+!"3XarP!!"3XarP!!!!
X"!!$rN!LU9A9Q!"J!!3!!9(**6NC-!!PTEQCXBA4P,Q-!!!'NPm)*T*I##D5A`JN
X!'J!#!!"6(Ne"3dJ"#NeKBdKPB@4PFR-!N!-"UP&M"UT4B`DU8@-'!"J!!3!!9(*
X*6NC-!!PTEQCXBA4P,QJ!!!+UG9bNUR9FT+TeA+3!&J!"!!"8FP91@NN!"h9ZHQP
X`,QJ!!!1N-adpT$-G2D3c(6d!&J!#!!"5f9084%N""h0dC'P[,QJ!!!5N,ErlT#f
Xrqk3Y[rX!'!!#!!"5f90*@N8!#(0THQ9IG#jS!*!$!k3VMFUN+ih+T#Z0bJ!@!!)
X!!&,C3e4C8!%(Bh4jF'8ZD!!!!k3VM+#N+ibJT#Z-S!!@!!)!!&,C49*56J%(CA*
XbEQmZD!!!!k3Y`,1N,F#cT#h!X`!B!!)!!&,C8e4553%)Fh4bD@jR,QJ!N!-$T#a
XpRk3XICqN,(fI!"J!!J!!8YP-58e*!3KXD@eTG(-ZD!#3!`1N,F"!T#h!3+3Y`%!
X!'!!#!!"5f9084%3"#(0dC'4PCLjS!*!$"+3Y`#+N,F!LT#h!)J!B!!)!!&,C9d0
X)33!*Gf0SBA*IG#jS!!!$T#j4$D3Z83fN,P%0!"J!!J!!8YP69%4-!3KcG'4XD@)
XZD!#3!`1N,E[0T#flcD3YZmd!'!!#!!"5f90*4di"#(0TCfjKE#jS!*!$!k3arj!
X!T$(rN!#N-Iq3!!!@!!)!!&,C4N019!%(CQ0ZG'`ZD!!!!kNe"e5T03G8U68(9!!
XB!!%!!&4b68&$8`!*E@&MFh4KG#jS!!!%T#h!LD3Y`)QN,F#*!"B!!J!!8YP858e
X&!3CdD@eP,QJ!,J!$U68(8UNe"e+T03G5!"J!!3!!9(*0380%!!KYB@0NDA)ZD!#
X3""3XarP!!"3XarP!!!!"!!$rN!LNR29b!"J!!J!!8hT03808!!P0B@08FQ&`Fc)
X!#J!8,-Ij3!!8,-Ij3!!!!3!!rj!)UNYjqJ!D!!%!!&4b68&$93!+E@&MG@jkDA!
XZB`#3!`'NPm)*T*I##D5A`JN!'J!#!!"6(Ne"3dJ"#NeKBdKPB@4PFR-!N!-"UR9
XFT+TeA+5UG9bN!"B!!3!!9(*96PT*!!GeERTTF#jS!!!#T$-G2D3c(6fN-adp!"B
X!!J!!8YP69%4*!3GcG'4TEbjS!!!$T#frqk3Y[rZN,Erl!"J!!J!!8YP659T&!!K
XcDATPAh3ZD!"c!!+N+ih+T#Z0bU3VMFS!&J!#!!"5f808@9!""f0dHA"P,QJ!!!+
XN+ibJT#Z-S+3VM+!!&J!#!!"5f8958Ni""f9bFQj[,QJ!!!+N,F#cT#h!Xk3Y`,-
X!'!!#!!"5f9088NN"#(0dFQPZCbjS!(-!!U3XICqN,(fIT#apR`!B!!)!!&,C6%P
X053%)E'PYDA4c,QJ!F`!#T#h!3+3Y`%#N,F"!!"J!!J!!8YP69%4%!3KcG'4NC@B
XZD!"c!!1N,F!LT#h!)U3Y`#)!'!!#!!"5f9G$5%%!#AGMD'&bAh3ZD!!!!U3Z83f
XN,P%0T#j4$3!B!!)!!&,C8e4%6!%)Fh4NE'PL,QJ!N!-#T#flcD3YZmfN,E[0!"J
X!!J!!8YP658G1!3KcD@GZB@`ZD!#3!`+N-Iq3!+3arj!!T$(rN!!!&J!#!!"5f8C
X$6P3""fCMER4X,QJ!!!+T03G8U68(9+Ne"e3!'!!"!!"8FNe"3e-!#@eKBh0dBA3
XZD!!!!k3Y`)QN,F#*T#h!L3!@!!)!!&,C9%P043%'G'PYC5jS!#i!!UNe"e+T03G
X5U68(8J!B!!%!!&4b68&$4!!)E@&MC'Pb,QJ!N!-"T"Bj`+3@1F#N&MR!!"B!!J!
X!8ap88N&3!3G8FQ&`FbjS!!!"T"Bj`+3@1F#N&MR!!"J!!J!!8ap@38a9!3K@B@a
XeCA-ZD!#3!`+NU-65T+M%dU5Sa0)!&J!#!!"6FP0"6N8""P0"6N8ZD!"S#J!8,-I
Xj3!!8,-Ij3!!!!3!!rj!)URBr8J!8!!%!!&4b68&$,J!&E@&M,Q-!!!'NPm)*T*I
X##D5A`JN!'J!#!!"6(Ne"3dJ"#NeKBdKPB@4PFR-!N!-"UR9FT+TeA+5UG9bN!"B
X!!3!!9(*96PT*!!GeERTTF#jS!!!#T$-G2D3c(6fN-adp!"B!!J!!8YP69%4*!3G
XcG'4TEbjS!!!$T#frqk3Y[rZN,Erl!"J!!J!!8YP659T&!!KcDATPAh3ZD!"c!!+
XN+ih+T#Z0bU3VMFS!&J!#!!"5f808@9!""f0dHA"P,QJ!!!+N+ibJT#Z-S+3VM+!
X!&J!#!!"5f8958Ni""f9bFQj[,QJ!!!+N,F#cT#h!Xk3Y`,-!'!!#!!"5f9088NN
X"#(0dFQPZCbjS!(-!!U3XICqN,(fIT#apR`!B!!)!!&,C6%P053%)E'PYDA4c,QJ
X!F`!#T#h!3+3Y`%#N,F"!!"J!!J!!8YP69%4%!3KcG'4NC@BZD!"c!!1N,F!LT#h
X!)U3Y`#)!'!!#!!"5f9G$5%%!#AGMD'&bAh3ZD!!!!U3Z83fN,P%0T#j4$3!B!!)
X!!&,C8e4%6!%)Fh4NE'PL,QJ!N!-#T#flcD3YZmfN,E[0!"J!!J!!8YP658G1!3K
XcD@GZB@`ZD!#3!`+N-Iq3!+3arj!!T$(rN!!!&J!#!!"5f8C$6P3""fCMER4X,QJ
X!!!+T03G8U68(9+Ne"e3!'!!"!!"8FNe"3e-!#@eKBh0dBA3ZD!!!!k3Y`)QN,F#
X*T#h!L3!@!!)!!&,C9%P043%'G'PYC5jS!#i!!UNe"e+T03G5U68(8J!B!!%!!&4
Xb68&$4!!)E@&MC'Pb,QJ!!!S!c(q8!!c(q8!!!!%!!2q3#+Te@l3!&J!"!!"
X8FN05@9!!"f0bHA"d,Q-!!!'NPm)*T*I##D5A`JN!'J!#!!"6(Ne"3dJ"#NeKBdK
XPB@4PFR-!N!-"UH+dG+RLY(5TiV4d!"3!!3!!9(*D59!Z!!9kDA!ZD!!!!UTeA+5
XUG9bNUR9FT!!@!!%!!&4b98jD53!(G@jkDA!ZD!!!!k3c(6fN-adpT$-G23!@!!)
X!!&,C8e4%53%(Fh4ND@mZD!!!"+3Y[rZN,ErlT#frq`!B!!)!!&,C8dPD43!)FfP
XkC9pd,QJ!F`!$T#Z0bU3VMFUN+ih+!"B!!J!!8YP$9&P3!3GMG(P`C5jS!!!$T#Z
X-S+3VM+#N+ibJ!"B!!J!!8YP&8P*1!3GPFR*ZEbjS!!!$T#h!Xk3Y`,1N,F#c!"J
X!!J!!8YP69&**!3KcG(*TEQFZD!"c!!1N,(fIT#apRk3XICm!'!!#!!"5f8a*68N
X"#'aTE@PdFbjS!(-!!k3Y`%#N,F"!T#h!3!!B!!)!!&,C8e4%4!%)Fh4NC'9Q,QJ
X!F`!%T#h!)U3Y`#+N,F!L!"J!!J!!8YPA3dK"!!PhBfKKFPpd,QJ!!!1N,P%0T#j
X4$D3Z83d!'!!#!!"5f9084%`"#(0dC'aTBLjS!*!$!k3YZmfN,E[0T#flc3!B!!)
X!!&,C8dP(6J%)FfPREQ&X,QJ!N!-$T$(rN!#N-Iq3!+3arj!!!"B!!J!!8YP'3dj
X8!3GQBfjdE#jS!!!$U68(9+Ne"e5T03G8!"J!!3!!9(*03806!!PYB@0cG'&d,QJ
X!!!5N,F#*T#h!LD3Y`)N!&J!#!!"5f94*688""R4TE@8ZD!!Z!!1T03G5U68(8UN
Xe"e)!'!!"!!"8FNe"3d3!#'eKBf4TFLjS!*!$!DTP-PUUC6*DUQ8b@J!@!!%!!&4
Xb3e*C8!!(Bh*jF(3ZD!!`!"3XarP!!"3XarP!!!!"!!$rN!LU8D&f!"3!!J!!8Y9
X"6P0*!!4"6P0*!(S!N!5N+ih+T#Z0bJ!@!!)!N!8"!*!$#!4YB@PZ)*!$!!+N+ib
XJT#Z-S+3VM+!!&J!#!!"5f8958Ni""f9bFQj[,QJ!!!+N,F#cT#h!Xk3Y`,-!'!!
X#!!"5f9088NN"#(0dFQPZCbjS!(-!!U3XICqN,(fIT#apR`!B!!)!!&,C6%P053%
X)E'PYDA4c,QJ!F`!#T#h!3+3Y`%#N,F"!!"J!!J!!8YP69%4%!3KcG'4NC@BZD!"
Xc!!1N,F!LT#h!)U3Y`#)!'!!#!!"5f9G$5%%!#AGMD'&bAh3ZD!!!!U3Z83fN,P%
X0T#j4$3!B!!)!!&,C8e4%6!%)Fh4NE'PL,QJ!N!-#T#flcD3YZmfN,E[0!"J!!J!
X!8YP658G1!3KcD@GZB@`ZD!#3!`+N-Iq3!+3arj!!T$(rN!!!&J!#!!"5f8C$6P3
X""fCMER4X,QJ!!!+T03G8U68(9+Ne"e3!'!!"!!"8FNe"3e-!#@eKBh0dBA3ZD!!
X!!k3Y`)QN,F#*T#h!L3!@!!)!!&,C9%P043%'G'PYC5jS!#i!!UNe"e+T03G5U68
X(8J!B!!%!!&4b68&$4!!)E@&MC'Pb,QJ!!!S!c(q8!!c(q8!!!!%!!2q3#+T
Xf4*`!&J!"!!"8FP91@NN!"h9ZHQP`,Q-!!!'NPm)*T*I##D5A`JN!'J!#!!"6(Ne
X"3dJ"#NeKBdKPB@4PFR-!N!-"UR9FT+TeA+5UG9bN!"B!!3!!9(*96PT*!!GeERT
XTF#jS!!!#T$-G2D3c(6fN-adp!"B!!J!!8YP69%4*!3GcG'4TEbjS!!!$T#frqk3
XY[rZN,Erl!"J!!J!!8YP659T&!!KcDATPAh3ZD!"c!!+N+ih+T#Z0bU3VMFS!&J!
X#!!"5f808@9!""f0dHA"P,QJ!!!+N+ibJT#Z-S+3VM+!!&J!#!!"5f8958Ni""f9
XbFQj[,QJ!!!+N,F#cT#h!Xk3Y`,-!'!!#!!"5f9088NN"#(0dFQPZCbjS!(-!!U3
XXICqN,(fIT#apR`!B!!)!!&,C6%P053%)E'PYDA4c,QJ!F`!#T#h!3+3Y`%#N,F"
X!!"J!!J!!8YP69%4%!3KcG'4NC@BZD!"c!!1N,F!LT#h!)U3Y`#)!'!!#!!"5f9G
X$5%%!#AGMD'&bAh3ZD!!!!U3Z83fN,P%0T#j4$3!B!!)!!&,C8e4%6!%)Fh4NE'P
XL,QJ!N!-#T#flcD3YZmfN,E[0!"J!!J!!8YP658G1!3KcD@GZB@`ZD!#3!`+N-Iq
X3!+3arj!!T$(rN!!!&J!#!!"5f8C$6P3""fCMER4X,QJ!!!+T03G8U68(9+Ne"e3
X!'!!"!!"8FNe"3e-!#@eKBh0dBA3ZD!!!!k3Y`)QN,F#*T#h!L3!@!!)!!&,C9%P
X043%'G'PYC5jS!#i!!UNe"e+T03G5U68(8J!B!!%!!&4b68&$4!!)E@&MC'Pb,QJ
X!N!-"UQ8b@UTP-PUUC6*D!"B!!3!!9(*$8PP3!!GMFRP`G#jS!!!"URBlPUTf1jD
XUGMZ@!"J!!3!!9(*@49*6!!PfCA*cD@pZ,QJ!#J!8,-Ij3!!8,-Ij3!!!!3!!rj!
X)UP9eCJ!B!!%!!&4b58j'6!!*D@jQE'&dC5jM!!!"T*I##D5A`JQNPm)*!"S!!J!
X!8aj0380)!3T0B@0)C@&NCA*c!*!$!DT4B`DU8@-'UP&M"J!B!!%!!&4b58j'6!!
X*D@jQE'&dC5jS!!!#UR9FT+TeA+5UG9bN!"B!!3!!9(*96PT*!!GeERTTF#jS!!!
X$T$-G2D3c(6fN-adp!"B!!J!!8YP69%4*!3GcG'4TEbjS!!!%T#frqk3Y[rZN,Er
Xl!"J!!J!!8YP659T&!!KcDATPAh3ZD!#3!`1N+ih+T#Z0bU3VMFS!&J!#!!"5f80
X8@9!""f0dHA"P,QJ!!!1N+ibJT#Z-S+3VM+!!&J!#!!"5f8958Ni""f9bFQj[,QJ
X!!!1N,F#cT#h!Xk3Y`,-!'!!#!!"5f9088NN"#(0dFQPZCbjS!*!$!k3XICqN,(f
XIT#apR`!B!!)!!&,C6%P053%)E'PYDA4c,QJ!N!-$T#h!3+3Y`%#N,F"!!"J!!J!
X!8YP69%4%!3KcG'4NC@BZD!#3!`5N,F!LT#h!)U3Y`#)!'!!#!!"5f9G$5%%!#AG
XMD'&bAh3ZD!!!!k3Z83fN,P%0T#j4$3!B!!)!!&,C8e4%6!%)Fh4NE'PL,QJ!N!-
X$T#flcD3YZmfN,E[0!"J!!J!!8YP658G1!3KcD@GZB@`ZD!#3!`1N-Iq3!+3arj!
X!T$(rN!!!&J!#!!"5f8C$6P3""fCMER4X,QJ!!!1T03G8U68(9+Ne"e3!'!!"!!"
X8FNe"3e-!#@eKBh0dBA3ZD!!!"+3Y`)QN,F#*T#h!L3!@!!)!!&,C9%P043%'G'P
XYC5jS!#i!!kNe"e+T03G5U68(8J!B!!%!!&4b68&$4!!)E@&MC'Pb,QJ!N!38,-I
Xj3!!8,-Ij3!!!!3!!rj!)T*ceFJ!B!!)!!&0k68&$9!!*6@&M9(*KF(-b!!S!c
X(q8!!c(q8!!!!%!!2q3#+T,HIS!'J!"!!"8FNe"3e8!#QeKBh9ZHQP`,Q-!N!-
X"T*I##D5A`JQNPm)*!"S!!J!!8aj0380)!3T0B@0)C@&NCA*c!*!$!DTeA+5UG9b
XNUR9FT!!@!!%!!&4b98jD53!(G@jkDA!ZD!!!!U3c(6fN-adpT$-G23!@!!)!!&,
XC8e4%53%(Fh4ND@mZD!!!!k3Y[rZN,ErlT#frq`!B!!)!!&,C8dPD43!)FfPkC9p
Xd,QJ!F`!#T#Z0bU3VMFUN+ih+!"B!!J!!8YP$9&P3!3GMG(P`C5jS!!!#T#Z-S+3
XVM+#N+ibJ!"B!!J!!8YP&8P*1!3GPFR*ZEbjS!!!#T#h!Xk3Y`,1N,F#c!"J!!J!
X!8YP69&**!3KcG(*TEQFZD!"c!!+N,(fIT#apRk3XICm!'!!#!!"5f8a*68N"#'a
XTE@PdFbjS!(-!!U3Y`%#N,F"!T#h!3!!B!!)!!&,C8e4%4!%)Fh4NC'9Q,QJ!F`!
X$T#h!)U3Y`#+N,F!L!"J!!J!!8YPA3dK"!!PhBfKKFPpd,QJ!!!+N,P%0T#j4$D3
XZ83d!'!!#!!"5f9084%`"#(0dC'aTBLjS!*!$!U3YZmfN,E[0T#flc3!B!!)!!&,
XC8dP(6J%)FfPREQ&X,QJ!N!-#T$(rN!#N-Iq3!+3arj!!!"B!!J!!8YP'3dj8!3G
XQBfjdE#jS!!!#U68(9+Ne"e5T03G8!"J!!3!!9(*03806!!PYB@0cG'&d,QJ!!!1
XN,F#*T#h!LD3Y`)N!&J!#!!"5f94*688""R4TE@8ZD!!Z!!+T03G5U68(8UNe"e)
X!'!!"!!"8FNe"3d3!#'eKBf4TFLjS!*!$!D3@1F#N&MR!T"Bj`!!@!!)!!&-I9&*
X"8!%(9(*KF(-ZD!!!!D3@1F#N&MR!T"Bj`!!B!!)!!&-I9N&-93%)9Q&XG@9c,QJ
X!N!-#T+M%dU5Sa0+NU-65!"B!!J!!8h*638j&!3C638j&,QJ!D+TeA+5UG9bNUR9
XFT!!@!!%!!&4b98jD53!(G@jkDA!ZD!!!!U3c(6fN-adpT$-G23!@!!)!!&,C8e4
X%53%(Fh4ND@mZD!!!!k3Y[rZN,ErlT#frq`!B!!)!!&,C8dPD43!)FfPkC9pd,QJ
X!F`!#T#Z0bU3VMFUN+ih+!"B!!J!!8YP$9&P3!3GMG(P`C5jS!!!#T#Z-S+3VM+#
XN+ibJ!"B!!J!!8YP&8P*1!3GPFR*ZEbjS!!!#T#h!Xk3Y`,1N,F#c!"J!!J!!8YP
X69&**!3KcG(*TEQFZD!"c!!+N,(fIT#apRk3XICm!'!!#!!"5f8a*68N"#'aTE@P
XdFbjS!(-!!U3Y`%#N,F"!T#h!3!!B!!)!!&,C8e4%4!%)Fh4NC'9Q,QJ!F`!$T#h
X!)U3Y`#+N,F!L!"J!!J!!8YPA3dK"!!PhBfKKFPpd,QJ!!!+N,P%0T#j4$D3Z83d
X!'!!#!!"5f9084%`"#(0dC'aTBLjS!*!$!U3YZmfN,E[0T#flc3!B!!)!!&,C8dP
X(6J%)FfPREQ&X,QJ!N!-#T$(rN!#N-Iq3!+3arj!!!"B!!J!!8YP'3dj8!3GQBfj
XdE#jS!!!#U68(9+Ne"e5T03G8!"J!!3!!9(*03806!!PYB@0cG'&d,QJ!!!1N,F#
X*T#h!LD3Y`)N!&J!#!!"5f94*688""R4TE@8ZD!!Z!!+T03G5U68(8UNe"e)!'!!
X"!!"8FNe"3d3!#'eKBf4TFLjS!!"`D@jR#J"PFR*[FL"E*A0G1L!JBQ&N)'9iG(*
XK)'CTC@aN)%053b!P-$KXH#!SFfK[G@aN!*!$B!#3!h!!N!G3!*!$)!!F2c`!!DR
X`"GBr2!!"UI!&kMmm!!'Tm!Aq2c`!!DR`"KSr2!!"UI!'8$mm!!'Tm!C`2c`!!DR
X`"T)r2!!"UI!'XMmm!!'Tm!NX2c`!!DR`!*!$"!#3"`3!N!F%!*!'#6i!N!-+!*!
XE&8*i#NUGcNkk!&41ZJ"N,$a*6N4B6VS(1NIkrmSQM%IkrmJQK%kk!'a1ZJ1L6VS
X(mNkk!0j1ZJ#U3QG)H2rr5'm!"%KA5(J!!5)krl*1ZJ916V8B!#"Y!'a1N!#Tp&(
Xi#Pj`!%kk"-CR"NU3!'F#S%P1G5!i#RKQ$L`m@Np148kk"Y)J$'!'*N!J+`!J4rV
XrB#D!6R8X2%4"9%&1ZJDf)%`LH!N))!5J,Nkk"fT(q[p)*S3X2&088P01ZJDB4rV
Xr0#D-,$a%8N9-6VS'L#"-)!4R$%kk!Ui%J!#3!`aQp%lk"c419[rD3IJ*%#*2F##
XJ,R!"d"&D%G,!3IS!%R!&S#j9MdK[!!+TPdjH6R8ZFR0bB`"(qJIf*VJ+I#"i#RL
Xar!#3"'F)4rS(jLDS!"B[1!U!CJ*BMdje@)p)jrri2Lm!1&(i#PjJ#PQ2,`LTT5!
XIS%!`"dkk!pCRE%IkrTiQL#!3Cq3L3%U4CLkJ+D"*,$a$8N9-6VS&hQG-2Lm!1#"
X-)!4R$%kk!0S%J!#3!`aQp%kk"S*1ZJ*m)(VqB+"T#!!!"fB%S'5J+8kk!ZBLE`!
XdABN[53!f60mIre525MJ",@F#UIp1GA!2UFPBMb"[!!3-8%ljCJi`)%kk!e*Rk+!
XU6VS#J#kI6R91ZJFU6VS!$Nkk"TK1G8kk"aa1G5!k"a"Q!!!b)(J#TR!-d*!!X,J
X#UQBL)(J+l+!P)&!L5#)BB!T"k!!)G!'%'0$#8FRrp*!!L0#*CJ*1G5)!S#iJH!V
XX)!'J*#*36qrr`#"23UJ!%M&T!!3!&U!93UG)D3!-)%qTmM)B6VS#lL4BeF%d'#)
XBEMjR)P*"Ca*53@FQ9N&R!!#Z8N&R!!#B6R8b+2rd6VS#r0056R8b+2rd6VS#c00
X56R8b+2rd6VS#dY1Urrj1G8kk!T)b+3!-5QN!#QBJ9%*U%&*#CRK`BkR*8N*Qq00
X56R91ZJ+8dUN!$Y056R91ZJ+XdUN!$Ja#rraRBQeS8N*Q"0056R9$p4J#[P&Qc!a
XK2caQaP*#CJB+DJ!Arrib)9K")RVmk0+4NNV68Nje-LMrp%kk!QM5MG1Urrj1G6)
XSrr41ZJ)ddSh6U[rq6R91ZJ)SdUN!$Y+0dkVrrNjedSh6U[rq6R9$p4J#[P&Qm!a
XK2caQkJTU!!2rr$)KA%%LH[b-dT(5U[rqNNSe3Irq0,a1F8je-KK1ZJ(J4I8B!0A
XB0"KR-L)BEL4R$P*"CK3b+2rd6VS"k'!B-LMrp%kk!ETJ$M)Srr41ZJ(#B!C1ZJ(
XLdSh6NNje)KK1ZJ(@de*1G5"kr"BJ1[`@5UJ!!'FS-LJ!+'FL*#J!'&P#3qd!%02
XS!!69@6,m2ca#'4,S!$dbr+R`88&Ql%(S!%!%J!#3!d"QaNje)(VldL!kqp*brh3
X!5UJ!!'FD[LJ!2@B80LJ!+%M$C`c8Jl+S!!4P"#)S!!4"k!"!")!!N!0!CY3JH[Z
XZ)&"`%*+!jSN``HD+!%+!!$$#6R8J8()!-KJ`'!*!IrrRL82e'#!d%@!5)LN!"*+
X)-X%br$mm-X)br+R`8FMrl'!f)"#J95"!FJ!b'$!B!N"rrqH*3r8B)!aT6[N!!QF
XB0#N!"'!1-K&)F"!!-X)br%lj)Yp4b2r`)$S!#L"!CJ*K"Nl3!*!%-$bJ[D0')JJ
X`2+LITdDbL'F'3IS!,'!J$$J!"!%[C3C"qJ!LB")-1!!#!5pP"N(k!"KJ"%(k!"j
X$q[r#)SK1GD#p6RAdq%je6RS!!JM!!!01H`!#6R9CMbmm3dp%46m!UD!JAe$i#Pi
XJ#%je+(VkUL*-Np6PJGR"dp41G5KkqT,#r!"!)M3B'#KkqTV5P%je+(VkIX,m!%!
XL0"J)NVVkJNje+(VkE-,m!%!L0"J3dVVkE%je+(Vk@X,m!%!L0"J%"S%!N!-36R9
X1Z[qL-LN!$%TT!!TQ"NkkrlKJ"%kkrpE5U3!16R8JAc)B0"L`@&I*rrT+3QIq6[!
XJr#"I-KJd',#B9mRrqNT#Crj1m#$k)&mb'$3BX%*Z#T!!3@d'd%""m!!#-""RrNl
X`!!!J,`!%,d%!"#)[!!J[A`!%51Fm!#3!*J&)3X6$+!!U!8K&b-A84%K#N!2!`G#
X#60m!2#)I6R8J,`!%,d%!"#)[!!J[A`!%51Fa!%kk!*a-h`#-)Kp1G5![!!3[33!
X%)Lm!##pI!!4)jc%!6VS!I#!"60m!M#)I6R8J,`!%,d%!"#)[!!J[A`!%51Fa!%k
Xk!#a-h`#-)Kp1G5![!!3[33!%)Lm!##pI!!4)jc%!6VS!$#!"60m!M#)I6R9+J'S
XF5S&U$%5!4)&1ZJ!J4)&1G85!6VS!&N5!4)&1G8U"DJT%J8kk!!C%J%je,M`!!2r
XrXS"M"L)!F!"1GE#(BJb!`8K!-J"#3%K!6R@bKf)D,J"#3%K!J-&)3%K(2J")4il
X"-!G)4c)(6R8N!#B"iSMLLE+(B[L!`F#(-J2#`#i$5%I1`%K(dSGP#*+#BJ4%J8j
Xe8d"Jj(i!8IJ+APQ2,`Br"kQJ)"pR!!#Z*N"CMbm,UD8Q(b!,+!054qp(8NFk"f!
X@@Bm["Mm(UD!J(fF!!)K54`D%!!"rrP@2,`#TTM!I#!!!"@EF82J+AXp&QNGQ(#!
X$S%![#kQL)"0R!!"D,`ZTNLK6)%ZJ+A!"6R8J"+%H)!KR!!"#+%J[#kQL)"0R!!!
Xf)%XJ!f!B@Bm["Mm(UD!J(fF!!#*54b"!)$`!!(rq,`JJ8#*-fF#J,UQM8FhrfTR
X%*Na`!8je)%Y+4@B%S#01GD!I6R8b2+R`3rVj%%kk!,!b2+Rb3rVj[%kk!+3b2+R
Xa3rVjLNkk!*Jb2+Rc3rVjT#"i#RLar!#3"'F3)#J!&QF+)#J!('F86[S!G%kk!(!
Xb2+Rd3rVjG%lk!'41ZJ"J-MbTp%2kqA*1qJ"8,`JJE`!),fJ!!J!))$S!GQB!!$`
XJH!+QF!c3N!#`Z!+UCLa1ZJ"Q-MbTm%kk!%)b2+Ra6VS!1M)mUI*1ZJ!b-MbTmdk
Xk!#Sb2+Rd6VS!)L"I6R8`!D&'*%K`$+%H-!'J4c$m6VNJb6$m6[NJbNje-!'K4L*
XS!!LJ(c!")%QJ4dje!*!)6R8J1[rdC`3J3%+3!%je!*!U!3#3!dhb!!"-mJ!!!GS
X!'cC!"eS!N!-F!G)!%%K"8dJ!N!1+@Np143#3!jC,58j%!*!$SPG-6d-!N!1Z58j
X%@!#3!lT$6d4&!!3!aN4"9%%!!!%#8e458`!!!3j%8N9-!!!"'P0C69-!!!%Q3dj
X'4`!!!6*659T&!!!"2N4#8e3!!!&+4%*A8`!!!9C$8N9-!!)"BN4#98F!!J''9%9
XB9!!!!DS!!3#3"b$b2!!!rrm!!!X)!#$br!!!rrm!!!4%!#$c8!!!rrm!!!2d!#$
Xc!*!$rrm!!!@J!#$b3!!!rrm!!%--!#$bB!!#rrm!!%0`!#$bG!!%rrm!!%0i!#$
XbS!!$rrm!!%1!!#$bR!!"rrm8!%1)!#$c%!!!rrm!!%c+!#$bC!!!rrm!!%c1!#$
Xb-!!!rrm!!%c5!#$bQ!!!rrm!!%c@!#$bE!!'rrm!!!3!!#$b82rr!!B!!!3F!#$
XbH!#!rrm!!!VN!#$c'!#!rrm!!!VZ!#$c-!!#rrm!!%cD!#$bU!!%rrm!!%cH!#$
XbV!!$rrm!!%cL!#$bM!!#rrm!!%cQ!#$bP!!%rrm!!%cU!#$c3!!$rrm!!%cZ!#$
XbA!!!rrm!!!3U!#$bT!9YDf&SE!%f"pi:
END_OF_FILE
if test 24586 -ne `wc -c <'unzip-5.12/mac/thinkc.hqx'`; then
echo shar: \"'unzip-5.12/mac/thinkc.hqx'\" unpacked with wrong size!
fi
# end of 'unzip-5.12/mac/thinkc.hqx'
fi
if test -f 'unzip-5.12/unix/Makefile' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'unzip-5.12/unix/Makefile'\"
else
echo shar: Extracting \"'unzip-5.12/unix/Makefile'\" \(27036 characters\)
sed "s/^X//" >'unzip-5.12/unix/Makefile' <<'END_OF_FILE'
X#==============================================================================
X# Makefile for UnZip, UnZipSFX and fUnZip: Unix and MS-DOS ("real" makes only)
X# Version: 5.12 25 August 1994
X#==============================================================================
X
X
X# INSTRUCTIONS (such as they are):
X#
X# "make vax" -- makes UnZip on a generic Unix VAX in the current directory
X# "make list" -- lists all supported systems (targets)
X# "make help" -- provides pointers on what targets to try if problems occur
X# "make wombat" -- chokes and dies if you haven't added the specifics for your
X# Wombat 68000 (or whatever) to the systems list
X#
X# CF are flags for the C compiler. LF are flags for the loader. LF2 are more
X# flags for the loader, if they need to be at the end of the line instead of at
X# the beginning (for example, some libraries). FL and FL2 are the corre-
X# sponding flags for fUnZip. LOCAL_UNZIP is an environment variable that can
X# be used to add default C flags to your compile without editing the Makefile
X# (e.g., -DDEBUG_STRUC, or -FPi87 on PCs using Microsoft C).
X#
X# Some versions of make do not define the macro "$(MAKE)"; this is rare, but
X# if things don't work, try using "make" instead of "$(MAKE)" in your system's
X# makerule. Or try adding the following line to your .login file:
X# setenv MAKE "make"
X# (That never works--makes which are too stupid to define MAKE are also too
X# stupid to look in the environment--but try it anyway for kicks. :-) )
X#
X# Memcpy and memset are provided for those systems that don't have them; they
X# are in file_io.c and will be used if -DZMEM is included in CF. These days
X# almost all systems have them.
X#
X# Be sure to test your new UnZip (and UnZipSFX and fUnZip); successful compila-
X# tion does not always imply a working program.
X
X
X#####################
X# MACRO DEFINITIONS #
X#####################
X
X# Defaults most systems use (use LOCAL_UNZIP in environment to add flags,
X# such as -DDOSWILD).
X
X# UnZip flags
XCC = cc# try using "gcc" target rather than changing this (if you do,
XLD = $(CC)# you MUST change LD, too--else "unresolved symbol: ___main")
XLOC = $(LOCAL_UNZIP)
XCF = -O -I. $(LOC)
XLF = -o unzip
XLF2 = -s
X
X# UnZipSFX flags
XSL = -o unzipsfx
XSL2 = $(LF2)
X
X# fUnZip flags
XFL = -o funzip
XFL2 = $(LF2)
X
X# general-purpose stuff
XCP = cp
XLN = ln
XRM = rm -f
XCHMOD = chmod
XSTRIP = strip
XE =
XO = .o
XM = unix
XSHELL = /bin/sh
X
X# object files
XOBJS1 = unzip$O crypt$O envargs$O explode$O extract$O file_io$O
XOBJS2 = inflate$O match$O unreduce$O unshrink$O zipinfo$O
XOBJS = $(OBJS1) $(OBJS2) $M$O
XLOBJS = $(OBJS)
XOBJX = unzipsfx$O crypt$O extract_$O file_io$O inflate$O match$O $M_$O
XLOBJX = $(OBJX)
XOBJF = funzip$O crypt_$O inflate_$O
X#OBJS_OS2 = $(OBJS1:.o=.obj) $(OBJS2:.o=.obj) os2.obj
X#OBJF_OS2 = $(OBJF:.o=.obj)
X
X# installation
XINSTALL = cp# probably can change this to 'install' if you have it
X# on some systems, manext=l and MANDIR=/usr/man/man$(manext) may be appropriate
Xmanext = 1
Xprefix = /usr/local
XBINDIR = $(prefix)/bin# where to install executables
XMANDIR = $(prefix)/man/man$(manext)# where to install man pages
XINSTALLEDBIN = $(BINDIR)/funzip$E $(BINDIR)/zipinfo$E $(BINDIR)/unzipsfx$E \
X $(BINDIR)/unzip$E
XINSTALLEDMAN = $(MANDIR)/unzip.$(manext) $(MANDIR)/funzip.$(manext) \
X $(MANDIR)/unzipsfx.$(manext) $(MANDIR)/zipinfo.$(manext)
X#
XUNZIPS = unzip$E funzip$E unzipsfx$E
X# this is a little ugly...well, no, it's a lot ugly:
XMANS = unix/unzip.1 unix/unzipsfx.1 unix/zipinfo.1 unix/funzip.1
XDOCS = unzip.doc unzipsfx.doc zipinfo.doc funzip.doc
X
X# list of supported systems/targets in this version
XSYSTEMS1 = 386i 3Bx 7300 7300_gcc aix aix_rt amdahl amdahl_eft apollo
XSYSTEMS2 = aviion bcc_dos bsd bsd386 bull coherent convex cray cray_scc
XSYSTEMS3 = cray_v3 cyber_sgi dec dnix encore eta gcc gcc_dos generic
XSYSTEMS4 = generic2 generic3 gould hk68 hp hpux linux minix mips msc_dos
XSYSTEMS5 = next next10 next2x next3x nextfat osf1 pixel ptx pyramid
XSYSTEMS6 = regulus rs6000 sco sco_dos sco_sl sco_x286 sequent sgi solaris
XSYSTEMS7 = stellar sun sysv sysv_gcc sysv6300 tahoe ultrix vax v7 wombat
XSYSTEMS8 = xenix xos
X
X####################
X# DEFAULT HANDLING #
X####################
X
X# By default, print help on which makefile targets to try. (The SYSTEM
X# variable is no longer supported; use "make <target>" instead.)
X
Xhelp:
X @echo ""
X @echo\
X " If you're not sure about the characteristics of your system, try typing"
X @echo\
X ' "make generic". If the compiler barfs and says something unpleasant about'
X @echo\
X ' "timezone redefined," try typing "make clean" followed by "make generic2".'
X @echo\
X ' If, on the other hand, it complains about an undefined symbol _ftime, try'
X @echo\
X ' typing "make clean" followed by "make generic3". One of these actions'
X @echo\
X ' should produce a working copy of unzip on most Unix systems. If you know'
X @echo\
X ' a bit more about the machine on which you work, you might try "make list"'
X @echo\
X ' for a list of the specific systems supported herein. (Many of them do'
X @echo\
X " exactly the same thing, so don't agonize too much over which to pick if"
X @echo\
X ' two or more sound equally likely.) Also check out the INSTALL file for'
X @echo\
X ' notes on compiling various targets. As a last resort, feel free to read'
X @echo\
X ' the numerous comments within the Makefile itself. Note that to compile'
X @echo\
X ' the decryption version of UnZip, you must obtain the full versions of'
X @echo\
X ' crypt.c and crypt.h (see the "Where" file for ftp and mail-server sites).'
X @echo\
X ' Have a mostly pretty good day.'
X @echo ""
X
Xlist:
X @echo ""
X @echo\
X 'Type "make <system>", where <system> is one of the following:'
X @echo ""
X @echo " $(SYSTEMS1)"
X @echo " $(SYSTEMS2)"
X @echo " $(SYSTEMS3)"
X @echo " $(SYSTEMS4)"
X @echo " $(SYSTEMS5)"
X @echo " $(SYSTEMS6)"
X @echo " $(SYSTEMS7)"
X @echo " $(SYSTEMS8)"
X# @echo ""
X# @echo\
X# 'Targets for related utilities (ZipInfo and fUnZip) include:'
X# @echo ""
X# @echo " $(SYS_UTIL1)"
X# @echo " $(SYS_UTIL2)"
X @echo ""
X @echo\
X 'For further (very useful) information, please read the comments in Makefile.'
X @echo ""
X
Xgeneric_msg:
X @echo ""
X @echo\
X ' Attempting "make generic" now. If this fails for some reason, type'
X @echo\
X ' "make help" and/or "make list" for suggestions.'
X @echo ""
X
X
X###############################################
X# BASIC COMPILE INSTRUCTIONS AND DEPENDENCIES #
X###############################################
X
X# this is for GNU make; comment out and notify zip-bugs if it causes errors
X.SUFFIXES: .c $O
X
X.c$O:
X $(CC) -c $(CF) $*.c
X
X# this doesn't work...directories are always a pain with implicit rules
X#.1.doc: unix/$<
X# nroff -Tman -man $< | col -b | uniq | \
X# sed 's/Sun Release ..../Info-ZIP /' > $@
X
X
X# these rules are specific to Suns and are really intended only for the
X# authors' use in creating non-Unix documentation files (which are pro-
X# vided with both source and binary distributions). We should probably
X# add a ".1.man" rule for more generic systems...
X
Xunzip.doc: unix/unzip.1
X nroff -Tman -man unix/unzip.1 | col -b | uniq | \
X sed 's/Sun Release ..../Info-ZIP /' > $@
X
Xunzipsfx.doc: unix/unzipsfx.1
X nroff -Tman -man unix/unzipsfx.1 | col -b | uniq | \
X sed 's/Sun Release ..../Info-ZIP /' > $@
X
Xzipinfo.doc: unix/zipinfo.1
X nroff -Tman -man unix/zipinfo.1 | col -b | uniq | \
X sed 's/Sun Release ..../Info-ZIP /' > $@
X
Xfunzip.doc: unix/funzip.1
X nroff -Tman -man unix/funzip.1 | col -b | uniq | \
X sed 's/Sun Release ..../Info-ZIP /' > $@
X
X
Xall: generic_msg generic
Xunzips: $(UNZIPS)
Xdocs: $(DOCS)
Xunzipsman: unzips docs
Xunzipsdocs: unzips docs
X
X# this really only works for Unix targets, unless specify E and O on cmd line
Xclean:
X rm -f $(OBJS) $(OBJF) $(OBJX) $(UNZIPS)
X
Xinstall: $(UNZIPS) $(MANS)
X $(INSTALL) $(UNZIPS) $(BINDIR)
X $(RM) $(BINDIR)/zipinfo$E
X $(LN) $(BINDIR)/unzip$E $(BINDIR)/zipinfo$E
X $(INSTALL) unix/unzip.1 $(MANDIR)/unzip.$(manext)
X $(INSTALL) unix/unzipsfx.1 $(MANDIR)/unzipsfx.$(manext)
X $(INSTALL) unix/zipinfo.1 $(MANDIR)/zipinfo.$(manext)
X $(INSTALL) unix/funzip.1 $(MANDIR)/funzip.$(manext)
X $(CHMOD) 755 $(INSTALLEDBIN)
X $(CHMOD) 644 $(INSTALLEDMAN)
X
X# alternatively, could use zip method: -cd $(BINDIR); rm -f $(UNZIPS) [etc.]
Xuninstall:
X rm -f $(INSTALLEDBIN) $(INSTALLEDMAN)
X
X
X# EDIT HERE FOR PARALLEL MAKES on Sequent (and others?)--screws up MS-DOS
X# make utilities if default: change "unzip$E:" to "unzip$E:&"
X
Xunzip$E: $(OBJS) # add `&' for parallel makes
X $(LD) $(LF) $(LOBJS) $(LF2)
X
Xunzipsfx$E: $(OBJX) # add `&' for parallel makes
X $(LD) $(SL) $(LOBJX) $(SL2)
X
Xfunzip$E: $(OBJF) # add `&' for parallel makes
X $(LD) $(FL) $(OBJF) $(FL2)
X
Xzipinfo$E: unzip$E
X @echo\
X ' This is a Unix-specific target. ZipInfo is not enabled in some MS-DOS'
X @echo\
X ' versions of UnZip; if it is in yours, copy unzip.exe to zipinfo.exe'
X @echo\
X ' or else invoke as "unzip -Z" (in a batch file, for example).'
X $(LN) unzip$E zipinfo$E
X
X
Xcrypt$O: crypt.c unzip.h zip.h crypt.h
Xenvargs$O: envargs.c unzip.h
Xexplode$O: explode.c unzip.h
Xextract$O: extract.c unzip.h crypt.h
Xfile_io$O: file_io.c unzip.h crypt.h tables.h
Xfunzip$O: funzip.c unzip.h crypt.h tables.h
Xinflate$O: inflate.c inflate.h unzip.h
Xmatch$O: match.c unzip.h
Xunreduce$O: unreduce.c unzip.h
Xunshrink$O: unshrink.c unzip.h
Xunzip$O: unzip.c unzip.h crypt.h version.h
Xzipinfo$O: zipinfo.c unzip.h
X
Xcrypt_$O: crypt.c unzip.h zip.h crypt.h # funzip only
X $(CP) crypt.c crypt_.c
X $(CC) -c $(CF) -DFUNZIP crypt_.c
X $(RM) crypt_.c
X
Xextract_$O: extract.c unzip.h crypt.h # unzipsfx only
X $(CP) extract.c extract_.c
X $(CC) -c $(CF) -DSFX extract_.c
X $(RM) extract_.c
X
Xinflate_$O: inflate.c inflate.h unzip.h crypt.h # funzip only
X $(CP) inflate.c inflate_.c
X $(CC) -c $(CF) -DFUNZIP inflate_.c
X $(RM) inflate_.c
X
Xmsdos$O: msdos/msdos.c unzip.h # MS-DOS only
X $(CC) -c $(CF) msdos/msdos.c
X
Xmsdos_$O: msdos/msdos.c unzip.h # MS-DOS unzipsfx only
X $(CP) msdos\msdos.c msdos_.c > nul
X $(CC) -c $(CF) -DSFX msdos_.c
X $(RM) msdos_.c
X
X#os2$O: os2/os2.c unzip.h # OS/2 only
X# $(CC) -c $(CF) os2/os2.c
X
Xunix$O: unix/unix.c unzip.h # Unix only
X $(CC) -c $(CF) unix/unix.c
X
Xunix_$O: unix/unix.c unzip.h # Unix unzipsfx only
X $(CP) unix/unix.c unix_.c
X $(CC) -c $(CF) -DSFX unix_.c
X $(RM) unix_.c
X
Xunzipsfx$O: unzip.c unzip.h crypt.h version.h # unzipsfx only
X $(CP) unzip.c unzipsfx.c
X $(CC) -c $(CF) -DSFX unzipsfx.c
X $(RM) unzipsfx.c
X
X
Xunix_make:
X# @echo\
X# '(Ignore any errors from `make'"' due to the following command; it's harmless.)"
X -@2>&1 $(LN) unix/Makefile . > /dev/null || echo > /dev/null
X
X
X################################
X# INDIVIDUAL MACHINE MAKERULES #
X################################
X
X##### TABS ARE REQUIRED FOR MANY VERSIONS OF "MAKE"! #####
X
X
X#----------------------------------------------------------------------------
X# Generic targets (can't assume make utility groks "$(MAKE)")
X#----------------------------------------------------------------------------
X
Xgeneric: unzips # first try if unknown
X
Xgeneric2: unix_make # second try if unknown: hope make is called "make"
X make unzips CF="$(CF) -DBSD"
X
Xgeneric3: unix_make # third try if unknown: hope make is called "make"
X make unzips CF="$(CF) -DSYSV"
X
X#----------------------------------------------------------------------------
X# "Normal" group (both big- and little-endian, structure-padding or not):
X#----------------------------------------------------------------------------
X
X386i: unzips # sun386i, SunOS 4.0.2
X3Bx: unzips # AT&T 3B2/1000-80; should work on any WE32XXX machine
X#aix_rt: unzips # IBM RT 6150 under AIX 2.2.1
Xapollo: unzips # Apollo Domain/OS machines
Xbull: unzips # Bull DPX/2, BOS 2.00.45 (doesn't require -Xk switch)
Xconvex: unzips # Convex C-120 and C-210 (-O is enough; -ext is default)
Xcray: unzips # Cray-2 and Y-MP, using default (possibly old) compiler
Xdec: unzips # DEC 5820 (MIPS RISC), test version of Ultrix v4.0
Xencore: unzips # Multimax
Xeta: unzips # ETA-10P*, hybrid SysV with BSD 4.3 enhancements
Xgould: unzips # Gould PN9000 running UTX/32 2.1Bu01
Xhp: unzips # HP 9000 series (68020), 4.3BSD or HP-UX A.B3.10 Ver D
Xhpux: unzips # (to match zip's makefile entry)
Xmips: unzips # MIPS M120-5(?), SysV.3 [error in sys/param.h file?]
Xnext10: unzips # NeXT (generic; use next2x or next3x for better opt.)
Xosf1: unzips # DECstation, including Alpha-based; DEC OSF/1 v1.x
Xpyr_: unzips # [failsafe target for pyramid target below]
Xpyr_ucb: unzips # Pyramids running BSD universe by default (see below)
Xsco: unzips # Xenix/386 (tested on 2.3.1); SCO Unix 3.2.0.
Xstellar: unzips # gs-2000
Xsun: unzips # old target; no good with solaris...use "sunos" now
Xsunos: unzips # Sun 3, 4; SunOS 4.x (SOME SYSTEMS ARE SYSTEM V!)
Xtahoe: unzips # tahoe (CCI Power6/32), 4.3BSD
Xultrix: unzips # VAXen, DEC 58x0 (MIPS guts), DECstation 2100; v4.x
Xvax: unzips # general-purpose VAX target (not counting VMS)
Xxenix: unzips # Xenix/386 (tested on 2.3.1); SCO Unix 3.2.0.
X
X#----------------------------------------------------------------------------
X# BSD group (for timezone structs [struct timeb]):
X#----------------------------------------------------------------------------
X
Xbsd: _bsd # generic BSD (BSD 4.2 & Ultrix handled in unzip.h)
Xbsd386: _bsd # BSDI BSD/386 version 1.0
X
X_bsd: unix_make
X $(MAKE) unzips CF="$(CF) -DBSD"
X
X#----------------------------------------------------------------------------
X# SysV group (for extern long timezone and ioctl.h instead of sgtty.h):
X#----------------------------------------------------------------------------
X
Xaix_rt: _sysv # IBM RT 6150 under AIX 2.2.1
Xamdahl: _sysv # Amdahl (IBM) mainframe, UTS (SysV) 1.2.4 and 2.0.1
Xaviion: _sysv # Data General AViiONs, DG/UX 4.3x
Xpyr_att: _sysv # Pyramids running AT&T (SysV) universe by default
Xsgi: _sysv # Silicon Graphics Iris 4D, Irix 3.3.2, 4.0.x (5.x?)
Xsolaris: _sysv # Sun SPARC & x86, Solaris 2.x
Xsysv: _sysv # generic System V Unix (Xenix handled in unzip.h)
Xxos: _sysv # Olivetti LSX-3005..3045, X/OS 2.3 and 2.4
X
X_sysv: unix_make
X $(MAKE) unzips CF="$(CF) -DSYSV"
X
X#----------------------------------------------------------------------------
X# Version 7 group (old/obsolescent):
X#----------------------------------------------------------------------------
X
Xpixel: _v7 # Pixel 80, 100 (68000-based, V7/mostly BSD4.1 compat.)
Xv7: _v7 # generic Unix Version 7 box (prob. only Pixel...)
X
X_v7:
X make unzips CF="$(CF) -DV7 -DNO_PARAM_H -DSHORT_NAMES -DBSD -DZMEM"
X
X#----------------------------------------------------------------------------
X# "Unique" group (require non-standard options):
X#----------------------------------------------------------------------------
X
X# AT&T 7300 (M68000/SysV.3) (add -DSYSV? -DNO_LIMITS?)
X7300: unix_make
X $(MAKE) unzips CF="$(CF) -DNO_DIR -DNO_MKDIR -DNO_STRNICMP"
X
X7300_gcc: unix_make
X $(MAKE) unzips CC=gcc LD=gcc LF2="" \
X CF="-O2 -I. -DNO_DIR -DNO_MKDIR -DNO_STDLIB_H -DNO_STRNICMP $(LOC)"
X $(STRIP) $(UNZIPS)
X
X# IBM AIX 3.x on an RS/6000: see rs6000 target below
Xaix: rs6000
X
X# Amdahl UTS 2.1.4 with "extended file types" filesystem (aarrrggghhhh...)
Xamdahl_eft: unix_make
X $(MAKE) unzips CF="$(CF) -eft -DSYSV"
X
X# MS-DOS: Borland C++ 3.0 (can change UnZip memory model to small for more
X# speed but no ZipInfo support [-ml -> -ms in _bcc_dos], but may run out of
X# memory when inflating--should not be true anymore in 5.11)
Xbcc_dos: _bcc_dos fu_bcc sfx_bcc
X
X_bcc_dos: bcc_rsp # v-- change to -ml for large model
X $(MAKE) unzip.exe CF="-w -ms -O2 -I. $(LOC)" CC=bcc LD=bcc E=.exe\
X O=.obj M=msdos LOBJS="" LF="@bcc_rsp" LF2=""
X del bcc_rsp
X
Xbcc_rsp:
X echo $(OBJS1:.o=.obj) > bcc_rsp
X echo msdos.obj $(OBJS2:.o=.obj) >> bcc_rsp
X
Xfu_bcc:
X $(MAKE) funzip.exe CF="-w -ms -O2 -I. $(LOC)" CC=bcc LD=bcc E=.exe\
X O=.obj FL="" FL2="" CP=copy RM=del
X
Xsfx_bcc:
X $(MAKE) unzipsfx.exe CF="-w -ms -O2 -I. $(LOC)" CC=bcc LD=bcc E=.exe\
X O=.obj SL="" SL2="" CP=copy RM=del
X
X# Coherent 3.x/4.x, Mark Williams C. ``For Coherent's CC, it needs either
X# -T0 or -T150000 (or bigger) added to the CFLAGS, otherwise the compiler
X# runs out of memory and dies in zipinfo.c.'' [Fred "Fredex" Smith, 940719]
Xcoherent: unix_make
X $(MAKE) unzips CF="$(CF) -T0"
X
X# Cray-2 and Y-MP, running Unicos 5.1 to 6.1 (SysV + BSD enhancements)
X# and Standard (ANSI) C compiler 1.5, 2.0 or 3.0.
Xcray_scc: unix_make
X $(MAKE) unzips CC=scc LD=scc
X
X# Ditto, for Cray Standard C 3.0 or later.
Xcray_v3: unix_make
X $(MAKE) unzips CC="scc" LD="scc" CF="$(CF) -h scalar3 -h vector3"
X
X# The unzip41 build on a Cyber 910/SGI running Irix v3.3.3 was successful
X# with the following change to Makefile:
Xcyber_sgi: unix_make
X $(MAKE) unzips CF="$(CF) -I/usr/include/bsd"\
X LF="-lbsd $(LF)" SL="-lbsd $(SL)"
X
X# 680x0, DIAB dnix 5.2/5.3 (a Swedish System V clone)
X#
X# Options for the dnix cc:
X# -X7 = cc is strict ANSI C
X# -X9 = warnings if a function is used without a declaration
X#
Xdnix: unix_make
X $(MAKE) unzips CF="$(CF) -X7 -X9 -DDNIX"
X
X# Generic BSDish Unix gcc. ``The -O2 only works with the latest version of
X# gcc; you may have to use -O only for earlier versions. I have no idea why
X# -s causes this bug in gcc.'' [Bug: "nm: unzip: no name list", "collect:
X# /usr/bin/nm returned 1 exit status".] If you don't have strip, don't
X# worry about it (it just makes the executable smaller and can be replaced
X# with "echo" instead).
X#
Xgcc: unix_make
X $(MAKE) unzips CC=gcc LD=gcc CF="-O2 -I. $(LOC)" LF2=""
X $(STRIP) $(UNZIPS)
X
X# MS-DOS with D.J. Delorie's djgpp 1.12. Note that earlier versions of go32
X# (< 1.11) don't support DOS function 0x38 (necessary for "unzip -v foobar").
X# Note also that this set of targets has work-arounds for three bugs in the
X# older version (3.69) of GNU make formerly distributed with djgpp: (1) it
X# sets the MAKE variable incorrectly for spawning with COMMAND.COM (forward
X# slashes instead of backslashes--fixed in 3.71 by not spawning COMMAND.COM),
X# so the usual $(MAKE) has been replaced by "make"; (2) it doesn't handle
X# makefile continuation lines correctly, most likely because of the MS-DOS
X# CR-LF line-endings (seems to be fixed in 3.71?), so long lines are used;
X# and (3) it doesn't handle quotes as in CF="-O2 -Wall etc." correctly, so
X# these macros have been changed to "CF=-O2 -Wall etc." where necessary. The
X# newer GNU make (version 3.71) does not handle quotes correctly and has no
X# known work-around, so don't bother to use it. Likewise, the emx version
X# of GNU make 3.71 which is maintained by Kai Uwe Rommel has other fatal bugs
X# involving the shell (necessary for recursive targets like this one).
X# GRR 940430, 940723, 940814
X#
Xgcc_dos: _gcc_dos fu_gcc sfx_gcc
X
X# this target may be used with djgpp 1.12m1 or later; replace "_gcc_dos" above
X# with "_gcc_dos_new":
X
X_gcc_dos_new: gcc_rsp
X make unzip CC=gcc LD=gcc M=msdos "CF=-O2 -Wall -I. $(LOC)" LOBJS="" "LF=-o unzip @gcc_rsp" LF2=""
X $(STRIP) unzip
X coff2exe unzip
X# use this instead if you want to create a stand-alone executable (bigger)
X# coff2exe -s go32.exe unzip
X stubedit unzip.exe globbing=no
X# del gcc_rsp
X# del unzip
X coff2exe -g zipinfo
X stubedit zipinfo.exe runfile=unzip.exe globbing=no
X
X_gcc_dos: gcc_rsp
X make unzip CC=gcc LD=gcc M=msdos "CF=-O2 -Wall -I. $(LOC)" LOBJS="" "LF=-o unzip @gcc_rsp" LF2=""
X# $(MAKE) unzip CC=gcc LD=gcc M=msdos "CF=-O2 -Wall -I. $(LOC)"\
X# LOBJS="" LF="-o unzip @gcc_rsp" LF2=""
X $(STRIP) unzip
X coff2exe unzip
X# use this instead if you want to create a stand-alone executable (bigger)
X# coff2exe -s go32.exe unzip
X stubedit unzip.exe globbing=no
X# del gcc_rsp
X# del unzip
X#
X# @echo Ignore the following bogus error message:
X# -@copy < nul > zipinfo
X -@find " " < nul > zipinfo
X coff2exe zipinfo
X stubedit zipinfo.exe runfile=unzip.exe globbing=no
X del zipinfo
X
Xgcc_rsp:
X echo $(OBJS1) > gcc_rsp
X echo $(OBJS2) msdos.o >> gcc_rsp
X
Xfu_gcc:
X make funzip CC=gcc LD=gcc "CF=-Wall -O2 -I. $(LOC)" FL2="" CP=copy RM=del
X# $(MAKE) funzip CC=gcc LD=gcc "CF=-Wall -O2 -I. $(LOC)" FL2=""\
X# CP=copy RM=del
X coff2exe funzip
X# use this instead if you want to create a stand-alone executable (bigger)
X# coff2exe -s go32.exe funzip
X# del funzip
X
Xsfx_gcc:
X make unzipsfx CC=gcc LD=gcc M=msdos "CF=-Wall -O2 -I. $(LOC)" SL2="" CP=copy RM=del
X# $(MAKE) unzipsfx CC=gcc LD=gcc M=msdos "CF=-Wall -O2 -I. $(LOC)"\
X# SL2="" CP=copy RM=del
X $(STRIP) unzipsfx
X coff2exe unzipsfx
X# use this instead if you want to create a stand-alone executable (bigger)
X# coff2exe -s go32.exe unzipsfx
X stubedit unzipsfx.exe globbing=no
X# del unzipsfx
X
X# Heurikon HK68 (68010), UniPlus+ System V 5.0, Green Hills C-68000
Xhk68: unix_make
X $(MAKE) unzips CC="gcc" LD="gcc"\
X LF="-n $(LF)" SL="-n $(SL)" FL="-n $(FL)"\
X CF="-ga -X138 -I. $(LOC) -Dlocaltime=localti -Dtimezone=timezon"
X
X# Rules needed to build the unzip program for an SGI Iris Indigo running
X# Irix Version 4.0.1
X#indigo:
X# $(MAKE) unzips CF="-cckr $(CF) -DSYSV $(LOC)"
X
X# Linux pre-0.96 + gcc 2.1; also 0.99.13 + gcc 2.4.5. Linux is Posix
X# (almost SysV but not quite). [apparently don't need -DSHORT_NAMES]
Xlinux: unix_make
X $(MAKE) unzips CC=gcc LD=gcc
X# $(MAKE) unzips CF="$(CF) -DLINUX" CC=gcc LD=gcc (linux pre-defined?)
X
X# Minix 1.5 PC for the 386. Invoke as is to use default cc, or as "make
X# minix CC=gcc" to use gcc. Try "make linux" if you have a working termios.h.
Xminix: unix_make
X $(MAKE) unzips CF="$(CF) -DMINIX -DSHORT_NAMES" CC=$(CC) LD=$(CC)
X
X# MS-DOS: Microsoft C 6.0 and NMAKE. "nmake msc_dos" works fine, aside
X# from an irrelevant message (possibly) about the creation of a temporary
X# file. Environment variable LOCAL_UNZIP (or CL) should be set via "SET
X# LOCAL_UNZIP=-FPi87" if you use the 80x87 library; also add -G2 or -G3 if
X# using a 286/386/486. Note that setting too many things via LOCAL_UNZIP
X# may make the command line too long for the default COMMAND.COM shell, so
X# use CL instead in that case. With VC++ Pro, -O2 instead of -Oait seems to
X# work OK and makes the executables slightly faster. Use at your own risk.
X#
Xmsc_dos: _msc_dos fu_msc sfx_msc
X
X# can change UnZip memory model (-AS) to large (-AL) if necessary, but should
X# no longer be necessary in UnZip 5.11 and later
X_msc_dos: msc_rsp
X $(MAKE) unzip.exe CF="-AS -W3 -Oait -Gs -nologo -I. $(LOC)" CC=cl\
X LD=link E=.exe O=.obj M=msdos LOBJS="" LF="@msc_rsp" LF2=""
X del msc_rsp
X
Xmsc_rsp:
X echo $(OBJS1:.o=.obj) + > msc_rsp
X echo msdos.obj $(OBJS2:.o=.obj)/noi/e/st:0x0c00; >> msc_rsp
X
Xfu_msc:
X set CL=-AS -Oait -Gs -nologo -I.
X $(MAKE) funzip.exe CF="$(LOC)" CC=cl LD=link E=.exe O=.obj\
X FL="/noi/nol/e" FL2=",funzip;" RM=del CP=copy
X
Xsfx_msc:
X set CL=-AS -Oait -Gs -nologo -I.
X $(MAKE) unzipsfx.exe CF="$(LOC)" CC=cl LD=link E=.exe O=.obj M=msdos\
X SL="/noi/nol/e" SL2=",unzipsfx;" RM=del CP=copy
X
X# $(NOD): intended to be used as SET NOD=-link /nod:slibcep to allow the
X# use of default library names (slibce.lib) instead of protected-mode
X# names (slibcep.lib), but it fails: MSC adds its own /nod qualifier,
X# and there seems to be no way to override this. Typical...
X#
X# THIS TARGET RETAINED AS AN EXAMPLE ONLY. USE MAKEFILE.OS2.
X#
X#msc_os2: # 16-bit OS/2 (1.x) with MSC 6.00 (use makefile.os2)
X# $(MAKE) -nologo unzips CC=cl LD=cl E=.exe O=.obj\
X# OBJS="$(OBJS_OS2)" OBJZ="$(OBJZ_OS2)"\
X# CF="-nologo -AC -Ocegit -G2s -DOS2 -DMSC $(LOC)"\
X# LF="-nologo -AC $(LOC) -Lp -F 2000"\
X# LF2="unzip.def -o unzip.exe $(NOD)" CP=copy RM=del\
X# ZL="-nologo -AC $(LOC) -Lp -Fb" ZL2="zipinfo.def -o zipinfo.exe"
X
X# NeXT info.
Xnext:
X @echo
X @echo\
X ' Please pick a specific NeXT target: "make next10" will create a generic'
X @echo\
X ' NeXT executable; "make next2x" will create a smaller executable (for'
X @echo\
X ' NeXTstep 2.0 and higher); "make next3x" will create a small executable'
X @echo\
X ' with significantly better optimization (NeXTstep 3.0 and higher only);'
X @echo\
X ' "make nextfat" will create a fat, multi-architecture (NeXT plus Intel)'
X @echo\
X ' executable (NeXTstep 3.1 and higher only).'
X @echo
X
X# 68030 BSD 4.3+Mach. NeXT 2.x: make the executable smaller.
Xnext2x: unix_make
X $(MAKE) unzips LF2="-object -s"
X
X# NeXT 3.x: as above, plus better optimization.
Xnext3x: unix_make
X $(MAKE) unzips CF="-O2 -I. $(LOC)" LF2="-object -s"
X
X# NeXT 3.1+: make the executable fat (multi-architecture binary [MAB],
X# for "black" [NeXT] and "white" [x86] hardware, so far).
Xnextfat: unix_make
X $(MAKE) unzips CF="-O2 -I. $(LOC) -arch i386 -arch m68k" \
X LF2="-arch i386 -arch m68k -object -s"
X
X# Sequent Symmetry running Dynix/ptx (sort of SysV.3): needs to link
X# with libseq to get symlink().
Xptx: unix_make
X $(MAKE) unzips CF="$(CF) -DSYSV -DTERMIO -DPTX" LF2="$(LF2) -lseq"
X
X# Pyramid 90X (probably all) under >= OSx4.1, either universe. (This is an
X# experimental target! If it fails, use either pyr_ucb or pyr_att instead.)
X# The make in the BSD half is too stupid to understand $(MAKE), sigh...
Xpyramid: unix_make
X -make pyr_`universe`
X
X# REGULUS: 68040-based, "real-time" SysV.3 mutant; uses gcc, with "REGULUS"
X# predefined.
Xregulus: unix_make
X $(MAKE) unzips CF="$(CF) -traditional -DSYSV -DNO_MKDIR"
X
X# IBM RS/6000 under AIX 3.2
Xrs6000: unix_make
X $(MAKE) unzips CF="$(CF) -DBSD -D_BSD -DUNIX" LF2="-lbsd"
X
X# SCO cross compile from Unix to DOS. Tested with Xenix/386 and OpenDeskTop.
X# Should work with Xenix/286 as well. (davidsen) Note that you *must* remove
X# the Unix objects and executable before doing this! (Piet Plomp: gcc won't
X# recognize the -M0 flag which forces 8086 code.) (GRR: may need to reduce
X# stack to 0c00h if using 286/small-model code...?)
Xsco_dos: unix_make
X $(MAKE) unzips CF="-O -I. $(LOC) -dos -M0" M=msdos\
X LF="-dos -F 2000" LF2="-o unzip.exe"\
X FL="-dos" FL2="-o funzip.exe" SL="-dos" SL2="-o unzipsfx.exe"
X
X# SCO UNIX with shared libraries and no international support. If you are
X# not using a USA-style keyboard and display, you may want to remove -nointl
X# to get support. It adds quite a bit to the size of the executable.
Xsco_sl: unix_make
X $(MAKE) unzips LF="$(LF) -nointl" LF2="$(LF2) -lc_s"\
X SL="$(SL) -nointl" FL="$(FL) -nointl"
X
X# SCO Xenix/286 2.3.3 with 2.2.1 development system
Xsco_x286: unix_make
X $(MAKE) unzips CF="$(CF) -Mel2 -LARGE -DTERMIO" LF="$(LF) -Mel2 -LARGE"
X
X# Sequent Symmetry with Dynix. (386, but needs -DZMEM)
X# This should also work on Balance but I can't test it just yet.
Xsequent: unix_make
X $(MAKE) unzips CF="$(CF) -DBSD -DZMEM"
X
X# Generic System V + GNU C
Xsysv_gcc: unix_make
X $(MAKE) unzips CC=gcc LD=gcc CF="-O2 -I. -DSYSV $(LOC)" LF2=""
X $(STRIP) $(UNZIPS)
X
X# AT&T 6300+, System V.2 Unix: run-time out-of-memory error if don't use -Ml;
X# also compile-time error if work arrays dimensioned at HSIZE+2 (>32K)
Xsysv6300: unix_make
X $(MAKE) unzips CF="$(CF) -Ml -DSYSV" LF="$(LF) -Ml"\
X SL="$(SL) -Ml" FL="$(FL) -Ml"
X
X# Wombat 68000 (or whatever).
X# I didn't do this. I swear. No, really.
Xwombat: unix_make
X @echo
X @echo ' Ha ha! Just kidding.'
X @echo
END_OF_FILE
if test 27036 -ne `wc -c <'unzip-5.12/unix/Makefile'`; then
echo shar: \"'unzip-5.12/unix/Makefile'\" unpacked with wrong size!
fi
# end of 'unzip-5.12/unix/Makefile'
fi
if test -f 'unzip-5.12/vms/makesfx.com' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'unzip-5.12/vms/makesfx.com'\"
else
echo shar: Extracting \"'unzip-5.12/vms/makesfx.com'\" \(1126 characters\)
sed "s/^X//" >'unzip-5.12/vms/makesfx.com' <<'END_OF_FILE'
X$!
X$! MAKESFX.COM: command-procedure to create self-extracting ZIP archives
X$! usage: @MAKESFX foo (foo.zip -> foo.exe)
X$!
X$! Martin P.J. Zinser 940804
X$!
X$!
X$! For this to work a symbol unzipsfx has to be defined which contains the
X$! location of the unzip stub (e.g., unzipsfx:== device:[dir]unzipsfx.exe)
X$!
X$! The zipfile given in p1 will be concatenated with unzipsfx and given a
X$! filename extension of .exe. The default file extension for p1 is .zip
X$!
X$! Use at your own risk, there is no guarantee here. If it doesn't work,
X$! blame me (m.zinser@gsi.de), not the people from Info-ZIP.
X$!
X$!
X$ inf = "''p1'"
X$ usfx = f$parse("''unzipsfx'") - ";"
X$ file = f$parse("''inf'",,,"DEVICE") + f$parse("''inf'",,,"DIRECTORY") + -
X f$parse("''inf'",,,"NAME")
X$ finf = "''file'" +f$parse("''inf'",".ZIP",,"TYPE") + -
X f$parse("''inf'",,,"VERSION")
X$!
X$! [GRR 940810: what is the point of 'name'? example? commented out...]
X$! $ name = f$extract(12,2,f$time()) + f$extract(15,2,f$time()) + -
X$! f$extract(18,2,f$time()) + f$extract(21,1,f$time())
X$!
X$ copy 'usfx','finf' 'file'.exe
X$ exit
END_OF_FILE
if test 1126 -ne `wc -c <'unzip-5.12/vms/makesfx.com'`; then
echo shar: \"'unzip-5.12/vms/makesfx.com'\" unpacked with wrong size!
fi
# end of 'unzip-5.12/vms/makesfx.com'
fi
echo shar: End of archive 13 \(of 20\).
cp /dev/null ark13isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 20 archives.
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
echo You still must unpack the following archives:
echo " " ${MISSING}
fi
exit 0
exit 0 # Just in case...