home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / sources / misc / 3847 < prev    next >
Encoding:
Text File  |  1992-08-22  |  60.8 KB  |  1,296 lines

  1. Newsgroups: comp.sources.misc
  2. Path: sparky!kent
  3. From: zip-bugs@cs.ucla.edu (Info-ZIP group)
  4. Subject:  v31i097:  zip19 - Info-ZIP portable Zip, version 1.9, Part05/11
  5. Message-ID: <1992Aug23.064651.29195@sparky.imd.sterling.com>
  6. Followup-To: comp.sources.d
  7. X-Md4-Signature: f24a52a163a98ace3a9e3abdcc1ead76
  8. Sender: kent@sparky.imd.sterling.com (Kent Landfield)
  9. Organization: Sterling Software
  10. References: <csm-v31i093=zip19.014410@sparky.IMD.Sterling.COM>
  11. Date: Sun, 23 Aug 1992 06:46:51 GMT
  12. Approved: kent@sparky.imd.sterling.com
  13. Lines: 1281
  14.  
  15. Submitted-by: zip-bugs@cs.ucla.edu (Info-ZIP group)
  16. Posting-number: Volume 31, Issue 97
  17. Archive-name: zip19/part05
  18. Supersedes: zip: Volume 23, Issue 88-96
  19. Environment: UNIX, VMS, OS/2, MS-DOS, MACINTOSH, WIN-NT, LINUX, MINIX, XOS, !AMIGA, ATARI, symlink, SGI, DEC, Cray, Convex, Amdahl, Sun, PC
  20.  
  21. #! /bin/sh
  22. # This is a shell archive.  Remove anything before this line, then feed it
  23. # into a shell via "sh file" or similar.  To overwrite existing files,
  24. # type "sh file -c".
  25. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  26. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  27. # Contents:  deflate.c msdos/tcconfig.tc.UU os2/os2zip.c.UU
  28. # Wrapped by kent@sparky on Sun Aug 23 01:00:44 1992
  29. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  30. echo If this archive is complete, you will see the following message:
  31. echo '          "shar: End of archive 5 (of 11)."'
  32. if test -f 'deflate.c' -a "${1}" != "-c" ; then 
  33.   echo shar: Will not clobber existing file \"'deflate.c'\"
  34. else
  35.   echo shar: Extracting \"'deflate.c'\" \(26162 characters\)
  36.   sed "s/^X//" >'deflate.c' <<'END_OF_FILE'
  37. X/*
  38. X
  39. X Copyright (C) 1990-1992 Mark Adler, Richard B. Wales, Jean-loup Gailly,
  40. X Kai Uwe Rommel and Igor Mandrichenko.
  41. X Permission is granted to any individual or institution to use, copy, or
  42. X redistribute this software so long as all of the original files are included
  43. X unmodified, that it is not sold for profit, and that this copyright notice
  44. X is retained.
  45. X
  46. X*/
  47. X
  48. X/*
  49. X *  deflate.c by Jean-loup Gailly.
  50. X *
  51. X *  PURPOSE
  52. X *
  53. X *      Identify new text as repetitions of old text within a fixed-
  54. X *      length sliding window trailing behind the new text.
  55. X *
  56. X *  DISCUSSION
  57. X *
  58. X *      The "deflation" process depends on being able to identify portions
  59. X *      of the input text which are identical to earlier input (within a
  60. X *      sliding window trailing behind the input currently being processed).
  61. X *
  62. X *      The most straightforward technique turns out to be the fastest for
  63. X *      most input files: try all possible matches and select the longest.
  64. X *      The key feature is of this algorithm is that insertion and deletions
  65. X *      from the string dictionary are very simple and thus fast. Insertions
  66. X *      and deletions are performed at each input character, whereas string
  67. X *      matches are performed only when the previous match ends. So it is
  68. X *      preferable to spend more time in matches to allow very fast string
  69. X *      insertions and deletions. The matching algorithm for small strings
  70. X *      is inspired from that of Rabin & Karp. A brute force approach is
  71. X *      used to find longer strings when a small match has been found.
  72. X *      A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
  73. X *      (by Leonid Broukhis).
  74. X *         A previous version of this file used a more sophisticated algorithm
  75. X *      (by Fiala and Greene) which is guaranteed to run in linear amortized
  76. X *      time, but has a larger average cost and uses more memory. However
  77. X *      the F&G algorithm may be faster for some highly redundant files if
  78. X *      the parameter max_chain_length (described below) is too large.
  79. X *
  80. X *  ACKNOWLEDGEMENTS
  81. X *
  82. X *      The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
  83. X *      I found it in 'freeze' written by Leonid Broukhis.
  84. X *      Thanks to many info-zippers for bug reports and testing.
  85. X *
  86. X *  REFERENCES
  87. X *
  88. X *      APPNOTE.TXT documentation file in PKZIP 2.0 distribution.
  89. X *
  90. X *      A description of the Rabin and Karp algorithm is given in the book
  91. X *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
  92. X *
  93. X *      Fiala,E.R., and Greene,D.H.
  94. X *         Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
  95. X *
  96. X *  INTERFACE
  97. X *
  98. X *      void lm_init (int pack_level, ush *flags)
  99. X *          Initialize the "longest match" routines for a new file
  100. X *
  101. X *      ulg deflate (void)
  102. X *          Processes a new input file and return its compressed length. Sets
  103. X *          the compressed length, crc, deflate flags and internal file
  104. X *          attributes.
  105. X */
  106. X
  107. X#include "zip.h"
  108. X
  109. X/* ===========================================================================
  110. X * Configuration parameters
  111. X */
  112. X
  113. X/* Compile with MEDIUM_MEM to reduce the memory requirements or
  114. X * with SMALL_MEM to use as little memory as possible.
  115. X * Warning: defining these symbols affects MATCH_BUFSIZE and HASH_BITS
  116. X * (see below) and thus affects the compression ratio. The compressed output
  117. X * is still correct, and might even be smaller in some cases.
  118. X */
  119. X
  120. X#ifdef SMALL_MEM
  121. X#   define HASH_BITS  13  /* Number of bits used to hash strings */
  122. X#else
  123. X#ifdef MEDIUM_MEM
  124. X#   define HASH_BITS  14
  125. X#else
  126. X#   define HASH_BITS  15
  127. X   /* For portability to 16 bit machines, do not use values above 15. */
  128. X#endif
  129. X#endif
  130. X
  131. X#define HASH_SIZE (unsigned)(1<<HASH_BITS)
  132. X#define HASH_MASK (HASH_SIZE-1)
  133. X#define WMASK     (WSIZE-1)
  134. X/* HASH_SIZE and WSIZE must be powers of two */
  135. X
  136. X#define NIL 0
  137. X/* Tail of hash chains */
  138. X
  139. X#define FAST 4
  140. X#define SLOW 2
  141. X/* speed options for the general purpose bit flag */
  142. X
  143. X#ifndef TOO_FAR
  144. X#  define TOO_FAR 4096
  145. X#endif
  146. X/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
  147. X
  148. X/* ===========================================================================
  149. X * Local data used by the "longest match" routines.
  150. X */
  151. X
  152. Xtypedef ush Pos;
  153. Xtypedef unsigned IPos;
  154. X/* A Pos is an index in the character window. We use short instead of int to
  155. X * save space in the various tables. IPos is used only for parameter passing.
  156. X */
  157. X
  158. X#ifndef DYN_ALLOC
  159. X  uch    far window[2L*WSIZE];
  160. X  /* Sliding window. Input bytes are read into the second half of the window,
  161. X   * and move to the first half later to keep a dictionary of at least WSIZE
  162. X   * bytes. With this organization, matches are limited to a distance of
  163. X   * WSIZE-MAX_MATCH bytes, but this ensures that IO is always
  164. X   * performed with a length multiple of the block size. Also, it limits
  165. X   * the window size to 64K, which is quite useful on MSDOS.
  166. X   * To do: limit the window size to WSIZE+BSZ if SMALL_MEM (the code would
  167. X   * be less efficient since the data would have to be copied WSIZE/BSZ times)
  168. X   */
  169. X  Pos    far prev[WSIZE];
  170. X  /* Link to older string with same hash index. To limit the size of this
  171. X   * array to 64K, this link is maintained only for the last 32K strings.
  172. X   * An index in this array is thus a window index modulo 32K.
  173. X   */
  174. X  Pos    far head[HASH_SIZE];
  175. X  /* Heads of the hash chains or NIL */
  176. X#else
  177. X  uch    far * near window = NULL;
  178. X  Pos    far * near prev   = NULL;
  179. X  Pos    far * near head;
  180. X#endif
  181. X
  182. Xlong block_start;
  183. X/* window position at the beginning of the current output block. Gets
  184. X * negative when the window is moved backwards.
  185. X */
  186. X
  187. Xlocal unsigned near ins_h;  /* hash index of string to be inserted */
  188. X
  189. X#define H_SHIFT  ((HASH_BITS+MIN_MATCH-1)/MIN_MATCH)
  190. X/* Number of bits by which ins_h and del_h must be shifted at each
  191. X * input step. It must be such that after MIN_MATCH steps, the oldest
  192. X * byte no longer takes part in the hash key, that is:
  193. X *   H_SHIFT * MIN_MATCH >= HASH_BITS
  194. X */
  195. X
  196. Xunsigned int near prev_length;
  197. X/* Length of the best match at previous step. Matches not greater than this
  198. X * are discarded. This is used in the lazy match evaluation.
  199. X */
  200. X
  201. X      unsigned near strstart;      /* start of string to insert */
  202. X      unsigned near match_start;   /* start of matching string */
  203. Xlocal int      near eofile;        /* flag set at end of input file */
  204. Xlocal unsigned near lookahead;     /* number of valid bytes ahead in window */
  205. X
  206. Xunsigned near max_chain_length;
  207. X/* To speed up deflation, hash chains are never searched beyond this length.
  208. X * A higher limit improves compression ratio but degrades the speed.
  209. X */
  210. X
  211. Xlocal unsigned int max_lazy_match;
  212. X/* Attempt to find a better match only when the current match is strictly
  213. X * smaller than this value.
  214. X */
  215. X
  216. Xint near good_match;
  217. X/* Use a faster search when the previous match is longer than this */
  218. X
  219. X
  220. X/* Values for max_lazy_match, good_match and max_chain_length, depending on
  221. X * the desired pack level (0..9). The values given below have been tuned to
  222. X * exclude worst case performance for pathological files. Better values may be
  223. X * found for specific files.
  224. X */
  225. Xtypedef struct config {
  226. X   int good_length;
  227. X   int max_lazy;
  228. X   unsigned max_chain;
  229. X   uch flag;
  230. X} config;
  231. X
  232. Xlocal config configuration_table[10] = {
  233. X/*      good lazy chain flag */
  234. X/* 0 */ {0,    0,    0,  0},     /* store only */
  235. X/* 1 */ {4,    4,   16,  FAST},  /* maximum speed  */
  236. X/* 2 */ {6,    8,   16,  0},
  237. X/* 3 */ {8,   16,   32,  0},
  238. X/* 4 */ {8,   32,   64,  0},
  239. X/* 5 */ {8,   64,  128,  0},
  240. X/* 6 */ {8,  128,  256,  0},
  241. X/* 7 */ {8,  128,  512,  0},
  242. X/* 8 */ {32, 258, 1024,  0},
  243. X/* 9 */ {32, 258, 4096,  SLOW}}; /* maximum compression */
  244. X
  245. X/* Note: the current code requires max_lazy >= MIN_MATCH and max_chain >= 4
  246. X * but these restrictions can easily be removed at a small cost.
  247. X */
  248. X
  249. X#define EQUAL 0
  250. X/* result of memcmp for equal strings */
  251. X
  252. X/* ===========================================================================
  253. X *  Prototypes for local functions. Use asm version by default for
  254. X *  MSDOS but not Unix. However the asm version version is recommended
  255. X *  for 386 Unix.
  256. X */
  257. X#ifdef ATARI_ST
  258. X#  undef MSDOS /* avoid the processor specific parts */
  259. X#endif
  260. X#if defined(MSDOS) && !defined(NO_ASM) && !defined(ASM)
  261. X#  define ASM
  262. X#endif
  263. X
  264. Xlocal void fill_window   OF((void));
  265. X      int  longest_match OF((IPos cur_match));
  266. X#ifdef ASM
  267. X      void match_init OF((void)); /* asm code initialization */
  268. X#endif
  269. X
  270. X#ifdef DEBUG
  271. Xlocal  void check_match OF((IPos start, IPos match, int length));
  272. X#endif
  273. X
  274. X#define MIN(a,b) ((a) <= (b) ? (a) : (b))
  275. X/* The arguments must not have side effects. */
  276. X
  277. X/* ===========================================================================
  278. X * Update a hash value with the given input byte
  279. X * IN  assertion: all calls to to UPDATE_HASH are made with consecutive
  280. X *    input characters, so that a running hash key can be computed from the
  281. X *    previous key instead of complete recalculation each time.
  282. X */
  283. X#define UPDATE_HASH(h,c) (h = (((h)<<H_SHIFT) ^ (c)) & HASH_MASK)
  284. X
  285. X/* ===========================================================================
  286. X * Insert string s in the dictionary and set match_head to the previous head
  287. X * of the hash chain (the most recent string with same hash key). Return
  288. X * the previous length of the hash chain.
  289. X * IN  assertion: all calls to to INSERT_STRING are made with consecutive
  290. X *    input characters and the first MIN_MATCH bytes of s are valid
  291. X *    (except for the last MIN_MATCH-1 bytes of the input file).
  292. X */
  293. X#define INSERT_STRING(s, match_head) \
  294. X   (UPDATE_HASH(ins_h, window[(s) + MIN_MATCH-1]), \
  295. X    prev[(s) & WMASK] = match_head = head[ins_h], \
  296. X    head[ins_h] = (s))
  297. X
  298. X/* ===========================================================================
  299. X * Initialize the "longest match" routines for a new file
  300. X */
  301. Xvoid lm_init (pack_level, flags)
  302. X    int pack_level; /* 0: store, 1: best speed, 9: best compression */
  303. X    ush *flags;     /* general purpose bit flag */
  304. X{
  305. X    register unsigned j;
  306. X
  307. X    if (pack_level < 1 || pack_level > 9) error("bad pack level");
  308. X
  309. X    /* Use dynamic allocation if compiler does not like big static arrays: */
  310. X#ifdef DYN_ALLOC
  311. X    if (window == NULL) {
  312. X        window = (uch far*) fcalloc(WSIZE,   2*sizeof(uch));
  313. X        prev   = (Pos far*) fcalloc(WSIZE,     sizeof(Pos));
  314. X        head   = (Pos far*) fcalloc(HASH_SIZE, sizeof(Pos));
  315. X
  316. X        if (window == NULL || prev == NULL || head == NULL) {
  317. X            err(ZE_MEM, "window allocation");
  318. X        }
  319. X    }
  320. X#endif /* DYN_ALLOC */
  321. X#ifdef ASM
  322. X    match_init(); /* initialize the asm code */
  323. X#endif
  324. X    /* Initialize the hash table. */
  325. X    for (j = 0;  j < HASH_SIZE; j++) head[j] = NIL;
  326. X    /* prev will be initialized on the fly */
  327. X
  328. X    /* Set the default configuration parameters:
  329. X     */
  330. X    max_lazy_match   = configuration_table[pack_level].max_lazy;
  331. X    good_match       = configuration_table[pack_level].good_length;
  332. X    max_chain_length = configuration_table[pack_level].max_chain;
  333. X    *flags          |= configuration_table[pack_level].flag;
  334. X    /* ??? reduce max_chain_length for binary files */
  335. X
  336. X    strstart = 0;
  337. X    block_start = 0L;
  338. X
  339. X#if defined(MSDOS) && !defined(__32BIT__)
  340. X    /* Can't read a 64K block under MSDOS */
  341. X    lookahead = read_buf((char*)window, (unsigned)WSIZE);
  342. X#else
  343. X    lookahead = read_buf((char*)window, 2*WSIZE);
  344. X#endif
  345. X    if (lookahead == 0 || lookahead == (unsigned)EOF) {
  346. X       eofile = 1, lookahead = 0;
  347. X       return;
  348. X    }
  349. X    eofile = 0;
  350. X    /* Make sure that we always have enough lookahead. This is important
  351. X     * if input comes from a device such as a tty.
  352. X     */
  353. X    while (lookahead < MIN_LOOKAHEAD && !eofile) fill_window();
  354. X
  355. X    ins_h = 0;
  356. X    for (j=0; j<MIN_MATCH-1; j++) UPDATE_HASH(ins_h, window[j]);
  357. X    /* If lookahead < MIN_MATCH, ins_h is garbage, but this is
  358. X     * not important since only literal bytes will be emitted.
  359. X     */
  360. X}
  361. X
  362. X/* ===========================================================================
  363. X * Set match_start to the longest match starting at the given string and
  364. X * return its length. Matches shorter or equal to prev_length are discarded,
  365. X * in which case the result is equal to prev_length and match_start is
  366. X * garbage.
  367. X * IN assertions: cur_match is the head of the hash chain for the current
  368. X *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
  369. X */
  370. X#ifndef ASM
  371. X/* For MSDOS, OS/2 and 386 Unix, an optimized version is in match.asm. The code
  372. X * is functionally equivalent, so you can use the C version if desired.
  373. X */
  374. Xint longest_match(cur_match)
  375. X    IPos cur_match;                             /* current match */
  376. X{
  377. X    unsigned chain_length = max_chain_length;   /* max hash chain length */
  378. X    register uch far *scan = window + strstart; /* current string */
  379. X    register uch far *match = scan;             /* matched string */
  380. X    register int len;                           /* length of current match */
  381. X    int best_len = prev_length;                 /* best match length so far */
  382. X    IPos limit = strstart > (IPos)MAX_DIST ? strstart - (IPos)MAX_DIST : NIL;
  383. X    /* Stop when cur_match becomes <= limit. To simplify the code,
  384. X     * we prevent matches with the string of window index 0.
  385. X     */
  386. X#ifdef UNALIGNED_OK
  387. X    register ush scan_start = *(ush*)scan;
  388. X    register ush scan_end   = *(ush*)(scan+best_len-1);
  389. X#else
  390. X    register uch scan_start = *scan;
  391. X    register uch scan_end1  = scan[best_len-1];
  392. X    register uch scan_end   = scan[best_len];
  393. X#endif
  394. X
  395. X    /* Do not waste too much time if we already have a good match: */
  396. X    if (prev_length >= good_match) {
  397. X        chain_length >>= 2;
  398. X    }
  399. X
  400. X    do {
  401. X        Assert(cur_match < strstart, "no future");
  402. X        match = window + cur_match;
  403. X
  404. X        /* Skip to next match if the match length cannot increase
  405. X         * or if the match length is less than 2:
  406. X         */
  407. X#if (defined(UNALIGNED_OK) && HASH_BITS >= 8)
  408. X        /* This code assumes sizeof(unsigned short) == 2 and
  409. X         * sizeof(unsigned long) == 4. Do not use UNALIGNED_OK if your
  410. X         * compiler uses different sizes.
  411. X         */
  412. X        if (*(ush*)(match+best_len-1) != scan_end ||
  413. X            *(ush*)match != scan_start) continue;
  414. X
  415. X        len = MIN_MATCH - 4;
  416. X        /* It is not necessary to compare scan[2] and match[2] since they are
  417. X         * always equal when the other bytes match, given that the hash keys
  418. X         * are equal and that HASH_BITS >= 8.
  419. X         */
  420. X        do {} while ((len+=4) < MAX_MATCH-3 &&
  421. X                     *(ulg*)(scan+len) == *(ulg*)(match+len));
  422. X        /* The funny do {} generates better code for most compilers */
  423. X
  424. X        if (*(ush*)(scan+len) == *(ush*)(match+len)) len += 2;
  425. X        if (scan[len] == match[len]) len++;
  426. X
  427. X#else /* UNALIGNED_OK */
  428. X        if (match[best_len] != scan_end ||
  429. X            match[best_len-1] != scan_end1 || *match != scan_start)
  430. X           continue;
  431. X        /* It is not necessary to compare scan[1] and match[1] since they
  432. X         * are always equal when the other bytes match, given that
  433. X         * the hash keys are equal and that h_shift+8 <= HASH_BITS,
  434. X         * that is, when the last byte is entirely included in the hash key.
  435. X         * The condition is equivalent to
  436. X         *       (HASH_BITS+2)/3 + 8 <= HASH_BITS
  437. X         * or: HASH_BITS >= 13
  438. X         * Also, we check for a match at best_len-1 to get rid quickly of
  439. X         * the match with the suffix of the match made at the previous step,
  440. X         * which is known to fail.
  441. X         */
  442. X#if HASH_BITS >= 13
  443. X        len = 1;
  444. X#else
  445. X        len = 0;
  446. X#endif
  447. X        do {} while (++len < MAX_MATCH && scan[len] == match[len]);
  448. X
  449. X#endif /* UNALIGNED_OK */
  450. X
  451. X        if (len > best_len) {
  452. X            match_start = cur_match;
  453. X            best_len = len;
  454. X            if (len == MAX_MATCH) break;
  455. X#ifdef UNALIGNED_OK
  456. X            scan_end = *(ush*)(scan+best_len-1);
  457. X#else
  458. X            scan_end1  = scan[best_len-1];
  459. X            scan_end   = scan[best_len];
  460. X#endif
  461. X        }
  462. X    } while (--chain_length != 0 &&
  463. X             (cur_match = prev[cur_match & WMASK]) > limit);
  464. X
  465. X    return best_len;
  466. X}
  467. X#endif /* NO_ASM */
  468. X
  469. X#ifdef DEBUG
  470. X/* ===========================================================================
  471. X * Check that the match at match_start is indeed a match.
  472. X */
  473. Xlocal void check_match(start, match, length)
  474. X    IPos start, match;
  475. X    int length;
  476. X{
  477. X    /* check that the match is indeed a match */
  478. X    if (memcmp((char*)window + match,
  479. X                (char*)window + start, length) != EQUAL) {
  480. X        fprintf(stderr,
  481. X            " start %d, match %d, length %d\n",
  482. X            start, match, length);
  483. X        error("invalid match");
  484. X    }
  485. X    if (verbose > 1) {
  486. X        fprintf(stderr,"\\[%d,%d]", start-match, length);
  487. X        do { putc(window[start++], stderr); } while (--length != 0);
  488. X    }
  489. X}
  490. X#else
  491. X#  define check_match(start, match, length)
  492. X#endif
  493. X
  494. X/* ===========================================================================
  495. X * Fill the window when the lookahead becomes insufficient.
  496. X * Updates strstart and lookahead, and sets eofile if end of input file.
  497. X * IN assertion: lookahead < MIN_LOOKAHEAD && strstart + lookahead > 0
  498. X * OUT assertion: at least one byte has been read, or eofile is set.
  499. X */
  500. Xlocal void fill_window()
  501. X{
  502. X    register unsigned n, m;
  503. X    unsigned more = (unsigned)((ulg)2*WSIZE - (ulg)lookahead - (ulg)strstart);
  504. X    /* Amount of free space at the end of the window. */
  505. X
  506. X    /* If the window is full, move the upper half to the lower one to make
  507. X     * room in the upper half.
  508. X     */
  509. X    if (more == 0) {
  510. X        /* By the IN assertion, the window is not empty so we can't confuse
  511. X         * more == 0 with more == 64K on a 16 bit machine.
  512. X         */
  513. X        memcpy((char*)window, (char*)window+WSIZE, (unsigned)WSIZE);
  514. X        match_start -= WSIZE;
  515. X        strstart    -= WSIZE;
  516. X        /* strstart - WSIZE = WSIZE - lookahead > WSIZE - MIN_LOOKAHEAD
  517. X         * so we now have strstart > MAX_DIST:
  518. X         */
  519. X        Assert (strstart > MAX_DIST, "window slide too early");
  520. X        block_start -= (long) WSIZE;
  521. X
  522. X        for (n = 0; n < HASH_SIZE; n++) {
  523. X            m = head[n];
  524. X            head[n] = (Pos)(m >= WSIZE ? m-WSIZE : NIL);
  525. X        }
  526. X        for (n = 0; n < WSIZE; n++) {
  527. X            m = prev[n];
  528. X            prev[n] = (Pos)(m >= WSIZE ? m-WSIZE : NIL);
  529. X            /* If n is not on any hash chain, prev[n] is garbage but
  530. X             * its value will never be used.
  531. X             */
  532. X        }
  533. X        more = WSIZE;
  534. X        if (verbose) putc('.', stderr);
  535. X
  536. X    } else if (more == (unsigned)EOF) {
  537. X        /* Very unlikely, but possible on 16 bit machine if strstart == 0
  538. X         * and lookahead == 1 (input done one byte at time)
  539. X         */
  540. X        more--;
  541. X    }
  542. X    n = read_buf((char*)window+strstart+lookahead, more);
  543. X    if (n == 0 || n == (unsigned)EOF) {
  544. X        eofile = 1;
  545. X    } else {
  546. X        lookahead += n;
  547. X    }
  548. X}
  549. X
  550. X/* ===========================================================================
  551. X * Flush the current block, with given end-of-file flag.
  552. X * IN assertion: strstart is set to the end of the current match.
  553. X */
  554. X#define FLUSH_BLOCK(eof) \
  555. X   flush_block(block_start >= 0L ? (char*)&window[block_start] : (char*)NULL,\
  556. X               (long)strstart - block_start, (eof))
  557. X
  558. X/* ===========================================================================
  559. X * Processes a new input file and return its compressed length.
  560. X */
  561. X#ifdef NO_LAZY
  562. Xulg deflate()
  563. X{
  564. X    IPos hash_head; /* head of the hash chain */
  565. X    int flush;      /* set if current block must be flushed */
  566. X    unsigned match_length = 0;  /* length of best match */
  567. X
  568. X    prev_length = MIN_MATCH-1;
  569. X    while (lookahead != 0) {
  570. X        /* Insert the string window[strstart .. strstart+2] in the
  571. X         * dictionary, and set hash_head to the head of the hash chain:
  572. X         */
  573. X        INSERT_STRING(strstart, hash_head);
  574. X
  575. X        /* Find the longest match, discarding those <= prev_length.
  576. X         * At this point we have always match_length < MIN_MATCH
  577. X         */
  578. X        if (hash_head != NIL && strstart - hash_head <= MAX_DIST) {
  579. X            /* To simplify the code, we prevent matches with the string
  580. X             * of window index 0 (in particular we have to avoid a match
  581. X             * of the string with itself at the start of the input file).
  582. X             */
  583. X            match_length = longest_match (hash_head);
  584. X            /* longest_match() sets match_start */
  585. X            if (match_length > lookahead) match_length = lookahead;
  586. X        }
  587. X        if (match_length >= MIN_MATCH) {
  588. X            check_match(strstart, match_start, match_length);
  589. X
  590. X            flush = ct_tally(strstart-match_start, match_length - MIN_MATCH);
  591. X
  592. X            lookahead -= match_length;
  593. X            match_length--; /* string at strstart already in hash table */
  594. X            do {
  595. X                strstart++;
  596. X                INSERT_STRING(strstart, hash_head);
  597. X                /* strstart never exceeds WSIZE-MAX_MATCH, so there are
  598. X                 * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH
  599. X                 * these bytes are garbage, but it does not matter since the
  600. X                 * next lookahead bytes will always be emitted as literals.
  601. X                 */
  602. X            } while (--match_length != 0);
  603. X        } else {
  604. X            /* No match, output a literal byte */
  605. X            flush = ct_tally (0, window[strstart]);
  606. X            lookahead--;
  607. X        }
  608. X        strstart++; 
  609. X        if (flush) FLUSH_BLOCK(0), block_start = strstart;
  610. X
  611. X        /* Make sure that we always have enough lookahead, except
  612. X         * at the end of the input file. We need MAX_MATCH bytes
  613. X         * for the next match, plus MIN_MATCH bytes to insert the
  614. X         * string following the next match.
  615. X         */
  616. X        while (lookahead < MIN_LOOKAHEAD && !eofile) fill_window();
  617. X
  618. X    }
  619. X    return FLUSH_BLOCK(1); /* eof */
  620. X}
  621. X#else /* LAZY */
  622. X/* ===========================================================================
  623. X * Same as above, but achieves better compression. We use a lazy
  624. X * evaluation for matches: a match is finally adopted only if there is
  625. X * no better match at the next window position.
  626. X */
  627. Xulg deflate()
  628. X{
  629. X    IPos hash_head;          /* head of hash chain */
  630. X    IPos prev_match;         /* previous match */
  631. X    int flush;               /* set if current block must be flushed */
  632. X    int match_available = 0; /* set if previous match exists */
  633. X    register unsigned match_length = MIN_MATCH-1; /* length of best match */
  634. X#ifdef DEBUG
  635. X    extern ulg isize;        /* byte length of input file, for debug only */
  636. X#endif
  637. X
  638. X    /* Process the input block. */
  639. X    while (lookahead != 0) {
  640. X        /* Insert the string window[strstart .. strstart+2] in the
  641. X         * dictionary, and set hash_head to the head of the hash chain:
  642. X         */
  643. X        INSERT_STRING(strstart, hash_head);
  644. X
  645. X        /* Find the longest match, discarding those <= prev_length.
  646. X         */
  647. X        prev_length = match_length, prev_match = match_start;
  648. X        match_length = MIN_MATCH-1;
  649. X
  650. X        if (hash_head != NIL && prev_length < max_lazy_match &&
  651. X            strstart - hash_head <= MAX_DIST) {
  652. X            /* To simplify the code, we prevent matches with the string
  653. X             * of window index 0 (in particular we have to avoid a match
  654. X             * of the string with itself at the start of the input file).
  655. X             */
  656. X            match_length = longest_match (hash_head);
  657. X            /* longest_match() sets match_start */
  658. X            if (match_length > lookahead) match_length = lookahead;
  659. X            /* Ignore a length 3 match if it is too distant: */
  660. X            if (match_length == MIN_MATCH && strstart-match_start > TOO_FAR){
  661. X                /* If prev_match is also MIN_MATCH, match_start is garbage
  662. X                 * but we will ignore the current match anyway.
  663. X                 */
  664. X                match_length--;
  665. X            }
  666. X        }
  667. X        /* If there was a match at the previous step and the current
  668. X         * match is not better, output the previous match:
  669. X         */
  670. X        if (prev_length >= MIN_MATCH && match_length <= prev_length) {
  671. X
  672. X            check_match(strstart-1, prev_match, prev_length);
  673. X
  674. X            flush = ct_tally(strstart-1-prev_match, prev_length - MIN_MATCH);
  675. X
  676. X            /* Insert in hash table all strings up to the end of the match.
  677. X             * strstart-1 and strstart are already inserted.
  678. X             */
  679. X            lookahead -= prev_length-1;
  680. X            prev_length -= 2;
  681. X            do {
  682. X                strstart++;
  683. X                INSERT_STRING(strstart, hash_head);
  684. X                /* strstart never exceeds WSIZE-MAX_MATCH, so there are
  685. X                 * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH
  686. X                 * these bytes are garbage, but it does not matter since the
  687. X                 * next lookahead bytes will always be emitted as literals.
  688. X                 */
  689. X            } while (--prev_length != 0);
  690. X            match_available = 0;
  691. X            match_length = MIN_MATCH-1;
  692. X
  693. X        } else if (match_available) {
  694. X            /* If there was no match at the previous position, output a
  695. X             * single literal. If there was a match but the current match
  696. X             * is longer, truncate the previous match to a single literal.
  697. X             */
  698. X            flush = ct_tally (0, window[strstart-1]);
  699. X            Tracevv((stderr,"%c",window[strstart-1]));
  700. X            lookahead--;
  701. X        } else {
  702. X            /* There is no previous match to compare with, wait for
  703. X             * the next step to decide.
  704. X             */
  705. X            match_available = 1;
  706. X            flush = 0;
  707. X            lookahead--;
  708. X        }
  709. X        if (flush) FLUSH_BLOCK(0), block_start = strstart;
  710. X        strstart++;
  711. X        Assert (strstart <= isize && lookahead <= isize, "a bit too far");
  712. X
  713. X        /* Make sure that we always have enough lookahead, except
  714. X         * at the end of the input file. We need MAX_MATCH bytes
  715. X         * for the next match, plus MIN_MATCH bytes to insert the
  716. X         * string following the next match.
  717. X         */
  718. X        while (lookahead < MIN_LOOKAHEAD && !eofile) fill_window();
  719. X    }
  720. X    if (match_available) ct_tally (0, window[strstart-1]);
  721. X
  722. X    return FLUSH_BLOCK(1); /* eof */
  723. X}
  724. X#endif /* LAZY */
  725. END_OF_FILE
  726.   if test 26162 -ne `wc -c <'deflate.c'`; then
  727.     echo shar: \"'deflate.c'\" unpacked with wrong size!
  728.   fi
  729.   # end of 'deflate.c'
  730. fi
  731. if test -f 'msdos/tcconfig.tc.UU' -a "${1}" != "-c" ; then 
  732.   echo shar: Will not clobber existing file \"'msdos/tcconfig.tc.UU'\"
  733. else
  734.   echo shar: Extracting \"'msdos/tcconfig.tc.UU'\" \(2366 characters\)
  735.   sed "s/^X//" >'msdos/tcconfig.tc.UU' <<'END_OF_FILE'
  736. Xbegin 666 msdos/tcconfig.tc
  737. XM5'5R8F\@0R!#;VYF:6=U<F%T:6]N($9I;&4@&@ !#1(7 1H  @$!  (    "
  738. XM  (  0 #  (  @ $  $   4  0  !@ !   (  $  PD  @    T  @ !  X 
  739. XM @   !$  0 ($@ "  $ $P " !D %  "    %0 "  $ %@ "  ( %P "  $ 
  740. XM&  "    9  !  %E  $  68  0 !9P !  %H  $  6D  0 !:@ !  %K  $ 
  741. XM &P  0 !;0 !  %N  $  6\  0 !<  !  %Q  $  '(  0 !<P !  !T  $ 
  742. XM 74  0 !=@ !  %W  $  7@  0 !>0 !  %Z  $  7L  0  ?  !  %]  $ 
  743. XM 7X  0 !?P !  &   $  ((  0  A  !  &%  $  <@  0  R0 !  '*  $ 
  744. XM ,L  0  S  !  #-  $  ,X  0 !SP !  #0  $ &=$  0!DT@ ! "#5  $ 
  745. XM -<  0  V  !  '9  $  =H  0 !VP !  #<  $  =T  0 !W@ !  #?  $ 
  746. XM .   0  X0 !  #B  $  2P!1                                   
  747. XM                                                         "T!
  748. XM@ !#.EQ40UQ)3D-,541%                                        
  749. XM                                                            
  750. XM                                                     "X!@ !#
  751. XM.EQ40UQ,24(                                                 
  752. XM                                                            
  753. XM                                                 "\!4 !:25 N
  754. XM4%)*                                                        
  755. XM                                         # !!  S,@  ,0$% #(U
  756. XM    ,@$% #$P,   ,P%_                                        
  757. XM                                                            
  758. XM                                                            
  759. XM           T 1X *@                                      -0$>
  760. XM "H                                      #8!'@ J            
  761. XM                           W 1X *@                          
  762. XM            . $> "H                                      #D!
  763. XM'@ J                                       Z 1X *@          
  764. XM                            .P$> "H                         
  765. XM             #P!'@ J                                       ]
  766. XM 8                                                          
  767. XM                                                            
  768. XM                                                       ^ 00 
  769. XM.    #\!4                                                   
  770. XM                                                         $ !
  771. XM1 !#.EQ40P                                                  
  772. XM                                 $$!4                       
  773. XM                                                            
  774. X9                         /__ @ :    
  775. Xend
  776. END_OF_FILE
  777.   if test 2366 -ne `wc -c <'msdos/tcconfig.tc.UU'`; then
  778.     echo shar: \"'msdos/tcconfig.tc.UU'\" unpacked with wrong size!
  779.   else
  780.     echo shar: Uudecoding \"'msdos/tcconfig.tc'\" \(1690 characters\)
  781.     cat msdos/tcconfig.tc.UU | uudecode
  782.     if test 1690 -ne `wc -c <'msdos/tcconfig.tc'`; then
  783.       echo shar: \"'msdos/tcconfig.tc'\" uudecoded with wrong size!
  784.     else
  785.       rm msdos/tcconfig.tc.UU
  786.     fi
  787.   fi
  788.   # end of 'msdos/tcconfig.tc.UU'
  789. fi
  790. if test -f 'os2/os2zip.c.UU' -a "${1}" != "-c" ; then 
  791.   echo shar: Will not clobber existing file \"'os2/os2zip.c.UU'\"
  792. else
  793.   echo shar: Extracting \"'os2/os2zip.c.UU'\" \(28901 characters\)
  794.   sed "s/^X//" >'os2/os2zip.c.UU' <<'END_OF_FILE'
  795. Xbegin 666 os2/os2zip.c
  796. XM+RH-"B J($ H(RED:7(N8R Q+C0@.#<O,3$O,#8@4'5B;&EC($1O;6%I;BX-
  797. XM"B J#0H@*B @02!P=6)L:6,@9&]M86EN(&EM<&QE;65N=&%T:6]N(&]F($)3
  798. XM1"!D:7)E8W1O<GD@<F]U=&EN97,@9F]R#0H@*B @35,M1$]3+B @5W)I='1E
  799. XM;B!B>2!-:6-H865L(%)E;F1E;&P@*'MU=6YE="QU=&%I?6UI8VAA96Q 9V%R
  800. XM9FEE;&0I+ T*("H@($%U9W5S=" Q.#DW#0H@*B @4&]R=&5D('1O($]3+S(@
  801. XM8GD@2V%I(%5W92!2;VUM96P-"B J("!$96-E;6)E<B Q.3@Y+"!&96)R=6%R
  802. XM>2 Q.3DP#0H@*B @0VAA;F=E(&9O<B!(4$93('-U<'!O<G0L($]C=&]B97(@
  803. XM,3DY, T*("HO#0H-"B\J(&1O97,@86QS;R!C;VYT86EN($5!(&%C8V5S<R!C
  804. XM;V1E(&9O<B!U<V4@:6X@6DE0("HO#0H-"@T*(VEF9&5F(%]?14U87U\-"B-D
  805. XM969I;F4@7U\S,D))5%]?#0HC96YD:68-"@T*(VEN8VQU9&4@(GII<"YH(@T*
  806. XM#0HC:6YC;'5D92 \<W1D;&EB+F@^#0HC:6YC;'5D92 \=&EM92YH/@T*(VEN
  807. XM8VQU9&4@/&-T>7!E+F@^#0H-"B-I9F1E9B!?7U=!5$-/34-?7PT*(VEN8VQU
  808. XM9&4@/&UA;&QO8RYH/@T*=6YS:6=N960@8VAA<B!?7VYE87(@7V]S;6]D92 ]
  809. XM($]3,E]-3T1%.PT*(V5N9&EF#0H-"B-D969I;F4@24Y#3%].3U!-#0HC9&5F
  810. XM:6YE($E.0TQ?1$]33DQ3#0HC9&5F:6YE($E.0TQ?1$]315)23U)3#0HC:6YC
  811. XM;'5D92 \;W,R+F@^#0H-"B-I;F-L=61E(")O<S)Z:7 N:"(-"@T*#0HC9&5F
  812. XM:6YE($5!240@(" @(#!X,# P.0T*#0H-"B-I9F1E9B!?7S,R0DE47U\-"B-D
  813. XM969I;F4@1&]S1FEN9$9I<G-T*' Q+"!P,BP@<#,L(' T+"!P-2P@<#8I(%P-
  814. XM"B @(" @(" @1&]S1FEN9$9I<G-T*' Q+"!P,BP@<#,L(' T+"!P-2P@<#8L
  815. XM(#$I#0HC96QS90T*(V1E9FEN92!$;W-1=65R>4-U<G)E;G1$:7-K($1O<U%#
  816. XM=7)$:7-K#0HC9&5F:6YE($1O<U%U97)Y1E-!='1A8V@H<#$L(' R+"!P,RP@
  817. XM<#0L(' U*2!<#0H@(" @(" @($1O<U%&4T%T=&%C:"AP,2P@<#(L(' S+"!P
  818. XM-"P@<#4L(# I#0HC9&5F:6YE($1O<U%U97)Y4&%T:$EN9F\H<#$L(' R+"!P
  819. XM,RP@<#0I(%P-"B @(" @(" @1&]S45!A=&A);F9O*' Q+"!P,BP@<#,L(' T
  820. XM+" P*0T*(V1E9FEN92!$;W-39710871H26YF;RAP,2P@<#(L(' S+"!P-"P@
  821. XM<#4I(%P-"B @(" @(" @1&]S4V5T4&%T:$EN9F\H<#$L(' R+"!P,RP@<#0L
  822. XM(' U+" P*0T*(V1E9FEN92!$;W-%;G5M071T<FEB=71E*' Q+"!P,BP@<#,L
  823. XM(' T+"!P-2P@<#8L(' W*2!<#0H@(" @(" @($1O<T5N=6U!='1R:6)U=&4H
  824. XM<#$L(' R+"!P,RP@<#0L(' U+"!P-BP@<#<L(# I#0HC9&5F:6YE($1O<T9I
  825. XM;F1&:7)S="AP,2P@<#(L(' S+"!P-"P@<#4L(' V*2!<#0H@(" @(" @($1O
  826. XM<T9I;F1&:7)S="AP,2P@<#(L(' S+"!P-"P@<#4L(' V+" P*0T*(V1E9FEN
  827. XM92!$;W--87!#87-E($1O<T-A<V5-87 -"B-E;F1I9@T*#0H-"B-I9FYD968@
  828. XM551)3 T*#0IE>'1E<FX@:6YT(&YO:7-Y.PT*#0HC:69N9&5F(%-?249-5 T*
  829. XM(V1E9FEN92!37TE&350@,'A&,# P#0HC96YD:68-"@T*<W1A=&EC(&EN="!A
  830. XM='1R:6)U=&5S(#T@05]$25(@?"!!7TA)1$1%3B!\($%?4UE35$5-.PT*#0IS
  831. XM=&%T:6,@8VAA<B J9V5T9&ER96YT*&-H87(@*BD[#0IS=&%T:6,@=F]I9"!F
  832. XM<F5E7V1I<F-O;G1E;G1S*'-T<G5C="!?9&ER8V]N=&5N=',@*BD[#0H-"B-I
  833. XM9F1E9B!?7S,R0DE47U\-"G-T871I8R!(1$E2(&AD:7([#0IS=&%T:6,@54Q/
  834. XM3D<@8V]U;G0[#0IS=&%T:6,@1DE,149)3D1"548S(&9I;F0[#0HC96QS90T*
  835. XM<W1A=&EC($A$25(@:&1I<CL-"G-T871I8R!54TA/4E0@8V]U;G0[#0IS=&%T
  836. XM:6,@1DE,149)3D1"548@9FEN9#L-"B-E;F1I9@T*#0H-"D1)4B J;W!E;F1I
  837. XM<BAC:&%R("IN86UE*0T*>PT*("!S=')U8W0@<W1A="!S=&%T8CL-"B @1$E2
  838. XM("ID:7)P.PT*("!C:&%R(&,[#0H@(&-H87(@*G,[#0H@('-T<G5C="!?9&ER
  839. XM8V]N=&5N=',@*F1P.PT*("!C:&%R(&YB=69;34%84$%42$Q%3B K(#%=.PT*
  840. XM("!I;G0@;&5N.PT*#0H@('-T<F-P>2AN8G5F+"!N86UE*3L-"B @;&5N(#T@
  841. XM<W1R;&5N("AN8G5F*3L-"B @<R ](&YB=68@*R!L96X[#0H-"B @:68@*" H
  842. XM*&,@/2!N8G5F6W-T<FQE;BAN8G5F*2 M(#%=*2 ]/2 G7%PG('Q\(&,@/3T@
  843. XM)R\G*2 F)@T*(" @(" @("AS=')L96XH;F)U9BD@/B Q*2 I#0H@('L-"B @
  844. XM("!N8G5F6W-T<FQE;BAN8G5F*2 M(#%=(#T@,#L-"@T*(" @(&EF("@@;F)U
  845. XM9EMS=')L96XH;F)U9BD@+2 Q72 ]/2 G.B<@*0T*(" @(" @<W1R8V%T*&YB
  846. XM=68L(")<7"XB*3L-"B @?0T*("!E;'-E#0H@(" @:68@*"!N8G5F6W-T<FQE
  847. XM;BAN8G5F*2 M(#%=(#T]("<Z)R I#0H@(" @("!S=')C870H;F)U9BP@(BXB
  848. XM*3L-"@T*("!I9B H<W1A="AN8G5F+" F<W1A=&(I(#P@,"!\?" H<W1A=&(N
  849. XM<W1?;6]D92 F(%-?249-5"D@(3T@4U])1D1)4BD-"B @("!R971U<FX@3E5,
  850. XM3#L-"@T*("!I9B H("AD:7)P(#T@;6%L;&]C*'-I>F5O9BA$25(I*2D@/3T@
  851. XM3E5,3" I#0H@(" @<F5T=7)N($Y53$P[#0H-"B @:68@*"!N8G5F6W-T<FQE
  852. XM;BAN8G5F*2 M(#%=(#T]("<N)R I#0H@(" @<W1R8W!Y*&YB=68@*R!S=')L
  853. XM96XH;F)U9BD@+2 Q+" B*BXJ(BD[#0H@(&5L<V4-"B @("!I9B H("@H8R ]
  854. XM(&YB=69;<W1R;&5N*&YB=68I("T@,5TI(#T]("=<7"<@?'P@8R ]/2 G+R<I
  855. XM("8F#0H@(" @(" @(" H<W1R;&5N*&YB=68I(#T](#$I("D-"B @(" @('-T
  856. XM<F-A="AN8G5F+" B*BXJ(BD[#0H@(" @96QS90T*(" @(" @<W1R8V%T*&YB
  857. XM=68L(")<7"HN*B(I.PT*#0H@(&1I<G @+3X@9&1?;&]C(#T@,#L-"B @9&ER
  858. XM<" M/B!D9%]C;VYT96YT<R ](&1I<G @+3X@9&1?8W @/2!.54Q,.PT*#0H@
  859. XM(&EF("@H<R ](&=E=&1I<F5N="AN8G5F*2D@/3T@3E5,3"D-"B @("!R971U
  860. XM<FX@9&ER<#L-"@T*("!D;PT*("![#0H@(" @:68@*"@H9' @/2!M86QL;V,H
  861. XM<VEZ96]F*'-T<G5C="!?9&ER8V]N=&5N=',I*2D@/3T@3E5,3"D@?'P-"B @
  862. XM(" @(" @*"AD<" M/B!?9%]E;G1R>2 ](&UA;&QO8RAS=')L96XH<RD@*R Q
  863. XM*2D@/3T@3E5,3"D@(" @(" I#0H@(" @>PT*(" @(" @:68@*&1P*0T*(" @
  864. XM(" @("!F<F5E*&1P*3L-"B @(" @(&9R965?9&ER8V]N=&5N=',H9&ER<" M
  865. XM/B!D9%]C;VYT96YT<RD[#0H-"B @(" @(')E='5R;B!.54Q,.PT*(" @('T-
  866. XM"@T*(" @(&EF("AD:7)P("T^(&1D7V-O;G1E;G1S*0T*(" @('L-"B @(" @
  867. XM(&1I<G @+3X@9&1?8W @+3X@7V1?;F5X=" ](&1P.PT*(" @(" @9&ER<" M
  868. XM/B!D9%]C<" ](&1I<G @+3X@9&1?8W @+3X@7V1?;F5X=#L-"B @("!]#0H@
  869. XM(" @96QS90T*(" @(" @9&ER<" M/B!D9%]C;VYT96YT<R ](&1I<G @+3X@
  870. XM9&1?8W @/2!D<#L-"@T*(" @('-T<F-P>2AD<" M/B!?9%]E;G1R>2P@<RD[
  871. XM#0H@(" @9' @+3X@7V1?;F5X=" ]($Y53$P[#0H-"B @("!D<" M/B!?9%]S
  872. XM:7IE(#T@9FEN9"YC8D9I;&4[#0H@(" @9' @+3X@7V1?;6]D92 ](&9I;F0N
  873. XM871T<D9I;&4[#0H@(" @9' @+3X@7V1?=&EM92 ]("HH=6YS:6=N960@*BD@
  874. XM)BAF:6YD+F9T:6UE3&%S=%=R:71E*3L-"B @("!D<" M/B!?9%]D871E(#T@
  875. XM*BAU;G-I9VYE9" J*2 F*&9I;F0N9F1A=&5,87-T5W)I=&4I.PT*("!]#0H@
  876. XM('=H:6QE("@H<R ](&=E=&1I<F5N="A.54Q,*2D@(3T@3E5,3"D[#0H-"B @
  877. XM9&ER<" M/B!D9%]C<" ](&1I<G @+3X@9&1?8V]N=&5N=',[#0H-"B @<F5T
  878. XM=7)N(&1I<G [#0I]#0H-"@T*=F]I9"!C;&]S961I<BA$25(@*B!D:7)P*0T*
  879. XM>PT*("!F<F5E7V1I<F-O;G1E;G1S*&1I<G @+3X@9&1?8V]N=&5N=',I.PT*
  880. XM("!F<F5E*&1I<G I.PT*?0T*#0H-"G-T<G5C="!D:7)E8W0@*G)E861D:7(H
  881. XM1$E2("H@9&ER<"D-"GL-"B @<W1A=&EC('-T<G5C="!D:7)E8W0@9' [#0H-
  882. XM"B @:68@*&1I<G @+3X@9&1?8W @/3T@3E5,3"D-"B @("!R971U<FX@3E5,
  883. XM3#L-"@T*("!D<"YD7VYA;6QE;B ](&1P+F1?<F5C;&5N(#T-"B @("!S=')L
  884. XM96XH<W1R8W!Y*&1P+F1?;F%M92P@9&ER<" M/B!D9%]C<" M/B!?9%]E;G1R
  885. XM>2DI.PT*#0H@(&1P+F1?:6YO(#T@,#L-"@T*("!D<"YD7W-I>F4@/2!D:7)P
  886. XM("T^(&1D7V-P("T^(%]D7W-I>F4[#0H@(&1P+F1?;6]D92 ](&1I<G @+3X@
  887. XM9&1?8W @+3X@7V1?;6]D93L-"B @9' N9%]T:6UE(#T@9&ER<" M/B!D9%]C
  888. XM<" M/B!?9%]T:6UE.PT*("!D<"YD7V1A=&4@/2!D:7)P("T^(&1D7V-P("T^
  889. XM(%]D7V1A=&4[#0H-"B @9&ER<" M/B!D9%]C<" ](&1I<G @+3X@9&1?8W @
  890. XM+3X@7V1?;F5X=#L-"B @9&ER<" M/B!D9%]L;V,K*SL-"@T*("!R971U<FX@
  891. XM)F1P.PT*?0T*#0H-"G9O:60@<V5E:V1I<BA$25(@*B!D:7)P+"!L;VYG(&]F
  892. XM9BD-"GL-"B @;&]N9R!I(#T@;V9F.PT*("!S=')U8W0@7V1I<F-O;G1E;G1S
  893. XM("ID<#L-"@T*("!I9B H;V9F(#X](# I#0H@('L-"B @("!F;W(@*&1P(#T@
  894. XM9&ER<" M/B!D9%]C;VYT96YT<SL@+2UI(#X](# @)B8@9' [(&1P(#T@9' @
  895. XM+3X@7V1?;F5X="D[#0H-"B @("!D:7)P("T^(&1D7VQO8R ](&]F9B M("AI
  896. XM("L@,2D[#0H@(" @9&ER<" M/B!D9%]C<" ](&1P.PT*("!]#0I]#0H-"@T*
  897. XM;&]N9R!T96QL9&ER*$1)4B J(&1I<G I#0I[#0H@(')E='5R;B!D:7)P("T^
  898. XM(&1D7VQO8SL-"GT-"@T*#0IS=&%T:6,@=F]I9"!F<F5E7V1I<F-O;G1E;G1S
  899. XM*'-T<G5C="!?9&ER8V]N=&5N=',@*B!D<"D-"GL-"B @<W1R=6-T(%]D:7)C
  900. XM;VYT96YT<R J;V1P.PT*#0H@('=H:6QE("AD<"D-"B @>PT*(" @(&EF("AD
  901. XM<" M/B!?9%]E;G1R>2D-"B @(" @(&9R964H9' @+3X@7V1?96YT<GDI.PT*
  902. XM#0H@(" @9' @/2 H;V1P(#T@9' I("T^(%]D7VYE>'0[#0H@(" @9G)E92AO
  903. XM9' I.PT*("!]#0I]#0H-"@T*<W1A=&EC(&-H87(@*F=E=&1I<F5N="AC:&%R
  904. XM("ID:7(I#0I[#0H@(&EN="!D;VYE.PT*("!S=&%T:6,@:6YT(&QO=V5R.PT*
  905. XM#0H@(&EF("AD:7(@(3T@3E5,3"D-"B @>R @(" @(" @(" @(" @(" @(" @
  906. XM(" @(" @(" @(" @(" @("\J(&=E="!F:7)S="!E;G1R>2 J+PT*(" @(&AD
  907. XM:7(@/2!(1$E27T-214%413L-"B @("!C;W5N=" ](#$[#0H@(" @9&]N92 ]
  908. XM($1O<T9I;F1&:7)S="AD:7(L("9H9&ER+"!A='1R:6)U=&5S+" F9FEN9"P@
  909. XM<VEZ96]F*&9I;F0I+" F8V]U;G0I.PT*(" @(&QO=V5R(#T@27-&:6QE4WES
  910. XM=&5M1D%4*&1I<BD[#0H@('T-"B @96QS92 @(" @(" @(" @(" @(" @(" @
  911. XM(" @(" @(" @(" @("\J(&=E="!N97AT(&5N=')Y("HO#0H@(" @9&]N92 ]
  912. XM($1O<T9I;F1.97AT*&AD:7(L("9F:6YD+"!S:7IE;V8H9FEN9"DL("9C;W5N
  913. XM="D[#0H-"B @:68@*&1O;F4@/3T@,"D-"B @>PT*(" @(&EF("@@;&]W97(@
  914. XM*0T*(" @(" @4W1R:6YG3&]W97(H9FEN9"YA8VA.86UE*3L-"B @("!R971U
  915. XM<FX@9FEN9"YA8VA.86UE.PT*("!]#0H@(&5L<V4-"B @>PT*(" @($1O<T9I
  916. XM;F1#;&]S92AH9&ER*3L-"B @("!R971U<FX@3E5,3#L-"B @?0T*?0T*#0H-
  917. XM"B\J($9!5" O($A01E,@9&5T96-T:6]N("HO#0H-"FEN="!)<T9I;&53>7-T
  918. XM96U&050H8VAA<B J9&ER*0T*>PT*("!S=&%T:6,@55-(3U)4(&Y,87-T1')I
  919. XM=F4@/2 M,2P@;E)E<W5L=#L-"B @54Q/3D<@;$UA<#L-"B @0EE412!B1&%T
  920. XM85LV-%TL(&).86UE6S-=.PT*(VEF9&5F(%]?,S)"251?7PT*("!53$].1R!N
  921. XM1')I=F4L(&-B1&%T83L-"B @4$9344)51D9%4C(@<$1A=&$@/2 H4$9344)5
  922. XM1D9%4C(I(&)$871A.PT*(V5L<V4-"B @55-(3U)4(&Y$<FEV92P@8V)$871A
  923. XM.PT*("!01E-10E5&1D52('!$871A(#T@*%!&4U%"549&15(I(&)$871A.PT*
  924. XM(V5N9&EF#0H-"B @:68@*"!?;W-M;V1E(#T]($1/4U]-3T1%("D-"B @("!R
  925. XM971U<FX@5%)513L-"B @96QS90T*("![#0H@(" @+RH@5V4@<V5P87)A=&4@
  926. XM1D%4(&%N9"!(4$93*V]T:&5R(&9I;&4@<WES=&5M<R!H97)E+@T*(" @(" @
  927. XM(&%T('1H92!M;VUE;G0@22!C;VYS:61E<B!O=&AE<B!S>7-T96US('1O(&)E
  928. XM('-I;6EL87(@=&\@2%!&4RP-"B @(" @("!I+F4N('-U<'!O<G0@;&]N9R!F
  929. XM:6QE(&YA;65S(&%N9"!B965I;F<@8V%S92!S96YS:71I=F4@*B\-"@T*(" @
  930. XM(&EF("@@:7-A;'!H82AD:7);,%TI("8F("AD:7);,5T@/3T@)SHG*2 I#0H@
  931. XM(" @("!N1')I=F4@/2!T;U]U<"AD:7);,%TI("T@)T G.PT*(" @(&5L<V4-
  932. XM"B @(" @($1O<U%U97)Y0W5R<F5N=$1I<VLH)FY$<FEV92P@)FQ-87 I.PT*
  933. XM#0H@(" @:68@*"!N1')I=F4@/3T@;DQA<W1$<FEV92 I#0H@(" @("!R971U
  934. XM<FX@;E)E<W5L=#L-"@T*(" @(&).86UE6S!=(#T@*&-H87(I("AN1')I=F4@
  935. XM*R G0"<I.PT*(" @(&).86UE6S%=(#T@)SHG.PT*(" @(&).86UE6S)=(#T@
  936. XM,#L-"@T*(" @(&Y,87-T1')I=F4@/2!N1')I=F4[#0H@(" @8V)$871A(#T@
  937. XM<VEZ96]F*&)$871A*3L-"@T*(" @(&EF("@@(41O<U%U97)Y1E-!='1A8V@H
  938. XM8DYA;64L(# L($9304E,7U%515)93D%-12P@*%!63TE$*2!P1&%T82P@)F-B
  939. XM1&%T82D@*0T*(" @(" @;E)E<W5L=" ]("%S=')C;7 H<$1A=&$@+3X@<WI&
  940. XM4T1.86UE("L@<$1A=&$@+3X@8V).86UE+" B1D%4(BD[#0H@(" @96QS90T*
  941. XM(" @(" @;E)E<W5L=" ]($9!3%-%.PT*#0H@(" @+RH@16YD(&]F('1H:7,@
  942. XM=6=L>2!C;V1E("HO#0H@(" @<F5T=7)N(&Y297-U;'0[#0H@('T-"GT-"@T*
  943. XM#0HO*B!A8V-E<W,@;6]D92!B:71S(&%N9"!T:6UE('-T86UP("HO#0H-"FEN
  944. XM="!'971&:6QE36]D92AC:&%R("IN86UE*0T*>PT*(VEF9&5F(%]?,S)"251?
  945. XM7PT*("!&24Q%4U1!5%53,R!F<SL-"B @<F5T=7)N($1O<U%U97)Y4&%T:$EN
  946. XM9F\H;F%M92P@,2P@)F9S+"!S:7IE;V8H9G,I*2 _("TQ(#H@9G,N871T<D9I
  947. XM;&4[#0HC96QS90T*("!54TA/4E0@;6]D93L-"B @<F5T=7)N($1O<U%&:6QE
  948. XM36]D92AN86UE+" F;6]D92P@,$PI(#\@+3$@.B!M;V1E.PT*(V5N9&EF#0I]
  949. XM#0H-"FQO;F<@1V5T1FEL951I;64H8VAA<B J;F%M92D-"GL-"B-I9F1E9B!?
  950. XM7S,R0DE47U\-"B @1DE,15-405154S,@9G,[#0HC96QS90T*("!&24Q%4U1!
  951. XM5%53(&9S.PT*(V5N9&EF#0H@(%532$]25"!N1&%T92P@;E1I;64[#0H-"B @
  952. XM:68@*"!$;W-1=65R>5!A=&A);F9O*&YA;64L(#$L("A00EE412D@)F9S+"!S
  953. XM:7IE;V8H9G,I*2 I#0H@(" @<F5T=7)N("TQ.PT*#0H@(&Y$871E(#T@*B H
  954. XM55-(3U)4("HI("9F<RYF9&%T94QA<W17<FET93L-"B @;E1I;64@/2 J("A5
  955. XM4TA/4E0@*BD@)F9S+F9T:6UE3&%S=%=R:71E.PT*#0H@(')E='5R;B H*%5,
  956. XM3TY'*2!N1&%T92D@/#P@,38@?"!N5&EM93L-"GT-"@T*=F]I9"!3971&:6QE
  957. XM5&EM92AC:&%R("IP871H+"!L;VYG('-T86UP*0T*>PT*("!&24Q%4U1!5%53
  958. XM(&9S.PT*("!54TA/4E0@9F0L(&9T.PT*("!54TA/4E0@;DQE;F=T:#L-"B @
  959. XM8VAA<B!S>DYA;65;0T-(34%84$%42%T[#0H-"B @:68@*"!$;W-1=65R>5!A
  960. XM=&A);F9O*'!A=&@L($9)3%]35$%.1$%21"P@*%!"651%*2 F9G,L('-I>F5O
  961. XM9BAF<RDI("D-"B @("!R971U<FX[#0H-"B @9F0@/2 H55-(3U)4*2 H<W1A
  962. XM;7 @/CX@,38I.PT*("!F=" ]("A54TA/4E0I('-T86UP.PT*("!F<RYF9&%T
  963. XM94QA<W17<FET92 ](&9S+F9D871E0W)E871I;VX@/2 J("A&1$%412 J*2 F
  964. XM9F0[#0H@(&9S+F9T:6UE3&%S=%=R:71E(#T@9G,N9G1I;65#<F5A=&EO;B ]
  965. XM("H@*$9424U%("HI("9F=#L-"@T*("!$;W-39710871H26YF;RAP871H+"!&
  966. XM24Q?4U1!3D1!4D0L("A00EE412D@)F9S+"!S:7IE;V8H9G,I+" P*3L-"GT-
  967. XM"@T*#0HO*B!&050@+R!(4$93(&YA;64@8V]N=F5R<VEO;B!S='5F9B J+PT*
  968. XM#0II;G0@27-&:6QE3F%M959A;&ED*&-H87(@*FYA;64I#0I[#0H@($A&24Q%
  969. XM(&AF.PT*(VEF9&5F(%]?,S)"251?7PT*("!53$].1R!U06-T:6]N.PT*(V5L
  970. XM<V4-"B @55-(3U)4('5!8W1I;VX[#0HC96YD:68-"@T*("!S=VET8V@H($1O
  971. XM<T]P96XH;F%M92P@)FAF+" F=4%C=&EO;BP@,"P@,"P@1DE,15]/4$5.+ T*
  972. XM(" @(" @(" @(" @(" @(" @3U!%3E]!0T-%4U-?4D5!1$].3%D@?"!/4$5.
  973. XM7U-(05)%7T1%3EE.3TY%+" P*2 I#0H@('L-"B @8V%S92!%4E)/4E])3E9!
  974. XM3$E$7TY!344Z#0H@(&-A<V4@15)23U)?1DE,14Y!345?15A#141?4D%.1T4Z
  975. XM#0H@(" @<F5T=7)N($9!3%-%.PT*("!C87-E($Y/7T524D]2.@T*(" @($1O
  976. XM<T-L;W-E*&AF*3L-"B @9&5F875L=#H-"B @("!R971U<FX@5%)513L-"B @
  977. XM?0T*?0T*#0H-"G9O:60@0VAA;F=E3F%M949O<D9!5"AC:&%R("IN86UE*0T*
  978. XM>PT*("!C:&%R("IS<F,L("ID<W0L("IN97AT+" J<'1R+" J9&]T+" J<W1A
  979. XM<G0[#0H@('-T871I8R!C:&%R(&EN=F%L:61;72 ]("(Z.RP]*UPB6UT\/GP@
  980. XM7'0B.PT*#0H@(&EF("@@:7-A;'!H82AN86UE6S!=*2 F)B H;F%M95LQ72 ]
  981. XM/2 G.B<I("D-"B @("!S=&%R=" ](&YA;64@*R R.PT*("!E;'-E#0H@(" @
  982. XM<W1A<G0@/2!N86UE.PT*#0H@('-R8R ](&1S=" ]('-T87)T.PT*("!I9B H
  983. XM("@J<W)C(#T]("<O)RD@?'P@*"IS<F,@/3T@)UQ<)RD@*0T*(" @('-R8RLK
  984. XM+"!D<W0K*SL-"@T*("!W:&EL92 H("IS<F,@*0T*("![#0H@(" @9F]R("@@
  985. XM;F5X=" ]('-R8SL@*FYE>'0@)B8@*"IN97AT("$]("<O)RD@)B8@*"IN97AT
  986. XM("$]("=<7"<I.R!N97AT*RL@*3L-"@T*(" @(&9O<B H('!T<B ]('-R8RP@
  987. XM9&]T(#T@3E5,3#L@<'1R(#P@;F5X=#L@<'1R*RL@*0T*(" @(" @:68@*" J
  988. XM<'1R(#T]("<N)R I#0H@(" @("![#0H@(" @(" @(&1O=" ]('!T<CL@+RH@
  989. XM<F5M96UB97(@;&%S="!D;W0@*B\-"B @(" @(" @*G!T<B ]("=?)SL-"B @
  990. XM(" @('T-"@T*(" @(&EF("@@9&]T(#T]($Y53$P@*0T*(" @(" @9F]R("@@
  991. XM<'1R(#T@<W)C.R!P='(@/"!N97AT.R!P='(K*R I#0H@(" @(" @(&EF("@@
  992. XM*G!T<B ]/2 G7R<@*0T*(" @(" @(" @(&1O=" ]('!T<CL@+RH@<F5M96UB
  993. XM97(@;&%S="!?(&%S(&EF(&ET('=E<F4@82!D;W0@*B\-"@T*(" @(&EF("@@
  994. XM9&]T("8F("AD;W0@/B!S<F,I("8F#0H@(" @(" @(" H*&YE>'0@+2!D;W0@
  995. XM/#T@-"D@?'P-"B @(" @(" @(" H*&YE>'0@+2!S<F,@/B X*2 F)B H9&]T
  996. XM("T@<W)C(#X@,RDI*2 I#0H@(" @>PT*(" @(" @:68@*"!D;W0@*0T*(" @
  997. XM(" @(" J9&]T(#T@)RXG.PT*#0H@(" @("!F;W(@*"!P='(@/2!S<F,[("AP
  998. XM='(@/"!D;W0I("8F("@H<'1R("T@<W)C*2 \(#@I.R!P='(K*R I#0H@(" @
  999. XM(" @("ID<W0K*R ]("IP='([#0H-"B @(" @(&9O<B H('!T<B ](&1O=#L@
  1000. XM*'!T<B \(&YE>'0I("8F("@H<'1R("T@9&]T*2 \(#0I.R!P='(K*R I#0H@
  1001. XM(" @(" @("ID<W0K*R ]("IP='([#0H@(" @?0T*(" @(&5L<V4-"B @("![
  1002. XM#0H@(" @("!I9B H(&1O=" F)B H;F5X=" M('-R8R ]/2 Q*2 I#0H@(" @
  1003. XM(" @("ID;W0@/2 G+B<[(" @(" @(" @(" O*B!S<&5C:6%L(&-A<V4Z("(N
  1004. XM(B!A<R!A('!A=&@@8V]M<&]N96YT("HO#0H-"B @(" @(&9O<B H('!T<B ]
  1005. XM('-R8SL@*'!T<B \(&YE>'0I("8F("@H<'1R("T@<W)C*2 \(#@I.R!P='(K
  1006. XM*R I#0H@(" @(" @("ID<W0K*R ]("IP='([#0H@(" @?0T*#0H@(" @*F1S
  1007. XM="LK(#T@*FYE>'0[("\J(&5I=&AE<B G+R<@;W(@," J+PT*#0H@(" @:68@
  1008. XM*" J;F5X=" I#0H@(" @>PT*(" @(" @<W)C(#T@;F5X=" K(#$[#0H-"B @
  1009. XM(" @(&EF("@@*G-R8R ]/2 P("D@+RH@:&%N9&QE('1R86EL:6YG("<O)R!O
  1010. XM;B!D:7)S("$@*B\-"B @(" @(" @*F1S=" ](# [#0H@(" @?0T*(" @(&5L
  1011. XM<V4-"B @(" @(&)R96%K.PT*("!]#0H-"B @9F]R("@@<W)C(#T@<W1A<G0[
  1012. XM("IS<F,@(3T@,#L@*RMS<F,@*0T*(" @(&EF("@@*'-T<F-H<BAI;G9A;&ED
  1013. XM+" J<W)C*2 A/2!.54Q,*2!\?" H*G-R8R ]/2 G("<I("D-"B @(" @("IS
  1014. XM<F,@/2 G7R<[#0I]#0H-"@T*+RH@+DQ/3D=.04U%($5!(&-O9&4@*B\-"@T*
  1015. XM='EP961E9B!S=')U8W0-"GL-"B @54Q/3D<@8V),:7-T.R @(" @(" @(" @
  1016. XM(" @("\J(&QE;F=T:"!O9B!V86QU92 K(#(R("HO#0HC:69D968@7U\S,D))
  1017. XM5%]?#0H@(%5,3TY'(&].97AT.PT*(V5N9&EF#0H@($)95$4@9D5!.R @(" @
  1018. XM(" @(" @(" @(" @(" O*B P("HO#0H@($)95$4@8V).86UE.R @(" @(" @
  1019. XM(" @(" @(" O*B!L96YG=&@@;V8@(BY,3TY'3D%-12(@/2 Y("HO#0H@(%53
  1020. XM2$]25"!C8E9A;'5E.R @(" @(" @(" @(" O*B!L96YG=&@@;V8@=F%L=64@
  1021. XM*R T("HO#0H@($)95$4@<WI.86UE6S$P73L@(" @(" @(" @(" O*B B+DQ/
  1022. XM3D=.04U%(B J+PT*("!54TA/4E0@96%4>7!E.R @(" @(" @(" @(" @+RH@
  1023. XM,'A&1D9$(&9O<B!L96YG=&@M<')E8V5D960@05-#24D@*B\-"B @55-(3U)4
  1024. XM(&5A4VEZ93L@(" @(" @(" @(" @("\J(&QE;F=T:"!O9B!V86QU92 J+PT*
  1025. XM("!"651%('-Z5F%L=65;0T-(34%84$%42%T[#0I]#0I&14%,4U0[#0H-"G1Y
  1026. XM<&5D968@<W1R=6-T#0I[#0H@(%5,3TY'(&-B3&ES=#L-"B-I9F1E9B!?7S,R
  1027. XM0DE47U\-"B @54Q/3D<@;TYE>'0[#0HC96YD:68-"B @0EE412!C8DYA;64[
  1028. XM#0H@($)95$4@<WI.86UE6S$P73L@(" @(" @(" @(" O*B B+DQ/3D=.04U%
  1029. XM(B J+PT*?0T*1T5!3%-4.PT*#0H-"F-H87(@*D=E=$QO;F=.86UE14$H8VAA
  1030. XM<B J;F%M92D-"GL-"B @14%/4"!E86]P.PT*("!'14%,4U0@9V5A;'-T.PT*
  1031. XM("!S=&%T:6,@1D5!3%-4(&9E86QS=#L-"@T*("!I9B H(%]O<VUO9&4@/3T@
  1032. XM1$]37TU/1$4@*0T*(" @(')E='5R;B!.54Q,.PT*#0H@(&5A;W N9G!'14%,
  1033. XM:7-T(#T@*%!'14%,25-4*2 F9V5A;'-T.PT*("!E86]P+F9P1D5!3&ES=" ]
  1034. XM("A01D5!3$E35"D@)F9E86QS=#L-"B @96%O<"YO17)R;W(@/2 P.PT*#0H@
  1035. XM('-T<F-P>2AG96%L<W0N<WI.86UE+" B+DQ/3D=.04U%(BD[#0H@(&=E86QS
  1036. XM="YC8DYA;64@(#T@*$)95$4I('-T<FQE;BAG96%L<W0N<WI.86UE*3L-"B-I
  1037. XM9F1E9B!?7S,R0DE47U\-"B @9V5A;'-T+F].97AT(" @/2 P.PT*(V5N9&EF
  1038. XM#0H-"B @9V5A;'-T+F-B3&ES=" @/2!S:7IE;V8H9V5A;'-T*3L-"B @9F5A
  1039. XM;'-T+F-B3&ES=" @/2!S:7IE;V8H9F5A;'-T*3L-"@T*("!I9B H($1O<U%U
  1040. XM97)Y4&%T:$EN9F\H;F%M92P@1DE,7U%515)914%31E)/34Q)4U0L#0H@(" @
  1041. XM(" @(" @(" @(" @(" @(" @(" H4$)95$4I("9E86]P+"!S:7IE;V8H96%O
  1042. XM<"DI("D-"B @("!R971U<FX@3E5,3#L-"@T*("!I9B H(&9E86QS="YC8E9A
  1043. XM;'5E(#X@-" F)B!F96%L<W0N96%4>7!E(#T](#!X1D9&1" I#0H@('L-"B @
  1044. XM("!F96%L<W0N<WI686QU95MF96%L<W0N96%3:7IE72 ](# [#0H@(" @<F5T
  1045. XM=7)N(&9E86QS="YS>E9A;'5E.PT*("!]#0H-"B @<F5T=7)N($Y53$P[#0I]
  1046. XM#0H-"@T*8VAA<B J1V5T3&]N9U!A=&A%02AC:&%R("IN86UE*0T*>PT*("!S
  1047. XM=&%T:6,@8VAA<B!N8G5F6T-#2$U!6%!!5$@@*R Q73L-"B @8VAA<B J8V]M
  1048. XM<"P@*FYE>'0L("IE82P@<V5P.PT*("!"3T],(&)&;W5N9" ]($9!3%-%.PT*
  1049. XM#0H@(&YB=69;,%T@/2 P.PT*("!N97AT(#T@;F%M93L-"@T*("!W:&EL92 H
  1050. XM("IN97AT("D-"B @>PT*(" @(&-O;7 @/2!N97AT.PT*#0H@(" @=VAI;&4@
  1051. XM*" J;F5X=" A/2 G7%PG("8F("IN97AT("$]("<O)R F)B J;F5X=" A/2 P
  1052. XM("D-"B @(" @(&YE>'0K*SL-"@T*(" @('-E<" ]("IN97AT.PT*(" @("IN
  1053. XM97AT(#T@,#L-"@T*(" @(&5A(#T@1V5T3&]N9TYA;65%02AN86UE*3L-"B @
  1054. XM("!S=')C870H;F)U9BP@96$@/R!E82 Z(&-O;7 I.PT*(" @(&)&;W5N9" ]
  1055. XM(&)&;W5N9"!\?" H96$@(3T@3E5,3"D[#0H-"B @(" J;F5X=" ]('-E<#L-
  1056. XM"@T*(" @(&EF("@@*FYE>'0@*0T*(" @('L-"B @(" @('-T<F-A="AN8G5F
  1057. XM+" B7%PB*3L-"B @(" @(&YE>'0K*SL-"B @("!]#0H@('T-"@T*("!R971U
  1058. XM<FX@;F)U9ELP72 F)B!B1F]U;F0@/R!N8G5F(#H@3E5,3#L-"GT-"@T*#0HO
  1059. XM*B!G96YE<F%L($5!(&-O9&4@*B\-"@T*='EP961E9B!S=')U8W0-"GL-"B @
  1060. XM55-(3U)4(&Y)1#L-"B @55-(3U)4(&Y3:7IE.PT*("!53$].1R!L4VEZ93L-
  1061. XM"GT-"D5!2$5!1$52+" J4$5!2$5!1$52.PT*#0H-"B-I9F1E9B!?7S,R0DE4
  1062. XM7U\-"@T*+RH@4&5R:&%P<R!D=64@=&\@8G5G<R!I;B!T:&4@8W5R<F5N="!/
  1063. XM4R\R(#(N,"!K97)N96PL('1H92!S=6-C97-S(&]R#0H@("!F86EL=7)E(&]F
  1064. XM('1H92!$;W-%;G5M071T<FEB=71E*"D@86YD($1O<U%U97)Y4&%T:$EN9F\H
  1065. XM*2!S>7-T96T@8V%L;',-"B @(&1E<&5N9',@;VX@=&AE(&%R96$@=VAE<F4@
  1066. XM=&AE(')E='5R;B!B=69F97)S(&%R92!A;&QO8V%T960N(%1H:7,-"B @(&1I
  1067. XM9F9E<G,@9F]R('1H92!V87)I;W5S(&-O;7!I;&5R<RP@9F]R('-O;64@86QL
  1068. XM;V-A*"D@=V]R:W,L(&9O<B!S;VUE#0H@("!M86QL;V,H*2!W;W)K<RP@9F]R
  1069. XM('-O;64L(&)O=&@@=V]R:RX@5V4G;&P@:&%V92!T;R!L:79E('=I=&@@=&AA
  1070. XM="X@*B\-"@T*+RH@5&AE('5S92!O9B!M86QL;V,H*2!I<R!N;W0@=F5R>2!C
  1071. XM;VYV96YI96YT+"!B96-A=7-E(&ET(')E<75I<F5S#0H@("!B86-K=')A8VMI
  1072. XM;F<@*&DN92X@9G)E92@I*2!A="!E<G)O<B!R971U<FYS+B!792!D;R!T:&%T
  1073. XM(&9O<B!S>7-T96T-"B @(&-A;&QS('1H870@;6%Y(&9A:6PL(&)U="!N;W0@
  1074. XM9F]R(&UA;&QO8R@I(&-A;&QS+"!B96-A=7-E('1H97D@87)E(%9%4ED-"B @
  1075. XM('5N;&EK96QY('1O(&9A:6PN($EF(&5V97(L('=E(&IU<W0@;&5A=F4@<V]M
  1076. XM92!M96UO<GD@86QL;V-A=&5D("XN+B J+PT*#0HC:68@9&5F:6YE9"A?7T=.
  1077. XM54-?7RD@?'P@9&5F:6YE9"A?7TE"34-?7RD-"B-D969I;F4@86QL;V,@86QL
  1078. XM;V-A#0HC96YD:68-"@T*(VEF9&5F(%]?5T%40T]-0U]?#0HC9&5F:6YE(&%L
  1079. XM;&]C(&UA;&QO8PT*(V1E9FEN92!?7T92145?7PT*(V5N9&EF#0H-"B-I9FYD
  1080. XM968@86QL;V,-"B-E<G)O<B!M96UO<GD@86QL;V-A=&EO;B!T>7!E("AA;&QO
  1081. XM8V$@;W(@;6%L;&]C*2!N;W0@<W!E8VEF:65D#0HC96YD:68-"@T*=F]I9"!'
  1082. XM971%07,H8VAA<B J<&%T:"P@8VAA<B J*F)U9G!T<BP@=6YS:6=N960@*G-I
  1083. XM>F4L#0H@(" @(" @(" @(" @(" @(" @(" @("!C:&%R("HJ8V)U9G!T<BP@
  1084. XM=6YS:6=N960@*F-S:7IE*0T*>PT*("!&24Q%4U1!5%53-"!F<SL-"B @4$1%
  1085. XM3D$R('!$14Y!+"!P1F]U;F0[#0H@($5!3U R(&5A;W [#0H@(%!'14$R('!'
  1086. XM14$[#0H@(%!'14$R3$E35"!P1T5!;&ES=#L-"B @4$9%03),25-4('!&14%L
  1087. XM:7-T.PT*("!014%(14%$15(@<$5!8FQO8VL[#0H@(%5,3TY'('5L071T<FEB
  1088. XM=71E<RP@=6Q-96UO<GE";&]C:SL-"B @54Q/3D<@;DQE;F=T:#L-"B @8VAA
  1089. XM<B!S>DYA;65;0T-(34%84$%42%T[#0H-"B @*G-I>F4@/2 J8W-I>F4@/2 P
  1090. XM.PT*#0H@(&EF("@@7V]S;6]D92 ]/2!$3U-?34]$12 I#0H@(" @<F5T=7)N
  1091. XM.PT*#0H@('-T<F-P>2AS>DYA;64L('!A=&@I.PT*("!N3&5N9W1H(#T@<W1R
  1092. XM;&5N*'-Z3F%M92D[#0H@(&EF("@@<WI.86UE6VY,96YG=&@@+2 Q72 ]/2 G
  1093. XM+R<@*0T*(" @('-Z3F%M95MN3&5N9W1H("T@,5T@/2 P.PT*#0H@(&EF("@@
  1094. XM1&]S475E<GE0871H26YF;RAS>DYA;64L($9)3%]15452645!4TE:12P@*%!"
  1095. XM651%*2 F9G,L('-I>F5O9BAF<RDI#0H@(" @?'P@9G,N8V),:7-T(#P](#(@
  1096. XM*B!S:7IE;V8H54Q/3D<I#0H@(" @?'P@*'!$14Y!(#T@86QL;V,H*'-I>F5?
  1097. XM="D@9G,N8V),:7-T*2D@/3T@3E5,3" I#0H@(" @<F5T=7)N.PT*#0H@('5L
  1098. XM071T<FEB=71E<R ]("TQ.PT*#0H@(&EF("@@1&]S16YU;4%T=')I8G5T92A%
  1099. XM3E5-14%?4D5&5%E015]0051(+"!S>DYA;64L(#$L('!$14Y!+"!F<RYC8DQI
  1100. XM<W0L#0H@(" @(" @(" @(" @(" @(" @(" @(" F=6Q!='1R:6)U=&5S+"!%
  1101. XM3E5-14%?3$5614Q?3D]?5D%,544I#0H@(" @?'P@=6Q!='1R:6)U=&5S(#T]
  1102. XM(# -"B @("!\?" H<$=%06QI<W0@/2!A;&QO8R@H<VEZ95]T*2!F<RYC8DQI
  1103. XM<W0I*2 ]/2!.54Q,("D-"B @>PT*(VEF9&5F(%]?1E)%15]?#0H@(" @9G)E
  1104. XM92AP1$5.02D[#0HC96YD:68-"B @("!R971U<FX[#0H@('T-"@T*("!P1T5!
  1105. XM(#T@<$=%06QI<W0@+3X@;&ES=#L-"B @<$9O=6YD(#T@<$1%3D$[#0H-"B @
  1106. XM=VAI;&4@*"!U;$%T=')I8G5T97,M+2 I#0H@('L-"B @("!I9B H("$H<W1R
  1107. XM8VUP*'!&;W5N9" M/B!S>DYA;64L("(N3$].1TY!344B*2 ]/2 P("8F('5S
  1108. XM95]L;VYG;F%M95]E82D@*0T*(" @('L-"B @(" @('!'14$@+3X@8V).86UE
  1109. XM(#T@<$9O=6YD("T^(&-B3F%M93L-"B @(" @('-T<F-P>2AP1T5!("T^('-Z
  1110. XM3F%M92P@<$9O=6YD("T^('-Z3F%M92D[#0H-"B @(" @(&Y,96YG=&@@/2!S
  1111. XM:7IE;V8H1T5!,BD@*R!S=')L96XH<$=%02 M/B!S>DYA;64I.PT*(" @(" @
  1112. XM;DQE;F=T:" ]("@H;DQE;F=T:" M(#$I("\@<VEZ96]F*%5,3TY'*2 K(#$I
  1113. XM("H@<VEZ96]F*%5,3TY'*3L-"@T*(" @(" @<$=%02 M/B!O3F5X=$5N=')Y
  1114. XM3V9F<V5T(#T@=6Q!='1R:6)U=&5S(#\@;DQE;F=T:" Z(# [#0H@(" @("!P
  1115. XM1T5!(" @/2 H4$=%03(I(" H*%!#2"D@<$=%02 K(&Y,96YG=&@I.PT*(" @
  1116. XM('T-"@T*(" @('!&;W5N9" ]("A01$5.03(I("@H4$-(*2!P1F]U;F0@*R!P
  1117. XM1F]U;F0@+3X@;TYE>'1%;G1R>4]F9G-E="D[#0H@('T-"@T*("!I9B H('!'
  1118. XM14$@/3T@<$=%06QI<W0@+3X@;&ES=" I("\J(&YO(&%T=')I8G5T97,@=&\@
  1119. XM<V%V92 J+PT*("![#0HC:69D968@7U]&4D5%7U\-"B @("!F<F5E*'!$14Y!
  1120. XM*3L-"B @("!F<F5E*'!'14%L:7-T*3L-"B-E;F1I9@T*(" @(')E='5R;CL-
  1121. XM"B @?0T*#0H@('!'14%L:7-T("T^(&-B3&ES=" ]("A00T@I('!'14$@+2 H
  1122. XM4$-(*2!P1T5!;&ES=#L-"@T*("!P1D5!;&ES=" ]("A05D])1"D@<$1%3D$[
  1123. XM(" O*B!R975S92!B=69F97(@*B\-"B @<$9%06QI<W0@+3X@8V),:7-T(#T@
  1124. XM9G,N8V),:7-T.PT*#0H@(&5A;W N9G!'14$R3&ES=" ]('!'14%L:7-T.PT*
  1125. XM("!E86]P+F9P1D5!,DQI<W0@/2!P1D5!;&ES=#L-"B @96%O<"YO17)R;W(@
  1126. XM/2 P.PT*#0H@(&EF("@@1&]S475E<GE0871H26YF;RAS>DYA;64L($9)3%]1
  1127. XM5452645!4T923TU,25-4+ T*(" @(" @(" @(" @(" @(" @(" @(" @*%!"
  1128. XM651%*2 F96%O<"P@<VEZ96]F*&5A;W I*2 I#0H@('L-"B-I9F1E9B!?7T92
  1129. XM145?7PT*(" @(&9R964H<$1%3D$I.PT*(" @(&9R964H<$=%06QI<W0I.PT*
  1130. XM(V5N9&EF#0H@(" @<F5T=7)N.PT*("!]#0H-"B @+RH@5&AE(&UA>&EM=6T@
  1131. XM8V]M<')E<W-E9"!S:7IE(&ES("AI;B!C87-E(&]F(%-43U)%('1Y<&4I('1H
  1132. XM90T*(" @("!U;F-O;7!R97-S960@<VEZ92!P;'5S('1H92!S:7IE(&]F('1H
  1133. XM92!C;VUP<F5S<VEO;B!T>7!E(&9I96QD#0H@(" @('!L=7,@=&AE('-I>F4@
  1134. XM;V8@=&AE($-20R!F:65L9"X@*B\-"@T*("!U;$%T=')I8G5T97,@/2!P1D5!
  1135. XM;&ES=" M/B!C8DQI<W0[#0H@('5L365M;W)Y0FQO8VL@/2!U;$%T=')I8G5T
  1136. XM97,@*R!S:7IE;V8H55-(3U)4*2 K('-I>F5O9BA53$].1RD[#0H@('!%06)L
  1137. XM;V-K(#T@*%!%04A%041%4BD@;6%L;&]C*'-I>F5O9BA%04A%041%4BD@*R!U
  1138. XM;$UE;6]R>4)L;V-K*3L-"@T*("!I9B H('!%06)L;V-K(#T]($Y53$P@*0T*
  1139. XM(" @(')E='5R;CL-"@T*(" J8G5F<'1R(#T@*&-H87(@*BD@<$5!8FQO8VL[
  1140. XM#0H@("IS:7IE(#T@<VEZ96]F*$5!2$5!1$52*3L-"@T*("!P14%B;&]C:R M
  1141. XM/B!N240@/2!%04E$.PT*("!P14%B;&]C:R M/B!N4VEZ92 ]('-I>F5O9BAP
  1142. XM14%B;&]C:R M/B!L4VEZ92D[#0H@('!%06)L;V-K("T^(&Q3:7IE(#T@=6Q!
  1143. XM='1R:6)U=&5S.R O*B!U;F-O;7!R97-S960@<VEZ92 J+PT*#0H@(&Y,96YG
  1144. XM=&@@/2!M96UC;VUP<F5S<R@H8VAA<B J*2 H<$5!8FQO8VL@*R Q*2P@=6Q-
  1145. XM96UO<GE";&]C:RP-"B @(" @(" @(" @(" @(" @(" @(" @("AC:&%R("HI
  1146. XM('!&14%L:7-T+"!U;$%T=')I8G5T97,I.PT*(" J<VEZ92 K/2!N3&5N9W1H
  1147. XM.PT*("!P14%B;&]C:R M/B!N4VEZ92 K/2!N3&5N9W1H.PT*#0H@(&EF("@@
  1148. XM*'!%06)L;V-K(#T@*%!%04A%041%4BD@;6%L;&]C*'-I>F5O9BA%04A%041%
  1149. XM4BDI*2 ]/2!.54Q,("D-"B @("!R971U<FX[#0H-"B @*F-B=69P='(@/2 H
  1150. XM8VAA<B J*2!P14%B;&]C:SL-"B @*F-S:7IE(#T@<VEZ96]F*$5!2$5!1$52
  1151. XM*3L-"@T*("!P14%B;&]C:R M/B!N240@/2!%04E$.PT*("!P14%B;&]C:R M
  1152. XM/B!N4VEZ92 ]('-I>F5O9BAP14%B;&]C:R M/B!L4VEZ92D[#0H@('!%06)L
  1153. XM;V-K("T^(&Q3:7IE(#T@=6Q!='1R:6)U=&5S.PT*#0H@(&EF("@@;F]I<WD@
  1154. XM*0T*(" @('!R:6YT9B@B("@E;&0@8GET97,@14$G<RDB+"!U;$%T=')I8G5T
  1155. XM97,I.PT*?0T*#0HC96QS92 O*B A7U\S,D))5%]?("HO#0H-"G1Y<&5D968@
  1156. XM<W1R=6-T#0I[#0H@(%5,3TY'(&].97AT16YT<GE/9F9S970[#0H@($)95$4@
  1157. XM9D5!.PT*("!"651%(&-B3F%M93L-"B @55-(3U)4(&-B5F%L=64[#0H@($-(
  1158. XM05(@<WI.86UE6S%=.PT*?0T*1D5!,BP@*E!&14$R.PT*#0IT>7!E9&5F('-T
  1159. XM<G5C= T*>PT*("!53$].1R!C8DQI<W0[#0H@($9%03(@;&ES=%LQ73L-"GT-
  1160. XM"D9%03),25-4+" J4$9%03),25-4.PT*#0IV;VED($=E=$5!<RAC:&%R("IP
  1161. XM871H+"!C:&%R("HJ8G5F<'1R+"!U;G-I9VYE9" J<VEZ92P-"B @(" @(" @
  1162. XM(" @(" @(" @(" @(" @(&-H87(@*BIC8G5F<'1R+"!U;G-I9VYE9" J8W-I
  1163. XM>F4I#0I[#0H@($9)3$535$%455,R(&9S.PT*("!01$5.03$@<$1%3D$L('!&
  1164. XM;W5N9#L-"B @14%/4"!E86]P.PT*("!01T5!3$E35"!P1T5!;&ES=#L-"B @
  1165. XM4$=%02!P1T5!.PT*("!01D5!3$E35"!P1D5!;&ES=#L-"B @4$9%02!P1D5!
  1166. XM.PT*("!01D5!,DQ)4U0@<$9%03)L:7-T.PT*("!01D5!,B!P1D5!,CL-"B @
  1167. XM14%(14%$15(@*G!%06)L;V-K.PT*("!53$].1R!U;$%T=')I8G5T97,[#0H@
  1168. XM(%532$]25"!N3&5N9W1H+"!N36%X4VEZ93L-"B @8VAA<B!S>DYA;65;0T-(
  1169. XM34%84$%42%T[#0H-"B @*G-I>F4@/2 J8W-I>F4@/2 P.PT*#0H@(&EF("@@
  1170. XM7V]S;6]D92 ]/2!$3U-?34]$12 I#0H@(" @<F5T=7)N.PT*#0H@('-T<F-P
  1171. XM>2AS>DYA;64L('!A=&@I.PT*("!N3&5N9W1H(#T@<W1R;&5N*'-Z3F%M92D[
  1172. XM#0H@(&EF("@@<WI.86UE6VY,96YG=&@@+2 Q72 ]/2 G+R<@*0T*(" @('-Z
  1173. XM3F%M95MN3&5N9W1H("T@,5T@/2 P.PT*#0H@(&EF("@@1&]S475E<GE0871H
  1174. XM26YF;RAS>DYA;64L($9)3%]15452645!4TE:12P@*%!"651%*2 F9G,L('-I
  1175. XM>F5O9BAF<RDI#0H@(" @?'P@9G,N8V),:7-T(#P](#(@*B!S:7IE;V8H54Q/
  1176. XM3D<I("D-"B @("!R971U<FX[#0H-"B @=6Q!='1R:6)U=&5S(#T@+3$[#0H@
  1177. XM(&Y-87A3:7IE(#T@*%532$]25"D@;6EN*&9S+F-B3&ES=" J(#(L(#8U-3(P
  1178. XM3"D[#0H-"B @:68@*" H<$1%3D$@/2!M86QL;V,H*'-I>F5?="D@;DUA>%-I
  1179. XM>F4I*2 ]/2!.54Q,("D-"B @("!R971U<FX[#0H-"B @:68@*"!$;W-%;G5M
  1180. XM071T<FEB=71E*$5.54U%05]2149465!%7U!!5$@L('-Z3F%M92P@,2P@<$1%
  1181. XM3D$L(&9S+F-B3&ES="P-"B @(" @(" @(" @(" @(" @(" @(" @("9U;$%T
  1182. XM=')I8G5T97,L($5.54U%05],159%3%].3U]604Q512D-"B @("!\?"!U;$%T
  1183. XM=')I8G5T97,@/3T@, T*(" @('Q\("AP1T5!;&ES=" ](&UA;&QO8RAN36%X
  1184. XM4VEZ92DI(#T]($Y53$P@*0T*("![#0H@(" @9G)E92AP1$5.02D[#0H@(" @
  1185. XM<F5T=7)N.PT*("!]#0H-"B @<$=%02 ]('!'14%L:7-T("T^(&QI<W0[#0H@
  1186. XM('!&;W5N9" ]('!$14Y!.PT*#0H@('=H:6QE("@@=6Q!='1R:6)U=&5S+2T@
  1187. XM*0T*("![#0H@(" @;DQE;F=T:" ]('-T<FQE;BAP1F]U;F0@+3X@<WI.86UE
  1188. XM*3L-"@T*(" @(&EF("@@(2AS=')C;7 H<$9O=6YD("T^('-Z3F%M92P@(BY,
  1189. XM3TY'3D%-12(I(#T](# @)B8@=7-E7VQO;F=N86UE7V5A*2 I#0H@(" @>PT*
  1190. XM(" @(" @<$=%02 M/B!C8DYA;64@/2!P1F]U;F0@+3X@8V).86UE.PT*(" @
  1191. XM(" @<W1R8W!Y*'!'14$@+3X@<WI.86UE+"!P1F]U;F0@+3X@<WI.86UE*3L-
  1192. XM"@T*(" @(" @<$=%02 ]("A01T5!*2 H*%!#2"D@*'!'14$K*RD@*R!N3&5N
  1193. XM9W1H*3L-"B @("!]#0H-"B @("!P1F]U;F0@/2 H4$1%3D$Q*2 H*%!#2"D@
  1194. XM*'!&;W5N9"LK*2 K(&Y,96YG=&@I.PT*("!]#0H-"B @:68@*"!P1T5!(#T]
  1195. XM('!'14%L:7-T("T^(&QI<W0@*0T*("![#0H@(" @9G)E92AP1$5.02D[#0H@
  1196. XM(" @9G)E92AP1T5!;&ES="D[#0H@(" @<F5T=7)N.PT*("!]#0H-"B @<$=%
  1197. XM06QI<W0@+3X@8V),:7-T(#T@*%!#2"D@<$=%02 M("A00T@I('!'14%L:7-T
  1198. XM.PT*#0H@('!&14%L:7-T(#T@*%!&14%,25-4*2!P1$5.03L@+RH@<F5U<V4@
  1199. XM8G5F9F5R("HO#0H@('!&14%L:7-T("T^(&-B3&ES=" ](&9S+F-B3&ES=#L-
  1200. XM"B @<$9%02 ]('!&14%L:7-T("T^(&QI<W0[#0H-"B @96%O<"YF<$=%04QI
  1201. XM<W0@/2!P1T5!;&ES=#L-"B @96%O<"YF<$9%04QI<W0@/2!P1D5!;&ES=#L-
  1202. XM"B @96%O<"YO17)R;W(@/2 P.PT*#0H@(&EF("@@1&]S475E<GE0871H26YF
  1203. XM;RAS>DYA;64L($9)3%]15452645!4T923TU,25-4+ T*(" @(" @(" @(" @
  1204. XM(" @(" @(" H4$)95$4I("9E86]P+"!S:7IE;V8H96%O<"DI("D-"B @>PT*
  1205. XM(" @(&9R964H<$1%3D$I.PT*(" @(&9R964H<$=%06QI<W0I.PT*(" @(')E
  1206. XM='5R;CL-"B @?0T*#0H@("\J(&YO=R!C;VYV97)T(&EN=&\@;F5W($]3+S(@
  1207. XM,BXP(#,R+6)I="!F;W)M870@*B\-"@T*("!P1D5!,FQI<W0@/2 H4$9%03),
  1208. XM25-4*2!P1T5!;&ES=#L@("\J(')E=7-E(&)U9F9E<B J+PT*("!P1D5!,B ]
  1209. XM('!&14$R;&ES=" M/B!L:7-T.PT*#0H@('=H:6QE("@@*%!#2"D@<$9%02 M
  1210. XM("A00T@I('!&14%L:7-T(#P@<$9%06QI<W0@+3X@8V),:7-T("D-"B @>PT*
  1211. XM(" @(&Y,96YG=&@@/2!S:7IE;V8H1D5!*2 K('!&14$@+3X@8V).86UE("L@
  1212. XM,2 K('!&14$@+3X@8V)686QU93L-"B @("!M96UC<'DH*%!#2"D@<$9%03(@
  1213. XM*R!S:7IE;V8H<$9%03(@+3X@;TYE>'1%;G1R>4]F9G-E="DL('!&14$L(&Y,
  1214. XM96YG=&@I.PT*(" @(&UE;7-E="@H4$-(*2!P1D5!,B K('-I>F5O9BAP1D5!
  1215. XM,B M/B!O3F5X=$5N=')Y3V9F<V5T*2 K(&Y,96YG=&@L(# L(#,I.PT*(" @
  1216. XM('!&14$@/2 H4$9%02D@*"A00T@I('!&14$@*R!N3&5N9W1H*3L-"@T*(" @
  1217. XM(&Y,96YG=&@@/2!S:7IE;V8H1D5!,BD@*R!P1D5!,B M/B!C8DYA;64@*R Q
  1218. XM("L@<$9%03(@+3X@8V)686QU93L-"B @("!N3&5N9W1H(#T@*"AN3&5N9W1H
  1219. XM("T@,2D@+R!S:7IE;V8H54Q/3D<I("L@,2D@*B!S:7IE;V8H54Q/3D<I.PT*
  1220. XM(" @("\J(')O=6YD960@=7 @=&\@-"UB>71E(&)O=6YD87)Y("HO#0H@(" @
  1221. XM<$9%03(@+3X@;TYE>'1%;G1R>4]F9G-E=" ]#0H@(" @(" H*%!#2"D@<$9%
  1222. XM02 M("A00T@I('!&14%L:7-T(#P@<$9%06QI<W0@+3X@8V),:7-T*2 _(&Y,
  1223. XM96YG=&@@.B P.PT*(" @('!&14$R(#T@*%!&14$R*2 H*%!#2"D@<$9%03(@
  1224. XM*R!N3&5N9W1H*3L-"B @?0T*#0H@('!&14$R;&ES=" M/B!C8DQI<W0@/2 H
  1225. XM4$-(*2!P1D5!,B M("A00T@I('!&14$R;&ES=#L-"B @=6Q!='1R:6)U=&5S
  1226. XM(#T@<$9%03)L:7-T("T^(&-B3&ES=#L-"@T*("!P14%B;&]C:R ]("A014%(
  1227. XM14%$15(I('!$14Y!.R O*B!R975S92!B=69F97(@*B\-"@T*(" J8G5F<'1R
  1228. XM(#T@*&-H87(@*BD@<$5!8FQO8VL[#0H@("IS:7IE(#T@<VEZ96]F*$5!2$5!
  1229. XM1$52*3L-"@T*("!P14%B;&]C:R M/B!N240@/2!%04E$.PT*("!P14%B;&]C
  1230. XM:R M/B!N4VEZ92 ]('-I>F5O9BAP14%B;&]C:R M/B!L4VEZ92D[#0H@('!%
  1231. XM06)L;V-K("T^(&Q3:7IE(#T@=6Q!='1R:6)U=&5S.R O*B!U;F-O;7!R97-S
  1232. XM960@<VEZ92 J+PT*#0H@(&Y,96YG=&@@/2 H55-(3U)4*2!M96UC;VUP<F5S
  1233. XM<R@H8VAA<B J*2 H<$5!8FQO8VL@*R Q*2P-"B @("!N36%X4VEZ92 M('-I
  1234. XM>F5O9BA%04A%041%4BDL("AC:&%R("HI('!&14$R;&ES="P@=6Q!='1R:6)U
  1235. XM=&5S*3L-"@T*(" J<VEZ92 K/2!N3&5N9W1H.PT*("!P14%B;&]C:R M/B!N
  1236. XM4VEZ92 K/2!N3&5N9W1H.PT*#0H@('!%06)L;V-K(#T@*%!%04A%041%4BD@
  1237. XM<$=%06QI<W0[#0H-"B @*F-B=69P='(@/2 H8VAA<B J*2!P14%B;&]C:SL-
  1238. XM"B @*F-S:7IE(#T@<VEZ96]F*$5!2$5!1$52*3L-"@T*("!P14%B;&]C:R M
  1239. XM/B!N240@/2!%04E$.PT*("!P14%B;&]C:R M/B!N4VEZ92 ]('-I>F5O9BAP
  1240. XM14%B;&]C:R M/B!L4VEZ92D[#0H@('!%06)L;V-K("T^(&Q3:7IE(#T@=6Q!
  1241. XM='1R:6)U=&5S.PT*#0H@(&EF("@@;F]I<WD@*0T*(" @('!R:6YT9B@B("@E
  1242. XM;&0@8GET97,@14$G<RDB+"!U;$%T=')I8G5T97,I.PT*?0T*#0HC96YD:68@
  1243. XM+RH@7U\S,D))5%]?("HO#0H-"@T*(V5N9&EF("\J(%5424P@*B\-"@T*#0HO
  1244. XM*B!);FET:6%L:7IE('1H92!T86)L92!O9B!U<'!E<F-A<V4@8VAA<F%C=&5R
  1245. XM<R!I;F-L=61I;F<@:&%N9&QI;F<@;V8-"B @(&-O=6YT<GD@9&5P96YD96YT
  1246. XM(&-H87)A8W1E<G,N("HO#0H-"G9O:60@:6YI=%]U<'!E<B@I#0I[#0H@($-/
  1247. XM54Y44EE#3T1%(&-C.PT*("!U;G-I9VYE9"!N0VYT+"!N53L-"@T*("!F;W(@
  1248. XM*"!N0VYT(#T@,#L@;D-N=" \('-I>F5O9BAU<'!E<BD[(&Y#;G0K*R I#0H@
  1249. XM(" @=7!P97);;D-N=%T@/2!L;W=E<EMN0VYT72 ]("AU;G-I9VYE9"!C:&%R
  1250. XM*2!N0VYT.PT*#0H@(&-C+F-O=6YT<GD@/2!C8RYC;V1E<&%G92 ](# [#0H@
  1251. XM($1O<TUA<$-A<V4H<VEZ96]F*'5P<&5R*2P@)F-C+" H4$-(05(I('5P<&5R
  1252. XM*3L-"@T*("!F;W(@*"!N0VYT(#T@,#L@;D-N=" \(#(U-CL@;D-N="LK("D-
  1253. XM"B @>PT*(" @(&Y5(#T@=7!P97);;D-N=%T[#0H@(" @:68@*&Y5("$](&Y#
  1254. XM;G0@)B8@;&]W97);;E5=(#T]("AU;G-I9VYE9"!C:&%R*2!N52D-"B @(" @
  1255. XM(&QO=V5R6VY572 ]("AU;G-I9VYE9"!C:&%R*2!N0VYT.PT*("!]#0H-"B @
  1256. XM9F]R("@@;D-N=" ]("=!)SL@;D-N=" \/2 G6B<[(&Y#;G0K*R I#0H@(" @
  1257. XM;&]W97);;D-N=%T@/2 H=6YS:6=N960@8VAA<BD@*&Y#;G0@+2 G02<@*R G
  1258. XM82<I.PT*?0T*#0H-"F-H87(@*E-T<FEN9TQO=V5R*&-H87(@*G-Z07)G*0T*
  1259. XM>PT*("!U;G-I9VYE9"!C:&%R("IS>E!T<CL-"B @9F]R("@@<WI0='(@/2!S
  1260. XM>D%R9SL@*G-Z4'1R.R!S>E!T<BLK("D-"B @(" J<WI0='(@/2!L;W=E<ELJ
  1261. X=<WI0=')=.PT*("!R971U<FX@<WI!<F<[#0I]#0HJ
  1262. Xend
  1263. END_OF_FILE
  1264.  if test 28901 -ne `wc -c <'os2/os2zip.c.UU'`; then
  1265.     echo shar: \"'os2/os2zip.c.UU'\" unpacked with wrong size!
  1266.   else
  1267.     echo shar: Uudecoding \"'os2/os2zip.c'\" \(20954 characters\)
  1268.     cat os2/os2zip.c.UU | uudecode
  1269.     if test 20954 -ne `wc -c <'os2/os2zip.c'`; then
  1270.       echo shar: \"'os2/os2zip.c'\" uudecoded with wrong size!
  1271.     else
  1272.       rm os2/os2zip.c.UU
  1273.     fi
  1274.   fi
  1275.   # end of 'os2/os2zip.c.UU'
  1276. fi
  1277. echo shar: End of archive 5 \(of 11\).
  1278. cp /dev/null ark5isdone
  1279. MISSING=""
  1280. for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
  1281.     if test ! -f ark${I}isdone ; then
  1282.     MISSING="${MISSING} ${I}"
  1283.     fi
  1284. done
  1285. if test "${MISSING}" = "" ; then
  1286.     echo You have unpacked all 11 archives.
  1287.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1288. else
  1289.     echo You still must unpack the following archives:
  1290.     echo "        " ${MISSING}
  1291. fi
  1292. exit 0
  1293. exit 0 # Just in case...
  1294.