diff --git a/README b/README index c882ffb..daa7961 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ The Independent JPEG Group's JPEG software ========================================== -README for release 5 of 24-Sep-94 +README for release 5a of 7-Dec-94 ================================= This distribution contains the fifth public release of the Independent JPEG @@ -9,9 +9,9 @@ Group's free JPEG software. You are welcome to redistribute this software and to use it for any purpose, subject to the conditions under LEGAL ISSUES, below. Serious users of this software (particularly those incorporating it into -larger programs) should contact jpeg-info@uunet.uu.net to be added to our -electronic mailing list. Mailing list members are notified of updates and -have a chance to participate in technical discussions, etc. +larger programs) should contact IJG at jpeg-info@uunet.uu.net to be added to +our electronic mailing list. Mailing list members are notified of updates +and have a chance to participate in technical discussions, etc. This software is the work of Tom Lane, Philip Gladstone, Luis Ortiz, Jim Boucher, Lee Crocker, George Phillips, Davide Rossi, Ge' Weijers, and other @@ -164,9 +164,8 @@ ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part of any program generated from the IJG code, this does not limit you more than the foregoing paragraphs do. -The configuration script "configure" was produced by GNU Autoconf. Again, -the FSF copyright terms apply only to configure, not to the IJG code; and -again, that does not limit your use of the object code. +The configuration script "configure" was produced with GNU Autoconf. It +is copyright by the Free Software Foundation but is freely distributable. It appears that the arithmetic coding option of the JPEG spec is covered by patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot @@ -194,12 +193,12 @@ The best short technical introduction to the JPEG compression algorithm is Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44. (Adjacent articles in that issue discuss MPEG motion picture compression, applications of JPEG, and related topics.) If you don't have the CACM issue -handy, a PostScript file containing a revised version of Wallace's article is -available at ftp.uu.net, graphics/jpeg/wallace.ps.gz. The file (actually a -preprint for an article to appear in IEEE Trans. Consumer Electronics) omits -the sample images that appeared in CACM, but it includes corrections and some -added material. Note: the Wallace article is copyright ACM and IEEE, and it -may not be used for commercial purposes. +handy, a PostScript file containing a revised version of Wallace's article +is available at ftp.uu.net, graphics/jpeg/wallace.ps.gz. The file (actually +a preprint for an article that appeared in IEEE Trans. Consumer Electronics) +omits the sample images that appeared in CACM, but it includes corrections +and some added material. Note: the Wallace article is copyright ACM and +IEEE, and it may not be used for commercial purposes. A somewhat less technical, more leisurely introduction to JPEG can be found in "The Data Compression Book" by Mark Nelson, published by M&T Books (Redwood @@ -264,7 +263,7 @@ ARCHIVE LOCATIONS The "official" archive site for this software is ftp.uu.net (Internet address 192.48.96.9). The most recent released version can always be found there in directory graphics/jpeg. This particular version will be archived -as graphics/jpeg/jpegsrc.v5.tar.gz. If you are on the Internet, you +as graphics/jpeg/jpegsrc.v5a.tar.gz. If you are on the Internet, you can retrieve files from ftp.uu.net by standard anonymous FTP. If you don't have FTP access, UUNET's archives are also available via UUCP; contact help@uunet.uu.net for information on retrieving files that way. @@ -274,18 +273,21 @@ you can probably find a copy at any site that archives comp.sources.misc submissions. However, only ftp.uu.net is guaranteed to have the latest official version. -You can also obtain this software from CompuServe, in the GRAPHSUPPORT forum -(GO GRAPHSUP); this version will be file jpsrc5.zip in library 15. Again, -CompuServe is not guaranteed to have the very latest version. +You can also obtain this software from CompuServe, in the GRAPHSUPPORT +forum (GO GRAPHSUP), probably in library 15 (there are rumors of a pending +reorganization there). Again, CompuServe is not guaranteed to have the +very latest version. The JPEG FAQ (Frequently Asked Questions) article is a useful source of -general information about JPEG. It is updated constantly and therefore -is not included in this distribution. The FAQ is posted every two weeks -to Usenet newsgroups comp.graphics, news.answers, and other groups. You -can always obtain the latest version from the news.answers archive at -rtfm.mit.edu (18.181.0.24). By FTP, fetch /pub/usenet/news.answers/jpeg-faq. -If you don't have FTP, send e-mail to mail-server@rtfm.mit.edu with body -"send usenet/news.answers/jpeg-faq". +general information about JPEG. It is updated constantly and therefore is +not included in this distribution. The FAQ is posted every two weeks to +Usenet newsgroups comp.graphics, news.answers, and other groups. You can +always obtain the latest version from the news.answers archive at +rtfm.mit.edu. By FTP, fetch /pub/usenet/news.answers/jpeg-faq/part1 and +.../part2. If you don't have FTP, send e-mail to mail-server@rtfm.mit.edu +with body + send usenet/news.answers/jpeg-faq/part1 + send usenet/news.answers/jpeg-faq/part2 RELATED SOFTWARE diff --git a/cderror.h b/cderror.h index 6479a4d..41a29cd 100644 --- a/cderror.h +++ b/cderror.h @@ -12,29 +12,29 @@ * some other language. */ - -/* To define the enum list of message codes, include this file without - * defining JMAKE_MSG_TABLE. To create the message string table, include it - * again with JMAKE_MSG_TABLE defined (this should be done in just one module). +/* + * To define the enum list of message codes, include this file without + * defining macro JMESSAGE. To create a message string table, include it + * again with a suitable JMESSAGE definition (see jerror.c for an example). */ +#ifndef JMESSAGE +#ifndef CDERROR_H +#define CDERROR_H +/* First time through, define the enum list */ +#define JMAKE_ENUM_LIST +#else +/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */ +#define JMESSAGE(code,string) +#endif /* CDERROR_H */ +#endif /* JMESSAGE */ -#ifdef JMAKE_MSG_TABLE - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define addon_message_table cdMsgTable -#endif - -const char * const addon_message_table[] = { - -#define JMESSAGE(code,string) string , - -#else /* not JMAKE_MSG_TABLE */ +#ifdef JMAKE_ENUM_LIST typedef enum { #define JMESSAGE(code,string) code , -#endif /* JMAKE_MSG_TABLE */ +#endif /* JMAKE_ENUM_LIST */ JMESSAGE(JMSG_FIRSTADDONCODE=1000, NULL) /* Must be first entry! */ @@ -120,16 +120,13 @@ JMESSAGE(JERR_UNKNOWN_FORMAT, "Unrecognized input file format") #endif JMESSAGE(JERR_UNSUPPORTED_FORMAT, "Unsupported output file format") -#ifdef JMAKE_MSG_TABLE - - NULL -}; - -#else /* not JMAKE_MSG_TABLE */ +#ifdef JMAKE_ENUM_LIST JMSG_LASTADDONCODE } ADDON_MESSAGE_CODE; -#endif /* JMAKE_MSG_TABLE */ +#undef JMAKE_ENUM_LIST +#endif /* JMAKE_ENUM_LIST */ +/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */ #undef JMESSAGE diff --git a/change.log b/change.log index ac2bbea..8a7b8db 100644 --- a/change.log +++ b/change.log @@ -1,6 +1,34 @@ CHANGE LOG for Independent JPEG Group's JPEG software +Version 5a 7-Dec-94 +-------------------- + +Changed color conversion roundoff behavior so that grayscale values are +represented exactly. (This causes test image files to change.) + +Make ordered dither use 16x16 instead of 4x4 pattern for a small quality +improvement. + +New configure script based on latest GNU Autoconf. +Fix configure script to handle CFLAGS correctly. +Rename *.auto files to *.cfg, so that configure script still works if +file names have been truncated for DOS. + +Fix bug in rdbmp.c: didn't allow for extra data between header and image. + +Modify rdppm.c/wrppm.c to handle 2-byte raw PPM/PGM formats for 12-bit data. + +Fix several bugs in rdrle.c. + +NEED_SHORT_EXTERNAL_NAMES option was broken. + +Revise jerror.h/jerror.c for more flexibility in message table. + +Repair oversight in jmemname.c NO_MKTEMP case: file could be there +but unreadable. + + Version 5 24-Sep-94 -------------------- diff --git a/cjpeg.c b/cjpeg.c index 33347f3..6fe7ee1 100644 --- a/cjpeg.c +++ b/cjpeg.c @@ -24,8 +24,6 @@ */ #include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ -#define JMAKE_MSG_TABLE -#include "cderror.h" /* create message string table */ #include "jversion.h" /* for version message */ #include /* to declare isupper(), tolower() */ @@ -74,6 +72,16 @@ #endif +/* Create the add-on message string table. */ + +#define JMESSAGE(code,string) string , + +static const char * const cdjpeg_message_table[] = { +#include "cderror.h" + NULL +}; + + /* * This routine determines what format the input file is, * and selects the appropriate input-reading module. @@ -726,7 +734,7 @@ main (int argc, char **argv) cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); /* Add some application-specific error messages (from cderror.h) */ - jerr.addon_message_table = addon_message_table; + jerr.addon_message_table = cdjpeg_message_table; jerr.first_addon_message = JMSG_FIRSTADDONCODE; jerr.last_addon_message = JMSG_LASTADDONCODE; @@ -863,6 +871,12 @@ main (int argc, char **argv) jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); + /* Close files, if we opened them */ + if (input_file != stdin) + fclose(input_file); + if (output_file != stdout) + fclose(output_file); + #ifdef PROGRESS_REPORT /* Clear away progress display */ if (jerr.trace_level == 0) { diff --git a/configure b/configure index 0d62d68..4c25b3d 100755 --- a/configure +++ b/configure @@ -1,212 +1,566 @@ #!/bin/sh + # Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf. -# Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. +# Generated automatically using autoconf version 2.1 +# Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --enable-maxmem[=N] enable use of temp files, set max mem usage to N MB" +ac_help="$ac_help +" -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# Initialize some other variables. +subdirs= -# Usage: configure [--srcdir=DIR] [--host=HOST] [--gas] [--nfp] -# [--prefix=PREFIX] [--exec-prefix=PREFIX] [--with-PACKAGE[=VALUE]] -# Ignores all args except --srcdir, --prefix, --exec-prefix, and -# --with-PACKAGE[=VALUE] unless this script has special code to handle it. - -for arg +ac_prev= +for ac_option do - # Handle --exec-prefix with a space before the argument. - if test x$next_exec_prefix = xyes; then exec_prefix=$arg; next_exec_prefix= - # Handle --host with a space before the argument. - elif test x$next_host = xyes; then next_host= - # Handle --prefix with a space before the argument. - elif test x$next_prefix = xyes; then prefix=$arg; next_prefix= - # Handle --srcdir with a space before the argument. - elif test x$next_srcdir = xyes; then srcdir=$arg; next_srcdir= - else - case $arg in - # For backward compatibility, recognize -exec-prefix and --exec_prefix. - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* | --exec=* | --exe=* | --ex=* | --e=*) - exec_prefix=`echo $arg | sed 's/[-a-z_]*=//'` ;; - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- | --exec | --exe | --ex | --e) - next_exec_prefix=yes ;; - -gas | --gas | --ga | --g) ;; - - -host=* | --host=* | --hos=* | --ho=* | --h=*) ;; - -host | --host | --hos | --ho | --h) - next_host=yes ;; - - -nfp | --nfp | --nf) ;; - - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=`echo $arg | sed 's/[-a-z_]*=//'` ;; - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - next_prefix=yes ;; - - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=* | --s=*) - srcdir=`echo $arg | sed 's/[-a-z_]*=//'` ;; - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr | --s) - next_srcdir=yes ;; - - -with-* | --with-*) - package=`echo $arg|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that aren't valid shell variable names. - if test -n "`echo $package| sed 's/[-a-zA-Z0-9_]//g'`"; then - echo "configure: $package: invalid package name" >&2; exit 1 - fi - package=`echo $package| sed 's/-/_/g'` - case "$arg" in - *=*) val="`echo $arg|sed 's/[^=]*=//'`" ;; - *) val=1 ;; - esac - eval "with_$package='$val'" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb | --ver | --ve | --v) - verbose=yes ;; - - *=*) - varname=`echo $arg|sed -e 's/=.*//'` - # Reject names that aren't valid shell variable names. - if test -n "`echo $varname| sed 's/[a-zA-Z0-9_]//g'`"; then - echo "configure: $varname: invalid shell variable name" >&2; exit 1 - fi - val="`echo $arg|sed 's/[^=]*=//'`" - test -n "$verbose" && echo " setting shell variable $varname to $val" - eval "$varname='$val'" - eval "export $varname" ;; - - *) ;; - esac + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -build | --build | --buil | --bui | --bu | --b) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=* | --b=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=PREFIX install architecture-dependent files in PREFIX + [same as prefix] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +--enable and --with options recognized:$ac_help +EOF + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.1" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *=*) + varname=`echo "$ac_option"|sed -e 's/=.*//'` + # Reject names that aren't valid shell variable names. + if test -n "`echo $varname| sed 's/[a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $varname: invalid shell variable name" 1>&2; exit 1; } + fi + val="`echo "$ac_option"|sed 's/[^=]*=//'`" + test -n "$verbose" && echo " setting shell variable $varname to $val" + eval "$varname='$val'" + eval "export $varname" ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac done -trap 'rm -fr conftest* confdefs* core; exit 1' 1 3 15 -trap 'rm -f confdefs*' 0 +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 unused; standard input +# 1 file creation +# 2 errors and warnings +# 3 unused; some systems may open it to /dev/tty +# 4 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 4>/dev/null +else + exec 4>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done # NLS nuisances. +# Only set LANG and LC_ALL to C if already set. # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). -if test "${LC_ALL+set}" = 'set' ; then LC_ALL=C; export LC_ALL; fi -if test "${LANG+set}" = 'set' ; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LANG+set}" = set; then LANG=C; export LANG; fi -rm -f conftest* confdefs.h +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo > confdefs.h -compile='${CC-cc} $CFLAGS conftest.c -o conftest $LIBS >/dev/null 2>&1' # A filename unique to this package, relative to the directory that # configure is in, which we can look for to find out if srcdir is correct. -unique_file=jcmaster.c +ac_unique_file=jcmaster.c # Find the source files, if location was not specified. if test -z "$srcdir"; then - srcdirdefaulted=yes - # Try the directory containing this script, then `..'. - prog=$0 - confdir=`echo $prog|sed 's%/[^/][^/]*$%%'` - test "X$confdir" = "X$prog" && confdir=. - srcdir=$confdir - if test ! -r $srcdir/$unique_file; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi +else + ac_srcdir_defaulted=no fi -if test ! -r $srcdir/$unique_file; then - if test x$srcdirdefaulted = xyes; then - echo "configure: Can not find sources in \`${confdir}' or \`..'." 1>&2 +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } else - echo "configure: Can not find sources in \`${srcdir}'." 1>&2 + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } fi - exit 1 fi -# Preserve a srcdir of `.' to avoid automounter screwups with pwd. -# But we can't avoid them for `..', to make subdirectories work. -case $srcdir in - .|/*|~*) ;; - *) srcdir=`cd $srcdir; pwd` ;; # Make relative path absolute. -esac +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done -# Save the original args to write them into config.status later. -configure_args="$*" +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} $CFLAGS $CPPFLAGS conftest.$ac_ext -c 1>&5 2>&5' +ac_link='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext -o conftest $LIBS 1>&5 2>&5' + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi -if test -z "$CC"; then - # Extract the first word of `gcc', so it can be a program name with args. - set dummy gcc; word=$2 - echo checking for $word - IFS="${IFS= }"; saveifs="$IFS"; IFS="${IFS}:" - for dir in $PATH; do - test -z "$dir" && dir=. - if test -f $dir/$word; then - CC="gcc" + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&4 +if eval "test \"`echo '${'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&4 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" break fi done - IFS="$saveifs" + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_CC" && ac_cv_prog_CC="cc" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&4 +else + echo "$ac_t""no" 1>&4 fi -test -z "$CC" && CC="cc" -test -n "$CC" && test -n "$verbose" && echo " setting CC to $CC" -# Find out if we are using GNU C, under whatever name. -cat > conftest.c <&4 +if eval "test \"`echo '${'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&4 +else + cat > conftest.c < conftest.out 2>&1 -if egrep yes conftest.out >/dev/null 2>&1; then - GCC=1 # For later tests. +if ${CC-cc} -E conftest.c 2>&5 | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi +echo "$ac_t""$ac_cv_prog_gcc" 1>&4 +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi +if test "${CFLAGS+set}" != set; then + echo $ac_n "checking whether ${CC-cc} accepts -O""... $ac_c" 1>&4 +if eval "test \"`echo '${'ac_cv_prog_cc_o'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&4 +else + echo 'int f(){ return 0; }' > conftest.c +if test -z "`${CC-cc} -O -c conftest.c 2>&1`"; then + ac_cv_prog_cc_o=yes +else + ac_cv_prog_cc_o=no fi rm -f conftest* -echo checking how to run the C preprocessor +fi + echo "$ac_t""$ac_cv_prog_cc_o" 1>&4 + if test $ac_cv_prog_cc_o = yes; then + CFLAGS="-O" + else + CFLAGS="" + fi +fi + +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&4 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi if test -z "$CPP"; then - # This must be in double quotes, not single quotes, because CPP may get - # substituted into the Makefile and ``${CC-cc}'' will simply confuse - # make. It must be expanded now. +if eval "test \"`echo '${'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&4 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. CPP="${CC-cc} -E" - cat > conftest.c < conftest.$ac_ext < +#include Syntax Error EOF -err=`eval "($CPP conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then +eval "$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then : else + echo "$ac_err" >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +eval "$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 rm -rf conftest* CPP=/lib/cpp fi rm -f conftest* fi -test ".${verbose}" != "." && echo " setting CPP to $CPP" +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi +fi +CPP="$ac_cv_prog_CPP" +echo "$ac_t""$CPP" 1>&4 -echo checking whether cross-compiling # If we cannot run a trivial program, we must be cross compiling. -cat > conftest.c </dev/null; then - : +echo $ac_n "checking whether cross-compiling""... $ac_c" 1>&4 +if eval "test \"`echo '${'ac_cv_c_cross'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&4 else - cross_compiling=1 + if test "$cross_compiling" = yes; then + ac_cv_cross=yes +else +cat > conftest.$ac_ext </dev/null; then + ac_cv_c_cross=no +else + ac_cv_c_cross=yes +fi fi rm -fr conftest* +fi +cross_compiling=$ac_cv_c_cross +echo "$ac_t""$ac_cv_c_cross" 1>&4 -echo checking for function prototypes -cat > conftest.c <&4 +if eval "test \"`echo '${'ijg_cv_have_prototypes'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&4 +else + cat > conftest.$ac_ext <> confdefs.h -DEFS="$DEFS -DHAVE_PROTOTYPES=" -SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_PROTOTYPES\${SEDdB}HAVE_PROTOTYPES\${SEDdC}\${SEDdD} -\${SEDuA}HAVE_PROTOTYPES\${SEDuB}HAVE_PROTOTYPES\${SEDuC}\${SEDuD} -\${SEDeA}HAVE_PROTOTYPES\${SEDeB}HAVE_PROTOTYPES\${SEDeC}\${SEDeD} -" -} - - + ijg_cv_have_prototypes=yes else rm -rf conftest* - echo Your compiler does not seem to know about function prototypes. -echo Perhaps it needs a special switch to enable ANSI C mode. -echo If so, we recommend running configure like this: -echo " ./configure CC='cc -switch'" -echo where -switch is the proper switch. - + ijg_cv_have_prototypes=no fi rm -f conftest* -echo checking for stddef.h -cat > conftest.c <&4 +if test $ijg_cv_have_prototypes = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_PROTOTYPES +EOF + +else + echo Your compiler does not seem to know about function prototypes. + echo Perhaps it needs a special switch to enable ANSI C mode. + echo If so, we recommend running configure like this: + echo " ./configure CC='cc -switch'" + echo where -switch is the proper switch. +fi +ac_safe=`echo "stddef.h" | tr './\055' '___'` +echo $ac_n "checking for stddef.h""... $ac_c" 1>&4 +if eval "test \"`echo '${'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&4 +else + cat > conftest.$ac_ext < EOF -err=`eval "($CPP conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then +eval "$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" HAVE_STDDEF_H to be empty -echo "#define" HAVE_STDDEF_H >> confdefs.h -DEFS="$DEFS -DHAVE_STDDEF_H=" -SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_STDDEF_H\${SEDdB}HAVE_STDDEF_H\${SEDdC}\${SEDdD} -\${SEDuA}HAVE_STDDEF_H\${SEDuB}HAVE_STDDEF_H\${SEDuC}\${SEDuD} -\${SEDeA}HAVE_STDDEF_H\${SEDeB}HAVE_STDDEF_H\${SEDeC}\${SEDeD} -" -} - - + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&4 + cat >> confdefs.h <<\EOF +#define HAVE_STDDEF_H +EOF -echo checking for stdlib.h -cat > conftest.c <&4 +fi + +ac_safe=`echo "stdlib.h" | tr './\055' '___'` +echo $ac_n "checking for stdlib.h""... $ac_c" 1>&4 +if eval "test \"`echo '${'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&4 +else + cat > conftest.$ac_ext < EOF -err=`eval "($CPP conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then +eval "$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" HAVE_STDLIB_H to be empty -echo "#define" HAVE_STDLIB_H >> confdefs.h -DEFS="$DEFS -DHAVE_STDLIB_H=" -SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_STDLIB_H\${SEDdB}HAVE_STDLIB_H\${SEDdC}\${SEDdD} -\${SEDuA}HAVE_STDLIB_H\${SEDuB}HAVE_STDLIB_H\${SEDuC}\${SEDuD} -\${SEDeA}HAVE_STDLIB_H\${SEDeB}HAVE_STDLIB_H\${SEDeC}\${SEDeD} -" -} - - + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&4 + cat >> confdefs.h <<\EOF +#define HAVE_STDLIB_H +EOF -echo checking for string.h -cat > conftest.c <&4 +fi + +ac_safe=`echo "string.h" | tr './\055' '___'` +echo $ac_n "checking for string.h""... $ac_c" 1>&4 +if eval "test \"`echo '${'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&4 +else + cat > conftest.$ac_ext < EOF -err=`eval "($CPP conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - : -else +eval "$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" NEED_BSD_STRINGS to be empty -echo "#define" NEED_BSD_STRINGS >> confdefs.h -DEFS="$DEFS -DNEED_BSD_STRINGS=" -SEDDEFS="${SEDDEFS}\${SEDdA}NEED_BSD_STRINGS\${SEDdB}NEED_BSD_STRINGS\${SEDdC}\${SEDdD} -\${SEDuA}NEED_BSD_STRINGS\${SEDuB}NEED_BSD_STRINGS\${SEDuC}\${SEDuD} -\${SEDeA}NEED_BSD_STRINGS\${SEDeB}NEED_BSD_STRINGS\${SEDeC}\${SEDeD} -" -} - + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&4 + : +else + echo "$ac_t""no" 1>&4 +cat >> confdefs.h <<\EOF +#define NEED_BSD_STRINGS +EOF -echo checking for size_t -cat > conftest.c <&4 +cat > conftest.$ac_ext < conftest.c < conftest.c <&4 +if test "$ijg_size_t_ok" != yes; then +ac_safe=`echo "sys/types.h" | tr './\055' '___'` +echo $ac_n "checking for sys/types.h""... $ac_c" 1>&4 +if eval "test \"`echo '${'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&4 +else + cat > conftest.$ac_ext < EOF -err=`eval "($CPP conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then +eval "$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" NEED_SYS_TYPES_H to be empty -echo "#define" NEED_SYS_TYPES_H >> confdefs.h -DEFS="$DEFS -DNEED_SYS_TYPES_H=" -SEDDEFS="${SEDDEFS}\${SEDdA}NEED_SYS_TYPES_H\${SEDdB}NEED_SYS_TYPES_H\${SEDdC}\${SEDdD} -\${SEDuA}NEED_SYS_TYPES_H\${SEDuB}NEED_SYS_TYPES_H\${SEDuC}\${SEDuD} -\${SEDeA}NEED_SYS_TYPES_H\${SEDeB}NEED_SYS_TYPES_H\${SEDeC}\${SEDeD} -" -} + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&4 + cat >> confdefs.h <<\EOF +#define NEED_SYS_TYPES_H +EOF +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "size_t" >/dev/null 2>&1; then + rm -rf conftest* + ijg_size_t_ok="size_t is in sys/types.h" +else + rm -rf conftest* + ijg_size_t_ok=no +fi +rm -f conftest* + +else + echo "$ac_t""no" 1>&4 +ijg_size_t_ok=no +fi + +echo "$ac_t""$ijg_size_t_ok" 1>&4 +if test "$ijg_size_t_ok" = no; then + echo Type size_t is not defined in any of the usual places. + echo Try putting '"typedef unsigned int size_t;"' in jconfig.h. +fi +fi +echo $ac_n "checking for type unsigned char""... $ac_c" 1>&4 +cat > conftest.$ac_ext <&4 +cat >> confdefs.h <<\EOF +#define HAVE_UNSIGNED_CHAR +EOF else rm -rf conftest* - echo Type size_t is not defined in any of the usual places. -echo Try putting '"typedef unsigned int size_t;"' in jconfig.h. - + echo "$ac_t""no" 1>&4 fi rm -f conftest* - -fi -rm -f conftest* -echo checking for unsigned char -cat > conftest.c <&4 +cat > conftest.$ac_ext <> confdefs.h -DEFS="$DEFS -DHAVE_UNSIGNED_CHAR=" -SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_UNSIGNED_CHAR\${SEDdB}HAVE_UNSIGNED_CHAR\${SEDdC}\${SEDdD} -\${SEDuA}HAVE_UNSIGNED_CHAR\${SEDuB}HAVE_UNSIGNED_CHAR\${SEDuC}\${SEDuD} -\${SEDeA}HAVE_UNSIGNED_CHAR\${SEDeB}HAVE_UNSIGNED_CHAR\${SEDeC}\${SEDeD} -" -} - + echo "$ac_t""yes" 1>&4 +cat >> confdefs.h <<\EOF +#define HAVE_UNSIGNED_SHORT +EOF +else + rm -rf conftest* + echo "$ac_t""no" 1>&4 fi rm -f conftest* -echo checking for unsigned short -cat > conftest.c <> confdefs.h -DEFS="$DEFS -DHAVE_UNSIGNED_SHORT=" -SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_UNSIGNED_SHORT\${SEDdB}HAVE_UNSIGNED_SHORT\${SEDdC}\${SEDdD} -\${SEDuA}HAVE_UNSIGNED_SHORT\${SEDuB}HAVE_UNSIGNED_SHORT\${SEDuC}\${SEDuD} -\${SEDeA}HAVE_UNSIGNED_SHORT\${SEDeB}HAVE_UNSIGNED_SHORT\${SEDeC}\${SEDeD} -" -} - - -fi -rm -f conftest* -echo checking for type void -cat > conftest.c <&4 +cat > conftest.$ac_ext <&4 else rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" void to be char -echo "#define" void char >> confdefs.h -DEFS="$DEFS -Dvoid=char" -SEDDEFS="${SEDDEFS}\${SEDdA}void\${SEDdB}void\${SEDdC}char\${SEDdD} -\${SEDuA}void\${SEDuB}void\${SEDuC}char\${SEDuD} -\${SEDeA}void\${SEDeB}void\${SEDeC}char\${SEDeD} -" -} + echo "$ac_t""no" 1>&4 +cat >> confdefs.h <<\EOF +#define void char +EOF fi rm -f conftest* -prog='/* Ultrix mips cc rejects this. */ +echo $ac_n "checking for working const""... $ac_c" 1>&4 +if eval "test \"`echo '${'ac_cv_c_const'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&4 +else + cat > conftest.$ac_ext < conftest.c <> confdefs.h -DEFS="$DEFS -Dconst=" -SEDDEFS="${SEDDEFS}\${SEDdA}const\${SEDdB}const\${SEDdC}\${SEDdD} -\${SEDuA}const\${SEDuB}const\${SEDuC}\${SEDuD} -\${SEDeA}const\${SEDeB}const\${SEDeC}\${SEDeD} -" } +; return 0; } +EOF +if eval $ac_compile; then + rm -rf conftest* + ac_cv_c_const=yes +else + rm -rf conftest* + ac_cv_c_const=no fi rm -f conftest* -echo checking for inline -cat > conftest.c <&4 +if test $ac_cv_c_const = no; then + cat >> confdefs.h <<\EOF +#define const +EOF + +fi + +echo $ac_n "checking for inline""... $ac_c" 1>&4 +ijg_cv_inline="" +cat > conftest.$ac_ext <> confdefs.h -DEFS="$DEFS -DINLINE=inline" -SEDDEFS="${SEDDEFS}\${SEDdA}INLINE\${SEDdB}INLINE\${SEDdC}inline\${SEDdD} -\${SEDuA}INLINE\${SEDuB}INLINE\${SEDuC}inline\${SEDuD} -\${SEDeA}INLINE\${SEDeB}INLINE\${SEDeC}inline\${SEDeD} -" -} - - + ijg_cv_inline="inline" else rm -rf conftest* - cat > conftest.c < conftest.$ac_ext <> confdefs.h -DEFS="$DEFS -DINLINE=__inline__" -SEDDEFS="${SEDDEFS}\${SEDdA}INLINE\${SEDdB}INLINE\${SEDdC}__inline__\${SEDdD} -\${SEDuA}INLINE\${SEDuB}INLINE\${SEDuC}__inline__\${SEDuD} -\${SEDeA}INLINE\${SEDeB}INLINE\${SEDeC}__inline__\${SEDeD} -" -} - - + ijg_cv_inline="__inline__" else rm -rf conftest* - cat > conftest.c < conftest.$ac_ext <> confdefs.h -DEFS="$DEFS -DINLINE=__inline" -SEDDEFS="${SEDDEFS}\${SEDdA}INLINE\${SEDdB}INLINE\${SEDdC}__inline\${SEDdD} -\${SEDuA}INLINE\${SEDuB}INLINE\${SEDuC}__inline\${SEDuD} -\${SEDeA}INLINE\${SEDeB}INLINE\${SEDeC}__inline\${SEDeD} -" -} - - -else - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" INLINE to be empty -echo "#define" INLINE >> confdefs.h -DEFS="$DEFS -DINLINE=" -SEDDEFS="${SEDDEFS}\${SEDdA}INLINE\${SEDdB}INLINE\${SEDdC}\${SEDdD} -\${SEDuA}INLINE\${SEDuB}INLINE\${SEDuC}\${SEDuD} -\${SEDeA}INLINE\${SEDeB}INLINE\${SEDeC}\${SEDeD} -" -} - + ijg_cv_inline="__inline" fi rm -f conftest* @@ -628,68 +1001,66 @@ rm -f conftest* fi rm -f conftest* -echo checking for broken incomplete types -cat > conftest.c <&4 +cat >> confdefs.h <&4 +cat > conftest.$ac_ext <&4 else rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" INCOMPLETE_TYPES_BROKEN to be empty -echo "#define" INCOMPLETE_TYPES_BROKEN >> confdefs.h -DEFS="$DEFS -DINCOMPLETE_TYPES_BROKEN=" -SEDDEFS="${SEDDEFS}\${SEDdA}INCOMPLETE_TYPES_BROKEN\${SEDdB}INCOMPLETE_TYPES_BROKEN\${SEDdC}\${SEDdD} -\${SEDuA}INCOMPLETE_TYPES_BROKEN\${SEDuB}INCOMPLETE_TYPES_BROKEN\${SEDuC}\${SEDuD} -\${SEDeA}INCOMPLETE_TYPES_BROKEN\${SEDeB}INCOMPLETE_TYPES_BROKEN\${SEDeC}\${SEDeD} -" -} + echo "$ac_t""broken" 1>&4 +cat >> confdefs.h <<\EOF +#define INCOMPLETE_TYPES_BROKEN +EOF fi rm -f conftest* -echo checking for short external names -cat > conftest.c <&4 +cat > conftest.$ac_ext <&4 else rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" NEED_SHORT_EXTERNAL_NAMES to be empty -echo "#define" NEED_SHORT_EXTERNAL_NAMES >> confdefs.h -DEFS="$DEFS -DNEED_SHORT_EXTERNAL_NAMES=" -SEDDEFS="${SEDDEFS}\${SEDdA}NEED_SHORT_EXTERNAL_NAMES\${SEDdB}NEED_SHORT_EXTERNAL_NAMES\${SEDdC}\${SEDdD} -\${SEDuA}NEED_SHORT_EXTERNAL_NAMES\${SEDuB}NEED_SHORT_EXTERNAL_NAMES\${SEDuC}\${SEDuD} -\${SEDeA}NEED_SHORT_EXTERNAL_NAMES\${SEDeB}NEED_SHORT_EXTERNAL_NAMES\${SEDeC}\${SEDeD} -" -} + echo "$ac_t""short" 1>&4 +cat >> confdefs.h <<\EOF +#define NEED_SHORT_EXTERNAL_NAMES +EOF fi rm -f conftest* -echo checking to see if char is signed -if test -n "$cross_compiling" -then +echo $ac_n "checking to see if char is signed""... $ac_c" 1>&4 +if test "$cross_compiling" = yes; then echo Assuming that char is signed on target machine. echo If it is unsigned, this will be a little bit inefficient. else -cat > conftest.c < conftest.$ac_ext </dev/null; then - -{ -test -n "$verbose" && \ -echo " defining" CHAR_IS_UNSIGNED to be empty -echo "#define" CHAR_IS_UNSIGNED >> confdefs.h -DEFS="$DEFS -DCHAR_IS_UNSIGNED=" -SEDDEFS="${SEDDEFS}\${SEDdA}CHAR_IS_UNSIGNED\${SEDdB}CHAR_IS_UNSIGNED\${SEDdC}\${SEDdD} -\${SEDuA}CHAR_IS_UNSIGNED\${SEDuB}CHAR_IS_UNSIGNED\${SEDuC}\${SEDuD} -\${SEDeA}CHAR_IS_UNSIGNED\${SEDeB}CHAR_IS_UNSIGNED\${SEDeC}\${SEDeD} -" -} - + echo "$ac_t""no" 1>&4 +cat >> confdefs.h <<\EOF +#define CHAR_IS_UNSIGNED +EOF +else + echo "$ac_t""yes" 1>&4 fi fi rm -fr conftest* -echo checking to see if right shift is signed -if test -n "$cross_compiling" -then - echo Assuming that right shift is signed on target machine. - +echo $ac_n "checking to see if right shift is signed""... $ac_c" 1>&4 +if test "$cross_compiling" = yes; then + echo "$ac_t""Assuming that right shift is signed on target machine." 1>&4 else -cat > conftest.c < conftest.$ac_ext </dev/null; then - -{ -test -n "$verbose" && \ -echo " defining" RIGHT_SHIFT_IS_UNSIGNED to be empty -echo "#define" RIGHT_SHIFT_IS_UNSIGNED >> confdefs.h -DEFS="$DEFS -DRIGHT_SHIFT_IS_UNSIGNED=" -SEDDEFS="${SEDDEFS}\${SEDdA}RIGHT_SHIFT_IS_UNSIGNED\${SEDdB}RIGHT_SHIFT_IS_UNSIGNED\${SEDdC}\${SEDdD} -\${SEDuA}RIGHT_SHIFT_IS_UNSIGNED\${SEDuB}RIGHT_SHIFT_IS_UNSIGNED\${SEDuC}\${SEDuD} -\${SEDeA}RIGHT_SHIFT_IS_UNSIGNED\${SEDeB}RIGHT_SHIFT_IS_UNSIGNED\${SEDeC}\${SEDeD} -" -} - + echo "$ac_t""no" 1>&4 +cat >> confdefs.h <<\EOF +#define RIGHT_SHIFT_IS_UNSIGNED +EOF +else + echo "$ac_t""yes" 1>&4 fi fi rm -fr conftest* -echo checking to see if fopen accepts b spec -if test -n "$cross_compiling" -then - echo Assuming that it does. - +echo $ac_n "checking to see if fopen accepts b spec""... $ac_c" 1>&4 +if test "$cross_compiling" = yes; then + echo "$ac_t""Assuming that it does." 1>&4 else -cat > conftest.c < conftest.$ac_ext < @@ -801,255 +1158,264 @@ main() { exit(1); } EOF -eval $compile +eval $ac_link if test -s conftest && (./conftest; exit) 2>/dev/null; then - : + echo "$ac_t""yes" 1>&4 else - -{ -test -n "$verbose" && \ -echo " defining" DONT_USE_B_MODE to be empty -echo "#define" DONT_USE_B_MODE >> confdefs.h -DEFS="$DEFS -DDONT_USE_B_MODE=" -SEDDEFS="${SEDDEFS}\${SEDdA}DONT_USE_B_MODE\${SEDdB}DONT_USE_B_MODE\${SEDdC}\${SEDdD} -\${SEDuA}DONT_USE_B_MODE\${SEDuB}DONT_USE_B_MODE\${SEDuC}\${SEDuD} -\${SEDeA}DONT_USE_B_MODE\${SEDeB}DONT_USE_B_MODE\${SEDeC}\${SEDeD} -" -} + echo "$ac_t""no" 1>&4 +cat >> confdefs.h <<\EOF +#define DONT_USE_B_MODE +EOF fi fi rm -fr conftest* -# Make sure to not get the incompatible SysV /etc/install and -# /usr/sbin/install, which might be in PATH before a BSD-like install, -# or the SunOS /usr/etc/install directory, or the AIX /bin/install, -# or the AFS install, which mishandles nonexistent args, or -# /usr/ucb/install on SVR4, which tries to use the nonexistent group -# `staff'. On most BSDish systems install is in /usr/bin, not /usr/ucb -# anyway. Sigh. -if test "z${INSTALL}" = "z" ; then - echo checking for install - IFS="${IFS= }"; saveifs="$IFS"; IFS="${IFS}:" - for dir in $PATH; do - test -z "$dir" && dir=. - case $dir in - /etc|/usr/sbin|/usr/etc|/usr/afsws/bin|/usr/ucb) ;; + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&4 +if test -z "$INSTALL"; then +if eval "test \"`echo '${'ijg_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&4 +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + case "$ac_dir" in + ''|.|/etc|/usr/sbin|/usr/etc|/sbin|/usr/afsws/bin|/usr/ucb) ;; *) - if test -f $dir/installbsd; then - INSTALL="$dir/installbsd -c" # OSF1 - INSTALL_PROGRAM='$(INSTALL)' - INSTALL_DATA='$(INSTALL) -m 644' - break - fi - if test -f $dir/install; then - if grep dspmsg $dir/install >/dev/null 2>&1; then - : # AIX - else - INSTALL="$dir/install -c" - INSTALL_PROGRAM='$(INSTALL)' - INSTALL_DATA='$(INSTALL) -m 644' - break + # OSF1 and SCO ODT 3.0 have their own names for install. + for ac_prog in ginstall installbsd scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + # OSF/1 installbsd also uses dspmsg, but is usable. + : + else + ijg_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi fi - fi + done ;; esac done - IFS="$saveifs" + IFS="$ac_save_ifs" + # As a last resort, use cp + test -z "$ijg_cv_path_install" && ijg_cv_path_install="cp" fi -INSTALL=${INSTALL-cp} -test -n "$verbose" && echo " setting INSTALL to $INSTALL" -INSTALL_PROGRAM=${INSTALL_PROGRAM-'$(INSTALL)'} -test -n "$verbose" && echo " setting INSTALL_PROGRAM to $INSTALL_PROGRAM" -INSTALL_DATA=${INSTALL_DATA-'$(INSTALL)'} -test -n "$verbose" && echo " setting INSTALL_DATA to $INSTALL_DATA" + INSTALL="$ijg_cv_path_install" +fi +echo "$ac_t""$INSTALL" 1>&4 -if test -z "$RANLIB"; then - # Extract the first word of `ranlib', so it can be a program name with args. - set dummy ranlib; word=$2 - echo checking for $word - IFS="${IFS= }"; saveifs="$IFS"; IFS="${IFS}:" - for dir in $PATH; do - test -z "$dir" && dir=. - if test -f $dir/$word; then - RANLIB="ranlib" +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='$(INSTALL)' + +if test -z "$INSTALL_DATA"; then + if test "$INSTALL" = cp; then + INSTALL_DATA='$(INSTALL)' + else + INSTALL_DATA='$(INSTALL) -m 644' + fi +fi + +# Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&4 +if eval "test \"`echo '${'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&4 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" break fi done - IFS="$saveifs" + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&4 +else + echo "$ac_t""no" 1>&4 fi -test -z "$RANLIB" && RANLIB=":" -test -n "$RANLIB" && test -n "$verbose" && echo " setting RANLIB to $RANLIB" -# check whether --with-maxmem was given +MEMORYMGR="jmemnobs.o" +MAXMEM="no" +# Check whether --enable-maxmem or --disable-maxmem was given. +enableval="$enable_maxmem" +if test -n "$enableval"; then + MAXMEM="$enableval" +fi + +# support --with-maxmem for backwards compatibility with IJG V5. +# Check whether --with-maxmem or --without-maxmem was given. withval="$with_maxmem" if test -n "$withval"; then - DEFAULTMAXMEM=`expr $withval \* 1048576` + MAXMEM="$withval" +fi -{ -test -n "$verbose" && \ -echo " defining" DEFAULT_MAX_MEM to be ${DEFAULTMAXMEM} -echo "#define" DEFAULT_MAX_MEM ${DEFAULTMAXMEM} >> confdefs.h -DEFS="$DEFS -DDEFAULT_MAX_MEM=${DEFAULTMAXMEM}" -SEDDEFS="${SEDDEFS}\${SEDdA}DEFAULT_MAX_MEM\${SEDdB}DEFAULT_MAX_MEM\${SEDdC}${DEFAULTMAXMEM}\${SEDdD} -\${SEDuA}DEFAULT_MAX_MEM\${SEDuB}DEFAULT_MAX_MEM\${SEDuC}${DEFAULTMAXMEM}\${SEDuD} -\${SEDeA}DEFAULT_MAX_MEM\${SEDeB}DEFAULT_MAX_MEM\${SEDeC}${DEFAULTMAXMEM}\${SEDeD} -" -} +if test "x$MAXMEM" = xyes; then + MAXMEM=1 +fi +if test "x$MAXMEM" != xno; then + if test -n "`echo $MAXMEM | sed 's/[0-9]//g'`"; then + { echo "configure: error: non-numeric argument to --enable-maxmem" 1>&2; exit 1; } + fi + DEFAULTMAXMEM=`expr $MAXMEM \* 1048576` +cat >> confdefs.h < conftest.c <&4 +cat > conftest.$ac_ext < -int main() { exit(0); } -int t() { FILE * tfile = tmpfile(); } +int main() { return 0; } +int t() { + FILE * tfile = tmpfile(); +; return 0; } EOF -if eval $compile; then +if eval $ac_link; then rm -rf conftest* - MEMORYMGR="jmemansi.o" - + echo "$ac_t""yes" 1>&4 +MEMORYMGR="jmemansi.o" else rm -rf conftest* - MEMORYMGR="jmemname.o" - -{ -test -n "$verbose" && \ -echo " defining" NEED_SIGNAL_CATCHER to be empty -echo "#define" NEED_SIGNAL_CATCHER >> confdefs.h -DEFS="$DEFS -DNEED_SIGNAL_CATCHER=" -SEDDEFS="${SEDDEFS}\${SEDdA}NEED_SIGNAL_CATCHER\${SEDdB}NEED_SIGNAL_CATCHER\${SEDdC}\${SEDdD} -\${SEDuA}NEED_SIGNAL_CATCHER\${SEDuB}NEED_SIGNAL_CATCHER\${SEDuC}\${SEDuD} -\${SEDeA}NEED_SIGNAL_CATCHER\${SEDeB}NEED_SIGNAL_CATCHER\${SEDeC}\${SEDeD} -" -} -echo checking for 'mktemp()' -cat > conftest.c <&4 +MEMORYMGR="jmemname.o" +cat >> confdefs.h <<\EOF +#define NEED_SIGNAL_CATCHER +EOF +echo $ac_n "checking for 'mktemp()'""... $ac_c" 1>&4 +cat > conftest.$ac_ext <&4 else rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" NO_MKTEMP to be empty -echo "#define" NO_MKTEMP >> confdefs.h -DEFS="$DEFS -DNO_MKTEMP=" -SEDDEFS="${SEDDEFS}\${SEDdA}NO_MKTEMP\${SEDdB}NO_MKTEMP\${SEDdC}\${SEDdD} -\${SEDuA}NO_MKTEMP\${SEDuB}NO_MKTEMP\${SEDuC}\${SEDuD} -\${SEDeA}NO_MKTEMP\${SEDeB}NO_MKTEMP\${SEDeC}\${SEDeD} -" -} - -fi -rm -f conftest* - -fi -rm -f conftest* - -else - MEMORYMGR="jmemnobs.o" -fi - -# Prepare to massage makefile.auto correctly. -case "$DEFS" in - *HAVE_PROTOTYPES*) - ANSI2KNR="" - ISANSICOM="# " - ;; - *) - ANSI2KNR="ansi2knr" - ISANSICOM="" - ;; -esac -case "$DEFS" in - *NEED_BSD_STRINGS*) - ANSI2KNRFLAGS="-DBSD" - ;; - *) - ANSI2KNRFLAGS="" - ;; -esac -# Set default prefixes. -if test -n "$prefix"; then - test -z "$exec_prefix" && exec_prefix='${prefix}' - prsub="s%^prefix\\([ ]*\\)=\\([ ]*\\).*$%prefix\\1=\\2$prefix%" -fi -if test -n "$exec_prefix"; then - prsub="$prsub -s%^exec_prefix\\([ ]*\\)=\\([ ]*\\).*$%exec_prefix\\1=\\2$exec_prefix%" -fi -# Quote sed substitution magic chars in DEFS. -cat >conftest.def <&4 +cat >> confdefs.h <<\EOF +#define NO_MKTEMP EOF -escape_ampersand_and_backslash='s%[&\\]%\\&%g' -DEFS=`sed "$escape_ampersand_and_backslash" config.status < $CONFIG_STATUS </dev/null | sed 1q`: # -# $0 $configure_args +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. -for arg +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option do - case "\$arg" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo running \${CONFIG_SHELL-/bin/sh} $0 $configure_args - exec \${CONFIG_SHELL-/bin/sh} $0 $configure_args ;; - *) echo "Usage: config.status --recheck" 2>&1; exit 1 ;; + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.1" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; esac done -trap 'rm -fr Makefile jconfig.h conftest*; exit 1' 1 3 15 -CC='$CC' -CPP='$CPP' -INSTALL='$INSTALL' -INSTALL_PROGRAM='$INSTALL_PROGRAM' -INSTALL_DATA='$INSTALL_DATA' -RANLIB='$RANLIB' -MEMORYMGR='$MEMORYMGR' -ANSI2KNR='$ANSI2KNR' -ISANSICOM='$ISANSICOM' -ANSI2KNRFLAGS='$ANSI2KNRFLAGS' -LIBS='$LIBS' -srcdir='$srcdir' -prefix='$prefix' -exec_prefix='$exec_prefix' -prsub='$prsub' -extrasub='$extrasub' -EOF -cat >> config.status <<\EOF +ac_given_srcdir=$srcdir -top_srcdir=$srcdir +trap 'rm -fr Makefile:makefile.cfg jconfig.h:jconfig.cfg conftest*; exit 1' 1 2 15 -CONFIG_FILES=${CONFIG_FILES-"Makefile"} -for file in .. ${CONFIG_FILES}; do if test "x$file" != x..; then - srcdir=$top_srcdir - # Remove last slash and all that follows it. Not all systems have dirname. - dir=`echo $file|sed 's%/[^/][^/]*$%%'` - if test "$dir" != "$file"; then - test "$top_srcdir" != . && srcdir=$top_srcdir/$dir - test ! -d $dir && mkdir $dir - fi - echo creating $file - rm -f $file - echo "# Generated automatically from `echo $file|sed 's|.*/||'`.auto by configure." > $file - sed -e " -$prsub +# Protect against being on the right side of a sed subst in config.status. +sed 's/%@/@@/; s/@%/@@/; s/%g$/@g/; /@g$/s/[\\\\&%]/\\\\&/g; + s/@@/%@/; s/@@/@%/; s/@g$/%g/' > conftest.subs <<\CEOF +$ac_vpsub $extrasub +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g s%@CC@%$CC%g s%@CPP@%$CPP%g s%@INSTALL@%$INSTALL%g @@ -1060,109 +1426,162 @@ s%@MEMORYMGR@%$MEMORYMGR%g s%@ANSI2KNR@%$ANSI2KNR%g s%@ISANSICOM@%$ISANSICOM%g s%@ANSI2KNRFLAGS@%$ANSI2KNRFLAGS%g -s%@LIBS@%$LIBS%g + +CEOF +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust relative srcdir, etc. for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/$ac_dir" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g s%@srcdir@%$srcdir%g -s%@DEFS@%-DHAVE_CONFIG_H%" $top_srcdir/makefile.auto >> $file +s%@top_srcdir@%$top_srcdir%g +" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file fi; done +rm -f conftest.subs -CONFIG_HEADERS=${CONFIG_HEADERS-"jconfig.h"} -for file in .. ${CONFIG_HEADERS}; do if test "x$file" != x..; then -echo creating $file - -# These sed commands are put into SEDDEFS when defining a macro. -# They are broken into pieces to make the sed script easier to manage. -# They are passed to sed as "A NAME B NAME C VALUE D", where NAME -# is the cpp macro being defined and VALUE is the value it is being given. -# Each defining turns into a single global substitution command. +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. # -# SEDd sets the value in "#define NAME VALUE" lines. -SEDdA='s@^\([ ]*\)#\([ ]*define[ ][ ]*\)' -SEDdB='\([ ][ ]*\)[^ ]*@\1#\2' -SEDdC='\3' -SEDdD='@g' -# SEDu turns "#undef NAME" with trailing blanks into "#define NAME VALUE". -SEDuA='s@^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -SEDuB='\([ ]\)@\1#\2define\3' -SEDuC=' ' -SEDuD='\4@g' -# SEDe turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -SEDeA='s@^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -SEDeB='$@\1#\2define\3' -SEDeC=' ' -SEDeD='@g' -rm -f conftest.sed -EOF -# Turn off quoting long enough to insert the sed commands. -rm -f conftest.sh -cat > conftest.sh < conftest.hdr <<\EOF +s/[\\&%]/\\&/g +s%[\\$`]%\\&%g +s%#define \([A-Za-z_][A-Za-z0-9_]*\) \(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp +s%ac_d%ac_u%gp +s%ac_u%ac_e%gp +EOF +sed -n -f conftest.hdr confdefs.h > conftest.vals +rm -f conftest.hdr -# Maximum number of lines to put in a single here document. -maxshlines=9 - -while : -do - # wc gives bogus results for an empty file on some systems. - lines=`grep -c . conftest.sh` - if test -z "$lines" || test "$lines" -eq 0; then break; fi - rm -f conftest.s1 conftest.s2 - sed ${maxshlines}q conftest.sh > conftest.s1 # Like head -20. - sed 1,${maxshlines}d conftest.sh > conftest.s2 # Like tail +21. - # Write a limited-size here document to append to conftest.sed. - echo 'cat >> conftest.sed <> config.status - cat conftest.s1 >> config.status - echo 'CONFEOF' >> config.status - rm -f conftest.s1 conftest.sh - mv conftest.s2 conftest.sh -done -rm -f conftest.sh - -# Now back to your regularly scheduled config.status. -cat >> config.status <<\EOF -# This sed command replaces #undef's with comments. This is necessary, for +# This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it in -# jconfig.h. -cat >> conftest.sed <<\CONFEOF -CONFEOF -rm -f conftest.h -# Break up the sed commands because old seds have small limits. -maxsedlines=20 -cp $top_srcdir/jconfig.auto conftest.h1 +# on some systems where configure will not decide to define it. +cat >> conftest.vals <<\EOF +EOF + +# Break up conftest.vals because some shells have a limit on +# the size of here documents, and old seds have small limits too. +# Maximum number of lines to put in a single here document. +ac_max_here_lines=12 + +rm -f conftest.tail while : do - lines=`grep -c . conftest.sed` - if test -z "$lines" || test "$lines" -eq 0; then break; fi - rm -f conftest.s1 conftest.s2 conftest.h2 - sed ${maxsedlines}q conftest.sed > conftest.s1 # Like head -20. - sed 1,${maxsedlines}d conftest.sed > conftest.s2 # Like tail +21. - sed -f conftest.s1 < conftest.h1 > conftest.h2 - rm -f conftest.s1 conftest.h1 conftest.sed - mv conftest.h2 conftest.h1 - mv conftest.s2 conftest.sed + ac_lines=`grep -c . conftest.vals` + # grep -c gives empty output for an empty file on some AIX systems. + if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi + # Write a limited-size here document to conftest.frag. + echo ' cat > conftest.frag <> $CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS + echo 'CEOF + sed -f conftest.frag conftest.in > conftest.out + rm -f conftest.in + mv conftest.out conftest.in +' >> $CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail + rm -f conftest.vals + mv conftest.tail conftest.vals done -rm -f conftest.sed conftest.h -echo "/* $file. Generated automatically by configure. */" > conftest.h -cat conftest.h1 >> conftest.h -rm -f conftest.h1 -if cmp -s $file conftest.h 2>/dev/null; then - # The file exists and we would not be changing it. - echo "$file is unchanged" - rm -f conftest.h -else - rm -f $file - mv conftest.h $file -fi +rm -f conftest.vals + +cat >> $CONFIG_STATUS <<\EOF + rm -f conftest.frag conftest.h + echo "/* $ac_file. Generated automatically by configure. */" > conftest.h + cat conftest.in >> conftest.h + rm -f conftest.in + if cmp -s $ac_file conftest.h 2>/dev/null; then + echo "$ac_file is unchanged" + rm -f conftest.h + else + rm -f $ac_file + mv conftest.h $ac_file + fi fi; done exit 0 EOF -chmod +x config.status -${CONFIG_SHELL-/bin/sh} config.status +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS diff --git a/djpeg.c b/djpeg.c index 0df3755..389a4f8 100644 --- a/djpeg.c +++ b/djpeg.c @@ -24,8 +24,6 @@ */ #include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ -#define JMAKE_MSG_TABLE -#include "cderror.h" /* create message string table */ #include "jversion.h" /* for version message */ #include /* to declare isupper(),tolower(),isprint() */ @@ -74,6 +72,16 @@ #endif +/* Create the add-on message string table. */ + +#define JMESSAGE(code,string) string , + +static const char * const cdjpeg_message_table[] = { +#include "cderror.h" + NULL +}; + + /* * This list defines the known output image formats * (not all of which need be supported by a given version). @@ -545,7 +553,7 @@ main (int argc, char **argv) cinfo.err = jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); /* Add some application-specific error messages (from cderror.h) */ - jerr.addon_message_table = addon_message_table; + jerr.addon_message_table = cdjpeg_message_table; jerr.first_addon_message = JMSG_FIRSTADDONCODE; jerr.last_addon_message = JMSG_LASTADDONCODE; /* Insert custom COM marker processor. */ @@ -722,6 +730,12 @@ main (int argc, char **argv) jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); + /* Close files, if we opened them */ + if (input_file != stdin) + fclose(input_file); + if (output_file != stdout) + fclose(output_file); + #ifdef PROGRESS_REPORT /* Clear away progress display */ if (jerr.trace_level == 0) { diff --git a/install.doc b/install.doc index 289ce24..827b9d3 100644 --- a/install.doc +++ b/install.doc @@ -102,13 +102,16 @@ For example, on HP-UX you probably want to say ./configure CC='cc -Aa' to get HP's compiler to run in ANSI mode. +* The default CFLAGS setting is "-O". You can override this by saying, +for example, ./configure CFLAGS='-O2'. + * Configure will set up the makefile so that "make install" will install files into /usr/local/bin, /usr/local/man, etc. You can specify an installation prefix other than "/usr/local" by giving configure the option "--prefix=PATH". * If you don't have a lot of swap space, you may need to enable the IJG software's internal virtual memory mechanism. To do this, give the option -"--with-maxmem=N" where N is the default maxmemory limit in megabytes. +"--enable-maxmem=N" where N is the default maxmemory limit in megabytes. This is discussed in more detail under "Selecting a memory manager", below. You probably don't need to worry about this on reasonably-sized Unix machines, unless you plan to process very large images. @@ -500,6 +503,10 @@ Amiga: SAS C 6.50 reportedly is too buggy to compile the IJG code properly. A patch to update to 6.51 is available from SAS or AmiNet FTP sites. +The supplied config files are set up to use jmemname.c as the memory +manager, with temporary files being created on the device named by +"JPEGTMP:". + Atari ST/STE/TT: diff --git a/jccolor.c b/jccolor.c index 4ab3d7e..6707911 100644 --- a/jccolor.c +++ b/jccolor.c @@ -32,9 +32,14 @@ typedef my_color_converter * my_cconvert_ptr; * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. * The conversion equations to be implemented are therefore * Y = 0.29900 * R + 0.58700 * G + 0.11400 * B - * Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + MAXJSAMPLE/2 - * Cr = 0.50000 * R - 0.41869 * G - 0.08131 * B + MAXJSAMPLE/2 + * Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + CENTERJSAMPLE + * Cr = 0.50000 * R - 0.41869 * G - 0.08131 * B + CENTERJSAMPLE * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) + * Note: older versions of the IJG code used a zero offset of MAXJSAMPLE/2, + * rather than CENTERJSAMPLE, for Cb and Cr. This gave equal positive and + * negative swings for Cb/Cr, but meant that grayscale values (Cb=Cr=0) + * were not represented exactly. Now we sacrifice exact representation of + * maximum red and maximum blue in order to get exact grayscales. * * To avoid floating-point arithmetic, we represent the fractional constants * as integers scaled up by 2^16 (about 4 digits precision); we have to divide @@ -46,11 +51,12 @@ typedef my_color_converter * my_cconvert_ptr; * for 12-bit samples it is still acceptable. It's not very reasonable for * 16-bit samples, but if you want lossless storage you shouldn't be changing * colorspace anyway. - * The MAXJSAMPLE/2 offsets and the rounding fudge-factor of 0.5 are included + * The CENTERJSAMPLE offsets and the rounding fudge-factor of 0.5 are included * in the tables to save adding them separately in the inner loop. */ #define SCALEBITS 16 /* speediest right-shift on some machines */ +#define CBCR_OFFSET ((INT32) CENTERJSAMPLE << SCALEBITS) #define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) #define FIX(x) ((INT32) ((x) * (1L<Cb and R=>Cr tables are the same - rgb_ycc_tab[i+R_CR_OFF] = FIX(0.50000) * i + ONE_HALF*(MAXJSAMPLE+1); + rgb_ycc_tab[i+R_CR_OFF] = FIX(0.50000) * i + CBCR_OFFSET + ONE_HALF-1; */ rgb_ycc_tab[i+G_CR_OFF] = (-FIX(0.41869)) * i; rgb_ycc_tab[i+B_CR_OFF] = (-FIX(0.08131)) * i; diff --git a/jconfig.auto b/jconfig.cfg similarity index 94% rename from jconfig.auto rename to jconfig.cfg index eb565ea..36a04fa 100644 --- a/jconfig.auto +++ b/jconfig.cfg @@ -1,4 +1,4 @@ -/* jconfig.auto --- source file edited by configure script */ +/* jconfig.cfg --- source file edited by configure script */ /* see jconfig.doc for explanations */ #undef HAVE_PROTOTYPES diff --git a/jdatasrc.c b/jdatasrc.c index a37bdd2..8c4ac0b 100644 --- a/jdatasrc.c +++ b/jdatasrc.c @@ -137,6 +137,9 @@ skip_input_data (j_decompress_ptr cinfo, long num_bytes) while (num_bytes > (long) src->pub.bytes_in_buffer) { num_bytes -= (long) src->pub.bytes_in_buffer; (void) fill_input_buffer(cinfo); + /* note we assume that fill_input_buffer will never return FALSE, + * so suspension need not be handled. + */ } src->pub.next_input_byte += (size_t) num_bytes; src->pub.bytes_in_buffer -= (size_t) num_bytes; diff --git a/jdcolor.c b/jdcolor.c index d7d0c2a..ac67c5a 100644 --- a/jdcolor.c +++ b/jdcolor.c @@ -37,7 +37,7 @@ typedef my_color_deconverter * my_cconvert_ptr; * R = Y + 1.40200 * Cr * G = Y - 0.34414 * Cb - 0.71414 * Cr * B = Y + 1.77200 * Cb - * where Cb and Cr represent the incoming values less MAXJSAMPLE/2. + * where Cb and Cr represent the incoming values less CENTERJSAMPLE. * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) * * To avoid floating-point arithmetic, we represent the fractional constants @@ -70,7 +70,7 @@ METHODDEF void ycc_rgb_start (j_decompress_ptr cinfo) { my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - INT32 i, x2; + INT32 i, x; SHIFT_TEMPS cconvert->Cr_r_tab = (int *) @@ -86,21 +86,20 @@ ycc_rgb_start (j_decompress_ptr cinfo) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE+1) * SIZEOF(INT32)); - for (i = 0; i <= MAXJSAMPLE; i++) { + for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ - /* The Cb or Cr value we are thinking of is x = i - MAXJSAMPLE/2 */ - x2 = 2*i - MAXJSAMPLE; /* twice x */ + /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */ /* Cr=>R value is nearest int to 1.40200 * x */ cconvert->Cr_r_tab[i] = (int) - RIGHT_SHIFT(FIX(1.40200/2) * x2 + ONE_HALF, SCALEBITS); + RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); /* Cb=>B value is nearest int to 1.77200 * x */ cconvert->Cb_b_tab[i] = (int) - RIGHT_SHIFT(FIX(1.77200/2) * x2 + ONE_HALF, SCALEBITS); + RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); /* Cr=>G value is scaled-up -0.71414 * x */ - cconvert->Cr_g_tab[i] = (- FIX(0.71414/2)) * x2; + cconvert->Cr_g_tab[i] = (- FIX(0.71414)) * x; /* Cb=>G value is scaled-up -0.34414 * x */ /* We also add in ONE_HALF so that need not do it in inner loop */ - cconvert->Cb_g_tab[i] = (- FIX(0.34414/2)) * x2 + ONE_HALF; + cconvert->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; } } @@ -145,10 +144,7 @@ ycc_rgb_convert (j_decompress_ptr cinfo, y = GETJSAMPLE(inptr0[col]); cb = GETJSAMPLE(inptr1[col]); cr = GETJSAMPLE(inptr2[col]); - /* Note: if the inputs were computed directly from RGB values, - * range-limiting would be unnecessary here; but due to possible - * noise in the DCT/IDCT phase, we do need to apply range limits. - */ + /* Range-limiting is essential due to noise introduced by DCT losses. */ outptr[RGB_RED] = range_limit[y + Crrtab[cr]]; outptr[RGB_GREEN] = range_limit[y + ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], @@ -247,10 +243,7 @@ ycck_cmyk_convert (j_decompress_ptr cinfo, y = GETJSAMPLE(inptr0[col]); cb = GETJSAMPLE(inptr1[col]); cr = GETJSAMPLE(inptr2[col]); - /* Note: if the inputs were computed directly from RGB values, - * range-limiting would be unnecessary here; but due to possible - * noise in the DCT/IDCT phase, we do need to apply range limits. - */ + /* Range-limiting is essential due to noise introduced by DCT losses. */ outptr[0] = range_limit[MAXJSAMPLE - (y + Crrtab[cr])]; /* red */ outptr[1] = range_limit[MAXJSAMPLE - (y + /* green */ ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], diff --git a/jdmerge.c b/jdmerge.c index a0b9cae..a5a864e 100644 --- a/jdmerge.c +++ b/jdmerge.c @@ -82,7 +82,7 @@ METHODDEF void start_pass_merged_upsample (j_decompress_ptr cinfo) { my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; - INT32 i, x2; + INT32 i, x; SHIFT_TEMPS /* Mark the spare buffer empty */ @@ -106,21 +106,20 @@ start_pass_merged_upsample (j_decompress_ptr cinfo) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE+1) * SIZEOF(INT32)); - for (i = 0; i <= MAXJSAMPLE; i++) { + for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ - /* The Cb or Cr value we are thinking of is x = i - MAXJSAMPLE/2 */ - x2 = 2*i - MAXJSAMPLE; /* twice x */ + /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */ /* Cr=>R value is nearest int to 1.40200 * x */ upsample->Cr_r_tab[i] = (int) - RIGHT_SHIFT(FIX(1.40200/2) * x2 + ONE_HALF, SCALEBITS); + RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); /* Cb=>B value is nearest int to 1.77200 * x */ upsample->Cb_b_tab[i] = (int) - RIGHT_SHIFT(FIX(1.77200/2) * x2 + ONE_HALF, SCALEBITS); + RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); /* Cr=>G value is scaled-up -0.71414 * x */ - upsample->Cr_g_tab[i] = (- FIX(0.71414/2)) * x2; + upsample->Cr_g_tab[i] = (- FIX(0.71414)) * x; /* Cb=>G value is scaled-up -0.34414 * x */ /* We also add in ONE_HALF so that need not do it in inner loop */ - upsample->Cb_g_tab[i] = (- FIX(0.34414/2)) * x2 + ONE_HALF; + upsample->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; } } diff --git a/jerror.c b/jerror.c index 690a3d3..e479fc3 100644 --- a/jerror.c +++ b/jerror.c @@ -17,16 +17,33 @@ #include "jinclude.h" #include "jpeglib.h" #include "jversion.h" - -#include "jerror.h" /* get error codes */ -#define JMAKE_MSG_TABLE -#include "jerror.h" /* create message string table */ +#include "jerror.h" #ifndef EXIT_FAILURE /* define exit() codes if not provided */ #define EXIT_FAILURE 1 #endif +/* + * Create the message string table. + * We do this from the master message list in jerror.h by re-reading + * jerror.h with a suitable definition for macro JMESSAGE. + * The message table is made an external symbol just in case any applications + * want to refer to it directly. + */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_std_message_table jMsgTable +#endif + +#define JMESSAGE(code,string) string , + +const char * const jpeg_std_message_table[] = { +#include "jerror.h" + NULL +}; + + /* * Error exit handler: must not return to caller. * @@ -200,7 +217,7 @@ jpeg_std_error (struct jpeg_error_mgr * err) err->msg_code = 0; /* may be useful as a flag for "no error" */ /* Initialize message table pointers */ - err->jpeg_message_table = jpeg_message_table; + err->jpeg_message_table = jpeg_std_message_table; err->last_jpeg_message = (int) JMSG_LASTMSGCODE - 1; err->addon_message_table = NULL; diff --git a/jerror.h b/jerror.h index 7918c38..86a5e84 100644 --- a/jerror.h +++ b/jerror.h @@ -13,29 +13,28 @@ * and/or the macros. */ - -/* To define the enum list of message codes, include this file without - * defining JMAKE_MSG_TABLE. To create the message string table, include it - * again with JMAKE_MSG_TABLE defined (this should be done in just one module). +/* + * To define the enum list of message codes, include this file without + * defining macro JMESSAGE. To create a message string table, include it + * again with a suitable JMESSAGE definition (see jerror.c for an example). */ +#ifndef JMESSAGE +#ifndef JERROR_H +/* First time through, define the enum list */ +#define JMAKE_ENUM_LIST +#else +/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */ +#define JMESSAGE(code,string) +#endif /* JERROR_H */ +#endif /* JMESSAGE */ -#ifdef JMAKE_MSG_TABLE - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jpeg_message_table jMsgTable -#endif - -const char * const jpeg_message_table[] = { - -#define JMESSAGE(code,string) string , - -#else /* not JMAKE_MSG_TABLE */ +#ifdef JMAKE_ENUM_LIST typedef enum { #define JMESSAGE(code,string) code , -#endif /* JMAKE_MSG_TABLE */ +#endif /* JMAKE_ENUM_LIST */ JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */ @@ -160,22 +159,20 @@ JMESSAGE(JWRN_MUST_RESYNC, JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG") JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines") -#ifdef JMAKE_MSG_TABLE - - NULL -}; - -#else /* not JMAKE_MSG_TABLE */ +#ifdef JMAKE_ENUM_LIST JMSG_LASTMSGCODE } J_MESSAGE_CODE; -#endif /* JMAKE_MSG_TABLE */ +#undef JMAKE_ENUM_LIST +#endif /* JMAKE_ENUM_LIST */ +/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */ #undef JMESSAGE -#ifndef JMAKE_MSG_TABLE +#ifndef JERROR_H +#define JERROR_H /* Macros to simplify using the error and trace message stuff */ /* The first parameter is either type of cinfo pointer */ @@ -261,4 +258,4 @@ JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines") strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) -#endif /* JMAKE_MSG_TABLE */ +#endif /* JERROR_H */ diff --git a/jmemname.c b/jmemname.c index f6c9562..ba826fb 100644 --- a/jmemname.c +++ b/jmemname.c @@ -55,6 +55,7 @@ extern void free JPP((void *ptr)); * 3. mktemp() is used to ensure that multiple processes running * simultaneously won't select the same file names. If your system * doesn't have mktemp(), define NO_MKTEMP to do it the hard way. + * (If you don't have , also define NO_ERRNO_H.) * * 4. You probably want to define NEED_SIGNAL_CATCHER so that cjpeg.c/djpeg.c * will cause the temp files to be removed if you stop the program early. @@ -72,6 +73,19 @@ static int next_file_num; /* to distinguish among several temp files */ #define TEMP_FILE_NAME "%sJPG%03d.TMP" #endif +#ifndef NO_ERRNO_H +#include /* to define ENOENT */ +#endif + +/* ANSI C specifies that errno is a macro, but on older systems it's more + * likely to be a plain int variable. And not all versions of errno.h + * bother to declare it, so we have to in order to be most portable. Thus: + */ +#ifndef errno +extern int errno; +#endif + + LOCAL void select_file_name (char * fname) { @@ -81,8 +95,17 @@ select_file_name (char * fname) for (;;) { next_file_num++; /* advance counter */ sprintf(fname, TEMP_FILE_NAME, TEMP_DIRECTORY, next_file_num); - if ((tfile = fopen(fname, READ_BINARY)) == NULL) + if ((tfile = fopen(fname, READ_BINARY)) == NULL) { + /* fopen could have failed for a reason other than the file not + * being there; for example, file there but unreadable. + * If isn't available, then we cannot test the cause. + */ +#ifdef ENOENT + if (errno != ENOENT) + continue; +#endif break; + } fclose(tfile); /* oops, it's there; close tfile & try again */ } } diff --git a/jpeglib.h b/jpeglib.h index 893f8b8..de60799 100644 --- a/jpeglib.h +++ b/jpeglib.h @@ -10,6 +10,9 @@ * and perhaps jerror.h if they want to know the exact error codes. */ +#ifndef JPEGLIB_H +#define JPEGLIB_H + /* * First we include the configuration files that record how this * installation of the JPEG library is set up. jconfig.h can be @@ -27,7 +30,7 @@ * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". */ -#define JPEG_LIB_VERSION 50 /* Version 5.0 */ +#define JPEG_LIB_VERSION 51 /* Version 5a */ /* Various constants determining the sizes of things. @@ -928,3 +931,5 @@ struct jpeg_color_quantizer { long dummy; }; #include "jpegint.h" /* fetch private declarations */ #include "jerror.h" /* fetch error codes too */ #endif + +#endif /* JPEGLIB_H */ diff --git a/jquant1.c b/jquant1.c index a68f3e7..9a9e63a 100644 --- a/jquant1.c +++ b/jquant1.c @@ -52,7 +52,7 @@ /* Declarations for ordered dithering. * - * We use a standard 4x4 ordered dither array. The basic concept of ordered + * We use a standard 16x16 ordered dither array. The basic concept of ordered * dithering is described in many references, for instance Dale Schumacher's * chapter II.2 of Graphics Gems II (James Arvo, ed. Academic Press, 1991). * In place of Schumacher's comparisons against a "threshold" value, we add a @@ -68,11 +68,36 @@ * table in both directions. */ -#define ODITHER_SIZE 4 /* dimension of dither matrix */ -#define ODITHER_CELLS (4*4) /* number of cells in dither matrix */ -#define ODITHER_MASK 3 /* mask for wrapping around dither counters */ +#define ODITHER_SIZE 16 /* dimension of dither matrix */ +/* NB: if ODITHER_SIZE is not a power of 2, ODITHER_MASK uses will break */ +#define ODITHER_CELLS (ODITHER_SIZE*ODITHER_SIZE) /* # cells in matrix */ +#define ODITHER_MASK (ODITHER_SIZE-1) /* mask for wrapping around counters */ typedef int ODITHER_MATRIX[ODITHER_SIZE][ODITHER_SIZE]; +typedef int (*ODITHER_MATRIX_PTR)[ODITHER_SIZE]; + +static const UINT8 base_dither_matrix[ODITHER_SIZE][ODITHER_SIZE] = { + /* Bayer's order-4 dither array. Generated by the code given in + * Stephen Hawley's article "Ordered Dithering" in Graphics Gems I. + * The values in this array must range from 0 to ODITHER_CELLS-1. + */ + 0,192, 48,240, 12,204, 60,252, 3,195, 51,243, 15,207, 63,255, + 128, 64,176,112,140, 76,188,124,131, 67,179,115,143, 79,191,127, + 32,224, 16,208, 44,236, 28,220, 35,227, 19,211, 47,239, 31,223, + 160, 96,144, 80,172,108,156, 92,163, 99,147, 83,175,111,159, 95, + 8,200, 56,248, 4,196, 52,244, 11,203, 59,251, 7,199, 55,247, + 136, 72,184,120,132, 68,180,116,139, 75,187,123,135, 71,183,119, + 40,232, 24,216, 36,228, 20,212, 43,235, 27,219, 39,231, 23,215, + 168,104,152, 88,164,100,148, 84,171,107,155, 91,167,103,151, 87, + 2,194, 50,242, 14,206, 62,254, 1,193, 49,241, 13,205, 61,253, + 130, 66,178,114,142, 78,190,126,129, 65,177,113,141, 77,189,125, + 34,226, 18,210, 46,238, 30,222, 33,225, 17,209, 45,237, 29,221, + 162, 98,146, 82,174,110,158, 94,161, 97,145, 81,173,109,157, 93, + 10,202, 58,250, 6,198, 54,246, 9,201, 57,249, 5,197, 53,245, + 138, 74,186,122,134, 70,182,118,137, 73,185,121,133, 69,181,117, + 42,234, 26,218, 38,230, 22,214, 41,233, 25,217, 37,229, 21,213, + 170,106,154, 90,166,102,150, 86,169,105,153, 89,165,101,149, 85 +}; /* Declarations for Floyd-Steinberg dithering. @@ -125,7 +150,7 @@ typedef struct { /* Variables for ordered dithering */ int row_index; /* cur row's vertical index in dither matrix */ - ODITHER_MATRIX *odither; /* one dither array per component */ + ODITHER_MATRIX_PTR odither[MAX_Q_COMPS]; /* one dither array per component */ /* Variables for Floyd-Steinberg dithering */ FSERRPTR fserrors[MAX_Q_COMPS]; /* accumulated errors */ @@ -226,6 +251,41 @@ largest_input_value (j_decompress_ptr cinfo, int ci, int j, int maxj) } +/* + * Create an ordered-dither array for a component having ncolors + * distinct output values. + */ + +LOCAL ODITHER_MATRIX_PTR +make_odither_array (j_decompress_ptr cinfo, int ncolors) +{ + ODITHER_MATRIX_PTR odither; + int j,k; + INT32 num,den; + + odither = (ODITHER_MATRIX_PTR) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(ODITHER_MATRIX)); + /* The inter-value distance for this color is MAXJSAMPLE/(ncolors-1). + * Hence the dither value for the matrix cell with fill order f + * (f=0..N-1) should be (N-1-2*f)/(2*N) * MAXJSAMPLE/(ncolors-1). + * On 16-bit-int machine, be careful to avoid overflow. + */ + den = 2 * ODITHER_CELLS * ((INT32) (ncolors - 1)); + for (j = 0; j < ODITHER_SIZE; j++) { + for (k = 0; k < ODITHER_SIZE; k++) { + num = ((INT32) (ODITHER_CELLS-1 - 2*((int)base_dither_matrix[j][k]))) + * MAXJSAMPLE; + /* Ensure round towards zero despite C's lack of consistency + * about rounding negative values in integer division... + */ + odither[j][k] = (int) (num<0 ? -((-num)/den) : num/den); + } + } + return odither; +} + + /* * Create the colormap and color index table. * Also creates the ordered-dither tables, if required. @@ -239,7 +299,7 @@ create_colormap (j_decompress_ptr cinfo) JSAMPROW indexptr; int total_colors; /* Number of distinct output colors */ int Ncolors[MAX_Q_COMPS]; /* # of values alloced to each component */ - ODITHER_MATRIX *odither; + ODITHER_MATRIX_PTR odither; int i,j,k, nci, blksize, blkdist, ptr, val, pad; /* Select number of colors for each component */ @@ -319,41 +379,21 @@ create_colormap (j_decompress_ptr cinfo) cinfo->actual_number_of_colors = total_colors; if (cinfo->dither_mode == JDITHER_ORDERED) { - /* Allocate and fill in the ordered-dither tables. */ - odither = (ODITHER_MATRIX *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - cinfo->out_color_components * SIZEOF(ODITHER_MATRIX)); - cquantize->odither = odither; + /* Allocate and fill in the ordered-dither tables. Components having + * the same number of representative colors may share a dither table. + */ for (i = 0; i < cinfo->out_color_components; i++) { nci = Ncolors[i]; /* # of distinct values for this color */ - /* The inter-value distance for this color is MAXJSAMPLE/(nci-1). - * Hence the dither value for the matrix cell with fill order j - * (j=1..N) should be (N+1-2*j)/(2*(N+1)) * MAXJSAMPLE/(nci-1). - */ - val = 2 * (ODITHER_CELLS + 1) * (nci - 1); /* denominator */ - /* Macro is coded to ensure round towards zero despite C's - * lack of consistency in integer division... - */ -#define ODITHER_DIV(num,den) ((num)<0 ? -((-(num))/(den)) : (num)/(den)) -#define ODITHER_VAL(j) ODITHER_DIV((ODITHER_CELLS+1-2*j)*MAXJSAMPLE, val) - /* Traditional fill order for 4x4 dither; see Schumacher's figure 4. */ - odither[0][0][0] = ODITHER_VAL(1); - odither[0][0][1] = ODITHER_VAL(9); - odither[0][0][2] = ODITHER_VAL(3); - odither[0][0][3] = ODITHER_VAL(11); - odither[0][1][0] = ODITHER_VAL(13); - odither[0][1][1] = ODITHER_VAL(5); - odither[0][1][2] = ODITHER_VAL(15); - odither[0][1][3] = ODITHER_VAL(7); - odither[0][2][0] = ODITHER_VAL(4); - odither[0][2][1] = ODITHER_VAL(12); - odither[0][2][2] = ODITHER_VAL(2); - odither[0][2][3] = ODITHER_VAL(10); - odither[0][3][0] = ODITHER_VAL(16); - odither[0][3][1] = ODITHER_VAL(8); - odither[0][3][2] = ODITHER_VAL(14); - odither[0][3][3] = ODITHER_VAL(6); - odither++; /* advance to next matrix */ + odither = NULL; /* search for matching prior component */ + for (j = 0; j < i; j++) { + if (nci == Ncolors[j]) { + odither = cquantize->odither[j]; + break; + } + } + if (odither == NULL) /* need a new table? */ + odither = make_odither_array(cinfo, nci); + cquantize->odither[i] = odither; } } } diff --git a/jversion.h b/jversion.h index 4bc1987..18b03b6 100644 --- a/jversion.h +++ b/jversion.h @@ -9,6 +9,6 @@ */ -#define JVERSION "5 24-Sep-94" +#define JVERSION "5a 7-Dec-94" #define JCOPYRIGHT "Copyright (C) 1994, Thomas G. Lane" diff --git a/libjpeg.doc b/libjpeg.doc index 83067d1..9028053 100644 --- a/libjpeg.doc +++ b/libjpeg.doc @@ -657,13 +657,16 @@ this variable as the loop counter, so that the loop test looks like "while (cinfo.output_scanline < cinfo.output_height)". (Note that the test should NOT be against image_height, unless you never use scaling. The image_height field is the height of the original unscaled image.) +The return value always equals the change in the value of output_scanline. If you don't use a suspending data source, it is safe to assume that jpeg_read_scanlines() reads at least one scanline per call, until the bottom of the image has been reached. If you use a buffer larger than one scanline, it is NOT safe to assume that jpeg_read_scanlines() fills it. -In any case, the return value is the same as the change in the value of -output_scanline. +(The current implementation won't return more than cinfo.rec_outbuf_height +scanlines per call, no matter how large a buffer you pass.) So you must +always provide a loop that calls jpeg_read_scanlines() repeatedly until +the whole image has been read. 7. jpeg_finish_decompress(...); @@ -1561,6 +1564,22 @@ application for the case that the input buffer is completely full and yet the decoder has suspended without consuming any data --- otherwise, if this situation did occur, it would lead to an endless loop. +Multiple-buffer management: + +In some applications it is desirable to store the compressed data in a linked +list of buffer areas, so as to avoid data copying. This can be handled by +having empty_output_buffer() or fill_input_buffer() set the pointer and count +to reference the next available buffer; FALSE is returned only if no more +buffers are available. Although seemingly straightforward, there is a +pitfall in this approach: the backtrack that occurs when FALSE is returned +could back up into an earlier buffer. Do not discard "completed" buffers in +the empty_output_buffer() or fill_input_buffer() routine, unless you can tell +from the saved pointer/bytecount that the JPEG library will no longer attempt +to backtrack that far. It's probably simplest to postpone releasing any +buffers until the library returns to its caller; then you can use the final +bytecount to tell how much data has been fully processed, and release buffers +on that basis. + Abbreviated datastreams and multiple images ------------------------------------------- @@ -2027,12 +2046,15 @@ The JPEG standard provides for both the baseline 8-bit DCT process and a 12-bit DCT process. 12-bit lossy JPEG is supported if you define BITS_IN_JSAMPLE as 12 rather than 8. Note that this causes JSAMPLE to be larger than a char, so it affects the surrounding application's image data. -At present, a 12-bit library can handle *only* 12-bit images, not both -precisions. (If you need to include both 8- and 12-bit libraries in a -single application, you could probably do it by defining -NEED_SHORT_EXTERNAL_NAMES for just one of the copies. You'd have to access -the 8-bit and 12-bit copies from separate application source files. This is -untested ... if you try it, we'd like to hear whether it works!) +The sample applications cjpeg and djpeg can support 12-bit mode only for PPM +and GIF file formats; you must disable the other file formats to compile a +12-bit cjpeg or djpeg. At present, a 12-bit library can handle *only* +12-bit images, not both precisions. (If you need to include both 8- and +12-bit libraries in a single application, you could probably do it by +defining NEED_SHORT_EXTERNAL_NAMES for just one of the copies. You'd have +to access the 8-bit and 12-bit copies from separate application source +files. This is untested ... if you try it, we'd like to hear whether it +works!) The maximum number of components (color channels) in the image is determined by MAX_COMPONENTS. The JPEG standard allows up to 255 components, but we @@ -2120,7 +2142,9 @@ The JPEG library typically needs 2Kb-3Kb of stack space. It will also malloc about 20K-30K of near heap space while executing (and lots of far heap, but that doesn't count in this calculation). This figure will vary depending on selected operating mode, and to a lesser extent on image size. -Thus you have perhaps 25K available for static data and other modules' near +There is also about 5Kb-6Kb of constant data which will be allocated in the +near data segment (about 4Kb of this is the error message table). +Thus you have perhaps 20K available for other modules' static data and near heap space before you need to go to a larger memory model. The C library's static data will account for several K of this, but that still leaves a good deal for your needs. (If you are tight on space, you could reduce the sizes diff --git a/makefile.ansi b/makefile.ansi index b69aca2..5853c8f 100644 --- a/makefile.ansi +++ b/makefile.ansi @@ -57,10 +57,10 @@ INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.manx \ makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ +CONFIGFILES= jconfig.cfg jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ jconfig.mc6 jconfig.dj jconfig.vms OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg diff --git a/makefile.bcc b/makefile.bcc index d76b229..d45bb7d 100644 --- a/makefile.bcc +++ b/makefile.bcc @@ -54,10 +54,10 @@ INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.manx \ makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ +CONFIGFILES= jconfig.cfg jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ jconfig.mc6 jconfig.dj jconfig.vms OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg diff --git a/makefile.auto b/makefile.cfg similarity index 95% rename from makefile.auto rename to makefile.cfg index 20a81b7..1ae48f0 100644 --- a/makefile.auto +++ b/makefile.cfg @@ -1,6 +1,6 @@ # Makefile for Independent JPEG Group's software -# makefile.auto is edited by configure to produce a custom Makefile. +# makefile.cfg is edited by configure to produce a custom Makefile. # Read installation instructions before saying "make" !! @@ -9,31 +9,31 @@ srcdir = @srcdir@ VPATH = @srcdir@ # Where to install the programs and man pages. -prefix = /usr/local -exec_prefix = $(prefix) +prefix = @prefix@ +exec_prefix = @exec_prefix@ bindir = $(exec_prefix)/bin libdir = $(exec_prefix)/lib includedir = $(prefix)/include -mandir = $(prefix)/man/man1 binprefix = manprefix = manext = 1 +mandir = $(prefix)/man/man$(manext) # The name of your C compiler: CC= @CC@ # You may need to adjust these cc options: -CFLAGS= -O -I$(srcdir) +CFLAGS= @CFLAGS@ @CPPFLAGS@ -I$(srcdir) # Generally, we recommend defining any configuration symbols in jconfig.h, # NOT via -D switches here. # However, any special defines for ansi2knr.c may be included here: ANSI2KNRFLAGS= @ANSI2KNRFLAGS@ # Link-time cc options: -LDFLAGS= +LDFLAGS= @LDFLAGS@ # To link any special libraries, add the necessary -l commands here. -LDLIBS= +LDLIBS= @LIBS@ # Put here the object file name for the correct system-dependent memory # manager file. For Unix this is usually jmemnobs.o, but you may want @@ -80,10 +80,10 @@ INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.manx \ makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ +CONFIGFILES= jconfig.cfg jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ jconfig.mc6 jconfig.dj jconfig.vms OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg @@ -158,7 +158,8 @@ install-lib: libjpeg.a jconfig.h $(INSTALL_DATA) $(srcdir)/jerror.h $(includedir)/jerror.h clean: - $(RM) *.o cjpeg djpeg libjpeg.a rdjpgcom wrjpgcom ansi2knr core testout.* + $(RM) *.o cjpeg djpeg libjpeg.a rdjpgcom wrjpgcom ansi2knr + $(RM) core testout.* config.log config.status distribute: $(RM) jpegsrc.tar* diff --git a/makefile.dj b/makefile.dj index 3988f80..d2cf7e5 100644 --- a/makefile.dj +++ b/makefile.dj @@ -61,10 +61,10 @@ INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.manx \ makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ +CONFIGFILES= jconfig.cfg jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ jconfig.mc6 jconfig.dj jconfig.vms OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg diff --git a/makefile.manx b/makefile.manx index 28773b3..43fbb50 100644 --- a/makefile.manx +++ b/makefile.manx @@ -58,10 +58,10 @@ INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.manx \ makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ +CONFIGFILES= jconfig.cfg jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ jconfig.mc6 jconfig.dj jconfig.vms OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg diff --git a/makefile.mc6 b/makefile.mc6 index 8b800b7..416a8fc 100644 --- a/makefile.mc6 +++ b/makefile.mc6 @@ -44,10 +44,10 @@ INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.manx \ makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ +CONFIGFILES= jconfig.cfg jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ jconfig.mc6 jconfig.dj jconfig.vms OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg diff --git a/makefile.mms b/makefile.mms index 0866c60..3c3b6ef 100644 --- a/makefile.mms +++ b/makefile.mms @@ -44,10 +44,10 @@ INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.manx \ makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ +CONFIGFILES= jconfig.cfg jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ jconfig.mc6 jconfig.dj jconfig.vms OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg diff --git a/makefile.sas b/makefile.sas index f9b852c..58ad8db 100644 --- a/makefile.sas +++ b/makefile.sas @@ -66,10 +66,10 @@ INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.manx \ makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ +CONFIGFILES= jconfig.cfg jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ jconfig.mc6 jconfig.dj jconfig.vms OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg diff --git a/makefile.unix b/makefile.unix index a2bfd55..fdcc633 100644 --- a/makefile.unix +++ b/makefile.unix @@ -61,10 +61,10 @@ INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.manx \ makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ +CONFIGFILES= jconfig.cfg jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ jconfig.mc6 jconfig.dj jconfig.vms OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg diff --git a/rdbmp.c b/rdbmp.c index f91849e..424ee4c 100644 --- a/rdbmp.c +++ b/rdbmp.c @@ -246,6 +246,7 @@ start_input_bmp (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) (((INT32) UCH(array[offset+1])) << 8) + \ (((INT32) UCH(array[offset+2])) << 16) + \ (((INT32) UCH(array[offset+3])) << 24)) + INT32 bfOffBits; INT32 headerSize; INT32 biWidth = 0; /* initialize to avoid compiler warning */ INT32 biHeight = 0; @@ -254,6 +255,7 @@ start_input_bmp (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) INT32 biXPelsPerMeter,biYPelsPerMeter; INT32 biClrUsed = 0; int mapentrysize = 0; /* 0 indicates no colormap */ + INT32 bPad; JDIMENSION row_width; /* Read and verify the bitmap file header */ @@ -261,6 +263,7 @@ start_input_bmp (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) ERREXIT(cinfo, JERR_INPUT_EOF); if (GET_2B(bmpfileheader,0) != 0x4D42) /* 'BM' */ ERREXIT(cinfo, JERR_BMP_NOT); + bfOffBits = (INT32) GET_4B(bmpfileheader,10); /* We ignore the remaining fileheader fields */ /* The infoheader might be 12 bytes (OS/2 1.x), 40 bytes (Windows), @@ -340,6 +343,9 @@ start_input_bmp (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) break; } + /* Compute distance to bitmap data --- will adjust for colormap below */ + bPad = bfOffBits - (headerSize + 14); + /* Read the colormap, if any */ if (mapentrysize > 0) { if (biClrUsed <= 0) @@ -352,6 +358,15 @@ start_input_bmp (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) (JDIMENSION) biClrUsed, (JDIMENSION) 3); /* and read it from the file */ read_colormap(source, (int) biClrUsed, mapentrysize); + /* account for size of colormap */ + bPad -= biClrUsed * mapentrysize; + } + + /* Skip any remaining pad bytes */ + if (bPad < 0) /* incorrect bfOffBits value? */ + ERREXIT(cinfo, JERR_BMP_BADHEADER); + while (--bPad >= 0) { + (void) read_byte(source); } /* Compute row width in file, including padding to 4-byte boundary */ diff --git a/rdgif.c b/rdgif.c index b886602..c4bc9ef 100644 --- a/rdgif.c +++ b/rdgif.c @@ -352,9 +352,14 @@ ReadColorMap (gif_source_ptr sinfo, int cmaplen, JSAMPARRAY cmap) int i; for (i = 0; i < cmaplen; i++) { - cmap[CM_RED][i] = (JSAMPLE) ReadByte(sinfo); - cmap[CM_GREEN][i] = (JSAMPLE) ReadByte(sinfo); - cmap[CM_BLUE][i] = (JSAMPLE) ReadByte(sinfo); +#if BITS_IN_JSAMPLE == 8 +#define UPSCALE(x) (x) +#else +#define UPSCALE(x) ((x) << (BITS_IN_JSAMPLE-8)) +#endif + cmap[CM_RED][i] = (JSAMPLE) UPSCALE(ReadByte(sinfo)); + cmap[CM_GREEN][i] = (JSAMPLE) UPSCALE(ReadByte(sinfo)); + cmap[CM_BLUE][i] = (JSAMPLE) UPSCALE(ReadByte(sinfo)); } } @@ -508,7 +513,7 @@ start_input_gif (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) /* Return info about the image. */ cinfo->in_color_space = JCS_RGB; cinfo->input_components = NUMCOLORS; - cinfo->data_precision = 8; + cinfo->data_precision = BITS_IN_JSAMPLE; /* we always rescale data to this */ cinfo->image_width = width; cinfo->image_height = height; diff --git a/rdppm.c b/rdppm.c index 6aa8e6f..2641e6d 100644 --- a/rdppm.c +++ b/rdppm.c @@ -6,6 +6,7 @@ * For conditions of distribution and use, see the accompanying README file. * * This file contains routines to read input images in PPM/PGM format. + * The extended 2-byte-per-sample raw PPM/PGM formats are supported. * The PBMPLUS library is NOT required to compile this software * (but it is highly useful as a set of PPM image manipulation programs). * @@ -72,7 +73,7 @@ typedef struct { U_CHAR *iobuffer; /* non-FAR pointer to I/O buffer */ JSAMPROW pixrow; /* FAR pointer to same */ - JDIMENSION buffer_width; /* width of one row */ + size_t buffer_width; /* width of I/O buffer */ JSAMPLE *rescale; /* => maxval-remapping array, or NULL */ } ppm_source_struct; @@ -85,7 +86,7 @@ pbm_getc (FILE * infile) /* A comment/newline sequence is returned as a newline */ { register int ch; - + ch = getc(infile); if (ch == '#') { do { @@ -105,17 +106,17 @@ read_pbm_integer (j_compress_ptr cinfo, FILE * infile) { register int ch; register unsigned int val; - + /* Skip any leading whitespace */ do { ch = pbm_getc(infile); if (ch == EOF) ERREXIT(cinfo, JERR_INPUT_EOF); } while (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r'); - + if (ch < '0' || ch > '9') ERREXIT(cinfo, JERR_PPM_NONNUMERIC); - + val = ch - '0'; while ((ch = pbm_getc(infile)) >= '0' && ch <= '9') { val *= 10; @@ -131,8 +132,8 @@ read_pbm_integer (j_compress_ptr cinfo, FILE * infile) * We provide several different versions depending on input file format. * In all cases, input is scaled to the size of JSAMPLE. * - * Note that a really fast path is provided for reading raw files with - * maxval = MAXJSAMPLE, which is the normal case (at least for 8-bit JSAMPLEs). + * A really fast path is provided for reading byte/sample raw files with + * maxval = MAXJSAMPLE, which is the normal case for 8-bit data. */ @@ -145,7 +146,7 @@ get_text_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) register JSAMPROW ptr; register JSAMPLE *rescale = source->rescale; JDIMENSION col; - + ptr = source->pub.buffer[0]; for (col = cinfo->image_width; col > 0; col--) { *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; @@ -163,7 +164,7 @@ get_text_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) register JSAMPROW ptr; register JSAMPLE *rescale = source->rescale; JDIMENSION col; - + ptr = source->pub.buffer[0]; for (col = cinfo->image_width; col > 0; col--) { *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; @@ -176,7 +177,7 @@ get_text_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) METHODDEF JDIMENSION get_scaled_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading raw-format PGM files with any maxval */ +/* This version is for reading raw-byte-format PGM files with any maxval */ { ppm_source_ptr source = (ppm_source_ptr) sinfo; register JSAMPROW ptr; @@ -197,7 +198,7 @@ get_scaled_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) METHODDEF JDIMENSION get_scaled_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading raw-format PPM files with any maxval */ +/* This version is for reading raw-byte-format PPM files with any maxval */ { ppm_source_ptr source = (ppm_source_ptr) sinfo; register JSAMPROW ptr; @@ -220,9 +221,10 @@ get_scaled_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) METHODDEF JDIMENSION get_raw_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading raw-format files with maxval = MAXJSAMPLE. */ -/* In this case we just read right into the JSAMPLE buffer! */ -/* Note that same code works for PPM and PGM files. */ +/* This version is for reading raw-byte-format files with maxval = MAXJSAMPLE. + * In this case we just read right into the JSAMPLE buffer! + * Note that same code works for PPM and PGM files. + */ { ppm_source_ptr source = (ppm_source_ptr) sinfo; @@ -232,6 +234,60 @@ get_raw_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) } +METHODDEF JDIMENSION +get_word_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading raw-word-format PGM files with any maxval */ +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + register JSAMPROW ptr; + register U_CHAR * bufferptr; + register JSAMPLE *rescale = source->rescale; + JDIMENSION col; + + if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) + ERREXIT(cinfo, JERR_INPUT_EOF); + ptr = source->pub.buffer[0]; + bufferptr = source->iobuffer; + for (col = cinfo->image_width; col > 0; col--) { + register int temp; + temp = UCH(*bufferptr++); + temp |= UCH(*bufferptr++) << 8; + *ptr++ = rescale[temp]; + } + return 1; +} + + +METHODDEF JDIMENSION +get_word_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading raw-word-format PPM files with any maxval */ +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + register JSAMPROW ptr; + register U_CHAR * bufferptr; + register JSAMPLE *rescale = source->rescale; + JDIMENSION col; + + if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) + ERREXIT(cinfo, JERR_INPUT_EOF); + ptr = source->pub.buffer[0]; + bufferptr = source->iobuffer; + for (col = cinfo->image_width; col > 0; col--) { + register int temp; + temp = UCH(*bufferptr++); + temp |= UCH(*bufferptr++) << 8; + *ptr++ = rescale[temp]; + temp = UCH(*bufferptr++); + temp |= UCH(*bufferptr++) << 8; + *ptr++ = rescale[temp]; + temp = UCH(*bufferptr++); + temp |= UCH(*bufferptr++) << 8; + *ptr++ = rescale[temp]; + } + return 1; +} + + /* * Read the file header; return image size and component count. */ @@ -242,14 +298,14 @@ start_input_ppm (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) ppm_source_ptr source = (ppm_source_ptr) sinfo; int c; unsigned int w, h, maxval; - boolean can_use_raw; + boolean need_iobuffer, use_raw_buffer, need_rescale; if (getc(source->pub.input_file) != 'P') ERREXIT(cinfo, JERR_PPM_NOT); c = getc(source->pub.input_file); /* save format discriminator for a sec */ - /* while we fetch the remaining header info */ + /* fetch the remaining header info */ w = read_pbm_integer(cinfo, source->pub.input_file); h = read_pbm_integer(cinfo, source->pub.input_file); maxval = read_pbm_integer(cinfo, source->pub.input_file); @@ -261,8 +317,10 @@ start_input_ppm (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) cinfo->image_width = (JDIMENSION) w; cinfo->image_height = (JDIMENSION) h; - /* Raw PPM/PGM matches JSAMPLE representation iff: */ - can_use_raw = (maxval == MAXJSAMPLE && SIZEOF(JSAMPLE) == SIZEOF(U_CHAR)); + /* initialize flags to most common settings */ + need_iobuffer = TRUE; /* do we need an I/O buffer? */ + use_raw_buffer = FALSE; /* do we map input buffer onto I/O buffer? */ + need_rescale = TRUE; /* do we need a rescale array? */ switch (c) { case '2': /* it's a text-format PGM file */ @@ -270,7 +328,7 @@ start_input_ppm (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) cinfo->in_color_space = JCS_GRAYSCALE; TRACEMS2(cinfo, 1, JTRC_PGM_TEXT, w, h); source->pub.get_pixel_rows = get_text_gray_row; - can_use_raw = FALSE; /* force a rescale array to be made */ + need_iobuffer = FALSE; break; case '3': /* it's a text-format PPM file */ @@ -278,35 +336,37 @@ start_input_ppm (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) cinfo->in_color_space = JCS_RGB; TRACEMS2(cinfo, 1, JTRC_PPM_TEXT, w, h); source->pub.get_pixel_rows = get_text_rgb_row; - can_use_raw = FALSE; /* force a rescale array to be made */ + need_iobuffer = FALSE; break; case '5': /* it's a raw-format PGM file */ cinfo->input_components = 1; cinfo->in_color_space = JCS_GRAYSCALE; TRACEMS2(cinfo, 1, JTRC_PGM, w, h); - if (can_use_raw) + if (maxval > 255) { + source->pub.get_pixel_rows = get_word_gray_row; + } else if (maxval == MAXJSAMPLE && SIZEOF(JSAMPLE) == SIZEOF(U_CHAR)) { source->pub.get_pixel_rows = get_raw_row; - else + use_raw_buffer = TRUE; + need_rescale = FALSE; + } else { source->pub.get_pixel_rows = get_scaled_gray_row; - /* allocate space for I/O buffer: 1 byte/pixel */ - source->iobuffer = (U_CHAR *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (size_t) (SIZEOF(U_CHAR) * (size_t) w)); + } break; case '6': /* it's a raw-format PPM file */ cinfo->input_components = 3; cinfo->in_color_space = JCS_RGB; TRACEMS2(cinfo, 1, JTRC_PPM, w, h); - if (can_use_raw) + if (maxval > 255) { + source->pub.get_pixel_rows = get_word_rgb_row; + } else if (maxval == MAXJSAMPLE && SIZEOF(JSAMPLE) == SIZEOF(U_CHAR)) { source->pub.get_pixel_rows = get_raw_row; - else + use_raw_buffer = TRUE; + need_rescale = FALSE; + } else { source->pub.get_pixel_rows = get_scaled_rgb_row; - /* allocate space for I/O buffer: 3 bytes/pixel */ - source->iobuffer = (U_CHAR *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (size_t) (3 * SIZEOF(U_CHAR) * (size_t) w)); + } break; default: @@ -314,9 +374,17 @@ start_input_ppm (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) break; } + /* Allocate space for I/O buffer: 1 or 3 bytes or words/pixel. */ + if (need_iobuffer) { + source->buffer_width = (size_t) w * cinfo->input_components * + ((maxval<=255) ? SIZEOF(U_CHAR) : (2*SIZEOF(U_CHAR))); + source->iobuffer = (U_CHAR *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + source->buffer_width); + } + /* Create compressor input buffer. */ - source->buffer_width = (JDIMENSION) w * cinfo->input_components; - if (can_use_raw) { + if (use_raw_buffer) { /* For unscaled raw-input case, we can just map it onto the I/O buffer. */ /* Synthesize a JSAMPARRAY pointer structure */ /* Cast here implies near->far pointer conversion on PCs */ @@ -327,14 +395,12 @@ start_input_ppm (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) /* Need to translate anyway, so make a separate sample buffer. */ source->pub.buffer = (*cinfo->mem->alloc_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, - source->buffer_width, (JDIMENSION) 1); + (JDIMENSION) w * cinfo->input_components, (JDIMENSION) 1); source->pub.buffer_height = 1; } - /* Compute the rescaling array if required (we use it for all but raw) */ - if (can_use_raw) { - source->rescale = NULL; /* no rescaling required */ - } else { + /* Compute the rescaling array if required. */ + if (need_rescale) { INT32 val, half_maxval; /* On 16-bit-int machines we have to be careful of maxval = 65535 */ diff --git a/rdrle.c b/rdrle.c index b58eb75..07e0d67 100644 --- a/rdrle.c +++ b/rdrle.c @@ -66,6 +66,7 @@ typedef struct _rle_source_struct { rle_kind visual; /* actual type of input file */ jvirt_sarray_ptr image; /* virtual array to hold the image */ + JDIMENSION row; /* current row # in the virtual array */ rle_hdr header; /* Input file information */ rle_pixel** rle_row; /* holds a row returned by rle_getrow() */ @@ -187,8 +188,9 @@ get_rle_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) { rle_source_ptr source = (rle_source_ptr) sinfo; + source->row--; source->pub.buffer = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->image, cinfo->next_scanline, FALSE); + ((j_common_ptr) cinfo, source->image, source->row, FALSE); return 1; } @@ -210,14 +212,15 @@ get_pseudocolor_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) colormap = source->header.cmap; dest_row = source->pub.buffer[0]; + source->row--; src_row = * (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->image, cinfo->next_scanline, FALSE); + ((j_common_ptr) cinfo, source->image, source->row, FALSE); for (col = cinfo->image_width; col > 0; col--) { val = GETJSAMPLE(*src_row++); - *dest_row++ = colormap[val ] >> 8; - *dest_row++ = colormap[val + 256] >> 8; - *dest_row++ = colormap[val + 512] >> 8; + *dest_row++ = (JSAMPLE) (colormap[val ] >> 8); + *dest_row++ = (JSAMPLE) (colormap[val + 256] >> 8); + *dest_row++ = (JSAMPLE) (colormap[val + 512] >> 8); } return 1; @@ -249,7 +252,6 @@ load_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) colormap = source->header.cmap; rle_row = source->rle_row; - row = cinfo->image_height; /* Read the RLE data into our virtual array. * We assume here that (a) rle_pixel is represented the same as JSAMPLE, @@ -269,7 +271,7 @@ load_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) case GRAYSCALE: case PSEUDOCOLOR: - while (row--) { + for (row = 0; row < cinfo->image_height; row++) { rle_row = (rle_pixel **) (*cinfo->mem->access_virt_sarray) ((j_common_ptr) cinfo, source->image, row, TRUE); rle_getrow(&source->header, rle_row); @@ -284,7 +286,7 @@ load_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) case MAPPEDGRAY: case TRUECOLOR: - while (row--) { + for (row = 0; row < cinfo->image_height; row++) { scanline = * (*cinfo->mem->access_virt_sarray) ((j_common_ptr) cinfo, source->image, row, TRUE); rle_row = source->rle_row; @@ -293,7 +295,7 @@ load_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) for (col = 0; col < cinfo->image_width; col++) { for (channel = 0; channel < source->header.ncolors; channel++) { *scanline++ = (JSAMPLE) - colormap[GETJSAMPLE(rle_row[channel][col]) + 256 * channel] >> 8; + (colormap[GETJSAMPLE(rle_row[channel][col]) + 256 * channel] >> 8); } } @@ -307,7 +309,7 @@ load_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) break; case DIRECTCOLOR: - while (row--) { + for (row = 0; row < cinfo->image_height; row++) { scanline = * (*cinfo->mem->access_virt_sarray) ((j_common_ptr) cinfo, source->image, row, TRUE); rle_getrow(&source->header, rle_row); @@ -343,6 +345,7 @@ load_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) } else { source->pub.get_pixel_rows = get_rle_row; } + source->row = cinfo->image_height; /* And fetch the topmost (bottommost) row */ return (*source->pub.get_pixel_rows) (cinfo, sinfo); diff --git a/testimg.gif b/testimg.gif index 8c14b8d..ca40361 100644 Binary files a/testimg.gif and b/testimg.gif differ diff --git a/testimg.jpg b/testimg.jpg index acf32dc..b34ca5d 100644 Binary files a/testimg.jpg and b/testimg.jpg differ diff --git a/testimg.ppm b/testimg.ppm index 5464834..9d81ce2 100644 --- a/testimg.ppm +++ b/testimg.ppm @@ -1,4 +1,4 @@ P6 227 149 255 -00+00+11,22-42.42.53/53/830830830830920920920920:2.91-91-80,80,91-91-:2.80,80,80,80,80,80,80,80,5.,5.,5.,4-+4-+3,*3,*3,*3,*3,*3,*3,*3,*3,*3,*3,*/*%0+&0+&1,'2-(3.)4/*4/*72-72-83.94/94/:50;61;7/@:1A<0C>2E@4HA5IB6JC7JC7MD6MD6MD4LC3ND4ND4OE5RE6S>2Y>2c@5oB6}E7G9G:E8G;F:E;FCA??>=@8<0@.@.?-?-?->.?.?-A-A.A-@+@*@+A-?.?0?0>/>-=,=,=,?,?,=+=+=+>,?-@0@4>3=1?0B2C2D5C4>3@5E;G=G.2F6:Q9>iBF|HLMQOSW\dnpu}~q{^cTMpPFdRKfNG_MH_SQcedp{}{|mfhVWWFPNFVQ\VPcVPc00+00+11,11,31-42.53/53/83083083083092092092092091-91-80,80,80,80,91-91-80,80,80,80,80,80,80,80,5.,5.,4-+4-+4-+3,*3,*3,*4-+4-+4-+4-+4-+4-+4-+4-+0+&1,'1,'2-(3.)4/*50+50+72-72-83.83.94/:50;61;7/?90@;/B=1D?3G@4HA5IB6IB6LC5LC5KB2KB2LB2MC3ND4QD5O>1V?1_@4kB5yD7D5D6C4B5@5@5A8C;E=F>CADJAJCJCIDHBE@C>C:A9@9?;?>A@??=?7=0@.?-?-?->,?.?.?-@,A.@,@+@*@+A-?.?0>/>/>-=,=,=,?,>+=+=+=+>,?-@0@4>3>2>0A2D3C5C6@5B9E;H=F=m@6S8,C3+>64;56:4593492381270/70/81081081070/70.6/-6/-50-0/..0.0/.0/.1..1..3-.3-.4-.5,.5),4(+6),=-1D48O78/?:.A<0C>2F?4G@5G@4G@4I@2I@2I@2I@2J@0KA1LB2MC3NA2QA1ZA3eB3qC4}B3B2@1<.:,;/=3@7C;F>D?BF@GBHBGCGCFAD?D;A:@:@=@?A@>@<@6=/?-?->,>.?.>-?->.@.@-@,@-?+@+@,?.>/>/>/=,=,=,=,>->-=,=,>->-?,@/A3@2>0?0@3C4C6B6D9F78=67;45:3292181081072072072061/61.50-50-31-.0.-0..0..0.0/.0/.1..3-.6/05./5,.5),5),:-0?25J47\89l?=zFBJGON\aguny~|uenSWLFqKBhMBdNFdPIdMH_MK]Z[fpuz}w{leiYZ[MUSM[T[[Sa\Sa.-*/.+/.+0/,10-21.30.30.61/61/61/61/70/70/70/70/7/-7/+6.*6.*6.*6.*7/+7/+80,80,80,80,80,80,80,70.3.,3.,3.,2-+2-+2-+1,*1,*4/-4/-4/-4/-4/-4/-4/-4/-4/,4/*4/*50+50+61,61,61,61,61,72-83.94/94/:50:6.=7.>9-?:.A<0D=2D=2E>2E>2G>2G>0F=/G>0H=0I?/KA1KA1LC3OE5VC4^D4jC3tB2@0>.8*8(8+;.@4D9G=F?CDADBDCDBEAD@C>B;A:@:@>@AAB>?:?4=.?,?,?,>->->->,?.?-?,?+?,@+?*?+>->/>/=.=,=,<+<+=,=,<+<+=,>-?.?.A3@2>/@2B5C7B6B6E=I@KCJA}E=c?6M91B6/@86?87>78=65;43:3292192172072072041/61.31-31-21..1/.1//1//1/10/10/2//2//6017016/05,.4+-7+.;/2C23S73a;5oA:yE>IEST_kis|zw~oy_gPSKFuKAmL@gPEgQFgKD_GBWLL[]_ginqtzyw}xywv{pjob_cTVYMTTM]WZ^V]^U_,.*,.*.-*/.+0/,10-2/-30.2/-2/-4/-4/-4/-4/-4/-4/-5.,5.,4-+4-+4-+4-+5.,5.,6/-6/-6/-6/-6/-6/-6/-6/-3.,3.,2-+2-+2-+1,*1,*1,*4/-4/-4/-4/-4/-4/-4/-4/-50-50-50-50-50-61.61.61.61.61.72/72/830941:52:50;5.<6->8/?90A:/B;0B;0B;/D;/D;/D;/E<.G1I@2KF7MG6SF5ZF6cE4kC2vA0~>,:*9*:+<-A3F9J>H@FCDDDCDCBC@B=@;?:@9=;???A>B:@6?1>.>->->-=.>.>.>.>/>.?->,?->,>+>+>-?/>.>.>.=-=-=-=-=-=-=-<->.>/>-B3A1?0@3A6C8B9A8C[=4F8/<4.@86@86?66>64=53<42:3192072052052032/41/21.21.02..1/,2/.1/.1//1//1/10/2//4116016015./3,-4+-7.02l@6qC1I@2JG7JG7OF6VF6]E4eB3n@1v>.|;,:*:+<-@2E6J;I>GAEBEBEABB@>=?:=:=:<<>?>B=B8?3=->-@-?,?,>.=-=->->.>-?->->,>+>*>+>,>.>.>.=-=-=-<,=-<,<,<,<.=->0?/C1A/@0B5C8C9A;A<@7A:1:50@84B76?75>64<42:3192083052052043032/32/02.02./3.-30-30/20/200200202102103004114115/03-.2,-5./9.-F4-N5*W8,_60>7.>7.>7,B8.B8.C9/C:.F;0G<1I>3I@4HE7HE5KE6RC5YB3`B3g?/o=-w<-|:+9*:+=/B3F8F9F=E?E?E?CAB?@@=?9;:;<=@=C;C6?0<*>.?.?.>->/>/=.>.=/>/>.>.?-=+>+>*>,>.>.=-=/=/<.=.<.=.;-<-=/>/>0?0C1B0A1B6C9C;C>C>FBPLWSXRtQLXH@DB:62=51;50:4/92072/53/53/43013/13//3./3./3.-30-30-30-30/20/2002002010/2103213001..0--3-.5.-?0,D0)K3(S8,Z<5bGEu^it}t{lqbfVTKDJ?rI=hG;dE>_EB^CBX=BO9@I:BF=HHDMIGQJGQIIRHMVLTYN_YPbXNbXP*,**,*+-++-+,.,-/-0/.0/.0--0--0--0--2,-2,-2,-2,-3,-2+*2+,1*)1*+2+*2+,3,+1*+1*)1*+1*)1*+1*)1*+0*+0--0--0--/,,/,,.++.++.++0--0--0--0--0--0--0--0--4/-4/,4/,4/,4/,4/,4/,4/,50-50-61.72/72/83094194182-93,:4-;5.=5/=5/=5/=6-B80B8.C9/C9/F;1H=2I>3I@4GB5GB5KB6PA5U@2]@3b=1j;.r;/x9+~7*7):-=0A5B6E;E.>.>0>/?/>/?.>,>+>*>,>.>.>.=-=/=.=.=.=.<.<.<.<0>/?2@0D1C0B3C6C;D>D?EBPLZUd]f^v^W[TKHLDDHB=83?73>62<61:4/83.72/53/53/44/24013/04//3./3./3.-30-30-30-30/20/200200200/.10/3213212//1..1..4/-8-,;,(B0)K7/R<5\IIrcm|ƃzryhkVWHED>mF=eD=bB>^BAZ?CW>EQ4I?5K@6P?6U=4Y;2^90c6,n8/u8.}8,9-:/<1>2=1A4A5C9E;G>F?D?C@??AADAE>C9A2@/A-A/@.>->/=.=.>/>0<-<-<.=.=-=,<+=+<,=,=.<-<-=-;-;-=/=0=0>1>4@3A6B3E4D1E6I=G?D?EBLHYSf`pirjqhkiaV]VIPIMKCKE>C=6=70:4-84,72-42,53/44/13.13.02./1--1,-1,.1/.1/.1/.1//1//1//1//1/0200202102102102102103004+/;/2@41C5.J<5\OOwnxϏ؃t{io^bY[KJsGCe@>]=>Y>BV@IWJV]Racaqom}yu}ovkzpfui]l`V_Q^[Ic[Gd\H+.,+.,+.,+.,,.,,.,,.,,.,/.-.-,/,,/,,.++.++.++.++/),/),/),/),0*-0*-0*-0*-0*-0*-0*-0*-0*-0*-0*-.+-.+-.++.++/,,/,,/,,0--0--0--0--0--0--0--0--0--0--1+,1,*2-+3.,4/-4/-3.,3.,3.,3.,3.,3.,4/-50.61/72070/81/920:4/<40=51=51<4.?5/?5/?5/@6.B6/D81F:3G;4I=6I=6M=7O=6R<5V;3[91`6/i71p7/x6.8.9/<1<2=2@4A4A6C9E;F=E>C=CAE@FBF?E9B3A.A.B/A.?/>.>.>.>/>/<-=-=.<-=,=,=+=-=,=,<-=-=-<,;-<-=0=0=2>2?3@7A8B5H8E4G9J?HCFBKGTOc]qg}r}s{onsh[e]OWPMMDLH>FB8A=5>:297/53-20*33.33.02-/1,/1-.0,.0,.0,/1/.1//1//1//1//1//1//1/0200202102102102102103024,38.5;22>62G?9\WTvtyɏӄyqzktfp\_WZrRVkRXkS^iYgnevwqt~|tzoretf[eT\ZEaZAc[E+..+..+..+..+..+..,-.,-.,-.,-..,.-+--+-,*,-*,-*,-).-).-).-).,(-,(-,(-,(-.*/.*/.*/.*/.*/.*/.*/.+--*,,*,-+--+--+-.,..,..,..,..,..,./-//-//-//-/0--1+,1+,2,-3-.3-.3-.3-.2,-2,-2,-2,-2,-3-.4./5/061/70/81/920:31<42<40<40<40?41?5/?5/?5/B61C72E94F:5I:6K:7L;8N<7Q;7T:5W73[5/d60l6/u5-~6080:1<1<2?4?5@4@4B7D9D;D;EAHAICI@E;B4A/A/B0A/>/=.=.=.=0?1<.=.4?5A9C;C:K30>30>30>4.@4/B61C72D83G84I85J96K:7L:7O95R83U51_63e50o50y7091:0<1=2?5>5>3>2@3B6C8D;F?GAIBH?E;B6@1@/@.@.?.>->-=-=/>/<-<-=/<.<-<,<.<-;*;*<,<,;,<,;.;-<0<2<2>6@8C;E=E=L?H;G=JBLHPK\Uj_p|{zmzocl`TYLQUFKO@EI:@C7<=166-22)11*00)//*/-)/,*/,*0--1..0--0--0--0--0--/.-0--/.-1..0/.1..0/.0/.0/.0/.1.06-75+33.,86.GK;agVyx|~}j}iYePTU*0/*0/*0/*0/,//,//,//,//,-.,-..,.-+--+-,*,,*,,*,-).-)/-)/,(.,(.+'-+'-+'--)/-)/-)/-)/-)/-)/-)/-).,*,,*,,*,,*,,*,+)++)++)+,*,-+--+-.,..,./-//-//-/0*+1+,1+,1+,1+,1+,0*+/)*0*+0*+0*+0*+1+,2,-4./5/0812921:32;43<33<42;31;31=21=2/=2/=2/?30@41A50B61C74D85E96F:7H97I85L75O50Y63`61j61s70}:2<2=3=2@6>5>5?4?4B6C7D9EG?F>C9A6?1?0@.@.>/=.<-<-<0<0;/;.;0GAH@L@HLDPKWRf\vhx~ttktf\dTV^MOUDFL;@E62/?30@4/@4/@52A63@84A95C85D85G65I40Q51Y50b6/m7.v9/<0>1<2>6>6>6?4A5B5B5C5A6C9E;D5=2>1?/>,=-=-;,;,2/>30=51<61<74=85>96?94A63D51H3/O4,Y4+d5,o8-y9.;/;/<5<6=4?3@3A2A3@1>2?5B8A:@7>6=3>3?.?.>-=,;+;+<.<.:/:/:.;.:.:-:,:,:*:*:*9):*:*~9-|9-<2=5@8B:E?IBLGMGIAH?JFSO]Xhazmz{xpkwdeq\[gRR\JJTCCK;?D711=2/;5.;7/<72<72=83=83=72@60B2,H2,Q3,\4,f7.o9.x;1}:0=3<4>3@2@2?2>0=0<.>1A7C8A6?3>3=2>2=/=.<-=-=-=->.=-3?6~A7C;G>KCNFOHHBICOI[Sh_uht|{vrl{egv^amVYePQ[IHRA@H:G#Sa7n|Pfu{{|ċ˓ȜƞƝ}{uqmhZnTJYAGL4HI0EF-.0..0,.0./1-/1/10-21021.32152052252041150.4./4/-50.50-5.-3.,2-+2-+/,,/,,.,..,..,.,-0+,/*+.)*-(),-).-)./(/-)./).-)./),-*,0*+.++0*+/,*1+,/,*2-+0-+/,,.-,/,,0--0-+1.,3.,3.,2-+2-*4-,5.,6/-81/81/920;42;42=53=53=53<42;22:11=22<11<11;00;00<11=01=21:3*:5(:5);5,;5.:4/;3/<1.;/*>-*C-'J.)U1*_5.k93r<3|@1@.A1B2?2<1;.8,;.=/A0B1B1@/>-;-<2<4=1>0@/@,@+@)B,@->/<.:.9/80:0z9.}@4x;/s6*{<.{<.y9.~>3{;0@5F:J@MBMCNDMFLHTObXq`~ipyw|tvskp}cgtZbnW_kVYcQNXGELA>A9;;67124+/3'.4&.6%/2&-,*,(++)*+*(*+(*.(+0(,1(,2(/2(/2(/1)/0*/0*/.*00)00(.2*.1,)0/"=?+U\AqyY~hvtuvutz~ywsrjzg[iWOYGKP;EH0@C+0/,10-10-10-21.21.30.41/52052083183172061/6/.6/-6/-60+5/*5/*3.+2-*/,*/,*.-,/.--./,-.,-0),.(+-(),-)//(//(//(//)./)./),/),0*+0*+1,*1,*2-+2-+2-*2-*0--/.-/.-/.-0-+0-+2-+3.,3.+3.+5.,6/-71,82-93.:4/<61<61=51=53=53<42;31;22=22<11;00;/2;/2;/2=03=21=3)=4(?4)A3*B2,A0-?0.?0.;/,=.*?.+E/)O1,Z40d75l:4r@0xA,A/@1?3=2;0;09-;.=-@/A0B.A.?2<4=6=3?0@.A,B)A)A+?*>,<-;-9.8/:1v9/v=2r9.r7,x;/z:/v6+x8-}=2B6G;K>LAMBNDLDKGUQg\xeo}v~w|tuslnefz^bvZ`tZZmVQaNIWGAJ@60>60?71?73>62=51<40<42=21<10;0/;00;00;00<11>11B2*C2)H/*J.,M,.L+-H+.E+/@-->/+?.+C/(K/*W1-b11h40k:-p;,x;/<3=3;4:3:3;1=1>1@0A1A2B4C5?4>3@1@/@,?)?)>'>'=);(:);+;+~<-{<.{>2x=2w:0y90~=2~=2{:/y9.?6C9H>K@KBJBLDLEJGVPg[xdms~z|~xtpljfecbab]{`VqYNhRDYI?QD7F<1;4,40)/.*+,+)+/()0')0')0')/()0)*0*-/,..+--+-+,/*-/(-/'./'./(-02.44.3/),+)%67+PTBnu]}jliknm~jpw~|yyyx~z~{~~{{vuqpjzg]hWPXHFG9?>1<8,32/32/430430430541631631742853:53;64;64:53:32:3192082-82-71,50-4/,2/-2/-2//10/10/10/0.0-./,-.-+-0*/0*/0*/0*/0*/0*-0*-0*+2,-2,-3.,3.,4/,4/,4/,4/,30.30.2/-2/-2/-1/+3.+3.+72/72-93.:4/;50=72>60?71@82@90A93@82@82?71=51=51=2/=2/<10;0/;0/<10=22>2/D2-I0+K/-N--P*.O)/K)0F*/D//@/,@/,B0+I/*R/,Z0-_1+g:0l;.u<2~<5<6;7:7:6>7@7A8B8B6B6A6A6@3A1A/@/?,>)<(<&:%:%:':(<*{=)x>*x>,?4y7/z7/}:2}7.}:0?4~>3~C8F;I>K@JAKCMEOGTI]PiZuafl~s~{}xvrpnlkjijkfga|b\u^QgRJ^LAPD7D9192-3.+/*,)'2''5%'3&'2''0''/)*.++.-,*,*),,'-,&-,',.&-,&-.),./).2*.1*+/*'98-PTDjqYwf{hyg}jm}lzi{kqssq~q}t}w{yzyzy}{yxtqpkgzcZiUQYIFE:A;4<6/541541541652652652853853964964<75=86=86=86=65=64;42;50:4/:4/83.72-61.42.41/52052032/21010/0/./-/2,/3+/3+/3+/3+/3,-3,-3,-5./5.-5.-5.-6/-6/-70.61.41/41/41/42.61.61.61.61,:4/;50;50=70?71@82A93A93D:2D:0E;3D:2C91B80@60@60<4.<4.;3/;3/;3/;3/<42?30H2.K0.M1/M01L/2K.1H.2F/2D11C1.C1.C1,G1+K3,O4,U3+d;2j;2t<6{=9<9<:;::9;6=7@8B9B:B:@9?6B3D1A/@.>+=);(;(8&9&:(<(|>*v?)t@*u?,}:.z0(70<5|2,y1+?7B8}F;|I=}L?L@LCMENHUI}aMxkQ~qXv\}ahr{}|||v|q}ozoynyovnrin}gdp]]gUTYLHK?A?7;7/60)3+'5)&4''3('0(&.)&+*'*,(*.)&,'&,)&,)(+))*++*)+)+.(+,#'2)+6/.94/CB5UYGfoWo}_udravdyhxjteufyj}m{kylxmzrzvzxyxwvxxvsrnnhfz^ZiQQYHFB:@86;31652652763763874874964964:75;86>97?:8?:8?:8?87?86>83>83=72<61;61:509419417517518537426314303213004./5./5-15./5./5./5./5.-6/.6/.6/.70/70.70.81/81/72053/64064094194/94/:50<61=70>81?92A93B:4C;5D=4F<2F=1F<2F<2E;1C9/B80A7/>7.>60=5/<4.<4.=5/>62A50H31K2/J32J53G65E64F54E43F33H31H3/H4-H4-G6-G8,N6+Y4*e3+m5/w63~7686766574}93~<5~>5?8@8?9@7A4C0A0?/=-<,;*:):(;(<*}=*y?+v@+uA-y?-7+3-LFVR>961DyH;wL=vO?xP@|OCPFSK]MrkOmtQzvWy\z`iszy{~}|x}usrqssr}oykqzdjs_bfVXYJPL@FA5>7,;1'9-(8,'6,&2,%.,&+.&*.&(/((/(*.(-,).+)2))4))7')7')4''=2/E=7JF94=83=83<72<72<72<72<74:8497386274263161/70/70170/70/70/70/70.70.70.70.70.81/81/920920830830941:50;61=83>83?92>81?92A93B;2C<3D=4G=5G=3I>3I>1H?3G>2F=1D;/B8.A7-@9.?8/?8/>7.>7.?8/>81B82E41F52C93@<4>>51=0+y?-x@.z@.z@.{?0<03,=9kg|zWU@=JBLAsJ=mO>lR@mSArTAzVEYKdOlsPm|TzZw^q`neqjwnwz~}xusssuuv~s|qvkreju^`iSW]HLQ4*>2+;1)60'20(00'-0&-0(.1)1/)5-+:++>(+B&+E%+B')F4/MB8VOC\WHaaNglTjvYj{XlZhVgXl]p`o_n`reuhrgqhtkxrzvwttsqpusrooiibdzZWlLP[BJF94>94=83>94>94>94>94=83:82:5094/81/81/81/81/81081/81/81/70.70.81/81/81/92092092083094/:50<72=83?;3A;4A;4?92@:1A:1C<3D=4E>3H>4H?3J?2J?2I>1H?1F=1E<0C:.B9-A:/A:/@90?8/?8/?90@:1@:1A71B82A;4B>4A@5C?5H>4L<4N6/P5-T4.T4.Q6,P8-M:+R8*e6)s6*~;3@8D?GCJFLEQILCD:;/7,6,90<3<6<6;5;4<4<3~=0z?0wA0vA0vA2w@2{>2<2:260*&?<{zedDAHAzG;nM=fR>cV?dY?jXAt[F^MfOzsPxTu[m]a^V[RZT[ptzw͆{}|wvssvvvttsmk|wbrmXiaN^TBSF5N=0M5,L2,G1*B1(>0'9/%6/&5/&71(:0(=.*A,*E**H(*K'*H)(UA7ZP>e]JhdOjkRntWnzYl}YlYgUhWm\q`rascwgvishqhtkwsyuvvrrssssrpnhkbd{XWlJO\APM?LB:H<7::3::3::3::3::3;;4><6><6><6><6A<7A<7B=8C>9E?:E?:E@;EA9EA9D@8D@8C?7C?7B>6A;4A;4A;4A;4A;4@<4@:3@:3?94@84@84?73?75>62>62>62>62>62=51<40;3/;3/:20920:50:6.:6.;7/=70>81@:3A;2B;2C<1F<2H>4I?5JA5KB6KB6LA4LA4K@3J?2H=0G9->9->9-?90>:087,JF9U51S/*a;7Z4.\7.[6-Y1(\0(e5/o;6t;3IK@F=>6=5D:NCPBVGYJOAA4:/=59588553274>8}@6s>1qC4nB2o>0s<0926301*+JJdbEEVVwwSPC=UGlS>e\BedGegIhaFo^EbMiScKn\ogZ\t;;g/1d11_20N(&F&"K1+L6/F4-D2+C1,F1-E/+E,)J.,O70XH7aU>g^FgcGlnPu|[v`oZlXmYp^s`saucwcxftgvmunsltqxuyywwvvpolijejaczWWlJQ_AOO8?=7?=7B=8B=8C>9D?:E?:E?:FB:EA9EA9EA9D@8D@8C?7C?7D>7D>5D>7C=4B<3B=1B<3B;2A:1A93A93A93@84@84@84@84>62>62=51=51<40;3/:20:2.;5.:6.:6.;7/=70?90@:1A<0B;0C<1G=3H?3JA5JA5KB6LA6NA4NA4M@3I>1H=0G:.?;1=<1=>0B;0J0*Z--r27~4:8;CD~F@{LA{NB{L?LENJLPKLB7B3B5B7>27,7,=/C4?/@.E3G6E6H:NDKJGJ@D8;88=:@8w>3o>1zI;NA@8.+,.>>@]]UR=6RExaJa]AY_@dkJqmPwfKbLbOdYaZWYCM.B&C'G(H.M3M=QIYP]Q\R\Zafjkkmopqqrsuuvuvx{vysynujqemal_jamS^LTHPEJFHk86GT1,L1)G1*H7.I:0J;1M?5SF7\O8dY>h`DieHoqRz`{etar`q^q_q_ucwcwcyewi|q|u{v~zyypnmgjbbxXWlJR`@RU=UQ=TP<992992992::3<<5==6@>8A?9A?9A?9D?:D?:D?:D?:E?:E?:FB:FB:FB:EA9EA9EA9F@7E?6HB9GB6G@7F?4E>3D=1D=2C<1B;0B;2B;2B;2C;5C;5C;5C;5?71?71>62=51<40<40;3/;3/;5.;5,;5,<6-=7.?:.A:/B;0E;1F=1G>2I@4K@5K@3LA4K@3NA4M@3L?2K>1H=2G<1E<0D;/B;0B;0@:1@:1?;1@<2@<2?>1JJ;I8-h32?FFVOaYe]cD?MBSDTEUOTUJXGO?5B0@0?1;.7+8*=.E5=*7#9&>*A.B1C810:=DIKOMQJKA=80z80v6+v3)2,54?DIRPYIH64;:22KL`]G@YK|cMg`DbfForP}qRgKfOgXcaSYEP8H3G3M0L+G2N0J1I5K4L2J2K7OCYGZI^L`NbPfSiUjQiPhMhMhMkOnSsVtha{\sVk[keqSZq-1\'&W1+U;3O@4@;,8:(=C0LN8WN4bV9f^BhdGrtVflwgyhuesdsbvdyezf|hu~yxoli}aauXVlLRbDSY>XW>YX?881881992::3<<5>>7A?9B@:CA;CA;E@;E@;E@;E@;F@;F@;GC;GC;GC;FB:FB:FB8GA8GB6JE9ID8IB7HA5F?3E>2F=1E<0D:0B;0C<1C<3C<3D=4D<6D<6@82?71?73>62=51<40<40<4.;5,;5,<6-<6->9-?:.B;0C<0F=1F=1H?3I@2K@3K@3K@3K@3N?3N?3L?2K=3J<2F;0E<0D:0C<1C<1A;2@<2@<2A=3@?4C>2J=.R.%;>R_PdOgQbHP50>0D1G6H@IJ>L:C@8F4B2@2?2>2A3D5G4B.<(;';':'6%2'949:9:7;=@JLTTXU?84*-$60IIPTCM6<<:/*8565BAZVTKVGwWAsgJysT|rRgKcKl[sjSXEO=J:I?NAQ;L5G@R9L4J3J0I.H/M5R5S7U8V9V:Y=[>^@`Be@e?d>f>gBlEoIrPtRtUuTpUmbwfuXa{24h1.W2)N9+E?.=B+9E.>H.QJ1`S:h_GojQ}{eux~q{q}r}r{nzl~lrytph{d_sWVjMRdESZ?WZ>Y\@77.77.88/990;;2==4@>6A?7CA9CA9EA9EA9EA9FB:GA:GA:GC;EC;GC;HD0G2G>0J?2K@3K@3LB2KA1K@3N?3M>4M>4J<3I;2F;1D:0D:2C<3C<3A;4@<4A=5@>6A?7I>4W8-r61MR\iK^=R5D&,2,9*<(?+B5D?5B4@1>1@4C8H:I;>.>.=*;(9(:+;,=.HCDGHJIKHMKSBM9H5G1F.E1K8Q9U:W;W<4?=5A?7A?7D@8EA9FB:FB:HB;GC;HD1H=0G>2G>2F=1F=1E;1E;1E;3D:2C91C91B82B82A63@52?41=5/=6-<7+<7+=8,?8-A:/C<0D=1H?1H?1J?2K@3LB2LB2KA1M@3N?5M>4L<4K;3I;2F;1E92C91B;2A;2A;4@<4?=5@>6A?7M;4l83EDY_XaDP9E4<,,1(7(9$8#;+>3:5746,:-9-6,:1B7E:E9>1?/;+6&6(>/D8H9:'B/F:D?>@9>39/277GDSLNF=61+/+712'=0,#611-30e]k]WD\DX@T=]MkbecRUEL?E=?>=B=HAPLXVOQDM:G5F1D-C0F6M7R8S8S:V=[A`DeFh>d?g?i@l>m=l:l9gHq<`@cLmMmOlUnZmraiJKs;7[6,P9*PD1UM:_PDsdZ{rν­o}mbr^YmSXiNS`EUaDVaG66-66-66-66-77.990;91<:2><4?=5B>6D@8EA9GC;IC2F=1E;1E;1D:2D:2C93B82A63A63@52>60>7.=8,>7,>7,@9-A:.E<0F=1H?1I@2KA1LB2LB2LB2KA1M@3M>4N<5L<4K;3I;4E92D81C91A93@:3@:5?:5><6?=7@@9Q83w..HISU@A5552303*/"5#7#8!:$='<)9(7*8,5+4+80@8C:@6B7A3<.7*:/C7D:B3@'A&8&,##$&+*3/6(,--2,3+3)2'0&2&4$7'2&5-4/;8^V}reSWBO:YIf\c`PUAJFLBCA>B;A7A6F@NKKMAJ9G6G5F3E6G:L6O6Q4Q6T8W;\?aAdCjClCnDqCrAs?s@oFlAaFeLjLjWs`y^sk}q}pv^`D@f7.gB6sVJzd^|{ĽϹtvgwd^qZ]nUZjO\iN[hN66/66/66/66/66/770971:82=;5><4A=5C?7EA9GC;HDND2F<2E;1D:2B;2C93A93B74?73>62>62>7.=7.>7.?8/@90A:1C<3D=4G@5I@4JA3LA4LB2LB2KA/KA1J?4J?5K=4K;3J83I74G63D83@84?94<:4<<3==4>?3?@4S8.:7ZXZW:53)6,1&3$8&>+A-@*?(A(?';&:+;/:/7-<2D:E;?5#=)5)-)),',%**--.1-3+3'3%1"3!<(4?/6(7.=6@7lahZREPDd[heQT?IAK?C><>9A8?37+6-83GG@D:C:E;F9DbBjBkAl@o>p>q>s@pDgOlUrLgC]Vphf]v`whzp|qwfg\X}YR~yĻĪ|{lzjdtaar[apXbnWamV300411520742964:75:84:84<:6=;5><6@>8B@8DB:FE:HDEMF=LC3JA1KB4KD8JC7E>3A:/D=4A;2@82>83@86>75=64;50B:6A95A95@86@98@98A:9B;:D=;F>8I?7K@5KA1M@/MA.J@-DA/C@2F<2J83N54O38O59K8;G<;9736:2:C59A04:'<>*`D2i^I@7-6*8*7(8'=,8%:&>*>+<)8&7%7&7&8(9)=-A1C3B1A0>+=+<+>.D3F7>02%:*:)9*9,7-5.4/1/.-..0-2-5+7(:(;&<$65:&8&7)C6UHOFTM]Y^^PV>H7F?JCGFCC>@8;29.9.9/I?IBEB>>=@AFBH=FDPBQBSCV@U<6@>8B@8DB:ED9FDNIFRNSYTa[VkXSkSOaPIJLE5E?8F@9D>7A;4B<5@:3>83>83?94?94=83;61;50;50<53=65?87?9:A:;B;:E=;F>:I?7K@5M@1N@.N@,JA+B?-@@/F=1I91L56K47F36B56A<::<7;>6@A5E<.K8)]C5L?PC;.1$5'9(7%9&>+:&<)?+?-<,9*5(7(9*;):(<*?-B.B.A-?+;'<*F5I8?09*7*7,7-:/;.<0:.8/5.1./,/,0,4*7):(;%?$:;#?'=)7%=.H=G@JGPRQVGP;G:FDMDFGBD>@7:07,8,9-A4I>KDGB@=AABECICKCMDQFUBT=T>YBbFiCj>i?kAqFvI{MzNwMpOnTq_wazYvOpEjCkDiIh\slvrII|uȳĴ}0--1..2//300520631853862;95;93=;5?=7A?7CA9DB:EC;JF>JF:2>:0=9/64.75/;61=83?94@:5B:6D:4H<5I>4L>4N?1N?1O?/O?.M?-B8&B9)D9,D9.B82=836831814<5:>6C;5L3.[**q,.6>BF912%1!8(;*7%7#;';'<*@-A/=.;-:-<.=/=-:(:(<*>,>,=)?,9'?-L;EFKNIMBH?FBHDBF>D:>39-7)8)9*6(C7LDIDA??@DHJOAH@JCPFUDV@V>YA`DgCjClEqHxK{K}IyGuJsLrOr[yb}VsEcJjTu?]I`z{aC>{qҵ0--0--1..2/-30.41/640751971:82<:4><6@>6B@8CA9DB:IE=JF;86;63;7/<8.=9-:9.881992;;4=;3A;2B;2C9/D9.J=0L=/M>0N@/N?1N@/N?1L?0E;+E:-D;/A:/?;3;;46=64<54<5><6I72T.,l(./85D:D6/6)9)>.>-9'8$;':';*>,?/=/=0<1>2?2>1;+9):*;+;):);+<+B3F8?22&2'9.5,4*6.7-8.6-4-2+0-/,/*0)2'4%7!6436#>+>.;-=3D:6.71:8DELLJLAD<;@:A7?3;.9*8)9*;,3%>2H?HBA?AAFKNT@F?FBNGVGXBX?Y@_AdBgEnIrMzN}K{HxCqNzR{JoLlUtUtMiFbLg@WfuΑ_;4iL@zqϦ2/-2/-1.,1.,2/-31-53/640860971:82<:4><4@>6B@8CA9IE;KF:MH;OJ;QK:RL;QM;OL>MKEVTVdervxčōzxomhd^[}TQmMKaKGWEBL?=A:7786286.76+67+572594992<:2@;/A;,E;+G:)K=,L>,M?-N@/M@1K@3K@5G@5GB6EA5C=4A93?73>75>75?86@86E62L2-[1.v79AEAF:=;1<,?/@0?.;*;(=+8$9';+<.;.;/;1=3@5>2:.7+8)9*8*8*8)B4D79+2%4(7,5,5+3*4-6-5-5,2+0+0-/+0*0(2$4"6 5214!7(:,;/@5E=F??:;8?BADEINOS>D>DBMIVJZFYBYB^?`AeDmJsN{N}LzGuGtQ}QyGnGjRqVsNiF^H][lꢟMGd2*lf͗ʾ̽οſȾ74253/41/20,20,31-42.53/75/860971;93=;3?=5A?7C?5ID8KF9MH9PK<>;:7:84763366368575973>8/C:,F<*J>+K=+L>,L@-KA1HA5GB6FB:CA;CA=A><@:;=78;56:45934:32@86@/,H.(_71}C>IDA@81<0<,>.>.=->+>,?.7%8(9+9-9-9/:1=3>4=3:09-9-:.8-7+7,C6A41%-"8.<32)4+2)2,3+4,2,0+.+/+.*0*1)4%6#7!6 7$5"4#4%5(8-;2?7XSQMGBA>D?GBD>;48+8'9)9(:'<*@/C2C5>2=5B:2@<4B>6C?5HC7JE8NH9QKRM@PLDOLLYXdkm~Ɩۜ럪ꘜ┙ړԏʉyzqqed}WWjON\HHQFCKBBK>?L<=H::A<9;>75C9/F;.H>,J>+I?,GA0FC5CD8AD<>D??BDAGEDHBA=3K:/gF8OBI==27*=0=-=+>,?-?.?.<*7'8)9+9-8.7/92<4;3:2809/:0;18/7,=2?4:02'4)<1<23)2)1(1+2*1*0*-),)-*/*1*3)5(6&8"8!:$8&6$4$5'6,7/70MGVQXTPJFAB<>8;09)9%:':&9'=)A/D3H:B6B9FBHHEGEHFKEIAECJKTP[N^K^KaC_DbEgImMuOyOyOxSwStRrWu[xYuQjI_XjVfO]`lO[XbWd[dfgɂ窨A<7>94;6183.61,61,61,72-83.83.:50<72>:2@<4A=5B>4HC7JE8NH9RL;SM0F@1EB4CD8@D>=EA:EE;BKBAWIFbOPiW[p\bs^ep^dk_bbaZX\LDhI>SFVGH8=,;,@/@0@.?.@/@0=+6&7(8+8,8.6.6072:581808091:3:1906.A99.3)8.>4=4906,2*0(0)0*/*-*,),)-*/*2*5*5(7'7%9$8#8&7%6'6)7+6,3+2,MGb]^ZLI?:936,:*:&:%:$:%<)@.C1H8E8G>LGJIDDBDEGGJCEEIMTR[Q]N_NaH_GaFeIjMsPxQyTyTsZt^x^wUnMePfYm\ldsO]VdPaWhMbRb]`urٚC=6B<5A;4?92=70;5.93,82+71*71*82+93,<61?94B<7D>7GA8JE8NH9QK:TK;SMNA9@A:;D>9B<5D@6DD;AC>-@/?-?-<,;,6(6)5+6.6.70828291:2;3:2707092;2D;>58/A6\Qmb^S?53*2*2+/**')&)',)-,0-2,1(0$1#4%;);'<);*<+:,8+7-6.>961EBb]VR@;=:2)6%9#:%;%;'<*?/B1B3F:RIZQNI=9;:EEGHFFJLPUQXMWKYL\QgNgJfJgMmQtQwRuXuZrZr\t^v[rWkWhctWf\lZkEXCXNgTfeihf̍鴳D>7C=4B<5@:3>81<6/;5.:4-82+82+82+93,;50>83A;6C=6F@7ID7MG8PJ9SK8TL9VM?VOFRLOUQ`adv|ʐ㘨롤◘׌Ȁtrhfb^^X^W]UWPuOHcHBUF?JE?D@:;E@>IDBEB@A?ADBFMMRVVedhru}}}|p`vYjVaQVGF?5;*;'<(7$7&7'8)8'8(7(5(3&3)7.:3<4<6<6<6>8<6<6>8B.'7':%:&;&:';'=+=.A3E7QEXOQHB5B<3@:1>8/=7.<6-93,93,82+93,;50>83@:5B<5E?6HC7LE9PG7RH6SI7UJ=VLDTMLVQ^^_zqvÎݖꘘߍ҃xurniag^bZ]WXPxPJiHBWC>M<3=D:AM@CO?CQ=C[EKoW^~etv~{um^MoA]G]EQ:=6/<*@(?&<(;):):*;,;-<.6@9>8;4:3805-4,:2B:E>B;>4=35*5)8,2&,6'H9K?@74.-*,+--,-+-**/,3.5.4+2(1'3'7(:):,;+;,:,8+8-4,:5:5;8NMWVDD2,8+:':)9(:(:'9):)@1C5L>VJRFF=B9D=JEHDKJRQSUOTLTMXWdYi[qZsUoQmPmRqLjVq`yawZpWjYj]lYgYg_m]kYhboapX`[X|NGlf˜޹JE9ID8GB6E@4C=4A;2@:1?90;5.:4-:4-:4-;50=72?94A;6D>7GA8KD8OF6PF4SF5UH9WI?XMLVOX]ZrnqՔꛪ閗ዌց{ztnmhe`^[[VSPvKEdEFoCKNV^ehynppi_UyEh6V.I=QBN:=82A1C-<%6#5$4$5&6(8+;.;0@7@8?7?7<6945/4-/'.&/'4,:3=3906,6+-!*7+B3?/5$.F8I=H@=8-+$&'*/2..//3/3-1+0+/*0*6.8-:/<1?1@2@3@36+KCKD4/GCZYHIA>;.:*9)9):);):*9)=/?0E8OAOAG;B6A6G@F@IFOLQPMMKNKQXa[g`ravXnNhLhOlSrXuZsYmXj^mfrjwftanalamckdkcicb]UfG<^V̫NG;MF:LE9JC7HA6F?4D=4C<3?71>60=5/=5/=51>62@84@:5D>9F@9JC8NE7QD3SE3UG6WH6:36.4-2,2+2'5*8-9/9/8.7-6+0%6*7(2"2!:(?*<*=,D8JBD@65*-*-/37856311-0+0-0.0.86:5:5<4>2>2?2>17,WMaY<5<7PNFFQN=3;.8+8+9,;-:,:+9,;-A2G8I9D5@1>/F;E=ICPJQNMLKLLPYa^hesgy]rPfLfOkXxWtUnWi_nkultfofq`l_jjsqvgia^kb~eWVI:kXK|sQJ>PI=OH9FB:JE9NE7QD3SE3UE4WG7ZLCVJMYSdjh|ɓߙ맬뙟攚ᐖݏن{rxptnomen]~}]yUjN`N]S]T^QXGR9?9:2C6E6E7E8F9G;G=G>=4:2703-3+3,3-5.9.=1>3=29/6,6+8,/#<-=-2!.8%>(;'9(8*:0>9@@<>48,0,/++**+)0-44889;8;8:8783717,6*6(5)RDnbH@5/D@>@VUC;@3:-7*9,;.;.;-7*9,=/A/A1@-?-=,C7C:G@OHRMOJMMOO]dahium{dvVkQjUnWtWpXl^movx}lpY^blancns|눋́}ukzkqkXMO;]WHrhSM>RL=QJ>OH5D=4B:4A93@84A95A97A:8D?9C:H;I9E4B1?2TJG@:75589:<9975:0;.;.:.8,6+3(2'3+3+2)3*3+4-5/70>2=1<09.8,7+5)4(4%3$5$7#=(?):#2:'4%2'62<==A7>38-2-/--/.439;;>:=3:1825212.3*3&4%3#?0k^UK:2B<;;SQNGF<<27-7-9/:-9,7);,=->*;)<'>*?->1=3D9KCOIMGLJNMaf`ggso|gyZlUkYqXq\p`nio|}wx_ciso{gtnx楠}clVDS=UVGpi]UO@TN?RK?PI=NG;LE9KD8JC8G@5F?4D=4B;2A93A93B:4B<7D?:GC;KF:OF8RF3SE1VG3WG6WH>SFFXP^jgƔٚ螠꣩쥩죧홠蕡擟ؔΙcZqNdGXAN>G=B>=A7C5F5I5I2D.@-<,QFB=87>?DGBE;>86C:D7C7A5=29-5*2&1)2)3+4+5/4-3-3-B7=07+7+:.9,5(2$8)22:%9&5!8$C/7&8)7+6-3.52::??KLHGCC>?=7OJTPKD=56.7-8.9,7*8+=,@-<(9$;%>*A/8*7,=2F;JAHBHDIH`b]adknwju]hWf\l]p_qbljm}|qrsx{brZgɲZkP@T:MV@hcVXOAXOAWN@VM?TK=SJ?>@??><>:B:?6D:LBJ?*>,=,9);-=0?4?4?7?8@TK=SJ<@CBEB?C;?CD=;E>C<60ROFEAC=A:>:::8<7=6E>=4<3G=L@C4:+9*6)7*6,4,2-3.5283>3;.7*5'5(5(5#4 9%9#9&:'<,<-8-4+4+5*7)7(6#4!4 3#1'1*/--/+1+3,8-5,+.'1+3+4)5(8*9*?0*E6?0G;WLD;D,@.@/?-:)<+=/>0>3>4@9A;gclia^jgolb_khtur{p{iq^cX]acooxwuvv}Qc[o]mhjYtPM`TK=TK=QH:PG9OF8MD6MD6MD6MD6KD8IC:KE:@=@@BAD>C8=?AA@D>=7:3XTBB>A<>9;7775:5<5H>;05*A4J=H8=-7(6(7(7+6-5/6084=83)5*7+6+5+7*:+?-4"4 5"6#9*8*4(-%A8>5=1;-9&7#7#6$6(2(.(-*,.-1-3./-&1'6*6)3'4&9*>.A30"TF->,=-:+;,<-=.<1>3A9C>ZWfc`]lipna_fdjnS]`jhpej_ddfppvvrtltI\Qg[l`_ToINd>V`Bvw^ZQCZQCYPBXOAWN@WN@VM?VM?SJD>B>@>B?D?F@F?F9>>@ED@;60=7ZVAA?B91*3+3-5,5-7.9.=/7):*<,<-;.;1<7:4C?@9@6=/9)8$9%:&<+6(1%0'0-2000/+3'6&8'8&7&7&;*=,:,<.^QF;4,0)B-=,<+<+<,<,;.=3A:E>KG_[`]pmss``^^^cISZdhogndkjoruuuordmCWJaWjꓕ\{XPlDQi@[gFy|`[PC[PCZOBZOBYNAXM@XM@XM@VK>UJ=TINGK>IBI=??>GD<71+A;SOB@@@=?<>=:?9B:E;=18)5(9)=,=*;*;(:););.;.8.7.82:48663213243512,0(1(7.:07/4.41:/:,>3C90*;7306462;6C>KDRJTIUIUH@1?/<-=->-?/?0>/<-<-<-<-;/<1@8C;JEa\b`nmrs`b`b`elupyms`g^ekpvzx{lr\i@VC\Uh凌e^XtJ\vJhwQgǼ㽻ݻ޽ZOBZOBZOBYNAYNAXM@XM@XM@WL?WL?VK>UJ=UJ=VK>VK>WL?RH>RH>TK?VLO>MBIAB?=GC932)F?IEA><<9:::>:C;E0501203+4(7&9'<)7%6%6(9,=3@8@8A7G5C-;'9%<(>*=)8&:,7*1&D;2.A>0/+)2.5/82918/6+2'1$E6A3=.:*9*:,:-:-<,=->.<-;.;/=4@7RKf`b`ijmpchjpourzt}ntbjdmqyv}otgoWe@X?ZPf~wll\o[xas°֮ҧШҬԯղڻYO?YO?YO?YO?XN>XN>XN>XN>WM=WM=VLYL=ZN;[M;[M;ZMO@EDC@9B9E7G6I5F*5,303406.8*:+<,5&7*;/<2=6<6=7@7J;H4B0=+:(9(9)9*4&9.@7D=1./-55654.7/91:2;2<1;1;0M@G:@19+7*7)8+8+;.=0>/=.;,;,;/<3KCc\b_jjoshoryw~hopxrxkrluu~t|fnamQaAZXN>XN>XN>XN>WM=WM=XN>WM=WM=VLXM@UJ?WI?YL?ZM<[M<[M;[M;[M<\OBXLEXMM\RZ_Wgc]rkesoxvxx|z~Èljǂ}y{uxqvoukqgzaO[GFDIGOBO9G6B9A<>@>C@ECBI@L=N?N@BGCA;G<:-:.UH>492/+*%.):2C8C5>.;);(<(:&;'<';&7$5!7$8(7)5'3'3(2+42688<5:-3(.(.,1.4*1&1)7,@*B!:0"0'1+2/00-2,4*6+5,81=5>796634293I.7'3$6(:,5)7,D;8130!98621)4*4*5*6,6+6,7,YNSFH<@3<0ZM>ZM>ZM>ZM>ZM>ZM>ZM>XKZM>ZM>ZM@[L@[L>\N=]M=^N=]O=]O>ZM>XMCXLIYMPZPX^UcaYjb[skeoktpwq|u~ȋLj~yrrtk[HMB:A;CA?@9;:?BF====>>@BAJBN?OAM??A8@5@2=.>-F7OC8.=53-4-E:@27&?+7$:&<';&9$9%9&:%:&9'6%2#.!/$7-=483510.++')%(%(%(&+"*"/'7)?!<72'9"."+*/-/*)-*426365655611..,,.-:1;0:0TJ#,"G=.%/'>6E?;6/)/)50<6>5<.5*3'6+;/;18.bYZPD;6-:09.3(6+0&1'2'3&6(:+<-=0:/C;\Xoqrvwyr}|xu|szr}p|kwfr^mG[=[=Z@Ufjym|g}djx}wyrxp{swvwz¨̺վ̺²ZM>ZM>ZM>ZM>ZM>ZM>ZM>ZM>XKZM>[L>[L@[L>\K>]M=]M<^N=]O=]O>^OA\ND\NGZNK[OR\RY_U_`Vge\tjbogqjxpyĊÐ~tnquiW|=B6,4,:4>8<9=;@>=<<=<@>C@J@J>L@G>8?3>0>.=)=*D4L@J?D<9280C8F7<*6"9&;'=(=(;':':'9%9'6%2"2$5)8-8/902'0&.&-'+(+*-,-/*.&+$/'7%<8411-<2?)4(--1/3*/9>7<4915/3/224862.<483F>F>0(3+#6.A9E?=74,2+6/;2;-9*6(5)9,<1<29/cZYO@94,92;17-:04,3+4+5)5(5'6'6(;/B8YUlkptw|v}zv}t~s~o|ivbp]mG\<[=[CXdgvnzct]w^~clqqno^k^g]f_k`qfxjzkuw}~ŸƿѺǶ[M<[M<[M<[M<[M<[M<[M<[M\K>^K>]M=]M<^N=^N=]O=`RA^QB]OE\NG[OL\OO^QT^QZ_SfdXui]lbskv}}vptwiRu=E6.4,:1@7B:@9=:>=F?A=5=/<*=);'<)B0J;G==5;3>6F4D7F:G:74<8niD?0+/*;3A9B:=57-5,5,6+6(6&6(8*6;3>6=8<7<6<3:09-6)6':.@5SNgfnry{|{xwsm|eu^oYlF]:Y=[FY``dv[iRgPlSsXz^|_v]oY`zN^QaVdZm`tg|k~nsuyzz{ȹ̷ʵZL;ZL;ZL;ZL;ZL;ZL;ZL;ZL;YK:YK:YK:ZL;ZL;[M<[M<\L<^K>^K>^K<_L=_L<^N=^N=^N=_Q@_Q@^OC\ND]ME\NG]NJ^NP_P^cTleYzj^qg|t{zzxucMkGSBAA>C0=*=)<(<)A/G9?660=8D>G>WKYG<*:(7#7$;(=+<+9)8(3%2#3&8.>6>55-/'6*7*4+1(.*-*+)**)-'-(2):'=!<>$B5K'8-?O_`oP_;J8G)9*7-8092600+')"1.742/C@soVQ>9HB>6=5;28/7,6+3(3%5$6%8'<-6^N>]N@^MB^OC_PF_NKbNXcPddTpeZ|mexrwu}ÉςwlXvE^EUGQJQFIA?@=B=B?CCCDCHEIEHCE?><8A6?.<*<);&;'=-A5H@?:DAC@=5LAZKM=@/8'2"7'<,:)7(8*0$3(7.:3:46//*,(0-2.11322648596<-6,7/>0D-G*G,O3S8O2D?R^qk}ViBT>O3E2A3=6;98804'/#2,.*73YS]WYSC;JBE:>38-7,:,:,7)5%8&:%;)=-;,6*8/=6NHFB612->:@;826205164584:1:.:+:)6'7*I?_Zmo|~v~x}zxskzcu\oQdE\7URDSAL;A;??@BCEGEEEFFGFFCB>;;5>2;,8'9':&9':,<2ID@>==773.A9ZOgZP@A04$6&9*8*7*8+0%6,;2:34//+-(-,4:4;3>3=2?0>1>1?1B2C4L5N0O-P1Y=b2JM``r^rVjObDX8K@R:F1;//3+8*;(;':/1*JCkdMDQH=4=3NDB68,8,<.;-9+;*<';&<)>.9*3(:0D723/;8;73.1/*1+2-13170:.ZO^RMoY9Pg8[vDa|JmSvYz^}ahmm|n{o|qpommrrsspqsuwux¯̿ͯŸYK9YK9YK9YK9YK9YK9YK9YK9YK9YK9YK9ZL:ZL:[M;[M;\L;_J6<978/0//3183LDk`gZQB<.9,:-7)6*8.4)7.92611-/+0.043B0F.G+C&A#>!: 9'B+F.N/Q+Q*U2aAiB]_qgyUiJ^K`AX1E@Q7B,2)%.!8"@#@&?090YN]RG=E97,=1VKG<:-9,:+9*9(=+>*<&;&=+7)4)=5MGGBFA963184510,10+3*3-1004.8,;.?.:)3%;1NI`ax|{}}xn}dv]oXkK_G`8V=XN\KFfR0Ne5ZtDe~Nt\dikotuu~r|q~onmmooppmlosuuwŰξ;˧YK9YK9YK9YK9YK9YK9YK9YK9YK9YK9YK9ZL:ZL:[M;[M;\L;_J<_J<_J<`K=_L<`M=^N=^N=`Q=aR>aR>aR>aR>`Q=aOiOJhNScP[cWjkeuv~|xzǃ}tylnYZEK3H8SL=G:ABDCBD@E@E>A:;39/<09*7':+=/>0@6B<6356--1/95/&3(SHvk\OC6-3#8+IA\Ywx~vi{^rWkThC[D]6T:UMYHB]K,Lc4Vo>c|Kt\gmoswzws{n{j|hhillmkihkntswŪʵøƢ[L8[L8[L8[L8[L8[L8[L8[L8\M9\M9\M9\M9\M9\M9\M9\L;^I;_J>`K=^K<^K;_L<_O>aQ@bRAaQ@`P?`R@aSAaSB_Q@aNAiMIhKNdPZfZmnkx{сxrricb]OUBN;I=K?N?A-6CN)2'/*0)1&!,'1&2)++9 /&6.?$6Zk.?^k`j[fV_QXIN@A87>8B8@27'3 7"<&<*9.80F@<8416553DBKGKDC:9/2*3)2*4+=.:+0")-#90D:G?OGD<7/0).,00/203.1/1/00-1-2*6*:,>.2">0=4_Xtpxhz^vZtTnKeEc9Y;[?Y]i@;UG-L^5\sCjNz^dhkopo}n|m{j{i{g}f~fkjlhfddfkotyz[L8[L8[L8[L8[L8[L8[L8[L8\M9\M9\M9\M9\M9\M9\M9\M9^I;`K=`M>`M=_L<_L<_O>aQAbRB_Q@^OA]PA]PC]RE]RG`PHgNKhNRfS`h_unny}Ÿˤ~wx||ukj_a_SVFOGQFTAN9@6B6A3>09,8+;*>.7)9-@7;562<8404.4*4)7':':&9(8/D07)6*9/:5IG/25;7B/=AO)3&)&%)++-*.(+(,*0$+$+&-9@69,E6I7@-1 *))/&;7UQIH5546<>WVFCF@@:7/2*3-506/<4:06-4*5-91@8E/3#<.=1^Vvrtfy\uXsQoIh@a:Z?^I_S[|>6SF-O^8]tDjLwZ{`{c|gjk|j{jziyfyeye{d|e~iijfb``bejoryydopR]^\M9\M9\M9\M9\M9\M9\M9\M9\M9\M9\M9\M9\M9\M9\M9\M9_K9aM;cO=cO?aN>`M=^N>_PB_PD^PF]OF[OH]QL^TNaVScWTfUVhV]h\olhtu|̋ՙء˫}Ѐ僇~wskheWXHODMDPBM=H2<6FE044;8A6AFT4>*-#$$%12-/'+%)16)-8=+1).5:TX?C]a`eW]PUNSGJ;<95@:7-?3C6?29.4*.$(!&0+FD;;--46AC_^>;A<@:;380;5>9?:@=>:?:B>@=<8?]M=]NB\ND\NG]QL`UTcXXcZ^e[bg_eh`fkahmdrpkstz~ˆی⎆؟ԮŴy{߀{xvpecVZLQDM@H5OBK=:,6*@65.>;/1175<9CP[MV?D55$%/0,/25*/.3:=46-/:=GHZ[PQ?ABEDG@B:>9:99:894:2;3B;NIWTOODA83:6KJNMRSY[RRYW42<7A9?7>6@:B=?,7(?4:1;2QI\RLD:1916.90=4=16+4(6+4,81?6E9E9B4@3>3/'62/0.2.58?QX^c[^PR/113,/EG68,.-.>A2444cc?=,*/.(*<>BF8;48:>8b:_6[A`NbW^q/*`?/[V=_lIg{MnTv]w`x`zd{dycuauat`u`w`xazbzc{e{g|g{cz^x]z]~_bipqsu|oslewf\k_SbV^N=^N=^N=^N=^N=^N=^N=^N=^N=^N=^N=^N=^N=^N=^N=^O;^M4`M3aN7`N9]M=]ND_PL^SSbX`jaoul{t{uwsvrtrrtrxt|x{ЅیߖܚΜ}zk\R=O@RFWOWRQQIJ=@37::;9>6@5B5B3?-=.8-A74,.%I@g]d[UJ;35*3)91:16,3*6.1*82<2:/>1E6B48,0)2.21-/+/28FKV[^a\`9=9=+/JN8<.258(((*YW?=:784 )*=?BF5:,31806)/48LObfiodmajalclMMNK\[VUMNHG3330A=KDOHIC?9945/.,2:-9*6(2)307>BJI1-2+3*4+3,3.3.2.11/1/0.-/-0*4*8,=/<,1#7+D^P>^P>^P>^P>^P>^P>^P>]O=]O=]O=]O=]O=]O=]O=^O;aP7aP5aO8^O;]N@_QJ`UUbX`oevuny~|zyxvvwtyt}y|ńʍϕΚȡɭƥngIF0A1@3A6GAMKHH?@==<;=:>9A7@4=034*7-914-2+601-608/8.>2D5>13&3+0,20.../1579BEMSY_FLQX48GK9=BF7;./14IH8786$!;:9:;?=B7=.7*32<=EMT^fktjt`k[gYi\gdeZWVU?>114534CAIFQKRLIB=8947232-71=0<*6.9;BCGAA1.3,4+4+4*3+3.3/01/1/0.-/-0*3*7,;->/1$7+<4tpvi}at[pPjBb7_7`;^LeOZ85^=-OF.WX?ZeDewLlSt\x_{b{eybt^qZqXrYrYt]u^x`xawbwcycv`u[uZv[x]}ahmosu~rxmqij~dbu^^P>^P>^P>^P>^P>^P>^P>^P>]O=]O=]O=]O=]O=]O=]O=]O;aR:aS9`Q;^P?]OF^SRbX`e]mwp{w~yywwuxv}y~łņŽȷѾѺѬoT\EF4=/G><<=:>9<4:09/71<694=6NFXN]PeYcVL?9.8.924.1-60513.5/=3D8C5;.3&5--'0./-3155-/24CGX^W]ovDKHN=C[apu?A~noRR?<1.;:HJ:?7@>G7C-9?K^hmxjsco]h^kao^oZf\^OJIH75/155//85D?IDIB@950407265'./;2<+507>D?@433-5,5,4)3)3+3.4000/1/0.-/-0*3*7,:,?11$6+70qnpbx\pXnNiBb9`btKiQr[w`zc}ex`s[oVoVoVpWr[t]v^w`u`v`w_t\s[sYtYv\x^|ch}h{jyjpbi\_uUZnQRfI[M<]O>_Q@_Q@^P?^P?^P?`RAaSB^P?\N=\N=`RAbTCaSB_Q?bT@^R=]P?]RH\QP\RYi_pvo}v~z~}wzqtkosww{́ˋǗĥŴ˱έϨϤФ˝Өf]GzfteI?RLcbJK?@7::::87462;6725/B<<4H@WLOBdWbUXJF:9/6.6050400.2-71>4=17*6)7-0%0'/*1.2040526576=X_puhmjlgh]]ZY[\V[DK9C8B2?,:0?=IS``jgseqbncoao]hRTE@763102..2185C>A;?8;5818284657;4:3:4;6:48321.2+5,7-5*3*2)2+2/110201/.0.1+4+7-@39+7+/%;6XV{le|\rPhGdBd;a9]MkRc=>P+D;%DG-LM4Y_B[jDbxNp[xbxau]rZrZmTnSoTpUsYu[w^v^t[r\t\u[s[sYrXqWy_ybxbs`jY`~QVrHQjC@W2?T0_Q@_Q@_Q@^P?_Q@`RAaSB_Q@^P?_Q@aSBbTCaSB^Q@bXF]SCZPF]UQcY`g_opi{t{w~{~z{rtkokonquv|}։әϩȹĻͲ֫ڦݦݣڤؤСƜջ|dŋv~nVKaZroY[IM=A?::6564<984?95/=4KAG<\Nna`RG;4)/'5.4./*5296<8;48.6*5+6+8/6,3,0,0,1,3/638:>BIPW\^c]c^dahTYOTRWaekogh\^OS3;+5*7-:'6 .'77DP[[ebmdndocn[iQ[DF;8445445111063>:=8;5:4828396978:7959686854302+3*6,8+6+3(1)1+2/1112010.0.1+4+7-=1>18-2)83[Zt|fy^vWoNiFe?a<`A`OgKUy;7L2"=:"E?C=?9:66=::7@;716->4<0F9i]i\ZNA62)4,6.1-43A?GD=73*2'3(2&5+2*/*0*2,6/;5A<,-46CGWY_b[_TZRXGNIPPV^cnsorY^?C.6,52<2?+:'56FKXITOXW`_gcl`jQZBJ775266:9:<765251:4:391918284:7;98888768787733/2*6+7,8+6+3(0(1)2-2122111.1.1+3+7-:.D89/5-0-`alvbxWrOlLkCe:\;^IeSfDIm;3P>+><&:?'FD.GH/P\;XkFf|Rq\t[pVnSkPjNjLkMmQpUqVrYrZu\uZtYqVoTkQjOiNcJaJ[~CTt>Ki6E_1@X-=U*C[0F^3Jb7WJ;ZM>\O@^QB]PA^QB_RCaTE`SD`SD`SDaTEaTE`SD_RC[PEWPNVSU^Zbhdspnxt|x}z|zxvppfg_ccfmrx{Ɋ楡嶴۫Ҫ¢vrudeXjarnruW^HOBF@C=@<<:8;8D?B<:1905*1$I7.+31:9DCGGGIHLNSRXW]Z_]bhmmrY^:A16.5,6*4%3(5J@JFMPWZaW^FN59445499???@<<7663838281818284:7:89898969795734-3*6+8*8+7)3(1(1(2,3122211.1.1+3+7-9-F;903--+gizhsbyTpKjGi>b6X=]QgXdBAgB6\N:HF0BC,KG2FE,KU7Qd?atMkVpYnSlQiLhJiKjLlNnQpUqXrWuYsXrToRkNfKfIeJ`G\DXx>Rp;Ni7Mf6Ne8Of9Me8Pi9Tl?UH9WJ;[N?\O@]PA]PA_RCaTE_RC`SDaTEaTE`SD_RC_RC\RJRNS[Zfjhzrquuxwzy{zxvoode`abempw|ŀ͔ឞ宭輼޹׷жŲy}rylvjpfpj釅}~osaeUXMOFHBB:8;8B>D?;3=4A60$/#H9DHTV`6@3<5[N?\O@^QB`SD`SDaTEaTEaTE`SD`SDbUF_WQ[Xbeg|uvy{yzxyxxuvoogh`abckny|ƂЈҚޣ᯲伾¿ƹ~wvzursmfyoerhd[a\pnuvy}wzorbdUWKIDB>;<7A<:2B:TK=35*9,0A2C6@16.10JN^^WTD?<5:2:1;4;2;2;1908-7,7,(3&@6I@E=<787;:9;JLWZZ]_dafU\AF?>><@CFJLUQZS^V_3;.6.46;cNf\fGEjE9^K;^VBYQ=SI6PF3HD/AK/EV3Qd?]sIfNiPjLiHgFgGhHiKlOnSqVqTsToPlMiJfGbDaEaD^E]~B[w@Xq>Wn>[oA_qF`tF[rBZsBYrAMC3PF6TJ:VL:5F>[R:0;07+6)=/C4B4@1?4676A6C9F9,:+I41(1,;8DDMNWY[`^dZ`LU>A3/6099@@CIDKAJ>G3<17277<6:15-204006544..**.,2.2,<6=5>5=4;69676664646344545432-1)8+9,:*8)5%3%3'3+5152413.2.2+4+7-<14*;43/UWqwdmZhI`Fc8a/\4aBgLdPXk5._G6YK9VN:\P=WI7N@.ID/=G+?P/I\7UkA`yHdKhJhGeDeCfEhIjMkPnSoTpQnMlKfGdEbCbEbEcHbFa}F_xE_vFbvHewLfyK]tD\uB[tAKB4NE7QH:TK=VK>XM@\O@^QBdWFeXGcYIaWG`UJaWMh^Vjdgtsuvvwrtrssunoee^_cdhkorx{Džґܙߜ֡ԩۮ޲޳ܴ۵ܴײүʬŪå|vi_fjdg`[Yd^Yvf^vXQb\KEQN[Zgfus|}xpma\SPGCOJB=F@WO+"1'4(=/D7=.1#6'D8D?983/61<5>6=5>5<5936/5,5*7,;->0RCF7;-:-=3<2715/MJNNQRUVY\VYMRCC4,6,6053241709-73?1<5@8C2>*6(4/8+23838,0),./3240;5=5=7=7<7:787773514142344401,0'8+:,:*9'6%4%4'5)6151413.3,3+4+7+=3.%=844cfox[hObC]Fe:d/\6`FiJ\BGS+"WI7TL9NH5ZP>TJ8G?,HF0J)GV2Rd;\sFd}JfKfIcDcBdCfEhIiNlQmPnOmLjIeFcDbEbEdGaE`Ea}Fb|FczJf{Kh{Lh}M^xB^zA_{BEA7GC9KEWI?\M?_O?`P?`R@`SB`UHcYSha`pjosourwu{yxwppfg``]^abggppzy̓׍蛚砞ޡأڥۥ٥ؤգԤѣΡʢɟė{rn}igib__d\XjZTrWOVMVLPHWOVPYTkezs}urtt^^OMEBZU722*5+6)6(7'8):,3@5<16)3(90?580807.6+8):+?-A0=0A4E;G=D:=32+,%=6FAPKWTZWXUNMC=:*9)8-5..0*2'4'7,?*@*@)@'@&@#=#;#7(6,8,6+2/254;893:4;7;8:888785726354555625.4,5*9+9+9)9'8'8&6&5&6.4.4/4-4+5*5)7+9/7.:5?AnvcqTgHbKj7Z6`=f>dNkJU]$"D,!>:(HE5PM=NI:EB2>B0@G/AH'FK&KR/R]9\kEbvLe~NdKdGbCbAdCgFjKlQmPkMhHfHfGfIeJdIbHdIcJcHcHeIeIe}Hb|D[z=]~>`A>>5@@7GB=KE@QE@UG>[J?]M=aO<`Q=_RA_VJc[Yibiokzrospsqspomgf`a\^[\ddjjsr|{Ѕڌᔎ瘓暖ڛ֜ם؝ל֛՚ҝқΛ˚Șđyrmzkfdd_\f\VkZQqVJTGTITJZSWRXSfbqkxp~xutfeTTZV2-/&7*7'6&7'8(:+;.=0<,<,=,<,:+9+7+6,91807.7,9*:(;&:'7)9->4A7B8@6=3925.>7HCOJQLNIC>6.7&7%7*4-/0*4)8(;+A)B(B%B#A =>:7!5&7*7.72789<:95;6;7;8:88878573647556572606,6*:+:+9):'9'9&8&6&5*3*4+5)5(6(6(6);04+53TYer[mGaHhAe;a3\;bMnMb9@S+%@5(59);<-AA2DA1??.:C/=G->CLP']b=foKivSfyRe}PdMbGaBbAdAgEiHkNlOkKhHgIeGfKeJeKcIeLcJdIdGeHeHeFbB^=_>bA69/;;2@>8E@;LBZK=^N=]O=]SC^WNd]^iempl|spronlifb`\[YZ[][_gjmovx~ӅىݎᐎޓԓѓѓӓҒҒёϔΒȒŒ{~sygtrabh\Ye[Se\NjWHwTERFXP^ZZYYXdcljqlwr}zmi`Y3+1'7*9(8'9%9&:(:,:-<-8)7':*?/>/5(."8.6-6,8,:+:):&8%5(7*8-:/=2@5A6B9;2@7D>E?GAF@?97-6'6'6-4/04,6+:*=&<&>%>#< ;8853!2%4+73:7;9:;995;6;7;8988878573748567662606,5)9*9*9(9&8&8%8%7%5(4(5)5'6&7&7&7*<11*87kr\mPf<[Hk7^?f5\?cVq?Ra#)K/*;7+/7'28'8<*@=+@<(@>)AC'@EX`5t}Uexah~Tb|LaHaD`?bAdAhFjKkNlOmMjIgIfHgLgLeMcKdLcKbGcHfIfHeGaCdCeDhG25+58.<<5B=8G?;LBZQE^VPd^cjgsomqoonhh_^WWSUVX[_`cknqsz|ρևډ܋݌؎ӏϏЎэҍьЌώˍǍŽ~y}p~anzZ\kYTc\Pa^Lc[GnVCQCTK[XYZX\cfllpmyt|wzt|jb<27*:):(:&9%:&9'8*8+=.9*6'9)?.>.7(.!5)4)3(5):+<+=*;*;,;,:.;.;/<0<2=3E;D=A:<5<7@9@;;34'5*5.32/6*6)8(;%:&<&<'=%=%;#;#9#4$3'3-76<:=999695;6;7;8988878574848677673606,5*8+8)8)8'7'8%7%7%5$6'7&9'9&:'9(9*:.2-HJnxViD^<^Af4]9c?dMlPf0=I!B1.11(-6(3=,%HD%V\1p}Nr}nkX`zJ^~F_Da@cBgDkJlMmPmPnNkJhJgIhMhMgOfNeMcKcHdIgIhJfHcEhGiHlK.3(36,992=;7C<:G?;ND>RG=TI>TK?UNE[TRb^fjfvmjmkiha`WVPPPQWY_cejnrtx{сׅچىڊ׊Њ͉Έчш҉҈ыЊɌŒ|x~mZgTUmWPc]N\aJ\_GgZC{SBJCSQRVRY]dfjllurtooi}w|k`?37);)<'<';';'9'7)7*;0:/:-:,;,:+8*6)7,7,7-6,6+9+<->.=-=-PJEXRS`]gfdvhgffaaZYQQMOQSZ^dikosxx}~ׂمڅ؇ֈӆ̅Ʌ̄΃уӅӆьҋ̌‹yvzj{W_QRnVMd^M]dKZaFd]BwWCNDUSTYRY[caggjqpysqi|urkxn[Q:,4$;'<(<(<(;(:)9+7+7,9.5?6?8>770,&*&,+03290<0=0@0@0A0A0A0>.=-:+:+70:0918387977644195:6:7;8988868475:5:687775606.6*7+8*8*9(9(8&7(8&9#<$=%>&@'@)?+<-60HHfqOcHe7[Al/\7b4YQkVgl2:D)+C7:6333515915=-2;#28CDha;Ux͘ǔ}vbfRaG`CcBhGnKrPrSqVpUnNkKgIeGgLhMhOhPfLeKdJeJgJhIhHeDiIlLoO(/$,0(04.351855=86A<9D>9JD=IE=LGDSPR[Zfbbuca}``^^YXTTST[]fiosty{~܁߃ރقׂՃ҂́ɂ́΂҃ՆևԌҊɊ|uqtfn}VX{QLnWIe`K^eJ\dFc`Dt[ESE\UZZU[[a]daflmytrkxpYQZPC95(9*9';'<(<);*9*8*6*2(5*:-<-<+;););*:+C5J>F;<04'6(;-9(9(9(9(9(8*8*8*7*<1?5@6@9A::41,//04395?3?0?/A/@-=/=/:/8-5,3*3)2295:5:686654747495:6:7:8887868476;6;7;8875717.6*8*9*9*9)9)9'8)9'9#:!>#?$@'@)=,;.95U[_nH`>`9`7f3a8_FeOa@JR13?75@:=857=67<726:+3=#8CRZ/Qrŋˏ˓Ž}{fhR`F^AcAiEoKsQsTqVoTmOjJfHdFfKgLhOhOeLcJcJdIfKgJhIeFkKmMpP&-"(/&.2,13/432855;86=;7HC>EC=HECPNRZYe``q^_z\\__[ZYX[\fgpsy|}܁₅僆䃅ႃ܀րӀσ͂ʃ͂τԅ׈؊ՌыŊ~xrnvoddvXSuSHkWGg_IcfJaeFdbDq^D{Q>ZNYTSRVZV]XacfqnmgpiC+;(8%4$A3OBMAA57*8*>0;*;(8'7&7&7'8+8,;/;0905-7/<4<7748:8=9B9C4B/=+<,;.<0:293848473748387:9;78444285;88596:7:8887868476;6;7;8:9683707,8,:*:,;*:*:):*;)8!:!=#>$?'?*<-80<>\fQeIe8]=g.\59D27C42=:*=E'FV+bs@bʍɌÌz{fgQ[{A_@a?hDoKrPrSpUnSmOiIeGcEeJgLhOhOeLdKcHdGfIgHgHdDkKnNqQ(0"'.#)-'*.).0.432874::5><6@@9EDAJKLPRZWWfZ[t]]~XXZY^]demnvx~ك㊍텇偂ׁԂɀȂ̃΅шԊӊЉƉ~ywp{kehe]Wl[Nn\Ij\Hg^Fd_FeaEhaEn`DnQ:TB]P`YYYPUR\[agfXQC=6060:24;26071>8CABE8@2=3@1A,<-;1>6?5<59688:9:7968<><=;;888685747496:7:8:9:::;9;9;7<6;8;9;;:<6917-8,9*9,:*:*:(;+<)9"=&:"39$D2?50+]dVfIa<[1V0X6bChYpGRn34M3-A?7=D=?89?-2J04I3/A9&CJ)Yn>~`xłʍnfRXvCZz@^?dAiEnJnMmOlPkOiJeDbCbCdJfLeMcKfNgOfLeIdFeEiIlKrRrRtT+0#*/$*.(*.)-/-131652883<<5??8AC>HJHOOTTUbYYlZ[v[Z]]cbkjtt~~φꌍ섄~Ё̄ʅɆ̈ϋЋϋ͋ɉ}y{sskokcad]Rg_Lf^Hg^Fi]Fj]Dk^Ek`Em_Cv_F[BYEYMUQQTPYW`TTKE>96160919-8)7'8'7)8*6*5+3,5,0(5*9,>.B0@.=+:)9*.<1=5@5;372398DCHGDD??::9998979696:7:796979899:::;:;8:7;6:6989;9;6907,8+:+;+;+;+=*<,=*9#>(:$4:&;.91<<]gPcAZ8V6Z;_>cHd?M??^:3F;09>17>3E=;Q>>M1/R80UL6biFw\q~Ƃ~xs_ZtFUp>\zC_~Ac@jDmImLlLjNjNgHdCbCbEeKgMgOfNhPhNhLfHfFfFkJmMpPpQtT-1"-0$,/',.*0/.21043055.::1=>2AA8EGBKLMQQXUTbWWj[Yu]]edonzxΌ돏膄~|~}ąȇljˌʌʋƋ|vzptjqmeci_Wc]Nb`JbaFe^Ei\Em[Fo\Eo^Ep]CwbHyX>S,9)6(K>F;A6;05)9,5%;(;':(:)9(8(6)3(9.7-3-3-3.62:6;;;?4908192=3=7A-48)=6+J90E-$Q=-f]C`u|{|yn]uLIa6Oh8\wC`}@cAiElHkJiJhMgLcEcDbEdGfLiOjPiOiPiPiNhKgHgIlLnNtUsVwX34&03'11*11,21.32/44/55,:;-<=.@A3EF:JJEMNOSPXSR^WVe[Zpcamlywċא䓑뒐썌㈆ځ|}~„‰ÌĊ}|wxnqgnmbbj^Wi[Qd\Ia`Ga`Ee^Ej[EnZFq[Gr\Ft]FqY>xS:R,@.=,:*5(UJ=28-A53&;,<,9%9&:':(9(8(6)3(6+3*2,4/:6=:?<==46496;4<2;2:6>;ATWaclkheUQ@=5430647474859697:8:9878899::::9:9:8:69797898<8<5:0:-:+;+<*<*<+=*<*;);&@+8%8&;,*!44`fTcG[@.AC/EG5JK?NNGROOSQSVUTXX]`_mjits}ȋԔⓑ㏍݋ӄŀ}~|~|~zx~tyn{rfkl__j\Ui[QiZLgZIf^Hf^Hi]Hk\Ho[Ir\Hu]Hx\GzW@S/=/9-;1]U>65,@62%7)=,:(:):*;+;,:,9.7.3+1*1.74<:>=::7768;=;?59165;AGLPwxpo`\ID741.74?=9696858575768777778899::::::99898:8:8:::=:=7<2>/>=2><4><6<<5<<3<=/@B0AC-DG/GI3LL;ONARPJSQIXWJZ[O_^]fespnzyŏҏԍЈȂ|zywxvyw{y~}~~}y{tzruksrggl`]j\Sj[OkZMk[Kk[Jl\Kl]Il]Il]Im^Jr^Jw_L~\IbNXFO?I>?850.,.,42505.3-1*3(6':)8%:%;';(9*9+6,9.=-;)6$6$;*>/=09.@8]UJB91?44'0!:(8(8&7&7'8(7)8-7.<4:396=:>==<793587;:9;8:=AOQbdoqgfTQ<70,31:8=:;8;8:7:786766666778878899:::9999889;9:9:;:>:?7<27UUemK[I\J[MZQYVUZQ`QOI6GM:MI5H@,:557=O&Lf6kUv]feglu}no}]R_D=J0:E,BP2P^dyEfCjEkGjGeGbFbHbDfGiLkNjPjPlRlSmRkPlQkMjKlKqNrQ{\{\z[E@1EB4EA7DB:DB/=08.<4QJUNB:A6=//:'<+:(8)6(7*:-;2<4D>B=?=>===<<8<79868665;;JJ\\cdb`<:733/82A>DA<<42;8;89797877788787889899:::9999887:7989;9>9>6<1<.9*;*;)<(;):(;(:'>*6$<*8)2&PJkl\eO]J[HVKRRR[QcPjTKM7CL8JB/G9%B7EH$Up>fW}pri|ZZde|_YeDHS9:E.7B+:C->I0KW8Xg?f{GhDmFmGjHdGaGbHeGkJlOmPjPiOiPkRpUoToTnQnOpOsRvU|]{]z\IC4JC7JE9JD;JF/=09/3+C<\UIAB8E80 =+F6C4A2?1?2B6E=F@A<=::865667799;:?:=7:4?;LHPM?:)"-'4.>8@<>:;9;:==889797879899::;;8989::::::998888796888;8=9=6<2;.9);+;*<);(:';):(?-5#=-7+.'[Wy{X^XcP\KSLNUQ_TgTnVPV9>J+<<C=TQ+kvEgut{bmNt~P^t}UZbASJ>SJ>SJ>SJ>SJXO?YP@ZQA\SE]TF]TDc[EbZDbYIaZNe]Ykbdqgotkwzo{qst|qujwmcmf]gd_ja^h`\d^Z__YZ_XVaYScYOe\Pf\Li\Kj\Jk\Hl]Gl]Gn\Gr^LybSsYIrQ?[JaO^K\KL-8)2 2!9*G?C==97396:9:9886394=6E=A78.2(0%4(;.?2:/<2@6@9>:;:98:;89999999999999994354748596:7:799;=9<9:=;A>B<@7?2:*<,<+;)9'9&8'8&A1;./$.'KJmnkpV[LONPPNTNXP]R`UiTXZ.9M6FSb(}Qoxxr}bgM[mBXeBS]AGP8>D/9=+?C3<@19>1;C39C1AN3Rc?\sChIoKpLkHjJhKfKjMkPmRlQkNiNkNlOpRqQrPtRvRyT|W|[zbnZcPXM@XM@XM@XM@XM@XM@XM@XM@YNAZOBZOB\QD]RE^SF_TG`VFe[HdZGdZHdYLg\Rk_Xoc`qddsfiuhkwjmwjmtgjnabh[\cXW_ZW[YSZUPXTLYSJYTH\UI_VHdYLdZJgZIh\Ij\Hk^Gl_Hl_Hk_LtdSx[LTEZL\LUGSDG8?/8+5(7+9/917/8/8.8.8.7-8-7,7+7+7+7+8+8+8+9+;-;.>/8)0!2 :)=.;.9.4+4*;1E;NCQDOBF?A:<4;3>6=79542868788878696>8B9@5>18+4&4%7(<,?0@3@5A6?7:6867599787979898999999997:8:6;7;7;796989<:<<>?>@H48@049,9=.AB43/9)2!29&>,=.>17,2)3+<1E:L@NC:6522/4196>;=;;;9;6936356796=7@77+8*5&3$3$6';*=-D4C5B7>6:37364867678788888889898:8;9<9<9<9;8:79699<=@?B>>::27,6);-;,;,;*:)9'7&8'{5$z5%8,F=SPVUPPIGMISMXQ^T`X`X_WdQrrGyVm{yZXp;>S#@T*@Q.?L19C/5=-5:-49,8<-@A3_vGiKrPqOoKmKmNjMlOmPmRlOjMjMkMmOpPpNrPwU{Y|XxTtV_JV~FOw?bWJbWJbWJbWJbWJbWJbWJbWJ`UHaVIaVIbWJcXKdYLeZMe[Kf\Jg]Kg]Mh]Ph]Rg[Tg[Vg[Xi]Zi]Zi]Zi]Zh\WfZUeYRdZR^YM[VJWRFSNBQL@QL?TMAUO@WQBYSB[UD]WDbZGe]Jg_LeaM`ePjfTv\NZP_\XUDC:7=7=31>/8(2!27"=)@.>.9,6+5+7,:/;0:16523114387;;>===8:5714246686737/3'5&5%6%6%8':(:)A0B3B6@7<4:4858675878787879999:997:7:7<8;7;696:6<;?=B>@<:36,5(6):+;*;*;)9'7%6$8&=+v4#5'E:OIMHKHQMOKUMYP^S`W`W`XfU^wsrXMa5.A,?2B$:G-19>1;>29:,?@2;>48=2;@38B0?L2Ob=`wHjLsQrPqMoMoPlOnQoQnQmOkNkMmOoQqQrRvV{[~^zZpPgJ[GS{CNv>dYLdYLdYLdYLdYLdYLdYLdYLdYLdYLeZMeZMf[Ng\Og\Og\Og]Mh^Ni_Oj_Rj_Tj_Ui]Vh\Wk_Zj^Yj^Wi]Vi^Ti^Ti^Si`Td]Q`YM[THVOCQL?OJ;OJ;OJ;QL=SN?UPAWSAYVD\YG^[I\^LZdP`bPnWIXQcb]_IL?B=;=6>3=/;*<(?*>,:+7*8+:,9,9+9+8*8*8*8*9*9*9*9*;->1=1:)6#36!=&A-;*:,:-8.8/91<1;39;594645555545247958577999853.0'5'9'9'9'9'9'8%7%:(<,?2@6>5<59596756575859597:7;7:7:7<9=9>9>9>:?:?;A=A;<66.4)6):+:*<*;+:)8'7&6%7&@.u3"|3&F;QJNGMHVOUMXMZO[O]S_V`XhWeyi]lHCT31A##3,;#0<)3>-7@29A3;@39<0:;/9:,>?1:=37<1:?27A/>K1Ob=axIkMtRsQrNqOqRnQpRpPpRnNlNlNoQrTtVvXz\}_|^sUfH[@_KX}HSxCf[Nf[Nf[Nf[Nf[Nf[Nf[Nf[Nf[Ng\Og\Og\Oh]Ph]Pi^Qi^Qh]Pi^Qj_Rk`Uk`Uk`Vk`Vk`Vk`Vj_Ui^Si^Si^Qi^Qj`PkaQg^Nb\K^XIXRCSM>NI:LG8JG7LI9MJ:MMQQ@RTBTUFQWFR^KVZHdQDTMa`^`QTNQBC@;>6=/=->*>)=':)7)8*9+9+9+9+9*8*9*9*9*9*9*9*;->1<0;*9%6 4;"A*A.?/;-6+2)4,;1=969497::;;;<;;<:95779:;===;:52.0&9*=)=)=)<(;':&8$6$8&;->2=4=4;5:694849494:6;6;8=8=:>;A@/3<04=19@5>C8>A5<=/78*89+>?19<26;09>16@.=J0Na'9#9(7)8*:+9+:+:+;+9*:*:*:*:*:*:*;-=0<0<-<*7!49!@*B-A/:<6805-5(<*>*>*?+>*=';&:&6$8&8*9-8/:1=6?8:4:3:3:4;6<6<8>8AB>B9>9<3:07,6)6(8*9*:)<*;+;*:(9)7'6&~5%y3#y4&A3TFWLPDPEYMYNZO[R[R[U[V[WbTjbDU`+4?05?55=67?8@.::)78)=>09<26;09>15?-=J0M`;`wHkMtRtRsOrPrSoQpNqMpLoMnLqQuWy[b~az_qXfM_F]D^IcQZJTyDi^Qi^Qi^Qi^Qi^Qi^Qi^Qi^Qh]Pi^Qi^Qi^Qi^Qi^Qj_Rj_RncXmbWk`Uj_Ti^Sh]Rh]Ri^Qj_Rj`Pj`Nj`Mi_Li_Li`Ji`Jh`Lg_Lf^Kc[H\VEVR@QL=NK;FF5EG5DH8DH8CH9BJ:BJ:BJ:GL=QRCTO@[K;jI9yB4G=XRROFD<994<2>.;(6!:)8(9);+;+;+;+;+:*:*:*:*:*:*:*;-;1:/;-=,8$37>(8#;)=0;17/70;6?=>A@CDDDBA>;65/2+1+60;4<6:28.9,:*=*>*?+@,@,@*>)=);)9'6'5(4*9/?7C;=4<3<3<4<6>8>8?:C=C>C>AQF_TVMYO[S]U\W\WYU^R`X:DM'5@7A#=H1;E33>1-7-0816?5AF;FK>HI:BD0>?):;%78)=>08;15:/9>15?-NK;II8FG8AE6@D5@E8?G9?G9@E8JI?<=4=/=,5$5&6'7(7(8);,=.<-<-<-<-;,;,;,<.2)7/;0:*6#5 69#@.;,6)4*5/<7B?HEDDFGCB:5608/8-5)9/9.9,9,:+;*<*=*=+=)>*?+@,A+A,@,;):'7'6(6*8,:0<2>3>3@5A8B8A9@9@9HAE?A;:57/4,2)3(9,:+9,9+9*:*;,<,8(~8(}8(}8(}8(|7'z5'y2%x-!A5NDMBKAQFTKRH[S[STNSMZVXTVUg[\T4HQ)@L%AL*=H.6A*2=,4?03<0GPBY^OV\IMO9DG-@B&<=$:<*>?1:=39>3:?23=+;H.Ob=byJlNtRrPqMpNrSpRpLqLrNrNsQvT{]aex]iP_H]H`KePgUdT\LUxEj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Tk`Vk_Xk`Vk`Vk`Uk`SkaQkaOkaOkaOkaNkaNkaNkbLkaNkaNi_Li_Lh^Kh^Ke]J^XEVR@PM;JJ;FG8CD6@D5@E8>F8>F8@C7HC7FA4?E0DN4EM/KE&wU9uaaW[XQSCD==A-<.<+:,:*;-:+:-:+:-:+:-;/>6A;A8<05$1124$5):/@8D?HDIFJIBBFCC=<29.>/@1>.@/?/?-?.?,?-A-@+=)<)<*>+?+?+?,>,?-=,:+8+7*7,9/8.09<28=2;@34>,;H.Ob=czKlNtRsQqMqOrSpRsOrMpLqMtRxX|^b{`oTbK\E`KdOdPbPeT\LUxEj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Tk_Xk_Xk`Vk`Vk`Uk`SkaQkaOkaOkaNkaNkaNkaNkaNkaOkaNmaNl`Mj`Nj`Ng_La[HZVDTQ?NK=II:EF8AE6AE6@E6?D7AB4G@4@;,AH0CO2:E$IE&~_Bt_SI]Z^aMRCGGGHC?69,:+:-:+:-9*6*6(8,8*7,8*7,9+8-9/2.405.2)/#.0!3%@3B8G@LGLGIFEBCAC@D@A9;0=/C1E3F2E0E1C1B/B-B.|B-A-;);(:(<)<*<*=)<)?-<,;+8*8+8-:-9,9-:-H=NCRIQJNJSPSRVT\[YVZUk\}Y}]`kyOKX36D"=K-K[?erXdoV[fLMW=CJ/>D'=A":=#8:(;<.7:08=2,HI2GI-D@$eS6gN`M>4NK]_Y]PTKNIGF@;1:.7,7,9.:0;1;1?5?5>5>5?6?6?6?7@E=H?LAOESIOHMHHFFBB?@=A>EAD>@6=/>.D0G2J5G1F2D2C0B.{A-xB-z@,<*:*:*;+;+<,;*:*:*9(7(7)8+:.;.;.:-9+:,;-:/:/909/6-6,7*7+8*9*:,K@G;H=OETLSMPMTQPPRP\Y_Yh_}koetVYi>CR*>P)O`&79':;-69/8=24@6D:G=H>JAJAJBJBKCKCLDKFSSSUSSRPSMSMTMUOLIHGECBAAABADCFCIEE??7>2@1C0F2I3E2D2C1@/@.|@/z@.{?.~<-:-:-:-<,<,<,;,9)8)8*8)8*:,:-;,;,:,9,:-9/8.8.8.7-8,8+8,9+;+:*<,:,:-9,8+~7*~7,}8,{8,z7-z9.y9.w7,r5+p5*r7,u8,HHcwMi|UWjEK\9?M-9E(;E+=D,;A,9=+89*:;-58.7<1=B56@.;H.K^9^uFiKsQsQsOrPsTpRpPpPsSz\~`|_rUiNY@[B_HcLeNeNdOdPbRYzJRsCj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_RlaTlaTlaTlaTlaTlaTlaTlaVmaZma\maZmbXmbWmbUmcSmcQmcQmcQmcSmbUmbWmbXmbXmbXpcVobSlbRmcSmcSlbRh_Qe\N_VHYSDSL@NIG?GBG@HDJCIEJDKGKEKHJHGIFJGIGHHEGEGCECABACBBBCCCAAA?A@JHD>=6>3A2A/C/E2B1A0@0>.=/=.~=0~=0<0<0<2<0<0=.<0=.<.<,;,:*9+8)7*5(:+9+:,;.;/<1<4>39.8-:-:,;+<*<);*:+9,7*6)|5*|5*|5*{6*x5+y8-x8-t7+q4*p5*r9.w<1LAK=J=L>QDUIWNVOMJSPUS[Ve]|]QfVFa^FFN.=O(>P'I]1^rDhPbyJUl?L`6?R-5F%7D)/6;.7;,:;-58.7<1=B56@.9F,H[6ZqBeGqOrPrNrPsTpSoQrTvX{]|_uXiN`EX?]DcLeNdMcLcNfP`OXyIQrBj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_RlaTlaTlaTlaTlaTlaTlaTlaVmaZma\maZmbXmbWmbUmcSmcSmcSmcSmbUmbUmbXmaZma\maZpbXnaTlaTmbUncVmbUj_Rg^PcZL_VHYPBRL=OI:KF7IC4AC/5I,CAD@CBEAEDDD@E@ECGGIIIJJHJFI@DAEAFAFAB??=;<;FE><83<2@3@.?-A0=.=/;0:/90:0;3<3<2~=2~<4~=2~=2~=0~=2}QAUGWJUKRJNJSOSP[We[o[KPJ7EJ2BN/J[7VhA_sIfzNczKUl=E^.@V,6I$0A 6C)56:28;/;<.58.8=2>C66@.7D*EX3Ul=a}CnLpNrNrPtUqTqTtWx[y\uZlQbG[@]D_FaHcJdKdKbKcM_NWxHPqAj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_RlaTlaTlaTlaTlaTlaTlaTlaVmbXmaZmbXmbWmbUmbUmcSmcSmcSmcSmbUmbWmbXmaZmaZoaZoaWnaTnaTnaTncVmbUk`Sh_Qe\NaXJ[RDVM?PJ9MG6IC2CD.9I+@F'[B-QGWW:@,4GNAD?=?;JF\ZdeVZCGGGDAA>C?GCHAC=>8C>B>C?D@DCEDEDEE?D@EAFDHFHEGAD>BAE@D=B=A>?@@CAEDBA:66.<2@3?0>.@1<.;-;/9.9090:1<2:1~;1}<1}<1}C67?.7B)DU2Th<`zDnNqNqOrRrTqTtWw\x]v[oTfK^EZAcJ`G^EaHdKeLaJ_I_NWxHPqAj_Rj_Rj_Rk`Sk`SlaTlaTlaTk`Sk`Sk`Sk`Sk`Sk`Sk`Sk`Sn`Vn`Vn`VnaTnaTnaTnaTnaTobUobUobUobUoaWoaWoaWoaWm\Qp_RtcXsdXoaWk`Ui`ThaUg`TgaRc]N[UDVP=SN9OG3FA*JG-H?%bI4gWvnjfXVNPBDCDEGGIIJILJLHL@DACCBGDHAF/?/?.@/@.>/<.;.:.8.:/<-=-=-<,<.;-;-;-};,};,};,};,}:.}:.}:.}:.|9/{:/|9/|9/~8/~8/8/8/8/8/8/~7.~7.|7+|6-z7-y7/x8/w7.w7.v6-s6,r5+r4,m1(r6-m4*l3)o6,l5*p9.I>SIRIQFPGOGPIPJQKTLUJ[MbPn_GXU9LW6M`$39$6:(;?0AB6A?7==449.29.3:/6;08=0:@/:C-:F)Q`<`rGmSrVqRrSrTrTtYddqVcH_D_F^E`GbIdKfMeLcJ`G^H^MTuEKlSK5QJ1I=&R>*lP>XHNCD>C@WWTUQROPNMMMLKJKQSDF;;<:C?G>C8=3B8A8B:B=CACCCCBEBHBHBGDHCHEIEGEGDFCEBBAAAA@A@AC@E>D7>3;.;,;,=,>,B/}A.~?/~=.;.:.9,:-<,<,;+;+<,;+;+;+:,:,};,};,}:.}:.}:.}:.{91{91{91{91{91{91|91|91|91|91~81}70}70}70|6/z7/x80v80t8/s7.r6-r6-o6,o6,j1'p7-l5*k4)n7,k4)n8-~H=RHRKQIOIOKPLQKSLOFTG[J{eNriOhlLeqPfyT^tNXnHPf@M`;L_;K\;HV8DO53<=13:12;14;25<18=0:@/)NB/T@0V8)^7+l=4o71v82~:6@;ICPKWQZS_XSMFB@>AACBA?>9A:C;G=H?FBECBCAEBGCHCGDGDHEHEFEFEEEEDBCACABABAD?F?F:C9?3;-9*9)<+A/A.~?/~=.<.;.:,;-<,;+<+<+;+;+;+;+:,:,}:.}:.}:.}:.}:.}:.{91{91{91{91{91z80z80z80|:2|:2|91|91{80{80{80z80u7/t8/s7.s7.p7-o6,n5+n5+i2'n7,l5*j3(l6+i3(m7,}G0<=/8;/5<34=35<35<18=0:?0;A.:D*LW6ZiAe|MlOmRqRtVsVz_w`nWcL\E\E\EZC_HaJbKdMcLaJ_H]G[}IPqAGh8j_Rj_Rj_Rk`Sk`SlaTlaTlaTk`Sk`Sk`Sk`Sk`Sk`Sk`Sk`SnaTnaTnaTnaTnaTnaTnaTnaTobUobUobUobUobUobUobUobUsdXpaUn_Sl^TlaWmc[le\ke^ke^ysjxs~zhacOOT?EG3GD2HB1G=-L<,WB4Q8+S6*W3*Y4*]5,b90f=2k>2OBUIVNLJAEG=I?GBECBCACBGCHDGDGDGEGEEGFFEEDEAEAD@D@EAE?D=FG3;A09=-9=.9=.8<-6;.6=45=65<55<38=29>/:@-9B*IS5Ve?axIjMmRsTvXwZ{br[eN\EZC\E\EZC_H`IaJbKaJ`I^G^IX{HNo?Ef6i`Ri`Ri`RjaSjaSkbTkbTkbTjaSjaSjaSjaSjaSjaSjaSk`SnaTnaTnaTnaTnaTnaTnaTnaTobUobUobUobUobUobUobUobUsfYug]tf\ncYkaYld^tni{vq}x{{ldfTPR@HJ8FH6CE3CE3FH6LL=KH:HC6D=1B9-B7,A6+D5)L9)iF7PGNJDHBHBHADBBDAG@HAG@E@A@@BBGCHDGDGEGEGEEEDFEFDFAE@F@F@F@F?A;C:E>C:>3:.;-=.?/@.>/~=.<.;.:,;-;,<,;+;+;+:*:,:,};,};,}:.}:.|;.|;.|;0|;0{91z:2z:2y91y91x80x80w7/z:2z:2y91y91z81x80y70x80s70p7/p7/o6.n5-m4,l4,l4,i1)m7.j4+h2)j4+e2(i6,|E:NFMGOIRKTNWOYQ[P{ZLu\NjZI]UAXYCX_GMZ@=M2;G08D/5A,6@,9C/>H4CL8EN:BK7?G6/8=.6;,3;-4<54<65;65<57<18=09?.8A)FP2Ra;_vGiLnSuVxZx[x_mV_HY~BZC]F]F\E_H`IaJaJ`I_H^G]HX{HMpACf7i`Ri`Ri`RjaSjaSkbTkbTkbTjaSjaSjaSjaSjaSjaSjaSjaSlaTnaTnaTnaTnaTnaTnaTnaTobUobUobUobUobUobUobUobUn`VodZqf\mc[kc]smh}ĿsgbUQQ@GH9?E4;C2;E39D39D39C2:B4=B5@C9DD;FE::7)K<.d?6D@MPVZPUCHHIGGIEICGCEAB>A@CGCHDGDGDFDFDDEDEDFDFAF@E?E?G@F>?:A9C=D/~=.=.<.;,<-;+;+;+;+:*:*:,~9+};,};,}:.}:.|;.|;.|;0|;0z:2z:2y91y91x80w7/w7/u7/x80v80x80u7/u7/u7/t6.t6.p7/p7/o6.n5-m4,l4,k3+j4+h2)l6-i3*e2(g4*d1'h5+zC8LFLFOISKVNWMYN}[Pt[Mk[K`XEVSAOT?IR>>J54@+2<+2:*08(08(2:*5=-9A1F5;E3:B26@/4>-2;-2:42:63963:36:27H7=E5;C5;>6;;4:84;61@<4C<1L80];3LH``ceY[QSMPKLIKHFGCF@EADGCHDGCFCFCECCDCEDDCE@F@E?E?G@F>A.>/~=.=.<.<,=-;+;+;+:*:,:,~9+|:+}:.}:.|;0|;0|;0|;0|;0|;0z:2x:2w91w91v80u7/t6.s7.u7/t8/t6.s7.s7.r6-r6-p7-o6.n6.m5-m5-l4,j4+i3*i3*g1(j7-g4*d1'g4*b0&f4*yB7LFLFOISKWMYL{ZLs\Ml^M]WFQQ>JNH7=H7H,KZ6ZqDhMpWw\vYrUgP]HTx?VzAZ~EZ~EZ~E\G^I^I^I^I]H]H\G\KUvHJjA@`7i`Ri`Ri`RjaSjaSkbTkbTkbTjaSjaSjaSjaSjaSjaSjaSjaSlaTlaTlaTlaTlaTlaTlaTlaTmbUmbUmbUmbUmbUmbUmbUlcWqg_nf`mgbupk«~tb_[GLM7CH3BH3BH5AG6CD8B@8C<:D98A97?86C=8B82B2*X<7XSljpn[]VWRTNOJLIGHEGDEGDHEGCFCFBEBCCCDDDCD@D?E?E?F?F>C?A;A=D>E=B9:05)=/>.>/~=.=.=.<,=-;+;+;+:*:,~9+|:+|:+}:.}:.|;0|;0|;0|;0|;0{;2x:2x:2w91v80u7/t8/s7.r6-s7.q8.p7-p7-p7-n7,n7,n7,n6.n6.m5-k5,j4+j4+i3*g4*e2(j7-g4*c1'e3)b0&e3)yA9LFMHPITLXL|YLsZLj\KZTCIK9>D1=E48B1/9(.7)5=/46157257346124/15-07.18-7@4;D6>I:?J9=H77E32A-0>.,6/-51/520614826;08=.7@,;E+IW5XoBgNoWv]tYoT`JW{BRv=VzAZ~EX|CX|C[F^I^I]H]H]H\G\G]KSsJHhB@]8icTicTicTicTicTicTicTicTicTicTicTicTicTicTicTicTkbTkbTkbTlcUlcUmdVmdVmdVmdVmdVmdVmdVmdVmdVmdVmdXhb[hc^wroɶǵjcbGFG.EH0DF0GD2HC6G;4D51F33J9:E::C<;A:8B:6XLGqj㯪ӋpoYYOQNOLLKLKJFIILDF<>>AGJEF;<@AAAB?C?C?B=B/>0>/=.~<-<,<,:,:,:,~9+|:+{9*{8,{8,{:/{:/{:/{:/z:1z:1z:1z:1z<4x<5w;4v:3u92q80p7/p7/o6.n6.n6.n6.n6.m7.m7.m7.i3,m70p:3o92k5.f2+f2+g3,d0)i7/d2*\-$_0'^/&a2)t>5NIOJQIQIXLx^PhXHTN=DF4?E49C16@/2=.2;-2;/3:/684874765462351260/6/.5,/8,3<.7B3;F7:H68F44C/1?/*4,+3/,2/-3.2605:/8=07@,5>&DR2VlDhRr^w`qXjSZCWyCSu?Su?VxBY{EZ|FY{E]IaMaM]I[}G^J_K]LUrKGdA3J:4M86L;:A88E?@MHFZSRtlhɵﱫр}a_VVSTKNCGEFFFHHKKEG=?<=AB?@?@A?B?C?B>B=A:A>@;@/>0>/=.~<-<,<,:,:,:,~9+|:+{9*{8,{8,{:/{:/{:/{:/z:1{;2{;2y<2x<5w;4v:3s:2r91p7/o6.n6.n6.m7.m7.k8.k8.k8.k8.k8.j6/n81o92m92k70h4-f2+e3+c1)c4+^/&].%a2)].%_0'p>6IDPKWQWNtUJfQCSI9A>.;A07A/5@/3>/2=03<04;06:2795876876573462260/6//6-/8,2;/5@19D59G58F45E24B2.80-5/-3.,3,04,27,6;.6>-6?)DR4VlFhVsawcoZfQX|CVxBSu?Su?UwAXzDXzDXzDZ|F^J^J[}GZ|F]I]I]|LSnLG^A:Q4icTicTicTicTicTicTicTicTicTicTicTicTicTicTicTicTkbTkbTkbTlcUlcUmdVmdVmdVmdVmdVmdVmdVmdVneWneWleZfd`y{y׵àm`gFQW8EF-EC.JD5MD8L@9I>;?<:NMLhabvwðꬤgdCFCKPWUUMJEADAFEFFDCDC>>??@>A>C?B>B>A;@<@:A=E?D=A:<3:/<0=/>0>/~=.}<-=,=,};,};,}:.|9-|9-{8,z9.z9.|;0|;0{;2{;2{;2{;2y<2y<2v:3u92r91q80p7/n6.m5-l6-m7.k8.k8.j8.j8.j8.j8.j8.m92l81l81k91k91i7/f4,a2)b3*`1(\-$^1'b5+[.$^1'sD;OJUOWPtRHaI>QB6A;,56'4:)1;*1<-2=.3<03<04;06:279579768457357337107007./8,1:.3>/7B37E58F48F48F64>42:3.5.+2)-1)/4)38+3;*5>(DQ6XmKk[vgwgk[^LUyBTvBQs?Qs?SuAUwCVxDVxDWyEZ|H\~JZ|HZ|H\~J[}IYwJPgJBWA4I3icTicTicTicTicTicTicTicTicTicTicTicTicTicTicTicTkbTkbTkbTlcUlcUmdVmdVmdVmdVmdVmdVneWneWneWneWlg[kjgٵfflMNQ7GH1II6LI;IC:B@8HJEdcb描_h>=?>@=B>B>B>B>CF@F>A:=4<1<0=/>0>/~=.}<-=,=,};,};,}:.|9-|9-{8,z9.z9.}<1}<1|<3{;2{;2{;2y<2y;3t81s70q80p7/n6.l6-k5,i6,j7-i7-i7-g8-g8-f9-f9-g8-m;3k70h6.i7/j80j80d5,`1(d5,`3)\/%`3)a4*X+!`3)zNF[UyVQkMFZB9L;2B9-=:,8<-08(0:)2;-3<.4=14;05:/59179468468459348248018/18//8,09-1<-3>/6A27E5Pr>Qs?Rt@SuASuATvBXzFZ|HY{G[}I\~JY{GVrHI^D=MD>D>C<@:B9E?F?D<@8>4=2=0>/>0>/~=.}<-~>,~>,};,}:.}:.|9-{:-z9,z9.z9.|<3|<3|<3{;2y;3x:2x:2x:2r6/p61o50o50m5/k5.k5.i5.j6/i7/g8/f9/f9/e9/e9/f9/i93h60f4.g5/g71g71d4.a1+a3,a3,^0)]1)]1)V*"b6.|TLtYQcMFP>7E5-?5+=8,;:-9<02:,3;-4<.5=/5=/6;.49,47-59159348248048029018/18-/8,/8,09-1:.4=/7B3;D6=F8Np=Po=Po=Po=Po=Po=Rq?Rq?VuCZyG\{I\{I^}K^}KYxFQmEDT@6C8(5*hcThcThcThcThcThcThcThcThcThcThcThcThcThcThcThcTicTicTicTjdUjdUkeVkeVkeVkeVkeVlfWlfWmgXnhYnhYlh^lmn{ֺĦsfgPNPCE=B9>5<2=2=0>/>0>/~=.}<-~>,~>,}:.}:.}:.|9-{:-z9,z9.z9.|<3{;2{;2z:1x:2w91v80u90r61o50o50n60l6/l6/i5.h6.h6.f7.e8.d8.d8.b9.b9.d8.g71h60g5/g5/f60g71f60d6/`2+d6/^2*\0(`4,a5-i=5vRIZF>G=5>4,;4+=7.:9.67+36*5:-4<.6;.5:-5:-49,47+36*38-18-37/18-18/18-18-18-/8,/8,/8,09-1:,4=/7@28A3;D69C27?/4<.27*05(/4%-5%/7&HT?dx\unsmf`QwLAh:Jk;Ml:OnF>F=F=F=ED;?5<2<1=2=0>/>0>/~=.}<-~>,~>,}:.}:.}:.|9-{:/z9.y9.y9.{;2{;2x;1w:0v80u7/u7/s7.r61o50n60n60m70l6/j6/i7/h6.f7.e8.d8.d8.b9.b9.b9.e70g71h82h82g71h82i;4k=6f81i=5b6.a5-mD;vMDsJAmMED9/75-64,:80::166-14*25+58,49,47+36*37(37(37(27*/7)/8*07,/8*/8,/8*08*08*19+08*07,/6+07,18-3:/4<.8B19C1:B19A18=.49*05&,4$19(IU@bv\mgecWzUHnF>d9Gh:Kj:Ml0>1?0>/=.~<-<.<.}:.}:.}:.|9-{:/z9.y9.y9.z:1z:1w:0v9/u8.t7-t6.r6-o71n81m70m70k70k70j80i7/f7.f7.e8.e8.d8.d8.b9.d8.e5/j82m;5l:4i93i:1l?5oC9jA6mEMk>Jh;Ig:KiSqDVtGYwJZxK\zOYwLMk@C[:3=3*/1!&(idWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidUheUidWjeYkdYleZleYlfUeaMieQnlWmm\gf[ffasrqӷ}qt\^dOakYr}nקaXF88/3:159129048029037/18/26.07,26./6+16+.5*05*.5*.5*.5*.5*.5*.5*.5*.5*.5*/6+.5*.5*-4)-4).5*.5*/6+3:/5<17@49B6:C78A36@/4>-4@-EQJf>Ie;Ie;Kg=Nj@TpFXtL[wO\wQ\wSVqMGb@:O7(0*(*.&(,idWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidWheUheUhdXjeYjd[leZleYlfUhdPjhRmkVjlZeh^jmk}бyjqXXaK_kXsqøvLBOAL?MAJ?D:;5=7C:G6K6M9J6G6D1D5F6C6B7A6?4=3;2:0:0}:0{;0z:1z:/y90x8-u8.u8,t7-u8,t9.t9,t9.r7*n5*l5*j80h82h82g71g71g71f60f60c3-c3-g5/h60j82j82j82k93j61m62l81l:2l:0k>2k@1jC3hG7lP>hQBueTuftsLL=5:/29029029018/18/18/07.07.07.07./6-/6-.5,.5,.5,.5*.5*.5*.5*.5*.5*.5*.5*/6+.5*-4)-4)-4)-4).5*/6-0702923<26?58A58A57B36A07C0DP=O^HQ`HHW?@P5AQ6DV9JbAId@JeAJe?Hc=Gc;Hd5I5(/.)+1&(.idWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidWheUheUidXjeYjd[kfZleYlfUlhTkiSmkVjlZilbuxvʮ|tybjp]s{kՠN=SCL5D6H9K5}=4~<4}=4y<2x=2w;2w<1t;1s:/s:0s:/q:/q:.q:/q:.o9.n9,l6+k5*k70j82j82j82i71i71i71h60e5/e5/e5/f60g71h82j:4j:4k;5j:4i:1i<2l?3kB5jC3gE3gI8mUBkXHvjW~n|~nEF749.18/18/18/07.07.07./6-07.07.07./6-/6-.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,-4+,3*,3*-4+.5,.5,-4-.5.07.2904=16?38A39C29E2@L9DS=BQ9:I17G,=M2CU8I_AJbALdCKc@Ia>G`:F_9G`:RkEXpM]uT^vWZqTPgL=T9.@/(/.)+1')/idWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidWheUheUidXjeYjd[kfZleYkgUmiUljTklVln\orh}ٽǮIJqP@O@WKL@B:E=A5F:I>G<@8<3>5B;@;A;A9}A:y@8x@8w?7w?7u>3u>3u>3t=2s=2r<1r<1q;0n;/n;/n;/m:.k:-j9,j9,i7-l81n73m62k72k72i71i71i71j:4i93g71e70e70e70g92g92k?7g>5f=2g>3iB4iE6gF4dF3cI7iUAj\JtjWp{qq`9=-38-18/07.07.07./6-/6-/6-07.07.07./6-/6-.5,.5,.5,-4+-4+-4+-4+-4+-4+-4+-4+-4+-4+,3*,3*,3*,3*-4+-4+,3,,3,-4+.5,09-3<06?17@27B1;G4;J67F01@*1@(7F.=N3CYJ`BJbAJ`@G_E=>:;6;7?:>;?;A<}A4p>4p>4p>4o=3m>3l=2k<1j;0i<0h;/h;/i:/n81o73o73m62m62k72i71i71k;5j:4g92e91e91e91d;2d<3fA7dA6dC5eD6eG6eI7bI4`H3_K7eV@kaNrmXps[_M4:)18-18/07.07.07./6-/6-/6-07.07.07./6-/6-.5,.5,.5,-4--4--4--4--4--4--4--4-,3,,3,+2++2++2++2+,3,,3,.5.-4-,3*,3*-4)07,1:,3<.2=,5A.6B/5A,/>(/>(3B,6G.J_?J`@ShHZpRbvZ`u[XkTI^H5H4%4&%,+&(,$&*idWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidWheUheUidXjeYjd[kfZkfYkgUjhSjkTlnXnr`rwlικƷøͧkYZHVFKF>A==9;8;8=I?H?D=>9;6=8?9?9A9xB9rE9oF9oF;o@7q?7q?7q?7q?7q?7o@7o@7pC9oB8m@6k>4i=3j>4j>4m>5o84q74o73o73n73k72j82h82d80c:1c;2c>4c@5cA6cA6`C6[D5`M=hVCiWDdR=^O9\O6]R8^U=]X?okVuv_|lclV3=)7A/3:/29029029018/18/18/07.07.07.07./6-/6-.5,.5,.5.,2-,2-,2/,2-,2/,2-,2/,2-+1.+1,*0-)/*)/,*0++1.+1,/3-/3-.2,.2*-4+-4).5*.7)-6(09+2=.6A07B17C05@/2A-1@,3C/9H41"/&'.-&+-$)+idWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidUidUidXjeYjd[kfZkfYjgUomXknVhmVflYdmar{wحpXWCR@P>O@PAK?C;=4>6?5@7A6zC7uD6qF7qF7o@7q?7r>7q?7q?7q?7q?7o@7rC:pC9nA7l?5k>4j>4l?5n?6o84p84o84l83l83h82g92f:2e<3c>4c@5aB6`C6\B4[A3XA2UG5\R?g^Hj^IcW@[R:[R8]V;ZUIX@Q`JZiU`o[[iWP^NANA.;0",$*2.(.-&+-idWidWidWidWidWidWidWidWjeXjeXjeXjeXjeXjeXjeXjeXjeVjeVjeYkfZke\lg[lgZkhVqoZknVjoXjs_hsfnzuлhcJO8U>ZER@J9M>/>1~=.x=.t?.qC2sE6q>4q=6t>7r>7t@9t@9s?8q?7sA9pA8pA8pA8o@7m@6n?6n?6k93l83l:4k;5k;5h<4f=4b=3b?4]>2dG:bH:T=.M9)L8(@0XPI2.8$2>+4;04;23:13:13:129029029029029029018/07.07.07./6/061063/52/52.41.41.41.41+1.+1.+1.+1.+1.+1.*0-*0+04//3-/3-.2,/3-/3+.5,.5,+2),5)/8.4=18A5*0?+7F0@O9GV@M\HTcO[iWWeUJWJ:G<-:/)3+(0,'/+&-,idWidWidWidWidWidWidWidWjeXjeXjeXjeXjeXjeXjeXjeXjeVjeVjeYkfZke\lg[lgZkhVnoYjmUipXjs_juho}wౖu[[BZAZBVBR?G4G5E3E2{C1wC/qA.o>.tA7r>7s?8t@9s?8o=5p>6sA9q?7o@7o@7m@6n?6l?5m>5l?5j<5k=6l>7k?7i@7fA7dA6aB6dG:ZA3^G8]I9M=,E7%F8&?5"MK5HK3EF-ED+NM2]Z@c`Da`CZY>egKtw_sx`Y_J:C-0:&8B06=25<35<35<34;24;24;24;24;24;24;23:13:1290290292172172174061063061/52/50-30-3.,2/,2-+1.+1,*0-*0+,0*,0*+/)+/)+/),0*+2),3*.5,-4+-6,/8.3<28A5=G=@K>9G78F65C12@.1@,4C/:I3>M7JYEQ`LWeUUcSJWL;H=/<3)6-*2,)1-(0,idWidWidWidWidWidWidWidWjeXjeXjeXjeXjeXjeXjeXjeXjeVjeVkdYleZke\lg[khZkhVlmWhmUgpXjt`huhp~x⿦iYAQ:\E]HS>~G1t?(r>(rA*tD/vF3q@3n<2o=3tB8sA7n?4pA6wH=m>3l?3l?3k@3k>2j?2k>2j>4g?6fA7fA7fC8eC8bC7`C6]D6bK37>57>57>56=46=46=45<37>57>56=46=46=45<35<35<34;43:33943:3283292283181/50/6/.4/-4-,2-+2+*0+*1**.(+-(+-(+-(*.(+/),0*-1+070.5.+2++2+-5.4=3;CK>=K;;I77E33B.1@,2A+4C-CR>JYEP^NP^NGTI;H=1>5,90,4.,4.+3-hcVhcVidWidWidWidWjeXjeXjeXjeXjeXjeXjeXjeXjeXjeXjeVjeVkdYleZke\lg[khZiiVkmWhmUgpXht_gtgl}vֿӼyyS=tJ3tI0uJ3yN7|Q:xM6mA-d8&zM?rE9oD7qF9oD7gC+@G.@F+57>56=46=46=48?67>57>57>57>57>57>57>56=66=66=65<55<55<54;44;4292292070/6/.5.,3,+2++2+-/*-/*,.),.),0*-1+.2,.2,/6/-4-*1**1*+3-0816>89C;>K>?M;?M;(;J6AP5-:1,6/-5/,4.hcVhcVhcVidWidWjeXjeXjeXjeXjeXjeXjeXjeXjeXjeXjeXkeVkeVkdYleZke\lg[khZiiVkmWhoVhqYgs^crdizsվлѿӽεvawWCjJ6kI6qM;tP>kG6gC2fB1iE4mI8mK9nL:nL:dB0cB0cB0cB0cB0cB0aC0`D2]F5[G7[G7ZG7XH7VH6TH5QG4PH4LH3fdN}~gqr[VYAJM5GL4=D+DA/@@-?A/:>.:?48?68?67>57>56=46=46=47>57>57>57>57>57>57>57>58?68?68?67>57>57>56=46=45<34;23:129018//6-.5,.5,/1,/1,.0,-/+-/+.0,.2-.2--1,-1,+1,+1,-30/501952<4:G:M?7F80?3,9.,6.+5-*4,gbUgbUhcVidWidWjeXkfYkfYjeXjeXjeXjeXjeXjeXjeXjeXkeVkeVkdYleZke\lg[khZiiVkmWhoVhqYgs^apbfxqѻʸ˻ҾҼrsaz^J{_JsUBaE0W;'Y=([?+W>(_F1_F0_F1^G0_G2_H1_G2\I2[L8ZN;ZN;WM:WM:UM9QL7PL7NL6PQ:ilT{hlqYRY@EL3=G-57>57>57>56=46=47>57>57>57>58?68?69@79@79@79@78?68?68?67>57>57>56=45<34;23:129048013.02-/1-.0,-/+-/+,0+,0+,0+-1,,2/-30.41.41-51+5.2?26F3O8;L58I27H14E.7H1;K7=M:;K:6E70?3+:.)6-+5-*4,gbUgbUhcVidWidWjeXkfYkfYjeXjeXjeXjeXjeXjeXjeXjeXkeVkeVkdYleZke\lg[khZiiVjlVgnUgrYet^`rcgyrվ̷IJŵʽ˴vt^GeP6bL5[H.]J2\K0\K2]L1]L3^M2^M4[N5XO9WO;WO;UP;TO:RN9PN8MN7MP8OT<_fMeoUT^DDO5@K1;F,?I/?I/DK0HN3IL0GI-PO2ZW;qlSjeLa\G[VAYSBUQ?NI:CC457>57>58?68?69@79@79@7:A6:A6:A69@59@58?48?48?49@59@58?48?47>37>36=28<468365254132//1-.0,,0+,0+-0.-0.,2/-30-32-32,21*2,*9+.A-5H3:M8kjOhcJb]F^YB_ZE`[FYUAQO:JJ7AB4?B6?B6=B5=B7=B78:<879457226004./3-/3./20-30,2-+3-*2+*2++4*(6(>!1F,7L2:O7:M6:M6:M67J38K4:M6;N7;N95I5/C1+=.+8-,6.,4-\eM]fN^gQ_hRciTejUfkVikWfhVggVheUheUidUjeVkeVkfWkfWkhXlgZkg[kg]jfZifXegUejUclTdoXap\crhrӾϼ¸¿ɏoUN5VM3SK/RJ,VN0VN.UO.UO.SO0SO0RP2RP2QM1RM4RO5QP7NO6LO5HM5FM4IP5GN3BJ,>F&?G'CK*FM,GK)RT5SS4KO/FM,OW7]eGadHYZA\YA^YBaYCaZA]X?XW:RV7PS7HF0GD2DA/@@/??0>?1?@2=@4:?48?48?48A58A58C48C48C49B49A39A38@28@29A39A3:B4:B4:B49A3:B4;C5E:9A:9A:8A77@46=24;0290181.4/.60-7/,9,-<(/@'5G(6M(:V,9W,:U1:T5;R9EY=CX>>U<3I3)=),6,+3,+2+ZgL[hM\iO]jP`kRbkSflWflWgiUgiUifVifVjeVkfWlfWlgXlhVkhXkhZkg[jf\jfZgfYegUfkVdmUeo[dr`ixny˸˾´¶ˊqQL5RN2QJ/QJ.UO0UO.SP.SP.RP0QQ0QQ2QQ2PM1QN2QN4OQ5NO6JP5HM5FM4IP5FN0CK-@H'BI(FM*KP+MP,QQ.SS0V[6[d@ZeCT_>QY;SV48?48?48A57B38C46D28C29B49A39A38@28@29A39A3:B4:B4:B4:B4:B4;C576>84>73=5/?.2C*8M+AY0Ga1NpEb?BY@B3;>48?49@58A57B37B36D28C29B4:B49A39A39A39A3:B4:B4:B4:B4:B4:B4;C5F8=F:?IA=JA?I?>I:>G9=F8=D9XrB]KZ}JWuJLiFCZA9O:5G63F2;N9DX>MaEQgIRhKLcF>W>5J4/9//6/-4-XhLYiM\iO^kQalScnUgmXhnYkmYkmYkkZliYmhYmhYnhYniZliWkhXjgYjfZie[ieYgfYfhVdiT_hP`jVdr`n}s}ҿ˹ƴ¾ķȺˉpOJ3QL3SL1SL0TN/UO0TP1TP1SQ1QQ0PP1OO0OL0OL0PM3MO3MN5JP5JO7IP7KR7HP2HP2JR1MT3OV3W\7^cF8>G;=G?;H?>H>>I:>G9=F8=D99C<6@83C28I0CX6Qi@[uEY{GVyFSqFHeB=T;2H3.@/,?+5H3?S9K_CPfHRhKMdG>W>5J40:0070-4-XhLYiM\iO^kQalScnUhnYioZmo[lnZll[mjZmhYmhYniZniZliWkhXjgYieYie[ieYhgZgiWejU`iQ`jVdr`n}szɷIJ¾˾ŷ΋rQL5SN5TM2UN2TN/UO0UQ2UQ2TR4QQ2OO0NN/OL0OL0OL2LN2MN5KQ6KP8KR9MT9JR4KS5PX7SZ9T[8^c>fnFbr}wom~ZXdEMP6NM4OJ5OG3NI4OL4OP7QR9UR:UP9RN:PL8LI9HH7FE8BF7F8>G;=G?;H?=G==H9=F89P7-C.*<+*=)0C.;O5G[?NdFQgJLcF>W>4I3,6,+2+'.' \ No newline at end of file +0/-0/-10.21/51.51.62/62/83/83/:3-:3-:3-:3-:3-:3-:2/91.91.80-80-91.91.:2/80-80-80-80-80-80-80-80-6.+6.+6.+5-*5-*4,)4,)4,)4,)4,)4,)4,)4,)4,)4,)2-)/*$/,%/,%0-&1.'2/(30)30)63,63,74-85.85.96/:70:7.A:0B<0D>2F@4IA4JB5KC6KC6MD5MD5OC3NB2OC3OC3PD4RE5R?1Y?2b@4nB5}E6H8G9F7G:G9E:G;G>G?H@E@FLCLDKEICIBD>B=A;A:@:??-?/?/>.>,=+<+<+?+?+=*=*=*>+?,@/?6>5=2?1B3D3D4D4?0A2F8H;H9oA2T8*C3&=5295495473271160050-50-72/72/72/61.61-50,50,41,//-.0-//-//-0/-0/-2.-2.-5,-4+,4*+3)*7(+=.1E69P:0U?1^A3jC4xD6E4E5C3C4A4A4B7D:E@<@6>/@.?-?-?-?,?-@-@,@+A-A+@*A)@*A,>-?/>.>.>,=+<+<+?+>*=*=*=*>+?,@/@5>5>3>1A3D4C4D5A2C6F8I;G:l@3S9*B4)>63:6595484382271161.61.72/72/72/61.61-50,50,41,//-.0-//-//-0/-0/-2.-2.-3--5,-4*+3)*5)+<-0C47N8:d>=vEAJINLTVajl}r{{ou[[QHuOCiOFeOG_PH_RN_[Yfnot~ojkY][LVSJXSZVRaXQa/.,/.,0/-10.40-40-51.51.72.72.72.72.92,92,92,92,91.80.7/-7/-7/-7/-80.91/80.80.80.80.80.80.80.80.6.,5-+5-+5-+4,*4,*4,*4,*5-+5-+5-+5-+5-+5-+5-+3.*2-'1.'2/(30)30)41*41*52+63,63,63,74-85.96/96/:7.?8.@:.B<0D>2G?4H@5H@3H@3I@1I@1K?1K?1K?/L@0MA1NB2MA1QA1YB2dC2qC3|C2B2A0<-:+;.=2@6D:F=D>CE@FBGBFDFCEAD?D;@:?;@=@@@A=@;@5=.@-@-?,?-?->,@,?-@-@,A+A,?*@*@+>->.>.>.=+=+=+=+>,>,<+<+=,=,?+?.A6?5>3>2A4C5D5C5D8F;I=J=G;h@4Q:,B5,?74=77<66:4494183072/72/62/62/62/51.52-41,41,21,.0-,1-.0-.0-//-//-0/-2.-5//4..5,-4*+4*+9-/>24I56[97l?9|E@IDOM[`fvmw}}u~fmTVMEvLAkMAeOFcQHcMH^NK\[[eqty|xzlfiXZ[MVSLZU[ZT`[S`.-+/.,/.,0/-3/,40-40-40-61-61-61-61-81+81+81+81+7/-7/-6.,6.,6.,6.,7/-7/-80.80.80.80.80.80.80.80.5-+5-+5-+4,*4,*4,*3+)3+)6.,6.,6.,6.,6.,6.,6.,4/,30+30)30)41*41*52+52+52+52+52+63,74-85.85.96/96->7-?9-@:.B<0E=2E=2F>1F>1G=1G>/H<.I=/I=/J>.L@0JA0KD2NE4UD4^D3iD2sB1~A/?-9)9'9*<-@3E8HDCACBCDCCDBC@C?A;@:?;@>@A@B=@9@3=-@,@,@,>,?,?,?+@-?,@+@*@+@*@)?*>,>.>.=-=+=+<*<*=+=+<*<*<+>,>-?-A6?5>2@4B6C8C7B7F|F:b@4L:.A7-@85>96=77<74:5294183083062/62/62/32.52-21,21,12--2.-2./1./1.00.00.10.10.5106005//5,-4+,6,-:01D22T71c;3qA7{E;HDRU_lis}yx}ow`fQRLEyL@pL@hPEgQFfLC^GBVMLZ^^fjnquyxx}wzvwzokoa`bTWYLTTL]WY]V]]V^------.-+/.,0/-10.3/,40-3/,3/,4/+4/+4/+4/+6/)6/)4/,4/,3.+3.+3.+3.+4/,4/,50-50-50-50-50-50-50-50-3.+3.+2-*2-*2-*1,)1,)1,)4/,4/,4/,4/,4/,4/,4/,4/,41,41,41,41,41,52-52-52-52-52-63.63.74/85096196/<5-=6,?8.@9/B:/C;0C;0C;.D:.D:.F:.G;-H<.I=/J>0I@1JG6MH5RG5YF5bE3jD1uB/}>,;):):*=,B2F8J=I?GBDCDBEBBBAA=@<>:?:<<>?>B>C:A5?0?-?,?,?,>->->-?->.?-?,?+?,?+>*>*>,?.>->->-=,=,=,=,=,=,=,<,>->.?.B4A4@1@3A7C9B8A7C;H?LCJ@tE;Z>2E9-<5+@93@85?75>63=52<4194083/62/43/43/23.32.12-12-02--2.,2.-2.-2./1./1.00.10.3205105104..2,,4+,7./=/.N5.Y9.e=1n@3sB;yKKZegpzxu{ks_dTTOGLBwNAmNBhMAeJA`GBYGFXKKWMPU]cc`fbbia`f\Z`TW[MUXMXXP^YV`WX`WZ,,,,,,.-+.-+/.,0/-3/,3/,2.+2.+3.*3.*3.*3.*5.(5-*3.+3.+2-*1,)1,)2-*3.+3.+3.+3.+3.+3.+3.+3.+3.+3.+2-*2-*2-*2-*1,)1,)1,)0+(3.+3.+3.+3.+3.+3.+3.+3.+41,41,41,41,41,41,41,41,41,52-52-63.74/85085085.;4,<5+=6,>7-@7.A9.A9.A9.C9/C9-E9-F:.G;/H<.J>0HA1JG6IH6NG5VF6\E3dC2n@0v>-{<+;);*=,@1F5J:J=H@EAFAE@CA@>>?:<;<:;<=@=C=C8@2>,?,@,?+?+?->,>,?,>-?,?,>,?+>*>)?*>+>->->-=,=,=,<+=,<+<+<+<-=,>/?.B4A2@2B5C9C:B:A;A9I@NGNEoG=S?4A;/96-@93A75?74>63<4194083/74/43/43/34/23.23.02-02-.3--3/-3/.3/.3/02/02/11/11/21/32032040/2.-1-,4..8.,G4-O4)X8+`<0e?6mGFyYdku||w|nudh[[RMLB~OArL@hI=cH>`HB^ECX@BO;@FBGJDMJJQJJQIIQFKQEOUIVWO^YS`YS`XU++++++,,,---/.,/.,0/-0/-1-*1-*1-*1-*2-)2-)2-)2-)2-*2,,1++1++1++1++2,,2,,1++1++1++1++1++1++1++1++2,,2,,2,,1++1++1++0**0**3--3--3--3--3--3--3--3.+41,41,41,30+30+30+30+30+41,41,52-63.74/74/85085.:3+;4,<5-=6.?6/?6-?6-?7,B8.B8.E8/E9-G;/H<0J>2H@3HE6GF4KE5QD4XC2_B2f?.n=,v=,|:*9);*=.B2F7F8FF>E>D@C?@@>>::;:<.>.=->-=.?.?-?-?,>*?*>)>+>->-=,=.=.<-<-<-=-;,<,.=0?/C2B1A1B6C:CCC793@72>71=60:5/94.83/63.43.43.34/13.13..3-.3-.3--3/-3/-3/-3/.3/.3/02/02/00.11/22021/0/-/.,2.-4/,?0+D0)K3)T8-Z<4dFFu]js~tzmpceVSLCK?qI_FB]DBW?AN;?H:BE>HGDMHGQIGQHJRGNVKUXM^ZOaYNaXO++++++,,,,,,.,-/.,0/-0/-1-*1-*1-*1-*2-)2-)2-)2-*2,,1++1++0**0**1++1++2,,0**0**0**0**0**0**0**0**2,,2,,2,,1++1++0**0**0**2,,2,,2,,2,,2,,2,,2,,2,,3/,30+30+30+30+30+30+30+41,41,52-63.63.74/85085092,:3+;4,<5->5.>5.>5.>5,B8/B8.E8/E8/G:1I=1J>2I?3FC4FC4JB5OA4TA2\@2b>0j<-q<.w9*}8)8(:,=/B4B5F:E;F>G?G@FACAB@;;;;>;B;D:D4@->(A-A-@,@.@.?-?->/>.@.?.?->+?*>)>+>->->-=,=.<-<-=-=-<.<.<./>1?1D2C1B4C6C;D>D>EAPL[Te\f]u_T[UIGMACI?<92?82>71;6094.74-63.43.43.34.24/13./4..3-.3-.3--3/-3/-3/-3/.3/.3/02/02///-00.22022010.0/-0/-3/,8,,;,)C0*K70S<6^IHtbnzƄzrxikWWIDE=nG^CAY@CV@DP>EKGQRKWUQ^WU`XS_UR^TT^SY_S^[LaZJaZJ,-/,-/,-/,.-------.-+.-+/.,/.,1-*0,)0,)0,)/+(/+(/+*/+*/+*/+*/+*/+*/+*0,+/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+1-,1-,2.-1-,1-,1-,1-,1-,1-,1-,1-,0,)1-*2.+3/,3/,3/,3/,3/,3/,3/,3/,3/,40-51.62/74/80-92,:3-;4.=4/>5.>5.>5.?4.?5,B5-C6.D7/F90G:1F<2G?4H@5J@6P?5T>3X<1^90b6+m9.t8-|8+9,;/=0?1>0A3A4C8E:G=G>E?C@@?BADAE>D8B1A.B,A.@-?,>.=-=->.?/<,=,<->-=,=+=*>*<+<+=-<,<,<,:-;-=/3@2A5A4E5D4E9I>G@D>EAMGZRf_qfsh~rdjj^V^SIQFLLBJF=B>5<8/95,74+63,33+43.34.14-14-02-/1,,1+,1+-2.-2.-2.-2./1./1./1./1.02/02/11/11/11/11/11/40/4+0;/3A32C4/J;6]OOymyϐكtzjn_bZ[LItHBdA>]>>X?BUAIVLU\U`bbqnn}xv|rulyoguh_k_W_P]\Hb\Fc]G,-/,-/,-/,-/------.,-.-+/.,.-+0,)0,)/+(/+(/+(/+(.*).*).*).*)/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+0,+1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,0,+0,)1-*2.+3/,3/,2.+2.+2.+2.+2.+2.+3/,40-51.62/80.91.:2/;4.=4/>50>50=4-?4.?4.A4.B5-C6.E80G:2H;3H>5H>5L=6O>6Q=4V;2Z90_7/h70p7.w7-9-9.<1<1=1@3A3B5D8E:FF8C2B-B-C.B-@.?-?-?->.>.=,>,=-=,=+>+>*=,<+=+<,<,<,;+;-<-2@6A7B6G9E7G->->->/?0<-=-<.=.>-=,<+=+<*<*<,;+;-<-:-;-<0<0<2>3?4A8C:D9J=H;H>KDKFLGSM`Vsgqz{wsocqbXcUNRDMN@HI;DD8@@49;.46+/1&01)01)/0*/0*./*./*//-//-//-.0-//-//-//-//-//-//-00.00.00.00.00.00.00.1/26+97+98/4;63HE>_^Yzz|DŽ}{|}}wq~n}n~~o~y|{j{i\hTXX@]Y<_[@-.0-.0-.0-.0-.0-.0.......-+.-+-,*-,*.*'.*'.*'.*),*++)*+)*+)*+)**()*()*(),*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+-+,-+,-+,-+,.,-.,-.,-.,-/-./-./-./+*0,+1-,1-,1-,1-,0,+0,+0,+0,+0,+0,+1-,2.-3/.40/91/:20;31<41=31=31=31=4/>3/>3/@2/@3-A4.C60D71E82F93H94I:5J;6L:6N94Q83T50^72e60o6/x8/90:/<1>1?4?4?2?1A2B5D7E:G>H@JAI>F:B5A0@.A-A-?->,>,>,=.>.<,=,=.=-=,=+=-<,;););+;+;,;,;-;,;/<1<1>5@7C:DJCLIQL]Vj^oyzxm{jbm]SZJQUFKO@EI:@D6;=057,13(01)/0(./).-(.-).-)/.,0/-/.,/.,/.,/.,/.,..,/.,..,0/-//-0/-//-//-//-//-2-17,:6*83-1961HJ?bfX{z}|k|iXfOSV;ZV9^Z=+/2+/2+/2+/2-.0-.0......------.-+-,*-,*,+),+),+),*+,*+,*++)*+)**()*()*(),*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*++)*+)*+)*,*+-+,-+,.,-.,-/-./-./-./+*0,+0,+0,+0,+0,+/+*.*)/+*/+*/+*/+*0,+1-,3/.40/901:20;31<42=32=31<20<20=20=2.?1.?1.@2/A30B5/C60D63C84D95E:6G96H94K84N50X72_60i70r7/}:1<1>2>2@6?5?5?3@3C5C6E8E;G=H>G=D8A5?0@/@-@-?.>-=,<,=/=/<.;-0->0-?1.@2/A4.?4.@51@72@93A:4B94C84F74H5/Q51X5/a6/l8-u9.0=1?5>5?5?4B4B4C4D4B5D8E:E;B7?4>1>0?.?+=,=,<+<+<.<.;-<-<.;-;,<,;+;+:*:*9):):+9*9-9-<1<3?6A8CHCNJVR`Zper}~~yup{jdp\]iSR^JJS@BK:>E5:@29<134,22*1.)/,'/))0**1++2,,1++1++1++1++1++0,+0,+0,+1-,1-,1-,1-,/.,/.,/.,2,.8*75(13+(56&EK1\gGudyťέɭʰ˱Ȭ{wrdx]Q_ENR7QQ5SR6,03,03,03,03./1./1./1./1/////////////.,/.,.-+.-+/-..,-.,--+,,*++)*+)**()+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)**()*()*())'()'(+)*+)*,*+-+,.,-.,-/-./-./+*/+*/+*/+*/+*.*)-)(,('0,+0,+0,+0,+1-,2.-40/40/:12;23;23<34=32<21<21;10<1/<1/>0/=/.>0->0-?1.>3/=60;60;83<94=:5>93@72C60G4.O4+Y4+d5+n8,x:-;.;.<4<5>3@3A2B1A2@0>1@4B7B9@6>5=2?2?-?->,=+;*;*<-<-;.;.;-;-;.:-:,;,9)9):)9(9*9*~8,~8,<1=4@7B9E>IAKFMFIAH@JFSO]Xhb{ny~wxnjxadr[ZhQQ]IITCCL;>D60-?1.=2.=4-=6.;819919:29:2;81?6/C2+J1,T2)^3*g7+o9-u=.z2B6C7B7?4>2>1>/=.=-<,=,=,=.>/<.<.2>5@6C:G=JBNEOGICIDPJ\Tg`uiu~zytoi}bby]\pUUgOO\HGRAAH8=A388.85.7/,3+)2()2()3)*4*+0*,/+*0*,0**0*,0*,2),2),3*-1+-1+-1+-0,-0,-0,-1+/4)/4*+4-%46!?F%T`8m|Qgtz~z{Ĉːəǝƚ~xvolfZnSJZ?GM3FJ1DF./0+.0+/0+01,01,01,12-21-32.43/43/62/51.41,3/,4/,50-50-4/,3.+2,,1-,0,+0,+.,-.,---/--/,,.++-*).))+.)/.)-/(/.)-/)-.)-.*+.*+/+*/+*-,*.-)--+-.)./*./*------.,-/-./.,0/-2.+2.+2-*4,)5-*6.+8/*:1,:1*;2+=4-=4->50>50>50=4/<3.;2-=2.<1-<1/;0.=/.>0/>0/@1.A0)@2);4*77-39-28.56.:3-?-)F*'L)'S*&Z/(`5,d<0k@0yA0@/A1B3@3=0;/8-;/=.A1B2C2A0>.;,;0:2;1=0?0?/?.>.@1?0>1<0;/:.:-;-{9+~@3w<.q7)w>-w>-v;-}?2{;/@4E9I?LAMBPCNEKISPbYpa}jq|~u{ouiib_[zXZsUZnSWeNPWEJK=C?6@93;0.6**3')3'+3'+1&*,*-)+***,*(),'+.(,1(-2'-3(.3(.3(02(00)10)1/*1/*0/)-1++0-(//#5,>5,>5.>5.>5.=4-<3.<3.=2.<1-;0.;0.=/.=/.>0/@1.C0*C0)A2+>4+:6-95,:3-<1-?-+D*)I*(N+'T/)Z5-_:1e>/pA/xA-A0@2?4=3:2;19..@0A1A1A/?1;2;2<2=0>0@/?/?.@1>/=0<.;.;,:,;,x8,x<1s9-n9+s>.s>.r8*u:,}=1A5E:I=K@NAPCNEJHSRf]wfpww}ovei``YZY{X\wXZnSSaJNUCFH;C@7<737/-3*+2)*1(+.(*,*+**,+),+),-(,/)-2(02(02(02(02(10)1/*1-*3-*3-*12-12.-0,)--%8:,SXBox]iolnpppw{xwy||{xuqnh{eYjWMZHEL<@D5;=/12,12,12,12,23-23-43.43.54/54/85085085074/72.61-80-80-7/,6.+4/,3.+2,,1-,1-./-.0.1/-0--/,,.+*/+)./(/1'//)-/)-/)-/)-.*+.*+0,+0,+/.*/.*/.)0/*0/*0/+//-///0./0./0/-/.,1-*2-*6.+70*90+:1*<1+=3*>4+?5,?6-?6-@7.@7.?6/>5.=4-=4-=2.<1-;0.;0.;0.;0.<1/?1.C2+E0+H/+K--L,/K+.I*/E+.A-,@.*A.(E.(M.)X1*b3-g5,j:,o;-w;0=4<6<5:4:4<2=2>2?3A2A3B5C5?2=/>1>.>/>,=.<,;.<,:-:*;,<)~=+{<+}=1z<1v:/u;/x@1x@1v<.v;-?5B8F=H?JAKANCNFJHTQf\vent{}yximae\a\`]`[|]UrVPhPFYEBP?:D93:2.3,*/)*,)**(0'(1&*1&*1&*0'*1(+0*.0+//*.-+.,+0+,0)-0(-1(-1)-01/23/..*'**"57*PUAmv[|ik~jjnn~mqx|zxvvuwyy}}ywtpmh|cYkUMZHDH9=?299-23-23-34.34.34.45/54/54/650761961:72:72961940940:2/91.91.80-50-4/,4..4..3/03/01/01/20.1..0--/-+.0)02).0*.0*.0*.0*,/+,/+*1-,1-,0/+0/+10+10+10+10,11/1111/010.10.2.+3.+3.*92,92,;2+<3,>4+@6-@6-A7.B8/A8/B90A8/A81@70>5.>5.=2.=2.<1/;0.;0.<1/=20=2.B3.E2.L..R+0V'/U&.P'/I).C/.<1+;2)?2)G0(R/)_.*d/)i9/k;/u<3}<6;8;9;7:6>8@8B9B9C7B7A7A5@1A/@.@.>-<,;+:+8*9*:*:)<){=(x>(x>*>1{7.z7.z<1v;-w=/|A3{@2B7E:H=J?J@MBODQHSJ\Qh[tbgm~v|~}yqoiifgfeggde_~_Zw[PhPK^JBP?8D62:/.4*,/(+*%2&&5%(4%(2&(1'(/)+/+,.,-+++*+-*+-(,-(,/',/',/*+-.*+1++0+'.+"88,PUAiqYvc{hyh|il}mykzmrtq}p}p}s~v~x}x|x}zzwuqnje|bWkRN[GDF9?=1:8,45/45/45/560560560761761872872;83<94<94<94<73<73<41<41;30;3083072/61.61.5106216213122011/00./1-.2,04+.4+.4+.2,.2,,2,,2,,3/.3/,3/,3/,21,21,32-32.32032032032051051.61.61-;4.<5/=4-?6-A7.B8/E8/C9/D:1D:1E;2D:1C90B8/@5/@5/>3/>3/=2.=2.=20=20>31>31@51E31M02T,4X)3W(2R)1K,1B30:6-77+:6*B4)M2)X/)^/)f:1j;3s<7z=:<:<;;;::;7>8A8B9C:C:@9@7C2C1B0?/=.<.:-9-7+8+9+:+~=+x>*v?*x>*9-|/'8/>4w4+s5*}A6}C7E:GJ?KBMDQGWJ|aNzjQpYu]|biu|~{}zwzpzlxlwkumrlmgkd`rX[iRR[HHL=@@4;7,70&5*$6('5''3''1'&.)&+*(++)+-*',('+*)+*)+***,+),+),-)*,#$2*'50*86*BC5UZFfpWn}^teqbuexiwkshtiwkznxlwmxnys{u{w|wyuzwwtsomhd{_WkPN[GCC7>:195,560560671671782782872872983:94=:5>;6>;6>;6>95>95?74?74>63=52;63:5294194184184395484373243151240/6-06-.6-06-.4..4..4..4/,40-40-40-51.32-32-43.43.43/431542540841850940:5/=60>7/@7.A8/C90D:0G:1H;2F<3F<3F<3F<3E;2C90B71A60@51@51?40>3/>31?42@53?53@72C52I35P16T/6S.5P05J22C52=90<:-=:+C7)I6(Q3)W2)]2+d3,l50v64}77877766~75}:4}<6}>5?9@8?9A8B3C1B1@0=/;.:.9-9,9,:,<,|=,y>,x?,|=,5*2,LEXQA8|90F;K=yH:zJ<{M>|N?}OBQEUJ_LrkOosR|uXw]ybiszz|~{y~vpoppp{pwmskj~bfv\_hSV[GOM>GA3@6*=0';,'9+(6+'3+(/,',-'+.').().(+-(-,*/+*3)*4(*7'*7'(3($<3,E>4IG8QR@]bKgqVjyZn]k\l]pbqeodoerfumrjqitnxrzvyvyvvtwvurokjfc|^UlON\ECC7@91;4,671782782782893893983:94:94;:5>;6?<7?<7?<7@;7@;7B:7B:7A96@85=84=84<73<73<73<74<74<74;639529338308/09/.8/080.80.80.61.61-61-61-52-52-63.63.74/74/540540841952:63<94=84@93@70A8/C90D:0G:1H<0I=1I=1J=4J=4J=4I<3F<3D:1B8/A7.A81@70@72?61?61@72@72A83?74@85B86D97G96H96H96H94E80E8/E9-E9+G9,I9*K9+Q7*Z/&d/'n3-z6398;9;:=;A>@:=6<3:3<4=7@7A5B3@2?2=1<0;//|>/}>/=/9/1+<8lf~yZTC(+C&+E$+C&(F5-LC4VQ>[YD`bJgmQiwVj{Wl[gWfWl\oananbrfskojoirnwtyxxwuvssuvsrnlicb{[TmMM]CGH:E<5@707827828938938939:4:94:94;:5<;6?<7@=8@=8@=8A<8A<8C;8C;8C;8B:7?:6>95>95=84>95>95>95>95=85<73:51;30:0.:0.91.91.91/91.91.72.61-61-63.63.63.74/74/74/540651952;83<94?:4B;5B;3A8/B:/C9/E;/H<0I=1J>2J>2K>5K>5J=4J=4F<3E;2C90B8/B92B92A83@72@72A83B94A:4?82@93B;5D=7F=6G<6K<5N;4M6.N6,Q6+Q6+Q7*P9+P9)V6'f6*r6,~;3@9D@HDJGLFQJLDD;;07-7-91=4>5>7=6<5<5=4}=3z>3x@3vA3x@3z>3<3:37331(&=;|zhcG@K@xH:nMhV>lX@t[E`LhPysQwUt\l^__V\Q[T\ouzx̆|~}xvrtuuussr|nyju{amoWgbN_TBUE5R/(9/&7.'6/'81):/)=.+A,+F)+H(+K'+H)'TB4YQ9B?:D?;D?;E@8E>8D=7B;5B;5B;5B;5B:7B;5A:4A:4A83A83A83@72@64>71>71>71<71<71;60:5/85.85.74/74/961961961:70<71=82A:2B;1C:1D<1F<2J>2K?3L@2N@3N@5N@7N@7L?6K>5I<3H;2E;2E;2B90A8/@91?80?80?80@93@93<5/MD=M@:K:3T@9R62O0+a<6\3-`5.`4+^/'^/%f6,m=1q=0I=G;I?KAF>>7=6D;NDPEVJYKOBA5;0>69898655284?8|@6r>1rB4oA2q=0v:07243-1',HIbaEDWUyvVOFu:9:49:49:49:4:;5;<6>=8?>9>=8>=8A>9A>9B?:C@;D?;D?;FA=E@8E>8E>8E>8E>8D=5C<6C<4D;4C:1B92B92B92B92A83A83@93@93>71<71;60;6096/85.74/74/96196/96/:70<71>:1A:0B<0C;0E;/I=1J>0L@2L@2N@3N@3N@5N@7M?6J=4I<3H;2E;2E;2C:1B90@91@91@91@91A:4B92D93I81L/+V.,j76u99{;;ECD?H@IAG>IBNHPLOGD7B4B6C8>37-7-=0C5?0@0E3G6F6H:NELMHL@D9;98>:@8x>3o>0zI;LA?8,+).9DLWKNMM>=@?`\YQ@5TDyaIe[@^]?ihIslOvgJ~dKcNdX_[UZAN,E%D&H'I.N3N6UE8[O5cZ9gaAifEnrOz]zbt^r_p_p`q`udwdwdwfsixrzxyx~}zzromhhd`y[TmMNaERSAVPBUOC8938938939:4;<6<=7?>9@?:@?:@?:C@;C@;C@;C@;D?;D?;FA;FA;FA;E@:E@:E@:G@8F?7JA:I@9H?8G>5F=6E<3F<3E;1D:1D:1D:1D:1D;4D;4D;4C<4?80?80<71;60:5/:5/94.94.96/96/:5/;7.>7/@9/B90C;0E;1F<0I=1K?1M?2M@0NA1M@0P?5M?4L>3K=2I<3H;2E;1D:0C:1C:1A:0A:0?;2@<3@<3D;4UDI?LANBRJUROSLK@4B0@0?1;.7+8+=/E6>+7$:'>-A/C2D:02:BDLLRMRKLA>71{8/v6,x2*1-37=GGWM[FI53:931NKc]J?[J}cLj_CgdEtoOpQhJhNhYbbQZDQ7I1J2N/M*H2O0K1J5L4M2K3L7P@XC[F]IaNcQeUhVkSjRiOiNiNlPoSsVuha|[tUlYldrR]r-2^&'Y0,W:4Q?5B:-:8)>B1LN9VO3aV6e_?heDquTe~iwdxiuerdrcveyhzizjv~zypmg~b^wYTmMPcGSXDXUDYVG7827828939:4;<6=>8@?:A@;BA5G=3F<2E;1D:0D:0E;1E;2D;2E<3E<5E<5@91?80=82<71;60:5/:5/:5/96/96-;7.;7,?8.@:.C;0D0K?/M@0M@0M@/M@0O?2O>4L>3K=2J<3G:1E;1D:0D;2D;2B;1@<1@<3A=4B>5F<3S81[*&:?T`TeUfUcJO30:/>0A3F=IGBH>@B7F5B3@3?3>3B4D6G5B/<);(<(:(6&3(979=7>7<^@aCf@f?e?g?hCmErIsOuQuUvSqTnaxfvWb}15j0/X1*P8,G>/>A.;D/?G/PK._T8g`CokN||`rv}qzq|s|szozm}ouzsqh|c]tXSlNPdHRZCWYDYZH671671782893:;5<=7?>9@?:BA/K?1M@0M@0NA0O?/O?0O?2N=3N=3J<1I;0G;/D:0D:0D<1D<1B;1@<1A=2A?3B?6K=4\5.w32LS]iM_@Q6E&+1)7(:&<)@3D=>?;;?5B4@2?2@5C9H;J<>/?/=+;)9):,;/<1FADA>?797KCTLSMKJ?B5>274.7.1+:484@9[PUC{N9bIkP`F[FfTrdmhEK:D9C=8@?:@?:C@;DAGB>GD=GD=HC=ID>IE2I=1G=1G=1F<0F<0E;1E;1D;2C:1A:0A:0@91@91=82<71;60;60;7.;7.;7,<8-?9-A;/D0L?/M@0NA0NA0O?/O?/O?2N=3M<2L;1I;0G;/F90C9/C;0B<0B;1@<1@>2A?3B?6N;4m84FEY_WbCQ8F3;++1'8%:!9 ;&>.:2717,:-9-7,:1B8E;E:>2?0<,6'6)>0D;G=8-@6D?BB=A9>27.075GBSLNG=910/2671(A>GBOMWWNRDM:G5F2F.D1G7N8S8T8V9W;\>aAeCk;ej?m>n>o=m:jHr;a?dKnKnNmUoZnrajILt:8\6-P9+PC2UM:^QAreU|nʿ~m~k`t[WnRVjNS`FV`EX`H560560560560671893:94;:5=<7>=8A>9C@;DAHC?HC?GD=HE>ID>ID>JF=JF=MF2@@4P91r1/JKSV>D0603//1)1!9#=!;< =#;%6%6)8-6,4,81@:C<@6B7A4->-5+*&"%%+*1.4)*.+3,4,3,2,0-2+2%6&2&7,6.>7`UqeSVBM:WIf[d_RTCIFM@D??@<@8@7FAMLJN@K9H7H5H3E6G;M8P7R6R6U6X9];ak?m@qBtBuBuBtBpFmAaEeKjKkVt_z]tj~p~ow^aCAg6/hB7sUJye\}vŽ˺tqexb\sW[oS[jM\iK]gL561561561560561671872983<;6=<7@=8B?:DAHE>HE>HE2G=1E=2D;2C:1C:3A:2A:4@93?74<73<71>7/>7/<8/=90>:1A:2C<2D=3H@5I?3L@2MA1NA0P@0O@-O@-L?/L>1M=0L;1J91I81E80C90@9/>:/;;/<<0=>0>?1A?0S8-<7\[ZY86.*1+.%2#9&B*F,D'A&A&<#9#9*;0:07.<4CD;=<<@9>48,6.94HH@E;D:H:I8G;I?NAU?Vi>l>o>p>q@r@tAqCjMmSsJh@`Tsge]w_xh{p}qxgg^X{ZQ~wļ«zxl{hbu_`rXbpVboScmT21/320431651875984984984;:5<;6==5??7AA9CC9EE;EE;HH@HH>HHLC4J@4KA5MC9LB8F=4B90E<5C:5@93?74@85?75<74<42C:5B94A96>95?:7>:7?;8@<9B?:D@7G@6J@4L@0O@-O@+L?,G@.F?/I;0K81M53K65J88F;9B?:6904,=,<,=/C4F8>12&9+8*8+8-7-5.3/1-.,.-0,1,5*7):):(9&33 8'7'6(B5SINCSK\W]ZPR>C9??GAFCDAA?9<3;/?HH>HH9H?:F=8B;5D:8A96?74?74@85@85=85;62=4/=4/=52<74=96>:9=<:>=9B?:D?9G@6J@4M@0O@-P?+L@*B?,B?.F<0H:1J65I56F35@65@<9:=6;>5@@4E<-J9)^B4L>QB;-2#6&:'7$9%>*;%<(?+@-=,9*6(7)9):*9);+>.A1B/@.?,:(<+E6H9?18+6)7+7,9.;-8;1:-<-=.E5L?NEGC?>?B?F@JCJCLDPFTBS>S>XBaFhCi?i@jBpFvJzK{JzHtKpQs\z_{XwNqEkDlEiKg_pnukLI~t̲ų~/.,0/-10.21/43/540762761:94::2<<4>>6@@6BB8CC9DD:IF=IG;JH;LI8MJ7NL7NL7OL9KI:NKBTRS_^fihxmmlkkh`YiYQ\OGRH@KH>GG=EE93>:1=9083-94.;60<92=:3>;4?<5@<3E>4G?4I?3L@0O?0P?/P?-L?,<;&:=(?<+A;-B71A62>42;30=84B;5H94N2.Y,)l/.;=FE;02$1 9'<)7$8"<&;&=)A-A/>.<-:-->-<,?-8(>.L=G:6*2&9.6,6+8,:.:/8.6/3,0-.+.+1)2'6&8"7!8$5#9'>/=.6)9,A7<5>8EAKIJJCC?ACCCAD?B==4:.8*:*;+8)D8NEIE@@>ABIHPAG@ICOGTEU@U?XA_DfCiCkFpIwK{L|JzFxHwKtNtZ|aUvCdIkTv?\I`{||aC;|nճξ/.,/.,0/-10,21-32.54/650880991;;3==5??5AA7BB8CC9HEQPL^]bmlzzz{urke_{YSmTLdMEZG@PB;2?=1@<1?;/A;-F?/H?.K?/M@/O?0O?/P>0L?/@=*?>,@=.?;/?;2>93=:5:94<94D95M51V-+j)-288C>C7.7(:(?-?,9&8#;&:&<)>,@/>/=0=1>2?3=29.8*9+:,:,9*;,;-B4E9>31'2(9/5+4*6-7-7.6,3,1*0,.+/)0(2&4$6 5204$<.=/9.=2D:5-60;5D@MIKIC?=8@9A8>4Vdtӏd92lJ>ynХ10,10,0/+0/+10,21,43.54/77/880991;;3==3??5AA7DA8IE:LF:NH:PJ:RK9RM:SL:QK=OJDVTUfdqwxÏƎ{wpmid_[~UPnNJaKGXEBM?=B;7895296/85,85,671783891;;1>5L?6K>5F<3B92=82:946;47<59<5>:1H4-Y2-w78?D>E9<;0<+@.A/@-<);'>*8$:'<+=.<-;.<0=3?6>3:/7,7,8+8+8+7+A5C88.1&3)7-5+4+3)4-6,5,5+1*/*/,/*/)0'2#4!541/2"6)9-:0?6E=F>@7<5@9KDNGE>;1=1<0CBLIUJYFXCYC]@_BdElJsNzO|LyIvJwTT}JqImStVtNiD^F]Xk󝞎HFk.)kc͖ɿȾȿ65143.32.10+10+21,32-43.66.77/880::2<<2>>4@@6B@4JD8ME8OH8RK;TK:TM;SL*F@*G?*H@+IA,IB0IA4HB6HA9G@:K=?51;/<+?-?->,>*?+?-8%9(:+9-9,:.:0<4>5;4918.8.9/8.6,7-C9@70&,#7/<42*3,2(2+3*3+2+/*-*/*.)0)1(4$5"6 57#3#3$3&5)8,<1?6YQRJHAC;E1:*;(:*:):(:+>0A3A6<3<6A=EEGHIMLPBF@CCIKTNYJZF\F_A_BaEiJpNwOzNxLvQ{RyOvOtVy]{SoD^TlQddt`dMMjgΏX<94;8185052+41*41*52+63,74-85.96/;81=:1?<3A>5C?4JB7MC7PG8SJ;WK;UL=UK?SJCSJK]WcnlŚڟꢩ뙛啘ݔ֐ʉzyrqfc~XVkPN\IGRFCLCBJ??K==G;:@;9:<94?;/C=-E@,F@*FA+EB/EC4CC7BC;AC>@ACBLCANEEOCHNAIL>HI>GDCHAA=2L:.gF7OAI/>,>*?+@,@-?-<*8'8)9*9,8-8.91;5:4:3818192:2706/<5>5912(4*;2<33*1*1'1*2)1)/)-(,(-)/)1)3(5'6%7!7 9%8%6%4%4(7+8.7/NGXPZSQIG>D9@7>/<*<&<(:'9(;*>0A4D;@7@:FCIHHGGJIKFHBDDILSQZO]L]K`D^DaFfIlNuOxOxPwVxUvTvYx]{ZwQkI`WkUgM^^mKZTaTaXaefȃ~嫧@=6=:3:7074-52+52+52+63,74-74-96/;81=:1?<3@=4B>3JB7MC7RF8VJ:WK;XL?:6@<1A>/C@/CB0BC3BD7?D=>D@CVCIaLRhU\o\br`dobbjd`afXWaJDlG>SEXFJ7@+>+A.@/A-@-A.A/=+7&7(8+8+8-6-7/81;4727272829494836/A:8/3*8/=5=5915,2)0'0(0)/)-),(,(-)/)2)4)5'7&7$8#7"8%7$6&7)9+7+4*4+NGd\`YOFA7;29->)>'<&;%9&9*2D9A9E?KHLIGDEEHGIICDEHMSSZR\O^OaH^G`GdIiNrQxRyTzUuZw^}^|UpMgOiYn[mctM^TeO`UgL_R_^_vqלB>5A=4@<3>:1<8/:6-84+73*62)62)73*84+;60>93A<6E>6I@7MC7RF8UI9WJ:XK;ZLA[NHTIMXR`gd|~ʗ㞪쩫蟡ڙҍtrhe]ZXR~XQzYQvVOnMH_C?M?:@?;:B?8>>4@B5BE:?D=:CB>FH?LUDVnQfaristvxo^l[cWYWUVMM?@.9$:$<(=*?,@.@-?-=,;,6'6(6*7-7-8/91838495:693616183:3C<=670@7[Rlc]T?63)2)2*/)*&(%(&+(-+0,2+1'0#1"4$:(;&<(<)<*:,9+8,7-@881GAc^XQB<@;4*:&<$<&<&:(:+<0>2>4C;PJXROJ?:?:HDHGGEJKPTRWNVKXL\RfOfKeJfMlQsRvRvWvXuXu[w\xZsWnVkbuVg\m[lFXDXQeVefgieʏ網C?6B>3A=4?;2=90;7.:6-95,73*73*73*84+:5/=82@;5D=5H?6LB6QE7TH8VI8WJ9YK>ZMEUJNWQ_eby{ɔ⛦뢣㘘،ɀuqiec^`W`V]TVPtMIbFCTBAIAAC<<:AB=FEACD?A?@DBEOMRWVdchqu}}}{p`uYiVaQUHF@4;)<&='8$7%8&9(8'9(7(6(3%4(7-:2<3=5<5<5>9<7<7>9B=C=B[O@66,+#)#-)/-,+((0.4/616.3)2&2%6&:';'<(:(9*7)5)4(9/5-=6PJTQLHB?1(;(=&<';'9(8(:,:/>4B8OFWPRID=C;HCLHJFMLSRTWPVNVOZVfUhSiRkRmSqStRuMmUt\z_{\vUoRiReUfRbZhZhN^ScYiS^`_^W}٩EA6EA5C?4A=2?;0=9.<8-;7,84+84+73*84+:5/=82?:4C<4G>5JB7ND8RF6TG6WG7YIBZEJpW]csrz{vpcTnG\K\HP<<5.9*<'<%;';):);*<,<-<-<.6*8.<1?5A8>7<3:4714.3-93A;E?B<=5<44,4+7-2', 6*G:K>@64--),*,,,,*,*)/+2.5.4+1(1'3'7(:):(:);*:*8+8,4+<4:5<7ONYWEE3/;,<(;*:)9)8(8*8,=3A6JAUKRGG>D:G>KDICLISPSTPSMSNWXdZh[pZrVnRlQlQpGmPvZ}[{VrTkWk\mYhZham`k]gfnfm\_]W{OFmfݺIE9HD8FB6D@4B>3@<1?;0>:/:6-95,95,95,:5/<71>93@;5E>6I@7LD7OF5RE4UE5WG8WI>XMKXNW^Zqppԕ革ꗖ⌋ׂ}yumpgf`_ZYXQQuGGcA>Q=5DH8BT=C`@EnCJOU]dfxknoi`WxIg;U2HAPEM;<71?0@,:$6"5$5$5&7(8+;-/?0@3@36*LBJE50GFZ\IKA?2F9OBPDH7/=6.=6.=60>71@93?:4C>8EA8KC8NE6QD3RE2VF6VH;ZMGVMR[Whlk~Β㚦铕⊌نу{umkde_aY[RQsNHbWFY_CQmBLEMMTU][bZhRpRuTuPlJbBW8J.?8ECKGK>>>6F:H6?+>-=-<->/?0B4D7E:E9B7>5;26-5,3+3*1*4-7.90807/6.5,/&5+7+2#1"9)>-;)<-D7JAD?64*-*-/26755301,0*/,0-0+8191:1;2<0=0?0>17+WLaZ;6;:PQFHPQ<4:/8,9,:-<.;-;,:-<.A3H9I;D6@2>0F1E6E6F7E8F8G:G3;18/4,3*4+4,6-81<4=4<3905-5,7-.$;0=.1"-7&=):&9'8):/=9@@<>37,/,.+**)+(/,448899757473717-6*5(5&5(PEmcHA42CC>BVVA<>48.6+:-/=.9+<-?0A2A2@.=.<-C6D9H?PGRLOINLON^cagitnzduVjQiUoWvVtXp^pnywksXa`m`mbos}숊́|thyjskXON:_VGqgSM=RL4D=3B;3A:2@93A:4A96@;7A@;CC;IE9MG7OG2RF0UF1UH5WK?RHFXR^jg}Ēژ礧흤蛢晞⒚ۋ҆ʃ„ymczXiQ_MYIRAI=A=;>8C9H:I8F3C0@1TIG?;76488:;9874:/<.;.:.8+7*4'2&4*3*3(3)3*5,6.8/=3=2;18/7-6,4*3)3&3%4%6&=)>*9$2:&4%1'51<<=@7=37-1-.--/.439:;=9=2603011/1*2(1%3$1$=1j_TL95@?:=RSJHC=:36.8.;0<0=/;*?-@.?-;*;(;+<,>0>2D8LBPHNFLINLaeafhro{hxZkUjZrYs]tarjt}wy_dgtm|eulw좟Ĕ|hjUHQSK>PJF>DF@D8=65B;D8C8A5>29,6)2'2(3(4*5,5.4.4.4,B7=17,6,9-9-5)1%8(2 1!9(8'4"7%C07&8*6,5.3/53:9?>LKHFBB>=<=7:26,1+1)/,./.1+4*5)7(0!.dY]S@:DC;;MMRQHE;66/8.9/;-:+<,@-A.<)8%9&<)?.7)7+>1G:K@IAIBJEa_^`djnwku]iXe]m^sbtdolr~qsryyaqXfЮ]jPDR9QT?jbUXO@WP@WN?UN>TK2G?2H>2F@4GC:GE9JG8NI6RJ5UJ4UJ4VK9XNDULMZTbkh{~Ñט磤쥨ﭩ▟֦ζgzL]ER>M;G?<=EB:4D9F:1)JEJICE>B;?<=<;B;?7D;MAK>=06)9,7+6,5-2*/*/+2/5.A59+1$3&9+;-8&2245!4"4"4%5'5)0&2)5)6*4(3&3'4)2)3.5233/2-2-4.5-3+/+,/-5.9,7(4%-3"XHYN;3NI41HHOPJJC@;6808,9+<+<*;(9&;(<)=)=+<,8,;0=1?3?3@4@5A7japic_mjqqadgmpylzhxdobidjlnqoqoy{}Zlcwbp}u]rQJY:LR8snZ˷YPAXO@XO@VM>UL=TKLAC5:,9+7*7+6-4-2.3/5384>2;-6)5&5'5'5"49$9"9%:&<+<,8,4*3.5-7+7)6&4"4!4"2$2&0+.,,-,/-2.3+.,-0.2.4*5'8'9'?.*D5>1F>VPB?BAUVRRKHC>=59.9+8(;*;(:'<)>+?-@/>.:,;0=0>1?0?1B3C5i\mdb[kfolbakltxq~o|ir]fY`bfqpzxvwx~Rd[p]njkZtON_;SZ;us\ĸ\PB[OA[OAYM?XL>WK=VJD=?==A>CB;?9<686696;6HA;15+A5K>H:=/8)6)7)7,6.507195=93*5*6*6*5*7):*>,4!44!6"8)8)3(-%@;>8=3<.9)7$7"7#7%3$/&.'.*.-//./,)0+5-5,3&4%9&>*A/1 SE;0A;C?JITUUTSQOMJCC;<28+6&7&7%7&:'<*>-=,=,:,;/<.=/=.?0C4E7\Qg]aYlgpma`fgjqR^^khqem`geiqqxwtunuJ]Rh[m񜡣a`UoHOd=W`Aww]\PB\PB[OAZN@YM?YM?XL>XL>UI;TH:SG9RF8RF8RF8RF8PF:LE;KGE=F?F:>?@EDA<61>:ZYAB@C=@:=8997<8A8E;:.2(/9(8)9)8.:/8091;7>81+2*3,5,5-7.9.=/7(:)<+<,;.;0<695C@@<@7=19*9%:&;%<(7'1%1%1(3,1,/*2*5,7+7)5'7%;(>*;(<,^PF<3/.,@@WXusrojg^YPGA75(. 8'8(8&;)<,=-=,<-;.<..B3F7MA`Wa[pltr`a]a]dHTYegrgoelkpsvvvpsenDXKbXk뒖_zYQlCSh?\gEy|_\PB\PB[OA[OAZN@YM?YM?YM?WK=VJ@@?IE>82,C??=@1;-8'7%9'<)<):(>-:*>2C:/-::245653;6C>KCQISHTHUG?0?.<,=->-?.?/>0<.<.<.=,<,=.A3D6LAbXc]nlrr`c`e`gkvozkv`h_flqx{y|ms^jAWC]Uh懍g]YtI^uIhwPfǻ伺޺޼[OA[OA[OAZN@ZN@YM?YM?YM?XL>XL>WK=VJQI>QI>SK>UL;XM9XM7YL9XM;WK?ULGYSWe^nnjut~}ȍώԏՏӐӋʃ|u|ovioljlcyYvPoBd7V4L8H@EFBJCJEGGCJ=N>LCICCA>ID;44,I@LFBA?=;;<;@=E?G2A5A5A6G8A1;(9&<)=*<*8&:+7)0'C<2/?A/2*,1/5.81908.5*2&1#E5A2=.:*9)9+:,:,;/=0>/<.<+<,>/A2SGg^c_jinochjqoxq{t~mubkdnrzx~quipWfAY@[Qf~ykm]oZy`r֭ӦЧӫԮֱں[N>[N>[N>[N>ZM=ZM=ZM=ZM=YLUL=XLNAEFDA=HB:/7,OFB<=8641051>8E;F9D59(:(:*:'8%9&:':&9&:):,9+7+5+3+3-*+*--3/4173738588;8<9>9A9D7F6H5E+5-2124/6-8*;+=,5&8*;/=2>4=4>5A6J0/..46663-7.90:1;1;0:0;/L?F:@19*6)6(7*8*;-=/>0=/<+<+<.=0KAdZc^kiosinrzvfpoyryjslvwv}hocnRbB[ZM=ZM=ZM=ZM=ZM=YLVJ>XL>YN583/,*&/*:3C9C6>/;*;)<):';(<);'8%5$7%8)7*5*3*3)2*33588<4:-2(-(-+1-3)0&1)6,?*A 9/"0(.,10/1,3+5)6*6+90=6>7:4715092H=KYM=WMCWLHXNOZPX]Ub`Yia\rjfokspvq{u~ɊLj~yrrtl\HLB9A:C@@?:;<>DE><=<>=@ABICMANAL>>@9?6>3,7%:'<);(9%9&:':(:'9(6(2$."/%7.=582400-**&(%'%'%'&*!)".'7(>!;61'8#,#++---+(-)416264666512./,,/,92:191SK"+#F>.&.(<7E@:7/*.*51<7>4<.5)3&5*;.;08.bXZOC:6,:/8-3'6*0%2&2&4%6':*<.=1:0C;\Wppsvx|yq||wt}s{r~r}mxgs`nI\>\>[AVekzm}f~cjw|vzqyo|rvuwy§̹Կ̺ZM=ZM=ZM=ZM=ZM=ZM=ZM=ZM=XK;XK;XK;YL]P@[OC[NFYNJZPQ\SX_U^_Wfd\tibngqjxpyĊď~tnqujW{=A5+5+<3@8>8?:A==;;<;@>B@IAI@KAF<9=4<1;/:,:+A5JAG@A=6351@9C89+5#8';(=*=*;(;(:(9(9(6&2%2%5*8.80911&/%.%,&+'+),+-.*-%+$.'7$;7300.93<*1(,.002+.:>7=4:26/40325872-;582E?E?/+2."51?:E@=83-2,60:1:.9*5'5(9+<0<29/cYXN@84+91:06,9/5+4*4*5)6)5(6(6);0B9YTljqtx||v|yv~usp}kwdq_nI]>\>\CYehwozbu\x]ckppmp]l]h\g^k_qeyizktv|}ƷǿϼƷ\L<\L<\L<\L<\L<\L<\L<\L:A=E@GAH@E@B;6909+9*8(9*?3F9674;7C=OEH<3#9(:';)=+=,<+:)9)7)2#/#4*=3?6914+4&5&2%/$,$+%+(+(+-(+&/(6%:733%70;5A8C;D,626;3=6=8<7=6<2;19.6*6);/@6TMgeorz~||yxwsn}gv`p[mG^\FZ`a~evZiQhOmRtX{]}^x\qX`zM_PaUeYn`ug}j~mrtxyyz~ǹ˸ȶ[K;[K;[K;[K;[K;[K;[K;[K;ZJ:ZJ:ZJ:[K;[K;\L<\L<\L<]K=]K=]L<^M=^M;^O<^O<^O<^Q@^Q@]OB[OC\NE[NF\OI]OO^P_bTmdY{i^pg|t{{zxucMlFRA@A=E;H;G;E9A:@A0D:<731;9A?D?SLUJ:+9)7$7%;)=,=,9*8)4&2&2)9/>7>65./&6)6)4*1'.)-)*(**),','1)9&;GD=:<9:5807-6*4&3#5#6$8&;,9=9?9@8?5<2:.9-9,=1NHc_no|~yyyxtn}et^nVhE\8V^N>\O?^NA]OB^PE^OJbNYbQdcTqdZ}lexrwv}‰΂wlXwD_BTDPJPIHE>EBB@C@GBHDGCDA=?7@7=/:+:*9)8*;.?6FA=;BBAA;6JBXLK>@28(3#8(<-:*7)8+0%3)8/;4:5600+,'0,1-10312537486;-5,6.=0C-F)G+N3R9L3?@M_llzWfCS>P3D3A3>6<99834*/$2*.(72YT\ZXVA?HFB@<7706-8-9+7'5#8#9$:(=-;,6)7.=5NGEA501->9@:815120215283:2:/9.:.6*8+IB_Ynl}v}w~yxsk}dv^pSeF]8V=ZL]TRz_BWhC?EBEFBDAECFDEEAB:?4?3;-8(9(9)8*:-;3IE??=>782/A:ZPh[PCA35%6'9+9+7+8,0&6-;4;440/,-+--493;3=3=1>0=1=1>0A1B4K5N0N-O1X>_3HO\an_nWfP`DX8JAQ:G2:/22-8-;+:*:/2(JBkcLGPK;9;9LJ@<707--9)3':/D;GAC=722.;7:62.2-,-,,./3171:1<1>26)4)B:XRjh|}v}xzxqi{bt]oQcI`:X?[O_QNqX:Sf8]uEa|InSvY{]~`gll}m|o}ponllqqrroprtvtwï̫̾ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8[L9[L9\M:\M:]L:^K<`J<^K<_L=^M;_N<^O<^O<^O:_P;`O;aP>aP>aP>aP@8>3>19+7':)<*<,=1?7=:9903/24294MElah[QCD>63;7UQF@918-:,9(9(=)?'<&;&=*7(3(=4LFGAE@963073510+1-,/+-./1/4/81;1>29.3(;2NHa^yzz|{xn~ew^pZlL`Ia9W=YM]JGhQ1Qd6\tDf~Nu[chjnsttr}pnmllnnoolknrttwƯν̻ʤ[J8ZK8[J8ZK8[J8ZK8[J8ZK8[J8ZK8[J8[L9\K9\M:]L:]L:^K<^K<^K<^M=^M=^O<^O<\O<`Q>aR=aR?bQ?bQ?aP>aO;bL>hOKgNRbP\cWkjfuv}|xzƄ}uzlmY[DL/I5R4=0?1;+8(<,?.@1A7C=7485..30:60'5)UGwj[PC7<0;07*6+:0708263320112364<%6#9"9"9!865629%B(G&J'M3\Ehbu`lWcQ]P]MZ@M2==F7;/./(5';(?&>%9'8+VJ;2?8412/C@WSHA916*6(5%5$:(<(:&7%9*4&1%?5RJIAHB;62.411/-+22,/+.+-++-*1*4,8,=12(7.IB\Xww}vj|_sXlTiD\D^6U:VLZHC^K-Mc5Uo?b}Jt\glnrvzwr~m|i}ggikmmlh~ijosrxũʵ¶Ş]K7\K7]K7\K7]K7\K7]K7\K7^L8]L8^L8]L8^L8]L8^L8]L:]J<]K=^L>\L<\L<[N=]P?^SA`SB_R?`P@bQAcRBdQBdNAdLBjMIhKMdPYf[lnkw{Ђy~sqjba^JW>Q:L?NCQ@KF9=4;0:,6&A0<,6(A5F==57285715.6-8*<*:'6%;0SLZOE98*>.B3:-3+GB//5:6=,7BM'3&2)2(2'"*'/'/&)+7 .&7-A#;Xr-D]l_iZcU\PWHM?@84>7A7?17&2!6#;'<)8-7/E?;7316454DCLHKED;:04)5(4)5*1=3_Ysqxh}_w[uUoLfEc:Y;[?Y]i@;VF-L^6YuBgMw]}cgjnonm~l}i|h}feflmlk~gfgimrv|z]K7]K7]K7]K7]K7]K7]K7]K7^L8^L8^L8^L8^L8^L8^L8^K:\K;^L>_M?^N>[N=[N=\Q?^RB_SC]QA]OB_OB`NDbPFcOHeNHiMJgNQeS_g_tnny~ʣxy|{vji`]aOZFRHSIVEP?J;E9?:<::=8?7>4/8(8);.;4JF016;6A.<@N'4$,%(),+,*+((((+,$'%(%,;D'4CAR&6jubjZaW]OSBC<8>68,D5H6>,/)((-%:6TPHG5445==WUGBG?A99/3)6,7/70=3915.2-4.83?9E=J@A86-0*0,210303021201/00.1-4-9-=13$aP@`P@]P?\O>[O?[RC[QE[QG\OG\OI_PMcQOfTTgUUgUUgV\h]nlisv|ˊԘנʪ}π䄆vsjegS\GQFOHREQAK=E7=7:99<7@7A4?0>->-<+:,B6H?;20):26/6.7,8,7(8&9&:*4-4.A9OCH:5%2#@2>5HD135;7@4@ES2?)0#&$'13-/''&%12)*8:+1)13=R^=K[g^fV\OTMREI:;74?96,?2B5=17-3),#' %/*EC::,,35AB^]?:C;A9=39/=4@8@;@<=;>;A?>>::?=IDB9<45,2+1-311202020201/00.1-4-9->24%8+;0[Tzw~rdy[tTqNmFg=_=\EbTgAHp;3SH2Qa<]xEfNrZu^t_xc{g{gyfyfycxbybya|bzczf{h{h{e{a{`}``jnstwuynolSeYAPM2A>^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^L8`N:aP<`Q>]P?ZN>YOCXPEXOH[QO_UTbXYeX_iYcl\fk^glaildqokrty~ʅڌᎇןӭijy{ށzwsrcgU\MTGPCM>G-=0F:RGH?5.1)9181;0=1;-6'6&8+5-2+=4NBK=:,8*B67.>:/0164<8BNZLU>E38$&/1,,22**/.::37,29@EMXcMW=CADBF>A9=8988978391:2A:NHVSNNC@7295KIMLQRYZRQYV51>6B9@7?5B9C<@;?@8=9=?C:?58>=MJ93603+3,4.30210102/201/0/.0-4-8-?36'5(9.VO|yzocwXqOlFh@c9\?^KdZh35g;0WO8WgCa{KjPsYt\u^wbyezfwdvawav`x`x`{azczfzgzfzbz`z]|]~_gntsuqtiidQcUDSL8G@^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M9]K5_M5`P9_P;\O>ZN@XOFXQKYPQ`W\g`hnfsshysg{sg}qh}ol}pqrwv}z҄响㝌ڠulnqvlvismllgi^`RWFM3=16*4'6*3,70=5E9F9B3A2>20&720/.1.47?PX]dZ_OS.103,-EE66,,-.>@2537bh=B*2-4&*;=@E6:379=7;/043;;GFRS`cilek^a@>E@^[hgopjjKK=;40>7D5<4:1415;-7,6.8,4,39b:_6\AaNeWap/+_?0[W>^lIe}MkSt\u_v_xcycxbu`u`u_v_w_x`{azbzd{e|d|`y^yZ{\}^agmpsr{nrjexe[k^RbU_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N:^L4_N4`N8^O:[N>YOEZSMZTT_Zahbprmzu{u{qzpvpqtrxt}wz~τڋޖܙ͛~yl[Q>MBQIWRWUSRKM>C4:9<9;;9=8@8B6A0?/9,A65+.$I?g\dZUI<26)3):0;06,3)6-1*71;29/>0F5B39+1(4-31-.*.17EJV[]b\a9<9<+,JK89//57()'+XZ>B9=6:#(+<>AE49,21705(.37KNaehncl`i`lbkLLNJ\ZVTMMHF423/ACJJ1.3,3,5,4-4/4/3/02/2.1-0../-2-7-=1;-1$7,C=yv|qhx_rRlDc9^6]6\FcN`IMe5+VD0[Y@^lIe|NkRt[w_x`{dzcv`s]r\s\t]v^w_{azbybzb|b{_x[xYzY{Z~_ekmsus|rupnlfwe_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<_N:aP6aP6aO9^O<[OA[RK\VV_Zakgvso}z~|}w{uxvsys}x{~ĄɍΔ͚ǠɭŦmfJE2A4@4B9HDNNJK?C=?;=<;=:@8@5>1=0:0?64,1'I?cVh[eWOB>24)7,905,2+600,4/7/7.>1C4>04%4*0+3/..-.1478BEMRY^FKQW37FJ80=*7.:;ECHAB1/4-4-5,4-3,4/4002/2.1-0../-2-7-:/>01%7,;5sqvi}at[pPjCb7`7a;_LfO[~86]=0NF1VX@ZeEcxMjRr[v^ya{dxas]pYpWqXqXt\u]y_x`x_y^z^y\xYxWyV{X_dhloqmxjqij~cbv]_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<_N:cQ9cQ9aP<]P@ZPG\TR_Zaa_mtryx~~yyyuwww|x}ĂąȸоѻЬoT\GG5>0G?WQWVNO@C=?<==;=:=5:19080<5:3=5OEXM]OeXcUL>:-8.914-2,60402-5.<3C7C4:-3%5,.&0-/,3154-.24BFX]W\ouDJHM@02:=HK9>7?=F7B-8>J]gmwjrcn]g^kao]nYe\]PIJG74/0540.95D?JDIA@86/4/7166'/0<2=+60:>E?A443.5.6-4,3*3,4/4101/2.1-0../-2-7-9.?20%6,61popcx\pXnOiBb9a`P@`P@_O?_O?_O?aQAbRB_O?]M=]M=aQAcSCbRB`Q>dS?aP>]P@^QI[QPZSZeapsqyxz|~}xzrslotwv{̀ʋƖäƳ̰ϬϧϣУ˜˜Ѩg^FzgueH?QNccKL?A89:::97561;6815.B;<3I?XKOAdVcTXIG9:/6-7/6/4/0-2,70=4<07)5(7,/$/&/)1-2040516479JNY]NS8=6+90>=HS_`igrepbmcn`o]gSSF@854111/.3194D=B:?7<4908193667<4;4;4<6;59331/3,5.7.5+3+2,2,201203/2.1//0.3.7.?58,6,/&;7XW{me|\rPhGeCe;d9`NlRd=?P, C;&CG.KM5Y_CZjEcxMqZxbx`t\rYqYlSmRnSoTrXtZu]u[tXtWvXwWvWvUuTtS{[{]z^u[mUb~MXrCSj>AW0?U/`P@`P@`P@_O?`P@aQAbRB`P@_O?`P@bRBcSCbRB`P@fVG_QF\OG^TSaZad`omkvwwy{}}x|qukplonquv|~ՉӘΨǸźαתۥޥݢۤأѠǛӼ}dŋw}mVJa[rpZ[KL?@=>>@;;6664=883?86.>3K@H;]Mo``QH:5)0&6-5-0)5195=7<38.5)4*5*7.5+2+0+0,2,4.5287>@JLW[^b\d]eaiS[NVQY_gjqflZ`NT4:,5*6-9'5!-'67CPZZdbldmencm[hQZEE<7646355302/62>9>7;4:3818295:69;7:7:797965312,3,6-7,6,2+1,1,201203/2.1//0.3.7.<3=28.1*74Z[s}fz^vWoOiFf?b^QA^QA^QA^QA_RB`SCaTD`SC_RB`SCaTDaTD`SC^PCbUM\QM[QRcYbkdtqmvuy{y{y~x|nsei`gjnru}}ׇݗ۩ػؿۧϡÜkpo`RG]Umiuu__JL@DAD>@8:66=:;6A:707,>3=/F8j\i[[MB62(4+6-2,52A>GC=62)1'2'0%4*1).)/)2,7/=4B9-(43DCVX^bZaS[Q[FQHSOY\fmvntY_>D.5-42<2>+9'46EKWISPWW_^fck`iRYBI977175<8;;955160:3;290907183:6<8999997988874402+6-7-8,6,2)0)0,10121302/1//0.3.6.90D9804./._blwbxWsPmLlCf:];_IfSgDJl;4O>,=<':?(ED/FH0Q\U'B\/E_2Ic6WJ:ZM=\O?^QA]P@^QA_RBaTD`SC`SC`SCaTDaTD`SC_RB\PDZOMZQVbXcjcsqmvuxzz|w|symrbi]daglrx{ʉߕ夡䶵۪ө¡vqrcbWi`rmut[]LNCG@D@?=;957282918080717396:7:7;9:7:8:6845.3+6,7-8,6,2)0)/+0/222312010/0.3.6.8/F<913.,,fjygtbyTqKkGj>c6Y=^QhXeBBgC7[N;GF1AC-JH3EE-LU6Sc>btLlUpXnRkPiKgIhJhKjMkPmToWpVtXsUqSoPjMgJeHdG`D]AWy=Rq8Mi6Lf6Ne7Of8Lf7Oi9Sm>UH8WJ:[N>\O?]P@]P@_RBaTD_RB`SCaTDaTD`SC_RB_RB^QIVMR_Xhnf{tpxtxwxzy{syjr`g[c_gjrv|ƀΓ䭮绽߹׶еƱy|qvksimeoi扄~sredWYMNDE@@:7;7B=E?<3=3B51#0"I;XKN@=/8*6*3*42UUkh]XD>;3;2804-2,1+0)0'/$/$0#9,4'3):5CAEGBG@HDOOZVaVa^igoYaBG:<5738283=9CHSV_6?4;6;ADJOIM;A135195<8<9;9:77370;2;1:09082736475:8;8:8:9;7956/3,7-8.9-7*3)1)0)1-323322011/0.3.6.7/C:701-13jpqzft]tPmCf=d9c8^EdZmV[wE>dJ=aYFTO;KI4PI6GE.GP3L\8ZlFf|NmSmRlMhJfHgHgIiLjOlSnVoUtVsUnRjLfKcHaF_FZBX|?St;Pn8Ok:Rl=Wn@ZqCUo?Vq>WqARE5UH8XK;ZM=[N>\O?^QA`SC`SCaTDaTDaTD`SC`SCbUEaVP^Vcje|yu}yzyxyvyswjrcj[c]ehpv~ǁшәݣ௳㻿þŹx{tyvquleleoga[`[smyu{|yrpccSTHGC?>:<6A;:1C:TJ>26)9,=.?/B1C5@17-2/LM_]WSD?:48170939292:19/9,8+8)(3"@2I>D@;:7;:@7AHRV_Yb^g`iU[AE@>?;ACGJLTQYT]V^4:/5/37:=A;?4812429586422020404.<4=4<3;2837343438898889997755/3,7-8,:+7*2(0(0(1,424332111/1.3.6.91<3710-@CnukubqRiHf;a4^6b>dNi\iGFjF:]L<]VCXQ>RJ7OG4ID.DJ.GU2Sc>^sHgMjOjKgGgFfGfHgJiNkRmUmUqUoQjNgKcH`E_F^G\E[~DWxAVr?Uo@YpB]rG^uG[sCYtAXs@NB2QE5UI9WK;XL\P@^RBaUEbVFbVFaUE_SCaUEfZJh]Yngwup|x{ywxvwpujoah^f_gempx}͉؏ؙ֪֡۴ߺɼĻqqqtpopfewhenj_Yd_ZTf`snzv{wwshfZWRNHB=6D=;4G=\R;0<07+6(>.D3B3A1A386>>CCB@=7817/7/:393:3;3>5A5E8G6-;%J8L==50+009>AJKTU`Ze]eYaLR>@4/7/;9@@CHDJBI?F5;26368<7914/2142095740.,*0,3.3,=5=4=4<3:59565655757576866542.1+7.9-:+7*4&1&1(1,425342211/1.3.6.;34+:520UXpxcnZiI`Ef8b/]5bBhLePYj5/^G7XK:UN;[P>VI8M@0JC0@F,AO.K[6Xj@bxGfJhIfFeDcBcEeHgLhOiRkSnRlPhNdJaH_F_H_H_H_H]~G]yF]wH`wKcxOczN]uC[vAZu@JC3MF6QH9TK.E6>-2"7'E7E?973.50;5=5<4=4;4925.4+5)8+<,?-S>G2<):-=2;57443KNMRPUTYY]VXMOD@5+7+7/52242618.64>3;5?9B4>+5(3/9-35759./*+0.515/<4=4=4=4;6:676664635253455411-0(8,:+:+8(4&3$3&4*5052423/2/2,4,6.=4/&>935bgoy[iNcC]Eh:e0]6aGhJ]CFR,#VI8SL:OH6[O?UI9F?-HF1>B'@J(IU1Sd:_rEe}IgJeHcCaBbCcEeHfMhPiQlPkMfJcIaG`F`H`I^G^F_}G`|Ia{Kd{Mf|Nf~N]xC]z@^{CDB6FD8JF;PG>RH>WI>]M>_O?`Q>aR?`SB_VGbYRgb_ojnso~wqzt|yywppgg`a\_`bfhopyz̄֍ߖ眙栞ݡף٤ڦإץԤӥѣ͢ɢȟÙ|rn}igld^`fZZkYUrWP}WNWORIZPXPZSkdyr|uqus_]PLEAZT712*6*7(7'7&9(;+<.?18.<2?4;05(3':/@590907.7+7):*?,A/=.@4E:G+?*?)?(?&?$<$<$8'9+<,9+5.545;984:3;4;5:595735435465454535/5,5)8,9*9(9&8&7%6%4&5-4/504.5,5+5*7,907/:6?BmwbsSjIcKj6[6_cNjIV^$"D, ?:'HE4PMC/?G/BH&EK%KS.S]8[kDavKd~NdJbF`Ba@cBeFhJlPmQlLiHgGfHfJeIcHaGdJdIbGc~GdJdHe~Ga}C[{<\=_B=?4?A6FC[K>]M=`O;`Q<^SA^VIc[Xhcinlysotpvptppmgfaa]^\\edkjtr}{φٍ易囖ٜ՝֞מ֝՜ԛўќ͜ʛǚēxtk|mdif]^f[YiZSoWM{UJVKVK\RYRXRfaqjvo~wusgdUSZU2,/%7)7&7%8&8';*;-=/9,9,:,:,9+9+8+8,;1908.8,9*9(:&9&6*80=5@8A9?7<4914->6H@OGQINFC;7*7%8$7)4,//+3)7(:+@*A)A&A#@!<=:: 9%;);-9197:;;94:5;4;5:595735235465464716/5,5)9*9*9(9&9&8%8%6%5+3+4,5*5*6(7)7*;14,54TYes[pGbIhAd;`3[;aMmLb8?S*$A5'69(;<,B@1DA0@?-=B.>G,=CKP'\b_?bB69.:<1??7DA:KB;OE/>/6(/":.8-7,8,:+:)9&7$5)6,8.:0=3@6A7B8:1@6E;FG=@67+6%6&7,4/03-5+9*<';'=%=#;!:77686$8*;2<6=8;::94:5;4;59585735236475565616/5,4(8)9)9'8%8%7$7$6%5'4)5*6(6(7(6)7+<21+88kr]nPi<[Hl7]>e5[>bVq?Qa#(L/);7+07'37&9<)@=*A<(@>)BB&?FXa4s~Tdw`hSa}LaG`C`?a@c@hEjJkMlNnMkHhHgGhKhKfLdJeKdJcFdGfHfGeFbBcDeEhH25*58-;<4A>7G@:KB;RE.>.8(/!6)5)4(6)9+<+=*;):-:/909/:1;1<3=3D9?8:8794:5;4;59585735447476665726/5,5*8*8(8(8&7&7$6$6$5%6(7'9(9(:(9):+:13.HKoyVjD_<_Ag3\8b>cMlOe0=J C1-11'.6'4=,=B.B@+B<$E>$HE$U\0p~Mr|mjW_{J]~E_Ca@bAfCkJlLmOmOoNlIiIhHiLiLhNgMfLdJdGeHgHhIfGdDgHiIlL-3'36+891<;6B=9G@:MD=QG=SI=SK>UNDZUQa^eigumklkjhb`XVPPQQXY`cfjorux|Ђֆه؊ً֋ϋ͉̊ЉшъщЌϋȍ~wmYjSZnVTc\RZaOZ_HeZDxUBLDTRSWRY^dejkluqunoh~v{~l`?28(;(='='<';':'8(7):/8.8,9+:+:*9)7(9+7+8,7+7*8*<,>-<0=0<2;/:08,7-5*@7@5=49.80;1:25,/%0)2025/8-9+;,<-?.?/@/@/A/?-?.@)9)8+70:6=8=774394:5;6:79585654448485676726/6,5*8*9(9(9&9&8&7&8&8%:&;'=(=(=*=,<.7/;8^eaqPi<[Ai4_4`1YKlYq>NZ%-C),:2/-0)08+7@/:B+<<"A<UH(`[5{Slwo[aK^F`DcBeDjGoNpPoSoSoNlIiIgGiLiLiOhNfJeIdHeIgIhHgGeDiIiKlN+1%.4*470893>:7B=:HA;KD18*4&8)<,:,:,;/;-:/9+5+5(6,;/>4?3?6>37.,#+%-*02391;0<0?0?0@1@1@0=/<-9,9*7/8IE4>1>0@/?.$?%@(@*=-;196U\^qGc?a:a7g3b8`FdNa@IS12A64@:<:46?56<7179+4="9CSZ.PqŊˎ̒Í}{egQ_E^@c@iDoJsPsSqUoSnNkJgGeEgJhKiNiNfKdIdIeHgJhIiHfEjLlNoQ&.!(0%-2+13.331764:95<;6GD=DD*;'7$4#B2OAN@B47)7)>/;+:*8(7'6'6(8*8+;.;/9-6*7,<1<271888=:A9B4A/<,;,:/;19384857563657376;9<69453376;9869796:7877767465:5:7:8995827/7+8+:*9+;*:*:(:*;(9":"=$>%?(?+<.81<89?48E26C41=:)>E&FU*bs?aˌɋËz{efPZ|@^?a>hCoJrOrRpTnRnNjIfFdDfIhKiNiNfKeJdGeFgHhGhGeDkLmOpR(0!'/"(-&).(.0-3317839:4==5?@8DE@JLKORYVXeZ\s]^}YX[Y^]eennwx؄⌌솇䂂܀ւӃ΀ȁǃ˄ΆЈӋҌϊŊ}xwozkegf]Xm[Qm[Mi\Lf^Kd_IeaHhaGo_FoP;UA]OaYYXQTS[\`heYPD<707/:1=/;+9(:&9(:)8)8*5,5,/%3)8,>/@/@-=*9'9)0"WJK?/#=12<07,8->4C5;687899:97877;=<<::8785747575979899::9;9<9<8<7;6:8:9:;9;5907,8+9)9+:):):(;*<)9#=':#49%D3?61,^eVgIb<\1X0Y6cBiYoFQo33N3,B?6>C<@78@-1L/3K2.A9&DJ(Zn=~_włʌ~nfRXvBY{?]>cAiDnImLlNkOlNiIfDcBcBfIhKfLdJgMhNgKfHeEfEjIkJqQrStU*0")/#).').(-/,130561782;<4>?7AD=HJGOPTSUaXYkZ\u\Z^]dbkjut~·ߋ鍍년 ؀~Ҁς̅Ɇȇˉ΋ό΍̎Ȋ|x{stknlb`e]Re`Me^Kf^Kh]Ki\Ij^Hk_Gn^Ew_G[CYFZLVPRSQXX_USLE>9606/909,9(8&8&8(8)7)6*4,5,0'5)9+=-A/@-<*9(8)<.REH<4(:-:,4&=,<+;*;*:)9)8)6(7*8,7,3)1'1(7.<5DG8>/9/:0=.;1<6?5:3622:8EBIFDC?>:7989796858598988788999:9;9<9<7;6:596888;8:59/7+8*:*:*;*;*<)<+<)9$?):%5:';/:2<=^gPdA[8W6[;`>dIe?L?>_:2G;/:>08>2F<:R>=N0.S8/VK5ciEx[p}Ɓ}xr^YuETp=\{B_@b@iCmHlKkLiMiMgGeCcBcDgJiLhNgMiOiMiKgGgFfElImLpQoRtU-1"-1#,/&,.)//-11/34/45-9;0<>1@B7EHAKMLQRWUUaVWi\Yt^]fdpnzx΍ߐꐎ튉燄߁|}ȀÆLjƊʌɌɌŌ|v{pujpndbi_Vc]M_aL_aKc^Jg\Jl[In\Ho]Gq]EwaIxX?S=VDXOUSOTMS><<784716/6.7+7(7&8$8&8'6)5*3,5,3(6(9)<+?-?-<+8(5'J=F:A584627272728596;8;877888:8;8<8<8<8;58475777:7:48/7,8+:+;+<+<+<)<+<)9&@*9$6$;+0'40PT[iJ`:U7V@]HfHdNa89e?6R@2DA09=,57)>6+K9/E-#R=,g]B_t{z{xm\uKHb5Nh8[xB_}?c@hDlGjIhJgLfKdDdCcDeFhKkNkOjNiOiOiMhJgHhHlKoMsVsWvY24&04&01)01+12-23.34.46+9;-;>-?A3DF9IJDMONRQWSS]XVd\Zoda~nlzwÌ֑㔑ꓐ뎋≅ق||~Ë}{vyn~rgmmaak^Vi[Pc\J]`K]aJc^Jh[JmZKqZJtZIv[FsWAxR;Q=YF[PTPFI>A2/5/51605.5+6)8)7$8$8&9'6)6*3,6-6)8'7&:(>+?-;+8)4'UI<18,B45%=+=+8(8'9(:)9)7)6(3'6*3)2)4,:3>7?9=:45596;5;2:397=<@UVbbmjidVQA<634/61717182859697:878898;9<8<8<8<7<5:686797<7<49/9,9*;*;)<)<+=);*<(:'@,8&8';-+"54`gTdG\-=@-@C.DG4IK>MNFQPNRRRVUSYX]a_lkius}njӕᔑ␍܋ӄā}||~zxsznzrfjm_^j[Ti[PjZKfZJb_Lb_Le^Li\Kn[Lr[Kw\K{ZG~UAR=RAVFRHG@88331-3/5/5.3,3)5(9(8$9$:&:'8)7*5,7-;+:)6%8';+=.;.7,90\T=55+A53$:(?+:):*:+:,;-:-8-7-3*1)1+71<7>:;77475;<8>7=7;7;797:::=:=7;2;/8*:*;*<)<*<(;););(=*8'9*8-/)@ChrM^H[DYH[O^T]TWXUdM?OL9LG4JE1FD-?B'=D#>H#KV.\g.==1==3==5;<4;=2;=/?B/@D-CG.FJ3KL:NOAQQIRRHYWJZZN_^\gerqn{yďяӍϊǃ~yzwyv{v|y|}}x|tzrvksrffm_\j\Sk[NlZLl[Kk[Ki]Mg^Mi]Mj]Mn]Ms^Mz]MZI`OVGN@J=@76.1+1+516/5.4-2)4'6&;(9$;$;&;':)9*7,9->,;(5#5#9)<.;/7-?7[TIA:0@36&3 <)9'7'7'7(7)7*7,7-<3:293<7>:=9854196<9::8:>@PPbcppheTP=61+40;7=:;7;5:294837373556669697;8<8>7=7=6:8<898:;:>:>7<28TXepK\I]J\M[QZVVZR`RPI7HM9NI5H@+;567>O%Lf6lTw\edfkt|mn}\Q`Cg{HiFlGmGjGfGbGcGhJlMoPnPlMiKjJjLsTsUsSrQrOsRwUzZvZu[sYRK;RK;RJ=RJ=RJ=RJ=RJ=RK;UNXQ?YR@[TD\UE\UEb[HaZHaYLbYRe][kaiqftuj{zn|pss|puj{mbre]jc`k`_g_\c_Z^^ZY^YUaZRbZOe[Og[Ki\Kk\Ik\Gm]Fm]Fj^HicMqfTqZJuOBWJ\PYLZLN=E4<,7(8-80411-6/7.7.7.7.7+6)7)8)8)9)9)9+9+8+;,;+>-9(1 2!9*H9=,2#PFJ@F<:7487::::776493=7F>B9:/4(1&5);/?3:0<3?7?:=;;9899:7:8:8:999797959540516576899:9:9;;>9;99=:A=B;A6?1:)<+=*<(:&:%8&8&A0<-/#/&LJmoloVZLNNOQMUOXO]RaTjSWZ/:M7FTa)~Poyxs~ahL\mCYdBT]BHP9?D0:=,@C2<@1:>0]sBgHpKoKlGjIiKgJlPmSoSlPmMkJmJmIqLqMrNrPtRvUyYz^ycmZbOWN?WN?WN?WN?WN?WN?WN?WN?XO@YPAYPA[RC\SD]TE^UF_VGd[JcZIcYMcYOf[Uj_]nbdpdhreltgpvirvirsfmm`gg[_bXY^[VZZRYVOWTKXTIXTH\VH^WGcZKcZIf[Ig\Hi]Gj^Fk_Gh`IcbMngTv\MSFVMVORJQEH9C0=,9)8,8062406.8.8.8.7-8-7,7+7+7+7+7+8+8+8+:,<.>.9(1 2 :)>.<.:-4*4);0E:OBQCOCF?@;<5;4=7=88633777879787797=9B:A7?4:,6'5&8)=-@1A4@6@7=8:777567:6:6<7:89879595:592:3:5;6;8;89999:;;;<=?=A;?6=2;-;+=*=+<);(:&8%:%9'8)5*<5QPee^aMMNLTMYP\Q^S^S_VfQ`_/Sg*^r3zOn|pbjHauBTe;JX7FP7?H59?158-:^tEgHqMpLnHkHkLhKmQnTmSmQkLkHlHmHpJpJpLsQuTxXxXx^mXbQYH]TE]TE]TE]TE]TE]TE]TE]TE[RC\SD]TE^UF_VG`WHaXIaXGe]Je]Hd[Jd[Le[Qf[Uh]Yh][i]]j^^k__k__i^\f[YbWS_VQZVMWTKUQHRNCQMBSOCWQCXRB^WG^WEaYFc[Fg\Hi^Hk`JhbLbaMngUy_PXN[UVQIEE@@7>1;/8+8+9,;/:/8.7-7-9.8-7,7,7+7+7+7+8+8+8+9+;,>0>.:(2 3:&>,>.?08+2(4*<0F9M?ND:643204297=<<<;<9<5:27265899<:@:8-:+6'4%5%8(<+=.D5C6B8=79464557969696977779595:3:3;4;6<6;8:999889:<<@>B=?9:17+7(;,<+<+;):(9&7%9&z6#y6%9,F=SOWTPOIFMHSLYP^SaWaW_VePsrFzVn{|[[oaXIaXIaXIaXIaXIaXIaXIaXI_VG`WH`WHaXIbYJcZKd[Ld[Je]Hf^Gf^Ig_Lg^Of\Pf\Rf\Sh]Wh]Wh]Wh^Ug]Te[QdZPc[N]YMZVJVRFRNBPL@PM>TN@UO?WQAYTA[VC]XDaZGd]Jf_LfaMdcQleUv\O[Qb\ZXFD<:<8;6:08-8):*?.?/9-7,8-9-8-8,8,7+7+8+8+8+8+8+9+;,?1>.9'3 38"=)@.?-:+7*5*7+:.7<380625587765615(7'6&7&7&9(:):*A1B4A7?8;5957687687878868694:4;492:2:4;7:8:89799<:@3B%:F.=F3;A3:=2:=4<=599-?@2<>39<1<@29B/?L2PbNK:NK:NK:PMTQ@VS@XWC[ZF]\H^]Kb`Qf^QmWJ[Ricc`MMBC;=8984709+=)C+B+;+7)8*:+9+9*9*8)8)8)8)9)9)9)9);,?1>0:(6"47 =&B-;*;,:,9-8.:0<0:49<4<3928384838256<494:7:9<76210(6(:(:(:(:(:(9&7&:+;/>3?7=8;896876666667484:3:3<3:2;2<5=7=:><=;>=@?1;=28;0;?18A.>K1Pb8770;.?+C*A(;*7(8)9*9*9*9*8)8)9)9)9)9)9)9);,?1=/<)9$65;"A*B.@/;,7*2(4+;0=85:3<6=8>:>;>:=9<587:9>=>=>962/0'9+>*>*>*=)<(:'8%6%7);0=3<5<7;8;787757585:4;4<4=4>5?7A:A;A>A?@=B??:@8=38-5(5'8(<*<(<)<(:&9'7%6$6%}:)t3!~9*OAYNRGOEVJYN[MZM[M\Q_T`WgW~xXy^r|ZU`B;E,/;%0;*0<.3=24<16<2?1:<17:/:>07@-=J0Oa;bxIkLuQuQtNqNrSpRrQsPrOpKnJpLsOvRyX{Zz]x]qWgO]EXB`NYISzCg^Og^Og^Og^Og^Og^Og^Og^Og^Og^Og^Oh_Ph_Ph_Ph_Pi`OjaPjbOjbOjbOi`Oi`OiaNiaNiaNh`Kh`Kh`Ih`IhaGhaGhaGf_Le^Kb[I\WDWR?PM:LI8IH6IH6GH6GJ9GK:HL;IM;A@CAEBC@A??1266:<=;;9714.4)<->+>+@,>+>(;':'7%7'8+8.7094=9>;:79595:4;4;4=4>4B7C9C9<3:/8+6(7'8):):(=)<*<):'9(7&6%}6$x3#x5%B2UEWKPCPDZLYMZN\Q\Q[T\U[VbUkbEV`=JS4=G,6?*2=,4>35?66=68?8=B;CF=EG/;9*78*=>0:<17:/:>06?,=J0N`:awHkLuQuQtNrOrSpPqOrNqMpLoKrNuTyX`~az]qUfL_G]E^IbPYISzCh_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Pg^Oh_Ph_Ph_Ph_Ph_Pi`Qi`QmdUlcTjaRi`Qh_Pg^Og^Mh`MiaNiaLiaLiaLh`Ih`IhaGh`IgaKf_Le^Kb[H\WDUR?PMSQDSPAXLYSRODE::75;3>/=)8":)8'9(;*;*;*;*;*:):):):):):):);,;0:.<,>+9#37?'9#;)>0<18.7/<5?==B?DCEDC@?;7501./,51:6<6:28.8,:+=->+?,@-@-A+>*=*;*:(7(5)5+90?9C>=7;5;5<4<5=4>5@5D9D:C;A9?:;685937-8(5'6':)<*:)8&=*<+<*<)~:'|8%{6&{6&y1#8*G8SCPBL=RE_SWLYN[R]T]V\VYT^QaX;EM(6@8A&>G26BE*;:&78(=>09;069.:>06?,F7GK=IK=AE4KJ6\Q;aE/J9j]g`USFEA@A=>5=0=-4%5&6'7(7(8);,=.<-<-<-<-;,;,;,<-2(7.;/:)7"579"A-;+6)4*6/<7C?HEDEEHCC:661808.4+9/9.8.8-9,:+<+<+=+=*>+?,@-A,A-@-;*:(7(6)6+8-;3<4=6=6?8A7A9B6@6@5H=E;A8;25/3-1*2+9-;*9+:*:););+<+9'}8(|9(|9(|9({8'y6&x3$w- A4OCMAL@QEUJRG\R\RUMTLZUXSWTgZ]T5IQ*AK(BK,>H/7@+2=-4?14<1HPCZ^PW[JMO:DF.AA'==%:;)>?1;=2:=2;?14=*;H.PbF7>F7=E6@F8>E5>F1HL5MI0U?'Q:sbcX_ZUTGG@>A=?9:09+=,=.>-;-;+9+:*:,:+:,:+:,:+:,;.?5B:B7=/6#1125#6(;/A8E?IDJFKHCAEDB><39/=0?1=0?1>2>0>/=/>.@.?,=*;*<+=,?+>+>,>,@.=-:,8,8+8-:09/<2<2?5A7C9C9D9E8B6A4=3:06/5.4,7,:.=,;,;+:*;*<*<,~;*|;){9)y:)x9(w8'u6'w4$4'D7NCK?J>QDTIRGSJXOUOVP]XWRSOcT]W5Xc9_jBZfBIT66C)4@*0:<19<1<@25>+;H.PbMKD63?3A4A3A4;,:,8-7+6+6,7.:/;/<,;-;,:+;+;+<,};+z;*z;,w9*v8)u7(t6)v4&;1FEI0?C(=@#:<$89';<.8:/9<1=A36?,MK4>4>4>4?5?5?5>7?;B>D>F=FM@PDSHPGMGIEGBC?A=B=FBD??7=0>.C0G3I6F4E3C3B1A0}@.zA.|?-:,8,9+:,:,;-;+;+:+:)8)8*9,;/=/<0:/8.9/:.:.:,9+8*7)7(6)6*7+8-9/<0<.<-;,9*:*~9*}:*};+|:,z;,y;,w9*s8*q6(r7)u5)D8H=K?H:IB)=A(;='78(:;-79.9<1=A37@-NKB1=I1?G/LG1S>+g=-ZL_S>43+?9XUigdeRUJNNPIAF<@6>4@6D:G=G>JAJAJBJBKCKCKDKESRTTSRROSLSLULUNLHIFEBC@B@C@EBFDJFE@>7=2?2B1E3G4E3C3B3@0?1~?0z?/|>/:.9.9.9.;-;-;-;-9*9*9+:*:+;-<.;/;/9-9-:,9,8+8*8*8)8)8(8)9*:,:-;-:-:,9+8*}8)}7+|8+{9+z8,y9-x:-v8+q5*o5)q7+t9+H;IC-B47@-;H.L^8_uFiJtPtPtNrOsTpQnMmLpPwY|az`rXiQZA\EaIeMgMgKhJfLcPY{IRtBi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkaUlbYlbYlbYlbVlbVlcRlcRldQldQldQlcRlcTlbVlbXlbXlbXocUnbRkbQlcRlcRkbQg`Pd]M^WGYSCSM?MJ;KH9GE6EB3?B/;H.?H-OC-a=-E:XRNJ,+:9=;SRpnvvehX^^_UQPFG@C:D=G>GAG?HCJBHDJCJFKDKGKGHHGIHHGGHDHDGBFBBAABBABBCBB@A>A?JGC?<6>3@3A0A0C3A2@1?1=1<0<1=1=1;1;1:3;1;1.9)9(:*:+;,;+;,:+:,9+7)~6({5){5){5)z6)x6*x8,w9,s8*p4)o5)r:-v<0M@KN)?O(J\2_rEk~QexKXj@M_7@Q-6E&7D*=F1=D4:>07;-8:,:;-68-8;0>B47@-9F,I[5[qBeFrNsOsMrOsTpQmLoOsUx\z`s[iQ`HYB^GeMgMfJeGgGhLaNXzHQsAi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkbSlbXlbVlbVlcRlcRldOldOldMldMldMldOldQlcRlcTlbVlbVocUmaSkbSlcTmdUlcTi`Qf_Ob[K^WGXQARLB>@9C?C=C@D?CAD@ECDCADADDFGHIHJIIIGHACADBEBEAA@>=:=:FF=<83;2@4?1>0@1G]/AV-7H$1@!6B*=F5PK8MH5ID1DC.@F*DD([B,TG\X>A/3IN?E;>;FBFBB>>7D=D=D@EAEBECDEDF?C@DBEEEGGFFBC>?BD@C>A=>>>A?C@ECBB9850;4?6>3=/?2)=C5?>@=@=C?B?>:9370:0=2>3>2?2?3=2;393938192;0<.<.;-;/:.:.:.~:-~:-~:-~:-};/};/};/};/}90}90~80~8.7.7.7.~8,8,~8,}9,|8-{9-z8,x8,x8,x8.x8.w7-v8-v6,t6+s5*q5+m1'r6,n4)m3(o6+m4)q8-I=SHSJRGRHPHQJQKRLTMTK[NcQo_HYU:MV7O_;j~YbxQYoHUjCRg@Mb;IY5CR17D&4>#2:#6;'<>0@B5@@6<>358-39-4:.7:/9=/;?.=B,%Q?)kP=XGNBE=D?WVTTQQPONMMMLJKJTTHG=>=:B@EAB;>4D9E9F=G>FBDDAEAEBFCDCDDEDCFDFDFDEAD@B?A>A=A=A=C?E?C<>6:090:/<0<0A2~@3~>4<3:3918190;.<-;,;,;-:,:,:,9-9-9-9-~:/~:/~:/~:/}90}90}90}90}90}90|90|90|90z:0z:0y9/y9/y9/w9.w9.w8/w8/t8.s7-r6,r6,p6+p6+k1&q7,m4)l3(o6+l3(p7,~H>RISLQJPJQLPMQNSOOGSH[K{ePsiPhkLfqQgxT^tMXnGPf?La:K_:K\:GV7CP4>2;=04:03;05;16<0:A,>D*Q[9^mDkRpRpSqRsSsVx^|exakT`I]F]F\E`IaJcLeNdMbK`I^I]LRtBIk9i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTnbTqdTo_Pm]Pm_RqeYog\ldYhbVfbWpl`{xi~{jyizubpiVe`JTT(MB.S@/U8(]7*l=3n70u91~;5@:IBPJXPZR^YSNGEB?DBFCD@@:A;CG@GCFFEFDFCDCDCDCDDEEEECECDBDBD?C>C=C=C=C>E@E?B<>5:18-9,;-@2@1~>2=1:19181:0;.;,;,;,:,:,:.:.9-9-~:/~:/~:/~:/~:/~:/}90}90}90}90|90{8/{8/{8/{;1{;1z:0y;0x:/x:/x:/x:/t8.t8.s7-s7-r6,q5+o5*o5*j1&o6+m4)k2'l6*i3'm7+}G=PIPIPJQLRMSNUPVPWO[P~^OtbNoiQorUlwYfwUQeBK_:EY6DU3EV6GV9GT8ER8?I0*7;*:<.<>0;=/9;.6<25=26<26<0:0=@-=C)MW5Zi@f|MlNnQqRuUtWz`w`nWcL\E\E\EZC_HaJbKdMcLaJ_H]H[}JPr@Gi7i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTnbTrdWoaTm_Rk_SkaWlcZle[jf]jf]xtix~r}zg`cNOT>DG2FE1HC0F=,L<,VC4P9+R6*V4*Y5)\6+a9/e=1m=1KBSJUONKFDABDCFF@>A?B>E@ECFDEDEDDDCDCDDDDDEDEBFCFBEAD>E>DDA8;18,9+<-@0@1~?0=/:1:/9/:.:-;,;,:+:,:,9-9-9-9-~:/~:/~:/~:/~:/~:/}90|90}90{8/{8/{8/{8/x8.{;1y;0y;0y;0x:/x:/x:/v:/s7-s7-s7-r6,q5+o5*o5*m4)j1&o6+l3(h2&k5)h2&l6*|FG2:A/9=,9=.9=.8<-7;-7=36=56;46<2:<1;=/bxIjLnQsTwWxZ{ar[eN\EZC\E\EZC_H`IaJbKaJ`I^G]HY{HNp>Eg5haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTrfXth\sg[mcYjaXle]snhzwp~wz{kcfSOR?GJ7EH5BE2BE2EH5KL0A9,A7+@6*F4(S5*qB8PHPKIGGIEIBE@B@BBACBEAEADADADDDFDFDFDDEDEDDCFBFAF>E=E=F=E=F>A:C;E=B9>39-;..=-;/:-:-;.:-;-:,:,:,9+9-9-~:/~:/~:/~:/}:1}:1}:1}:1|91z:1|91y90y90x8/x8/v7.y:1y:1x90v:0v:0u9/u9/t:/r7/q6.q6.p5-o4,n3+n3+m4+j1(m7-j4*h2(j4*f2'j6+}D;NGNHQJTLUOWPYR[Q{YMv\OkZJ]UBYXDY^HOYA?K3:H/7E.4B+5A+8D.=I3CL7EN9BK6?H5.5<,4:,5<45<56;56;49;0:-;@)GP1Ra:`vGiKoRuVyYy[x`nW`IZ}C[~D^G^G]F`IaJbKbKaJ`I_H^IW|ILp@Bf6haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTkaUndZpf\lcZkd\rmg|ľrfcTPQ?FI8>E3;D1:F28E38E38C2:B34(P:/e?6EAPOX[QVCIFJEFFFEDEBDBD?CADDDFDFDFDCDCDCDCEAFAF@F=E/?/>.=-<-;-:-;.:,:,:,:,9+:+9-~8,~:/~:/~:/~:/}:1}:1}:1}:1z:1z:1y90y90x8/v7.v7.t8.w8/u9/u9/s9.t8.s9.r8-r8-q6.q6.p5-o4,n3+m4+l3*j4*h2(l6,i3)f2'h4)e1&i5*{B9MGMHPJTLVOXNYO|\Qs\Nk[L`WFVSBPSBJQ?@I64@,3<+2;*09(09(2;*5>-9B1G4:F2:C25@/3>-1<,3:33954954928919;.;>-;@*CL/O^7]sDiMpSwYyYwYqYfOZ}CX{A\E]F]F^G`I`I`I`I`I_H^G]JV{HJn@Ae7haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlbVj`VjaXkdZkg^upjμzym]_YIKL:@E1;D/>J6=H7=F5;C4;>5:;3983880==3C<2N71a84HH]_`dWZQSNOMKKJHGFDDABBCDDFDFCECEBDBBCBDCD@D?F?E.>-=,<,;,;,<-:,:,:,9+9-9-~8.}9.~:/~:/}:1}:1}:1}:1}:1}:1z:1y:1x90x90w8/t8.s7-r8-t8.s9.r8-q8-r8-p7,p7,p7,o6-o6-n5,n5,m4+l3*k2)i3)g1'k7,h4)e1&h4)b0%f4)zA8MGMHPJULXNYOxZOr\Nk^N^WGRPAKN=CJ:9B12:+08)17+17-06,/5+/5)08+2:+4<-9D4;F5=H7-.800621622717829;0:<.:?)?H+KY5[qChLqVw[wYsVgP^IUx@WzB[~F[~F[~F]H_J_J_J_J^I^I]H]JUvIJk@@a6haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlbVpg^ng_lgatqj}ub^\GKM7CH2AI2AI4@G5BD7AA7B=9C97?:69<5>?7B71J.+d66QRginm\\ZWVSQNLKHHCDBCCFDFDFCECEBDBBBBDCCBC?D>E>FD69A208+/7*6<247058157247025.06,08-19,6A3:E5=J9>K9-,6..400511606718:/:<.:?+WzB[~FY|DY|D\G_J_J^I^I^I]H]H]LStIHhA?]7icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSjcSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUldWibZgd]vsnʵƶibbFEH-DH/CG0FE1GD5F<3C60F42H:9>=9>?:B:7I75cGFjjœ譩ҋtn]XSPONJLFKFKEGIKDF;>>@GIDG:=@@@@A@B>C>BA9@9A9B8@5:.8*=0>/>.>-=,<+=*<,:+9-9-~8,~8.|8-|8-|8-|90|90|90|90z:1z:1z:1z:1y=5w<4w;3u:2t91q8/p7.p7.o6-m7-m7-l8-m7-l8-m7-m7-i2+m6/p92o81k4-g2*g2*h3+e0(i7.d2)]-#`0&_/%b2(s>6OJPKQJRJ}YMv_QfYITN>DE5>E5:C25@04&DR1WlChRs]w_rWkR[~DXyDTu@Tu@WxCZ{F[|GZ{F^JbNbN^J\}H_K`L^~MTsJFd@2I:3L95K<9?:7BA?MHE]RPyjgβſ쳪͂|c^VVRSHMADDEEEHHJKEF<><>AC????A@A@B>B=A<@9A<@;@9B:C;A6;18-=0>/>.>-=,<+<,<,:+9-9-~8,}9.|8-|8-|8-|90|90|90|90z:1{;2{;2z;2w<4u<3u:2s:1r90n8.o6-m7-m7-l8-l8-l8-l8-j8-l8-l8-k6.n70o81n91l7/i4,g2*e3*c1(d4*_/%^.$b2(^.$`0&p>5JERLXR~XOrVKdRDQJ:>?/:A16A05@03>04<14<15;17:379477577557246116//6./7,.9+1<.4A08E49H58G44E24B1.8/.5..3--2+23+46+8:-9=,7?(DQ3WlEhUt`wbpYgPY|DWxCTu@Tu@VwBYzEYzEYzE[|G_K_K\}H[|G^J^J^{MSnKF_A9R4icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUneVneVlfZed_y{xشğl`gEQX7DG,DC.JD4LD7KA8I>:C;9SJKia_wvecBEDIRVUTMKDACAFEEFDDCD=?>@@?@?B@B?B=A:@:@:B:E/>.=-~<,=-=-9-9-~:/}9.}9.|8-{8/{8/}:1}:1{;2{;2{;2{;2z;4x<4t;2q;1r90o9/n8.l8-l6,k7,l8-j8-j8-j8-j8-i9-j8-j8-n91m80m80m80m80i7.f4+c1(d2)a1']-#_0&c4*\-#_0&sD<}PJVP~YQpTI^J?OC7?<-46(2;*0;+1<.2=/4<14<15;17:379479668357257227007/08-.9+0;-2?.6C27E48G48G49F54>33:2/4-,2(/0(13(57*6:)6>'DQ5YmJkZwfwflZ_KWxCWuCTr@Tr@VtBXvDYwEYwEZxF]{I_}K]{I]{I_}K^|JZwKPgJAW@3I2icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUneVneVneVneVmg[jkfڴefmLMQ6FH0HJ5KI:HD9D@7OGDj`_収cd@?PKTMPHF@GBMJKH@?>>???>A?A?B?B=B=>9@:C=E?E>A9=5;2<1=0>/>.=/~<,=-=-9-9-~:/}9.}9.|8-{8/{8/~;2~;2|<3{;2{;2{;2z;4x<4r90o9/o9/m9.l8-k7,j6+h6+i7,i7,i7,h8,h8,h8,h8,h8,m;2l7/j5-i7.j8/j8/f4+a1'e5+a2(].$a2(b3)Y* a2(yNE\VvWRiNGWC:I<3@:.:;-8<.08)/:*3;.4@?A@C?C?C?C=?;A@9>5=3<1<2=1=0=1~<.=/=/~:/~:/~:/}9.|90{8/{8/{8/|<3|<3|<3{;2z;4y:3y:3w;3n70m80l7/l7/k6.h6-h6-h6-i7.h8.h8.g8.g8.g8.g8.h8.k92h6/f4-g5.i70h70e4-b1*c2+b3+_0(]1(]1(V*!b6-{ULtYRaNHN?8A7.=6,;9-9;.9<139-3;.5;/6<06<07:/58-47.69049238139/39/2:/19.19,.9+.9+/:,0;-3>.6C2:E5Qn>Qn>Qn>Qn>Qn>Sp@Sp@WtD[xH]zJ]zJ_|L_|LZwGRlECU?6D7(6)gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUneVneVofWpgXpgXng]lnmz׹ĥregOMP;GK:FM=GOBKQG{{sžؓeSJ:TFWIF;@8KEC>C?B?C@C>C>D>B=B6<5/95,;8/8:/57,36+69.5;/7:/69.69.58-57,36+28,19,28.19,19.19,19,19,.9+.9+.9+/:,0;+3>.6A17B2ex\umtlf_RwKBh9KkVsCZwG]zJ^{K_|L_|LVsCNg@D=CUrDYvH[xJ]zL^{M\yKQn@G_;6B4+4/#)%gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSjcSjbUlbVlbVmcWmdUmdUmdUleUmfVngWogZnh\oh^mjekormtzη|ubb_NXZL]cWmwn|}̻pQDSFSHC:J@H@G>F>E=DG>G>C;>5:2:3>6=5=4=5=4<3;0;1;1~:/~:/~:1}90|90{8/{8/{8/z:1z:1x92w81v70u6/u6/q6.m80k90j8/j8/i9/i9/i9/h8.g7-f7-g7-f7-f7-f7-f7-f7-f5.j81m;4k:3j92j:0m>4oC8l@5oD;d<2c=2zVJdZyWMbLA>:13814927<54:0/5+25,9<336+25*24)03(13(25*46+47,.6),7)/7*-8*/7*/7*/7*/7*19,08+08-/7,/7,/7,08-08+7?09B14*00!''heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdVjdVjdXldYlcZmeZmeXmfVg`NjeRnkXol]he\feasqrԶ|qtY_dMbkXr}lا`XD=NEMCF3<2:1919191~:1|91{80z7/z7/w7.v6-w7.w7.w8/w8/v7.u6-q5+n3+l7/i81i81h70h70g6/g6/g6/f5.g6/i70i81h70g6/e4-e3,h3-j5/m80k90j:0i;.i=0kA3gB2jI:dH:v_O~k\xjoRJ=79.4:04:039/39/39/28.28.17-17-36-06,25,/5+14+/5+/4-.5-/4-.5-/4-/4-/4-/4-05./4-/4-.3,.3,/4-/4-/6.1;23=26@58B79D67B45@03>-4?.DQ=WeN[kQPbHEX<@T8BW6Ic>Ke>Kf=Kf=JeOj?UpGYtK\vO]wP]wRWqNHb?;O6&1+&+.$),heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVidQjhSmjWjk[gg_lll~ЯvkqUYaI_kUto~uKAM@K>L@K>E9=4?6E9F7J7L:J7F6C2C6E7C7B8A7>5<4:39193~92}:2z:1z:1y90x8/v7.v7.u6-v7.t8.t8.t8.r6,o5*m4+l7/i81j81h70i70h70g6/g6/e3,e3,g5.h6/j81j81j81k92k60l71k90k;1k;/j>1j@0iD2gH6kP=gRAufSuesrKL<69.39/39/39/28.28.28.17-17-17-17-06,06,/5+/5+/5+/4./4./4./4./4./4./4./4.05//4..3-.3-.3-.3-/4./6/.80/:21=34@66B66B66B45B16C1CP>P]IR`IIW@AO6BP7EU:Jb@Jd?Ke@Ke>Ic6I5&1-',0$)-heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVmhUkiTmjWjk[kkcwwwۿʫyuy`kpZt{i؞L=RBL;@1G;YMUJ@4D7H:K=I;B7?3@7E;@9A9A8?6~>5}=4<4}=4z;4x<4w;3w;3u:2t91t91t91r90r90r90r90o9/n8.l6,k5+l7/j81l71j81k60i70i70h6/g5.g5.f5.g6/h70i81k:3k:3l;4j;3i:0h<1k?2jC4iD2fE2fI7lVAjYGujVm{mEF658-28.28.28.17-17-17-06,17-17-17-06,06,/5+/5+/5+/4./4./4./4./4./4./4./4./4./4..3--2,-2,.3-/4..5.+5-+6.-9//;12>24@46B47D38E3?L:ER>CQ:;I28F->L3DT9J_@Jb@LdBKc?Ia=G`9F_8G`9RkDXpL]uS^vVZqTPgK=T8.A.&1-',0%*.heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVniVljUlkWlm]pqiؼǫ}ſñpP@O?XJM?E9G4e=1f>2hC3iE5fG3cG2cJ6hV@i\IskVozpq_9=,47,28.17-17-17-06,06,06,17-17-17-06,06,/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3-.3-.3--2,-2,-2,-2,.3--4-*4,)4,*6,+7-.:.1=14@25A36C2:G5N4DX@7C;F?D=>;:7:8>;=;?<@=}@=xA6s>6r=5r=5r=5p>5o=4n>4m=3l<2k;1j;1i:0i:0j:0n72p62p62m61m61l71i70i70l;4k:3h91e90e90e90e:1d<2fB6cA5cC4dD5dG5dI6bI3_I2^L6eV?jbMrmWor[`L3:(28,28.17-17-17-06,06,06,17-17-17-06,06,/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3--2,-2,,1+,1+,1+,1+-2,,3,,6.+5-*4+*4++5,.8-0;-2=/2=-5@/6A05A-1=)1=)5A-8F/=O5@T8FY=H\@J]?I^=K^>K`?TgG[pQcvZauZYkSJ]G6G4&4%$-*$),"'*heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZlfVjgTkjUlnYorasvmθκƶøͧkX[GWEL;D:DE?A>=::9;9=5o?5o?5o@6n?5m>4k<2h<1h<1h<1l<2o83q62p62p62m61l71j81i81h70g80e90e:1d<2e?4f@5dB6^B4aG8cL:dM;cM8`K6]K3]M4]Q9bX?mhRss[nv{eFO:4=*39-28.28.28.17-17-17-06,17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,-2,,1++0*+0*+0*+0*,1+,3,.5.,6.*4+*4+*4++5,-7,.9+-8*0;+4?/5@/4?.3?+3>-3@,7F/9K3@O8BT:GWJ=I>I@G@D>=::7=9>:?9A:xA:tD:pF:pE5j>5n=6o83r73p62p62n72l71j81i81d8/d90c;1d>3d@4cA5cA5_C5ZE4_NnlUtv^|kcmU2>(6B.3;.39/39/39/28.28.28.17-17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,,1+,1++0**/)*/)+0*,1++2+-4-+5-*4,*4,+5,+5,,6+-7,,6+/:,2=/6A17B27B15@04?.2?-4C.:G3=L5AO8DT:JX?L\BTbI\kTcqZ^mXUbPDRA2>0#/%&/,&,,$**heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdVjdVjcYkdZlc\md[lfZlfVolYmlWjlWgkZflbr{x׭oYWDQ@O>OAOBK@C<<5>7?6?8A7{B7uD6qE8qE8p?8q?8s>8q?8q?8q?8q?8p?8sB;qB:o@8m>6l=5j>5m>6o>7o83q73o83m82m82i81h91f:1f;2d>3d@4bB5`C5]A3\@2WB1TG4[S>f^Gi^HbX?ZS9ZS7\W:ZV;XW;kmUsw^u}fUaI&28D03;.4:04:039/39/39/28.28.17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,,1++0*+0**/)*/)+0*+0*,1++2+)3+*4,+5-+5,,6--7.-7,,6+.8-2<16A39D69D47B46A10;+2?-5B09F22=/x=/t?/sB3tD6r=5r=7t=8s>8u@:u@:t?9q?8sA:q@9q@9q@9p?8n?7o>7o>7k92m82l:3l;4l;4h<3g<3c=2c?3^>1dG9cG9T=-N9(M8'@1WQ;PN7KI0OK2]Y>ieJeaDVU7XX<]`CosZzfdlU=I1-9#2>*4-1=)2>*9E/BN8IU?O[GVbN]hWYdTLWI/u@8s>8u>9u@:t?9o=6p>7sA:q?8p?8p?8n?7o>7m>6n=6m>6k<4l=5m>6k?6j?6gA6eA5bB5dG9[A2^G7^I8N=+F7$G8%>6!LL4GK2DG,DD*MM1\[?baC`aBYY=dgJsw^sy_X`I:D,/;%7C/6>16<26<26<25;15;15;15;15;15;15;14:04:039/39/39/27127127116016016005/05/.3-.3--2,-2,,1+,1++0*+0**1**1*)0))0))0)*1*+2*,3+.5--4,.5-07/4;39A6?F>BJ?;F8:E57B14?.3?+6B.)r>)s@+tD0vE4q?4n<3q<4tB9sA8o?5qA7xH>n>4m>4m>4k?4l=3j>3l=3j>3g?5gA6gA6gC7eC7cC6`C5^D5bK;UB1ZI7`S@RG3C;&E=(FA+AE,BH.AE*<@%?B%NN2_`AijKaaEnqTvzagmSJO94<%4=(=F38>28>48>48>47=37=37=36<28>48>47=37=37=36<26<26<25:449349349338238238227105/05//4..3--2,,1++0*+0*).().().().().(*/)+0*,1+160/4.,1+,1+/4.6;4=BK:4.8/-4--4-,3,gdUgdUheVheVheVheVifWifWifWifWifWifWifWifWifWifWkeWkeWlcZmd[md]mf\mg[jiWkmXimVjoYjs`hthm|wڻּҽz{R>tJ4uH3vI4zM8}P;yL7nA.e7'{M@sD:qB8sD:oC8g;0d8-g=1i?3i?3i?3g?3f>2f>2f>2e?2b@4bB5`C5_C5_C5[D4ZE4WD3XI6OB/\T?oiSc^HMK4IG0IK3>D*?H-@F*48>47=37=37=39?58>48>48>48>48>48>48>47<67<67<66;56;56;55:45:438238216005//4.-2,,1+,1++0*+0**/)*/)+0*,1+-2,-2,05/.3-+0*+0*-2.2718=9;B:@K=@M;@M;=J68E13@,1?(0>'4.:0,6..5.-4-gdUgdUgdUheVheVifWifWifWifWifWifWifWifWifWifWifWkeWldWlcZmd[md]mf\mg[jiWkmXinWiqZgs_drejytܿչйѾϴuawVCjI6lI6rM;uP>mF7iB3gB2jE5nI9nJ:oK;oK;eA1cB1cB1cB1cB1cB1bC1`C3]F6\G6\G6ZG6ZG6WH5TG4RG3PH3NH2fdM~~frrZVX@JL4GM3A.:>-;>39?59?58>48>47=37=37=38>48>48>48>48>48>48>48>49>89>89>88=78=78=77<67<66;55:449338227105//4./4.-2.-2.,1-+0,+0,,1--2.-2.,1-,1-,1-,1-.210513764;4;G9=L9@O<@O:8F71?2-9-,6--4,,3+fcTfcTgdUheVheVifWjgXjgXifWifWifWifWifWifWifWifWldWldWlcZmd[md]mf\mg[jiWkmXinWiqZgs_bpcgxrڽѵ˴˺ҿһsrb|]K}^LtUCaD2W:(Y<*[>,X=*`E2`E2`E2_F2`G3`G3`G3]H3\K7\M:\M:YL9XM9UM8RL6QL6NL5QQ9ikS|gmqXSY?FL2>G,48>48>48>47=37=38>48>48>48>49?59?5:?9:?9:?9:?99>89>89>88=78=78=77<66;55:4493382382/40.3/-2.,1-+0,+0,+0,+0,+0,,1--10.21/32/32/32-4-3?17F3=L7@O:?N7M:MJ9BC3=@5;A7;A7;A7:@6:@6:@69?58>48>48>49?59?5:@6:@6:@6;@:;@:;@::?9:?99>89>89>8:?9:?99>89>88=78=77<67<6495273162/40-2.,1-+/.+/.,0/,0/-10.21.23.23-12+1-+9*/@-6H2;M7=O7A6>A6>A6=@7=@79?59?59?5:@6:@6:B7:B7:B7;@9;@9;@::?8:?99>79>89>7;@:;@9;@:;@9:?9:?8:?9:?98?87=94;4382160/4..3/.3/.21.21,2.,2.+2++2*,4))6%$6)=!2F+8L1;O6;M5;M5;M58J29K3;M5H&DK*FM+EL*PV4PT3KN/HK,TT8bbFccIZZ@[Y@\ZA][B][B[Y@XV=US:SQ8HF1GD1DA0A?0@>1>>2??5>@5;>59?59?59A69A48C58C58C5:B79A69@88@58?79A69@8:B7:A9:B79@8:B7;B:E=8B:8B:7A88@56>14O<>P::L6@R8EW=FY=DX=@T;5H2+<),6+,3++2*ZgM[hN\hP]iQbjSckTglXhkXghVghVifWifWkeWlfXmeZmgYmgYkhYkg[kg\jf]jf[hfZefVhiWglVfo\erajwnz˹ʿNjlRM0SN0QK+QK+UO/UO/TO1TO1SO2SO2QP4QP4QM2PO3PN5NQ6MO7JP6HM6EM5HQ6EN1BK.?I'BI(FM+JP,KQ-NR/PT1VZ7^bA_bCY\?TWWU>XV=YW>XV=XW;WV:XT9QK3OI3LG4ID1DA2B@3A?3>@5<=59?59?59A67B48C57D37D3:B79A69A68@58@59A69A6:B7:B7:B7:B7:B7;C874>63=40>-3C)9M*BY/Ga1Op;Ln;Li=Fa>BY?F;J@?I>>I9?G8>F7>D8=B;>E>9C;6@74B19I/BV3Pg=XrB^J[}JXuIMhECZ@9O:6G54E2XR6:@6:@69A67B47B46C26C2;C8:B79A69A69A69A6:B7;C8;C8:B7:B7;C8;C8=E:>F;=G<=G?>H=>I9?G8>F7>D8=B;=D=9C;6@74B19I/DX5Ri?[uEZ{FWyFTqEIdA=T:2H3/@.->+6H2@R8L_CReGSgKOcG@W=6I30:/07/-4,YgMZhN\hP^jRblTemVinZjo[mn\lm[mk\mj[nhZnhZoi]oi[liZkhYjfZieZie\ieZig[ghXghVchRajWerao|s{ѿɶıþʾŸ̌oRL2TO2TM0UN1TN.UO/VQ3VQ3UQ4SO2ON2NM1PL1NM1NL3KN3LN6KQ7KP9JR:LU:IR5JS6OY7SZ9T[9]c?fnGcszpr{\\bFLP7KM5LK6KI4LJ5PK5TN8VP:WQ;VP:SN;QL9LI:IG:GE9CE:=>6:@6:@69A67B47B46C26C2;C8;C8:B79A69A6:B7;C8;C8;C8;C8;C8;C8F;=G<=G?=G<=H8>F7=E6=C7=B;:A:7A95?64B19I/BV3Ne;Uo?Tu@RtAPmAE`=9P6-C.+<*+<)1C-> (BITS_IN_JSAMPLE-8)) +#ifdef PPM_NORAWWORD +#define PUTPPMSAMPLE(ptr,v) *ptr++ = (char) ((v) >> (BITS_IN_JSAMPLE-8)) +#define BYTESPERSAMPLE 1 +#define PPM_MAXVAL 255 +#else +/* The word-per-sample format always puts the LSB first. */ +#define PUTPPMSAMPLE(ptr,v) \ + { register int val_ = v; \ + *ptr++ = (char) (val_ & 0xFF); \ + *ptr++ = (char) ((val_ >> 8) & 0xFF); \ + } +#define BYTESPERSAMPLE 2 +#define PPM_MAXVAL ((1<pub.buffer[0]; bufferptr = dest->iobuffer; - for (col = dest->buffer_width; col > 0; col--) { - *bufferptr++ = (char) DOWNSCALE(GETJSAMPLE(*ptr++)); + for (col = dest->samples_per_row; col > 0; col--) { + PUTPPMSAMPLE(bufferptr, GETJSAMPLE(*ptr++)); } (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); } @@ -124,9 +141,9 @@ put_demapped_rgb (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, bufferptr = dest->iobuffer; for (col = cinfo->output_width; col > 0; col--) { pixval = GETJSAMPLE(*ptr++); - *bufferptr++ = (char) DOWNSCALE(GETJSAMPLE(color_map0[pixval])); - *bufferptr++ = (char) DOWNSCALE(GETJSAMPLE(color_map1[pixval])); - *bufferptr++ = (char) DOWNSCALE(GETJSAMPLE(color_map2[pixval])); + PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map0[pixval])); + PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map1[pixval])); + PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map2[pixval])); } (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); } @@ -145,7 +162,7 @@ put_demapped_gray (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, ptr = dest->pub.buffer[0]; bufferptr = dest->iobuffer; for (col = cinfo->output_width; col > 0; col--) { - *bufferptr++ = (char) DOWNSCALE(GETJSAMPLE(color_map[GETJSAMPLE(*ptr++)])); + PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map[GETJSAMPLE(*ptr++)])); } (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); } @@ -165,12 +182,14 @@ start_output_ppm (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) case JCS_GRAYSCALE: /* emit header for raw PGM format */ fprintf(dest->pub.output_file, "P5\n%ld %ld\n%d\n", - (long) cinfo->output_width, (long) cinfo->output_height, 255); + (long) cinfo->output_width, (long) cinfo->output_height, + PPM_MAXVAL); break; case JCS_RGB: /* emit header for raw PPM format */ fprintf(dest->pub.output_file, "P6\n%ld %ld\n%d\n", - (long) cinfo->output_width, (long) cinfo->output_height, 255); + (long) cinfo->output_width, (long) cinfo->output_height, + PPM_MAXVAL); break; default: ERREXIT(cinfo, JERR_PPM_COLORSPACE); @@ -212,15 +231,16 @@ jinit_write_ppm (j_decompress_ptr cinfo) jpeg_calc_output_dimensions(cinfo); /* Create physical I/O buffer. Note we make this near on a PC. */ - dest->buffer_width = cinfo->output_width * cinfo->out_color_components; - dest->iobuffer = (char *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (size_t) (dest->buffer_width * SIZEOF(char))); + dest->samples_per_row = cinfo->output_width * cinfo->out_color_components; + dest->buffer_width = dest->samples_per_row * (BYTESPERSAMPLE * SIZEOF(char)); + dest->iobuffer = (char *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, dest->buffer_width); - if (cinfo->quantize_colors || SIZEOF(JSAMPLE) != SIZEOF(char)) { + if (cinfo->quantize_colors || BITS_IN_JSAMPLE != 8 || + SIZEOF(JSAMPLE) != SIZEOF(char)) { /* When quantizing, we need an output buffer for colormap indexes * that's separate from the physical I/O buffer. We also need a - * separate buffer if JSAMPLE and char are not the same size. + * separate buffer if pixel format translation must take place. */ dest->pub.buffer = (*cinfo->mem->alloc_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE,