v13i021: ImageMagick - Graphics display programs, Part05/21
cristy at dupont.com
cristy at dupont.com
Wed May 22 18:57:36 AEST 1991
Submitted-by: cristy at dupont.com
Posting-number: Volume 13, Issue 21
Archive-name: imagemagic/part05
#!/bin/sh
# this is img.05 (part 5 of ImageMagick)
# do not concatenate these parts, unpack them in order with /bin/sh
# file ImageMagick/image.c continued
#
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 5; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping ImageMagick/image.c'
else
echo 'x - continuing file ImageMagick/image.c'
sed 's/^X//' << 'SHAR_EOF' >> 'ImageMagick/image.c' &&
X count+=(q->length+1);
X q++;
X }
X /*
X Guarentee the correct number of runlength packets.
X */
X if (count > (image->columns*image->rows))
X {
X Warning("insufficient image data in file",image->filename);
X DestroyImage(image);
X return((Image *) NULL);
X }
X else
X if (count < (image->columns*image->rows))
X {
X Warning("too much image data in file",image->filename);
X DestroyImage(image);
X return((Image *) NULL);
X }
X break;
X }
X }
X break;
X }
X }
X (void) free((char *) pixels);
X if (image->file != stdin)
X if (strcmp(image->filename+strlen(image->filename)-2,".Z") != 0)
X (void) fclose(image->file);
X else
X (void) pclose(image->file);
X return(image);
}
X
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% %
% %
% R e d u c e I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Function ReduceImage creates a new image that is a integral size less than
% an existing one. It allocates the memory necessary for the new Image
% structure and returns a pointer to the new image.
%
% ReduceImage scans the reference image to create a reduced image by computing
% the weighted average of a 4x4 cell centered at each reference pixel. The
% target pixel requires two columns and two rows of the reference pixels.
% Therefore the reduced image columns and rows become:
%
% number_columns/2
% number_rows/2
%
% Weights assume that the importance of neighboring pixels is inversely
% proportional to the square of their distance from the target pixel.
%
% The scan only processes pixels that have a full set of neighbors. Pixels
% in the top, bottom, left, and right pairs of rows and columns are omitted
% from the scan.
%
% The format of the ReduceImage routine is:
%
% reduced_image=ReduceImage(image)
%
% A description of each parameter follows:
%
% o reduced_image: Function ReduceImage returns a pointer to the image
% after reducing. A null image is returned if there is a a memory
% shortage or if the image size is less than IconSize*2.
%
% o image: The address of a structure of type Image.
%
%
*/
Image *ReduceImage(image)
Image
X *image;
{
#define Rsum(weight) \
X total_red+=weight*(s->red); \
X total_green+=weight*(s->green); \
X total_blue+=weight*(s->blue); \
X s++;
X
X ColorPacket
X *scanline;
X
X Image
X *reduced_image;
X
X register ColorPacket
X *s,
X *s0,
X *s1,
X *s2,
X *s3;
X
X register RunlengthPacket
X *p,
X *q;
X
X register unsigned int
X x;
X
X unsigned char
X blue,
X green,
X red;
X
X unsigned int
X y;
X
X unsigned long
X total_blue,
X total_green,
X total_red;
X
X if ((image->columns < 4) || (image->rows < 4))
X {
X Warning("unable to reduce image","image size must exceed 3x3");
X return((Image *) NULL);
X }
X /*
X Initialize reduced image attributes.
X */
X reduced_image=CopyImage(image,image->columns >> 1,image->rows >> 1);
X if (reduced_image == (Image *) NULL)
X {
X Warning("unable to reduce image","memory allocation failed");
X return((Image *) NULL);
X }
X reduced_image->class=DirectClass;
X /*
X Allocate image buffer and scanline buffer for 4 rows of the image.
X */
X scanline=(ColorPacket *) malloc(4*image->columns*sizeof(ColorPacket));
X if (scanline == (ColorPacket *) NULL)
X {
X Warning("unable to reduce image","memory allocation failed");
X DestroyImage(reduced_image);
X return((Image *) NULL);
X }
X /*
X Preload the first 2 rows of the image.
X */
X p=image->pixels;
X image->runlength=p->length+1;
X s=scanline;
X for (x=0; x < (2*image->columns); x++)
X {
X if (image->runlength > 0)
X image->runlength--;
X else
X {
X p++;
X image->runlength=p->length;
X }
X s->red=p->red;
X s->green=p->green;
X s->blue=p->blue;
X s->index=p->index;
X s++;
X }
X /*
X Reduce each row.
X */
X p=image->pixels;
X image->runlength=p->length+1;
X reduced_image->packets=0;
X q=reduced_image->pixels;
X q->length=MaxRunlength;
X for (y=0; y < (image->rows-1); y+=2)
X {
X /*
X Initialize sliding window pointers.
X */
X s0=scanline+image->columns*((y+0) % 4);
X s1=scanline+image->columns*((y+1) % 4);
X s2=scanline+image->columns*((y+2) % 4);
X s3=scanline+image->columns*((y+3) % 4);
X /*
X Read another scan line.
X */
X s=s2;
X for (x=0; x < image->columns; x++)
X {
X if (image->runlength > 0)
X image->runlength--;
X else
X {
X p++;
X image->runlength=p->length;
X }
X s->red=p->red;
X s->green=p->green;
X s->blue=p->blue;
X s->index=p->index;
X s++;
X }
X /*
X Read another scan line.
X */
X s=s3;
X for (x=0; x < image->columns; x++)
X {
X if (image->runlength > 0)
X image->runlength--;
X else
X {
X p++;
X image->runlength=p->length;
X }
X s->red=p->red;
X s->green=p->green;
X s->blue=p->blue;
X s->index=p->index;
X s++;
X }
X for (x=0; x < (image->columns-1); x+=2)
X {
X /*
X Compute weighted average of target pixel color components.
X
X These particular coefficients total to 128. Use 128/2-1 or 63 to
X insure correct round off.
X */
X total_red=0;
X total_green=0;
X total_blue=0;
X s=s0;
X Rsum(3); Rsum(7); Rsum(7); Rsum(3);
X s=s1;
X Rsum(7); Rsum(15); Rsum(15); Rsum(7);
X s=s2;
X Rsum(7); Rsum(15); Rsum(15); Rsum(7);
X s=s3;
X Rsum(3); Rsum(7); Rsum(7); Rsum(3);
X s0+=2;
X s1+=2;
X s2+=2;
X s3+=2;
X red=(total_red+63) >> 7;
X green=(total_green+63) >> 7;
X blue=(total_blue+63) >> 7;
X if ((red == q->red) && (green == q->green) && (blue == q->blue) &&
X (q->length < MaxRunlength))
X q->length++;
X else
X {
X if (reduced_image->packets > 0)
X q++;
X reduced_image->packets++;
X q->red=red;
X q->green=green;
X q->blue=blue;
X q->index=0;
X q->length=0;
X }
X }
X }
X (void) free((char *) scanline);
X reduced_image->pixels=(RunlengthPacket *) realloc((char *)
X reduced_image->pixels,reduced_image->packets*sizeof(RunlengthPacket));
X return(reduced_image);
}
X
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% %
% %
% R e f l e c t I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Function ReflectImage creates a new image that refelects each scanline of an
% existing one. It allocates the memory necessary for the new Image structure
% and returns a pointer to the new image.
%
% The format of the ReflectImage routine is:
%
% reflected_image=ReflectImage(image)
%
% A description of each parameter follows:
%
% o reflected_image: Function ReflectImage returns a pointer to the image
% after reflecting. A null image is returned if there is a memory
% shortage.
%
% o image: The address of a structure of type Image.
%
%
*/
Image *ReflectImage(image)
Image
X *image;
{
X ColorPacket
X *scanline;
X
X Image
X *reflected_image;
X
X register ColorPacket
X *s;
X
X register RunlengthPacket
X *p,
X *q;
X
X register unsigned int
X x,
X y;
X
X /*
X Initialize reflected image attributes.
X */
X reflected_image=CopyImage(image,image->columns,image->rows);
X if (reflected_image == (Image *) NULL)
X {
X Warning("unable to scale image","memory allocation failed");
X return((Image *) NULL);
X }
X /*
X Allocate scan line buffer and column offset buffers.
X */
X scanline=(ColorPacket *) malloc(image->columns*sizeof(ColorPacket));
X if (scanline == (ColorPacket *) NULL)
X {
X Warning("unable to mirror image","memory allocation failed");
X DestroyImage(reflected_image);
X return((Image *) NULL);
X }
X /*
X Reflect each row.
X */
X p=image->pixels;
X image->runlength=p->length+1;
X reflected_image->packets=0;
X q=reflected_image->pixels;
X q->length=MaxRunlength;
X for (y=0; y < reflected_image->rows; y++)
X {
X /*
X Read a scan line.
X */
X s=scanline;
X for (x=0; x < image->columns; x++)
X {
X if (image->runlength > 0)
X image->runlength--;
X else
X {
X p++;
X image->runlength=p->length;
X }
X s->red=p->red;
X s->green=p->green;
X s->blue=p->blue;
X s->index=p->index;
X s++;
X }
X /*
X Reflect each column.
X */
X s=scanline+image->columns;
X for (x=0; x < reflected_image->columns; x++)
X {
X s--;
X if ((s->red == q->red) && (s->green == q->green) &&
X (s->blue == q->blue) && (q->length < MaxRunlength))
X q->length++;
X else
X {
X if (reflected_image->packets > 0)
X q++;
X reflected_image->packets++;
X q->red=s->red;
X q->green=s->green;
X q->blue=s->blue;
X q->index=s->index;
X q->length=0;
X }
X }
X }
X (void) free((char *) scanline);
X reflected_image->pixels=(RunlengthPacket *) realloc((char *)
X reflected_image->pixels,reflected_image->packets*sizeof(RunlengthPacket));
X return(reflected_image);
}
X
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% %
% %
% S c a l e I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Function ScaleImage creates a new image that is a scaled size of an
% existing one using pixel replication. It allocates the memory necessary
% for the new Image structure and returns a pointer to the new image.
%
% The format of the ScaleImage routine is:
%
% scaled_image=ScaleImage(image,columns,rows)
%
% A description of each parameter follows:
%
% o scaled_image: Function ScaleImage returns a pointer to the image after
% scaling. A null image is returned if there is a memory shortage.
%
% o image: The address of a structure of type Image.
%
% o columns: An integer that specifies the number of columns in the scaled
% image.
%
% o rows: An integer that specifies the number of rows in the scaled
% image.
%
%
*/
Image *ScaleImage(image,columns,rows)
Image
X *image;
X
unsigned int
X columns,
X rows;
{
X ColorPacket
X *scanline;
X
X Image
X *scaled_image;
X
X register ColorPacket
X *s;
X
X register RunlengthPacket
X *p,
X *q;
X
X register unsigned int
X x;
X
X unsigned int
X *x_offset,
X y,
X *y_offset;
X
X unsigned long
X scale_factor;
X
X if ((columns*rows) == 0)
X {
X Warning("unable to scale image","image dimensions are zero");
X return((Image *) NULL);
X }
X if ((columns*rows) > MaxImageSize)
X {
X Warning("unable to scale image","image too large");
X return((Image *) NULL);
X }
X /*
X Initialize scaled image attributes.
X */
X scaled_image=CopyImage(image,columns,rows);
X if (scaled_image == (Image *) NULL)
X {
X Warning("unable to scale image","memory allocation failed");
X return((Image *) NULL);
X }
X /*
X Allocate scan line buffer and column offset buffers.
X */
X scanline=(ColorPacket *) malloc(image->columns*sizeof(ColorPacket));
X x_offset=(unsigned int *) malloc(scaled_image->columns*sizeof(unsigned int));
X y_offset=(unsigned int *) malloc(scaled_image->rows*sizeof(unsigned int));
X if ((scanline == (ColorPacket *) NULL) ||
X (x_offset == (unsigned int *) NULL) ||
X (y_offset == (unsigned int *) NULL))
X {
X Warning("unable to scale image","memory allocation failed");
X DestroyImage(scaled_image);
X return((Image *) NULL);
X }
X /*
X Initialize column pixel offsets.
X */
X scale_factor=(image->columns << 14)/scaled_image->columns;
X columns=0;
X for (x=0; x < scaled_image->columns; x++)
X {
X x_offset[x]=((x*scale_factor) >> 14)-columns;
X columns+=x_offset[x];
X }
X /*
X Initialize row pixel offsets.
X */
X scale_factor=(image->rows << 14)/scaled_image->rows;
X rows=0;
X for (y=0; y < scaled_image->rows; y++)
X {
X y_offset[y]=((y*scale_factor) >> 14)-rows;
X rows+=y_offset[y];
X }
X /*
X Preload first scanline.
X */
X p=image->pixels;
X image->runlength=p->length+1;
X s=scanline;
X for (x=0; x < image->columns; x++)
X {
X if (image->runlength > 0)
X image->runlength--;
X else
X {
X p++;
X image->runlength=p->length;
X }
X s->red=p->red;
X s->green=p->green;
X s->blue=p->blue;
X s->index=p->index;
X s++;
X }
X /*
X Scale each row.
X */
X scaled_image->packets=0;
X q=scaled_image->pixels;
X q->length=MaxRunlength;
X scale_factor=(image->rows << 14)/scaled_image->rows;
X for (y=0; y < scaled_image->rows; y++)
X {
X if (y_offset[y] > 0)
X {
X /*
X Skip a scan line.
X */
X for (x=0; x < (image->columns*(y_offset[y]-1)); x++)
X if (image->runlength > 0)
X image->runlength--;
X else
X {
X p++;
X image->runlength=p->length;
X }
X /*
X Read a scan line.
X */
X s=scanline;
X for (x=0; x < image->columns; x++)
X {
X if (image->runlength > 0)
X image->runlength--;
X else
X {
X p++;
X image->runlength=p->length;
X }
X s->red=p->red;
X s->green=p->green;
X s->blue=p->blue;
X s->index=p->index;
X s++;
X }
X }
X /*
X Scale each column.
X */
X s=scanline;
X for (x=0; x < scaled_image->columns; x++)
X {
X if ((s->red == q->red) && (s->green == q->green) &&
X (s->blue == q->blue) && (q->length < MaxRunlength))
X q->length++;
X else
X {
X if (scaled_image->packets > 0)
X q++;
X scaled_image->packets++;
X q->red=s->red;
X q->green=s->green;
X q->blue=s->blue;
X q->index=s->index;
X q->length=0;
X }
X s+=x_offset[x];
X }
X }
X (void) free((char *) scanline);
X (void) free((char *) x_offset);
X (void) free((char *) y_offset);
X scaled_image->pixels=(RunlengthPacket *) realloc((char *)
X scaled_image->pixels,scaled_image->packets*sizeof(RunlengthPacket));
X return(scaled_image);
}
X
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% %
% %
% T r a n s f o r m I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Function TransformImage creates a new image that is a transformed size of
% of existing one as specified by the clip, image and scale geometries. It
% allocates the memory necessary for the new Image structure and returns a
% pointer to the new image.
%
% If a clip geometry is specified a subregion of the image is obtained.
% If the specified image size, as defined by the image and scale geometries,
% is smaller than the actual image size, the image is first reduced to an
% integral of the specified image size with an antialias digital filter. The
% image is then scaled to the exact specified image size with pixel
% replication. If the specified image size is greater than the actual image
% size, the image is first enlarged to an integral of the specified image
% size with bilinear interpolation. The image is then scaled to the exact
% specified image size with pixel replication.
%
% The format of the TransformImage routine is:
%
% transformed_image=TransformImage(image,clip_geometry,image_geometry,
% scale_geometry)
%
% A description of each parameter follows:
%
% o transformed_image: Function TransformImage returns a pointer to the
% image after clipping and scaling it. The original image is returned if
% there is a memory shortage.
%
% o image: The address of a structure of type Image.
%
% o clip_geometry: Specifies a pointer to a clip geometry string.
% This geometry defined a subregion of the image.
%
% o image_geometry: Specifies a pointer to a image geometry string.
% The specified width and height of this geometry string are absolute.
%
% o scale_geometry: Specifies a pointer to a scale geometry string.
% The specified width and height of this geometry string are relative.
%
%
*/
Image *TransformImage(image,clip_geometry,image_geometry,scale_geometry)
Image
X *image;
X
char
X *clip_geometry,
X *image_geometry,
X *scale_geometry;
{
X int
X flags,
X x,
X y;
X
X unsigned int
X height,
X width;
X
X if (clip_geometry != (char *) NULL)
X {
X Image
X *clipped_image;
X
X /*
X Clip image to a user specified size.
X */
X x=0;
X y=0;
X flags=XParseGeometry(clip_geometry,&x,&y,&width,&height);
X if ((flags & WidthValue) == 0)
X width=(unsigned int) ((int) image->columns-x);
X if ((flags & HeightValue) == 0)
X height=(unsigned int) ((int) image->rows-y);
X clipped_image=ClipImage(image,x,y,width,height);
X if (clipped_image != (Image *) NULL)
X {
X DestroyImage(image);
X image=clipped_image;
X }
X }
X /*
X Scale image to a user specified size.
X */
X width=image->columns;
X height=image->rows;
X if (scale_geometry != (char *) NULL)
X {
X float
X scale_height,
X scale_width;
X
X scale_width=0.0;
X scale_height=0.0;
X (void) sscanf(scale_geometry,"%fx%f",&scale_width,&scale_height);
X if (scale_height == 0.0)
X scale_height=scale_width;
X width*=scale_width;
X height*=scale_height;
X }
X if (image_geometry != (char *) NULL)
X (void) XParseGeometry(image_geometry,&x,&y,&width,&height);
X while ((image->columns >= (width << 1)) && (image->rows >= (height << 1)))
X {
X Image
X *reduced_image;
X
X /*
X Reduce image with a antialias digital filter.
X */
X reduced_image=ReduceImage(image);
X if (reduced_image == (Image *) NULL)
X break;
X else
X {
X DestroyImage(image);
X image=reduced_image;
X }
X }
X while ((image->columns <= (width >> 1)) && (image->rows <= (height >> 1)))
X {
X Image
X *zoomed_image;
X
X /*
X Zoom image with bilinear interpolation.
X */
X zoomed_image=ZoomImage(image);
X if (zoomed_image == (Image *) NULL)
X break;
X else
X {
X DestroyImage(image);
X image=zoomed_image;
X }
X }
X if ((image->columns != width) || (image->rows != height))
X {
X Image
X *scaled_image;
X
X /*
X Scale image with pixel replication.
X */
X scaled_image=ScaleImage(image,width,height);
X if (scaled_image != (Image *) NULL)
X {
X DestroyImage(image);
X image=scaled_image;
X }
X }
X return(image);
}
X
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% %
% %
% W r i t e I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Function WriteImage writes an image to a file on disk.
%
% The format of the WriteImage routine is:
%
% status=WriteImage(image)
%
% A description of each parameter follows:
%
% o status: Function WriteImage return True if the image is written.
% False is returned is there is a memory shortage or if the image file
% fails to write.
%
% o image: A pointer to a Image structure.
%
%
*/
unsigned int WriteImage(image)
Image
X *image;
{
X register int
X i,
X j;
X
X register long int
X count;
X
X register RunlengthPacket
X *p;
X
X register unsigned char
X *q;
X
X unsigned char
X *colormap,
X *pixels;
X
X unsigned int
X packets,
X packet_size;
X
X /*
X Open output image file.
X */
X if (*image->filename == '-')
X image->file=stdout;
X else
X if (strcmp(image->filename+strlen(image->filename)-2,".Z") != 0)
X image->file=fopen(image->filename,"w");
X else
X {
X char
X command[256];
X
X /*
X Image file is compressed-- uncompress it.
X */
X (void) sprintf(command,"compress -c > %s",image->filename);
X image->file=(FILE *) popen(command,"w");
X }
X if (image->file == (FILE *) NULL)
X {
X (void) fprintf(stderr,"%s: unable to write image, cannot open %s.\n",
X application_name,image->filename);
X return(False);
X }
X /*
X Allocate pixel buffer.
X */
X count=0;
X switch (image->class)
X {
X case DirectClass:
X {
X /*
X Transfer pixels to DirectClass image pixel buffer.
X */
X switch (image->compression)
X {
X case NoCompression:
X {
X packet_size=3;
X packets=image->columns*image->rows;
X pixels=(unsigned char *) malloc((unsigned int) packets*packet_size);
X if (pixels == (unsigned char *) NULL)
X {
X Warning("unable to write image","memory allocation failed");
X return(False);
X }
X p=image->pixels;
X q=pixels;
X for (i=0; i < image->packets; i++)
X {
X for (j=0; j <= p->length; j++)
X {
X *q++=p->red;
X *q++=p->green;
X *q++=p->blue;
X }
X count+=(p->length+1);
X p++;
X }
X break;
X }
X case QEncodedCompression:
X {
X extern unsigned int
X QEncodeImage();
X
X unsigned char
X *compressed_pixels;
X
X packet_size=3;
X pixels=(unsigned char *)
X malloc((unsigned int) (image->columns*image->rows*packet_size));
X if (pixels == (unsigned char *) NULL)
X {
X Warning("unable to write image","memory allocation failed");
X return(False);
X }
X p=image->pixels;
X q=pixels;
X for (i=0; i < image->packets; i++)
X {
X for (j=0; j <= p->length; j++)
X {
X *q++=p->red;
X *q++=p->green;
X *q++=p->blue;
X }
X count+=(p->length+1);
X p++;
X }
X compressed_pixels=(unsigned char *)
X malloc((unsigned int) (image->columns*image->rows*packet_size));
X if (compressed_pixels == (unsigned char *) NULL)
X {
X Warning("unable to write image","memory allocation failed");
X return(False);
X }
X packets=QEncodeImage(pixels,compressed_pixels,
X image->columns*(int) packet_size,image->rows);
X packet_size=1;
X (void) free((char *) pixels);
X pixels=compressed_pixels;
X break;
X }
X case RunlengthEncodedCompression:
X {
X packet_size=4;
X packets=image->packets;
X pixels=(unsigned char *) malloc((unsigned int) packets*packet_size);
X if (pixels == (unsigned char *) NULL)
X {
X Warning("unable to write image","memory allocation failed");
X return(False);
X }
X p=image->pixels;
X q=pixels;
X for (i=0; i < image->packets; i++)
X {
X *q++=p->red;
X *q++=p->green;
X *q++=p->blue;
X *q++=p->length;
X count+=(p->length+1);
X p++;
X }
X break;
X }
X default:
X {
X Warning("unable to write image","unknown compression type");
X return(False);
X }
X }
X break;
X }
X case PseudoClass:
X {
X /*
X Transfer pixels from PseudoClass image pixel buffer.
X */
X switch (image->compression)
X {
X case NoCompression:
X {
X packet_size=1;
X if (image->colors > 256)
X packet_size++;
X packets=image->columns*image->rows;
X pixels=(unsigned char *) malloc((unsigned int) packets*packet_size);
X if (pixels == (unsigned char *) NULL)
X {
X Warning("unable to write image","memory allocation failed");
X return(False);
X }
X p=image->pixels;
X q=pixels;
X if (image->colors <= 256)
X for (i=0; i < image->packets; i++)
X {
X for (j=0; j <= p->length; j++)
X *q++=(unsigned char) p->index;
X count+=(p->length+1);
X p++;
X }
X else
X {
X register unsigned char
X xff00,
X xff;
X
X for (i=0; i < image->packets; i++)
X {
X xff00=(unsigned char) (p->index >> 8);
X xff=(unsigned char) p->index;
X for (j=0; j <= p->length; j++)
X {
X *q++=xff00;
X *q++=xff;
X }
X count+=(p->length+1);
X p++;
X }
X }
X break;
X }
X case QEncodedCompression:
X {
X extern unsigned int
X QEncodeImage();
X
X unsigned char
X *compressed_pixels;
X
X /*
X Sort image colormap by increasing intensity.
X */
X LinearColormap(image);
X packet_size=1;
X if (image->colors > 256)
X packet_size++;
X pixels=(unsigned char *)
X malloc((unsigned int) (image->columns*image->rows*packet_size));
X if (pixels == (unsigned char *) NULL)
X {
X Warning("unable to write image","memory allocation failed");
X return(False);
X }
X p=image->pixels;
X q=pixels;
X if (image->colors <= 256)
X for (i=0; i < image->packets; i++)
X {
X for (j=0; j <= p->length; j++)
X *q++=(unsigned char) p->index;
X count+=(p->length+1);
X p++;
X }
X else
X {
X register unsigned char
X xff00,
X xff;
X
X for (i=0; i < image->packets; i++)
X {
X xff00=(unsigned char) (p->index >> 8);
X xff=(unsigned char) p->index;
X for (j=0; j <= p->length; j++)
X {
X *q++=xff00;
X *q++=xff;
X }
X count+=(p->length+1);
X p++;
X }
X }
X compressed_pixels=(unsigned char *)
X malloc((unsigned int) (image->columns*image->rows*packet_size));
X if (compressed_pixels == (unsigned char *) NULL)
X {
X Warning("unable to write image","memory allocation failed");
X return(False);
X }
X packets=QEncodeImage(pixels,compressed_pixels,
X image->columns*(int) packet_size,image->rows);
X packet_size=1;
X (void) free((char *) pixels);
X pixels=compressed_pixels;
X break;
X }
X case RunlengthEncodedCompression:
X {
X packet_size=2;
X if (image->colors > 256)
X packet_size++;
X packets=image->packets;
X pixels=(unsigned char *) malloc((unsigned int) packets*packet_size);
X if (pixels == (unsigned char *) NULL)
X {
X Warning("unable to write image","memory allocation failed");
X return(False);
X }
X p=image->pixels;
X q=pixels;
X if (image->colors <= 256)
X for (i=0; i < image->packets; i++)
X {
X *q++=(unsigned char) p->index;
X *q++=p->length;
X count+=(p->length+1);
X p++;
X }
X else
X for (i=0; i < image->packets; i++)
X {
X *q++=(unsigned char) (p->index >> 8);
X *q++=(unsigned char) p->index;
X *q++=p->length;
X count+=(p->length+1);
X p++;
X }
X break;
X }
X default:
X {
X Warning("unable to write image","unknown compression type");
X return(False);
X }
X }
X /*
X Allocate colormap.
X */
X colormap=(unsigned char *) malloc((unsigned int) image->colors*3);
X if (colormap == (unsigned char *) NULL)
X {
X Warning("unable to write image","memory allocation failed");
X return(False);
X }
X q=colormap;
X for (i=0; i < image->colors; i++)
X {
X *q++=image->colormap[i].red;
X *q++=image->colormap[i].green;
X *q++=image->colormap[i].blue;
X }
X break;
X }
X default:
X {
X Warning("unable to write image","unknown image class");
X return(False);
X }
X }
X /*
X Guarentee the correct number of runlength packets.
X */
X if (count < (image->columns*image->rows))
X {
X Warning("insufficient image data in",image->filename);
X return(False);
X }
X else
X if (count > (image->columns*image->rows))
X {
X Warning("too much image data in",image->filename);
X return(False);
X }
X /*
X Write header and runlength encoded image to disk.
X */
X if (image->comments != (char *) NULL)
X (void) fprintf(image->file,"{%s}\n",image->comments);
X (void) fprintf(image->file,"id=ImageMagick\n");
X if (image->class == DirectClass)
X (void) fprintf(image->file,"class=DirectClass\n");
X else
X (void) fprintf(image->file,"class=PseudoClass colors=%d\n",image->colors);
X if (image->compression == RunlengthEncodedCompression)
X (void) fprintf(image->file,"compression=RunlengthEncoded packets=%d\n",
X packets);
X else
X if (image->compression == QEncodedCompression)
X (void) fprintf(image->file,"compression=QEncoded packets=%d\n",packets);
X (void) fprintf(image->file,"columns=%d rows=%d\n",image->columns,
X image->rows);
X if (image->scene > 0)
X (void) fprintf(image->file,"scene=%d\n",image->scene);
X (void) fprintf(image->file,"\f\n:\n");
X if (image->class == PseudoClass)
X {
X count=fwrite((char *) colormap,sizeof(unsigned char),
X (int) image->colors*3,image->file);
X if (count != (image->colors*3))
X {
X Warning("unable to write image","file write error");
X return(False);
X }
X (void) free((char *) colormap);
X }
X count=fwrite((char *) pixels,(int) packet_size,(int) packets,image->file);
X if (count != packets)
X {
X Warning("unable to write image","file write error");
X return(False);
X }
X (void) free((char *) pixels);
X if (image->file != stdin)
X if (strcmp(image->filename+strlen(image->filename)-2,".Z") != 0)
X (void) fclose(image->file);
X else
X (void) pclose(image->file);
X return(True);
}
X
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% %
% %
% Z o o m I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Function ZoomImage creates a new image that is a integral size greater
% than an existing one. It allocates the memory necessary for the new Image
% structure and returns a pointer to the new image.
%
% ZoomImage scans the reference image to create a zoomed image by bilinear
% interpolation. The zoomed image columns and rows become:
%
% number_columns << 1
% number_rows << 1
%
% The format of the ZoomImage routine is:
%
% zoomed_image=ZoomImage(image)
%
% A description of each parameter follows:
%
% o zoomed_image: Function ZoomImage returns a pointer to the image after
% zooming. A null image is returned if there is a a memory shortage.
%
% o image: The address of a structure of type Image.
%
%
*/
Image *ZoomImage(image)
Image
X *image;
{
X ColorPacket
X *scanline;
X
X Image
X *zoomed_image;
X
X register ColorPacket
X *cs,
X *ns,
X *s;
X
X register RunlengthPacket
X *p,
X *q;
X
X register unsigned int
X x;
X
X unsigned char
X blue,
X green,
X red;
X
X unsigned int
X y;
X
X if (((image->columns*image->rows) << 1) > MaxImageSize)
X {
X Warning("unable to zoom image","image size too large");
X return((Image *) NULL);
X }
X /*
X Initialize scaled image attributes.
X */
X zoomed_image=CopyImage(image,image->columns << 1,image->rows << 1);
X if (zoomed_image == (Image *) NULL)
X {
X Warning("unable to zoom image","memory allocation failed");
X return((Image *) NULL);
X }
X zoomed_image->class=DirectClass;
X /*
X Allocate scan line buffer.
X */
X scanline=(ColorPacket *) malloc(4*image->columns*sizeof(ColorPacket));
X if (scanline == (ColorPacket *) NULL)
X {
X Warning("unable to zoom image","memory allocation failed");
X DestroyImage(zoomed_image);
X return((Image *) NULL);
X }
X /*
X Preload a scan line and interpolate.
X */
X p=image->pixels;
X image->runlength=p->length+1;
X s=scanline;
X for (x=0; x < image->columns; x++)
X {
X s->red=p->red;
X s->green=p->green;
X s->blue=p->blue;
X s++;
X if (image->runlength > 0)
X {
X image->runlength--;
X s->red=p->red;
X s->green=p->green;
X s->blue=p->blue;
X }
X else
X {
X p++;
X image->runlength=p->length;
X s->red=(p->red+(s-1)->red) >> 1;
X s->green=(p->green+(s-1)->green) >> 1;
X s->blue=(p->blue+(s-1)->blue) >> 1;
X }
X s++;
X }
X /*
X Zoom each row.
X */
X p=image->pixels;
X image->runlength=p->length+1;
X zoomed_image->packets=0;
X q=zoomed_image->pixels;
X q->length=MaxRunlength;
X for (y=0; y < image->rows; y++)
X {
X cs=scanline+image->columns*((y+0) % 2)*2;
X ns=scanline+image->columns*((y+1) % 2)*2;
X /*
X Read a scan line and interpolate.
X */
X s=ns;
X for (x=0; x < image->columns; x++)
X {
X s->red=p->red;
X s->green=p->green;
X s->blue=p->blue;
X s++;
X if (image->runlength > 0)
X {
X image->runlength--;
X s->red=p->red;
X s->green=p->green;
X s->blue=p->blue;
X }
X else
X {
X p++;
X image->runlength=p->length;
X s->red=(p->red+(s-1)->red) >> 1;
X s->green=(p->green+(s-1)->green) >> 1;
X s->blue=(p->blue+(s-1)->blue) >> 1;
X }
X s++;
X }
X /*
X Dump column interpolation values.
X */
X s=cs;
X for (x=0; x < zoomed_image->columns; x++)
X {
X if ((s->red == q->red) && (s->green == q->green) &&
X (s->blue == q->blue) && (q->length < MaxRunlength))
X q->length++;
X else
X {
X if (zoomed_image->packets > 0)
X q++;
X zoomed_image->packets++;
X q->red=s->red;
X q->green=s->green;
X q->blue=s->blue;
X q->index=0;
X q->length=0;
X }
X s++;
X }
X /*
X Dump row interpolation values.
X */
X for (x=0; x < zoomed_image->columns; x++)
X {
X red=(cs->red+ns->red) >> 1;
X green=(cs->green+ns->green) >> 1;
X blue=(cs->blue+ns->blue) >> 1;
X if ((red == q->red) && (green == q->green) && (blue == q->blue) &&
X (q->length < MaxRunlength))
X q->length++;
X else
X {
X if (zoomed_image->packets > 0)
X q++;
X zoomed_image->packets++;
X q->red=red;
X q->green=green;
X q->blue=blue;
X q->index=0;
X q->length=0;
X }
X cs++;
X ns++;
X }
X }
X (void) free((char *) scanline);
X zoomed_image->pixels=(RunlengthPacket *) realloc((char *)
X zoomed_image->pixels,zoomed_image->packets*sizeof(RunlengthPacket));
X return(zoomed_image);
}
SHAR_EOF
echo 'File ImageMagick/image.c is complete' &&
chmod 0755 ImageMagick/image.c ||
echo 'restore of ImageMagick/image.c failed'
Wc_c="`wc -c < 'ImageMagick/image.c'`"
test 121441 -eq "$Wc_c" ||
echo 'ImageMagick/image.c: original size 121441, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= ImageMagick/images/swan.miff.Z ==============
if test ! -d 'ImageMagick/images'; then
echo 'x - creating directory ImageMagick/images'
mkdir 'ImageMagick/images'
fi
if test -f 'ImageMagick/images/swan.miff.Z' -a X"$1" != X"-c"; then
echo 'x - skipping ImageMagick/images/swan.miff.Z (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting ImageMagick/images/swan.miff.Z (Binary)'
sed 's/^X//' << 'SHAR_EOF' > _shar_tmp_.tmp &&
begin 600 ImageMagick/images/swan.miff.Z
M'YV0>Q2``)&D#9PW<NB4(0/"C)PW;4!,J>,&A)PP<Q3*`9&F39 at S972`$)-&
M#IDY"OHH2$.F1\&/99I\3#-FC8(Q;##.Z0%E3IDZ9-X,R3EGSL`Q;]@@W"GC
M)D0X<LH43?/&30\I%-F4<7.&#IHB;I"263 at 03IB:9>CLK('C1 at T:3MG4:>-F
MYPT;.`8^O+/3!@T8"A at HT*$`@.%_B`$,"&#X`F,`!1X'>+R8\63&""8#T+Q9
M\N,%G at U'-BS`\X#.C`\$.!V9\6("AC6KEFRXQ.,0CQ4\'O%8T>/2A at D$$`#@
M!F?*FB?#WDPZP`$`$AZW&`Y`>/#'PAF7MHR]NV'<AHW#YDPCM.+'$'Y3OXPZ
M-FT`F;DSM at X`@WK##AXS!V``N>'-I^VGVFFV???8"X]U<!\`4CQFP6,R:%99
M;`W$5D!U^GD&VV*&'?$8`^;15QIQ&3S6GV$Y'(?`>0;$=MIQU'GP6&:&J=8<
M=\W]EZ&.J6D&W'G:/4:!>JX]IAIQ)V+HWGLT=F98B36&^)@2"3Y&R8X`@)@C
MD+'IJ..+JW5&W&+$[0<@`$Q\2%UII^EFV`./C=:EDP#HD-QQQ&5WGH[$<?:C
MGAP"`*=A&Y at WX7Z@;0GCEB4R!AIK$CH'0`*/%6I8H(L"\,%GN]WV6!DS4A<=
M<2!D6"2/7.YW:)AGGN!=E at M&=UV1;3Y&Z:6R/=:#J73NU]^I<SKYXWY_:C8H
M`#]R9B-_>-+))K*&KFF>DPH:IN6<RPI7)J<X3FJB?P`LNQ]X`"!H&!B/;6I8
M$0$LT%F`T8[9+&?TR0K`@X:1$"=U;@(P`;B[RD>GG#$\9J^?X!)KWG;N.8NE
M at HZ&F>1K=,8'0`,+8MSPG)0R-N2;C\EHH&&[&F8G<3\&&NA^4#*[I(L#8TDG
M=9MM:Q@,K]*+Y6P`]*MGDT[^N_%^._#*GLY1;DP??8&VG!^J##.\V(5GMD8G
M"X_!R9ANQ&D,`&C`<N:DG#_^\)A]6ZK\F!6:45JK82)H)B?2D`70XF:P1;:M
M>:P>=]W?`)3'V*WP10OLA/11&66W2=)'.`=J&D8XPMVJJIFV<PYK'L1?APFB
M9,0U66VXFJD+0"V/>;ULH`Q'T+=A3;(^;6XR9UI[G[:F?O:K]#F),<I8TL>9
MWM`R]C0`1/CMLI(-]P<FR(8E6KBUG at G<.W+C5=_K8QIHAO'@ZIWVN)&:E1K]
M8Y`;A at GYN+XLYWYR`DV[>]O:/'U[D\&K(VP%0N?CY09#3I"\U)GL4<\P2`C3
M^W*&GOD!P'4O"]3U!#8S`IZ)/6?2G,`L!8#\&$\S_4+;G#BSLD4MJP*1`\#'
MZG8C?RTH/4D#@-EPQ1BK$0Y?=6-,DO:3F0L1[TQGVN%Q[A8`J@%P8S at D&^V"
MQ!B1>2LTOZ)3H#H&@(+!+@!Y8^"6F/88VVPM5Y*;7?MFAC[-@(@XUSJ3Q=)'
M.O`1\$?'D]Z/8`@M^LUI!H\Q`;A,!T$`I&<^_S-,%-W6P5#5D&:\NB#?'H-"
MT0C)>P(L7GOVDRF>,8P^R[+:LI9E+^E1L7&SD]?&?O0CPGD-?FJB(`!%V3#;
M+>Q;6QK=\?9#N-$M,(P><U"H-B8[QJ"!?85C3"-)YTC`V:M)#+-:S9A5.436
MST(88 at R"`!E#^5T1,QG"W1>+N2?FU8!7<DK2L1A&1>DUZ5HDC*3FA at 8N)Z:'
M.-D*$PIV"0`G2F]"7 at N4U?002`"XBI5P.LV$'#/&F2WG.`?=F`B/144JTDU`
ML)2DDY+$GB;11P6Z,TQT#@DU+"4+@,"2D_3DJ#S+X<Z"6*SC".]DF'DRYG<`
M2,&^"&A%.ME+:EE;T+(\V#G#U%1ZW1/DJX+:LTCVQUW+=-)D6L3&$@&/B<2<
M4[_2"<C#.5`(U(D;8\RGTLD1B4O$XTR3.-,H6+TT3"(\WCP/"`"",F^%@?+"
M at O;#0>DYD8M71!7>H$G)XURH6(;!&BZ+NK&I2 at FJ5)0=-XTCU#'^*$E#^B#@
MV".GN?4S4.*2UF0?\T_F#>A^QSM>91_C5LY<JTF$Y`P;T[0EGST&HX"CX_#"
MA"E at KFIC,%(E=TX*@/[Q!G@$G-"/>,:>?BTKBOVCHYR&6<(8)FE9R(SHA-CC
M.'`MK8M')-UI1/B]^RTKLCUU84%GJD)ZVB"`CNP6'@TC6YU21X*O,E,BP_31
M+[7R,2YP[R at UT\?]N':,EAT9`.)F&*^EDYOK9*8?R=>MU5TV4L'E;"HOICSN
M1E1HL#*,$^L+@)8-]S$>BJ$3(U3@!4TP-@<%76SVUID6B;!?U^I7 at L,*S$WF
M+H:E3"%OV/M5^HR6,7V\EA!QFUT]S2Q/FYLP)LWC-1&2$H2:V2AA[T5>.':'
M,3ALV3Q)])CSPG.1S=G6<Y*:H3$WRVM.Y(QQ$[:OW9+Q97JRVE@=>#Q]]<@P
M,LUK&]M#4L`)SSQK-2N%N5SB+>E+SS^24V;UC,,?L8N&177SHZ>LP:@FB<,(
MB_"6]NHUM\[9,/V:T.<D:5&0!C/#`#AO:]O63\L1D(T_ZK.WD+RE'YG.:Q@[
MC1-M##[&V(M<<BHM,`-MKV.=B0T9NA`&$4G$9X)2HPN"+^"DYZ0F+2MEU/FC
M)#F#89SA)Z)X%=1CCA=K,_;S1_WJU_$(!UCM4KFQ405O'^]IR&`A<HR!ZB-G
M5O`8`D/KF:-S*QTMQAFPS<G8$17;?&%#1SI&YS11>U6"E?5*:K+PB2LU#!MW
M#``V#M-KE<YL:#(#W&YFBHZ.&>"@`1#H8<Z;O,\-V6.\#8!27<B);B5J>QD#
MHM/TIT7Y6W'@W at MEQM!Q1"I-DIQ<91B.QYR;]'$=D,'UV$51D6&9II-,IT[`
M0#?ITA#N<$XW)J=&@^MXN[KY8QB+Z at K2"<.6*PS'TQC1)`TSSF4$7+_R_&[F
M'?V12@/SE*=K'M at V[$>YGK*]3 at BND6HFNAL;<EM?>3[&X("\RUP",.%$'*X)
M.HI]A0U#R3OJ*;[*P=WBC('S/O3W)(E<>F22X<CX'C8VZ4$1(Q0C&QA&7D8T
MP4X*E.%_Q(,PT;Q)&(T8;(@KMR*B6.R&`>\EN25)ANWGSX;!L+2A/V4.NII.
M7+0XAJ^EI^,9=E;,,QMQ"">]%,$[4.]L6'/G-$P;\SBPFMF"`Q7+I>-)?IG*
MT4V'UDT_<BP4!VDB)TG79AY!P'M1E6/H=UROTB32HQMALT at ZY$"$$S_ at XGE)
M=&/+XS5:LSSZ]"J$!SAD<&4`4'SA`67N<1I_YG/X15Y>161A)B87MWJ]%EX<
M1C at 7]2T]4B0JQW[EPU*TEW[!XX#S1V(\"&Y at 5%Y;<CPG(W17`'A2Q"E;8D[2
M462:`79"*$F!@F&?-'8```7@\FGW\S/DY37T,4,7)T(B15K214^9%$DU533[
M`P#Z9QC?=!VPP6Z/42KV$T77A4V]IU+]\@3D=2P<1''`\G($E'7T<2Q-XD7B
M%3.'&$5T-#$@F"2$TR]ZM#$\)3K9-">!`$S$0S$*QQAN17Z_%TG7,DZ:-2=-
MLD)T9'L1=7U&ZPQBF(SW+HF81E5_;M&"*HE]S at FO@PHM]AWLJ-5LH4HI.
M, at 5R>(@^R&!U at R3@PAF&!U[8%U6<\6+FT2_#Y(Q5MS&@P5NFAV?F\8F/T4<M
M8X'>`CV19G)DV"1]I#;TN!_=<V>%E(&&P57R=1I)X"F,\2\\1QW$DR1S-V[1
M at F,+$CL.5$E2PDVV6&]6PQZ$@V%*=!J+MR"$LT+3 at 4T6ISI&*%^2!0`<9'Z/
M`7?DE6[-QQB\H6)M\!@#*$Z/45:&U2U>8S7T85@&Y#]ZUV:7N(E8XE80M3BG
M]G?71(M86!Q80E3#Q'?T at 4-N)6720RYDQAAN8(4\)2?](CU\)R<EJ')6HT3"
MM#O2](J@%E$QUI*[ETN'R'%*U(M1=2UX2&%P0T^<`8^Z,B5D");4$2'=4H/=
M9%DE1SD7YS0'LHWF$8L+PHE;1$\HQ!@BM!],-R?Y11QL1#C'LWJ%-H\J)2>8
MHR>Q!P#DPD$%:1 at X))'OL6_]9)BS58SG.&7]DD\+PF_'N"7V<G4/N3SK]AAF
M>(A9\!B7IVDYY$^U8WF-R5$K2!VZF9P<ACC-QT[I-2>!,FKT(3TLB)W:PQXM
MDR3EH6=\AYN&$8H```1/R1E<=33 at XBK=DI>LI9SVXU9WYQE/U4U)(CVFI8*3
M(2\"]1C=^7VJ!TQ at 9QBCXP0@J1DB1'.;\AZ>)Y#:\R,NU3!Y.9X`$)UQZ$-,
MAEYTLBS_M3PB8AX2V$Q[28_J9H3)1!W?B&T69WC]TH!MR58(QYH1=6M88B_A
M9C6"U1Z#H$4<`RZN4W(<Y#5"1E[T83&8!DQT$RC^YE:RYF%`FB3^=BVV5B5N
MA&K+<BS'TB\WZ9#0QA at XPQB)8)/XV4V!,DR<047!2(9(]XWL\2,K=&#A%9T3
M4I?+LT*6A67OF%$`@%7<Q)1"^4#D150'*)I>HW18,B$+M2!N&)VGM88.-*)C
ME"0UA74FQJ*"=UV&D9GTL5YTPD9X*B=TI)4F^!@8^B/:9Q['J9<+AD8+(G4Q
M91YK8!YL-TSYM5\)"2QZTJ:`$RA.9">UIF184FJ&@:&Z>']S,H`BE"1LUUVR
M.DN/D2*\E09&DT<O5)T`,$PRTBUA2)1MRA@&>)*F at 8D`D)=/!I$Q=(UC="WD
MPAD^((>&N#S^EGR$NILJ)4O_PQCJJ7M-&2A)<CP7^6W6>3_^5H`)%TF*&4^`
MP[#@V&\-Q%O#"0!J$%'3T1@@R#/#)#CV9AA52#VLA)XCZ#7]DID\8VU45Y$X
M:#4L.:,`\$W=@FTQ=$MTTB^^\AA8PXHS!Z;,LQ\]2A_H:7]U\AC].F!8LD+#
M)"=LN"!R`K/V:'%T&J[=U"^RJ1Z\E74,<Z#E4BED&"@%\QXE`P`I"&"YH[,^
M!2Y?$"9L1SCN"&\7ZZI>U2TCFGL?VH&4UTWFXC!*69O'PG%69AA$-0=6B$-&
MP"MSQAA40!V at 2A_]J%++ at D-=ZH0-^U4K:H//N#L;@YZ at J5*R"#+`PH0BA)ZF
M(R?]PW<M\[;[L4(UU3*JUH1LE:YU>Z)O-B=)VD_,.'%&"(B&@06QHAGM91A-
MX(#@14=HMH4$1')153065Z/;NK,P^!@R6A]SQ;7P5FE6JH+1!;5&&*<+$FJ:
M4;C5VVI&N$+DLD(K=#QNU96'R!Y(:1Z_!0!=0!TAIE+ at A;)ZQH&`TU<72+=H
MJ5+^192$@UF/D4!#:(7G=9"/096+&IFOTD=$Y58KM(`EQAB6**WG0S)AHGF&
M,4Q*I1E\MZ:"5YOM%B@<Q#`RYD#NUU74L9H-LRQYB:=.M*HWP[6,,8#T407T
M]1CQNE\O at X:4FCD[@UW.>7ZS2Q]15'4J)X_7$T.H%)K78CH'BZJ:P<)]"`"&
M=SQTY*NS6P>/H05DN,3*^7[?27TGEG4=[)PC:,3 at 8C6MFG6DN2#":!BMVJIJ
MK&>C,Y^CXT1.XG&Z9!B at LB5O6W`\6Z`)&4,*%WU8<BU%^WWT$:F&D9=C\!C@
M6T@:%B8<A,,")JSBIF?]4J%ZTF[)ZK\2AXT?=D7JF%U)@F%<^GB9:AB*8XP9
M:H5>(SV35H)/@B5EI7E!6'./T2#K.XM.Y#64LBU at XIR'&K>6-H&:$9VZRSRJ
MI1E,"'*[9QAY(&$@<QH<K!D*RHZ,D:H.!'E[-B$?"6]:['G+M+G_Z:IR,GI\
M^%7F>:])]QAQ`(*39L&7&,!/Z5;!:Q at C.:OY,JF8R[G%BB6KJ%+76UA)N%F0
M=ILI)"<R/+O2 at V%%F[=Y:WC'@J'_0AS;7$\I)`8)W,JG]HU*JCWYV(4SR%;V
MW,_HR55IN\$\BTX1-3K[(:V,,6FC%FCP&55Y:R_X&\^!)U1?2*<6X]!`Z,P>
MFK>9$B at K!*J$LP<1E;>X<5;$T;D`T*IR8CI-4E,[_93AA"62A[R<FIR!,LY3
MQAEA"[!3K!EY6:N(++MGM+6&81_$@:%AL![F(2?7$BBNV1X!AB&\5<I7>,'+
M,WXX:[7Z24_2 at Z&8#,O1J6WZML:_*4(3,K]RPH0>S4V1*S!-0L2)QL"&T4<4
M9=>"S4,GC8/?.+']DK>)FWV:4:'=0QQT%*]B:AY#0(:>Z:$RVTUT1V0J!]H3
MF6UK=R>[_"/7LL,`D*OA-=::@=QORT:1:Q@;[21?VW&/D3RAV2^A#3@?A4W:
M-+MTJDSC^(ITNWW28TL@'443:WB9^<JPZ;G+PQENQ6^\Y21.R\46AX8W*[>W
ML\F7^(W/=C]TRH1)4KS<%+^&`0A>J8+RM2YA1]^:\<?\W5T:R3NS&,J!(CW'
M$K"\$B@:^IL]NA_I:[S-:QC(/6H<MA^MBL^G0:T`<-D`(-/"#<O([)+`(CUZ
M<BS*VQ[9K5(8YAN&P8370CAY>SR,BZUIHQG%QQAR-4:0*$F&.8+;QQX\(R?-
MO(",T3+T\:`Z3H.E?2QO.SKS)\ACE)F&5YD+]AY8A3L!FI*G>2RK3<GB%K,J
M^),JB*F0EF!AS5.W-7FU$6U6J+[4#3CSV6YR,I.H]B,<-(`$#)5;@IZY;9+7
M23>H]]XFS:L.V,A(;M+<E`FES3:P2AR`&DU]9Z]<K-UPK.G_)DG?&'Q<J*LJ
M)3W_33 at T9^6BR1E)LL]#U]8J625;<BTMDW)S,FJ)/CO`HFW\QA at N3CA)`M.5
MQR7>>QH\HR>)!4S.V"3'?G%RPC;_G,D1%:_B at R63G"1]=#QL=`8I5%M`S3PT
M&W\NRCP'?9BL/,'^/*AZXHR$<RSD,H"CHZ:!")@$!(A=`RX]RAF-:WC5C&!G
MFBE61K=)DB1H^'0`4+C%"-^/$<F5_,AW"X&I!DQZ,DS^%BA1S7*/8:VW_-,9
M=WB."3B$-&I>HVV"*D)N)2=]D)/FX<N7Z#48YC5,N(&:42BGT:K(=HAX3J*G
M2F20`C at 07YLW_I>&,?.6&="!QAET!./A>X@\Q80P$J`(RBN/$%$\/UY at WW:1
M8I;2HG)T(X_3"4F&$>KLT:,3ZS4T9Q]DO_:O,NU\,T:&[B1Z]+R&`0FZ9/9W
MG5TG>'$@S$W8_574ANJ<<<``(`C4ZT*,,;&MJ#MG)9-&:&2E0QU[R.CA!6-,
M6K9'B'16HZC7N2R$@U5RSAAL%[US^I?.V9VR5OBGIHO."5X]NN>5IG"GD4"`
M@]QB/F4M.H<OHS"H0GBTINX!)(,(]!BU;1C&O4(BQ,)`JQG'0XSM$2B;\E?@
M%"9!YP?@TOKX&J*VKI#&DO%5IAG28]Q2RQF2\!BH3R?7\K:[#>=T5%815\GN
MTMG$`1JP40CTI(]1!4X)'O<DY_+7$J$3LBJ4T1'#XX7X7*"['X?`@7"8X]&=
M"E1<2R$+#OQPK0?0?ZY5B^`G*@^DW;_ED6`^"HO!?"V$P\`D`H("Z81UNS at X
MI*Z-D>U4C>9$=])1'DH$48>/DU+:G9,8)J5A14"4RH>#2L.%N`,J:-2X$G(V
M`+F?8>,,H at 5)S9XFQCSHP_'1#&&K._4H>T5'PA8=T2IT0D;H#[$S=<8@(<F`
MG*$F$8?^%7Y\VN5"/WCJ/KFL"1$HFI_>`@`:S(K%N&5Q+89)3?IWO`)422+S
M,*0Z%@`@*AG-5:43XN#%X$U_(CML!OW8.95272"-C_DJT*6?%"?#,,](G)G:
M&(9 at 03`,OG->C`AC.'A'J"Q))V)W!RV&,-M>E`M"<(_'H(@,0_0*78\A<4DU
MU*09:`ZZ,`Q1(!*VAS730 at 8?TJE<5?#4P1NK\2,VVL2J!-.,2_@;SH`@H)UY
M.!XX)!6$MQV4]KA).LL,I\%BX+Y9=%V>1\0[==VB:!T/OI.9`L7$DA[(C8.,
M#H+W!X]-BF,I;$24JF"EPTL:H0X9A/A$5%X>01AP`"%NRJD?5/Z(4*(Y'
MH.A1EP!+$#$G\</0G5'C$_:FJ@"X2"(`%=K%62'0\%A-*\W0,II$ZQ):1&7Z
ME!CBT*WFA">`2RI'6&BK\2<9C,BW<UD=#&,QAF\P$@W#DH-S3`@ES0G.P0D<
MTB'Y0OR)*"T;R9!0-"#$P5*2A"?J. at 3'8ZX<"#(X?24 at 40=MJ)1N5N0Y=5_&
M<O$,BSAPLHL%9!Y,:&P!`(L'`-Z6O7`B(RB;"8S'UJDT0U$\1.!PI9R52$0^
MMD7VT$:.L(&\A_T@#?J48;!Y*P2'A"U`0?2 at RM;1 at X8!#H2=.K8]G%,"FDVB
M+B?."9[2!O5$&1M at CT&3O;)K at 1B[F#)C)Z?AVO$=5#C^^&)@/'Y9\7Z40&WU
MC7Q2[CA^]J)?C(Z6!@",V[&(7FZ(<"`?PV;]BI:VPSA41'^IE.D3)!+3O@)B
M?D:\@948A]=>A8\#`#2GU`&`Q=9ND!?#:!*GR13,Q#%FS.)+G2-7+63'":TS
MABU>Q?SZ!]VD942G0>BRRLUYH at Y4\0$*,%3AL!XAEZ`;6LL1V2/+M4!4#GV(
M7N,`)O+"E,0YVHW..`VR*C-AIB!F&'BC!,)7KJ2[88Z"1@?18Q%3AJ*I?RT+
M$0(?W0K-85EE9%[IC%Q"'"I4*%!8!"W&I3/"L4S:'>:C%70"G8D16-8D[(4M
M>`Q<`&+)L>>X9+J%E-EH?"!EN<;J0_1@`[HA.C/PMYF\T/(8BD%O,(S2*S0<
MLC?HU^X at YYEW_H;D\<A[TTUH2:0`$_.MZ#&/$"7NJ,^ANG:@8$'0`<$HO9`>
M>4E3FL'PD(LYJ;V:$AN4%O8#1CC'%D(W$A5U:!(8IE4U`@]%<P*-%Q,8<@U-
MF(<D,<GZ!SGQ*.""_V2].4%O+->U:$V/H3#NH^!&0'A?-[E]LY`QO"TG at HLN
MH&%H7:UQ>W`3TH>#MN3W&8&2CORY2 at UX&.HD/--PAJ$[]1&&42B(`PNS67!I
M=W$\Y0%_PL?)(Q/G8?UX-H$FEP``?#P>>6D_M*X_PYFHPWSZA>4EX+V1&%<0
M85<H,Y/SJC^4'--'3W#!8Z!&C`$]D8L$8SJ6#$O4#'B`GA@>#!,K)9A$`4$6
M43FZG4QQN"BAY"I#C\'O=0C-P$:61<N8?RWC=FD&,.AO7)Q8(GKX1GF`L]\'
M`*%1>]P222*&>0K#P`T0"6/(2S2MOS'+KY+.WM><7)CUD3H^)=R5`B/),AE\
MXR,P^IK'\`LRG1WI3OG!?D3*=`0`]`5Q^%@`H"M!%?ZS?6*.I4,5W))+*J-?
M1H]:ACDH10B1.@"[3Z8]`HV6`W2:;$7^QZ+6768,^E-9#HM=T8GNM`CHR:[@
M+3G.=9P&4>7!-$/7LX6OA+=$D3WG+Q75%[(LUI!@T0EWT"E8#`XK9/\(KLV)
M2"#BW-,8R8MMT)+(R%(T%F&AO!`8W,LPF`[XF#DUQ6-P6G!%>S`A88`E:R11
M^F&=,[?0+LW at D@C(. at -H!,1=$I!^40H!`'IR*\XH&#(&1O`8!&'$VG)AKZ#M
MN"7()-=@)%D5`@/QJ,E^P0XJ#IUHA(,J]SG/M\5!G,A&8SMG\=UM2)8)"Y^F
MJ`,[:=)R^4V#.,GXCJDT#HR![]24!JD9^MEMTYP at QH%@/3^W6<15V!E\>V7'
MA36'9>9^1!_)!8^A8GVV3C%`3=UI"`;`Q'3@$,E$^,;8N$05Z8S_+!D$E-``
M0#-HC%#H$MF\'@5>RIQFB%X8)N=`Q9X&HF(DFKQ<F/,)4:3C]9OH at S)X#*+`
M3XT.](0T(=R3Y"82SM0XR+P9V.@$`R5BDTC$P4=053`[VV%\#.+1Z'!$E849
M":!**2%NYEA4QQLD13\A`'`$Y,5C>B_#P.D, at QTD'+S+,%"CC)FEOHXH5!Y!
M)YWA%(UX)*)EP^`I7RFBX)!%28_^H+54*6&+;NP<2M>6H(IR'(>6D?R90]79
M1TBG@*&C'(TQL)%K`>CFE\*P.%S3.=46@*3"R%8+J8B+`G.<$W`!'^V%?'1`
M!:/D7-#W\".*:#]):F>T`(HZFN4XRUI,FEJ0[1#1 at G3AIP"=],!3/X(:),OE
MH3^9Z+4:?H('E#A'$^595-:HH6J>Z#',`O/`PMA.3?$&M-1E98H_`RQBH]D,
MC"\CG:TZ%90<%\2U6!:]X%4$/3KQMH[%)`N)'*V/FBL.4[M2*%39GM%Q8]"1
MOL)*_.&:-`^KX#'`1W>9I<R8N7D9[6:0J-#C:1[2V((`!OH4`/B"L-/7$LSO
M(D#=X?CEMMA(LR(#O'A-SG-)W4<NJAE40>WHE>`O55"'ZR7G2LYBX'L?TB-2
MTR((%N\',G@,"]4P3!,`@$"_HJO;DE6GY'`8LI12)LH2]8B<X5@$FN-1(K$$
MN;@6PX#Y43@],^5H8[F2B78DZ#2S0%'%X",;"5M. at G,*'HLX067EG at EKJ-1R
M7<*K91Z;$M^)(OW"%3P&3L<8U*IA<$/WR>*\SM2#,2<)D)I;;C3!R*.SFE`U
M&3Y*J(:).BW)'X$#V8G*`9]@*,910;Y)7D+JJ+$$"\+[;3T;1??T#`!=DFWP
MAX!(`+DC]USG-(:^:T?VD57FLN"C@'M*\%%=EA>Z"C(;CQ,D2<FI=HT1?GFF
M6N?]N!*Z[LT50J<%'R<$'2%B at R^=]:_:-!FTW^0RGAB+FRP+^/CFB.J>`2K2
M<?J0U5]58YJ at R^H77*5YRJ[]@',>`PO3!=2!9Q@<BT at SQ^:1NYP9U$DX&7#!
M0:@(?+1*"X)$BKK`"@LA38<$IAX15WX5-/3U4,VA at H_H@C&\U_-G<1!%+!PC
M)PSPO2#H>/*H7$,#07HB2?2+:UG=$BH8BXTK\`[2T\0*2$I.;$R;FH%<9";3
M:H7@(]HKJP_+'(:UX#==*9VERU(.-C0YD0E;-%/D'?5-8T20J<BBEI$L)Z4I
M12M$H#*&]F<8-H$.2ZC'@SU0(A4%(I&.QUPTHHSLZ4/`<98BB7Q=;'QGELK4
ML--N>$9L5(5(YTZA6.KR2KG1+#0,^T`SO#+X&&ZT35BSB%H,IPH>9-D<E,U3
M at I;:AN/`QR81O>`CSX!X:*BOT8TV2)$P:O'C%1KOMQ)0`$"-5D0I>"2,(:D:
MAA>(&U@)\62:18T&'D446AD5C!`ICQNCCPP at .A4,W8,#``!EBK+.B7R98Q\#
MTF1K4>6^M@>>82]"66<SM$4%7MS$,FE=6AT`F),3``"`5\/`"@)`8>"3RS&%
M%,S'=H$L85&+C4)13DB9'M4@,D#?0862AW1:``"PT;@*8HVQ3Y1^SJX>BW[V
MYA+D#"OD$@*+E*@9%!$'``#KPS"03 at WPLKI,1`VW&\.A?!4S]\,LAT9,9[(O
M:,Y7F@<L"M('``"$X#%`@P#@`0"`N9N#6)).T9M!"2N*&8,-9?PV1GK$T`G=
M`D`(V'B&(0\^@P```NB5%74K)FQ9'KEF)_J6*AD)BWKQGOY#<#'M!!LU(@$`
M@,CR0D;S&.Q``!@!`$!P05)6X^IN[99KCF[4]`3*.3>]/.*RD!YNQ4.8``#`
M.`W#+@@`)0``2$8#2&6_BH,-'4ZPY`A9$FB$=*3L2A+L8 at 7<40_1`@!`CV)\
M>XU6+I,AH2'CQ9PPMUP7^<5344='^@B58`$`H&T&Q``:`&!`BTMX16T$@=LO
MZRRIRNSJKVIH&9[2QV#N7```$(^>T#!4K!D`OV!G<LJP6HQX,+N+\V$%SS!I
M&9PA&!I>1`"8_!&ZJ`$`@`G-$W,HM/X;YGACAK5FA;`8MQ^3(<0U#&\@`,0`
M7N;'*BRP^"4X``#\Q.K"DPP;WGT7O#+Z1I$=9W1'D!P(`,%V,AS<EPHXK-4.
M``!FH!T)/AY:SC2#6XFSUI6_<1*5"P`:$`/`09EA`P"`'X4W`4?%:KB;X=W2
MA^.(5QGCEN at N-H[+\HN_!_PJW=B<>'2R^+S?0*$;G"3V!0"G"&]V-VM5<LF,
MM067)XR"8E;M(3N.GQK5N`:M>]4;XG?R],2U.!ZUK3`TP&CW@"?!#.)*`>#@
M;H8.T#`,G()1FY/T8T+?+8E)W\--,0]R3^A<2GE:8?-?WV at 1>`>EG%K.L%")
M0U<2`@"@.-G/&P0MK<]S=+)`RM;V,3X::S&/RC*W7T at 1N8O)``&2T_A[#NQ!
M=@(`GSMU)P,-UH6H1H!1TDC:.>1%=T,ZH7<Y39Y-2X>;Q#`I&@D`6 at 1;_C,)
M@<BBZ"-6-0!,W8]B9R,```BC&(=JW57>^S_,X81 at 4\+OXERXL5>40J.Q[0S;
M5C>80_GR'+:NL(W!+<SY"`='_`+]SW-DAIQ8<QR_J)G;]M3]2(H1Q-2\.VB)
MIY($'2D^0/=1:,"[!P"0H!=]#+4*Z)X)QE@!&.TJ>5 at H)2;RT(B#4:$*>U`;
M5F4OFJO]0$<"9G9YI'SW+V7=_OD80"``<,$7T-H*!UU+.NS'9FC&D#BO&:&1
M!CA,7-E+=0C+D)D'8+=L/&*@\!KJ*048+<.`CF$9%U/'Q^']`B`G*`$`0*E5
M,"&J"ML6$&D1^QKAH'55%/WT"T,5=HJ/0,X&GR(`6-O^X(BAY60(M@^9K/'#
M%KHL@<5WG,C72>F%5L;@Q=2N5L5XUO:C..)*LQFV+;BL3<CK4!TJ6=MR75:X
MP73<A+RF/`81``2RF6N>C,%.Y&3UT)`W at Q&A````U_W5_`0M^VVHP!WH5<F"
M-%;GLL:5LJ*SS./RM-T$^!BTXSBU&OTC.M#;)_-N)X,CAIYQ+*_^IDM9=R\@
M<AU-21"8O#,YH9[:+H:!RE`)`Q0.Q=S!L#(<-IOO00X/2-^+<80+ at R(OXE!;
M04M<?(E2A.4MB"\SC,7>W4$<P*#K:,:<R-JF4412(>;3PRFF^36(/<7\I/%T
M+"SC/Q95K"&C?I$B7H#_8`R%D4\1A_/2(JA(9L"YI<$1!]A98S#%(@?&E'\M
MHL01[>'?E,<6;0]4PC>OD.9)'+[)A4`A6=<N`P!P:7`<8GVES(2(Z')A.B7E
M(@K)`B;QRO`>BT!A9#LNH1$[L.%!B(`"$ALXH,W#,/0!V"'/ZZ<DO9N"HR?E
M!G'VBV`X?/7<8^@$FD&7U5N==0*$SF8HP\L7F)37ZP)VP01*[:\"$P29T:=G
M27MCX2TDK`2=1A%0Y8RJF'W8SY-!,<^O?E%E?YD,LC@&IS8Q-,N%4W[<D77$
M%+%V!-O$,R%@K<_2#!R+[F9E10R*`0`+`X(@Z*$BG6.AIY0'<?-0?81PI(A@
MZW;Z"E8FTIH!G>H)#&7F6A<*4<;.9S- at Y>`;6V`REURQ!;IS7HO--2$:1%4F
M5XH91&P(+%&?ZZU+:V=I"07$A at O`;</$16ZZS(.-,&`0F8291^^E(\,D>=QI
M5-%CR_"7A);VL)TA,L;P38C#D!#(/1D`F$KZ\-"LQH20-<K.Y<J9O:P]B)"R
MDA/%ATL_H<T0;+\DYKB.0>ZU4`<,4QY.P[\0U)O!V at 9)MI*7P9A;Z8B:6`7)
M"1&"8=B%M27+L<$1:QOB$1%=EKTJ2)XZ`*C=4!V\4.J[^U_TB(ZLU!%$640<
MN\#*\@,K2YF3*KWL1T.L>*#/7B407QT`!#6F:L;1J[QE2@,\S.ZNG^*IU-4H
MOPH<0CCL!%;>#$(P0S3D$HHK8(-]6',`X/H.EFLG'&4AO=[6=P(K1R^&H<KX
M2U%+9UY1-X=`F^HPP"X]FA`)I!FWJ89L,9J$9F5M?A%FN!T[2D4>XW[`,!$B
M6UO>=WP.=V58`V]M"0UKC_XH?INMH%D6?80&!LL`T(S_18OH+KHH0+$8&AD`
MMBW"!@"=4`\2AX)H+R!'MJ[0`6 at S$.KNQ#`X,UHUCQR*R%P(>52UI.FT7-0Q
M)(@>XV;,7"C?G##5DB(RW&F@$P`2-F.0 at 1C'7 at T3G%%RT@/&AA>H^3'4%"?J
MB at 5;"=FUMG*DDB%B"$NOVXXL2-O67IF4SA"(A4,9W at R!6+X4!G!)1:Y=MWFM
M"R;K6N7.H)A3!"7UCWWI.%A#%I-U"(Z?\I<AFX-<"^F!50 at U1CDH.SE-!X#0
M+2E"3VQH$;RQ=(L*S5`-<5!^J-#L>C.T[EA:C\KEN8EW=[M95.S92?-@&\U[
ME0%`,5^[95.&2T.%V`Q()0"<[\>P^>11SKI$"`)X$(?\H'8G`_$NPTP(B3&/
M5$VWE*-F!7P6!^F\&4'9CF-7`596$Z(E?A/Y2SA*!5TMWP&`4`>=O2)?&"$V
MBMU6,4P=-VD!&S!&A3;>DV';+HN9RC5#D^TN6!\X&N. at -\,8<21[,#CEZZ5)
M,7HKC_Q-7^&`%.-"ISKT'86EXP at J%#N3GSE!V)`?<.[JG at SR]Z%RD`O9'CPC
M>5$-1,0][&D5 at S!:+.,&;KKN1]2U=QO*.(.A*PUE>#'<Z2#A+G[)!R$.0'Q0
M30?@<2$PQLX.`/3V6'"5W!96ITSB6\*<N(00L^;,W\@LJI`>)<TPQ"_YRQ[>
M5F18P'T[-HSA=F&AX37\E'>M2K4NAA8!&I;`!F^M6\(P`43<`ALP7W?31<_A
M62@<L(MD)`/?SKS<Y[S06SLA&0*Q2;X3[U?AF)D+P19'S7[PVH,*/;'K9Y$!
M04-X+E>3@=[F+7*+;XM*4QS at DB(`!2!L\Y<M,ZZPL^D.BA[O9&W"90[XIK?Y
M!38 at R^<@'!2RW5 at I[U<R^B)>D9<BZ/`N*EDW>@<`&DQS%%,/RA!C$'<1[Z88
ME,-.12%7JG2V%(:ME!$K]ZX+3>?%VN87(N*/=%_/. at ZSO)&;F10#`,2DT<R@
MG64=/Q_2)H._N7`X*-860Y50+=D=X,5"QRVX0EYP*,#7(IR'$,X0*Z(04X>6
MM3R:A+/VJO/DU'J>Q2"KW7&9P4$0CC,,$WL6,.J&*6P8F6$_*XRG2(,;6ZX8
MC$Q+&I64#!&4EOGTBN+0UW(\!V&L'+VLKMX2[(+>[H=Y0D3FN:"9#.D;(VZ&
M4^MV`+>3J%`81H\@&1:S&9Y#9!#40:<TR%\W="-!.ND(Q)/A_2X0 at I[JIL81
MBHV+\.39YIL)<W:IUPCH7%)?$!%X<5!6Q&<!W2C//23L0?H8T(7]R$PXQ!()
MAY^^NOO#Q[4<\.)SJV\'Z$306C9U(!0\`'AS2$'9[<<"$>W`HRFFAS_D<MFE
M8$/L>J]JVYOGL!B`]#<?ZP"`-W*&'I4BGM<^EQCANS.$<GC>&4KN\=@IGV])
MSIF+FAEY1129#$+;>.(.M_X_5L1>HX<7STD'@'>K+]*WF,$M+:*WQP;1;G&]
MV&DP=RVB-!QW&22UZX:9V1;>'.@>CX)XG>61(2X24QQ#,/2]LIH3-J3![HT<
M7ER(RGG at UCD`X`U$Y*"L[_3.<&/#9'_$Y0I4%(;)4!A40_;('DAW(5/AW^YQ
M'Z`O5A,78D`KQ_Z`UWD%YA"*AAC2;(8*$6[80TWI%PF$!N.&6"Z\.2#F\^W;
M%FE*-WN[X6T';.@/"9N-"QT]$8`60]85-H)-*,?I;S[!;8<IZPPKPCTQ=M&4
M03ZQB*<34)J%ZN/#6OY:T+O%#7A\?:?TOG'<=82UA<2<(05MBRS_B3^+`%_J
M.H)O'Y3\U!^`[H]@(R3XORT@(U(87G(@AN*1_3R,P<T`U9U$SFP8IL-4SF".
M1D02-@<,UK&A&:_N_=`@B$/X;?'OUV(H"+"<C6(#T,U;GJ?*PPLU-[MJRXH@
M/-R<.E`*J-ZOATF&2R%NI8IA^N]3*(B(T#ZX"'XRW.F#<AIJX0K'$BF(SMM$
MC".(R*ZF#P"GMFCX;9F]*``@..[2*05DUX[BW%/S]L0$)M?9MGXJD;PZ-4X`
M$.V7WLNK>QUA9\EZ(L=UFC&2I>_"@-PJ36D0U%B,C)$/>''<FXG]X.6)7'.$
M]2XLM,,(<1"\L8'>SI\2\>P)=6HG(D3$F^N(%4&X?:7;24''W5VTT?EX)[+N
M\9!5@,V6X2!U'AJ at Y<QXBF/P&B\*[M4G2<=RI]UA at M\)O4E)"[FGU8:28H=X
MWWQOGN[AA3=O\UH[U0&[_2#O<<L>MQBH4E"/#DC'+("'Q47F3=$;YZ'%X"[B
M#]'4\KENRA at WDY_<2?!^L`\WGP9OAG1_4(+M8P2X6/+.FPQLI9B/A4S9%A6Z
M51T9"S_1F7L&1(.O8]N<<R)''9!\PY`13=$&+X:&"RT?Q,W'XV8&7O!MQER\
M%;?R8,N,(6SQ!@,?U5/*(LL0GYTZ at +D%(:V>2;"WTL*[U6H]:+$B8%(*]=!>
MU=#U$0QCJ?J&M9T_^P$\T_W-X)OW at X<X#9',S$Q\`%#;!#+'R12Z@<[?=VI/
MW3?LW#\Q(<=/+95&?B'<BM<H3@`JX8M4#;X95'<BY^&;`>=&KR3AADQ5PKX0
MBZ[Z>TX$9D=(,5^)<0FFMHS^S5`8I$QR%CI9S(J:C0M$@XT at H5K?L'?2[P?T
ME'#+<!X,U3.>013*\$%,78O!GSE1_5A40>MT3 at Q#>E`AI#.<V;%`V(0F8PH9
M<7#I<?=?;"#4"6\'1?KV\S4,A$E44;%P0`K*U*6Y"&_K6WX2=%P/VDAA$'4,
M<=#$`-(RU#9('4HA]JU\*UT`\`/$!CQ>32=T1$", at 8+P'%0A4Y>]`.-D#WC<
M,_<OM25&Q+\GA[@+Y,+QT#)<'F15R46G[`<@@FC'^!ULJAWGQ@,*':R7[G$:
M_$2;`=#EP.UO>1_[U\CY>TU?>!'CQ5:,W+-0&F0/%T)F\BB=!Q]7;@8:.`&=
M at 02WJ_5$VQ%U0`8&`#B7H:2LM%&LSB+'T7%T8AWM8-/9%PG(7K%`&!%VEN7#
M39`V*@<-2*`9$81<`0@:O'$<T&20L,EJ[D(82-TP!NA"UH5#;&+7P9IG7_QW
MC9Q]$;DE)*X at M`#5Z0;$6XO`<=!ABHB"96]@="+5A3#KQ08W0&>0OHEV2=Z-
M]7,Q#^=7J("$D7C/A'<355T^W=[;,,U1"A\=NK5+(1TABGJB6SP?P=QDYN at U
M?C*`(A<;R&HZ0H7P:!D&*<A^=HND%)\6M<>W,45U7X&E.^!PGD&%<#RT1$["
MLH!A?!,'A="F\,T77T818`[N>E+,$648G"+[6<OCIT!K%UULL-Q)!L6?S$1D
M.&`_73IA9REXS\>,M911/#X:,;7\+09<H`.VZI$.9,`T1QY$%,S`, at B@]2D.
MV+!"$5)[FT;?D/+A<]Z)(]&010:4(']#Q_U.5IUA4)"(A-_<8O#Z20JJ01=`
M(0@=K<K"M9\!(]0;T33X+`9T'G>PZ,T7TAA?A&MU,$X at 2K&W(!3\69.09#%9
M2 at DQ-Q2*5`5?;"!_:0X70G]@R:5VQYV[QYSH.N#5?G8&$A(6$55XTNU^K at 1L
M`!IX<Q1>A2"A$!`."^;0/Y0*#-WGIR/(7YL=AG#S&81JVF at V6=&$#Q#C]'&%
M5*_90Z$A''O<`?'F2+!U at 0_0IS#P;6!")X<E<!!OUNX50Z at GW<WRMVS497>"
M:=@#Q`9&7./7+6Q]"H1G4!BT`B4>5V%-=$EWGY%W_BUR>4AL1+6%<<F<IB)@
M9$#NG=!17'4&F1\[MAB(`;N=#;(8]4"E2%Y4`6D&ULK'-4PD0F&;ID(<)GBS
M2VJG5Z@'Z=O1 at R$H?A='H!':D&A5A%VS+<1WQ\&S-P\^'],A;E$A)`]%POSV
M&.13%=VF-JBL"GN><N>=-'K_0U.4`-(^G4&1]QXTAB08?2!"J$WMV?(SF_V"
MT`(-1L`)18N!$C"H88 at SPX5PX_$Z`,";D[CL9SD-M%4`]A6GG%VUQQ%V5B&3
MU"(J3Y+!<Q!"+#`QA%YC'C at 1I<*%&!ZJ&)O!6D at FL3I-0-WGS2F"#<,KH!E4
M(=[A-40^:#_4'8R0L#E@%!Y*`?25&K@#;,!Q9$`.3^!S&FB"*F*-2.T)B7F>
M+1@;)`%?()FQOC$&RY1AD+C at 7X]!H`'*`$KW12MGUP%\1&$NIB-XAMD;;$!S
M1!%]C>E4\H@\J-^F)[S!ANP8 at K<91`&QX/F7/;0(\!&E('_M%1P$!:*ID'J;
M at 3?G9AB*IUUA\"_$A/\<G`/8U1L)1LN`GN!]ZQN8,)?9-4\1$4$#G'_`6K-@
M8I5XA16J02E0B?^2$69F/(C0WC#TA. at Q$<F.=`DQ.,!#^F9$,'[LF%!4&A`1
MOAG"X,V9&;Y=53 at G[%D!P*284C`CC8M)IY at P>7W#3`CPG7:X0N<&@L!B,<2Q
MT%\@6JK85U';9`\<87BH(\"&?`/NX`-`AVEBF!`IEGA>`Y1V2#A at QI.O!R*6
M(CP8>40G<!`XQ.A%H.Q(3P9C$+TH$A]>9V!GW8`GU&8`!#1W!B`_MTST:;7*
MQV4OP#0<BG&E8#!Z=EU;!S.4:SK"^^5O`(M1DCGD(41X!R#6-3+^#Q/CS`"J
M?7/W8LE%&;U.RL]>Z"TT@?V<$T7 at 10K^X<9P+=`LS\)OV%<$8C0+XV5'3`C'
M0\&PV#F,%>-XMX/9-3$C*J8&BHR0%2=$<KDJ_P)U=^?9#TD1\<8&&FAU at VBH
MK<Q3==5^0%KUC-4>]-(%KF9FQK,&S/4-4-ADD.X==YHB-(%.S3,EUSNS9%2)
M?5WNT.]%C2Q&;7'9F0>M3Q!7)W83#0C+^!Q.!GZ>?`@MU'ZP7'M0&FR`$-2B
MD`?1!ZA#R95FE"(`WVF0'_!UYB&U!V9$;LO>D'`5$F/5AGE0SXU!UUGGQ$;$
M#6#"<G=03%T+&>Y@`YB#X6%MV`AN%=9,JG,+5(L-`U$1&9B$S$-^,#@JBAM.
MC`3TS1]$TS*QX_P?']52&!P>(DY"CW*9V`X]X4#2&6AUDB/:1P1`$\RCW*AB
MO#FS%)Q80'4.=M8QI_9@>?>%V"CJE`;/01ME[9%)*U5M<CW&!@W9<WC$:`:6
M"(C3[7U_T]S,X/`M=:3>9,`$2(3UXNXG,K8,2HL5Y20HB277.C)ER!<;8<RE
M!#D3=I5[T")>@=K#P%2)*1C+8KD7?44G2QPP81\(;0>%G<4S\FQDQFD7)(R/
M(F.F&!L0;QS0)@0`*(D'I.XG:%!M^%6CJ!E]78T<[C#M(0Q at PHKPC5QB_Q0`
M<!RI5HX!J_<S@@G'W;,'&JH8I4&1Z(9Y@=1BR;5>U8ZBS%=DWIF),62GI39B
M2N\!(HCSY65OBVT`&S@&)^$1U^T==ZK9?!%A5'0')!>8[CF0?L6<`#WQA@<7
MH!?ZW8D:6AK8+&![4>*B,`G)/DB'K`$RUA1!X:"2%`E-3A#Q1NC%!G)C$&DY
MC(^30:P().8?CX%')3?"!I##FNB=:$3!(6=W_2E6LILAU$I91+9<2D$?!$7:
MBNF0#[5KQYXW]\&5*XM!&\!`. at F9R4.V'Y0I!V2+4"SM<).3]X3M"6UC),B8
MPR$'_F&6*!FV!^_;C_"P.8==H"'F.PH=BP%D*+Q)!EP<-'A'J08'%S,R+,H?
MW2(08R#Y)R&D;<@9VG4;XL+Q?(0V/YV<<,48)&%DEE3W+7)@`IQ8$5X'.8`7
M^#-^DO!"^N:(M0S`(F/`A$!6)5>;Q`)U>QD32N$^!A[<P=/H;U$8*P*<T"(P
M(?W+YH=T!6$1Q[+G/4X&<.(GZ4AXDV#"LV=FN`MBDAL2O]Q\+<*J$AH42.&,
MW5<]WBS)(/WHG4`*"<DH)J!0!^]+H+`])D\KHB%Y4&1^45^&,`10>S;=G69)
M+BO6'`"05-U\U%VNAA$1'JX'"!8FXB"@1[979JU,%0)H,/P9!\3!0]<T$(30
M at A'10L8&%=U,V!\8`8W<`9FP%0;48L,E%ZT4TB24M6Q`;)KA0<$O+HY4'PEB
MUP`++0/DP!A4*#]"]W`2NH;"&[P at D`D''J(<N;ZE@(VBGU7A.2SV8VS(+%2$
M76%1<40*;S:=Q+<1V1?SCYU2./%:@`L'N?RE=C,C1A09P)5DA@/&'<AJ[*%'
MPQB0`@Y>XO at O^5'D at P^)]_$P4*/*Q]"5!HC<A8`YA#JG"7U0(JQY#>-F,#-^
M&;`E0K?>V1M\FQ%A&!P#6$*\0H-E,^P$--<Y0'7EE5\'"\J1P(,/66Z,0>@)
MAK%E+([AB&B#5]X7P!3NN-1E(-%EI1<;''=FQHK0,QUWL$&*<'`-3_L"[L"W
M[3^M9&>G(A20[J6AR-VY&?91!K4LL#@6(TD$%LZ!?QV3MKJI!M&E:-<_>@87
MPGJ56AH&/TH\)RG\",:!W+BU.4'%H?)`=_"6KI-JV3<L>ZK3F="OJ59FDJ:&
M:JP0=QYL4"+\=!0FP"=?JA at 89G]F;R1L!.26E*EQ-&`"Q#<GG!<TV-.E'OQT
M;)EUF;WQD<0;[N#5F1*F45J(RT4<)U#'!TVH!C1DAM`)JI)^)0`P/")UZ5ZW
ML+CEED^=:8,.K8&F8\B(`IX''9Z'0@"R%:.7;9`6. at DEPI9W\O%GJ5T%9J@%
M`(PBR,@\.F*<P?O#=J!/U-[ZYEU20U)CTF-JH'TWB&:X=+F/D=DY-U">!P.?
M133A-`?83`HA!S4O3N!I<$P"?"F>77-09%V4P@)Y-=YT5YNAN&L9'C//Q\49
M\!WR1<.U'D4*)1TUJ".DA:I>Y9<,EA!2IJ+!L_QY,4U.D2QB"9!#F6EH.D&>
MI+=@$#*/N>`OV?BE1L`$$"F:20]V`KQPITU[6YUZ0(-9D&H#=U<);@]2IL+1
M%%EA.@*2*!Q0<J'5&,3*-2]2YH2`RU5P4&-?`288$9D?^#!M]HIJH#+7*_(=
MH9!'9V_HBG-">U(]+@;OEF'B]165K9T0N=]`5795IKEL at GC_4HOE4[T'VHD1
MD at A="_9"I$1Q"I45#B*QW,$+:A>EX$W*:@F;*;D?I##L@>"R;:V6C9_L\F3,
MG(?8D%@[L':&$-Y'.G9[J&0BMYIQ!PP=EAD^=1-- at H?@^2D/S>;+F'L]AYM!
MRDEHUHO;@BKY-/*&QQW0!R,T=G,"W70=F)BPC,*1;MJ44-U4F"&T"!X>.*A9
MME)1!,;PTY%JK9IF@#7<89W5[E$1QHN<7&<0;5(*A>8JZ>ZQ>S!#CY(D($''
M7?:U[H6*QJ:LUB)T8W@>RL,Z]I%!AS0',B)Z+)]7)4Q5#!!EJF,Z3`C]@HR@
M`O(*9R#`-R56?FC:%\$'@HQDQK-W(>Q+R-@#EG]1-V"7?=C'U9SYI/UG.B$9
M at 1BE4.CA@&`7QQE at TA_*`RS&&&`4/B1[4&E-C1]=:H>F at 5U<`#*99O9S+0,6
MQ?@=D!]FYZ!ZSIXHA3`X1'"5JV0&PH[A;99+7K@/_0_VPSD91<XJ,.:"D%`B
MDU>DVBEU>I/$FQ*I:2:(]@:!P):L81P at -MD!UH/0A`@!Q@@'8&<.M70]E-FG
M71==<'?7P:,Y6'8.UA`8R:X="SP%3^.0G%!91Z``.12*)A-N40Y2"D^`M>D5
MXA;'G92Y3)@.K!>\`#YB91Q$:"-_N0[#WP+Q""9Z%]8G=@:%CRL3T5GJ=952
MI%<3E\`Y,@*PJ1G("#QCL+D9<%Z909'X:JZ5,\.N2"?P%.M#^G90%'G-`9$Y
M)P1R^20J<4#*'G05IED\89/G81=J"%EA3=V.I$@L6.R!:G4]?#N%01KWDM$C
MGR(V64UI!MW#7X1,-HO?7&;P!61Z#4,.!2Q at 4>$D3XE;N`M]!+OT;M$=X^'^
MN$Q$A)%;(VA<BJ'II+:7)BU-S@<L=B%8(DJ,')+=^8H8"[NX/60/1&@`T'R2
M&<<=X/CUY12,P>8#.0!=P@$'A#9"&_*7RV83NE%E9'#(T>V9&2 at _=SVXD-'7
M8J"$J at 95'ZJCM"T/C@&/-X"^.-U>8B at M;*`!0&2)2(";;![_>28L"T;6`9GF
MP0RN",@`/GX;E%\BZDJB47K8ZD9A;A]_ILCX9#Q%M6!_@'&64F<3O*&O50CM
MQJ:`@=*#0ZBW<'J2>`D;@@AXOH&XY?/9P?A\T1H7ELT<D/;#1#1Q-I['$'1F
M5QFCUMA'.&%Z2.B7N^89O%].Q+4 at V:R2TB1[("/LGJH$YT7:Z`B?J#AIOS4,
M,50;9M?(A=3<G/`OO%M<5>/G]#F*0`R">!6"FOT<]E<]P at CGYO[8'_QTH=-[
M,.ZH"85!TJ@];`K.9K(1&W!>H(%2^&J.G2H']/2ML"/6XEI9Y>D(IQ8=`2=P
M at 2<A8!,</D4?J+;W:S:(]:<XJ'/&D;-(:1"(:93$Z-F2E0I at W<VRYE5J/P>%
M1DI/2(S69LR&]^%QT6"8\"*9C3\G)87W20;-6*D`/O:4\*57Q1X-IM("G4>I
MM9/`5(MG4DD).>.[0B+F:(A$!OEFV`:J)#MAT[V*R)(E)PK6?<1><+DHH"<T
M1^%R%!:9`8`C5BJ`G:"!V=A1L(?RA6AW at XR*[6;=X-M=![%>='18)C]FXJIP
M&C1[(..=EWR!!E+`#6EM<D"0F&A:<2YYI2DT(2,<D-I<X^G=](0Z90V)2,B6
M at .;AF4XT9*K5VGBEL39VTK2W1O%":R7`E_]Q"E8`95@:#'Q5'F,P3FDQRT+W
M0'VF.I:%NS?\R0A6I-"A>\J9'RC%R2G>ETQ24%,[M'@MY@,5[(PO3PGJ at AR,
M=+93WV",Z@@!97[@3;JF3B?SU\\Q#&].`H%SXD at RT17*T<B-X9"+N2?"#-_B
M2E%\EIQBXK.9:H9Z4,;BR?2D.OQ&88`!BFUJ8><@&;R%">;V>9[2"2]2)Q@:
M"`>^Y0,F(UB+>NDA2>)UICIE$+13$H["Z8X#COZ>T4G_`*W]ED>(JZ!*]I,Q
MJG^7(>R`J5WBUT&2A])IR0'G:08<1XG@[MET;R@@,>"MDLRHR>8_-&.C7)#B
M+\H7%)[V4P-^H>3*W8ENKA1@@EZWC$@*;4N"BDVM3J/?P1!:R:G8I!%Q0+Y;
MA at 45@%NLC at PDA0FA/7LP*?"!2'"!92+DT'!E!GM:4(H1(:)`X\7E&9 at 9/2IO
M)RE8E?CA4^)$F%%@Z8+%KLD40:C.J2,4 at _E!$-`9N)RKI!%6<E2CM<YC@`1Y
M<Y3?V+`O@*5_9YSY5REF!0WR8CFD;\04/%7J57%%Y#0GR>4PZ`?>42WY7_>#
M+8DN-H)CQ'10(&I[0:EOEA]\7ZG=,;@]#)CPELT4`&!E9!8]B/F4A(<0*@9E
MR40<X;6'8MH;Z)7;885QEB(J1/5)3F$&('O@\0`PG- at R(2>H=?@I/!D`Z`"*
M4`!0-<(+..>+*"E,,HD+5<IK47>K at M#6D+FG4Z,CP;<E at VJ$\_%,1HPD7B at H
M>+0IQM,_B9Q:;GU.'O(;)@D$*VPJ9]Z`]!9,L1G,AFKBL7<>?I+S(8,5$;E[
MJF2(5Q3.G]UC*5(BA)-!*FC(,JYNL)\BB17VG-O>?5%G/@?]VH)85))_\\[\
M,7^8=,[<@Q>)1J:QP:O(4\RLC=S`9T/"J>;I8P!9N7N at XE[*4JD292+-*4TR
M?`BF(V%FY*5,ZU:(F%XA%-ZFF%)LD"K&]I1JK at C$P[*`:[X*/.&SY%Y&)_D3
MUQJ/I@?''106`(:HWN.S``W):MNJE+`M6(L*!2KFD_*CDBK&R16*5$B=@PA-
MR`_/2TUD.9)X6ZEYYJ^HD_;=R?,LR`FL:MTP,<()WJ2Q2$B>AT<GNPD`0$/K
M&Y_H),QVS2IDMU?`K2KBGM8BQIH#:9E8.H9H!0L&B3^H!\^@PXI^M%)66&%`
MM9%ZF8DK,0`=>(U)BQ`9[("T*W\Z&3R`7J6EY8!4@`7-?E"X<('MYY5FTXF@
MZMY[8!]T at KX'X,F3):>1&Z/JO*J;7"BTD$5TJ'PBN\89>`@FY<D#2L"'<$(M
M.#/P``L&2EGW50AA#G;(&+!%A(-M,)N2CRE%?O">G at F.03CYET&IKZ;I.D5N
MHV1JOADF,'CVAN^:@68&1IB\,X#@-XC$A>@P-1##GR&&L+H.<"+F>/ZE at S%I
MW[#6H1J&1W%"J&&`KH.&.HK:C-"JG)E\=J-,+%\DO0JFRF'=(K1Q0)$!Y2?R
MW9JH&S*'*@04=((>T:."AM8B#18=**,VW558EP)3!B?CY-L=KUA"042K/1\H
M!%4),Q`/Q*7$B=2YCZX=B0>/&B%)*^Z:;)U:$:&VD<[H$<V&,PI-;I:QS!B$
M^<R+_P(20.TE="?.=-HPO$":!VUI`*(0\6>J\R#(C8MH?D)FB';NHR@*=*X4
MU&F01OD!?"R&:A"(J:YO".AXT]&<=@D=X7UH*DOEN8 at F!H=:*K:7>WF/8I)$
M&@!LF*\@+C-_RH^QGVZWG^J5V>39^2].?79D8$I>RIG5&+3`C]ZDOYDA5';D
MAE3<M3*GIC,M at X*@@!X4W]>_L%0"=W]F"@>BNI?T@;;1B+!"9HB[9Y@:0CMF
MO?@>/`C at XY[FR<Z?^:FK*G%F$2/JA0CCC79&JF[@`KII;(34ZL>&B###>'69
M?1#:#]\&/EZNS8LRZH3NEI;+8R!,JBQX!*5:^5E%LIK.DDG"#!*9H$GAB;)O
M*%8JG&H.@"MR0-UU:B>/H<@WL+'O`<V"W+R!F\$&B#O(7^#%9H"E<I`!H")!
M&KI!*U4OA5&A?LO"*Q,9!*MSGZ2J.))DC>*0`#[FK=7IMJ#"?J`49I,W-]H7
M=QY'UY.2*_\KG="K+:IJY^FH/%`1TTT&5$)4=+@#O?4 at +)6;:6QYTO6L#4/>
M\@+9!\\B`UDH()K:P[_05LZJ3*5P^N4A:['H<Y2>5K0J'+ZI4V8&ST%-\<]N
ML\HL0ELZ]@LX1!O:YT$+:FT``(75L0N9Y^I5SJF\TYU6=0Z,`"<.N#-ML#XL
MKV5$-&3C*)?PV/T//^?2-=":L8BL]"`A-;,&77AX;DY"LI:L$L]&!OO98D!O
M.0:OXJN98BJ(ZMY/FP$M68,5D/26)G<%S;WI>O8IB.(2"-:.K3>E3?F"IG8L
MAEBZ."*O&)4/22ETLC&#_3#+RG@%YOR)=T8G7U*0)AE<@'`<JJ$;,+`S`]DW
M-5Z%I.1C(!GU?/:(_:`@C*EV'=IXC8Y\0BJ"N,<*N%OJAJ65\EJ#X_TJQ4D2
MHAB%<1K,MA6A3XFS/A^>AYW!@%XA0)=OVZ[*JJ\FRE?@YGUIW'X0?'6T<J:N
M@;\20L1CAU3##I*0'?[T8CX?F@,[^HDM&Q>"*]9YT%*E'(S;B`J'Z`D*X9`N
MAC"#<$!O"2K]`<(JD_*P!6G)X1OX=G8K;+`I-&3I+/'83<UY!6MPF%0B=3]G
M(KGB%K#B*#RH)L`&>H1:Z<QRHZ9<3BA#[)RBC/J((=!;MI5J<,L:DFG2TN6]
MC1$LS`>S2H:B<P)N4(:I3G#"1]NF<GU[9%?Z?:">W.AYB"M&F+N?U7!^-KAE
M!7=[7\"V9,;2!4B<!HP/[I('MK?V3.OXY@:MZ2=CP'KY@)I1!E0J[+FE")S0
MAU9W^BO3)LI0N6$60*O'GI)4QH7P&^(08%W>B>W5I=+8(<%;<!R)1P*H?3$+
M*RBBEBEL!N5@",NT!K/#)0UZ&D1`1$2 at NU?@!A<L-\;<HJZ\UK9 at -KZDC6(?
M6[!N27Z<7WLGI+1"15-DU4E+IP&M>QRHL&"&7@@RR at ELAW[J&?R7Q.,IX5Y&
ML#OMTGFT?J5;:D\'N]`I$9;RITLPN?1J>Q`W!+K-4CCY4(Z>TNE$*<K8HZ=K
MIGF/8H<+7I@@T>D&[H(0Z(;&F2(D7"L480Z7ATFK.1B\S()B)N^J<`=N9&#]
MC1="&X_G/I:9S!P`D"1=$22NX6BTC'$+QG^[/ZIW9`;\:@_*@L['4[I2_'2Z
M:"7E0WD&N:>'PAXM&^?=F1!8DC;$@?PCI+H'-V`&8FUY%=ZEO:H>?%QPPD'A
MS8FY;R">2"<D7#0O"9;.V`O35W*Z'[@.^UE$2.BN;_EL,&O3E9ITZA.[`L9B
MYYQ)AQ61(6UJA*E*U*4EK$'A(N*IW<2VE"&47*H!`U?HZGV':</U+Z1[^NB9
MPC"$0C<?D5&:):<3$/$8;=6BHQTH&O"FKZB;PM%I\JG:@SR"X'47N5E!XS/>
M":KD(UKYR:%41*NR&.!<JH&U=<*=?R]H?R!_V0=$1/KVTYJS^X'7P$;8'5A2
MF&MMEF&\`67)86`,C!]H>!TXK$EO->B=]+TN9E*9$=ZM4!:%Z79$!@SO6[-U
MCKDPGPTJ1SZ>^VK,]2SHNP&`#ML??+3$W-SW'.JNDX&U!3FT>%!=6QMVT0D_
M"L`;'+(834*A(-HI42"O3V5$]*BPH1%I]#6*/BG;*LW".Q5E%P:Q$7;E7_<D
M4%IYU2DI]1BP"T4"T'7^9F]VZU/$6O%:A-K`6ZK:$1K/1H-16+)N+6]`ZC9?
M:JYFV*/J"*1N/IO=VC4Z[_;P90`2J:;ON;9Y7>VD6*NW`E.J1*\:(P%P.,BU
M@^DT$^LMZ4`F'JF1KH&XC^L*$)^"=KH;!'_"`[97/A[YPP:8'_B2&0(=R
M!^9E8TDZ+**.79B0M)TI*F(AV\$TONX!6RIT(#=2QMRW&31<_4'_2R>VJ9#K
MMQ!LS;8]*D,GP/9]!Q,A,S]R"E,-('R)@`8D<`[L.5T'T:[N\-\*3UKEX:G+
M'KL!KR':'<"U:A]+I<)%IPZ(SM#=%$S;+])K at WC">F_V!AHJO[42(-A7P+[D
M7H18``J<S>O_T)`1G\+IGI,!_2 at 9WR=,'=@&(6BGE?@P?MZKXMKMI7MO;]W*
M:?FJ^DWF:+^J!Z!B;K9'*3R'[-&+$[HGJF0T?)PZ"7R'F9/]`;NSBZ1:QH*U
M3X8CQF_\OX+=O+H?.#XZ`HE[M>D1&V9"<NG2>5P@?YELV1<EB/8#].FNI(UI
M..<F6Q4A7Q=C\K1*JX[``3$A7*Q\0?A*C0L9^#O=SA=@@B.67TBF.."XQ!B<
M(C>?:1 at OG:N^(K$J.0H1<6'=1]4J=:W6IK60U7?+7\L at 9="8R62CB`!*LK(H
M;I%!, at S$1H8P=64&-N_T,A,J'#]G]N"(Y0>F9L][SOFZ686'PAFT1#:<U/@L
MV`8:+0AC/CX?D0'&U@@^L;K(.[O\X10KZ?\"<PT^_4$N_",VO%6N[9`HIA3&
MS7CIKG9]!1K#&`%#PCH<QN!#-KI"*;Z9.P(`,\^V(-H]C>F,JX#7?J"4P at VH
MW5V\8]_!^;P&)8P7G2>'BHSIJE3A.8A;A.Y-R!U,OTB=R6J($1$7PMM"XS1R
M`S']BDRFF#.AW[L8<$`@@M8):0FZY:T3"P`X->&D'.HJN'L^95NR*K)0=ZPP
M_,;*%\0L1UPWR)_?CF3PZBT(J)>02E8AQF;D?"G=AJ/*0Z"1@[7!&8(.6_B*
M.K,@@EGF at G&=0_`&,G!`'P5E!W4\1_V5R,<Y;"0'&K)X`!,.A0(P?!&1#A]M
M&2E$0*J-'%++/9X'L5YGR"3)N at 4@3\&_?J[.L%/\34JWXVN"RF5P=#B7</!N
MU<%;J2'VSMJ0NL$0F[NLDNNF\H`$95T, at US<'H`(@F9 at 9`;W#:2MAQL9:,8-
M,+G:[YJN+DDN_/T.P%[Q37C04@?))0CR^RP;.JQ]#,5VE]4I5-?-&7/3)3$W
M#)IS&)'40[V-O+;)(M',82"3&?_3&3Q[%&AHY;)0"OQM>E#/;D2 at +DK'M(ZH
M$(GIN@<C&>`E, at S/O*C\\"@,9[K!Y2U29[>VA63(0P/=\0U`5V1P'__`>2=F
M^Y`6#J;A^Z5M9@;T(7L8*%Q?1L3-M\>V2!E"248[8*Y"1UZD_Y%)W.XWAVVX
M"X6K:O`<^'ULF5R:%K.2N+'YYSUZHW53]1FY;8!%`FR8B_G'[U?:&1FX"[G:
MRBL#TPG^AB(2(-K"Z9/9:]AD!HQ?_=CM;0MME^,E*"O)7Q[%T$.H%&@C%$K[
M'J<LH-I)W-JSD!%'LY]%'!HBFS%VXH/N`J:Z.A4&I*KYMRGMCX[7-K4!*T>$
M@[W0O,D7O#`.(E.(K$N2I!@G+W7%)%E<.PAM,6W`AU9V4U=>;0)^8K!ZJPB;
M]VFOA&U+J\S^"/[&CB,GM#Z9'\R7($.Q:K(YZ'FDG2]'(&8"21)J$`9[%..;
M,L5J-^;V"'#R,M%&N8NDK*GG+=2"',9GD1D$8B=6@:C#N;7;S>QG<HHZ6HZ>
M(`9U!F@:2J'F#LJ8;]XX&9Q:A`3/@!O$JX,D>X!L)&S at HX<[3P"&)X_\<$"B
MQ\HK:&EO>'.DL*/K60TT$0;R6`\+&BK>G?#9(G/;L'+$$W>_-NL`?`:&&])#
MST$O6@[K<F"K(Z"KO:+G\>$T?FDA])0>M,9P<CH33P`+0P*/5]^1DT&*84Q&
MU*2A;6&[M2:W1?*I(8\(5LG:`+0 at VZ"JTTIU^DK):N=A:AA$)RA$10CL90AV
M,=N8SZJP=A8'U.#R&WSSG%#%X*JX`<D,UK(', at 7Y"BJ"!D!JX5`:KQ0^<(KY
MIC:S-UL[2>$IO!)==Y$S3[C(JY_)2G+.C2?S.'C!"S!:AE`;7H6#XU[Q4;@+
MPABY8-4%)?2P9E"K)&Q[;3J3.,=<TDH=21C"P-8F:7NFML*2G:<Z!G653X^\
M<!_F=17M)\=*2I.CLA=JW%BIV\+'I3F,DEX5PH!?BC+OE]%<+E-Y3:RG:KF0
M8%#61@?/]#42%OFP/!JSV.%I<#N38!A#R64Q\,9;<8F:^>IA$MV&]<H%"0$R
M;;<SG:E`L/`JI+Z=*/'4VL]Q#DO?<6#]A9-&Q.3,$980[U?QH84"S/N!N?-^
M:0Y,\TV(QND.CA@'TG"-/\LFO,#X5<;,'1BS0$`*KAS.)Q,A3A]%9WH2R\]+
M9V5J(,*R!JMSPD><33.C9"`W_IP+KJ'X#)Y:;$3,XTXBN@>1>6`;5)N1H?I+
M'6`4Q-MB>:9PS;9;W'@0>Z%=Y0=*U=E=F]GYXQYHQBD4D@@*R\BV+N9;$U:?
M!L>FX&H*;W5M:<`!B1#/897F`\^$`XKVP!L0;\EOT+Q7R!29+,69&=R`5T2K
MNN*BS&\@&"-^>J$<WA42:HZ-HZPSK(2Z)S"?,=S#@M!;\>IJ9F%LF=^"W$%C
M"*<648$;_)P7PD^4&:1[=:0-NBP#EN3#!VT("1'O:(RJ.9B&]L6[V25U4^BQ
MM.0>9(.V<=1(%#*"B=Y^2NAN#&S'OS"/2I2Q01(H9)85BIKS^QRR'?E%+NL9
M')!V*K_AV=()SG+K&!K(8IV!K)8'_[TDL6D8O4J<@(,.PIFREQFHPM'B\<_0
MPE0;<SD)H$L`H$4FKR`HEV1#GB;BFM!9OO(R64IYP!C;&S$QR?9_RB'+M, at W
M)PL53Y'";#O4I:0I]#NGQLXMYMC)$4:Y&_!2A"$OH$<R<7QN"8>$*0;#VHS1
M+7,+:U>]7ZV+60LUSPG^1KPR#Q\'HC2TA#6DPT6%11P:7".2`="EC?J\8B]V
MJ`2:RCE%U8OY5IG5\WNL4(>'"**-V._<1U>`.7AB\'`L#LG7UW(&=8UHUQW'
M2,0!O['_VG64 at BBM;5Z4J5W8VWV&RY(P,29<+@^E8Y]<]X&&-'4)H0_WD=BM
M(;LQX#`=:-Y[SC')>2-ZXHH1M\!4C at NWE:0MW&26`/Z&-)&WH)JN%.G>(@<;
M8`V1K[>`<U)WU>^Y&PG3HS;(&2HMW\`&U)ZQD3ZO%E>55\ANSL_K-PCU5;2T
M-`?Q3="HOAWN8,ER'--:+/T&@DO(JR-Q!*<SVZ-S01&['?#%S5=L?F-]@YG!
M1S?$X7#;:X\$*!:71<3OP*\P'\A*"BO4_-S;?%\HH5JL at D$E:*;.:1S8)J=E
MS3`^6\U25.8J#UQ34]8Y=#H9ZIX_[L+U<"\S=UB#X3FG]@=<H`OM+]'$>*A;
M*RA"PL5"VEI(ZAEZVOE'#\+0-[4V&UECRAKQELH9L`U&:(80K`I[B&^[*@E]
M,3C at A>#1!(1T)O_X3H8\F8']R\`8L5ZN`:08"V_RET_J'I30S0&YBL*^S^UD
MZKM0A[_3]1GKOVZW[N3VH:#0J)>DPN"(?2.-RX_ at XZ:54R/B%`P-?%98'+VZ
MV3-$35^=`44&/_+\(U\D;#=T/^?7U7-!XY19W:F2TJ+_/`"!S1KO*PJN`0"*
MB`H0&PB:2!V+;5]'%<#.Z!`1(AVI6E)V)P$IA1+UAFFI8`Y>`#(=2-4J!HW]
M?"1%DL$NB7?.#/)G;6HF@@A&!,?Z'HMNR?-]P?7^T!Z*AZ",0J4'\./Z*IR!
MB="JH#P3$.C"5OLNHMC:\JF2I90&Z.#B&!DTSMKTU?;YN5,7M at EKNM9X26P?
M05/ZUA&FA;UI(G.JA&8+EEH<@0(UXB'&QR6$C^<S`3%@\\M`*]$YK580:73Y
M0&=*=!"(7<"C8F.LZOZ,XX5O]VF'%PK'^G8W<P<KPL^Q\/(97S)ARA=#KU0U
MG<T=:,R at T4P((M"H$_2Y9X9I!BF,PI!(SPEU32#&PLJ#0^;X!RO at G-35=1TE
MQ,SJ at 9DALLK&P>N\$/BDFKSRM>)FITG$[=I<"BO/?(.F6LQQ!NK)<P`B9`'3
M\#GG+^4X5AB#63U6&LV2LB+O_F6Z*W4"O\(;H=J==R'D%S<?*U$:$*U8M;#;
M[06M?&_=1U-#R<>(RI'&<;['7?M)-L+06.5[[?>6CL,$`[3W!0!O+MN[%%X+
MF at Q-B6]N2<$)J&W//6?UZ\6!R9(.HK2^^0"-*T=AD.!B/R&XB^U*Z.*ZMK"4
M*9%D$2L"V@@S,];PM5><!F.3_%X'M%%Q>8Q<[QO:!I0];8:0/6L&M4UW$U<D
M<OUQ#UOCF@?9<748<33.R!*V:^7VT at BF/]U,O'Q!<Z4Q+/VR3[(AG`27D0(G
M724_$V/T at 6F);MN0[`&(T%,?C8+&_+=A%\0&$1M1H1B808*X31GN3Y%$V]89
M,,>=L<-03H)@R+/_G'&[M`MU35 at M[YLJQ;EX;C^O;J]=19J>=BKTCO0I(=ME
M(*R0$A)-WN`!_!S*%:4?(N$?PP8(0KHG4Y]V*[-LQ&'&!HQ?FFK7\7V#]T.8
MS'[>NG%OC?E^EK3J::`O'!1*-HB@!6"(PMC">+=B@%&N>Q/R,%"3'*Q`VK8(
M.(-4G3D"#R6SB,)L_*%];2CL]W*^UXE>&%1]S at YSJOKAZJWM)\`,AO*G6&!U
MM5^<J14:QG`$6(_*;`/F+9P&'`LT'5$#`$%2_/LMF!F36KC,GK%"4JM5#66X
M>THFC-`XKVR-W$%!DG+:,5?6X8A""X4!],S]#L"8-EJI[>VQBV"_[;#.E%*"
M:&=GM5T@`A8`37RWA0/Y:A at 8'BWU^2V:?1/<WD!8L"`(#VTCUV3"0IWI9B!H
M+JBB#*3@*=+(A.DGF6I/RH2N=47C\M]J at B6',32?J@&'4G*!0<13&1F_/-8L
M;@#@[+X*Y<'U?"$K''^I*$R%5[?:\=$]3O>6T)=VFV.$O[PU/YS-9K-`<X2)
MD([%(N1^H:AB#&@:Y1BG, at M9EV,*-24A%H>%04EI,='!L@>`&D);6B.7L!WA
MUP&"2$#ZS\MFX1A>)8>M\"ZD&6W1<2XHW5 at _O29L`YP:(PPV>'Y@:YYH'.+6
MJF2;#MJ4($CM1 at 9<X'*W,>`1<FQJQ_AE$>[!+FE1`A!9A)V(-M+;Z?8>-X*S
MQ^LW"/<I3\;GP1902+SBL!=U8GA]CA+PS>JG:JWRSC-*>SY\)9AY@$<PIXV<
MCDIVR=8U+70MT0G;G`%P["0O&PXXZ,Q;*L_'-J2=N-ZA<((-KO+!7 at 7M*_5\
M)1A2R_5`W)JT>_`7XK*",-IG4/HT:HNO0DL$=AP4R9>3@):IQ4N=\<UX0\F0
M`G>7*GZ,+K/S302_DX at T-_UX`LVO9``P!A024\#S(1P$E"@C]!6V?,SMD1'A
MS<$&30*4)W9$Q/:&!^MN*.%Y=X&XCKO4.J,)OG?;U`+C4`XW7^1+W0M)=)P!
MA82 at 6='A<0[8;`A2ZF$V1*_UD7-(!Q#\G6(S6`*,]IEB)M&K$^+4`H%5'ULS
MJSF0N"I?^EW%)N-P-^C-=Q^R314!T5XHY9!V'EZ71\G#L,[\7D\&;("X4='A
MT6TYB3<O2BG%,`,^&$L&+)MF8!P\>^NU at _>D#J3;PC*-O):PI8&UQ;<RK0"U
M?*V'/Z]DU3O.9+D!?GG=-S,2$3L@&IV!GI-Q]0L#I(`&S1CA8!SXWAZHO:&A
M.HN!>=!JQ3+4,>SS`;6IVRD4 at BCI@N1ZN<)Q:I4&<0"A`B>&D[Z=(VN3_[6!
MR4\55;@=309U@#$8G@$JJE$O'+ZZ@;4()DBL7=X7;6]\FQVX#5)":@XK;HDQ
M$<*9*[A)7!)_KEMTF3D9P`'EQ0VH!X2*0U`/1T!(*QS0LE!\W'S$VP:=>0:'
MZ6'=1Y>+YZ7(0D(G.=]+)X;-2C;`)'DWK15W!J"Y?0`;4HYHHF)I0C)0SLB$
ML.,8.NE!&5:XR-C_>8;0AC_"A[)*WHRBU@<0F<'PLN>%]/+,EB.T[@E3WD>D
M!QQNULURZ]>&T#>B0\()^.`Q=J>)EIO!B*Z2;M.IW0"DA!*(&*]R_=9`R;RE
MUVR7[^7K>0:Z&)SD[(&L$AT4B:6!(]MG- at RDRJ(P:DU+0\\809:*C(+*=!W-
SHAR_EOF
true || echo 'restore of ImageMagick/images/swan.miff.Z failed'
fi
echo 'End of ImageMagick part 5'
echo 'File ImageMagick/images/swan.miff.Z is continued in part 6'
echo 6 > _shar_seq_.tmp
exit 0
--
Dan Heller
O'Reilly && Associates Z-Code Software Comp-sources-x:
Senior Writer President comp-sources-x at uunet.uu.net
argv at ora.com argv at zipcode.com
More information about the Comp.sources.x
mailing list