home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume29 / jpeg / part10 < prev    next >
Encoding:
Text File  |  1992-03-27  |  53.8 KB  |  1,272 lines

  1. Newsgroups: comp.sources.misc
  2. From: jpeg-info@uunet.uu.net (Independent JPEG Group)
  3. Subject:  v29i010:  jpeg - JPEG image compression, Part10/18
  4. Message-ID: <1992Mar25.145151.363@sparky.imd.sterling.com>
  5. X-Md4-Signature: dae7e79221d13aa43d1a03deebe87e45
  6. Date: Wed, 25 Mar 1992 14:51:51 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: jpeg-info@uunet.uu.net (Independent JPEG Group)
  10. Posting-number: Volume 29, Issue 10
  11. Archive-name: jpeg/part10
  12. Environment: UNIX, VMS, MS-DOS, Mac, Amiga, Cray
  13.  
  14. #! /bin/sh
  15. # into a shell via "sh file" or similar.  To overwrite existing files,
  16. # type "sh file -c".
  17. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  18. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  19. # Contents:  jbsmooth.c jcpipe.c testimg.gif.u
  20. # Wrapped by kent@sparky on Mon Mar 23 16:02:48 1992
  21. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  22. echo If this archive is complete, you will see the following message:
  23. echo '          "shar: End of archive 10 (of 18)."'
  24. if test -f 'jbsmooth.c' -a "${1}" != "-c" ; then 
  25.   echo shar: Will not clobber existing file \"'jbsmooth.c'\"
  26. else
  27.   echo shar: Extracting \"'jbsmooth.c'\" \(3258 characters\)
  28.   sed "s/^X//" >'jbsmooth.c' <<'END_OF_FILE'
  29. X/*
  30. X * jbsmooth.c
  31. X *
  32. X * Copyright (C) 1991, 1992, Thomas G. Lane.
  33. X * This file is part of the Independent JPEG Group's software.
  34. X * For conditions of distribution and use, see the accompanying README file.
  35. X *
  36. X * This file contains cross-block smoothing routines.
  37. X * These routines are invoked via the smooth_coefficients method.
  38. X */
  39. X
  40. X#include "jinclude.h"
  41. X
  42. X#ifdef BLOCK_SMOOTHING_SUPPORTED
  43. X
  44. X
  45. X/*
  46. X * Cross-block coefficient smoothing.
  47. X */
  48. X
  49. XMETHODDEF void
  50. Xsmooth_coefficients (decompress_info_ptr cinfo,
  51. X             jpeg_component_info *compptr,
  52. X             JBLOCKROW above,
  53. X             JBLOCKROW currow,
  54. X             JBLOCKROW below,
  55. X             JBLOCKROW output)
  56. X{
  57. X  QUANT_TBL_PTR Qptr = cinfo->quant_tbl_ptrs[compptr->quant_tbl_no];
  58. X  long blocks_in_row = compptr->subsampled_width / DCTSIZE;
  59. X  long col;
  60. X
  61. X  /* First, copy the block row as-is.
  62. X   * This takes care of the first & last blocks in the row, the top/bottom
  63. X   * special cases, and the higher-order coefficients in each block.
  64. X   */
  65. X  jcopy_block_row(currow, output, blocks_in_row);
  66. X
  67. X  /* Now apply the smoothing calculation, but not to any blocks on the
  68. X   * edges of the image.
  69. X   */
  70. X
  71. X  if (above != NULL && below != NULL) {
  72. X    for (col = 1; col < blocks_in_row-1; col++) {
  73. X
  74. X      /* See section K.8 of the JPEG standard.
  75. X       *
  76. X       * As I understand it, this produces approximations
  77. X       * for the low frequency AC components, based on the
  78. X       * DC values of the block and its eight neighboring blocks.
  79. X       * (Thus it can't be used for blocks on the image edges.)
  80. X       */
  81. X
  82. X      /* The layout of these variables corresponds to text and figure in K.8 */
  83. X      
  84. X      JCOEF DC1, DC2, DC3;
  85. X      JCOEF DC4, DC5, DC6;
  86. X      JCOEF DC7, DC8, DC9;
  87. X      
  88. X      long       AC01, AC02;
  89. X      long AC10, AC11;
  90. X      long AC20;
  91. X      
  92. X      DC1 = above [col-1][0];
  93. X      DC2 = above [col  ][0];
  94. X      DC3 = above [col+1][0];
  95. X      DC4 = currow[col-1][0];
  96. X      DC5 = currow[col  ][0];
  97. X      DC6 = currow[col+1][0];
  98. X      DC7 = below [col-1][0];
  99. X      DC8 = below [col  ][0];
  100. X      DC9 = below [col+1][0];
  101. X      
  102. X#define DIVIDE_256(x)    x = ( (x) < 0 ? -((128-(x))/256) : ((x)+128)/256 )
  103. X      
  104. X      AC01 = (36 * (DC4 - DC6));
  105. X      DIVIDE_256(AC01);
  106. X      AC10 = (36 * (DC2 - DC8));
  107. X      DIVIDE_256(AC10);
  108. X      AC20 = (9 * (DC2 + DC8 - 2*DC5));
  109. X      DIVIDE_256(AC20);
  110. X      AC11 = (5 * ((DC1 - DC3) - (DC7 - DC9)));
  111. X      DIVIDE_256(AC11);
  112. X      AC02 = (9 * (DC4 + DC6 - 2*DC5));
  113. X      DIVIDE_256(AC02);
  114. X      
  115. X      /* I think that this checks to see if the quantisation
  116. X       * on the transmitting side would have produced this
  117. X       * answer. If so, then we use our (hopefully better)
  118. X       * estimate.
  119. X       */
  120. X
  121. X#define ABS(x)    ((x) < 0 ? -(x) : (x))
  122. X
  123. X#define COND_ASSIGN(_ac,_n,_z)   if ((ABS(output[col][_n] - (_ac))<<1) <= Qptr[_z]) output[col][_n] = (JCOEF) (_ac)
  124. X
  125. X      COND_ASSIGN(AC01,  1, 1);
  126. X      COND_ASSIGN(AC02,  2, 5);
  127. X      COND_ASSIGN(AC10,  8, 2);
  128. X      COND_ASSIGN(AC11,  9, 4);
  129. X      COND_ASSIGN(AC20, 16, 3);
  130. X    }
  131. X  }
  132. X}
  133. X
  134. X
  135. X/*
  136. X * The method selection routine for cross-block smoothing.
  137. X */
  138. X
  139. XGLOBAL void
  140. Xjselbsmooth (decompress_info_ptr cinfo)
  141. X{
  142. X  /* just one implementation for now */
  143. X  cinfo->methods->smooth_coefficients = smooth_coefficients;
  144. X}
  145. X
  146. X#endif /* BLOCK_SMOOTHING_SUPPORTED */
  147. END_OF_FILE
  148.   if test 3258 -ne `wc -c <'jbsmooth.c'`; then
  149.     echo shar: \"'jbsmooth.c'\" unpacked with wrong size!
  150.   fi
  151.   # end of 'jbsmooth.c'
  152. fi
  153. if test -f 'jcpipe.c' -a "${1}" != "-c" ; then 
  154.   echo shar: Will not clobber existing file \"'jcpipe.c'\"
  155. else
  156.   echo shar: Extracting \"'jcpipe.c'\" \(26133 characters\)
  157.   sed "s/^X//" >'jcpipe.c' <<'END_OF_FILE'
  158. X/*
  159. X * jcpipe.c
  160. X *
  161. X * Copyright (C) 1991, 1992, Thomas G. Lane.
  162. X * This file is part of the Independent JPEG Group's software.
  163. X * For conditions of distribution and use, see the accompanying README file.
  164. X *
  165. X * This file contains compression pipeline controllers.
  166. X * These routines are invoked via the c_pipeline_controller method.
  167. X *
  168. X * There are four basic pipeline controllers, one for each combination of:
  169. X *    single-scan JPEG file (single component or fully interleaved)
  170. X *  vs. multiple-scan JPEG file (noninterleaved or partially interleaved).
  171. X *
  172. X *    optimization of entropy encoding parameters
  173. X *  vs. usage of default encoding parameters.
  174. X *
  175. X * Note that these conditions determine the needs for "big" arrays:
  176. X * multiple scans imply a big array for splitting the color components;
  177. X * entropy encoding optimization needs a big array for the MCU data.
  178. X *
  179. X * All but the simplest controller (single-scan, no optimization) can be
  180. X * compiled out through configuration options, if you need to make a minimal
  181. X * implementation.
  182. X */
  183. X
  184. X#include "jinclude.h"
  185. X
  186. X
  187. X/*
  188. X * About the data structures:
  189. X *
  190. X * The processing chunk size for subsampling is referred to in this file as
  191. X * a "row group": a row group is defined as Vk (v_samp_factor) sample rows of
  192. X * any component after subsampling, or Vmax (max_v_samp_factor) unsubsampled
  193. X * rows.  In an interleaved scan each MCU row contains exactly DCTSIZE row
  194. X * groups of each component in the scan.  In a noninterleaved scan an MCU row
  195. X * is one row of blocks, which might not be an integral number of row groups;
  196. X * for convenience we use a buffer of the same size as in interleaved scans,
  197. X * and process Vk MCU rows in each burst of subsampling.
  198. X * To provide context for the subsampling step, we have to retain the last
  199. X * two row groups of the previous MCU row while reading in the next MCU row
  200. X * (or set of Vk MCU rows).  To do this without copying data about, we create
  201. X * a rather strange data structure.  Exactly DCTSIZE+2 row groups of samples
  202. X * are allocated, but we create two different sets of pointers to this array.
  203. X * The second set swaps the last two pairs of row groups.  By working
  204. X * alternately with the two sets of pointers, we can access the data in the
  205. X * desired order.
  206. X */
  207. X
  208. X
  209. X
  210. X/*
  211. X * Utility routines: common code for pipeline controllers
  212. X */
  213. X
  214. XLOCAL void
  215. Xinterleaved_scan_setup (compress_info_ptr cinfo)
  216. X/* Compute all derived info for an interleaved (multi-component) scan */
  217. X/* On entry, cinfo->comps_in_scan and cinfo->cur_comp_info[] are set up */
  218. X{
  219. X  short ci, mcublks;
  220. X  jpeg_component_info *compptr;
  221. X
  222. X  if (cinfo->comps_in_scan > MAX_COMPS_IN_SCAN)
  223. X    ERREXIT(cinfo->emethods, "Too many components for interleaved scan");
  224. X
  225. X  cinfo->MCUs_per_row = (cinfo->image_width
  226. X             + cinfo->max_h_samp_factor*DCTSIZE - 1)
  227. X            / (cinfo->max_h_samp_factor*DCTSIZE);
  228. X
  229. X  cinfo->MCU_rows_in_scan = (cinfo->image_height
  230. X                 + cinfo->max_v_samp_factor*DCTSIZE - 1)
  231. X                / (cinfo->max_v_samp_factor*DCTSIZE);
  232. X  
  233. X  cinfo->blocks_in_MCU = 0;
  234. X
  235. X  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
  236. X    compptr = cinfo->cur_comp_info[ci];
  237. X    /* for interleaved scan, sampling factors give # of blocks per component */
  238. X    compptr->MCU_width = compptr->h_samp_factor;
  239. X    compptr->MCU_height = compptr->v_samp_factor;
  240. X    compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height;
  241. X    /* compute physical dimensions of component */
  242. X    compptr->subsampled_width = jround_up(compptr->true_comp_width,
  243. X                      (long) (compptr->MCU_width*DCTSIZE));
  244. X    compptr->subsampled_height = jround_up(compptr->true_comp_height,
  245. X                       (long) (compptr->MCU_height*DCTSIZE));
  246. X    /* Sanity check */
  247. X    if (compptr->subsampled_width !=
  248. X    (cinfo->MCUs_per_row * (compptr->MCU_width*DCTSIZE)))
  249. X      ERREXIT(cinfo->emethods, "I'm confused about the image width");
  250. X    /* Prepare array describing MCU composition */
  251. X    mcublks = compptr->MCU_blocks;
  252. X    if (cinfo->blocks_in_MCU + mcublks > MAX_BLOCKS_IN_MCU)
  253. X      ERREXIT(cinfo->emethods, "Sampling factors too large for interleaved scan");
  254. X    while (mcublks-- > 0) {
  255. X      cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci;
  256. X    }
  257. X  }
  258. X
  259. X  (*cinfo->methods->c_per_scan_method_selection) (cinfo);
  260. X}
  261. X
  262. X
  263. XLOCAL void
  264. Xnoninterleaved_scan_setup (compress_info_ptr cinfo)
  265. X/* Compute all derived info for a noninterleaved (single-component) scan */
  266. X/* On entry, cinfo->comps_in_scan = 1 and cinfo->cur_comp_info[0] is set up */
  267. X{
  268. X  jpeg_component_info *compptr = cinfo->cur_comp_info[0];
  269. X
  270. X  /* for noninterleaved scan, always one block per MCU */
  271. X  compptr->MCU_width = 1;
  272. X  compptr->MCU_height = 1;
  273. X  compptr->MCU_blocks = 1;
  274. X  /* compute physical dimensions of component */
  275. X  compptr->subsampled_width = jround_up(compptr->true_comp_width,
  276. X                    (long) DCTSIZE);
  277. X  compptr->subsampled_height = jround_up(compptr->true_comp_height,
  278. X                     (long) DCTSIZE);
  279. X
  280. X  cinfo->MCUs_per_row = compptr->subsampled_width / DCTSIZE;
  281. X  cinfo->MCU_rows_in_scan = compptr->subsampled_height / DCTSIZE;
  282. X
  283. X  /* Prepare array describing MCU composition */
  284. X  cinfo->blocks_in_MCU = 1;
  285. X  cinfo->MCU_membership[0] = 0;
  286. X
  287. X  (*cinfo->methods->c_per_scan_method_selection) (cinfo);
  288. X}
  289. X
  290. X
  291. X
  292. XLOCAL void
  293. Xalloc_sampling_buffer (compress_info_ptr cinfo, JSAMPIMAGE fullsize_data[2],
  294. X               long fullsize_width)
  295. X/* Create a pre-subsampling data buffer having the desired structure */
  296. X/* (see comments at head of file) */
  297. X{
  298. X  short ci, vs, i;
  299. X
  300. X  vs = cinfo->max_v_samp_factor; /* row group height */
  301. X
  302. X  /* Get top-level space for array pointers */
  303. X  fullsize_data[0] = (JSAMPIMAGE) (*cinfo->emethods->alloc_small)
  304. X                (cinfo->num_components * SIZEOF(JSAMPARRAY));
  305. X  fullsize_data[1] = (JSAMPIMAGE) (*cinfo->emethods->alloc_small)
  306. X                (cinfo->num_components * SIZEOF(JSAMPARRAY));
  307. X
  308. X  for (ci = 0; ci < cinfo->num_components; ci++) {
  309. X    /* Allocate the real storage */
  310. X    fullsize_data[0][ci] = (*cinfo->emethods->alloc_small_sarray)
  311. X                (fullsize_width,
  312. X                (long) (vs * (DCTSIZE+2)));
  313. X    /* Create space for the scrambled-order pointers */
  314. X    fullsize_data[1][ci] = (JSAMPARRAY) (*cinfo->emethods->alloc_small)
  315. X                (vs * (DCTSIZE+2) * SIZEOF(JSAMPROW));
  316. X    /* Duplicate the first DCTSIZE-2 row groups */
  317. X    for (i = 0; i < vs * (DCTSIZE-2); i++) {
  318. X      fullsize_data[1][ci][i] = fullsize_data[0][ci][i];
  319. X    }
  320. X    /* Copy the last four row groups in swapped order */
  321. X    for (i = 0; i < vs * 2; i++) {
  322. X      fullsize_data[1][ci][vs*DCTSIZE + i] = fullsize_data[0][ci][vs*(DCTSIZE-2) + i];
  323. X      fullsize_data[1][ci][vs*(DCTSIZE-2) + i] = fullsize_data[0][ci][vs*DCTSIZE + i];
  324. X    }
  325. X  }
  326. X}
  327. X
  328. X
  329. X#if 0                /* this routine not currently needed */
  330. X
  331. XLOCAL void
  332. Xfree_sampling_buffer (compress_info_ptr cinfo, JSAMPIMAGE fullsize_data[2])
  333. X/* Release a sampling buffer created by alloc_sampling_buffer */
  334. X{
  335. X  short ci;
  336. X
  337. X  for (ci = 0; ci < cinfo->num_components; ci++) {
  338. X    /* Free the real storage */
  339. X    (*cinfo->emethods->free_small_sarray) (fullsize_data[0][ci]);
  340. X    /* Free the scrambled-order pointers */
  341. X    (*cinfo->emethods->free_small) ((void *) fullsize_data[1][ci]);
  342. X  }
  343. X
  344. X  /* Free the top-level space */
  345. X  (*cinfo->emethods->free_small) ((void *) fullsize_data[0]);
  346. X  (*cinfo->emethods->free_small) ((void *) fullsize_data[1]);
  347. X}
  348. X
  349. X#endif
  350. X
  351. X
  352. XLOCAL void
  353. Xsubsample (compress_info_ptr cinfo,
  354. X       JSAMPIMAGE fullsize_data, JSAMPIMAGE subsampled_data,
  355. X       long fullsize_width,
  356. X       short above, short current, short below, short out)
  357. X/* Do subsampling of a single row group (of each component). */
  358. X/* above, current, below are indexes of row groups in fullsize_data;      */
  359. X/* out is the index of the target row group in subsampled_data.           */
  360. X/* Special case: above, below can be -1 to indicate top, bottom of image. */
  361. X{
  362. X  jpeg_component_info *compptr;
  363. X  JSAMPARRAY above_ptr, below_ptr;
  364. X  JSAMPROW dummy[MAX_SAMP_FACTOR]; /* for subsample expansion at top/bottom */
  365. X  short ci, vs, i;
  366. X
  367. X  vs = cinfo->max_v_samp_factor; /* row group height */
  368. X
  369. X  for (ci = 0; ci < cinfo->num_components; ci++) {
  370. X    compptr = & cinfo->comp_info[ci];
  371. X
  372. X    if (above >= 0)
  373. X      above_ptr = fullsize_data[ci] + above * vs;
  374. X    else {
  375. X      /* Top of image: make a dummy above-context with copies of 1st row */
  376. X      /* We assume current=0 in this case */
  377. X      for (i = 0; i < vs; i++)
  378. X    dummy[i] = fullsize_data[ci][0];
  379. X      above_ptr = (JSAMPARRAY) dummy; /* possible near->far pointer conv */
  380. X    }
  381. X
  382. X    if (below >= 0)
  383. X      below_ptr = fullsize_data[ci] + below * vs;
  384. X    else {
  385. X      /* Bot of image: make a dummy below-context with copies of last row */
  386. X      for (i = 0; i < vs; i++)
  387. X    dummy[i] = fullsize_data[ci][(current+1)*vs-1];
  388. X      below_ptr = (JSAMPARRAY) dummy; /* possible near->far pointer conv */
  389. X    }
  390. X
  391. X    (*cinfo->methods->subsample[ci])
  392. X        (cinfo, (int) ci,
  393. X         fullsize_width, (int) vs,
  394. X         compptr->subsampled_width, (int) compptr->v_samp_factor,
  395. X         above_ptr,
  396. X         fullsize_data[ci] + current * vs,
  397. X         below_ptr,
  398. X         subsampled_data[ci] + out * compptr->v_samp_factor);
  399. X  }
  400. X}
  401. X
  402. X
  403. X/* These vars are initialized by the pipeline controller for use by
  404. X * MCU_output_catcher.
  405. X * To avoid a lot of row-pointer overhead, we cram as many MCUs into each
  406. X * row of whole_scan_MCUs as we can get without exceeding 64KB per row.
  407. X */
  408. X
  409. X#define MAX_WHOLE_ROW_BLOCKS    ((int) (65500 / SIZEOF(JBLOCK))) /* max blocks/row */
  410. X
  411. Xstatic big_barray_ptr whole_scan_MCUs; /* Big array for saving the MCUs */
  412. Xstatic int MCUs_in_big_row;    /* # of MCUs in each row of whole_scan_MCUs */
  413. Xstatic long next_whole_row;    /* next row to access in whole_scan_MCUs */
  414. Xstatic int next_MCU_index;    /* next MCU in current row */
  415. X
  416. X
  417. XMETHODDEF void
  418. XMCU_output_catcher (compress_info_ptr cinfo, JBLOCK *MCU_data)
  419. X/* Output method for siphoning off extract_MCUs output into a big array */
  420. X{
  421. X  static JBLOCKARRAY rowptr;
  422. X
  423. X  if (next_MCU_index >= MCUs_in_big_row) {
  424. X    rowptr = (*cinfo->emethods->access_big_barray) (whole_scan_MCUs,
  425. X                            next_whole_row, TRUE);
  426. X    next_whole_row++;
  427. X    next_MCU_index = 0;
  428. X  }
  429. X
  430. X  /*
  431. X   * note that on 80x86, the cast applied to MCU_data implies
  432. X   * near to far pointer conversion.
  433. X   */
  434. X  jcopy_block_row((JBLOCKROW) MCU_data,
  435. X          rowptr[0] + next_MCU_index * cinfo->blocks_in_MCU,
  436. X          (long) cinfo->blocks_in_MCU);
  437. X  next_MCU_index++;
  438. X}
  439. X
  440. X
  441. XMETHODDEF void
  442. Xdump_scan_MCUs (compress_info_ptr cinfo, MCU_output_method_ptr output_method)
  443. X/* Dump the MCUs saved in whole_scan_MCUs to the output method. */
  444. X/* The method may be either the entropy encoder or some routine supplied */
  445. X/* by the entropy optimizer. */
  446. X{
  447. X  /* On an 80x86 machine, the entropy encoder expects the passed data block
  448. X   * to be in NEAR memory (for performance reasons), so we have to copy it
  449. X   * back from the big array to a local array.  On less brain-damaged CPUs
  450. X   * we needn't do that.
  451. X   */
  452. X#ifdef NEED_FAR_POINTERS
  453. X  JBLOCK MCU_data[MAX_BLOCKS_IN_MCU];
  454. X#endif
  455. X  long mcurow, mcuindex, next_row;
  456. X  int next_index;
  457. X  JBLOCKARRAY rowptr = NULL;    /* init only to suppress compiler complaint */
  458. X
  459. X  next_row = 0;
  460. X  next_index = MCUs_in_big_row;
  461. X
  462. X  for (mcurow = 0; mcurow < cinfo->MCU_rows_in_scan; mcurow++) {
  463. X    (*cinfo->methods->progress_monitor) (cinfo, mcurow,
  464. X                     cinfo->MCU_rows_in_scan);
  465. X    for (mcuindex = 0; mcuindex < cinfo->MCUs_per_row; mcuindex++) {
  466. X      if (next_index >= MCUs_in_big_row) {
  467. X    rowptr = (*cinfo->emethods->access_big_barray) (whole_scan_MCUs,
  468. X                            next_row, FALSE);
  469. X    next_row++;
  470. X    next_index = 0;
  471. X      }
  472. X#ifdef NEED_FAR_POINTERS
  473. X      jcopy_block_row(rowptr[0] + next_index * cinfo->blocks_in_MCU,
  474. X              (JBLOCKROW) MCU_data, /* casts near to far pointer! */
  475. X              (long) cinfo->blocks_in_MCU);
  476. X      (*output_method) (cinfo, MCU_data);
  477. X#else
  478. X      (*output_method) (cinfo, rowptr[0] + next_index * cinfo->blocks_in_MCU);
  479. X#endif
  480. X      next_index++;
  481. X    }
  482. X  }
  483. X
  484. X  cinfo->completed_passes++;
  485. X}
  486. X
  487. X
  488. X
  489. X/*
  490. X * Compression pipeline controller used for single-scan files
  491. X * with no optimization of entropy parameters.
  492. X */
  493. X
  494. XMETHODDEF void
  495. Xsingle_ccontroller (compress_info_ptr cinfo)
  496. X{
  497. X  int rows_in_mem;        /* # of sample rows in full-size buffers */
  498. X  long fullsize_width;        /* # of samples per row in full-size buffers */
  499. X  long cur_pixel_row;        /* counts # of pixel rows processed */
  500. X  long mcu_rows_output;        /* # of MCU rows actually emitted */
  501. X  int mcu_rows_per_loop;    /* # of MCU rows processed per outer loop */
  502. X  /* Work buffer for pre-subsampling data (see comments at head of file) */
  503. X  JSAMPIMAGE fullsize_data[2];
  504. X  /* Work buffer for subsampled data */
  505. X  JSAMPIMAGE subsampled_data;
  506. X  int rows_this_time;
  507. X  short ci, whichss, i;
  508. X
  509. X  /* Prepare for single scan containing all components */
  510. X  if (cinfo->num_components > MAX_COMPS_IN_SCAN)
  511. X    ERREXIT(cinfo->emethods, "Too many components for interleaved scan");
  512. X  cinfo->comps_in_scan = cinfo->num_components;
  513. X  for (ci = 0; ci < cinfo->num_components; ci++) {
  514. X    cinfo->cur_comp_info[ci] = &cinfo->comp_info[ci];
  515. X  }
  516. X  if (cinfo->comps_in_scan == 1) {
  517. X    noninterleaved_scan_setup(cinfo);
  518. X    /* Vk block rows constitute the same number of MCU rows */
  519. X    mcu_rows_per_loop = cinfo->cur_comp_info[0]->v_samp_factor;
  520. X  } else {
  521. X    interleaved_scan_setup(cinfo);
  522. X    /* in an interleaved scan, one MCU row contains Vk block rows */
  523. X    mcu_rows_per_loop = 1;
  524. X  }
  525. X  cinfo->total_passes++;
  526. X
  527. X  /* Compute dimensions of full-size pixel buffers */
  528. X  /* Note these are the same whether interleaved or not. */
  529. X  rows_in_mem = cinfo->max_v_samp_factor * DCTSIZE;
  530. X  fullsize_width = jround_up(cinfo->image_width,
  531. X                 (long) (cinfo->max_h_samp_factor * DCTSIZE));
  532. X
  533. X  /* Allocate working memory: */
  534. X  /* fullsize_data is sample data before subsampling */
  535. X  alloc_sampling_buffer(cinfo, fullsize_data, fullsize_width);
  536. X  /* subsampled_data is sample data after subsampling */
  537. X  subsampled_data = (JSAMPIMAGE) (*cinfo->emethods->alloc_small)
  538. X                (cinfo->num_components * SIZEOF(JSAMPARRAY));
  539. X  for (ci = 0; ci < cinfo->num_components; ci++) {
  540. X    subsampled_data[ci] = (*cinfo->emethods->alloc_small_sarray)
  541. X            (cinfo->comp_info[ci].subsampled_width,
  542. X             (long) (cinfo->comp_info[ci].v_samp_factor * DCTSIZE));
  543. X  }
  544. X
  545. X  /* Tell the memory manager to instantiate big arrays.
  546. X   * We don't need any big arrays in this controller,
  547. X   * but some other module (like the input file reader) may need one.
  548. X   */
  549. X  (*cinfo->emethods->alloc_big_arrays)
  550. X    ((long) 0,                /* no more small sarrays */
  551. X     (long) 0,                /* no more small barrays */
  552. X     (long) 0);                /* no more "medium" objects */
  553. X
  554. X  /* Initialize output file & do per-scan object init */
  555. X
  556. X  (*cinfo->methods->write_scan_header) (cinfo);
  557. X  cinfo->methods->entropy_output = cinfo->methods->write_jpeg_data;
  558. X  (*cinfo->methods->entropy_encoder_init) (cinfo);
  559. X  (*cinfo->methods->subsample_init) (cinfo);
  560. X  (*cinfo->methods->extract_init) (cinfo);
  561. X
  562. X  /* Loop over input image: rows_in_mem pixel rows are processed per loop */
  563. X
  564. X  mcu_rows_output = 0;
  565. X  whichss = 1;            /* arrange to start with fullsize_data[0] */
  566. X
  567. X  for (cur_pixel_row = 0; cur_pixel_row < cinfo->image_height;
  568. X       cur_pixel_row += rows_in_mem) {
  569. X    (*cinfo->methods->progress_monitor) (cinfo, cur_pixel_row,
  570. X                     cinfo->image_height);
  571. X
  572. X    whichss ^= 1;        /* switch to other fullsize_data buffer */
  573. X    
  574. X    /* Obtain rows_this_time pixel rows and expand to rows_in_mem rows. */
  575. X    /* Then we have exactly DCTSIZE row groups for subsampling. */   
  576. X    rows_this_time = (int) MIN((long) rows_in_mem,
  577. X                   cinfo->image_height - cur_pixel_row);
  578. X    (*cinfo->methods->get_sample_rows) (cinfo, rows_this_time,
  579. X                    fullsize_data[whichss]);
  580. X    (*cinfo->methods->edge_expand) (cinfo,
  581. X                    cinfo->image_width, rows_this_time,
  582. X                    fullsize_width, rows_in_mem,
  583. X                    fullsize_data[whichss]);
  584. X    
  585. X    /* Subsample the data (all components) */
  586. X    /* First time through is a special case */
  587. X    
  588. X    if (cur_pixel_row) {
  589. X      /* Subsample last row group of previous set */
  590. X      subsample(cinfo, fullsize_data[whichss], subsampled_data, fullsize_width,
  591. X        (short) DCTSIZE, (short) (DCTSIZE+1), (short) 0,
  592. X        (short) (DCTSIZE-1));
  593. X      /* and dump the previous set's subsampled data */
  594. X      (*cinfo->methods->extract_MCUs) (cinfo, subsampled_data, 
  595. X                       mcu_rows_per_loop,
  596. X                       cinfo->methods->entropy_encode);
  597. X      mcu_rows_output += mcu_rows_per_loop;
  598. X      /* Subsample first row group of this set */
  599. X      subsample(cinfo, fullsize_data[whichss], subsampled_data, fullsize_width,
  600. X        (short) (DCTSIZE+1), (short) 0, (short) 1,
  601. X        (short) 0);
  602. X    } else {
  603. X      /* Subsample first row group with dummy above-context */
  604. X      subsample(cinfo, fullsize_data[whichss], subsampled_data, fullsize_width,
  605. X        (short) (-1), (short) 0, (short) 1,
  606. X        (short) 0);
  607. X    }
  608. X    /* Subsample second through next-to-last row groups of this set */
  609. X    for (i = 1; i <= DCTSIZE-2; i++) {
  610. X      subsample(cinfo, fullsize_data[whichss], subsampled_data, fullsize_width,
  611. X        (short) (i-1), (short) i, (short) (i+1),
  612. X        (short) i);
  613. X    }
  614. X  } /* end of outer loop */
  615. X  
  616. X  /* Subsample the last row group with dummy below-context */
  617. X  /* Note whichss points to last buffer side used */
  618. X  subsample(cinfo, fullsize_data[whichss], subsampled_data, fullsize_width,
  619. X        (short) (DCTSIZE-2), (short) (DCTSIZE-1), (short) (-1),
  620. X        (short) (DCTSIZE-1));
  621. X  /* Dump the remaining data (may be less than full height if uninterleaved) */
  622. X  (*cinfo->methods->extract_MCUs) (cinfo, subsampled_data, 
  623. X        (int) (cinfo->MCU_rows_in_scan - mcu_rows_output),
  624. X        cinfo->methods->entropy_encode);
  625. X
  626. X  /* Finish output file */
  627. X  (*cinfo->methods->extract_term) (cinfo);
  628. X  (*cinfo->methods->subsample_term) (cinfo);
  629. X  (*cinfo->methods->entropy_encoder_term) (cinfo);
  630. X  (*cinfo->methods->write_scan_trailer) (cinfo);
  631. X  cinfo->completed_passes++;
  632. X
  633. X  /* Release working memory */
  634. X  /* (no work -- we let free_all release what's needful) */
  635. X}
  636. X
  637. X
  638. X/*
  639. X * Compression pipeline controller used for single-scan files
  640. X * with optimization of entropy parameters.
  641. X */
  642. X
  643. X#ifdef ENTROPY_OPT_SUPPORTED
  644. X
  645. XMETHODDEF void
  646. Xsingle_eopt_ccontroller (compress_info_ptr cinfo)
  647. X{
  648. X  int rows_in_mem;        /* # of sample rows in full-size buffers */
  649. X  long fullsize_width;        /* # of samples per row in full-size buffers */
  650. X  long cur_pixel_row;        /* counts # of pixel rows processed */
  651. X  long mcu_rows_output;        /* # of MCU rows actually emitted */
  652. X  int mcu_rows_per_loop;    /* # of MCU rows processed per outer loop */
  653. X  /* Work buffer for pre-subsampling data (see comments at head of file) */
  654. X  JSAMPIMAGE fullsize_data[2];
  655. X  /* Work buffer for subsampled data */
  656. X  JSAMPIMAGE subsampled_data;
  657. X  int rows_this_time;
  658. X  int blocks_in_big_row;
  659. X  short ci, whichss, i;
  660. X
  661. X  /* Prepare for single scan containing all components */
  662. X  if (cinfo->num_components > MAX_COMPS_IN_SCAN)
  663. X    ERREXIT(cinfo->emethods, "Too many components for interleaved scan");
  664. X  cinfo->comps_in_scan = cinfo->num_components;
  665. X  for (ci = 0; ci < cinfo->num_components; ci++) {
  666. X    cinfo->cur_comp_info[ci] = &cinfo->comp_info[ci];
  667. X  }
  668. X  if (cinfo->comps_in_scan == 1) {
  669. X    noninterleaved_scan_setup(cinfo);
  670. X    /* Vk block rows constitute the same number of MCU rows */
  671. X    mcu_rows_per_loop = cinfo->cur_comp_info[0]->v_samp_factor;
  672. X  } else {
  673. X    interleaved_scan_setup(cinfo);
  674. X    /* in an interleaved scan, one MCU row contains Vk block rows */
  675. X    mcu_rows_per_loop = 1;
  676. X  }
  677. X  cinfo->total_passes += 2;    /* entropy encoder must add # passes it uses */
  678. X
  679. X  /* Compute dimensions of full-size pixel buffers */
  680. X  /* Note these are the same whether interleaved or not. */
  681. X  rows_in_mem = cinfo->max_v_samp_factor * DCTSIZE;
  682. X  fullsize_width = jround_up(cinfo->image_width,
  683. X                 (long) (cinfo->max_h_samp_factor * DCTSIZE));
  684. X
  685. X  /* Allocate working memory: */
  686. X  /* fullsize_data is sample data before subsampling */
  687. X  alloc_sampling_buffer(cinfo, fullsize_data, fullsize_width);
  688. X  /* subsampled_data is sample data after subsampling */
  689. X  subsampled_data = (JSAMPIMAGE) (*cinfo->emethods->alloc_small)
  690. X                (cinfo->num_components * SIZEOF(JSAMPARRAY));
  691. X  for (ci = 0; ci < cinfo->num_components; ci++) {
  692. X    subsampled_data[ci] = (*cinfo->emethods->alloc_small_sarray)
  693. X            (cinfo->comp_info[ci].subsampled_width,
  694. X             (long) (cinfo->comp_info[ci].v_samp_factor * DCTSIZE));
  695. X  }
  696. X
  697. X  /* Figure # of MCUs to be packed in a row of whole_scan_MCUs */
  698. X  MCUs_in_big_row = MAX_WHOLE_ROW_BLOCKS / cinfo->blocks_in_MCU;
  699. X  blocks_in_big_row = MCUs_in_big_row * cinfo->blocks_in_MCU;
  700. X
  701. X  /* Request a big array: whole_scan_MCUs saves the MCU data for the scan */
  702. X  whole_scan_MCUs = (*cinfo->emethods->request_big_barray)
  703. X        ((long) blocks_in_big_row,
  704. X         (long) (cinfo->MCUs_per_row * cinfo->MCU_rows_in_scan
  705. X             + MCUs_in_big_row-1) / MCUs_in_big_row,
  706. X         1L);        /* unit height is 1 row */
  707. X
  708. X  next_whole_row = 0;        /* init output ptr for MCU_output_catcher */
  709. X  next_MCU_index = MCUs_in_big_row; /* forces access on first call! */
  710. X
  711. X  /* Tell the memory manager to instantiate big arrays */
  712. X  (*cinfo->emethods->alloc_big_arrays)
  713. X    ((long) 0,                /* no more small sarrays */
  714. X     (long) 0,                /* no more small barrays */
  715. X     (long) 0);                /* no more "medium" objects */
  716. X
  717. X  /* Do per-scan object init */
  718. X
  719. X  (*cinfo->methods->subsample_init) (cinfo);
  720. X  (*cinfo->methods->extract_init) (cinfo);
  721. X
  722. X  /* Loop over input image: rows_in_mem pixel rows are processed per loop */
  723. X  /* MCU data goes into whole_scan_MCUs, not to the entropy encoder */
  724. X
  725. X  mcu_rows_output = 0;
  726. X  whichss = 1;            /* arrange to start with fullsize_data[0] */
  727. X
  728. X  for (cur_pixel_row = 0; cur_pixel_row < cinfo->image_height;
  729. X       cur_pixel_row += rows_in_mem) {
  730. X    (*cinfo->methods->progress_monitor) (cinfo, cur_pixel_row,
  731. X                     cinfo->image_height);
  732. X
  733. X    whichss ^= 1;        /* switch to other fullsize_data buffer */
  734. X    
  735. X    /* Obtain rows_this_time pixel rows and expand to rows_in_mem rows. */
  736. X    /* Then we have exactly DCTSIZE row groups for subsampling. */   
  737. X    rows_this_time = (int) MIN((long) rows_in_mem,
  738. X                   cinfo->image_height - cur_pixel_row);
  739. X    (*cinfo->methods->get_sample_rows) (cinfo, rows_this_time,
  740. X                    fullsize_data[whichss]);
  741. X    (*cinfo->methods->edge_expand) (cinfo,
  742. X                    cinfo->image_width, rows_this_time,
  743. X                    fullsize_width, rows_in_mem,
  744. X                    fullsize_data[whichss]);
  745. X    
  746. X    /* Subsample the data (all components) */
  747. X    /* First time through is a special case */
  748. X    
  749. X    if (cur_pixel_row) {
  750. X      /* Subsample last row group of previous set */
  751. X      subsample(cinfo, fullsize_data[whichss], subsampled_data, fullsize_width,
  752. X        (short) DCTSIZE, (short) (DCTSIZE+1), (short) 0,
  753. X        (short) (DCTSIZE-1));
  754. X      /* and dump the previous set's subsampled data */
  755. X      (*cinfo->methods->extract_MCUs) (cinfo, subsampled_data, 
  756. X                       mcu_rows_per_loop,
  757. X                       MCU_output_catcher);
  758. X      mcu_rows_output += mcu_rows_per_loop;
  759. X      /* Subsample first row group of this set */
  760. X      subsample(cinfo, fullsize_data[whichss], subsampled_data, fullsize_width,
  761. X        (short) (DCTSIZE+1), (short) 0, (short) 1,
  762. X        (short) 0);
  763. X    } else {
  764. X      /* Subsample first row group with dummy above-context */
  765. X      subsample(cinfo, fullsize_data[whichss], subsampled_data, fullsize_width,
  766. X        (short) (-1), (short) 0, (short) 1,
  767. X        (short) 0);
  768. X    }
  769. X    /* Subsample second through next-to-last row groups of this set */
  770. X    for (i = 1; i <= DCTSIZE-2; i++) {
  771. X      subsample(cinfo, fullsize_data[whichss], subsampled_data, fullsize_width,
  772. X        (short) (i-1), (short) i, (short) (i+1),
  773. X        (short) i);
  774. X    }
  775. X  } /* end of outer loop */
  776. X  
  777. X  /* Subsample the last row group with dummy below-context */
  778. X  /* Note whichss points to last buffer side used */
  779. X  subsample(cinfo, fullsize_data[whichss], subsampled_data, fullsize_width,
  780. X        (short) (DCTSIZE-2), (short) (DCTSIZE-1), (short) (-1),
  781. X        (short) (DCTSIZE-1));
  782. X  /* Dump the remaining data (may be less than full height if uninterleaved) */
  783. X  (*cinfo->methods->extract_MCUs) (cinfo, subsampled_data, 
  784. X        (int) (cinfo->MCU_rows_in_scan - mcu_rows_output),
  785. X        MCU_output_catcher);
  786. X
  787. X  /* Clean up after that stuff, then find the optimal entropy parameters */
  788. X
  789. X  (*cinfo->methods->extract_term) (cinfo);
  790. X  (*cinfo->methods->subsample_term) (cinfo);
  791. X
  792. X  cinfo->completed_passes++;
  793. X
  794. X  (*cinfo->methods->entropy_optimize) (cinfo, dump_scan_MCUs);
  795. X
  796. X  /* Emit scan to output file */
  797. X  /* Note: we can't do write_scan_header until entropy parameters are set! */
  798. X
  799. X  (*cinfo->methods->write_scan_header) (cinfo);
  800. X  cinfo->methods->entropy_output = cinfo->methods->write_jpeg_data;
  801. X  (*cinfo->methods->entropy_encoder_init) (cinfo);
  802. X  dump_scan_MCUs(cinfo, cinfo->methods->entropy_encode);
  803. X  (*cinfo->methods->entropy_encoder_term) (cinfo);
  804. X  (*cinfo->methods->write_scan_trailer) (cinfo);
  805. X
  806. X  /* Release working memory */
  807. X  /* (no work -- we let free_all release what's needful) */
  808. X}
  809. X
  810. X#endif /* ENTROPY_OPT_SUPPORTED */
  811. X
  812. X
  813. X/*
  814. X * Compression pipeline controller used for multiple-scan files
  815. X * with no optimization of entropy parameters.
  816. X */
  817. X
  818. X#ifdef MULTISCAN_FILES_SUPPORTED
  819. X
  820. XMETHODDEF void
  821. Xmulti_ccontroller (compress_info_ptr cinfo)
  822. X{
  823. X  ERREXIT(cinfo->emethods, "Not implemented yet");
  824. X}
  825. X
  826. X#endif /* MULTISCAN_FILES_SUPPORTED */
  827. X
  828. X
  829. X/*
  830. X * Compression pipeline controller used for multiple-scan files
  831. X * with optimization of entropy parameters.
  832. X */
  833. X
  834. X#ifdef MULTISCAN_FILES_SUPPORTED
  835. X#ifdef ENTROPY_OPT_SUPPORTED
  836. X
  837. XMETHODDEF void
  838. Xmulti_eopt_ccontroller (compress_info_ptr cinfo)
  839. X{
  840. X  ERREXIT(cinfo->emethods, "Not implemented yet");
  841. X}
  842. X
  843. X#endif /* ENTROPY_OPT_SUPPORTED */
  844. X#endif /* MULTISCAN_FILES_SUPPORTED */
  845. X
  846. X
  847. X/*
  848. X * The method selection routine for compression pipeline controllers.
  849. X */
  850. X
  851. XGLOBAL void
  852. Xjselcpipeline (compress_info_ptr cinfo)
  853. X{
  854. X  if (cinfo->interleave || cinfo->num_components == 1) {
  855. X    /* single scan needed */
  856. X#ifdef ENTROPY_OPT_SUPPORTED
  857. X    if (cinfo->optimize_coding)
  858. X      cinfo->methods->c_pipeline_controller = single_eopt_ccontroller;
  859. X    else
  860. X#endif
  861. X      cinfo->methods->c_pipeline_controller = single_ccontroller;
  862. X  } else {
  863. X    /* multiple scans needed */
  864. X#ifdef MULTISCAN_FILES_SUPPORTED
  865. X#ifdef ENTROPY_OPT_SUPPORTED
  866. X    if (cinfo->optimize_coding)
  867. X      cinfo->methods->c_pipeline_controller = multi_eopt_ccontroller;
  868. X    else
  869. X#endif
  870. X      cinfo->methods->c_pipeline_controller = multi_ccontroller;
  871. X#else
  872. X    ERREXIT(cinfo->emethods, "Multiple-scan support was not compiled");
  873. X#endif
  874. X  }
  875. X}
  876. END_OF_FILE
  877.   if test 26133 -ne `wc -c <'jcpipe.c'`; then
  878.     echo shar: \"'jcpipe.c'\" unpacked with wrong size!
  879.   fi
  880.   # end of 'jcpipe.c'
  881. fi
  882. if test -f 'testimg.gif.u' -a "${1}" != "-c" ; then 
  883.   echo shar: Will not clobber existing file \"'testimg.gif.u'\"
  884. else
  885.   echo shar: Extracting \"'testimg.gif.u'\" \(21738 characters\)
  886.   sed "s/^X//" >'testimg.gif.u' <<'END_OF_FILE'
  887. Xbegin 666 testimg.gif
  888. XM1TE&.#=A?0!] /<  "L!"*!N=F,[,M.LH'AA4LV'=T<;+:5GC:E"3HHH+O+-
  889. XMLL>?EF@,(LIY;>VADZ5<7L&$IWI)4VTA-+E27)LW0N%]=^NZH\]:8^B1AH9*
  890. XM?48()%$20+-XG=UL;V\P8/NSKM.:IOG7S*UW?+).67X=-].1@)E<CWU <TH+
  891. XM2]*NLX8G4&,D5*]QE[2 @Y<U85T &9]66.R=L[54<.>)@=O$M?W$N==E:UP>
  892. XM.I0Q/$T1+',^29-3AUL<3,=W?_6KHZXR.^>SG-R:B7<W:LM/5*1$8*1<<Y!'
  893. XM5,%O<GL90[^9D\F.L>R.L=:AKKEG:G03-:U,:.F[M,"+C+5CBF,S-M]^B/*8
  894. XMDYQCEX5%>&DJ6HQ/:$D(-ZMWN>)U=Z=OKUX4)J(_2I19</_*PN&?F-2/DWHP
  895. XM0.//O_^5I']#8,)SE]NSO-)D@C\");T^1H@I0LI<>H!+EO^XM,V5P>2&CZ<K
  896. XM-&<62LU]A;]M@K=E>N_!N\%:9._$JNV/F%\.0F,N>?_0S,)&39X4&]& I/2H
  897. XMNY9/4&T+-X\O6[ULD)=O9F,E0_JNP7,^B6H#)X(U6(M6H=ZVK<.0RO/1QO_6
  898. XMTDX-/(5)9L^?R'0G2I=BK2\ *&<Z4N"HH*!GHYP@,<^GGL^ <^Z@I+N(PHL_
  899. XM4)DX4O!W>.!679=&>E0&);N H^]B>WLJ7O^DLM^3J(,B.J=6BHLZ;FX=4;V&
  900. XMA:$Z:/^2L+Y9=/S!SN9;96<8/)$P2H,W2I].@O^?F[0X0=N8F(,R9M)46:EB
  901. XM>X A2MB)K<^%B_!TAY=*95T3-9]2;7HM4/')P>BMO$L (OI^D?_,V_?2M_CA
  902. XMTN&FLUP -.#)NED+*N69KG4I//^+GJU<D)% ='4D6%0#-_9I@I\^6/_'U(L\
  903. XM8,EZGO^'FO^:N&\@1&0"/.BPK*UD9ED(/)%"9CH &JIP=5Q"1->PI-&+>T<B
  904. XM+:EKDZU&4H\K-LNCFFX/*.^FEZE@8,*(L7$E.+M78)\[1N.!>^Z_IM-?9>Z4
  905. XMBXM.@4D-*%851+=\H^!P=2P     ?0!]   (_P#;Y:OSS\81@__RC:AGHT>'
  906. XM'A7J=#C2H$&G3@UFR.ETA,J>8#/440FR2\ZN,4%0CJE0 D.0$B5>!E.WZ^28
  907. XM76)(!A&3R4&FE#A5C5&U*U.) E&"6 "220RG3$"@'-,#I:JCJX[27*51%4\:
  908. XM*'BXEL$#[9BC,:_&>)+3HP%*<0J.=.ADHXD-@_F:Y+G0X-^1?_\:.&S0@; <
  909. XMBYUZ=)*#8<R]8/?VI!09C I,.25F!"G0J<08S\%JBLE9(@E,F&)JWAS#NG0)
  910. XM3D &\!P Q )8?%5I8*61(@T-WS2@01'.53BT,L<6O$H2;U>=(_?&.("B@(O#
  911. XM@]A'Y#MRA N7PG+;<O^W6.$(1"J5@U4(QI[UF#IC@HT1L^=S'8X%=NF+Z:" 
  912. XMNILU!2$@3"?9%%\+!00!!!"<!#$ ;57I@<=50&P%A&X8<A4<#<%!XV$9960R
  913. XM1E+.=<*:.IG4D$D#=TUD0Q[U3"#77-:Y:-=?5-Q#42?HS3!&#SW,L,MC!033
  914. XM0WORE<!6"?<$4<48!9BDTF0CEK!+"5&$%E\4G^V2#A#I!/%E5!8X J8CZ6"U
  915. XMU5;#D=6F<""60<-R)]519 D-!..#'X=<T 1V%]0S1!.%-?3=04TTD4\#]U30
  916. XM@WE4R!&,')+6(1][P=1A1P!'W/% $:$%4]^DZF!6ZB[RQ2=4,%RR%DP!=HK_
  917. XM4680[]!F@6UEQC9 FFKJ5A58T(0%#0UE#%M&"- PD>I]P1PACP@EX+$,&789
  918. XM%&BB_W!QT#\]&%37=IW4T<!V#7CTW!U-H'O''6@$T\(==K30Q#!&V"$':_>R
  919. XM9Y(ZP6  GZ2J=+-J?$>\$D0FF83)R9=<64!#A6CRF@Z&CG#5%5G#$BOGL8XD
  920. XM(=2C\L @<@% ;".& =O94,]"VP5F4 ??VD58M]SU\$^F=\A0Q!,R%$-$,45(
  921. XM(441$ 0RCQU@W,%!#X$$HHHJ/;0 9# @! -,-[Y44TXW3;\2M8(6B)$$;%0Y
  922. XM H6:O*[)(8=5&;?VL'B4,0L4G$1!A1H3P&"/ (.\_S) #=N H4$>=4TP0AY]
  923. XM->1M$_7XV0%!35P '154]#""$;( >8<L1113#BCE%/-*(""H(D(Q0'<>0"!9
  924. XM6@I&#U+488HO)C""B!2!2+T+4S&E@P\>4&BH)H6Z5;SV[\,%/^QQ-. !R3'I
  925. XMC'@' K?@8,0@300!10UXW*#!BR-,0.A#+N:UUXT-;==1#W:L:T</ADA1C/S%
  926. XM<,,-%J3, XP2\QC"P@%68,<.3""$?9B !2P 0Q;.L (A>. $^R@%(UH #'&(
  927. XM0QU1J-6"*I:5"WFP5QS"AX;>=IPR@.48W/,!%9HP @I8;Q!?>$ )+'",;4PB
  928. XM!S=8V>%LP"+LU.5\BYN(0__JL,()L L-OB#"SAC!"&-< Q&D, 4:XH &")C 
  929. XM%\78009.( 0PG,$84S &)H1P@Q5LH!\\B$8E@B&(*KVC-DNQF-K09+RK.$QY
  930. XMP2F6V4!T#"B(H5DP, (%[$$!"L3P%>D01PA:( $-\&$$"PE/7NZB%S]YRP:R
  931. XM,$CEU)"S.]0!#;(@!2Z*T8K0X4((K3"!";8@!7\,T(%]V( BK)"!#6!!$1O@
  932. XM 0^TT(]>:J$2 7!&E3AA 7R(D$*[N=#$)E9'M@4OC\BIP5E:4 \8%G*0H,">
  933. XM.L0 !3\D A/$6,<C)R Y%_TP#^@[PG:VHP8NU 4!LD!##ZJA1$/( A>&,$0U
  934. XM&''_ FM<@10FV,$^/("%%:Q H"M0A!"$@ D>],, DH H%O;1 E6 0 1)P(<%
  935. XM]'"K#0[O8>E@IO&"%SSCE0$2$XK".09A!% ,TAY?^((1ZM&$3H@#"LX0!QCX
  936. XM<0-B: &=#8'90=Q0#\+9P09NP.1V'F*#3L)+!JP(6A=800I6M$((KL""5D\0
  937. XMT'V<X 17:,17A8"%?BBB#ROH!PH@:H!)4"(3(G@%3H+G, X.3VT0HP%N-#2<
  938. XM8T!"'"UXP"! 04@<V*,=B&W' PH0DP\(0@1DR$$.B$%91?VE W?P$XPN<-28
  939. XMJ>$?$\F##"9@!SL8H@@RJ 8K8.$"1E2"#BO(*A8\L(\=_W0!@ES%A!7VL0*T
  940. XM*N(**-BE%A!A E.,H0DBV,798L.PVE2(5\I$4_%*Z@@\X.$8)LQ$"P:A \)2
  941. XMP*5?&,3AFI @<< !"G:8 C\V@(@-W  +*>N67O8"U".X 9TPZX$:;$"$>KA/
  942. XM"C(@12M<P(M6M,(5='#%"NC@@4;L0Q-@70$$37 %3%28!XKPP"7Z(0E$'$*8
  943. XMYSB$&/ Q +,M($UI2\>N(+;,K=CF*UP9  BB( )Y? $![?B"/>R! ",>03X.
  944. XM" (^:A ,">1  ANH!3_X@(BCYL,.^<B#+/RDJ*/F@7!4.(B?X*G?.Q"A$->H
  945. XM!"^L80Q>U((./$#S#EA!844$%_\+.U@! 3+0!RR@P(']6,,Z_#'C!X@@-A;(
  946. XM1!)V]:60%OI+R>Q5Q:K"B180  ;I@L$@$&"/A=CA7S=Q !!\\(K(;H"R-W %
  947. XM(FKAK4 5U0T7<(.BKMR$;OT#7G9P 1H,@8M6>( .^,L *C: "32N0!*MT 0N
  948. XMK( *.J#Q#5?HPQ97H 4M[$ (V&A%#]YS#G4XUQ&9>%"AS80F71DZI!<*3G5[
  949. XM P(A# ,,8&B!")Q%$4;-  ,N$5 FH!",*93""S>H1:AO@.:#Y,%P,DCU!=30
  950. XM!!D452\'44/EB%"-8O BJZW@(@^(P0,SWH 'KC !+G;0BGYLP ,[V($'T)$!
  951. XM+&@AN-;_\  H.*"*(QR"9+G*]@ <$-('$1K<S05I.C@1G%=,@A'<8$06P."+
  952. XM(U%A!N]^-P9:$H1X+",*9'A!#KQ V5K$EM\=:(+A)I '-]@W'V[@^A&T3@1X
  953. XMFO8)K6"$*SR "@>"8P.VO $V>, '(53# QW'^!LTL0-%O&$=_5C!.GB0 3  
  954. XMHP[K+D F;I6P 62"$X1^$.1O[L$S&?,825C@#3#!@7.C^Q7!$ /2X4UZ!UB@
  955. XM!B4 A09X"FH>@(,'M>"!7NKAWWQ<0!;U4+4L\N$0O7Q!!C)X A&,L?:K7F,%
  956. XM%2<HAWF B!/L .,H<,4^]G&%#.R@#RA0A)L]P '6%>$08X#"_Z8MH&*GV#P=
  957. XM#A@ )QH$>8E]"3?I$,$4#)"%")#!$.P 0Q%\(8(>W$,=2@=O0  ''Q $TU *
  958. XM_" !^L9OH?9ZM1 ^0+4Y$R +,N &\*(&I24#A< -A< (UH *J' "O#!;6+ !
  959. XMUY %$T<.B&!@J, '"[8";W!5^R $*/ &5K "&F %"^ /8)!<XF !XK @-0=Y
  960. XMZ;=^Z_<.ZT<;)69'9W$.M\  -P #8"!T+% $5N +15 '4: 9^@!O\: '\= $
  961. XM[G #I1 -Q)!DM= /=( (KG!F"^$G%R!ELB!E Z<&%"@+H; *TZ "X, -(<@+
  962. XM0J!+%9<!5X -'N<*&9!W=;<"U\ ##?^V#BBP!6^  IC  @%0!,EE&]R&)C*G
  963. XM8NM'*^\@!K6"8A%C0>HP#A&  SI !N4 !AE0!.QP $60!7:B#BZ! ?@ !_HP
  964. XM"%Z 0]&0 [50"TGF"J$6>[5P<'?@!F#G!A4(+SD3?,4@8.5P#;S@ 4*P F75
  965. XM;$+ #L:@!<0 6Q^HACQP#7U !W<VB7T 82=@!6 0 2( %9NH8IXH<YGP#DD0
  966. XM!)/G -Q6?HM7!06  Q30#J# #<-P!B> 0.A6,(RE#_&0"T' BPE8"DDV:L30
  967. XM#\:PAFU(#(EB T?5/LQX!VK@!A8H T1@#:W5"M1X J3  QN@!;IT NS DA5'
  968. XMC1[ !W30!^3_((@GX&:*8 F-\ D!< :'$ 5 <%-@4B$VEX2/MP#XN"OGQPD1
  969. XMXP,?X -R< 3VT 8_DT598 (<((OGX!^Y@ ] T  X,'6UD ,;  YT0 RQ98PK
  970. XMH&]\T 1J8%^B50^R()+!)PM20 2H0(VMP LGD &DX '(MTLKL ^X,'&NP AI
  971. XM!EO7\)=78 U]L ,G@ 5OT A@L 4F$ !)( ;?AI2<\ [9)HI.L0NAZ'@J]B".
  972. XM8$%@,96>T $3$ JVX *^P K\=  <P *MUA,ET X2T(M><$8VB7%J60NN  YG
  973. XM1EF9I75/8)<6>)>&P HN8 Q( ((>4< (>X% L>0U"< (&M0*H_X!Q:<8'
  974. XM/( *)>@*X#D%;_ &#Q8 _O .M9)^-2>?2&B?G$":G+ +^<DKXK":4/ !KJD,
  975. XM%T $H0!T67 %_&0'[' $+: .#3 . N %5$=Q=$<'QDF,&MI3?$ ,^7 ']6!P
  976. XM264'LD $3V!/UL +QH *KK!VWRD$J%"8/'"-(=@*R$<.&T .:&:3&S!W,9H!
  977. XM#C0)/1@%29 $2*A^Z[< "["?"X 3[X 3^WF/:7(V4,":Q22@9G $(V /OX $
  978. XM'I %)U )OL ./5 'CP(#"< /%=H/-LF&X' #X!"GR-E3Q+ 0N[=?=N &=D $
  979. XMI" #PQ!T+&IL#%:-#428_< +CL@*^U""Y/_I"N;)!WS0#]'01<\F!"S0!4F@
  980. XM!/@H!DHH!DIJI$NJ?C6QGS@Q;U5AI3\HH!_@ -D@"^V@ DYP U]J#)-@""+0
  981. XM#:]@!S P!12: Y)P1@G6@'00I[!'#!W:#A/P9!R):C(0"D'7HD)@#&G&I@WD
  982. XM0(#I"A_7HCM@!6?PJQZ7AI15=?/#"&!@ DE@"N] ">]@:+'Q#J[!E$^Q"QA$
  983. XM$EY2%;@1H#Y@K[?B V9P#WF  (6 !!<7=)7  NP2#&@P#/1 #&;XC<%8"W**
  984. XM"'$:C.$Z@?E@ VJ0%[)0#+9  I1E#(R !<.9DX!HC;S0!_T0H^=I!2: ?'2P
  985. XM 1U*#M&0#+=3#)/_D 6FP +^8 I,D *[0!M@X@"F81H+()J"YADXX0/BD*^_
  986. XM\@'V:DQ+D0L8X ;:8 LJ<):5P V(< >&@ ; 8 >,( '$4 L=6I&(@*%R6@GT
  987. XM4 OAZJ%@1WM29D2AP+#@<(U:8)[&-H[6Z)W70 =899,GP $9D &3@ 7$D S1
  988. XM$ W@4 3 , S%T .4D 2<F0+(D +BD ;9YJY)H Z=Z7@I01)BH+0^@ ]*BP_'
  989. XM(*!XH ?0H ?XH >Y4 4VT XNT 9PYP6W8 S#P#7 @ ;&4'5M&XS@(+'3  X*
  990. XM6*%T@&HK,P'U\ 0(0 1M0'5 APB_.IP4YYT><+VNH A]NW8LL)UT)PGD_V .
  991. XMX. +W7 'PP ,SA %$' (\\ $3VJYCQ<$FVL:LK$ \^H)0> )4NFT]^JT>O"_
  992. XM>E #>O !GL %]: -)#!9Q# -C$ &7*,*A@ .OIMO^8:<<4H/Q/N[^3 $3_ $
  993. XM;: -C  .@.BH5\ +' 9JKF"VX'!KL74"Y,@#Z7@"&[ &_< /:T ,Q1 ,=P #
  994. XM,\0E(' .1!H%G) &ZJ>D5F(E53 #+!%O/I )2FL;'X ;N)&ZQZ  -5 #'Y +
  995. XMQ^6\3K (D"H$E5 $2J *$# -M2 !^09;Q%@+B% )E8 (%/FP-T +]< &%- &
  996. XMW& ,X-"B=$ 'N' -9P0.L84(_<"6:*:R8&6C_?_P56NE!1J P^PS#J$G(&, 
  997. XM @$0!44[ "G@")Q0M#6Q"T&@Q!4P _J@#_KK SX !/P+!50A(0$LP#4 !SZ 
  998. XM 3;P! %+")+ !RM<#OM3!V0@ :/&QF<6O,%;"7':4U0'IVJ@!L%G/Z_GJ#:Y
  999. XM WR@!;A6":X >VEV _VPG7QP!3O0"+R04 ?@4)= #+38 W?0 SXQ!@,P!DP@
  1000. XM D+,"9O,R:4Q(.I1 $U2!6+@ *@L#D[[ 1:0NJR,!PJ !S5@Q36 #U70 ",P
  1001. XM!TA ".$0J4VD!&. !A& P?EVMJY7S&_,MJ 6C++0"QU\"[&WQ[G,!]:09L@G
  1002. XMR,:HTJX07*303R> "8K_8 J8L 9K< 8M8 =%T .I(2;UF )1$ 5*L  #H!N<
  1003. XMD 2?$1_NA@'Z( ;ZP,]2J<H!^CNLF[H'?<6Q' ^=( ,NL F$0 Z0B@G@X#2F
  1004. XMH+"UX 6NMX;$7,P]10<970O!IP(7>0. ";-\@ U"P UDE& K@+<81YC8L )7
  1005. XMD%#CR0,09@YDX$DT-0,.@!.QD0)"C5%,\!6I 1-CH X%P%A!X!+Z$ 3\/'X 
  1006. XM'=!P8-55K "H+<"YH X7\ 6_  CD<+?@4 D'H K!D 7TT%-LG& 2*['&7*R-
  1007. XMR0->#0Y(<+99( 0Y20?8@ 75F)8>$'NNP*8%A0IHA 5^RP<H@ (01 ]D*@]-
  1008. XM_R 9P: @:9(&C18 "[":(M(J)0 98P!OG_W44JW*%@#0'X 'N"$A5HS:5FP!
  1009. XM06 '[6 +2, #V,!OC% ,(# &PX#&8WNV$ANGO<VV&)IOQ'!@N,9A5R"(QL:6
  1010. XMB, #K8 )=."";"H$N+9@NO1\V$ .M:!_/9 H%>  ,]  HEEBDBVYE.L)NT %
  1011. XM!5 !_W</,"$94#T:\;!I/C#?\XT/40P'^*W?![VJ'=!"FT '.DH,C# )P" -
  1012. XM8&#&%3S(LRVQ+7UF='>U'F ,DN!L+,P'KG"W*Y %K8 *L1W==' "_:!@+FL)
  1013. XMKK &&Y ,66 'OC "ZN  %: .): ."T ##R+9KQ"*-O^!'B Q!D*" 6)0!:"]
  1014. XMSU)-Y/]L3*E+T*BM!PJ #P[0 _7P RK !QL0#1;)"! 0 U>>;[O-T:]%IV>V
  1015. XM8.:)"L]'PU>@"&:$9I7PI2=@#!RVHRO0"BBP HV 9EC5#]C !\;@"X%4 *)W
  1016. XM&B6PKAU# ^^P ,Y0$I'"&,J@)#,@&57@"0[PV?N<"?$PY!^@RJI\WYB>WYQN
  1017. XMP/8P!U NZI7 "#W !%) #SK QL3GVV\LP6O8[SE@YH?92RA F?U S70P1B? 
  1018. XM"&\)LVDVCBA !RG]YB[+!RS0 [?P"KE0 *4<!.J@#NO*3.^ ##[0!/(0'D>W
  1019. XM!T*R[8_N "S/\O$P[N4.T/[_; %P8%W_B]IA  <6, ,-[01\D,O$@ C&8 @Q
  1020. XM %G&4 MNS(9MK,<]Q6]6]^%KQPMNIDN6< +>2@?'APAF](TP&ULK@ *H<.%8
  1021. XM(.(;X 1$$ S%< @LKPZ@S?$% !NKZ0.H,@&W$)!7MAV1H@Q[T.V>L/<M[P!!
  1022. XM/N2I3.Y&;N0!G,6YX !<, )MX 2$@ +1H,MA[ QH  J(( &5$%NS;0P=_8U.
  1023. XM3W'9NP-VIMV:P*C4R@,&L +1D&]J*)XU*0174'<3IP&A4 ?%, @\$1- $ ]'
  1024. XM$069<!7^/ ;R0 &#H$,Y=F/UT!%[8 :>4 484 4.4 (N/_A+:P'D#@5P$,MA
  1025. XM  08_]  $_ #)  /RBT)08\(Q> ,MUW,L[T"27^VNLWZQ( *K; /:K4"&6 %
  1026. XM'J %79_Y,\KZ>7L- '%B!2\L*U;PRX&I1QX8!<0D 9(.7[H2!4H @9(I5R<;
  1027. XM1SI4Z)$OSX@O[A*XLT<D7YT]U*I4<: OB(-X/GP \2$.)Y /<.#D<C##QHAV
  1028. XM]MJ0($%($A]BM<!%B!&HB 1$E59<0V0,$;A:-YK><.6U%J,W*S;P>(-IQQ4M
  1029. XM&_AX\(!H!29&7C>00T%'2*LK&TX0XT=,2J<1ZC*I$Y,.") %!:)D@B).S+]Z
  1030. XM3?[=J]-!3N9>3WZTV90 1SL;,_3IPX!A9DV<F7;ZL.!IS/\1>5\HC"9JSP4=
  1031. XM/DQO5&(D+8JO*4XQ@4-5"5'76LRY_C[#BP</(1EX8#*Q84,MZ?WZK9A4B5P.
  1032. XM/N2ID^HG1 .Q21PN-' 09$$Z3C0&1(GR+N>8%D-Z=; AGPLFJ( *+NX8Z0D*
  1033. XMYFACCA$TFR'"$O1Q *>;8 ,BGB#J:**H"=H9H9<FGH!%%U=XX&,#8HPA X1 
  1034. XMI&"D*4;HP,(8KHBYH;D<<S1F&%3Z$*(1#]:1Q 17O./%@ W6P:(83(@Q+T5L
  1035. XMA%@!&WYNX"" /*H(8J;Z+$AG@8O$*>&!"/Y@XX\_FF"#! 0ZR(,(79X80@8Z
  1036. XMB6@GGTXJ4&<&U5C[0*=X@ BBDR;_8!@A45WL00 !"FSAQ945:B&&&$R,426*
  1037. XM.R*HM!5BKK'Q!M^8JP411HI802 KL$!A R'8XN&$?B0Y2PA<>$"!APV\4Y$8
  1038. XM+Z*1H8<G2NC2 8GP 6* !<2!H@=M;+'GEF*F(:&-5:)1@9M:G*BE$#ME&6*(
  1039. XM/)JP@0M19JB PG3TP,>F#_09HX<[?)$ % DDJ(6$7_;]185:^"AE16.  ::8
  1040. XM822X02M4N.J*CNEXJ&4#"8:Q8P5%A-!D!2W2JZ0?.G;8N%4>3+B"C@VTX*&?
  1041. XM#0);XQ8[9#DBGGC$""(>"_ !,YU,>@"E#9]7<<*)I&HAI*EHB"'$B5^($"8?
  1042. XMD?*QX1]1_\[%H$(++/ !#A\\D2<48T@ QU<OG* '";-5"(L8;&I);@P0BAB&
  1043. XM'G",<67A6OKY%^+I<JBEF!X\R. $2[#86(A^/+C!!)3[T4(27G;800A)).$!
  1044. XML%*\Z,&.)G810Y\%XG'$ D<P\L19H>EQPFA*:_&B$B,8D<"+%Y[9Y E:U,B'
  1045. XMW'^XR"9"!RP P@(X:JAB GN;(Z:251@6F@XDFDNQ%AL#4>6.+,B0X#A7&"9&
  1046. XM[\J)F::('DYX8Q\35D#A\ U0X8&5AS>@]?$K5DB9'RV2R:*.8>KP 8,2W@D>
  1047. XM#4;W@3H@P!TD<((7&)"O!"Z"*EE0@A**0 8&T X)3B.7#3IPBO_+S.!8"JA!
  1048. XM/";@A56,C0RGDH(1X!$->)B-6]LA!AV,<8- @, 7H" #.!BQ/>@UIW*5N\$M
  1049. XMI!",M>PC RKCP0HHMX$K2(<'2R'&"D0E!"&08RDWJ(,OQN$#,7@B$P,  @T$
  1050. XMB \JC" !FU@%/+P@ 5N 0P+&*,4-=*"#%$"!$B*X!0EP,(=P]0)J43M%!921
  1051. XM"0O4P \?: "^O% *Z4FA"*J0 AF\  ]P<*M2_[K!-<!1A^I%X!8Z!,>D*G4#
  1052. XMB.&-&(@81@_JT(@W-.($N^H'BE0DA"),1Q)>X8$6M" IRM4"#"R @30^$(R9
  1053. XMI$.,-$C6"+0QATT 0HU3( (WVL"(:5S_"A-I@ (4G'$$'(1"!FF:0!.@QD%1
  1054. XM8"!X"O!#"08Q#0F0@1[2*P<N5-$#(M##"X2@@R5%)3U$=(,)=K@%*(QQ!E2X
  1055. XMHCFUH,,-Z$",?MS@5&CH@15.H E%Q-([-]@ '5:P@VLPE!@:@!C\DM$;8Q0A
  1056. XM"_(00T62P E'X$,/- C".1 P@B?8HQ" D, JM"$+6[2!&Z 0P &. 8590$$.
  1057. XMQ?C!$-3DGPO8P :GN(<W?( '/^"C ?9X !G* 0M&< ,<:  &&HI!#T+<$Z$Q
  1058. XM)(8KC%$+-,1 !(P8AC&\*DJ((6*A39F$'7K0 TN<H M'3!D/CB0)]JS@.\38
  1059. XM "+Z08[%IJP(_R;=110<8DP!.B(=1S!"'B[0BUZXP1;Y(H(,AF&+[!4A!;-(
  1060. XMPS;20 4[L$$6?PA7/?*0CU-DXQ[4L$ 8(I&)<\#@#D6X!3>X48@B+&&>VK G
  1061. XM(8A6*8;.#1&&< 9 XWH&<-!!1^ (2S^:D@4[V.$(^U"$%?:1Q%PJMGM=X0$B
  1062. XM;A!'5TB"''0@!S?0D+_#<((3H@N> _) &LW:00TV^*8M1E /-[@A6#%(1#83
  1063. XM$8,Z',$&0SA%N"[@-%ITX+90\(,?!B /"@2@"5)XPC ,L808+,$.H B:! B!
  1064. XMKQA*;V&^4,48=  *;M -$7P0%8["=@-ZB$\$1] $#QYA!45L !.5@__?>7D 
  1065. XMC@W<@,FED$0IOIJ%)HCC'06(!V6AL(L'3, &];@ N7J@!C?4XP]$&,$=U& (
  1066. XM*H  !,B LR?D0 4U#&$4O="L@&@!53-\( S, $(##O&$.V3.$,!80B#L0(0\
  1067. XM3F,5VZ(4.'A@C$J XY' ,,(M)L&(ZC:E4G9U,B-\D;DC;*$/C[A"!!3A 5XA
  1068. XMEE(_G)06HE&*:%#,"&,@TSN 1X,R!$$>NAB"@#JR5R[TX!2T -<(ZN2&(]RA
  1069. XM"7H=@S+VH(Q_W-F/ J)M!?: X3 X8@SQ4J5_[> &(MC#)"2PA2W,YA4ZS&T%
  1070. XM$B@"",90C%L,PRJUJ)S'P,&C88A 7D"V D7_=V"%7'IEE-IM"@_(,VMCV*$8
  1071. XM1<C$&,0P (G0@!,<MO-_.M"#!O3@'W4XQ2F$<0I9/&$$>="<%GM !2K((1LV
  1072. XMX"S4]%PN;V X!%L>0['O( ,9R$(&H<"!.W#035L$[=,RO,8-BJ$*50 W"^"H
  1073. XM[MV( 0Y$-.461?#NC]]@@BX<8@M"R,%T2$FI&VAW.MB(,C'RT(.&[.(B[TB'
  1074. XM L0P APHVPW'WETGZE !+OSC'U1PL%-MT(.-KWP,=3 0S$?A5&R?H@?Z$$<8
  1075. XM;KZ+> 'H"&&^P @HP"@$? $')$ ",:+1;DKW30G5TX%7?]@]JC<%%'<0P1V.
  1076. XM<(03[* 1?_5 0:*A_UWMXK@6*- 8-DK!B#H\8'.[" (G@,",=,# 'O:0 6<U
  1077. XM6.P*%(CEQ>Y ![!?AW\$@PICF+,<YKQXQD^8%E380R9J$()C.&,7&&!Y#VQP
  1078. XMAPN8>00?:H<M]/5IM4ZJ&&X#*$ZSKN]9 7"(!@G@+LTY@AYX P)0A$; A'U 
  1079. XM!%W!$>;*$8_A VR0 %\X@A%H #$0@TP0 P4XAD/8!#5A@P#IA6PPEPJXAQF0
  1080. XM QC$@!FX!SDH$&G;@SW8!?&+OU$X!<$S/RY(/SQ@/Q]P!AKL.\&S@3P8 ONS
  1081. XM!R38!*9HMX4AAF( !K>JL4I *[S)D1RPM.[ZL4ZPA#XX 47PAQ- F?-"+/\<
  1082. XMTZCT(8?]:8<'$ ,-T0,]@((6$( ?L(<A<(-@^P<;J !1N(=S@<$9*($(T0=E
  1083. XMF($<W$$=E(,=/ ):B)H "9!\Z %E2(/U:S\QF,$7S P;N(#-JH<A&($V>1ZG
  1084. XMF+2PR8(QB($>,(*LX(,5Z!ZT6A%?^+'9"P83R(  V()#P(3$ @<^X(&%4I$)
  1085. XM= MPZ($F0 !BB0@HP(,QD(!;^ '8XJRFZH#=H8(94(89Q  =W(,@& -]>+]O
  1086. XMW -]V(-[^(?"<ZI18,=1Z  J4+\0**H4D F6RS[&&X5PF0!=4(&DF#IPJ(2%
  1087. XMXH8QD(9YN(6U2BL4<8JD 84FZ($C$($&* $"T(3_+0 #(<@","@'1D"1Z>B'
  1088. XM=3B+RBF&)93#3$@'1] F : ',M"%/^ L/]*@W1'$1<0 .8 ),2C'7:B"72#'
  1089. XM(%!$[OL'^;,!6J"%4<B'(X!'.& _1QB 78#!.N""_R+*?. L&4" 52"!Y@ '
  1090. XM4&$=;@@$:0@&(R"#2I%%O*D%!I" =K"#!FB"!GB%$C !(5B'=< $-)"",V"$
  1091. XM6B"LE/$.[V"K)O# +,,'**"!8M  )Z  -O"/F'NJW>&"%_03?7B)*@!!RA0#
  1092. XMRJR"1$278DO'H1P%-U@\*A #I=P&*$@!#-B%Z_M#6LB'4=BL//B"HV@*@$0%
  1093. XM2C&&8!".(JB$B+D;ZT*:_U4H@MF+R )0AS= @4O@ 6Y@@7,HAK421L3B@1MH
  1094. XM"[]A"#$P%CR@ 1'( 0EP B+X@PGHA<TB/\>\AVPLQSVX3,SLG,LT1QJD K[S
  1095. XMN*$L2EHX BX0@P\( 4B  DYPRAE@.37XP<6C2EG0!:1H#K7*RQ6) E6H SN@
  1096. XME-%3PVBP!8<\@@9PRQ(PG!M A%NX@WD!!7I0*/C9%7Y !'EY@$ZP@$Q R7=8
  1097. XMAQ>0@#8(!9<,3YB,FMUQ03\I1YAX"?;D$GV($+[C B[HA-5<O,6SSP]8AA# 
  1098. XM@Q0PQ#D3!2Y81U#,@WK0AE](G>8P!H2DAT 8 P[H 42(!A6!F%I8!'@P@MD[
  1099. XM@O\6($X,[8=2R %0.(=F.Q@M*(5=61EB2*4[@(&;R 0:2(<(X(<ULH5"D+#P
  1100. XM',J8Y )AJ !AB$P==0 'N,P@0 T:!-)K)-)\H$\NV 5Q\ ,E'8 @B$&62T?6
  1101. XMI(7-^CD$0AY4R,MH (=@ (8>B()*.!H^""5*08(G0--.*($24(?:C(9:&(0B
  1102. XM>(!@ "C D(0<.!EZ:((F>( CP =F20,1T( IF#H5L =J#$7RBYH@O=%M? D'
  1103. XMT-'3F$$DY(+LNT?7-,JH&0,?J(%(*(/3' /_S(;.E,3Z&X&BL]7DB9%?[8%Y
  1104. XM"@104)'$6JA:: /QF3V+V%4^H ,O( 8C<+X'8(([R$O_;&B<#0B%'I '&  "
  1105. XM3X""8^"$=3" =7 ".M@$6*!&USQ46G!,OHL0TY#,EY )#/!1)/0[CP"0UA30
  1106. XM?Y #3SB&93B&IG1/*DC'4X :)GR"-B :IU@1%2"&@&D!8'B%>1.]3\F16J" 
  1107. XM.^B$@^V2$JBD2B !&%A6,BB"8/ 'AB6&-4"$(YB 9LVF-#@&3""2&U !0K"%
  1108. XM'T  V)HP\ML@J>$"*B!$F<W,U.#&"!&%"NB ?+A9&[ V\I,#!Z"J,DB'&1@#
  1109. XMS/ [  F0"X@3$K@DKD %;FA:";B#,;"#%C $"=""4Z(4"<#5AVP A"V!O%R%
  1110. XM6Y"'[[.7.P@$<+ ??C@#>3B"_P<H@0^H 6AH 43@ARM1 9(MA#2QL]8\U&OD
  1111. XM@D"$S,A$#<$=U^KK $D,$-9D3!NX!S.P.4<XQ/?,ANR31 &A4A+@ ^7B"D:(
  1112. XM$48J@C%XA3J0@O7"MTBKAX<\@DY8TQ)@VEL@-&GP@6+P E!@!W#0@&10NB-H
  1113. XM@BVB*@@P  -8 RU8 15P A7X <4<@@LPRL6K,,<4!49M63\17#^9@:DIU_*]
  1114. XM7,XRRG>L BB0/&B0@WNH * $P@'Y)#[ FTHSAO;U@O\+AD 0 7 HA9"JA5N@
  1115. XMT ;0WUTM !(@@R=XK#$0A#O EQC1@#4@ Q%H@B_X73P0!W0P  V0-7!P 2AT
  1116. XM >5U3?_F'<I_.(46/)=[@,S4".'J6TWF-4K."C8;Z(0]\ 3)*X,94(?W+%< 
  1117. XM8<T.05J%K85IT*%":%HO& 0N#88[,(8<J)1?)8*UK%!UP&1,YM [N 6Q]85A
  1118. XMT"[<309&CH)Z.(0/T -G* (-D$Y^V(!?T 82<(?$Q%NCE,0*<UYS$<3JJX"6
  1119. XM'=<2[DS7G+ 4MC,;Z!UQJ(%F"($]4(?G34+&JX<O  <OB*45J80=7F10"(8H
  1120. XMJ ,6 (5*V8 <H(=B6$ +)4YU*( "V)\[P"$CL)$P)89DJ)=#@ '?G9DDN $ 
  1121. XMT( D<P4B6 714-[PY."AO,8U;D%>#N$?%06_LS9,94T!@<G_3E"&/5;F$KB'
  1122. XM!C"0.<Z'"<"!U*&#A36&7]CA7XF&6^@!_NB!85BH,+T%F*E0B<3D='Z]#BT'
  1123. XM(PB+%(D&'C#808"!!FB!,3B'&[@!5R:&1?B%HUT%6O:/UL14@N8@QWQ>%W1C
  1124. XM&B37=!P%EW1'P2M*3-59]6L&2$"7'@A2RPU%,ZJ4:L[2+!4;";"#,0B$;B@"
  1125. XM, T,(] K).Z$>XCI I" *3""J:@%.M4";."#2?@V3([(7<B$"%B'-5B'W@B'
  1126. XM2G@"' #HD\59@K;4('U>-Y;A%W1C<TG'7G!)7.[,UKR #I@!3UB_/BZ #N@$
  1127. XM*'4:S$4 $IA5'B $8Y@&8U"!7_&"_QNX@TP)!E^0Q?7P&X[KA$Z(:73F@V@P
  1128. XM(L-YAG"HA5( @"A(@@68B5U !A   PG(@>TF!L*";%M( *5NQ]:4Q.SSNR?5
  1129. XMY>K3;$I-PJON!0W*QU$@RF+^ASWP"2C0.[Z+F@X(LPDP!H;"X4EQ!=)"6N;R
  1130. XMA3&(@AX(@%^(AFCP O'9JP; Z[P&!Q/@@!NXA UP!4)(AF28@G> ")E!ABC(
  1131. XM;@UX 17!J.0A EN8@PO&5G9TZ'_H8*AN0<UVX\(5A<,=@@#Y@V;:!#903)2=
  1132. XM 9L0@PH8TD"&N3O0!E>(!F'T&%=PA39X42=(WQPP@6_#8D98A%J@ASRH PLU
  1133. XM[KPN "Q@ ?\6D,7MT  -\()5W%0P0@8IJ 4-0 @O:#(5,88G #H$".A>:$>B
  1134. XM5-GSGAJ^A5X;[SL9OP!)' )=^ %= '(UF8 \" 8'\(1=0,?*=:H+D %%3I'N
  1135. XM<3)4( ,2F 9NH0-^L(8H  '8XX9HH <*4*4%-&Z\KH!T-H$B< 5^J(3?H#I0
  1136. XM@(%S&(,22 (+X  =,/%[N8$<2'%C^+E%AZW%9,?YO-YT]#L/ENJIEF'KS0<[
  1137. XM:T=V'((TR8,C.&TQ<,H&^(<&N-[+(P+TQ;=^D NU(H-5"'6$*@4/,/4F: %M
  1138. XM4'6_"08+Y1-T3N<" (,KB&>Z  ,"*()SF  9J(<C&(!WJ+I]IH?_XV H23X5
  1139. XM(L"!+UCV.V-'Q4UC2\UQF9QVS>;E=)RPRB[5/##M*O"$F2D!.8AVIVH"-XB1
  1140. XM?@ '[P@E)&B%-KB%59  8JR$5P"!-"6"?#G1+V^ 3";.=)ZT0H"K+ B %M@%
  1141. XM$0"181@#2"  HO8"I]@W/I $Z9$%(E#V/E)A\G[V&9=V]7Y!7JX F:1$&_V'
  1142. XMT_Z #_ !<+P'+B#W2Q\!<"@:AVFR H0%,K"%=^^-&[ #$#B''N &"7 'AR1N
  1143. XM=$;G6.^$4@CB$0VB!=(@"&*" ^Q4$)5B'AC*H [4K.Y>%8:  ;5 3%>9S
  1144. XM^;;L@MZ@)Q7$S:;!:K?>>[R,(-B# M@%_Q_X 'R8]!+(Z YP,!FPA81KJ(:J
  1145. XMM'+ >:SL-$D(@-D0 5L@ R.PT-;557Y/Y\?GA1:0 @Y8@(4?!",(!1N( 55 
  1146. XMA\:&F.U1#E>H.NF1@7(+Z&SO!3\GWVLT;QPW>]GW[&BO  R(AP\(@DP "!\6
  1147. XM/H@+$H5+G7\V%LH@P0<<CPT\5M3"!&X8/1ST2*"B0VQ#DR@M>C "-:%3@P8%
  1148. XM.JEK66!EL$)HQD1)PBE3CR_VC!Q!IH,?,1X\:A$%9PP<G1ODP,D@\@7!GR&]
  1149. XM>@T9U<O&J ZT.G#=2NL?5RZB*@CC4J'"O0I<.G'Y9Y:+.@<?+&0* J4&$'%B
  1150. XMU%')1^7?'36@B/\%W=#OQHU*X'YQ(]%F8RT^?$IEJ5.GP:TG>5*F5/?R\ZM.
  1151. XML *9:I&"QBX87T: \I3EAI<-=(9Z!'<-7+]:Q&XT10!5:B^KHX9[U0KVWZD.
  1152. XM__Z-Y6+V[%JW_Z"7D%MC0! @>/!EVA7E^,()QN#UX]'O,(]*B%1P6W6+Q"I7
  1153. XM=#;P,_(JRI%;#S:G['3O\TN=%#!,#RU$X8@C39"!@!%1B) #4$Y01!0Q2!A3
  1154. XM"86U/#%,.Z%$555P6-E RU8=B%+<5LLMYQR+;CEW5@4S^ !'&/&((0X<'\2S
  1155. XM2P4]<&&(&G:$0E@_*Y1W6"5D% +**@ELY HA?& 301W!-&&$+$W\T]__9YZ]
  1156. XM%$PQYT21P@ BP&#/%WDPL4YLKJA0RU"Z66B,;H0]H<T(%+ 157#Y$$=B<<K1
  1157. XM,J)RA2JGHHMGS5#=!W#X ,0'D?H01!UJ<)%/#[*0\%&1YB&FPC2,,)( &:N0
  1158. XMX H?Q/!S2POJC#-,$S9P5H%G7A806A2O. )%'8,@,(@ONYQA0#0;%.+"?%[4
  1159. XMX@0]9*@ #F'$$ '*$SCHPF<O^= RRH@ETB(*5UPM)VZ)X:XXEC#WS*!/%?&D
  1160. XMD@L&>U0AAPU-!/G/,%[,-U%Y0K6Q"B,JN'-+&R1<0P<YV C0PQCRP'!' UNJ
  1161. XMI Y+M][:"0V.U)#:%\., ,(Y_*Q3"C&_P$(8_U$2D* "&<9$6XPM(^"@)W#<
  1162. XM#C<*H%UU,*)"5@TJ+E<V[!ST0D)S,4,=L?:0SPCYJ $8&8O<()%0/"3U6"%D
  1163. XMW((#&4ZH@' I$HC0<!Y-=-! !6C7^LI*H94!32;U?-$.$78HL<X-!H132SBM
  1164. XMZ.:%$Q)(,(T*C$1##"%$D$&$+7-<*]7-.',;J+BC_+'G$%5%/DKF0WPXQ 7Y
  1165. XMY'/Y'[W\,<(1=O2@C1,?55W>"NN1P,@J[MBRBA,=\4&.!..4\( =1Z"=T@PO
  1166. XM><EV)V70T ,%[?Q1##(1K(,W.(0L4DB=$L CP2K3@%)*-+44HT([[CC.IY_I
  1167. XMXUP<N.#V\@/\<_R@R_^>>_ZABR[STR_5!4/@G_D?+F #*MAA%5ZX@19>QP-$
  1168. XM@*,-3@A%)7!PBU7 HQ"_^,@-'A ,>=3A"";JS-I>$IH/ &$0,+A%$9 A F*L
  1169. XM@P\WX$,_Z  .:!&C%C.<(2-JX04O*(X;MZ# %_Y0CYH)9W): 9=6!F65/Y N
  1170. XM<U:12A[J(8->N$$-:J""#61PA']LL1L]@(47:GB#JDGD0N!  BC:T(;WU,(8
  1171. XMC-B #HTPAB-T@HX-\,]_ /09..0!!L.X PC&0 ;$\. &T7(%.'1C0QM6PA@2
  1172. XM:)T1*@&*4.#@!^W(W%2$$R*O(+$!7!E.<*JBN:S\0QC*4,8>8O$-,\0"BSW_
  1173. XMX*(->B #,D3K=4&I!!(6$XIIV.)V3JC$+38PM4F,H0<H29N 7*+' O0 !C"0
  1174. XMAS-4,0G$("8IJ;(ARFPX0S(DLA:V"-4MW($#-HS@0U,)SBCR431/(E$K?MH<
  1175. XMSK)A2F]0@QJQ,$,J6KD0Y_S#$(R(UFXB,L89+HL,H6B#+1A! A* @QN[\<(D
  1176. XM@M&#M%6@$Q:M@/$ ] HCU&,<G@ !##: B-VLX 8>(08=B,*'1<[0&"0@"B.F
  1177. XM<8M")  ']F!BYZ@2''262Q1(W-;-1ID<81!5&%3(AC*X8 -U<N$>-B@&"4A6
  1178. XMPT(2(S?8])H1?@$*6_QB%> HAR&)P8TQO")M][!H_\4*8*N7R*,)8_@ &.B!
  1179. XM"*K5@B(H0T12M F.1F*H%LZZA4+=H2><YK1/D_,DN; "S^'8X!3RS 9RU& #
  1180. XM2TGG CDD#!]X@)ND$(.@$FB#-E81"C*HL1;ET,T-(D"%8*Q$'17%:$;UJ(X:
  1181. XM]( ,7D $(6-7TD42Y08W-,HTEF4,,C#"%B1(P!SL83]S[K0!62D76(1&"]'=
  1182. XM+)/J+)H;\G$*+F3C+WD8 5$B,U4^(").$EA620QJ"Q6LPK3@0 PC@A$, 9U5
  1183. XM0&J]+X!*\($Q"* 68W0%#URQ E?XMQ:(J(4,9\C EM9B<,8 +'QL <3E8O)F
  1184. XM12N75D:T5#]=X)R8K,=4;/_0EAY000WMP,%*^Y'9H:2'*(@X+PFV:HM;S)BA
  1185. XM+CCP#4 1C#%T K;&6ZLZHJ .,?B #!(@#"JH-F >U!"U=?UM&\\K 6 6 CYM
  1186. XMF,,7V*!EPF:26UH)U\X&-2+1J3,?%SBS.M70@6S(X1]N^,<%</!2CT@"P?VH
  1187. XM!!8.?$8O2$!Q:>PE"2K!C40B@A%U* %]>ZS,^T;A)7" P0&/7!XZ#'@%[ZT%
  1188. XM/31;8$O_%ASG39(*G(#0F;$!!EN&W%2<JS.B%4UH*Z("%<12 5@3\!]H&(83
  1189. XMR& >/LAFH'V]@0Z=8(0T;G4:J_C%+>@TY1;L@25WC&T!&AWM C1!  <LKU R
  1190. XM.V#_0QH8P7C5)@/I48GSUF(:E7 @"6Q14_IQ.5N,7<BJ#>46M,AA!LI05UK^
  1191. XMTH$ZW"$!7F@#,7CMP@ CPA6^)8JRB$"PK?ZB#4JJ!&+H48<@W*,$SVX)QE\B
  1192. XM;8@?$#$KF VE#;X;:)G4D,#N=(/W^B82D'8:./C"(.P'N09<F"LT5PYTS#*#
  1193. XM/>@# S/X^0SN084&6*88833&><XSE((G<H9'!D<Q0&'0@[:!/3.\ 3U>L0MU
  1194. XM6)PE)?!2$M@6A4;3@YK"G(U0*F'7&XPT*1YQH8*[:4-Q.Z&!JY  />9029F'
  1195. XMB%M"<W4#S'*/P:M+#GN(%] '3^(>W"(:B4GZ& G.Z?""_^,)H+B%-@C6!F/8
  1196. XMHA+C1L3$[Z&..V9<A&Q[Q2N$4-)"LMC Z@$''"MQ&&O"T;\*3GDM%+/7KL&#
  1197. XM'@F@P"!B7CIW+U5H':@ SH%>;SD$00X8>'Z]Z] )*O@""5Y03[^&8FD&:K,H
  1198. XM1;A\YM78!D: @Q$WD$ P=E$ BS? )=(6X4N$8)YM%]+U[]U-)5R85\*</)'G
  1199. XM];33)0D]P,/V)$ "_,">R,,YM5H'K,5:W(,<Z,,>S, 8')[S58'/_4,/U$$[
  1200. XMU) Q5(U0W("E80&"^5_N/8$1W((1X, JK)<ME-_Y!4,0<%T#L$V031OJY2 6
  1201. XM",4*3 1J[17$W=)0W(#!>82+O?_7#=D?.)!!UW@! 0+"[^T)59 9O"U'X,6(
  1202. XM')3 SB'>\P7=*]F!-A"&?.A6>3$0AAR<#1D#+H ?P<Q8(324?^V8%J;$*ZA$
  1203. XMH^7@Z8$@DP$;(B#"A>PAG5A-P7';R:6<!("#'\+4>VP/ 1J@M001MEQ K'@2
  1204. XMT6'A#.S"!-I;T&G@/PA)#1G<"H1B286B,:142M6"FWS?+7P!P80"-X0".!A!
  1205. XM#): 6K5  XA  [3 K9S>+FX U4R$2=4"*AB#,41#4GC 5-45G-0".?@6 _E6
  1206. XM)="#N)V1,:@1"4@ ('A! BR4(\+<'SQ +\2*!QD3%52 '-1;,%1 ,-S#91Q!
  1207. XM#]P!* #_&R%-A-6L "K$#C6=URT,PS"  B@8@=;8PRV0P3?=0AV, :(U0!Z,
  1208. XM0Q,(#R[68"Z^0M6L #_$$"HRPC!N /[106ZX75"@##@@DNX=XF)P7AML8TW-
  1209. XMS%,,PNE,@$OFP06,(T+ &CK.VEEM24,6@;6)%";TP42$XC5\W('A5H/= A$,
  1210. XMV[!MS>4A&PG<0C!D80,T@3QT5!-491.(P!&(0 NT@!5@@@%(1#_ $3CP B-4
  1211. XM O]!''HLHW]YA&;IGJ<1!1)40B'8 @[85#M,0#UDB:Q0(LWU)1>4(^'M0KP$
  1212. XM0;R4 /-5P1@T0020 2*LPPHXIGEH%A:,$6(<XCX.@PK:@]:$_P+!D,$TM,$8
  1213. XM!(,Z',$$/, $P, #C -#'D(3',(1- $E=$$?7 (F:.2 $2,-^:$+Z5_)Y16X
  1214. XM8=H9%84*W$(H&,$(U,,=Y(,;N$&LV, 1+(0'>=!?"ETYU@&LW<,8S  &5($G
  1215. XM?  R^  31($)Z  /K,-$ !BE)05BV!#F]>,_#LPDD=8:J1^UP< $.,P(/(##
  1216. XMZ*=J!L \4$(+8((D"!,BBLJ!$4,E8,(R,IG;K26P(=)>20"P$4(#A4(HM$,]
  1217. XM-$'HG!E,B@X#^LA;J$4#], =^4<0B($#/ H4X $>.$(2!$ $3 $U]:&G0.,M
  1218. XME -F_N-FSM1FBH'T'<($,.1I/A-J/O^ D3X !+! %SR"(1726 X:8302B_5F
  1219. XM, :CZ[U8>-5"&W"#/1SGF;G!!617/CRG<YZ-JSE'Q 0>%4Q?C 1!BOH %, I
  1220. XM%$ !--# .[! !-Q #BQ0(?5#9QD#-VA#CH("UW"F+7">$<1 2EAE5<K#.$SE
  1221. XM Z"F,\4! 9S /( !%O # V&"^7W$%!C#&-6"GRZ0;@RA?[G"YW53 W'#:M0#
  1222. XM3)X9K(9.JRT$8HF+)_G(^NF#&(@!$%@ /C@"/N#!,3@"-)1!.HB $2!"#DR-
  1223. XM+]Y J+A ,=S"+4@=C0TDRPS#+EQ&0QX!MS(JI)YF$IB $.@ !+S1@0$J87B!
  1224. XM&P7%#8PJG*S_)]R]GEQU$QJM1A[D02^<62]TJ#H-C?&=3=#T0 ?TF'8Z@ , 
  1225. XM@4   3[@ PU8 #3@ Q0< Q1D CO4)H0 !3@4PCXR@M;8 AELU;F1P1.H7U9&
  1226. XM91,LJK<:J2F<0 1@PCZP -O= #%.32FTS.RQJS+ZIF:!PS30PU'4$#T4PFI,
  1227. XM "8%!ZQ>EW/^Z[]Z$EJ40! $03S$ Q!,K054K04HP,):0 T<0R*D0!8@@@;D
  1228. XMP&Z003D4@Y+< B\Y"VG1PQVP%F<\)"YRZSE8Y3BPP!;(7P1T@2_T0Q^"JA?D
  1229. XM ,>RWM3 R3.*ZLDQT#181&>!PRK"P A,P+X:K>@($+PIK2>!!=HL_\H,.(#4
  1230. XM3JWG-JROZD&P;BT4I  [3($!_*DQ#,.#>2:/;AX)W($ZO,+)VN(MWF*WOF95
  1231. XM3D( - (ZK, DF (FL)U9?L0M8$)2L-ANN (B6)H\&M@TA H]$,7LK,800.Y4
  1232. XM;*B'NIK-_9URH(VZE  &&&SG>J["*JP>I*\>;&T(T$ +Y.DZ[-4P)$DA\!+!
  1233. XMN!0], QGU*$MUB$N8F6W]@$F!, .K ,F[  +]"%NA1$C& ->E1=EKL"%]*89
  1234. XM$M=1U (2,((]V"?D=M@HH%G1&,K.5.%9J,L,/"W4'JSY4JWH^NHQU  >A$ 9
  1235. XM),%K$ .@6@@9T,/]MA<X,$Q6%H!*^&\N"F]/"V3E$9S )>S )V ")@B!$C1O
  1236. XMNQH2,?(I1 1%'SJO[2&"P[D (R"!#15"*!PGY)H9YU"N\8%%]S*M?_R<^))O
  1237. XMU):OPE;MPBZL N@!),BP$D2 2'%#N54"R[',+WC!*LB7\-P*1-9A+HXH5HI 
  1238. X$0   .U;M
  1239. Xend
  1240. END_OF_FILE
  1241.   if test 21738 -ne `wc -c <'testimg.gif.u'`; then
  1242.     echo shar: \"'testimg.gif.u'\" unpacked with wrong size!
  1243.   else
  1244.     echo shar: Uudecoding \"'testimg.gif'\"
  1245.     cat testimg.gif.u | uudecode
  1246.     if [ -f testimg.gif ]; then
  1247.        rm testimg.gif.u
  1248.     fi
  1249.   fi
  1250.   # end of 'testimg.gif.u'
  1251. fi
  1252. echo shar: End of archive 10 \(of 18\).
  1253. cp /dev/null ark10isdone
  1254. MISSING=""
  1255. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ; do
  1256.     if test ! -f ark${I}isdone ; then
  1257.     MISSING="${MISSING} ${I}"
  1258.     fi
  1259. done
  1260. if test "${MISSING}" = "" ; then
  1261.     echo You have unpacked all 18 archives.
  1262.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1263. else
  1264.     echo You still must unpack the following archives:
  1265.     echo "        " ${MISSING}
  1266. fi
  1267. exit 0
  1268. exit 0 # Just in case...
  1269.