Imported Upstream version 1.3.1 upstream/1.3.1
authorManuel Bachmann <manuel.bachmann@open.eurogiciel.org>
Mon, 5 Jan 2015 14:19:36 +0000 (15:19 +0100)
committerManuel Bachmann <manuel.bachmann@open.eurogiciel.org>
Mon, 5 Jan 2015 14:19:36 +0000 (15:19 +0100)
265 files changed:
BUILDING.txt
CMakeLists.txt
ChangeLog.txt
Makefile.am
Makefile.in
README
README-turbo.txt
acinclude.m4
aclocal.m4
bmp.c
bmp.h
change.log
cjpeg.1
cjpeg.c
cmakescripts/getdate.bat [deleted file]
cmakescripts/md5cmp.cmake [new file with mode: 0644]
config.h.in
configure
configure.ac
djpeg.1
djpeg.c
doc/html/annotated.html
doc/html/bc_s.png
doc/html/bdwn.png [new file with mode: 0644]
doc/html/classes.html
doc/html/closed.png
doc/html/doxygen.css
doc/html/doxygen.png
doc/html/dynsections.js [new file with mode: 0644]
doc/html/ftv2blank.png [new file with mode: 0644]
doc/html/ftv2cl.png [new file with mode: 0644]
doc/html/ftv2doc.png [new file with mode: 0644]
doc/html/ftv2folderclosed.png [new file with mode: 0644]
doc/html/ftv2folderopen.png [new file with mode: 0644]
doc/html/ftv2lastnode.png [new file with mode: 0644]
doc/html/ftv2link.png [new file with mode: 0644]
doc/html/ftv2mlastnode.png [new file with mode: 0644]
doc/html/ftv2mnode.png [new file with mode: 0644]
doc/html/ftv2mo.png [new file with mode: 0644]
doc/html/ftv2node.png [new file with mode: 0644]
doc/html/ftv2ns.png [new file with mode: 0644]
doc/html/ftv2plastnode.png [new file with mode: 0644]
doc/html/ftv2pnode.png [new file with mode: 0644]
doc/html/ftv2splitbar.png [new file with mode: 0644]
doc/html/ftv2vertline.png [new file with mode: 0644]
doc/html/functions.html
doc/html/functions_vars.html
doc/html/group___turbo_j_p_e_g.html
doc/html/index.html
doc/html/installdox [deleted file]
doc/html/jquery.js
doc/html/modules.html
doc/html/nav_f.png
doc/html/nav_g.png [new file with mode: 0644]
doc/html/nav_h.png
doc/html/open.png
doc/html/search/all_63.html
doc/html/search/all_63.js [new file with mode: 0644]
doc/html/search/all_64.html
doc/html/search/all_64.js [new file with mode: 0644]
doc/html/search/all_68.html
doc/html/search/all_68.js [new file with mode: 0644]
doc/html/search/all_6e.html
doc/html/search/all_6e.js [new file with mode: 0644]
doc/html/search/all_6f.html
doc/html/search/all_6f.js [new file with mode: 0644]
doc/html/search/all_72.html
doc/html/search/all_72.js [new file with mode: 0644]
doc/html/search/all_74.html
doc/html/search/all_74.js [new file with mode: 0644]
doc/html/search/all_77.html
doc/html/search/all_77.js [new file with mode: 0644]
doc/html/search/all_78.html
doc/html/search/all_78.js [new file with mode: 0644]
doc/html/search/all_79.html
doc/html/search/all_79.js [new file with mode: 0644]
doc/html/search/classes_74.html
doc/html/search/classes_74.js [new file with mode: 0644]
doc/html/search/enums_74.html [new file with mode: 0644]
doc/html/search/enums_74.js [new file with mode: 0644]
doc/html/search/enumvalues_74.html [new file with mode: 0644]
doc/html/search/enumvalues_74.js [new file with mode: 0644]
doc/html/search/functions_74.html [new file with mode: 0644]
doc/html/search/functions_74.js [new file with mode: 0644]
doc/html/search/groups_74.html [new file with mode: 0644]
doc/html/search/groups_74.js [new file with mode: 0644]
doc/html/search/search.css
doc/html/search/search.js
doc/html/search/typedefs_74.html [new file with mode: 0644]
doc/html/search/typedefs_74.js [new file with mode: 0644]
doc/html/search/variables_63.html
doc/html/search/variables_63.js [new file with mode: 0644]
doc/html/search/variables_64.html
doc/html/search/variables_64.js [new file with mode: 0644]
doc/html/search/variables_68.html
doc/html/search/variables_68.js [new file with mode: 0644]
doc/html/search/variables_6e.html
doc/html/search/variables_6e.js [new file with mode: 0644]
doc/html/search/variables_6f.html
doc/html/search/variables_6f.js [new file with mode: 0644]
doc/html/search/variables_72.html
doc/html/search/variables_72.js [new file with mode: 0644]
doc/html/search/variables_74.html [new file with mode: 0644]
doc/html/search/variables_74.js [new file with mode: 0644]
doc/html/search/variables_77.html
doc/html/search/variables_77.js [new file with mode: 0644]
doc/html/search/variables_78.html
doc/html/search/variables_78.js [new file with mode: 0644]
doc/html/search/variables_79.html
doc/html/search/variables_79.js [new file with mode: 0644]
doc/html/structtjregion.html
doc/html/structtjscalingfactor.html
doc/html/structtjtransform.html
doc/html/sync_off.png [new file with mode: 0644]
doc/html/sync_on.png [new file with mode: 0644]
doc/html/tab_a.png
doc/html/tab_b.png
doc/html/tab_h.png
doc/html/tab_s.png
doc/html/tabs.css
doxygen.config
filelist.txt [deleted file]
install.txt [deleted file]
java/CMakeLists.txt
java/Makefile.am
java/Makefile.in
java/README
java/TJBench.java [new file with mode: 0644]
java/TJExample.java
java/TJUnitTest.java
java/doc/allclasses-frame.html
java/doc/allclasses-noframe.html
java/doc/constant-values.html
java/doc/deprecated-list.html
java/doc/help-doc.html
java/doc/index-all.html
java/doc/index.html
java/doc/org/libjpegturbo/turbojpeg/TJ.html
java/doc/org/libjpegturbo/turbojpeg/TJCompressor.html
java/doc/org/libjpegturbo/turbojpeg/TJCustomFilter.html
java/doc/org/libjpegturbo/turbojpeg/TJDecompressor.html
java/doc/org/libjpegturbo/turbojpeg/TJScalingFactor.html
java/doc/org/libjpegturbo/turbojpeg/TJTransform.html
java/doc/org/libjpegturbo/turbojpeg/TJTransformer.html
java/doc/org/libjpegturbo/turbojpeg/package-frame.html
java/doc/org/libjpegturbo/turbojpeg/package-summary.html
java/doc/org/libjpegturbo/turbojpeg/package-tree.html
java/doc/overview-tree.html
java/doc/serialized-form.html
java/org/libjpegturbo/turbojpeg/TJ.java
java/org/libjpegturbo/turbojpeg/TJCompressor.java
java/org/libjpegturbo/turbojpeg/TJCustomFilter.java
java/org/libjpegturbo/turbojpeg/TJDecompressor.java
java/org/libjpegturbo/turbojpeg/TJLoader.java.tmpl [new file with mode: 0644]
java/org/libjpegturbo/turbojpeg/TJScalingFactor.java
java/org/libjpegturbo/turbojpeg/TJTransform.java
java/org/libjpegturbo/turbojpeg/TJTransformer.java
java/org_libjpegturbo_turbojpeg_TJ.h
java/org_libjpegturbo_turbojpeg_TJCompressor.h
java/org_libjpegturbo_turbojpeg_TJDecompressor.h
jccolext.c
jccolor.c
jcdctmgr.c
jchuff.c
jcmainct.c
jcmarker.c
jcmaster.c
jconfig.h.in
jcparam.c
jcstest.c
jdapistd.c
jdatadst-tj.c
jdatadst.c
jdatasrc-tj.c
jdatasrc.c
jdcoefct.c
jdcolext.c
jdcolor.c
jdct.h
jddctmgr.c
jdhuff.c
jdhuff.h
jdinput.c
jdmainct.c
jdmarker.c
jdmaster.c
jdmerge.c
jdmrgext.c
jdphuff.c
jdsample.c
jidctint.c
jmorecfg.h
jpegcomp.h
jpeglib.h
jpegtran.1
jpegtran.c
jquant1.c
jquant2.c
jversion.h
libjpeg.map.in
libjpeg.txt
md5/Makefile.am [new file with mode: 0644]
md5/Makefile.in [new file with mode: 0644]
md5/md5.c [new file with mode: 0644]
md5/md5.h [new file with mode: 0644]
md5/md5cmp.c [moved from java/org/libjpegturbo/turbojpeg/TJLoader.java with 68% similarity]
md5/md5hl.c [new file with mode: 0644]
rdbmp.c
rdswitch.c
release/ReadMe.rtf
release/Welcome.rtf
release/copyright [deleted file]
release/deb-control.tmpl
release/libjpeg-turbo.nsi.in
release/libjpeg-turbo.spec.in
release/makecygwinpkg.in
release/makedpkg.in
release/makemacpkg.in
release/makesunpkg.in [deleted file]
release/pkginfo.in [deleted file]
release/uninstall.in
sharedlib/CMakeLists.txt
simd/CMakeLists.txt
simd/Makefile.in
simd/jdclrss2-64.asm
simd/jdclrss2.asm
simd/jdmrgss2-64.asm
simd/jdmrgss2.asm
simd/jsimd_arm.c
simd/jsimd_arm_neon.S
structure.txt
testimages/nightshot_iso_100.txt [new file with mode: 0644]
testimages/testimg.bmp [deleted file]
testimages/testimgari.ppm [deleted file]
testimages/testimgcrop.jpg [deleted file]
testimages/testimgflt-nosimd.jpg [deleted file]
testimages/testimgflt.jpg [deleted file]
testimages/testimgflt.ppm [deleted file]
testimages/testimgfst.jpg [deleted file]
testimages/testimgfst.ppm [deleted file]
testimages/testimgfst100.jpg [deleted file]
testimages/testimgfst1_2.ppm [deleted file]
testimages/testimgfst1_4.ppm [deleted file]
testimages/testimgfst1_8.ppm [deleted file]
testimages/testimggray.jpg [deleted file]
testimages/testimgint.ppm [deleted file]
testimages/testimgint1_2.ppm [deleted file]
testimages/testimgint1_4.ppm [deleted file]
testimages/testimgint1_8.ppm [deleted file]
testimages/testimgp.jpg [deleted file]
tjbench.c
tjbenchtest.in
tjbenchtest.java.in [new file with mode: 0755]
tjexampletest.in
tjunittest.c
transupp.c
transupp.h
turbojpeg-jni.c
turbojpeg-mapfile.jni
turbojpeg.c
turbojpeg.h
usage.txt
win/jconfig.h.in
win/jpeg62-memsrcdst.def [new file with mode: 0755]
win/jpeg7-memsrcdst.def [new file with mode: 0644]

index 26a42ca..adf4eaa 100644 (file)
@@ -1,5 +1,5 @@
 *******************************************************************************
-**     Building on Unix Platforms (including Cygwin)
+**     Building on Un*x Platforms (including Cygwin and OS X)
 *******************************************************************************
 
 
@@ -10,6 +10,9 @@ Build Requirements
 -- autoconf 2.56 or later
 -- automake 1.7 or later
 -- libtool 1.4 or later
+   * If using Xcode 4.3 or later on OS X, autoconf and automake are no longer
+     provided.  The easiest way to obtain them is from MacPorts
+     (http://www.macports.org/).
 
 -- NASM (if building x86 or x86-64 SIMD extensions)
    * 0.98, or 2.01 or later is required for a 32-bit build
@@ -33,14 +36,26 @@ Build Requirements
    NOTE: the NASM build will fail if texinfo is not installed.
 
 -- GCC v4.1 or later recommended for best performance
-
--- If building the TurboJPEG/OSS Java wrapper, JDK or OpenJDK 1.5 or later is
+   * Beginning with Xcode 4, Apple stopped distributing GCC and switched to
+     the LLVM compiler.  Xcode v4.0 through v4.6 provides a GCC front end
+     called LLVM-GCC.  Unfortunately, as of this writing, neither LLVM-GCC nor
+     the LLVM (clang) compiler produces optimal performance with libjpeg-turbo.
+     Building libjpeg-turbo with LLVM-GCC v4.2 results in a 10% performance
+     degradation when compressing using 64-bit code, relative to building
+     libjpeg-turbo with GCC v4.2.  Building libjpeg-turbo with LLVM (clang)
+     results in a 20% performance degradation when compressing using 64-bit
+     code, relative to building libjpeg-turbo with GCC v4.2.  If you are
+     running Snow Leopard or earlier, it is suggested that you continue to use
+     Xcode v3.2.6, which provides GCC v4.2.  If you are using Lion or later, it
+     is suggested that you install Apple GCC v4.2 through MacPorts.
+
+-- If building the TurboJPEG Java wrapper, JDK or OpenJDK 1.5 or later is
    required.  Some systems, such as OS X 10.4, Solaris 10 and later, and Red
    Hat Enterprise Linux 5 and later, have this pre-installed.  On OS X 10.5 and
    later, it will be necessary to install the Java Developer Package, which can
-   be downloaded from http://connect.apple.com.  For systems that do not have a
-   JDK installed, you can obtain the Oracle Java Development Kit from
-   http://www.java.com.
+   be downloaded from http://developer.apple.com/downloads (Apple ID required.)
+   For systems that do not have a JDK installed, you can obtain the Oracle Java
+   Development Kit from http://www.java.com.
 
 
 ==================
@@ -61,9 +76,9 @@ directory.  For in-tree builds, these directories are the same.
 Building libjpeg-turbo
 ======================
 
-The following procedure will build libjpeg-turbo on Linux, FreeBSD, 32-bit
-OS X, Cygwin, and Solaris/x86 systems (on Solaris, this generates a 32-bit
-library.  See below for 64-bit build instructions.)
+The following procedure will build libjpeg-turbo on Linux, FreeBSD, Cygwin, and
+Solaris/x86 systems (on Solaris, this generates a 32-bit library.  See below
+for 64-bit build instructions.)
 
   cd {source_directory}
   autoreconf -fiv
@@ -71,40 +86,44 @@ library.  See below for 64-bit build instructions.)
   sh {source_directory}/configure [additional configure flags]
   make
 
-NOTE: Running autoreconf in the source directory is only necessary if building
-libjpeg-turbo from the SVN repository.
+NOTE: Running autoreconf in the source directory is usually only necessary if
+building libjpeg-turbo from the SVN repository.
 
 This will generate the following files under .libs/
 
   libjpeg.a
-      Static link library for libjpeg-turbo
+      Static link library for the libjpeg API
 
-  libjpeg.so.{version} (Linux, Solaris)
+  libjpeg.so.{version} (Linux, Unix)
   libjpeg.{version}.dylib (OS X)
   cygjpeg-{version}.dll (Cygwin)
-      Shared library for libjpeg-turbo
+      Shared library for the libjpeg API
+
+  By default, {version} is 62.1.0, 7.1.0, or 8.0.2, depending on whether
+  libjpeg v6b (default), v7, or v8 emulation is enabled.  If using Cygwin,
+  {version} is 62, 7, or 8.
 
-  libjpeg.so (Linux, Solaris)
+  libjpeg.so (Linux, Unix)
   libjpeg.dylib (OS X)
+      Development symlink for the libjpeg API
+
   libjpeg.dll.a (Cygwin)
-      Development stub for libjpeg-turbo shared library
+      Import library for the libjpeg API
 
   libturbojpeg.a
-      Static link library for TurboJPEG/OSS
+      Static link library for the TurboJPEG API
 
-  libturbojpeg.so (Linux, Solaris)
-  libturbojpeg.dylib (OS X)
-      Shared library and development stub for TurboJPEG/OSS
+  libturbojpeg.so.0.0.0 (Linux, Unix)
+  libturbojpeg.0.0.0.dylib (OS X)
+  cygturbojpeg-0.dll (Cygwin)
+      Shared library for the TurboJPEG API
 
-  cygturbojpeg.dll (Cygwin)
-      Shared library for TurboJPEG/OSS
+  libturbojpeg.so (Linux, Unix)
+  libturbojpeg.dylib (OS X)
+      Development symlink for the TurboJPEG API
 
   libturbojpeg.dll.a (Cygwin)
-      Development stub for TurboJPEG/OSS shared library
-
-{version} is 62.0.0, 7.0.0, or 8.0.2, depending on whether libjpeg v6b
-(default), v7, or v8 emulation is enabled.  If using Cygwin, {version} is
-62, 7, or 8.
+      Import library for the TurboJPEG API
 
 
 libjpeg v7 or v8 API/ABI Emulation
@@ -117,6 +136,16 @@ API/ABI-compatible with libjpeg v8.  See README-turbo.txt for more information
 on libjpeg v7 and v8 emulation.
 
 
+In-Memory Source/Destination Managers
+-------------------------------------
+
+When using libjpeg v6b or v7 API/ABI emulation, add --without-mem-srcdst to the
+configure command line to build a version of libjpeg-turbo that lacks the
+jpeg_mem_src() and jpeg_mem_dest() functions.  These functions were not part of
+the original libjpeg v6b and v7 APIs, so removing them ensures strict
+conformance with those APIs.  See README-turbo.txt for more information.
+
+
 Arithmetic Coding Support
 -------------------------
 
@@ -129,13 +158,12 @@ add --without-arith-enc or --without-arith-dec to the configure command line to
 disable encoding or decoding (respectively.)
 
 
-TurboJPEG/OSS Java Wrapper
---------------------------
+TurboJPEG Java Wrapper
+----------------------
 Add --with-java to the configure command line to incorporate an optional Java
-Native Interface wrapper into the TurboJPEG/OSS dynamic library and build the
-Java front-end classes to support it.  This allows the TurboJPEG/OSS dynamic
-library to be used directly from Java applications.  See java/README for more
-details.
+Native Interface wrapper into the TurboJPEG shared library and build the Java
+front-end classes to support it.  This allows the TurboJPEG shared library to
+be used directly from Java applications.  See java/README for more details.
 
 You can set the JAVAC, JAR, and JAVA configure variables to specify
 alternate commands for javac, jar, and java (respectively.)  You can also
@@ -161,13 +189,14 @@ For example,
 will install the header files in /usr/local/include and the library files in
 /usr/local/lib64.  If 'prefix' and 'libdir' are not specified, then the default
 is to install the header files in /opt/libjpeg-turbo/include and the library
-files in /opt/libjpeg-turbo/lib.
+files in /opt/libjpeg-turbo/lib32 (32-bit) or /opt/libjpeg-turbo/lib64
+(64-bit.)
 
 NOTE: You can specify a prefix of /usr and a libdir of, for instance,
 /usr/lib64 to overwrite the system's version of libjpeg.  If you do this,
 however, then be sure to BACK UP YOUR SYSTEM'S INSTALLATION OF LIBJPEG before
 overwriting it.  It is recommended that you instead install libjpeg-turbo into
-a non-system directory and manipulate the LD_LIBRARY_PATH or create sym links
+a non-system directory and manipulate the LD_LIBRARY_PATH or create symlinks
 to force applications to use libjpeg-turbo instead of libjpeg.  See
 README-turbo.txt for more information.
 
@@ -177,8 +206,8 @@ Build Recipes
 =============
 
 
-32-bit Library Build on 64-bit Linux
-------------------------------------
+32-bit Build on 64-bit Linux
+----------------------------
 
 Add
 
@@ -187,8 +216,8 @@ Add
 to the configure command line.
 
 
-64-bit Library Build on 64-bit OS X
------------------------------------
+64-bit Build on 64-bit OS X
+---------------------------
 
 Add
 
@@ -198,8 +227,8 @@ to the configure command line.  NASM 2.07 or later from MacPorts must be
 installed.
 
 
-32-bit Library Build on 64-bit OS X
------------------------------------
+32-bit Build on 64-bit OS X
+---------------------------
 
 Add
 
@@ -208,8 +237,8 @@ Add
 to the configure command line.
 
 
-64-bit Backward-Compatible Library Build on 64-bit OS X
--------------------------------------------------------
+64-bit Backward-Compatible Build on 64-bit OS X
+-----------------------------------------------
 
 Add
 
@@ -223,8 +252,8 @@ to the configure command line.  The OS X 10.4 SDK, and NASM 2.07 or later from
 MacPorts, must be installed.
 
 
-32-bit Backward-Compatible Library Build on OS X
-------------------------------------------------
+32-bit Backward-Compatible Build on OS X
+----------------------------------------
 
 Add
 
@@ -247,8 +276,8 @@ Add
 to the configure command line.
 
 
-32-bit Library Build on 64-bit FreeBSD
---------------------------------------
+32-bit Build on 64-bit FreeBSD
+------------------------------
 
 Add
 
@@ -304,20 +333,48 @@ examples accordingly.
 
 Additional build requirements:
 
-  gas-preprocessor.pl (https://github.com/yuvi/gas-preprocessor) should be
-  installed in your PATH.
+  gas-preprocessor.pl
+  (https://sourceforge.net/p/libjpeg-turbo/code/HEAD/tree/gas-preprocessor)
+  should be installed in your PATH.
 
 Set the following shell variables for simplicity:
 
-  IOS_PLATFORMDIR="/Developer/Platforms/iPhoneOS.platform"
-  IOS_SYSROOT="$IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS4.3.sdk"
-  IOS_GCC="$IOS_PLATFORMDIR/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2"
+  Xcode 3.2.x / iOS 4.3 SDK:
+  IOS_PLATFORMDIR=/Developer/Platforms/iPhoneOS.platform
+  IOS_SYSROOT=$IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS4.3.sdk
+  IOS_GCC=$IOS_PLATFORMDIR/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
+
+  Xcode 4.5.x / iOS 6.0 SDK:
+  IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
+  IOS_SYSROOT=$IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS6.0.sdk
+  IOS_GCC=$IOS_PLATFORMDIR/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
+
+  Xcode 4.6.x / iOS 6.1 SDK:
+  IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
+  IOS_SYSROOT=$IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS6.1.sdk
+  IOS_GCC=$IOS_PLATFORMDIR/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
+
+  Xcode 5.0.x / iOS 7.0 SDK:
+  IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
+  IOS_SYSROOT=$IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS7.0.sdk
+  IOS_GCC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
 
   ARM v6 only (up to and including iPhone 3G):
+  [NOTE: Requires Xcode 4.4.x or earlier]
   IOS_CFLAGS="-march=armv6 -mcpu=arm1176jzf-s -mfpu=vfp"
 
-  ARM v7 only (iPhone 3GS and newer, iPad):
+  ARM v7 only (iPhone 3GS-4S, iPad 1st-3rd Generation):
+  GCC:
   IOS_CFLAGS="-march=armv7 -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon"
+  Clang:
+  IOS_CFLAGS="-arch armv7 -no-integrated-as"
+
+  ARM v7s only (iPhone 5, iPad 4th Generation):
+  [NOTE: Requires Xcode 4.5 or later]
+  GCC
+  IOS_CFLAGS="-march=armv7s -mcpu=swift -mtune=swift -mfpu=neon"
+  Clang:
+  IOS_CFLAGS="-arch armv7s -no-integrated-as"
 
 Follow the procedure under "Building libjpeg-turbo" above, adding
 
@@ -328,8 +385,14 @@ Follow the procedure under "Building libjpeg-turbo" above, adding
 
 to the configure command line.
 
-Once built, lipo can be used to combine the ARM v6 and v7 variants into a
-universal library.
+Once built, lipo can be used to combine the ARM v6, v7, and/or v7s variants
+into a universal library.
+
+NOTE: If you are building libjpeg-turbo from the "official" project tarball,
+then it is highly likely that you will need to run 'autoreconf -fiv' in the
+source tree prior to building ARM v7 or v7s iOS binaries using the techniques
+described above.  Otherwise, you may get a libtool error such as "unable to
+infer tagged configuration."
 
 
 *******************************************************************************
@@ -373,8 +436,8 @@ Build Requirements
 -- NASM (http://www.nasm.us/) 0.98 or later (NASM 2.05 or later is required for
    a 64-bit build)
 
--- If building the TurboJPEG/OSS Java wrapper, JDK 1.5 or later is required.
-   This can be downloaded from http://www.java.com.
+-- If building the TurboJPEG Java wrapper, JDK 1.5 or later is required.  This
+   can be downloaded from http://www.java.com.
 
 
 ==================
@@ -409,17 +472,17 @@ on which version of cl.exe is in the PATH.
 The following files will be generated under {build_directory}:
 
   jpeg-static.lib
-      Static link library for libjpeg-turbo
+      Static link library for the libjpeg API
   sharedlib/jpeg{version}.dll
-      DLL for libjpeg-turbo
+      DLL for the libjpeg API
   sharedlib/jpeg.lib
-      Import library for libjpeg-turbo DLL
+      Import library for the libjpeg API
   turbojpeg-static.lib
-      Static link library for TurboJPEG/OSS
+      Static link library for the TurboJPEG API
   turbojpeg.dll
-      DLL for TurboJPEG/OSS
+      DLL for the TurboJPEG API
   turbojpeg.lib
-      Import library for TurboJPEG/OSS DLL
+      Import library for the TurboJPEG API
 
 {version} is 62, 7, or 8, depending on whether libjpeg v6b (default), v7, or
 v8 emulation is enabled.
@@ -442,17 +505,17 @@ build of libjpeg-turbo.
 This will generate the following files under {build_directory}:
 
   {configuration}/jpeg-static.lib
-      Static link library for libjpeg-turbo
+      Static link library for the libjpeg API
   sharedlib/{configuration}/jpeg{version}.dll
-      DLL for libjpeg-turbo
+      DLL for the libjpeg API
   sharedlib/{configuration}/jpeg.lib
-      Import library for libjpeg-turbo DLL
+      Import library for the libjpeg API
   {configuration}/turbojpeg-static.lib
-      Static link library for TurboJPEG/OSS
+      Static link library for the TurboJPEG API
   {configuration}/turbojpeg.dll
-      DLL for TurboJPEG/OSS
+      DLL for the TurboJPEG API
   {configuration}/turbojpeg.lib
-      Import library for TurboJPEG/OSS DLL
+      Import library for the TurboJPEG API
 
 {configuration} is Debug, Release, RelWithDebInfo, or MinSizeRel, depending on
 the configuration you built in the IDE, and {version} is 62, 7, or 8,
@@ -469,17 +532,17 @@ MinGW
 This will generate the following files under {build_directory}
 
   libjpeg.a
-      Static link library for libjpeg-turbo
+      Static link library for the libjpeg API
   sharedlib/libjpeg-{version}.dll
-      DLL for libjpeg-turbo
+      DLL for the libjpeg API
   sharedlib/libjpeg.dll.a
-      Import library for libjpeg-turbo DLL
+      Import library for the libjpeg API
   libturbojpeg.a
-      Static link library for TurboJPEG/OSS
+      Static link library for the TurboJPEG API
   libturbojpeg.dll
-      DLL for TurboJPEG/OSS
+      DLL for the TurboJPEG API
   libturbojpeg.dll.a
-      Import library for TurboJPEG/OSS DLL
+      Import library for the TurboJPEG API
 
 {version} is 62, 7, or 8, depending on whether libjpeg v6b (default), v7, or
 v8 emulation is enabled.
@@ -503,6 +566,16 @@ API/ABI-compatible with libjpeg v8.  See README-turbo.txt for more information
 on libjpeg v7 and v8 emulation.
 
 
+In-Memory Source/Destination Managers
+-------------------------------------
+
+When using libjpeg v6b or v7 API/ABI emulation, add -DWITH_MEM_SRCDST=0 to the
+CMake command line to build a version of libjpeg-turbo that lacks the
+jpeg_mem_src() and jpeg_mem_dest() functions.  These functions were not part of
+the original libjpeg v6b and v7 APIs, so removing them ensures strict
+conformance with those APIs.  See README-turbo.txt for more information.
+
+
 Arithmetic Coding Support
 -------------------------
 
@@ -515,13 +588,12 @@ add "-DWITH_ARITH_ENC=0" or "-DWITH_ARITH_DEC=0" to the cmake command line to
 disable encoding or decoding (respectively.)
 
 
-TurboJPEG/OSS Java Wrapper
---------------------------
+TurboJPEG Java Wrapper
+----------------------
 Add "-DWITH_JAVA=1" to the cmake command line to incorporate an optional Java
-Native Interface wrapper into the TurboJPEG/OSS dynamic library and build the
-Java front-end classes to support it.  This allows the TurboJPEG/OSS dynamic
-library to be used directly from Java applications.  See java/README for more
-details.
+Native Interface wrapper into the TurboJPEG shared library and build the Java
+front-end classes to support it.  This allows the TurboJPEG shared library to
+be used directly from Java applications.  See java/README for more details.
 
 If you are using CMake 2.8, you can set the Java_JAVAC_EXECUTABLE,
 Java_JAVA_EXECUTABLE, and Java_JAR_EXECUTABLE CMake variables to specify
@@ -622,8 +694,8 @@ MinGW Build on Linux
 The following commands can be used to create various types of release packages:
 
 
-Unix
-----
+Unix/Linux
+----------
 
 make rpm
 
@@ -642,6 +714,9 @@ make dmg
 
   Create Macintosh package/disk image.  This requires the PackageMaker
   application, which must be installed in /Developer/Applications/Utilities.
+  Note that PackageMaker is not included in recent releases of Xcode, but it
+  can be obtained by downloading the "Auxiliary Tools for Xcode" package from
+  http://developer.apple.com/downloads.
 
 make udmg [BUILDDIR32={32-bit build directory}]
 
@@ -656,35 +731,24 @@ make udmg [BUILDDIR32={32-bit build directory}]
 make iosdmg [BUILDDIR32={32-bit build directory}] \
   [BUILDDIRARMV6={ARM v6 build directory}] \
   [BUILDDIRARMV7={ARM v7 build directory}] \
+  [BUILDDIRARMV7S={ARM v7s build directory}]
 
   On OS X systems, this creates a Macintosh package and disk image in which the
   libjpeg-turbo static libraries contain ARM architectures necessary to build
   iOS applications.  If building on an x86-64 system, the binaries will also
   contain the i386 architecture, as with 'make udmg' above.  You should first
-  configure ARM v6 and ARM v7 out-of-tree builds of libjpeg-turbo (see
-  "Building libjpeg-turbo for iOS" above.)  If you are building an x86-64
+  configure ARM v6, ARM v7, and/or ARM v7s out-of-tree builds of libjpeg-turbo
+  (see "Building libjpeg-turbo for iOS" above.)  If you are building an x86-64
   version of libjpeg-turbo, you should configure a 32-bit out-of-tree build as
   well.  Next, build libjpeg-turbo as you would normally, using an out-of-tree
   build.  When it is built, run 'make iosdmg' from the build directory.  The
   build system will look for the ARM v6 build under {source_directory}/iosarmv6
   by default, the ARM v7 build under {source_directory}/iosarmv7 by default,
-  and (if applicable) the 32-bit build under {source_directory}/osxx86 by
-  default, but you can override this by setting the BUILDDIR32, BUILDDIRARMV6,
-  and/or BUILDDIRARMV7 variables on the make command line as shown above.
-
-make sunpkg
-
-  Build a Solaris package.  This requires pkgmk, pkgtrans, and bzip2.
-
-make csunpkg [BUILDDIR32={32-bit build directory}]
-
-  On 64-bit Solaris systems, this creates a combined package that contains
-  both 32-bit and 64-bit libraries.  You should first configure a 32-bit
-  out-of-tree build of libjpeg-turbo, then configure a 64-bit out-of-tree
-  build, then run 'make csunpkg' from the 64-bit build directory.  The build
-  system will look for the 32-bit build under {source_directory}/solx86 by
-  default, but you can override this by setting the BUILDDIR32 variable on the
-  make command line as shown above.
+  the ARM v7s build under {source_directory}/iosarmv7s by default, and (if
+  applicable) the 32-bit build under {source_directory}/osxx86 by default, but
+  you can override this by setting the BUILDDIR32, BUILDDIRARMV6,
+  BUILDDIRARMV7, and/or BUILDDIRARMV7S variables on the make command line as
+  shown above.
 
 make cygwinpkg
 
@@ -733,11 +797,11 @@ Invoking 'make testclean' or 'nmake testclean' (if using NMake) or building
 the 'testclean' target (if using the Visual Studio IDE) will clean up the
 output images generated by 'make test'.
 
-On Unix/Linux platforms, more extensive tests of the TurboJPEG/OSS C and Java
+On Unix/Linux platforms, more extensive tests of the TurboJPEG C and Java
 wrappers can be run by invoking 'make tjtest'.  These extended TurboJPEG tests
 essentially iterate through all of the available features of the TurboJPEG APIs
 that are not covered by the TurboJPEG unit tests (this includes the lossless
 transform options) and compare the images generated by each feature to images
 generated using the equivalent feature in the libjpeg API.  The extended
 TurboJPEG tests are meant to test for regressions in the TurboJPEG wrappers,
-not in the underlying libjpeg-turbo library.
+not in the underlying libjpeg API library.
index e7cbbf9..d3c0972 100644 (file)
@@ -2,18 +2,25 @@
 # Setup
 #
 
-cmake_minimum_required(VERSION 2.6)
+cmake_minimum_required(VERSION 2.8.8)
+cmake_policy(SET CMP0022 OLD)
 
 project(libjpeg-turbo C)
-set(VERSION 1.2.1)
+set(VERSION 1.3.1)
 
 if(MINGW OR CYGWIN)
   execute_process(COMMAND "date" "+%Y%m%d" OUTPUT_VARIABLE BUILD)
   string(REGEX REPLACE "\n" "" BUILD ${BUILD})
 elseif(WIN32)
-  execute_process(COMMAND "${CMAKE_SOURCE_DIR}/cmakescripts/getdate.bat"
-    OUTPUT_VARIABLE BUILD)
-  string(REGEX REPLACE "\n" "" BUILD ${BUILD})
+  execute_process(COMMAND "wmic.exe" "os" "get" "LocalDateTime" OUTPUT_VARIABLE
+    BUILD)
+  string(REGEX REPLACE "[^0-9]" "" BUILD "${BUILD}")
+  if (BUILD STREQUAL "")
+    execute_process(COMMAND "cmd.exe" "/C" "DATE" "/T" OUTPUT_VARIABLE BUILD)
+    string(REGEX REPLACE ".*[ ]([0-9]*)[/.]([0-9]*)[/.]([0-9]*).*" "\\3\\2\\1" BUILD "${BUILD}")
+  else()
+    string(SUBSTRING "${BUILD}" 0 8 BUILD)
+  endif()
 else()
   message(FATAL_ERROR "Platform not supported by this build system.  Use autotools instead.")
 endif()
@@ -39,7 +46,8 @@ option(WITH_ARITH_ENC "Include arithmetic encoding support" TRUE)
 option(WITH_ARITH_DEC "Include arithmetic decoding support" TRUE)
 option(WITH_JPEG7 "Emulate libjpeg v7 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b)" FALSE)
 option(WITH_JPEG8 "Emulate libjpeg v8 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b)" FALSE)
-option(WITH_JAVA "Build Java wrapper for the TurboJPEG/OSS library" FALSE)
+option(WITH_MEM_SRCDST "Include in-memory source/destination manager functions when emulating the libjpeg v6b or v7 API/ABI" TRUE)
+option(WITH_JAVA "Build Java wrapper for the TurboJPEG library" FALSE)
 
 if(WITH_ARITH_ENC)
   set(C_ARITH_CODING_SUPPORTED 1)
@@ -56,14 +64,19 @@ else()
 endif()
 
 if(WITH_JAVA)
-  message(STATUS "TurboJPEG/OSS Java wrapper enabled")
+  message(STATUS "TurboJPEG Java wrapper enabled")
 else()
-  message(STATUS "TurboJPEG/OSS Java wrapper disabled")
+  message(STATUS "TurboJPEG Java wrapper disabled")
+endif()
+
+set(SO_AGE 0)
+if(WITH_MEM_SRCDST)
+  set(SO_AGE 1)
 endif()
 
 set(JPEG_LIB_VERSION 62)
 set(DLL_VERSION ${JPEG_LIB_VERSION})
-set(FULLVERSION ${DLL_VERSION}.0.0)
+set(FULLVERSION ${DLL_VERSION}.${SO_AGE}.0)
 if(WITH_JPEG8)
   set(JPEG_LIB_VERSION 80)
   set(DLL_VERSION 8)
@@ -72,10 +85,17 @@ if(WITH_JPEG8)
 elseif(WITH_JPEG7)
   set(JPEG_LIB_VERSION 70)
   set(DLL_VERSION 7)
-  set(FULLVERSION ${DLL_VERSION}.0.0)
+  set(FULLVERSION ${DLL_VERSION}.${SO_AGE}.0)
   message(STATUS "Emulating libjpeg v7 API/ABI")
 endif(WITH_JPEG8)
 
+if(WITH_MEM_SRCDST)
+  set(MEM_SRCDST_SUPPORTED 1)
+  message(STATUS "In-memory source/destination managers enabled")
+else()
+  message(STATUS "In-memory source/destination managers disabled")
+endif()
+
 if(MSVC)
   # Use the static C library for all build types
   foreach(var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
@@ -103,6 +123,22 @@ else()
   message(STATUS "32-bit build")
 endif()
 
+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+  if(MSVC)
+    set(CMAKE_INSTALL_PREFIX_DEFAULT ${CMAKE_PROJECT_NAME})
+  else()
+    set(CMAKE_INSTALL_PREFIX_DEFAULT ${CMAKE_PROJECT_NAME}-gcc)
+  endif()
+  if(64BIT)
+    set(CMAKE_INSTALL_PREFIX_DEFAULT ${CMAKE_INSTALL_PREFIX_DEFAULT}64)
+  endif()
+  set(CMAKE_INSTALL_PREFIX "c:/${CMAKE_INSTALL_PREFIX_DEFAULT}" CACHE PATH
+    "Directory into which to install libjpeg-turbo (default: c:/${CMAKE_INSTALL_PREFIX_DEFAULT})"
+    FORCE)
+endif()
+
+message(STATUS "Install directory = ${CMAKE_INSTALL_PREFIX}")
+
 configure_file(win/jconfig.h.in jconfig.h)
 configure_file(win/config.h.in config.h)
 
@@ -243,6 +279,40 @@ else()
 endif()
 
 enable_testing()
+
+set(MD5_JPEG_INT 9a68f56bc76e466aa7e52f415d0f4a5f)
+set(MD5_JPEG_FAST 0e1502e7fa421835e376a314fac2a39f)
+set(MD5_JPEG_FAST_100 7bf72a8e741d64eecb960c97323af77c)
+set(MD5_JPEG_FLOAT d1623885ffafcd40c684af09e3d65cd5)
+set(MD5_JPEG_FLOAT_NOSIMD fb4884c35f8273f498cb32879de5c455)
+set(MD5_JPEG_INT_GRAY 72b51f894b8f4a10b3ee3066770aa38d)
+set(MD5_PPM_INT d1ed0d11f076b842525271647716aeb8)
+set(MD5_PPM_FAST 048298a2d2410261c0533cb97bcfef23)
+set(MD5_PPM_FLOAT 7f5b446ee36b2630e06785b8d42af15f)
+set(MD5_PPM_FLOAT_NOSIMD 64072f1dbdc5b3a187777788604971a5)
+set(MD5_PPM_INT_2_1 9f9de8c0612f8d06869b960b05abf9c9)
+set(MD5_PPM_INT_15_8 b6875bc070720b899566cc06459b63b7)
+set(MD5_PPM_INT_7_4 06a177eae05f164fac57f7a2c346ee87)
+set(MD5_PPM_INT_13_8 bc3452573c8152f6ae552939ee19f82f)
+set(MD5_PPM_INT_3_2 f5a8b88a8a7f96016f04d259cf82ed67)
+set(MD5_PPM_INT_11_8 d8cc73c0aaacd4556569b59437ba00a5)
+set(MD5_PPM_INT_5_4 32775dd9ad2ab90f4c5b219b53e0c86c)
+set(MD5_PPM_INT_9_8 d25e61bc7eac0002f5b393aa223747b6)
+set(MD5_PPM_INT_7_8 ddb564b7c74a09494016d6cd7502a946)
+set(MD5_PPM_INT_3_4 8ed8e68808c3fbc4ea764fc9d2968646)
+set(MD5_PPM_INT_5_8 a3363274999da2366a024efae6d16c9b)
+set(MD5_PPM_INT_1_2 e692a315cea26b988c8e8b29a5dbcd81)
+set(MD5_PPM_INT_3_8 79eca9175652ced755155c90e785a996)
+set(MD5_PPM_INT_1_4 79cd778f8bf1a117690052cacdd54eca)
+set(MD5_PPM_INT_1_8 391b3d4aca640c8567d6f8745eb2142f)
+set(MD5_PPM_FAST_1_2 f30bcf6d32ccd44cbdd9aeaacbd9454f)
+set(MD5_BMP_256 4980185e3776e89bd931736e1cddeee6)
+set(MD5_JPEG_ARI e986fb0a637a8d833d96e8a6d6d84ea1)
+set(MD5_PPM_ARI 72b59a99bcf1de24c5b27d151bde2437)
+set(MD5_JPEG_PROG 1c4afddc05c0a43489ee54438a482d92)
+set(MD5_JPEG_PROG_ARI 0a8f1c8f66e113c3cf635df0a475a617)
+set(MD5_JPEG_CROP b4197f377e621c4e9b1d20471432610d)
+
 if(WITH_JAVA)
 add_test(TJUnitTest ${JAVA_RUNTIME} -cp java/${OBJDIR}turbojpeg.jar -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR} TJUnitTest)
 add_test(TJUnitTest-yuv ${JAVA_RUNTIME} -cp java/${OBJDIR}turbojpeg.jar -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR} TJUnitTest -yuv)
@@ -253,121 +323,115 @@ add_test(tjunittest tjunittest)
 add_test(tjunittest-alloc tjunittest -alloc)
 add_test(tjunittest-yuv tjunittest -yuv)
 add_test(cjpeg-int sharedlib/cjpeg -dct int -outfile testoutint.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
-add_test(cjpeg-int-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg testoutint.jpg)
+add_test(cjpeg-int-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_INT} -DFILE=testoutint.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(cjpeg-fast sharedlib/cjpeg -dct fast -opt -outfile testoutfst.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
-add_test(cjpeg-fast-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst.jpg testoutfst.jpg)
+add_test(cjpeg-fast-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_FAST} -DFILE=testoutfst.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(cjpeg-fast-100 sharedlib/cjpeg -dct fast -quality 100 -opt -outfile testoutfst100.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
-add_test(cjpeg-fast-100-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst100.jpg testoutfst100.jpg)
+add_test(cjpeg-fast-100-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_FAST_100} -DFILE=testoutfst100.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(cjpeg-float sharedlib/cjpeg -dct float -outfile testoutflt.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
 if(WITH_SIMD)
-add_test(cjpeg-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgflt.jpg testoutflt.jpg)
+add_test(cjpeg-float-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_FLOAT} -DFILE=testoutflt.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 else()
-add_test(cjpeg-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgflt-nosimd.jpg testoutflt.jpg)
+add_test(cjpeg-float-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_FLOAT_NOSIMD} -DFILE=testoutflt.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 endif()
 add_test(cjpeg-int-gray sharedlib/cjpeg -dct int -grayscale -outfile testoutgray.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
-add_test(cjpeg-int-gray-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimggray.jpg testoutgray.jpg)
+add_test(cjpeg-int-gray-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_INT_GRAY} -DFILE=testoutgray.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(djpeg-int sharedlib/djpeg -dct int -fast -ppm -outfile testoutint.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-int-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint.ppm testoutint.ppm)
+add_test(djpeg-int-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_INT} -DFILE=testoutint.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(djpeg-fast sharedlib/djpeg -dct fast -ppm -outfile testoutfst.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-fast-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst.ppm testoutfst.ppm)
+add_test(djpeg-fast-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_FAST} -DFILE=testoutfst.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(djpeg-float sharedlib/djpeg -dct float -ppm -outfile testoutflt.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
 if(WITH_SIMD)
-add_test(djpeg-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgflt.ppm testoutflt.ppm)
+add_test(djpeg-float-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_FLOAT} -DFILE=testoutflt.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 else()
-add_test(djpeg-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm testoutflt.ppm)
+add_test(djpeg-float-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_FLOAT_NOSIMD} -DFILE=testoutflt.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 endif()
-add_test(djpeg-int-1_2 sharedlib/djpeg -dct int -scale 1/2 -ppm -outfile testoutint1_2.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-int-1_2-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint1_2.ppm testoutint1_2.ppm)
+foreach(scale 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8)
+string(REGEX REPLACE "_" "/" scalearg ${scale})
+add_test(djpeg-int-${scale} sharedlib/djpeg -dct int -nosmooth -scale ${scalearg} -ppm -outfile testoutint${scale}.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
+add_test(djpeg-int-${scale}-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_INT_${scale}} -DFILE=testoutint${scale}.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
+endforeach()
 add_test(djpeg-fast-1_2 sharedlib/djpeg -dct fast -scale 1/2 -ppm -outfile testoutfst1_2.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-fast-1_2-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst1_2.ppm testoutfst1_2.ppm)
-add_test(djpeg-int-1_4 sharedlib/djpeg -dct int -scale 1/4 -ppm -outfile testoutint1_4.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-int-1_4-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint1_4.ppm testoutint1_4.ppm)
-add_test(djpeg-fast-1_4 sharedlib/djpeg -dct fast -scale 1/4 -ppm -outfile testoutfst1_4.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-fast-1_4-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst1_4.ppm testoutfst1_4.ppm)
-add_test(djpeg-int-1_8 sharedlib/djpeg -dct int -scale 1/8 -ppm -outfile testoutint1_8.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-int-1_8-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint1_8.ppm testoutint1_8.ppm)
-add_test(djpeg-fast-1_8 sharedlib/djpeg -dct fast -scale 1/8 -ppm -outfile testoutfst1_8.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-fast-1_8-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst1_8.ppm testoutfst1_8.ppm)
+add_test(djpeg-fast-1_2-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_FAST_1_2} -DFILE=testoutfst1_2.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(djpeg-256 sharedlib/djpeg -dct int -bmp -colors 256 -outfile testout.bmp  ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-256-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimg.bmp testout.bmp)
+add_test(djpeg-256-cmp ${CMAKE_COMMAND} -DMD5=${MD5_BMP_256} -DFILE=testout.bmp -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(cjpeg-prog sharedlib/cjpeg -dct int -progressive -outfile testoutp.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
-add_test(cjpeg-prog-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgp.jpg testoutp.jpg)
+add_test(cjpeg-prog-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_PROG} -DFILE=testoutp.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(jpegtran-prog sharedlib/jpegtran -outfile testoutt.jpg testoutp.jpg)
-add_test(jpegtran-prog-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg testoutt.jpg)
+add_test(jpegtran-prog-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_INT} -DFILE=testoutt.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 if(WITH_ARITH_ENC)
 add_test(cjpeg-ari sharedlib/cjpeg -dct int -arithmetic -outfile testoutari.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
-add_test(cjpeg-ari-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg testoutari.jpg)
+add_test(cjpeg-ari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_ARI} -DFILE=testoutari.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake )
 add_test(jpegtran-toari sharedlib/jpegtran -arithmetic -outfile testouta.jpg ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg)
-add_test(jpegtran-toari-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg testouta.jpg)
+add_test(jpegtran-toari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_ARI} -DFILE=testouta.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
+add_test(cjpeg-prog-ari sharedlib/cjpeg -dct int -progressive -arithmetic -sample 1x1 -outfile testoutpa.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
+add_test(cjpeg-prog-ari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_PROG_ARI} -DFILE=testoutpa.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake )
 endif()
 if(WITH_ARITH_DEC)
 add_test(djpeg-ari sharedlib/djpeg -dct int -fast -ppm -outfile testoutari.ppm ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg)
-add_test(djpeg-ari-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgari.ppm testoutari.ppm)
+add_test(djpeg-ari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_ARI} -DFILE=testoutari.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(jpegtran-fromari      sharedlib/jpegtran -outfile testouta.jpg ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg)
-add_test(jpegtran-fromari-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg testouta.jpg)
+add_test(jpegtran-fromari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_INT} -DFILE=testouta.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 endif()
 add_test(jpegtran-crop sharedlib/jpegtran -crop 120x90+20+50 -transpose -perfect -outfile testoutcrop.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(jpegtran-crop-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgcrop.jpg testoutcrop.jpg)
+add_test(jpegtran-crop-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_CROP} -DFILE=testoutcrop.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 
 add_test(tjunittest-static tjunittest-static)
 add_test(tjunittest-static-alloc tjunittest-static -alloc)
 add_test(tjunittest-static-yuv tjunittest-static -yuv)
 add_test(cjpeg-static-int cjpeg-static -dct int -outfile testoutint.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
-add_test(cjpeg-static-int-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg testoutint.jpg)
+add_test(cjpeg-static-int-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_INT} -DFILE=testoutint.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(cjpeg-static-fast cjpeg-static -dct fast -opt -outfile testoutfst.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
-add_test(cjpeg-static-fast-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst.jpg testoutfst.jpg)
+add_test(cjpeg-static-fast-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_FAST} -DFILE=testoutfst.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(cjpeg-static-fast-100 cjpeg-static -dct fast -quality 100 -opt -outfile testoutfst100.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
-add_test(cjpeg-static-fast-100-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst100.jpg testoutfst100.jpg)
+add_test(cjpeg-static-fast-100-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_FAST_100} -DFILE=testoutfst100.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(cjpeg-static-float cjpeg-static -dct float -outfile testoutflt.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
 if(WITH_SIMD)
-add_test(cjpeg-static-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgflt.jpg testoutflt.jpg)
+add_test(cjpeg-static-float-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_FLOAT} -DFILE=testoutflt.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 else()
-add_test(cjpeg-static-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgflt-nosimd.jpg testoutflt.jpg)
+add_test(cjpeg-static-float-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_FLOAT_NOSIMD} -DFILE=testoutflt.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 endif()
 add_test(cjpeg-static-int-gray cjpeg-static -dct int -grayscale -outfile testoutgray.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
-add_test(cjpeg-static-int-gray-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimggray.jpg testoutgray.jpg)
+add_test(cjpeg-static-int-gray-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_INT_GRAY} -DFILE=testoutgray.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(djpeg-static-int djpeg-static -dct int -fast -ppm -outfile testoutint.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-static-int-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint.ppm testoutint.ppm)
+add_test(djpeg-static-int-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_INT} -DFILE=testoutint.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(djpeg-static-fast djpeg-static -dct fast -ppm -outfile testoutfst.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-static-fast-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst.ppm testoutfst.ppm)
+add_test(djpeg-static-fast-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_FAST} -DFILE=testoutfst.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(djpeg-static-float djpeg-static -dct float -ppm -outfile testoutflt.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
 if(WITH_SIMD)
-add_test(djpeg-static-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgflt.ppm testoutflt.ppm)
+add_test(djpeg-static-float-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_FLOAT} -DFILE=testoutflt.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 else()
-add_test(djpeg-static-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm testoutflt.ppm)
+add_test(djpeg-static-float-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_FLOAT_NOSIMD} -DFILE=testoutflt.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 endif()
-add_test(djpeg-static-int-1_2 djpeg-static -dct int -scale 1/2 -ppm -outfile testoutint1_2.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-static-int-1_2-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint1_2.ppm testoutint1_2.ppm)
+foreach(scale 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8)
+string(REGEX REPLACE "_" "/" scalearg ${scale})
+add_test(djpeg-static-int-${scale} djpeg-static -dct int -nosmooth -scale ${scalearg} -ppm -outfile testoutint${scale}.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
+add_test(djpeg-static-int-${scale}-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_INT_${scale}} -DFILE=testoutint${scale}.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
+endforeach()
 add_test(djpeg-static-fast-1_2 djpeg-static -dct fast -scale 1/2 -ppm -outfile testoutfst1_2.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-static-fast-1_2-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst1_2.ppm testoutfst1_2.ppm)
-add_test(djpeg-static-int-1_4 djpeg-static -dct int -scale 1/4 -ppm -outfile testoutint1_4.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-static-int-1_4-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint1_4.ppm testoutint1_4.ppm)
-add_test(djpeg-static-fast-1_4 djpeg-static -dct fast -scale 1/4 -ppm -outfile testoutfst1_4.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-static-fast-1_4-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst1_4.ppm testoutfst1_4.ppm)
-add_test(djpeg-static-int-1_8 djpeg-static -dct int -scale 1/8 -ppm -outfile testoutint1_8.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-static-int-1_8-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint1_8.ppm testoutint1_8.ppm)
-add_test(djpeg-static-fast-1_8 djpeg-static -dct fast -scale 1/8 -ppm -outfile testoutfst1_8.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-static-fast-1_8-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst1_8.ppm testoutfst1_8.ppm)
+add_test(djpeg-static-fast-1_2-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_FAST_1_2} -DFILE=testoutfst1_2.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(djpeg-static-256 djpeg-static -dct int -bmp -colors 256 -outfile testout.bmp  ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(djpeg-static-256-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimg.bmp testout.bmp)
+add_test(djpeg-static-256-cmp ${CMAKE_COMMAND} -DMD5=${MD5_BMP_256} -DFILE=testout.bmp -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(cjpeg-static-prog cjpeg-static -dct int -progressive -outfile testoutp.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
-add_test(cjpeg-static-prog-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgp.jpg testoutp.jpg)
+add_test(cjpeg-static-prog-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_PROG} -DFILE=testoutp.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(jpegtran-static-prog jpegtran-static -outfile testoutt.jpg testoutp.jpg)
-add_test(jpegtran-static-prog-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg testoutt.jpg)
+add_test(jpegtran-static-prog-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_INT} -DFILE=testoutt.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 if(WITH_ARITH_ENC)
 add_test(cjpeg-static-ari cjpeg-static -dct int -arithmetic -outfile testoutari.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
-add_test(cjpeg-static-ari-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg testoutari.jpg)
+add_test(cjpeg-static-ari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_ARI} -DFILE=testoutari.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake )
 add_test(jpegtran-static-toari jpegtran-static -arithmetic -outfile testouta.jpg ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg)
-add_test(jpegtran-static-toari-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg testouta.jpg)
+add_test(jpegtran-static-toari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_ARI} -DFILE=testouta.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
+add_test(cjpeg-static-prog-ari cjpeg-static -dct int -progressive -arithmetic -sample 1x1 -outfile testoutpa.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
+add_test(cjpeg-static-prog-ari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_PROG_ARI} -DFILE=testoutpa.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake )
 endif()
 if(WITH_ARITH_DEC)
 add_test(djpeg-static-ari djpeg-static -dct int -fast -ppm -outfile testoutari.ppm ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg)
-add_test(djpeg-static-ari-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgari.ppm testoutari.ppm)
+add_test(djpeg-static-ari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_ARI} -DFILE=testoutari.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 add_test(jpegtran-static-fromari       jpegtran-static -outfile testouta.jpg ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg)
-add_test(jpegtran-static-fromari-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg testouta.jpg)
+add_test(jpegtran-static-fromari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_INT} -DFILE=testouta.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 endif()
 add_test(jpegtran-static-crop jpegtran-static -crop 120x90+20+50 -transpose -perfect -outfile testoutcrop.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
-add_test(jpegtran-static-crop-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgcrop.jpg testoutcrop.jpg)
+add_test(jpegtran-static-crop-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_CROP} -DFILE=testoutcrop.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
 
 add_custom_target(testclean COMMAND ${CMAKE_COMMAND} -P
   ${CMAKE_SOURCE_DIR}/cmakescripts/testclean.cmake)
@@ -380,18 +444,18 @@ add_custom_target(testclean COMMAND ${CMAKE_COMMAND} -P
 if(MSVC)
   set(INST_PLATFORM "Visual C++")
   set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-vc)
-  set(INST_DIR ${CMAKE_PROJECT_NAME})
+  set(INST_REG_NAME ${CMAKE_PROJECT_NAME})
 elseif(MINGW)
   set(INST_PLATFORM GCC)
   set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-gcc)
-  set(INST_DIR ${CMAKE_PROJECT_NAME}-gcc)
+  set(INST_REG_NAME ${CMAKE_PROJECT_NAME}-gcc)
   set(INST_DEFS -DGCC)
 endif()
 
 if(64BIT)
   set(INST_PLATFORM "${INST_PLATFORM} 64-bit")
   set(INST_NAME ${INST_NAME}64)
-  set(INST_DIR ${INST_DIR}64)
+  set(INST_REG_NAME ${INST_DIR}64)
   set(INST_DEFS ${INST_DEFS} -DWIN64)
 endif()
 
@@ -405,12 +469,17 @@ else()
   set(INST_DEFS ${INST_DEFS} "-DBUILDDIR=")
 endif()
 
+STRING(REGEX REPLACE "/" "\\\\" INST_DIR ${CMAKE_INSTALL_PREFIX}) 
+
 configure_file(release/libjpeg-turbo.nsi.in libjpeg-turbo.nsi @ONLY)
 
+if(WITH_JAVA)
+  set(JAVA_DEPEND java)
+endif()
 add_custom_target(installer
   makensis -nocd ${INST_DEFS} libjpeg-turbo.nsi
   DEPENDS jpeg jpeg-static turbojpeg turbojpeg-static rdjpgcom wrjpgcom
-    cjpeg djpeg jpegtran tjbench
+    cjpeg djpeg jpegtran tjbench ${JAVA_DEPEND}
   SOURCES libjpeg-turbo.nsi)
 
 install(TARGETS jpeg-static turbojpeg turbojpeg-static rdjpgcom wrjpgcom tjbench
index 2f1242a..3ec6c18 100644 (file)
@@ -1,3 +1,140 @@
+1.3.1
+=====
+
+[1] On Un*x systems, 'make install' now installs the libjpeg-turbo libraries
+into /opt/libjpeg-turbo/lib32 by default on any 32-bit system, not just x86,
+and into /opt/libjpeg-turbo/lib64 by default on any 64-bit system, not just
+x86-64.  You can override this by overriding either the 'prefix' or 'libdir'
+configure variables.
+
+[2] The Windows installer now places a copy of the TurboJPEG DLLs in the same
+directory as the rest of the libjpeg-turbo binaries.  This was mainly done
+to support TurboVNC 1.3, which bundles the DLLs in its Windows installation.
+When using a 32-bit version of CMake on 64-bit Windows, it is impossible to
+access the c:\WINDOWS\system32 directory, which made it impossible for the
+TurboVNC build scripts to bundle the 64-bit TurboJPEG DLL.
+
+[3] Fixed a bug whereby attempting to encode a progressive JPEG with arithmetic
+entropy coding (by passing arguments of -progressive -arithmetic to cjpeg or
+jpegtran, for instance) would result in an error, "Requested feature was
+omitted at compile time".
+
+[4] Fixed a couple of issues whereby malformed JPEG images would cause
+libjpeg-turbo to use uninitialized memory during decompression.
+
+[5] Fixed an error ("Buffer passed to JPEG library is too small") that occurred
+when calling the TurboJPEG YUV encoding function with a very small (< 5x5)
+source image, and added a unit test to check for this error.
+
+[6] The Java classes should now build properly under Visual Studio 2010 and
+later.
+
+[7] Fixed an issue that prevented SRPMs generated using the in-tree packaging
+tools from being rebuilt on certain newer Linux distributions.
+
+[8] Numerous minor fixes to eliminate compilation and build/packaging system
+warnings, fix cosmetic issues, improve documentation clarity, and other general
+source cleanup.
+
+
+1.3.0
+=====
+
+[1] 'make test' now works properly on FreeBSD, and it no longer requires the
+md5sum executable to be present on other Un*x platforms.
+
+[2] Overhauled the packaging system:
+-- To avoid conflict with vendor-supplied libjpeg-turbo packages, the
+official RPMs and DEBs for libjpeg-turbo have been renamed to
+"libjpeg-turbo-official".
+-- The TurboJPEG libraries are now located under /opt/libjpeg-turbo in the
+official Linux and Mac packages, to avoid conflict with vendor-supplied
+packages and also to streamline the packaging system.
+-- Release packages are now created with the directory structure defined
+by the configure variables "prefix", "bindir", "libdir", etc. (Un*x) or by the
+CMAKE_INSTALL_PREFIX variable (Windows.)  The exception is that the docs are
+always located under the system default documentation directory on Un*x and Mac
+systems, and on Windows, the TurboJPEG DLL is always located in the Windows
+system directory.
+-- To avoid confusion, official libjpeg-turbo packages on Linux/Unix platforms
+(except for Mac) will always install the 32-bit libraries in
+/opt/libjpeg-turbo/lib32 and the 64-bit libraries in /opt/libjpeg-turbo/lib64.
+-- Fixed an issue whereby, in some cases, the libjpeg-turbo executables on Un*x
+systems were not properly linking with the shared libraries installed by the
+same package.
+-- Fixed an issue whereby building the "installer" target on Windows when
+WITH_JAVA=1 would fail if the TurboJPEG JAR had not been previously built.
+-- Building the "install" target on Windows now installs files into the same
+places that the installer does.
+
+[3] Fixed a Huffman encoder bug that prevented I/O suspension from working
+properly.
+
+
+1.2.90 (1.3 beta1)
+==================
+
+[1] Added support for additional scaling factors (3/8, 5/8, 3/4, 7/8, 9/8, 5/4,
+11/8, 3/2, 13/8, 7/4, 15/8, and 2) when decompressing.  Note that the IDCT will
+not be SIMD-accelerated when using any of these new scaling factors.
+
+[2] The TurboJPEG dynamic library is now versioned.  It was not strictly
+necessary to do so, because TurboJPEG uses versioned symbols, and if a function
+changes in an ABI-incompatible way, that function is renamed and a legacy
+function is provided to maintain backward compatibility.  However, certain
+Linux distro maintainers have a policy against accepting any library that isn't
+versioned.
+
+[3] Extended the TurboJPEG Java API so that it can be used to compress a JPEG
+image from and decompress a JPEG image to an arbitrary position in a large
+image buffer.
+
+[4] The tjDecompressToYUV() function now supports the TJFLAG_FASTDCT flag.
+
+[5] The 32-bit supplementary package for amd64 Debian systems now provides
+symlinks in /usr/lib/i386-linux-gnu for the TurboJPEG libraries in /usr/lib32.
+This allows those libraries to be used on MultiArch-compatible systems (such as
+Ubuntu 11 and later) without setting the linker path.
+
+[6] The TurboJPEG Java wrapper should now find the JNI library on Mac systems
+without having to pass -Djava.library.path=/usr/lib to java.
+
+[7] TJBench has been ported to Java to provide a convenient way of validating
+the performance of the TurboJPEG Java API.  It can be run with
+'java -cp turbojpeg.jar TJBench'.
+
+[8] cjpeg can now be used to generate JPEG files with the RGB colorspace
+(feature ported from jpeg-8d.)
+
+[9] The width and height in the -crop argument passed to jpegtran can now be
+suffixed with "f" to indicate that, when the upper left corner of the cropping
+region is automatically moved to the nearest iMCU boundary, the bottom right
+corner should be moved by the same amount.  In other words, this feature causes
+jpegtran to strictly honor the specified width/height rather than the specified
+bottom right corner (feature ported from jpeg-8d.)
+
+[10] JPEG files using the RGB colorspace can now be decompressed into grayscale
+images (feature ported from jpeg-8d.)
+
+[11] Fixed a regression caused by 1.2.1[7] whereby the build would fail with
+multiple "Mismatch in operand sizes" errors when attempting to build the x86
+SIMD code with NASM 0.98.
+
+[12] The in-memory source/destination managers (jpeg_mem_src() and
+jpeg_mem_dest()) are now included by default when building libjpeg-turbo with
+libjpeg v6b or v7 emulation, so that programs can take advantage of these
+functions without requiring the use of the backward-incompatible libjpeg v8
+ABI.  The "age number" of the libjpeg-turbo library on Un*x systems has been
+incremented by 1 to reflect this.  You can disable this feature with a
+configure/CMake switch in order to retain strict API/ABI compatibility with the
+libjpeg v6b or v7 API/ABI (or with previous versions of libjpeg-turbo.)  See
+README-turbo.txt for more details.
+
+[13] Added ARM v7s architecture to libjpeg.a and libturbojpeg.a in the official
+libjpeg-turbo binary package for OS X, so that those libraries can be used to
+build applications that leverage the faster CPUs in the iPhone 5 and iPad 4.
+
+
 1.2.1
 =====
 
@@ -77,8 +214,8 @@ are in violation of the spec, other JPEG implementations handle them
 correctly.
 
 [7] Added ARM v6 and ARM v7 architectures to libjpeg.a and libturbojpeg.a in
-the official OS X distribution package, so that those libraries can be used to
-build both OS X and iOS applications.
+the official libjpeg-turbo binary package for OS X, so that those libraries can
+be used to build both OS X and iOS applications.
 
 
 1.1.90 (1.2 beta1)
@@ -124,7 +261,7 @@ NEON instructions.
 TurboJPEG 1.2 API uses pixel formats to define the size and component order of
 the uncompressed source/destination images, and it includes a more efficient
 version of TJBUFSIZE() that computes a worst-case JPEG size based on the level
-of chrominance subsampling.  The refactored implementation of TurboJPEG/OSS
+of chrominance subsampling.  The refactored implementation of the TurboJPEG API
 now uses the libjpeg memory source and destination managers, which allows the
 TurboJPEG compressor to grow the JPEG buffer as necessary.
 
@@ -200,12 +337,12 @@ and libjpeg-turbo should now produce identical output to libjpeg v6b in all
 cases.
 
 [2] Despite the above, the fast integer forward DCT still degrades somewhat for
-JPEG qualities greater than 95, so TurboJPEG/OSS will now automatically use the
-slow integer forward DCT when generating JPEG images of quality 96 or greater.
-This reduces compression performance by as much as 15% for these high-quality
-images but is necessary to ensure that the images are perceptually lossless.
-It also ensures that the library can avoid the performance pitfall created by
-[1].
+JPEG qualities greater than 95, so the TurboJPEG wrapper will now automatically
+use the slow integer forward DCT when generating JPEG images of quality 96 or
+greater.  This reduces compression performance by as much as 15% for these
+high-quality images but is necessary to ensure that the images are perceptually
+lossless.  It also ensures that the library can avoid the performance pitfall
+created by [1].
 
 [3] Ported jpgtest.cxx to pure C to avoid the need for a C++ compiler.
 
@@ -278,7 +415,7 @@ INCOMPLETE_TYPES_BROKEN macro should be defined.
 [1] 2983700: Further FreeBSD build tweaks (no longer necessary to specify
 --host when configuring on a 64-bit system)
 
-[2] Created symlinks in the Unix/Linux packages so that the TurboJPEG
+[2] Created symlinks in the Unix/Linux packages so that the TurboJPEG
 include file can always be found in /opt/libjpeg-turbo/include, the 32-bit
 static libraries can always be found in /opt/libjpeg-turbo/lib32, and the
 64-bit static libraries can always be found in /opt/libjpeg-turbo/lib64.
index aa2426b..79594bf 100644 (file)
@@ -1,9 +1,16 @@
-lib_LTLIBRARIES = libjpeg.la libturbojpeg.la
-libjpeg_la_LDFLAGS = -version-info ${SO_MAJOR_VERSION}:${SO_MINOR_VERSION} -no-undefined
-libturbojpeg_la_LDFLAGS = -avoid-version -no-undefined
-include_HEADERS = jerror.h jmorecfg.h jpeglib.h turbojpeg.h
+lib_LTLIBRARIES = libjpeg.la
+libjpeg_la_LDFLAGS = -version-info ${LIBTOOL_CURRENT}:${SO_MINOR_VERSION}:${SO_AGE} -no-undefined
+include_HEADERS = jerror.h jmorecfg.h jpeglib.h
+
+if WITH_TURBOJPEG
+lib_LTLIBRARIES += libturbojpeg.la
+libturbojpeg_la_LDFLAGS = -version-info 0:0 -no-undefined
+include_HEADERS += turbojpeg.h
+endif
+
 nodist_include_HEADERS = jconfig.h
 
+
 HDRS = jchuff.h jdct.h jdhuff.h jerror.h jinclude.h jmemsys.h jmorecfg.h \
        jpegint.h jpeglib.h jversion.h jsimd.h jsimddct.h jpegcomp.h
 
@@ -17,28 +24,26 @@ libjpeg_la_SOURCES = $(HDRS) jcapimin.c jcapistd.c jccoefct.c jccolor.c \
        jidctred.c jquant1.c jquant2.c jutils.c jmemmgr.c jmemnobs.c
 
 if WITH_ARITH
-
 libjpeg_la_SOURCES += jaricom.c
-
 endif
 
 if WITH_ARITH_ENC
-
 libjpeg_la_SOURCES += jcarith.c
-
 endif
 
 if WITH_ARITH_DEC
-
 libjpeg_la_SOURCES += jdarith.c
-
 endif
 
-libturbojpeg_la_SOURCES = $(libjpeg_la_SOURCES) turbojpeg.c turbojpeg.h \
-       transupp.c transupp.h jdatadst-tj.c jdatasrc-tj.c
 
 SUBDIRS = java
 
+
+if WITH_TURBOJPEG
+
+libturbojpeg_la_SOURCES = $(libjpeg_la_SOURCES) turbojpeg.c turbojpeg.h \
+       transupp.c transupp.h jdatadst-tj.c jdatasrc-tj.c
+
 if WITH_JAVA
 
 libturbojpeg_la_SOURCES += turbojpeg-jni.c
@@ -54,12 +59,17 @@ endif
 libturbojpeg_la_SOURCES += $(TJMAPFILE)
 
 if VERSION_SCRIPT
-
 libturbojpeg_la_LDFLAGS += $(VERSION_SCRIPT_FLAG)$(srcdir)/$(TJMAPFILE)
-libjpeg_la_LDFLAGS += $(VERSION_SCRIPT_FLAG)libjpeg.map
+endif
 
 endif
 
+
+if VERSION_SCRIPT
+libjpeg_la_LDFLAGS += $(VERSION_SCRIPT_FLAG)libjpeg.map
+endif
+
+
 if WITH_SIMD
 
 SUBDIRS += simd
@@ -72,8 +82,16 @@ libjpeg_la_SOURCES += jsimd_none.c
 
 endif
 
-bin_PROGRAMS = cjpeg djpeg jpegtran rdjpgcom wrjpgcom tjbench
-noinst_PROGRAMS = tjunittest jcstest
+
+bin_PROGRAMS = cjpeg djpeg jpegtran rdjpgcom wrjpgcom
+noinst_PROGRAMS = jcstest
+
+
+if WITH_TURBOJPEG
+
+bin_PROGRAMS += tjbench
+
+noinst_PROGRAMS += tjunittest
 
 tjbench_SOURCES = tjbench.c bmp.h bmp.c tjutil.h tjutil.c rdbmp.c rdppm.c \
        wrbmp.c wrppm.c
@@ -86,6 +104,9 @@ tjunittest_SOURCES = tjunittest.c tjutil.h tjutil.c
 
 tjunittest_LDADD = libturbojpeg.la
 
+endif
+
+
 cjpeg_SOURCES = cdjpeg.h cderror.h cdjpeg.c cjpeg.c rdbmp.c rdgif.c \
        rdppm.c rdswitch.c rdtarga.c 
 
@@ -120,8 +141,8 @@ jcstest_LDADD = libjpeg.la
 
 dist_man1_MANS = cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 wrjpgcom.1
 
-DOCS= install.txt coderules.txt filelist.txt jconfig.txt change.log \
-       rdrle.c wrrle.c BUILDING.txt ChangeLog.txt
+DOCS= coderules.txt jconfig.txt change.log rdrle.c wrrle.c BUILDING.txt \
+       ChangeLog.txt
 
 docdir = $(datadir)/doc
 dist_doc_DATA = README README-turbo.txt libjpeg.txt structure.txt usage.txt \
@@ -139,7 +160,43 @@ dist-hook:
        rm -rf `find $(distdir) -name .svn`
 
 
+SUBDIRS += md5
+
+MD5_JPEG_INT = 9a68f56bc76e466aa7e52f415d0f4a5f
+MD5_JPEG_FAST = 0e1502e7fa421835e376a314fac2a39f
+MD5_JPEG_FAST_100 = 7bf72a8e741d64eecb960c97323af77c
+MD5_JPEG_FLOAT = d1623885ffafcd40c684af09e3d65cd5
+MD5_JPEG_FLOAT_NOSIMD = fb4884c35f8273f498cb32879de5c455
+MD5_JPEG_INT_GRAY = 72b51f894b8f4a10b3ee3066770aa38d
+MD5_PPM_INT = d1ed0d11f076b842525271647716aeb8
+MD5_PPM_FAST = 048298a2d2410261c0533cb97bcfef23
+MD5_PPM_FLOAT = 7f5b446ee36b2630e06785b8d42af15f
+MD5_PPM_FLOAT_NOSIMD = 64072f1dbdc5b3a187777788604971a5
+MD5_PPM_INT_2_1 = 9f9de8c0612f8d06869b960b05abf9c9
+MD5_PPM_INT_15_8 = b6875bc070720b899566cc06459b63b7
+MD5_PPM_INT_7_4 = 06a177eae05f164fac57f7a2c346ee87
+MD5_PPM_INT_13_8 = bc3452573c8152f6ae552939ee19f82f
+MD5_PPM_INT_3_2 = f5a8b88a8a7f96016f04d259cf82ed67
+MD5_PPM_INT_11_8 = d8cc73c0aaacd4556569b59437ba00a5
+MD5_PPM_INT_5_4 = 32775dd9ad2ab90f4c5b219b53e0c86c
+MD5_PPM_INT_9_8 = d25e61bc7eac0002f5b393aa223747b6
+MD5_PPM_INT_7_8 = ddb564b7c74a09494016d6cd7502a946
+MD5_PPM_INT_3_4 = 8ed8e68808c3fbc4ea764fc9d2968646
+MD5_PPM_INT_5_8 = a3363274999da2366a024efae6d16c9b
+MD5_PPM_INT_1_2 = e692a315cea26b988c8e8b29a5dbcd81
+MD5_PPM_INT_3_8 = 79eca9175652ced755155c90e785a996
+MD5_PPM_INT_1_4 = 79cd778f8bf1a117690052cacdd54eca
+MD5_PPM_INT_1_8 = 391b3d4aca640c8567d6f8745eb2142f
+MD5_PPM_FAST_1_2 = f30bcf6d32ccd44cbdd9aeaacbd9454f
+MD5_BMP_256 = 4980185e3776e89bd931736e1cddeee6
+MD5_JPEG_ARI = e986fb0a637a8d833d96e8a6d6d84ea1
+MD5_PPM_ARI = 72b59a99bcf1de24c5b27d151bde2437
+MD5_JPEG_PROG = 1c4afddc05c0a43489ee54438a482d92
+MD5_JPEG_PROG_ARI = 0a8f1c8f66e113c3cf635df0a475a617
+MD5_JPEG_CROP = b4197f377e621c4e9b1d20471432610d
+
 test: testclean all
+if WITH_TURBOJPEG
 if WITH_JAVA
        $(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest
        $(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -bi
@@ -149,62 +206,85 @@ endif
        ./tjunittest
        ./tjunittest -alloc
        ./tjunittest -yuv
+endif
        ./cjpeg -dct int -outfile testoutint.jpg $(srcdir)/testimages/testorig.ppm
-       cmp $(srcdir)/testimages/testimgint.jpg testoutint.jpg
+       md5/md5cmp $(MD5_JPEG_INT) testoutint.jpg
        ./cjpeg -dct fast -opt -outfile testoutfst.jpg $(srcdir)/testimages/testorig.ppm
-       cmp $(srcdir)/testimages/testimgfst.jpg testoutfst.jpg
+       md5/md5cmp $(MD5_JPEG_FAST) testoutfst.jpg
        ./cjpeg -dct fast -quality 100 -opt -outfile testoutfst100.jpg $(srcdir)/testimages/testorig.ppm
-       cmp $(srcdir)/testimages/testimgfst100.jpg testoutfst100.jpg
+       md5/md5cmp $(MD5_JPEG_FAST_100) testoutfst100.jpg
        ./cjpeg -dct float -outfile testoutflt.jpg $(srcdir)/testimages/testorig.ppm
 if WITH_SSE_FLOAT_DCT
-       cmp $(srcdir)/testimages/testimgflt.jpg testoutflt.jpg
+       md5/md5cmp $(MD5_JPEG_FLOAT) testoutflt.jpg
 else
-       cmp $(srcdir)/testimages/testimgflt-nosimd.jpg testoutflt.jpg
+       md5/md5cmp $(MD5_JPEG_FLOAT_NOSIMD) testoutflt.jpg
 endif
        ./cjpeg -dct int -grayscale -outfile testoutgray.jpg $(srcdir)/testimages/testorig.ppm
-       cmp $(srcdir)/testimages/testimggray.jpg testoutgray.jpg
+       md5/md5cmp $(MD5_JPEG_INT_GRAY) testoutgray.jpg
        ./djpeg -dct int -fast -ppm -outfile testoutint.ppm $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgint.ppm testoutint.ppm
+       md5/md5cmp $(MD5_PPM_INT) testoutint.ppm
        ./djpeg -dct fast -ppm -outfile testoutfst.ppm $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgfst.ppm testoutfst.ppm
+       md5/md5cmp $(MD5_PPM_FAST) testoutfst.ppm
        ./djpeg -dct float -ppm -outfile testoutflt.ppm $(srcdir)/testimages/testorig.jpg
 if WITH_SSE_FLOAT_DCT
-       cmp $(srcdir)/testimages/testimgflt.ppm testoutflt.ppm
+       md5/md5cmp $(MD5_PPM_FLOAT) testoutflt.ppm
 else
-       cmp $(srcdir)/testimages/testorig.ppm testoutflt.ppm
+       md5/md5cmp $(MD5_PPM_FLOAT_NOSIMD) testoutflt.ppm
 endif
-       ./djpeg -dct int -scale 1/2 -ppm -outfile testoutint1_2.ppm $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgint1_2.ppm testoutint1_2.ppm
+       ./djpeg -dct int -nosmooth -scale 2/1 -ppm -outfile testoutint2_1.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_2_1) testoutint2_1.ppm;
+       ./djpeg -dct int -nosmooth -scale 15/8 -ppm -outfile testoutint15_8.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_15_8) testoutint15_8.ppm;
+       ./djpeg -dct int -nosmooth -scale 7/4 -ppm -outfile testoutint7_4.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_7_4) testoutint7_4.ppm;
+       ./djpeg -dct int -nosmooth -scale 13/8 -ppm -outfile testoutint13_8.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_13_8) testoutint13_8.ppm;
+       ./djpeg -dct int -nosmooth -scale 3/2 -ppm -outfile testoutint3_2.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_3_2) testoutint3_2.ppm;
+       ./djpeg -dct int -nosmooth -scale 11/8 -ppm -outfile testoutint11_8.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_11_8) testoutint11_8.ppm;
+       ./djpeg -dct int -nosmooth -scale 5/4 -ppm -outfile testoutint5_4.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_5_4) testoutint5_4.ppm;
+       ./djpeg -dct int -nosmooth -scale 9/8 -ppm -outfile testoutint9_8.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_9_8) testoutint9_8.ppm;
+       ./djpeg -dct int -nosmooth -scale 7/8 -ppm -outfile testoutint7_8.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_7_8) testoutint7_8.ppm;
+       ./djpeg -dct int -nosmooth -scale 3/4 -ppm -outfile testoutint3_4.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_3_4) testoutint3_4.ppm;
+       ./djpeg -dct int -nosmooth -scale 5/8 -ppm -outfile testoutint5_8.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_5_8) testoutint5_8.ppm;
+       ./djpeg -dct int -nosmooth -scale 1/2 -ppm -outfile testoutint1_2.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_1_2) testoutint1_2.ppm;
+       ./djpeg -dct int -nosmooth -scale 3/8 -ppm -outfile testoutint3_8.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_3_8) testoutint3_8.ppm;
+       ./djpeg -dct int -nosmooth -scale 1/4 -ppm -outfile testoutint1_4.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_1_4) testoutint1_4.ppm;
+       ./djpeg -dct int -nosmooth -scale 1/8 -ppm -outfile testoutint1_8.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_1_8) testoutint1_8.ppm;
        ./djpeg -dct fast -scale 1/2 -ppm -outfile testoutfst1_2.ppm $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgfst1_2.ppm testoutfst1_2.ppm
-       ./djpeg -dct int -scale 1/4 -ppm -outfile testoutint1_4.ppm $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgint1_4.ppm testoutint1_4.ppm
-       ./djpeg -dct fast -scale 1/4 -ppm -outfile testoutfst1_4.ppm $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgfst1_4.ppm testoutfst1_4.ppm
-       ./djpeg -dct int -scale 1/8 -ppm -outfile testoutint1_8.ppm $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgint1_8.ppm testoutint1_8.ppm
-       ./djpeg -dct fast -scale 1/8 -ppm -outfile testoutfst1_8.ppm $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgfst1_8.ppm testoutfst1_8.ppm
-       ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp  $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimg.bmp testout.bmp
+       md5/md5cmp $(MD5_PPM_FAST_1_2) testoutfst1_2.ppm
+       ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp $(srcdir)/testimages/testorig.jpg
+       md5/md5cmp $(MD5_BMP_256) testout.bmp
 if WITH_ARITH_ENC
        ./cjpeg -dct int -arithmetic -outfile testoutari.jpg $(srcdir)/testimages/testorig.ppm
-       cmp $(srcdir)/testimages/testimgari.jpg testoutari.jpg
+       md5/md5cmp $(MD5_JPEG_ARI) testoutari.jpg
        ./jpegtran -arithmetic -outfile testouta.jpg $(srcdir)/testimages/testimgint.jpg
-       cmp $(srcdir)/testimages/testimgari.jpg testouta.jpg
+       md5/md5cmp $(MD5_JPEG_ARI) testouta.jpg
+       ./cjpeg -dct int -progressive -arithmetic -sample 1x1 -outfile testoutpa.jpg $(srcdir)/testimages/testorig.ppm
+       md5/md5cmp $(MD5_JPEG_PROG_ARI) testoutpa.jpg
 endif
 if WITH_ARITH_DEC
        ./djpeg -dct int -fast -ppm -outfile testoutari.ppm $(srcdir)/testimages/testimgari.jpg
-       cmp $(srcdir)/testimages/testimgari.ppm testoutari.ppm
+       md5/md5cmp $(MD5_PPM_ARI) testoutari.ppm
        ./jpegtran -outfile testouta.jpg $(srcdir)/testimages/testimgari.jpg
-       cmp $(srcdir)/testimages/testimgint.jpg testouta.jpg
+       md5/md5cmp $(MD5_JPEG_INT) testouta.jpg
 endif
        ./cjpeg -dct int -progressive -outfile testoutp.jpg $(srcdir)/testimages/testorig.ppm
-       cmp $(srcdir)/testimages/testimgp.jpg testoutp.jpg
+       md5/md5cmp $(MD5_JPEG_PROG) testoutp.jpg
        ./jpegtran -outfile testoutt.jpg testoutp.jpg
-       cmp $(srcdir)/testimages/testimgint.jpg testoutt.jpg
+       md5/md5cmp $(MD5_JPEG_INT) testoutt.jpg
        ./jpegtran -crop 120x90+20+50 -transpose -perfect -outfile testoutcrop.jpg $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgcrop.jpg testoutcrop.jpg
+       md5/md5cmp $(MD5_JPEG_CROP) testoutcrop.jpg
 
 
 testclean:
@@ -239,93 +319,87 @@ testclean:
 tjtest:
        sh ./tjbenchtest
 if WITH_JAVA
-       sh ./tjexampletest
+       sh ./tjbenchtest.java
 endif
 
 
-if X86_64
-
-install-exec-hook:
-       __PREFIX=`echo ${prefix} | sed -e 's@\/*$$@@'`;  \
-       if [ "$$__PREFIX" = "/opt/libjpeg-turbo" ]; then  \
-               cd $(DESTDIR)/${prefix};  \
-               if [ -d lib -a ! -d lib64 -a ! -h lib64 ]; then  \
-                       $(LN_S) lib lib64;  \
-               fi  \
-       fi
+pkgscripts/libjpeg-turbo.spec: pkgscripts/libjpeg-turbo.spec.tmpl
+       cat pkgscripts/libjpeg-turbo.spec.tmpl | sed s@%{__prefix}@$(prefix)@g | \
+               sed s@%{__bindir}@$(bindir)@g | sed s@%{__datadir}@$(datadir)@g | \
+               sed s@%{__docdir}@$(docdir)@g | sed s@%{__includedir}@$(includedir)@g | \
+               sed s@%{__libdir}@$(libdir)@g | sed s@%{__mandir}@$(mandir)@g \
+               > pkgscripts/libjpeg-turbo.spec
 
-else
-
-install-exec-hook:
-       __PREFIX=`echo ${prefix} | sed -e 's@\/*$$@@'`;  \
-       if [ "$$__PREFIX" = "/opt/libjpeg-turbo" ]; then  \
-               cd $(DESTDIR)/${prefix};  \
-               if [ -d lib -a ! -d lib32 -a ! -h lib32 ]; then  \
-                       $(LN_S) lib lib32;  \
-               fi  \
-       fi
-
-endif
-
-rpm: all
+rpm: all pkgscripts/libjpeg-turbo.spec
        TMPDIR=`mktemp -d /tmp/${PACKAGE_NAME}-build.XXXXXX`; \
        mkdir -p $$TMPDIR/RPMS; \
        ln -fs `pwd` $$TMPDIR/BUILD; \
-       rm -f ${PACKAGE_NAME}-${VERSION}.${RPMARCH}.rpm; \
+       rm -f ${PKGNAME}-${VERSION}.${RPMARCH}.rpm; \
        rpmbuild -bb --define "_blddir $$TMPDIR/buildroot"  \
                --define "_topdir $$TMPDIR" \
                --target ${RPMARCH} pkgscripts/libjpeg-turbo.spec; \
-       cp $$TMPDIR/RPMS/${RPMARCH}/${PACKAGE_NAME}-${VERSION}-${BUILD}.${RPMARCH}.rpm \
-               ${PACKAGE_NAME}-${VERSION}.${RPMARCH}.rpm; \
+       cp $$TMPDIR/RPMS/${RPMARCH}/${PKGNAME}-${VERSION}-${BUILD}.${RPMARCH}.rpm \
+               ${PKGNAME}-${VERSION}.${RPMARCH}.rpm; \
        rm -rf $$TMPDIR
 
-srpm: dist-gzip
+srpm: dist-gzip pkgscripts/libjpeg-turbo.spec
        TMPDIR=`mktemp -d /tmp/${PACKAGE_NAME}-build.XXXXXX`; \
        mkdir -p $$TMPDIR/RPMS; \
        mkdir -p $$TMPDIR/SRPMS; \
        mkdir -p $$TMPDIR/BUILD; \
        mkdir -p $$TMPDIR/SOURCES; \
        mkdir -p $$TMPDIR/SPECS; \
-       rm -f ${PACKAGE_NAME}-${VERSION}.src.rpm; \
+       rm -f ${PKGNAME}-${VERSION}.src.rpm; \
        cp ${PACKAGE_NAME}-${VERSION}.tar.gz $$TMPDIR/SOURCES; \
        cat pkgscripts/libjpeg-turbo.spec | sed s/%{_blddir}/%{_tmppath}/g \
                | sed s/#--\>//g \
                > $$TMPDIR/SPECS/libjpeg-turbo.spec; \
        rpmbuild -bs --define "_topdir $$TMPDIR" $$TMPDIR/SPECS/libjpeg-turbo.spec; \
-       cp $$TMPDIR/SRPMS/${PACKAGE_NAME}-${VERSION}-${BUILD}.src.rpm \
-               ${PACKAGE_NAME}-${VERSION}.src.rpm; \
+       cp $$TMPDIR/SRPMS/${PKGNAME}-${VERSION}-${BUILD}.src.rpm \
+               ${PKGNAME}-${VERSION}.src.rpm; \
        rm -rf $$TMPDIR
 
-deb: all
+pkgscripts/makedpkg: pkgscripts/makedpkg.tmpl
+       cat pkgscripts/makedpkg.tmpl | sed s@%{__prefix}@$(prefix)@g | \
+               sed s@%{__docdir}@$(docdir)@g | sed s@%{__libdir}@$(libdir)@g \
+               > pkgscripts/makedpkg
+
+deb: all pkgscripts/makedpkg
        sh pkgscripts/makedpkg
 
+pkgscripts/uninstall: pkgscripts/uninstall.tmpl
+       cat pkgscripts/uninstall.tmpl | sed s@%{__prefix}@$(prefix)@g | \
+               sed s@%{__bindir}@$(bindir)@g | sed s@%{__datadir}@$(datadir)@g | \
+               sed s@%{__includedir}@$(includedir)@g | sed s@%{__libdir}@$(libdir)@g | \
+               sed s@%{__mandir}@$(mandir)@g > pkgscripts/uninstall
+
+pkgscripts/makemacpkg: pkgscripts/makemacpkg.tmpl
+       cat pkgscripts/makemacpkg.tmpl | sed s@%{__prefix}@$(prefix)@g | \
+               sed s@%{__bindir}@$(bindir)@g | sed s@%{__docdir}@$(docdir)@g | \
+               sed s@%{__libdir}@$(libdir)@g > pkgscripts/makemacpkg
+
 if X86_64
 
-udmg: all
+udmg: all pkgscripts/makemacpkg pkgscripts/uninstall
        sh pkgscripts/makemacpkg -build32 ${BUILDDIR32}
 
-iosdmg: all
-       sh pkgscripts/makemacpkg -build32 ${BUILDDIR32} -buildarmv6 ${BUILDDIRARMV6} -buildarmv7 ${BUILDDIRARMV7}
+iosdmg: all pkgscripts/makemacpkg pkgscripts/uninstall
+       sh pkgscripts/makemacpkg -build32 ${BUILDDIR32} -buildarmv6 ${BUILDDIRARMV6} -buildarmv7 ${BUILDDIRARMV7} -buildarmv7s ${BUILDDIRARMV7S}
 
 else
 
-iosdmg: all
-       sh pkgscripts/makemacpkg -buildarmv6 ${BUILDDIRARMV6} -buildarmv7 ${BUILDDIRARMV7}
+iosdmg: all pkgscripts/makemacpkg pkgscripts/uninstall
+       sh pkgscripts/makemacpkg -buildarmv6 ${BUILDDIRARMV6} -buildarmv7 ${BUILDDIRARMV7} -buildarmv7s ${BUILDDIRARMV7S}
 
 endif
 
-dmg: all
+dmg: all pkgscripts/makemacpkg pkgscripts/uninstall
        sh pkgscripts/makemacpkg
 
-if X86_64
-
-csunpkg: all
-       sh pkgscripts/makesunpkg combined ${BUILDDIR32}
-
-endif
-
-sunpkg: all
-       sh pkgscripts/makesunpkg
+pkgscripts/makecygwinpkg: pkgscripts/makecygwinpkg.tmpl
+       cat pkgscripts/makecygwinpkg.tmpl | sed s@%{__prefix}@$(prefix)@g | \
+               sed s@%{__docdir}@$(docdir)@g | sed s@%{__libdir}@$(libdir)@g \
+               > pkgscripts/makecygwinpkg
 
-cygwinpkg: all
+cygwinpkg: all pkgscripts/makecygwinpkg
        sh pkgscripts/makecygwinpkg
index 4e82f3c..d4faed1 100644 (file)
@@ -41,31 +41,34 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-@WITH_ARITH_TRUE@am__append_1 = jaricom.c
-@WITH_ARITH_ENC_TRUE@am__append_2 = jcarith.c
-@WITH_ARITH_DEC_TRUE@am__append_3 = jdarith.c
-@WITH_JAVA_TRUE@am__append_4 = turbojpeg-jni.c
-@VERSION_SCRIPT_TRUE@am__append_5 = $(VERSION_SCRIPT_FLAG)$(srcdir)/$(TJMAPFILE)
-@VERSION_SCRIPT_TRUE@am__append_6 = $(VERSION_SCRIPT_FLAG)libjpeg.map
-@WITH_SIMD_TRUE@am__append_7 = simd
-@WITH_SIMD_FALSE@am__append_8 = jsimd_none.c
+@WITH_TURBOJPEG_TRUE@am__append_1 = libturbojpeg.la
+@WITH_TURBOJPEG_TRUE@am__append_2 = turbojpeg.h
+@WITH_ARITH_TRUE@am__append_3 = jaricom.c
+@WITH_ARITH_ENC_TRUE@am__append_4 = jcarith.c
+@WITH_ARITH_DEC_TRUE@am__append_5 = jdarith.c
+@WITH_JAVA_TRUE@@WITH_TURBOJPEG_TRUE@am__append_6 = turbojpeg-jni.c
+@VERSION_SCRIPT_TRUE@@WITH_TURBOJPEG_TRUE@am__append_7 = $(VERSION_SCRIPT_FLAG)$(srcdir)/$(TJMAPFILE)
+@VERSION_SCRIPT_TRUE@am__append_8 = $(VERSION_SCRIPT_FLAG)libjpeg.map
+@WITH_SIMD_TRUE@am__append_9 = simd
+@WITH_SIMD_FALSE@am__append_10 = jsimd_none.c
 bin_PROGRAMS = cjpeg$(EXEEXT) djpeg$(EXEEXT) jpegtran$(EXEEXT) \
-       rdjpgcom$(EXEEXT) wrjpgcom$(EXEEXT) tjbench$(EXEEXT)
-noinst_PROGRAMS = tjunittest$(EXEEXT) jcstest$(EXEEXT)
-DIST_COMMON = README $(am__configure_deps) $(dist_doc_DATA) \
-       $(dist_example_DATA) $(dist_man1_MANS) $(include_HEADERS) \
+       rdjpgcom$(EXEEXT) wrjpgcom$(EXEEXT) $(am__EXEEXT_1)
+noinst_PROGRAMS = jcstest$(EXEEXT) $(am__EXEEXT_2)
+@WITH_TURBOJPEG_TRUE@am__append_11 = tjbench
+@WITH_TURBOJPEG_TRUE@am__append_12 = tjunittest
+DIST_COMMON = README $(am__configure_deps) $(am__include_HEADERS_DIST) \
+       $(dist_doc_DATA) $(dist_example_DATA) $(dist_man1_MANS) \
        $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
        $(srcdir)/config.h.in $(srcdir)/jconfig.h.in \
        $(srcdir)/libjpeg.map.in $(srcdir)/tjbenchtest.in \
-       $(srcdir)/tjexampletest.in $(top_srcdir)/configure \
+       $(srcdir)/tjbenchtest.java.in $(srcdir)/tjexampletest.in \
+       $(top_srcdir)/configure \
        $(top_srcdir)/release/Description.plist.in \
        $(top_srcdir)/release/Info.plist.in \
        $(top_srcdir)/release/libjpeg-turbo.spec.in \
        $(top_srcdir)/release/makecygwinpkg.in \
        $(top_srcdir)/release/makedpkg.in \
        $(top_srcdir)/release/makemacpkg.in \
-       $(top_srcdir)/release/makesunpkg.in \
-       $(top_srcdir)/release/pkginfo.in \
        $(top_srcdir)/release/uninstall.in compile config.guess \
        config.sub depcomp install-sh ltmain.sh missing
 subdir = .
@@ -78,12 +81,11 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
  configure.lineno configure.status.lineno
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = config.h jconfig.h
-CONFIG_CLEAN_FILES = pkgscripts/libjpeg-turbo.spec \
-       pkgscripts/makecygwinpkg pkgscripts/makedpkg \
-       pkgscripts/makemacpkg pkgscripts/Description.plist \
-       pkgscripts/Info.plist pkgscripts/uninstall \
-       pkgscripts/makesunpkg pkgscripts/pkginfo tjbenchtest \
-       tjexampletest libjpeg.map
+CONFIG_CLEAN_FILES = pkgscripts/libjpeg-turbo.spec.tmpl \
+       pkgscripts/makecygwinpkg.tmpl pkgscripts/makedpkg.tmpl \
+       pkgscripts/makemacpkg.tmpl pkgscripts/Description.plist \
+       pkgscripts/Info.plist pkgscripts/uninstall.tmpl tjbenchtest \
+       tjbenchtest.java tjexampletest libjpeg.map
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -170,13 +172,18 @@ am__objects_10 = $(am__objects_1) libturbojpeg_la-jcapimin.lo \
        libturbojpeg_la-jutils.lo libturbojpeg_la-jmemmgr.lo \
        libturbojpeg_la-jmemnobs.lo $(am__objects_6) $(am__objects_7) \
        $(am__objects_8) $(am__objects_9)
-@WITH_JAVA_TRUE@am__objects_11 = libturbojpeg_la-turbojpeg-jni.lo
-am_libturbojpeg_la_OBJECTS = $(am__objects_10) \
-       libturbojpeg_la-turbojpeg.lo libturbojpeg_la-transupp.lo \
-       libturbojpeg_la-jdatadst-tj.lo libturbojpeg_la-jdatasrc-tj.lo \
-       $(am__objects_11) $(am__objects_1)
+@WITH_JAVA_TRUE@@WITH_TURBOJPEG_TRUE@am__objects_11 = libturbojpeg_la-turbojpeg-jni.lo
+@WITH_TURBOJPEG_TRUE@am_libturbojpeg_la_OBJECTS = $(am__objects_10) \
+@WITH_TURBOJPEG_TRUE@  libturbojpeg_la-turbojpeg.lo \
+@WITH_TURBOJPEG_TRUE@  libturbojpeg_la-transupp.lo \
+@WITH_TURBOJPEG_TRUE@  libturbojpeg_la-jdatadst-tj.lo \
+@WITH_TURBOJPEG_TRUE@  libturbojpeg_la-jdatasrc-tj.lo \
+@WITH_TURBOJPEG_TRUE@  $(am__objects_11) $(am__objects_1)
 libturbojpeg_la_OBJECTS = $(am_libturbojpeg_la_OBJECTS)
+@WITH_TURBOJPEG_TRUE@am_libturbojpeg_la_rpath = -rpath $(libdir)
+@WITH_TURBOJPEG_TRUE@am__EXEEXT_1 = tjbench$(EXEEXT)
 binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+@WITH_TURBOJPEG_TRUE@am__EXEEXT_2 = tjunittest$(EXEEXT)
 PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
 am_cjpeg_OBJECTS = cjpeg-cdjpeg.$(OBJEXT) cjpeg-cjpeg.$(OBJEXT) \
        cjpeg-rdbmp.$(OBJEXT) cjpeg-rdgif.$(OBJEXT) \
@@ -200,15 +207,22 @@ jpegtran_DEPENDENCIES = libjpeg.la
 am_rdjpgcom_OBJECTS = rdjpgcom.$(OBJEXT)
 rdjpgcom_OBJECTS = $(am_rdjpgcom_OBJECTS)
 rdjpgcom_DEPENDENCIES = libjpeg.la
-am_tjbench_OBJECTS = tjbench-tjbench.$(OBJEXT) tjbench-bmp.$(OBJEXT) \
-       tjbench-tjutil.$(OBJEXT) tjbench-rdbmp.$(OBJEXT) \
-       tjbench-rdppm.$(OBJEXT) tjbench-wrbmp.$(OBJEXT) \
-       tjbench-wrppm.$(OBJEXT)
+am__tjbench_SOURCES_DIST = tjbench.c bmp.h bmp.c tjutil.h tjutil.c \
+       rdbmp.c rdppm.c wrbmp.c wrppm.c
+@WITH_TURBOJPEG_TRUE@am_tjbench_OBJECTS = tjbench-tjbench.$(OBJEXT) \
+@WITH_TURBOJPEG_TRUE@  tjbench-bmp.$(OBJEXT) \
+@WITH_TURBOJPEG_TRUE@  tjbench-tjutil.$(OBJEXT) \
+@WITH_TURBOJPEG_TRUE@  tjbench-rdbmp.$(OBJEXT) \
+@WITH_TURBOJPEG_TRUE@  tjbench-rdppm.$(OBJEXT) \
+@WITH_TURBOJPEG_TRUE@  tjbench-wrbmp.$(OBJEXT) \
+@WITH_TURBOJPEG_TRUE@  tjbench-wrppm.$(OBJEXT)
 tjbench_OBJECTS = $(am_tjbench_OBJECTS)
-tjbench_DEPENDENCIES = libturbojpeg.la libjpeg.la
-am_tjunittest_OBJECTS = tjunittest.$(OBJEXT) tjutil.$(OBJEXT)
+@WITH_TURBOJPEG_TRUE@tjbench_DEPENDENCIES = libturbojpeg.la libjpeg.la
+am__tjunittest_SOURCES_DIST = tjunittest.c tjutil.h tjutil.c
+@WITH_TURBOJPEG_TRUE@am_tjunittest_OBJECTS = tjunittest.$(OBJEXT) \
+@WITH_TURBOJPEG_TRUE@  tjutil.$(OBJEXT)
 tjunittest_OBJECTS = $(am_tjunittest_OBJECTS)
-tjunittest_DEPENDENCIES = libturbojpeg.la
+@WITH_TURBOJPEG_TRUE@tjunittest_DEPENDENCIES = libturbojpeg.la
 am_wrjpgcom_OBJECTS = wrjpgcom.$(OBJEXT)
 wrjpgcom_OBJECTS = $(am_wrjpgcom_OBJECTS)
 wrjpgcom_DEPENDENCIES = libjpeg.la
@@ -230,8 +244,8 @@ SOURCES = $(libjpeg_la_SOURCES) $(libturbojpeg_la_SOURCES) \
 DIST_SOURCES = $(am__libjpeg_la_SOURCES_DIST) \
        $(am__libturbojpeg_la_SOURCES_DIST) $(cjpeg_SOURCES) \
        $(djpeg_SOURCES) $(jcstest_SOURCES) $(jpegtran_SOURCES) \
-       $(rdjpgcom_SOURCES) $(tjbench_SOURCES) $(tjunittest_SOURCES) \
-       $(wrjpgcom_SOURCES)
+       $(rdjpgcom_SOURCES) $(am__tjbench_SOURCES_DIST) \
+       $(am__tjunittest_SOURCES_DIST) $(wrjpgcom_SOURCES)
 RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
        html-recursive info-recursive install-data-recursive \
        install-exec-recursive install-info-recursive \
@@ -244,12 +258,13 @@ MANS = $(dist_man1_MANS)
 dist_docDATA_INSTALL = $(INSTALL_DATA)
 dist_exampleDATA_INSTALL = $(INSTALL_DATA)
 DATA = $(dist_doc_DATA) $(dist_example_DATA)
+am__include_HEADERS_DIST = jerror.h jmorecfg.h jpeglib.h turbojpeg.h
 includeHEADERS_INSTALL = $(INSTALL_HEADER)
 nodist_includeHEADERS_INSTALL = $(INSTALL_HEADER)
 HEADERS = $(include_HEADERS) $(nodist_include_HEADERS)
 ETAGS = etags
 CTAGS = ctags
-DIST_SUBDIRS = java simd
+DIST_SUBDIRS = java simd md5
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -311,9 +326,11 @@ LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
+LIBTOOL_CURRENT = @LIBTOOL_CURRENT@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MEM_SRCDST_FUNCTIONS = @MEM_SRCDST_FUNCTIONS@
 NAFLAGS = @NAFLAGS@
 NASM = @NASM@
 OBJEXT = @OBJEXT@
@@ -324,6 +341,7 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGNAME = @PKGNAME@
 RANLIB = @RANLIB@
 RPMARCH = @RPMARCH@
 RPM_CONFIG_ARGS = @RPM_CONFIG_ARGS@
@@ -335,6 +353,7 @@ SIMD_I386_FALSE = @SIMD_I386_FALSE@
 SIMD_I386_TRUE = @SIMD_I386_TRUE@
 SIMD_X86_64_FALSE = @SIMD_X86_64_FALSE@
 SIMD_X86_64_TRUE = @SIMD_X86_64_TRUE@
+SO_AGE = @SO_AGE@
 SO_MAJOR_VERSION = @SO_MAJOR_VERSION@
 SO_MINOR_VERSION = @SO_MINOR_VERSION@
 STRIP = @STRIP@
@@ -355,6 +374,8 @@ WITH_SIMD_FALSE = @WITH_SIMD_FALSE@
 WITH_SIMD_TRUE = @WITH_SIMD_TRUE@
 WITH_SSE_FLOAT_DCT_FALSE = @WITH_SSE_FLOAT_DCT_FALSE@
 WITH_SSE_FLOAT_DCT_TRUE = @WITH_SSE_FLOAT_DCT_TRUE@
+WITH_TURBOJPEG_FALSE = @WITH_TURBOJPEG_FALSE@
+WITH_TURBOJPEG_TRUE = @WITH_TURBOJPEG_TRUE@
 X86_64_FALSE = @X86_64_FALSE@
 X86_64_TRUE = @X86_64_TRUE@
 ac_ct_AR = @ac_ct_AR@
@@ -400,12 +421,13 @@ sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
-lib_LTLIBRARIES = libjpeg.la libturbojpeg.la
+lib_LTLIBRARIES = libjpeg.la $(am__append_1)
 libjpeg_la_LDFLAGS = -version-info \
-       ${SO_MAJOR_VERSION}:${SO_MINOR_VERSION} -no-undefined \
-       $(am__append_6)
-libturbojpeg_la_LDFLAGS = -avoid-version -no-undefined $(am__append_5)
-include_HEADERS = jerror.h jmorecfg.h jpeglib.h turbojpeg.h
+       ${LIBTOOL_CURRENT}:${SO_MINOR_VERSION}:${SO_AGE} -no-undefined \
+       $(am__append_8)
+include_HEADERS = jerror.h jmorecfg.h jpeglib.h $(am__append_2)
+@WITH_TURBOJPEG_TRUE@libturbojpeg_la_LDFLAGS = -version-info 0:0 \
+@WITH_TURBOJPEG_TRUE@  -no-undefined $(am__append_7)
 nodist_include_HEADERS = jconfig.h
 HDRS = jchuff.h jdct.h jdhuff.h jerror.h jinclude.h jmemsys.h jmorecfg.h \
        jpegint.h jpeglib.h jversion.h jsimd.h jsimddct.h jpegcomp.h
@@ -418,24 +440,25 @@ libjpeg_la_SOURCES = $(HDRS) jcapimin.c jcapistd.c jccoefct.c \
        jdmarker.c jdmaster.c jdmerge.c jdphuff.c jdpostct.c \
        jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c jfdctint.c \
        jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \
-       jquant2.c jutils.c jmemmgr.c jmemnobs.c $(am__append_1) \
-       $(am__append_2) $(am__append_3) $(am__append_8)
-libturbojpeg_la_SOURCES = $(libjpeg_la_SOURCES) turbojpeg.c \
-       turbojpeg.h transupp.c transupp.h jdatadst-tj.c jdatasrc-tj.c \
-       $(am__append_4) $(TJMAPFILE)
-SUBDIRS = java $(am__append_7)
-@WITH_JAVA_TRUE@libturbojpeg_la_CFLAGS = ${JNI_CFLAGS}
-@WITH_JAVA_FALSE@TJMAPFILE = turbojpeg-mapfile
-@WITH_JAVA_TRUE@TJMAPFILE = turbojpeg-mapfile.jni
+       jquant2.c jutils.c jmemmgr.c jmemnobs.c $(am__append_3) \
+       $(am__append_4) $(am__append_5) $(am__append_10)
+SUBDIRS = java $(am__append_9) md5
+@WITH_TURBOJPEG_TRUE@libturbojpeg_la_SOURCES = $(libjpeg_la_SOURCES) \
+@WITH_TURBOJPEG_TRUE@  turbojpeg.c turbojpeg.h transupp.c \
+@WITH_TURBOJPEG_TRUE@  transupp.h jdatadst-tj.c jdatasrc-tj.c \
+@WITH_TURBOJPEG_TRUE@  $(am__append_6) $(TJMAPFILE)
+@WITH_JAVA_TRUE@@WITH_TURBOJPEG_TRUE@libturbojpeg_la_CFLAGS = ${JNI_CFLAGS}
+@WITH_JAVA_FALSE@@WITH_TURBOJPEG_TRUE@TJMAPFILE = turbojpeg-mapfile
+@WITH_JAVA_TRUE@@WITH_TURBOJPEG_TRUE@TJMAPFILE = turbojpeg-mapfile.jni
 @WITH_SIMD_TRUE@libjpeg_la_LIBADD = simd/libsimd.la
 @WITH_SIMD_TRUE@libturbojpeg_la_LIBADD = simd/libsimd.la
-tjbench_SOURCES = tjbench.c bmp.h bmp.c tjutil.h tjutil.c rdbmp.c rdppm.c \
-       wrbmp.c wrppm.c
+@WITH_TURBOJPEG_TRUE@tjbench_SOURCES = tjbench.c bmp.h bmp.c tjutil.h tjutil.c rdbmp.c rdppm.c \
+@WITH_TURBOJPEG_TRUE@  wrbmp.c wrppm.c
 
-tjbench_LDADD = libturbojpeg.la libjpeg.la -lm
-tjbench_CFLAGS = -DBMP_SUPPORTED -DPPM_SUPPORTED
-tjunittest_SOURCES = tjunittest.c tjutil.h tjutil.c
-tjunittest_LDADD = libturbojpeg.la
+@WITH_TURBOJPEG_TRUE@tjbench_LDADD = libturbojpeg.la libjpeg.la -lm
+@WITH_TURBOJPEG_TRUE@tjbench_CFLAGS = -DBMP_SUPPORTED -DPPM_SUPPORTED
+@WITH_TURBOJPEG_TRUE@tjunittest_SOURCES = tjunittest.c tjutil.h tjutil.c
+@WITH_TURBOJPEG_TRUE@tjunittest_LDADD = libturbojpeg.la
 cjpeg_SOURCES = cdjpeg.h cderror.h cdjpeg.c cjpeg.c rdbmp.c rdgif.c \
        rdppm.c rdswitch.c rdtarga.c 
 
@@ -459,8 +482,8 @@ wrjpgcom_LDADD = libjpeg.la
 jcstest_SOURCES = jcstest.c
 jcstest_LDADD = libjpeg.la
 dist_man1_MANS = cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 wrjpgcom.1
-DOCS = install.txt coderules.txt filelist.txt jconfig.txt change.log \
-       rdrle.c wrrle.c BUILDING.txt ChangeLog.txt
+DOCS = coderules.txt jconfig.txt change.log rdrle.c wrrle.c BUILDING.txt \
+       ChangeLog.txt
 
 docdir = $(datadir)/doc
 dist_doc_DATA = README README-turbo.txt libjpeg.txt structure.txt usage.txt \
@@ -472,6 +495,38 @@ EXTRA_DIST = win release $(DOCS) testimages CMakeLists.txt \
        sharedlib/CMakeLists.txt cmakescripts libjpeg.map.in doc doxygen.config \
        jccolext.c jdcolext.c jdmrgext.c
 
+MD5_JPEG_INT = 9a68f56bc76e466aa7e52f415d0f4a5f
+MD5_JPEG_FAST = 0e1502e7fa421835e376a314fac2a39f
+MD5_JPEG_FAST_100 = 7bf72a8e741d64eecb960c97323af77c
+MD5_JPEG_FLOAT = d1623885ffafcd40c684af09e3d65cd5
+MD5_JPEG_FLOAT_NOSIMD = fb4884c35f8273f498cb32879de5c455
+MD5_JPEG_INT_GRAY = 72b51f894b8f4a10b3ee3066770aa38d
+MD5_PPM_INT = d1ed0d11f076b842525271647716aeb8
+MD5_PPM_FAST = 048298a2d2410261c0533cb97bcfef23
+MD5_PPM_FLOAT = 7f5b446ee36b2630e06785b8d42af15f
+MD5_PPM_FLOAT_NOSIMD = 64072f1dbdc5b3a187777788604971a5
+MD5_PPM_INT_2_1 = 9f9de8c0612f8d06869b960b05abf9c9
+MD5_PPM_INT_15_8 = b6875bc070720b899566cc06459b63b7
+MD5_PPM_INT_7_4 = 06a177eae05f164fac57f7a2c346ee87
+MD5_PPM_INT_13_8 = bc3452573c8152f6ae552939ee19f82f
+MD5_PPM_INT_3_2 = f5a8b88a8a7f96016f04d259cf82ed67
+MD5_PPM_INT_11_8 = d8cc73c0aaacd4556569b59437ba00a5
+MD5_PPM_INT_5_4 = 32775dd9ad2ab90f4c5b219b53e0c86c
+MD5_PPM_INT_9_8 = d25e61bc7eac0002f5b393aa223747b6
+MD5_PPM_INT_7_8 = ddb564b7c74a09494016d6cd7502a946
+MD5_PPM_INT_3_4 = 8ed8e68808c3fbc4ea764fc9d2968646
+MD5_PPM_INT_5_8 = a3363274999da2366a024efae6d16c9b
+MD5_PPM_INT_1_2 = e692a315cea26b988c8e8b29a5dbcd81
+MD5_PPM_INT_3_8 = 79eca9175652ced755155c90e785a996
+MD5_PPM_INT_1_4 = 79cd778f8bf1a117690052cacdd54eca
+MD5_PPM_INT_1_8 = 391b3d4aca640c8567d6f8745eb2142f
+MD5_PPM_FAST_1_2 = f30bcf6d32ccd44cbdd9aeaacbd9454f
+MD5_BMP_256 = 4980185e3776e89bd931736e1cddeee6
+MD5_JPEG_ARI = e986fb0a637a8d833d96e8a6d6d84ea1
+MD5_PPM_ARI = 72b59a99bcf1de24c5b27d151bde2437
+MD5_JPEG_PROG = 1c4afddc05c0a43489ee54438a482d92
+MD5_JPEG_PROG_ARI = 0a8f1c8f66e113c3cf635df0a475a617
+MD5_JPEG_CROP = b4197f377e621c4e9b1d20471432610d
 all: config.h jconfig.h
        $(MAKE) $(AM_MAKEFLAGS) all-recursive
 
@@ -537,26 +592,24 @@ stamp-h2: $(srcdir)/jconfig.h.in $(top_builddir)/config.status
 
 distclean-hdr:
        -rm -f config.h stamp-h1 jconfig.h stamp-h2
-pkgscripts/libjpeg-turbo.spec: $(top_builddir)/config.status $(top_srcdir)/release/libjpeg-turbo.spec.in
+pkgscripts/libjpeg-turbo.spec.tmpl: $(top_builddir)/config.status $(top_srcdir)/release/libjpeg-turbo.spec.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
-pkgscripts/makecygwinpkg: $(top_builddir)/config.status $(top_srcdir)/release/makecygwinpkg.in
+pkgscripts/makecygwinpkg.tmpl: $(top_builddir)/config.status $(top_srcdir)/release/makecygwinpkg.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
-pkgscripts/makedpkg: $(top_builddir)/config.status $(top_srcdir)/release/makedpkg.in
+pkgscripts/makedpkg.tmpl: $(top_builddir)/config.status $(top_srcdir)/release/makedpkg.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
-pkgscripts/makemacpkg: $(top_builddir)/config.status $(top_srcdir)/release/makemacpkg.in
+pkgscripts/makemacpkg.tmpl: $(top_builddir)/config.status $(top_srcdir)/release/makemacpkg.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
 pkgscripts/Description.plist: $(top_builddir)/config.status $(top_srcdir)/release/Description.plist.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
 pkgscripts/Info.plist: $(top_builddir)/config.status $(top_srcdir)/release/Info.plist.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
-pkgscripts/uninstall: $(top_builddir)/config.status $(top_srcdir)/release/uninstall.in
-       cd $(top_builddir) && $(SHELL) ./config.status $@
-pkgscripts/makesunpkg: $(top_builddir)/config.status $(top_srcdir)/release/makesunpkg.in
-       cd $(top_builddir) && $(SHELL) ./config.status $@
-pkgscripts/pkginfo: $(top_builddir)/config.status $(top_srcdir)/release/pkginfo.in
+pkgscripts/uninstall.tmpl: $(top_builddir)/config.status $(top_srcdir)/release/uninstall.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
 tjbenchtest: $(top_builddir)/config.status $(srcdir)/tjbenchtest.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
+tjbenchtest.java: $(top_builddir)/config.status $(srcdir)/tjbenchtest.java.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
 tjexampletest: $(top_builddir)/config.status $(srcdir)/tjexampletest.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
 libjpeg.map: $(top_builddir)/config.status $(srcdir)/libjpeg.map.in
@@ -591,7 +644,7 @@ clean-libLTLIBRARIES:
 libjpeg.la: $(libjpeg_la_OBJECTS) $(libjpeg_la_DEPENDENCIES) 
        $(LINK) -rpath $(libdir) $(libjpeg_la_LDFLAGS) $(libjpeg_la_OBJECTS) $(libjpeg_la_LIBADD) $(LIBS)
 libturbojpeg.la: $(libturbojpeg_la_OBJECTS) $(libturbojpeg_la_DEPENDENCIES) 
-       $(LINK) -rpath $(libdir) $(libturbojpeg_la_LDFLAGS) $(libturbojpeg_la_OBJECTS) $(libturbojpeg_la_LIBADD) $(LIBS)
+       $(LINK) $(am_libturbojpeg_la_rpath) $(libturbojpeg_la_LDFLAGS) $(libturbojpeg_la_OBJECTS) $(libturbojpeg_la_LIBADD) $(LIBS)
 install-binPROGRAMS: $(bin_PROGRAMS)
        @$(NORMAL_INSTALL)
        test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
@@ -1959,8 +2012,6 @@ install-data-am: install-dist_docDATA install-dist_exampleDATA \
        install-nodist_includeHEADERS
 
 install-exec-am: install-binPROGRAMS install-libLTLIBRARIES
-       @$(NORMAL_INSTALL)
-       $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
 
 install-info: install-info-recursive
 
@@ -2008,14 +2059,14 @@ uninstall-man: uninstall-man1
        html-am info info-am install install-am install-binPROGRAMS \
        install-data install-data-am install-dist_docDATA \
        install-dist_exampleDATA install-exec install-exec-am \
-       install-exec-hook install-includeHEADERS install-info \
-       install-info-am install-libLTLIBRARIES install-man \
-       install-man1 install-nodist_includeHEADERS install-strip \
-       installcheck installcheck-am installdirs installdirs-am \
-       maintainer-clean maintainer-clean-generic \
-       maintainer-clean-recursive mostlyclean mostlyclean-compile \
-       mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \
-       pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
+       install-includeHEADERS install-info install-info-am \
+       install-libLTLIBRARIES install-man install-man1 \
+       install-nodist_includeHEADERS install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic maintainer-clean-recursive \
+       mostlyclean mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+       tags tags-recursive uninstall uninstall-am \
        uninstall-binPROGRAMS uninstall-dist_docDATA \
        uninstall-dist_exampleDATA uninstall-includeHEADERS \
        uninstall-info-am uninstall-libLTLIBRARIES uninstall-man \
@@ -2026,59 +2077,81 @@ dist-hook:
        rm -rf `find $(distdir) -name .svn`
 
 test: testclean all
-@WITH_JAVA_TRUE@       $(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest
-@WITH_JAVA_TRUE@       $(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -bi
-@WITH_JAVA_TRUE@       $(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv
-@WITH_JAVA_TRUE@       $(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv -bi
-       ./tjunittest
-       ./tjunittest -alloc
-       ./tjunittest -yuv
+@WITH_JAVA_TRUE@@WITH_TURBOJPEG_TRUE@  $(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest
+@WITH_JAVA_TRUE@@WITH_TURBOJPEG_TRUE@  $(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -bi
+@WITH_JAVA_TRUE@@WITH_TURBOJPEG_TRUE@  $(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv
+@WITH_JAVA_TRUE@@WITH_TURBOJPEG_TRUE@  $(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv -bi
+@WITH_TURBOJPEG_TRUE@  ./tjunittest
+@WITH_TURBOJPEG_TRUE@  ./tjunittest -alloc
+@WITH_TURBOJPEG_TRUE@  ./tjunittest -yuv
        ./cjpeg -dct int -outfile testoutint.jpg $(srcdir)/testimages/testorig.ppm
-       cmp $(srcdir)/testimages/testimgint.jpg testoutint.jpg
+       md5/md5cmp $(MD5_JPEG_INT) testoutint.jpg
        ./cjpeg -dct fast -opt -outfile testoutfst.jpg $(srcdir)/testimages/testorig.ppm
-       cmp $(srcdir)/testimages/testimgfst.jpg testoutfst.jpg
+       md5/md5cmp $(MD5_JPEG_FAST) testoutfst.jpg
        ./cjpeg -dct fast -quality 100 -opt -outfile testoutfst100.jpg $(srcdir)/testimages/testorig.ppm
-       cmp $(srcdir)/testimages/testimgfst100.jpg testoutfst100.jpg
+       md5/md5cmp $(MD5_JPEG_FAST_100) testoutfst100.jpg
        ./cjpeg -dct float -outfile testoutflt.jpg $(srcdir)/testimages/testorig.ppm
-@WITH_SSE_FLOAT_DCT_TRUE@      cmp $(srcdir)/testimages/testimgflt.jpg testoutflt.jpg
-@WITH_SSE_FLOAT_DCT_FALSE@     cmp $(srcdir)/testimages/testimgflt-nosimd.jpg testoutflt.jpg
+@WITH_SSE_FLOAT_DCT_TRUE@      md5/md5cmp $(MD5_JPEG_FLOAT) testoutflt.jpg
+@WITH_SSE_FLOAT_DCT_FALSE@     md5/md5cmp $(MD5_JPEG_FLOAT_NOSIMD) testoutflt.jpg
        ./cjpeg -dct int -grayscale -outfile testoutgray.jpg $(srcdir)/testimages/testorig.ppm
-       cmp $(srcdir)/testimages/testimggray.jpg testoutgray.jpg
+       md5/md5cmp $(MD5_JPEG_INT_GRAY) testoutgray.jpg
        ./djpeg -dct int -fast -ppm -outfile testoutint.ppm $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgint.ppm testoutint.ppm
+       md5/md5cmp $(MD5_PPM_INT) testoutint.ppm
        ./djpeg -dct fast -ppm -outfile testoutfst.ppm $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgfst.ppm testoutfst.ppm
+       md5/md5cmp $(MD5_PPM_FAST) testoutfst.ppm
        ./djpeg -dct float -ppm -outfile testoutflt.ppm $(srcdir)/testimages/testorig.jpg
-@WITH_SSE_FLOAT_DCT_TRUE@      cmp $(srcdir)/testimages/testimgflt.ppm testoutflt.ppm
-@WITH_SSE_FLOAT_DCT_FALSE@     cmp $(srcdir)/testimages/testorig.ppm testoutflt.ppm
-       ./djpeg -dct int -scale 1/2 -ppm -outfile testoutint1_2.ppm $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgint1_2.ppm testoutint1_2.ppm
+@WITH_SSE_FLOAT_DCT_TRUE@      md5/md5cmp $(MD5_PPM_FLOAT) testoutflt.ppm
+@WITH_SSE_FLOAT_DCT_FALSE@     md5/md5cmp $(MD5_PPM_FLOAT_NOSIMD) testoutflt.ppm
+       ./djpeg -dct int -nosmooth -scale 2/1 -ppm -outfile testoutint2_1.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_2_1) testoutint2_1.ppm;
+       ./djpeg -dct int -nosmooth -scale 15/8 -ppm -outfile testoutint15_8.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_15_8) testoutint15_8.ppm;
+       ./djpeg -dct int -nosmooth -scale 7/4 -ppm -outfile testoutint7_4.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_7_4) testoutint7_4.ppm;
+       ./djpeg -dct int -nosmooth -scale 13/8 -ppm -outfile testoutint13_8.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_13_8) testoutint13_8.ppm;
+       ./djpeg -dct int -nosmooth -scale 3/2 -ppm -outfile testoutint3_2.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_3_2) testoutint3_2.ppm;
+       ./djpeg -dct int -nosmooth -scale 11/8 -ppm -outfile testoutint11_8.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_11_8) testoutint11_8.ppm;
+       ./djpeg -dct int -nosmooth -scale 5/4 -ppm -outfile testoutint5_4.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_5_4) testoutint5_4.ppm;
+       ./djpeg -dct int -nosmooth -scale 9/8 -ppm -outfile testoutint9_8.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_9_8) testoutint9_8.ppm;
+       ./djpeg -dct int -nosmooth -scale 7/8 -ppm -outfile testoutint7_8.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_7_8) testoutint7_8.ppm;
+       ./djpeg -dct int -nosmooth -scale 3/4 -ppm -outfile testoutint3_4.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_3_4) testoutint3_4.ppm;
+       ./djpeg -dct int -nosmooth -scale 5/8 -ppm -outfile testoutint5_8.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_5_8) testoutint5_8.ppm;
+       ./djpeg -dct int -nosmooth -scale 1/2 -ppm -outfile testoutint1_2.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_1_2) testoutint1_2.ppm;
+       ./djpeg -dct int -nosmooth -scale 3/8 -ppm -outfile testoutint3_8.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_3_8) testoutint3_8.ppm;
+       ./djpeg -dct int -nosmooth -scale 1/4 -ppm -outfile testoutint1_4.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_1_4) testoutint1_4.ppm;
+       ./djpeg -dct int -nosmooth -scale 1/8 -ppm -outfile testoutint1_8.ppm $(srcdir)/testimages/testorig.jpg;
+       md5/md5cmp $(MD5_PPM_INT_1_8) testoutint1_8.ppm;
        ./djpeg -dct fast -scale 1/2 -ppm -outfile testoutfst1_2.ppm $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgfst1_2.ppm testoutfst1_2.ppm
-       ./djpeg -dct int -scale 1/4 -ppm -outfile testoutint1_4.ppm $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgint1_4.ppm testoutint1_4.ppm
-       ./djpeg -dct fast -scale 1/4 -ppm -outfile testoutfst1_4.ppm $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgfst1_4.ppm testoutfst1_4.ppm
-       ./djpeg -dct int -scale 1/8 -ppm -outfile testoutint1_8.ppm $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgint1_8.ppm testoutint1_8.ppm
-       ./djpeg -dct fast -scale 1/8 -ppm -outfile testoutfst1_8.ppm $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgfst1_8.ppm testoutfst1_8.ppm
-       ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp  $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimg.bmp testout.bmp
+       md5/md5cmp $(MD5_PPM_FAST_1_2) testoutfst1_2.ppm
+       ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp $(srcdir)/testimages/testorig.jpg
+       md5/md5cmp $(MD5_BMP_256) testout.bmp
 @WITH_ARITH_ENC_TRUE@  ./cjpeg -dct int -arithmetic -outfile testoutari.jpg $(srcdir)/testimages/testorig.ppm
-@WITH_ARITH_ENC_TRUE@  cmp $(srcdir)/testimages/testimgari.jpg testoutari.jpg
+@WITH_ARITH_ENC_TRUE@  md5/md5cmp $(MD5_JPEG_ARI) testoutari.jpg
 @WITH_ARITH_ENC_TRUE@  ./jpegtran -arithmetic -outfile testouta.jpg $(srcdir)/testimages/testimgint.jpg
-@WITH_ARITH_ENC_TRUE@  cmp $(srcdir)/testimages/testimgari.jpg testouta.jpg
+@WITH_ARITH_ENC_TRUE@  md5/md5cmp $(MD5_JPEG_ARI) testouta.jpg
+@WITH_ARITH_ENC_TRUE@  ./cjpeg -dct int -progressive -arithmetic -sample 1x1 -outfile testoutpa.jpg $(srcdir)/testimages/testorig.ppm
+@WITH_ARITH_ENC_TRUE@  md5/md5cmp $(MD5_JPEG_PROG_ARI) testoutpa.jpg
 @WITH_ARITH_DEC_TRUE@  ./djpeg -dct int -fast -ppm -outfile testoutari.ppm $(srcdir)/testimages/testimgari.jpg
-@WITH_ARITH_DEC_TRUE@  cmp $(srcdir)/testimages/testimgari.ppm testoutari.ppm
+@WITH_ARITH_DEC_TRUE@  md5/md5cmp $(MD5_PPM_ARI) testoutari.ppm
 @WITH_ARITH_DEC_TRUE@  ./jpegtran -outfile testouta.jpg $(srcdir)/testimages/testimgari.jpg
-@WITH_ARITH_DEC_TRUE@  cmp $(srcdir)/testimages/testimgint.jpg testouta.jpg
+@WITH_ARITH_DEC_TRUE@  md5/md5cmp $(MD5_JPEG_INT) testouta.jpg
        ./cjpeg -dct int -progressive -outfile testoutp.jpg $(srcdir)/testimages/testorig.ppm
-       cmp $(srcdir)/testimages/testimgp.jpg testoutp.jpg
+       md5/md5cmp $(MD5_JPEG_PROG) testoutp.jpg
        ./jpegtran -outfile testoutt.jpg testoutp.jpg
-       cmp $(srcdir)/testimages/testimgint.jpg testoutt.jpg
+       md5/md5cmp $(MD5_JPEG_INT) testoutt.jpg
        ./jpegtran -crop 120x90+20+50 -transpose -perfect -outfile testoutcrop.jpg $(srcdir)/testimages/testorig.jpg
-       cmp $(srcdir)/testimages/testimgcrop.jpg testoutcrop.jpg
+       md5/md5cmp $(MD5_JPEG_CROP) testoutcrop.jpg
 
 testclean:
        rm -f testout*
@@ -2110,77 +2183,81 @@ testclean:
 
 tjtest:
        sh ./tjbenchtest
-@WITH_JAVA_TRUE@       sh ./tjexampletest
-
-@X86_64_TRUE@install-exec-hook:
-@X86_64_TRUE@  __PREFIX=`echo ${prefix} | sed -e 's@\/*$$@@'`;  \
-@X86_64_TRUE@  if [ "$$__PREFIX" = "/opt/libjpeg-turbo" ]; then  \
-@X86_64_TRUE@          cd $(DESTDIR)/${prefix};  \
-@X86_64_TRUE@          if [ -d lib -a ! -d lib64 -a ! -h lib64 ]; then  \
-@X86_64_TRUE@                  $(LN_S) lib lib64;  \
-@X86_64_TRUE@          fi  \
-@X86_64_TRUE@  fi
-
-@X86_64_FALSE@install-exec-hook:
-@X86_64_FALSE@ __PREFIX=`echo ${prefix} | sed -e 's@\/*$$@@'`;  \
-@X86_64_FALSE@ if [ "$$__PREFIX" = "/opt/libjpeg-turbo" ]; then  \
-@X86_64_FALSE@         cd $(DESTDIR)/${prefix};  \
-@X86_64_FALSE@         if [ -d lib -a ! -d lib32 -a ! -h lib32 ]; then  \
-@X86_64_FALSE@                 $(LN_S) lib lib32;  \
-@X86_64_FALSE@         fi  \
-@X86_64_FALSE@ fi
-
-rpm: all
+@WITH_JAVA_TRUE@       sh ./tjbenchtest.java
+
+pkgscripts/libjpeg-turbo.spec: pkgscripts/libjpeg-turbo.spec.tmpl
+       cat pkgscripts/libjpeg-turbo.spec.tmpl | sed s@%{__prefix}@$(prefix)@g | \
+               sed s@%{__bindir}@$(bindir)@g | sed s@%{__datadir}@$(datadir)@g | \
+               sed s@%{__docdir}@$(docdir)@g | sed s@%{__includedir}@$(includedir)@g | \
+               sed s@%{__libdir}@$(libdir)@g | sed s@%{__mandir}@$(mandir)@g \
+               > pkgscripts/libjpeg-turbo.spec
+
+rpm: all pkgscripts/libjpeg-turbo.spec
        TMPDIR=`mktemp -d /tmp/${PACKAGE_NAME}-build.XXXXXX`; \
        mkdir -p $$TMPDIR/RPMS; \
        ln -fs `pwd` $$TMPDIR/BUILD; \
-       rm -f ${PACKAGE_NAME}-${VERSION}.${RPMARCH}.rpm; \
+       rm -f ${PKGNAME}-${VERSION}.${RPMARCH}.rpm; \
        rpmbuild -bb --define "_blddir $$TMPDIR/buildroot"  \
                --define "_topdir $$TMPDIR" \
                --target ${RPMARCH} pkgscripts/libjpeg-turbo.spec; \
-       cp $$TMPDIR/RPMS/${RPMARCH}/${PACKAGE_NAME}-${VERSION}-${BUILD}.${RPMARCH}.rpm \
-               ${PACKAGE_NAME}-${VERSION}.${RPMARCH}.rpm; \
+       cp $$TMPDIR/RPMS/${RPMARCH}/${PKGNAME}-${VERSION}-${BUILD}.${RPMARCH}.rpm \
+               ${PKGNAME}-${VERSION}.${RPMARCH}.rpm; \
        rm -rf $$TMPDIR
 
-srpm: dist-gzip
+srpm: dist-gzip pkgscripts/libjpeg-turbo.spec
        TMPDIR=`mktemp -d /tmp/${PACKAGE_NAME}-build.XXXXXX`; \
        mkdir -p $$TMPDIR/RPMS; \
        mkdir -p $$TMPDIR/SRPMS; \
        mkdir -p $$TMPDIR/BUILD; \
        mkdir -p $$TMPDIR/SOURCES; \
        mkdir -p $$TMPDIR/SPECS; \
-       rm -f ${PACKAGE_NAME}-${VERSION}.src.rpm; \
+       rm -f ${PKGNAME}-${VERSION}.src.rpm; \
        cp ${PACKAGE_NAME}-${VERSION}.tar.gz $$TMPDIR/SOURCES; \
        cat pkgscripts/libjpeg-turbo.spec | sed s/%{_blddir}/%{_tmppath}/g \
                | sed s/#--\>//g \
                > $$TMPDIR/SPECS/libjpeg-turbo.spec; \
        rpmbuild -bs --define "_topdir $$TMPDIR" $$TMPDIR/SPECS/libjpeg-turbo.spec; \
-       cp $$TMPDIR/SRPMS/${PACKAGE_NAME}-${VERSION}-${BUILD}.src.rpm \
-               ${PACKAGE_NAME}-${VERSION}.src.rpm; \
+       cp $$TMPDIR/SRPMS/${PKGNAME}-${VERSION}-${BUILD}.src.rpm \
+               ${PKGNAME}-${VERSION}.src.rpm; \
        rm -rf $$TMPDIR
 
-deb: all
+pkgscripts/makedpkg: pkgscripts/makedpkg.tmpl
+       cat pkgscripts/makedpkg.tmpl | sed s@%{__prefix}@$(prefix)@g | \
+               sed s@%{__docdir}@$(docdir)@g | sed s@%{__libdir}@$(libdir)@g \
+               > pkgscripts/makedpkg
+
+deb: all pkgscripts/makedpkg
        sh pkgscripts/makedpkg
 
-@X86_64_TRUE@udmg: all
+pkgscripts/uninstall: pkgscripts/uninstall.tmpl
+       cat pkgscripts/uninstall.tmpl | sed s@%{__prefix}@$(prefix)@g | \
+               sed s@%{__bindir}@$(bindir)@g | sed s@%{__datadir}@$(datadir)@g | \
+               sed s@%{__includedir}@$(includedir)@g | sed s@%{__libdir}@$(libdir)@g | \
+               sed s@%{__mandir}@$(mandir)@g > pkgscripts/uninstall
+
+pkgscripts/makemacpkg: pkgscripts/makemacpkg.tmpl
+       cat pkgscripts/makemacpkg.tmpl | sed s@%{__prefix}@$(prefix)@g | \
+               sed s@%{__bindir}@$(bindir)@g | sed s@%{__docdir}@$(docdir)@g | \
+               sed s@%{__libdir}@$(libdir)@g > pkgscripts/makemacpkg
+
+@X86_64_TRUE@udmg: all pkgscripts/makemacpkg pkgscripts/uninstall
 @X86_64_TRUE@  sh pkgscripts/makemacpkg -build32 ${BUILDDIR32}
 
-@X86_64_TRUE@iosdmg: all
-@X86_64_TRUE@  sh pkgscripts/makemacpkg -build32 ${BUILDDIR32} -buildarmv6 ${BUILDDIRARMV6} -buildarmv7 ${BUILDDIRARMV7}
+@X86_64_TRUE@iosdmg: all pkgscripts/makemacpkg pkgscripts/uninstall
+@X86_64_TRUE@  sh pkgscripts/makemacpkg -build32 ${BUILDDIR32} -buildarmv6 ${BUILDDIRARMV6} -buildarmv7 ${BUILDDIRARMV7} -buildarmv7s ${BUILDDIRARMV7S}
 
-@X86_64_FALSE@iosdmg: all
-@X86_64_FALSE@ sh pkgscripts/makemacpkg -buildarmv6 ${BUILDDIRARMV6} -buildarmv7 ${BUILDDIRARMV7}
+@X86_64_FALSE@iosdmg: all pkgscripts/makemacpkg pkgscripts/uninstall
+@X86_64_FALSE@ sh pkgscripts/makemacpkg -buildarmv6 ${BUILDDIRARMV6} -buildarmv7 ${BUILDDIRARMV7} -buildarmv7s ${BUILDDIRARMV7S}
 
-dmg: all
+dmg: all pkgscripts/makemacpkg pkgscripts/uninstall
        sh pkgscripts/makemacpkg
 
-@X86_64_TRUE@csunpkg: all
-@X86_64_TRUE@  sh pkgscripts/makesunpkg combined ${BUILDDIR32}
-
-sunpkg: all
-       sh pkgscripts/makesunpkg
+pkgscripts/makecygwinpkg: pkgscripts/makecygwinpkg.tmpl
+       cat pkgscripts/makecygwinpkg.tmpl | sed s@%{__prefix}@$(prefix)@g | \
+               sed s@%{__docdir}@$(docdir)@g | sed s@%{__libdir}@$(libdir)@g \
+               > pkgscripts/makecygwinpkg
 
-cygwinpkg: all
+cygwinpkg: all pkgscripts/makecygwinpkg
        sh pkgscripts/makecygwinpkg
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/README b/README
index 0e9b429..9100869 100644 (file)
--- a/README
+++ b/README
@@ -1,8 +1,8 @@
-libjpeg-turbo note:  This file contains portions of the libjpeg v6b and v8
-README files, with additional wordsmithing by The libjpeg-turbo Project.
-It is included only for reference, as some parts of it may not apply to
-libjpeg-turbo.  Please see README-turbo.txt for information specific to
-libjpeg-turbo.
+libjpeg-turbo note:  This file has been modified by The libjpeg-turbo Project
+to include only information relevant to libjpeg-turbo, to wordsmith certain
+sections, and to remove impolitic language that existed in the libjpeg v8
+README.  It is included only for reference.  Please see README-turbo.txt for
+information specific to libjpeg-turbo.
 
 
 The Independent JPEG Group's JPEG software
@@ -17,7 +17,8 @@ Bill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson,
 Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers,
 and other members of the Independent JPEG Group.
 
-IJG is not affiliated with the official ISO JPEG standards committee.
+IJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee
+(also known as JPEG, together with ITU-T SG16).
 
 
 DOCUMENTATION ROADMAP
@@ -45,7 +46,6 @@ Programmer and internal documentation:
   libjpeg.txt       How to use the JPEG library in your own programs.
   example.c         Sample code for calling the JPEG library.
   structure.txt     Overview of the JPEG library's internal structure.
-  filelist.txt      Road map of IJG files.
   coderules.txt     Coding style rules --- please read if you contribute code.
 
 Please read at least the files install.txt and usage.txt.  Some information
@@ -129,7 +129,7 @@ with respect to this software, its quality, accuracy, merchantability, or
 fitness for a particular purpose.  This software is provided "AS IS", and you,
 its user, assume the entire risk as to its quality and accuracy.
 
-This software is copyright (C) 1991-2010, Thomas G. Lane, Guido Vollbeding.
+This software is copyright (C) 1991-2012, Thomas G. Lane, Guido Vollbeding.
 All Rights Reserved except as specified below.
 
 Permission is hereby granted to use, copy, modify, and distribute this
@@ -160,15 +160,6 @@ commercial products, provided that all warranty or liability claims are
 assumed by the product vendor.
 
 
-ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
-sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
-ansi2knr.c is NOT covered by the above copyright and conditions, but instead
-by the usual distribution terms of the Free Software Foundation; principally,
-that you must include source code if you redistribute it.  (See the file
-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 Unix configuration script "configure" was produced with GNU Autoconf.
 It is copyright by the Free Software Foundation but is freely distributable.
 The same holds for its supporting scripts (config.guess, config.sub,
@@ -274,11 +265,12 @@ with body
 FILE FORMAT WARS
 ================
 
-The ISO JPEG standards committee actually promotes different formats like
-"JPEG 2000" or "JPEG XR", which are incompatible with original DCT-based
-JPEG.  IJG therefore does not support these formats (see REFERENCES).  Indeed,
-one of the original reasons for developing this free software was to help
-force convergence on common, interoperable format standards for JPEG files.
+The ISO/IEC JTC1/SC29/WG1 standards committee (also known as JPEG, together
+with ITU-T SG16) currently promotes different formats containing the name
+"JPEG" which are incompatible with original DCT-based JPEG.  IJG therefore does
+not support these formats (see REFERENCES).  Indeed, one of the original
+reasons for developing this free software was to help force convergence on
+common, interoperable format standards for JPEG files.
 Don't use an incompatible file format!
 (In any case, our decoder will remain capable of reading existing JPEG
 image files indefinitely.)
index 899a368..b81299f 100755 (executable)
@@ -2,24 +2,26 @@
 **     Background
 *******************************************************************************
 
-libjpeg-turbo is a derivative of libjpeg that uses SIMD instructions (MMX,
-SSE2, NEON) to accelerate baseline JPEG compression and decompression on x86,
-x86-64, and ARM systems.  On such systems, libjpeg-turbo is generally 2-4x as
-fast as the unmodified version of libjpeg, all else being equal.
-
-libjpeg-turbo was originally based on libjpeg/SIMD by Miyasaka Masaru, but
-the TigerVNC and VirtualGL projects made numerous enhancements to the codec in
-2009, including improved support for Mac OS X, 64-bit support, support for
-32-bit and big-endian pixel formats (RGBX, XBGR, etc.), accelerated Huffman
-encoding/decoding, and various bug fixes.  The goal was to produce a fully
-open-source codec that could replace the partially closed-source TurboJPEG/IPP
-codec used by VirtualGL and TurboVNC.  libjpeg-turbo generally achieves 80-120%
-of the performance of TurboJPEG/IPP.  It is faster in some areas but slower in
-others.
-
-In early 2010, libjpeg-turbo spun off into its own independent project, with
-the goal of making high-speed JPEG compression/decompression technology
-available to a broader range of users and developers.
+libjpeg-turbo is a JPEG image codec that uses SIMD instructions (MMX, SSE2,
+NEON) to accelerate baseline JPEG compression and decompression on x86, x86-64,
+and ARM systems.  On such systems, libjpeg-turbo is generally 2-4x as fast as
+libjpeg, all else being equal.  On other types of systems, libjpeg-turbo can
+still outperform libjpeg by a significant amount, by virtue of its
+highly-optimized Huffman coding routines.  In many cases, the performance of
+libjpeg-turbo rivals that of proprietary high-speed JPEG codecs.
+
+libjpeg-turbo implements both the traditional libjpeg API as well as the less
+powerful but more straightforward TurboJPEG API.  libjpeg-turbo also features
+colorspace extensions that allow it to compress from/decompress to 32-bit and
+big-endian pixel buffers (RGBX, XBGR, etc.), as well as a full-featured Java
+interface.
+
+libjpeg-turbo was originally based on libjpeg/SIMD, an MMX-accelerated
+derivative of libjpeg v6b developed by Miyasaka Masaru.  The TigerVNC and
+VirtualGL projects made numerous enhancements to the codec in 2009, and in
+early 2010, libjpeg-turbo spun off into an independent project, with the goal
+of making high-speed JPEG compression/decompression technology available to a
+broader range of users and developers.
 
 
 *******************************************************************************
@@ -27,7 +29,7 @@ available to a broader range of users and developers.
 *******************************************************************************
 
 Most of libjpeg-turbo inherits the non-restrictive, BSD-style license used by
-libjpeg (see README.)  The TurboJPEG/OSS wrapper (both C and Java versions) and
+libjpeg (see README.)  The TurboJPEG wrapper (both C and Java versions) and
 associated test programs bear a similar license, which is reproduced below:
 
 Redistribution and use in source and binary forms, with or without
@@ -71,16 +73,32 @@ JPEG images:
 
   libjpeg API:  This is the de facto industry-standard API for compressing and
   decompressing JPEG images.  It is more difficult to use than the TurboJPEG
-  API but also more powerful.  libjpeg-turbo is both API/ABI-compatible and
-  mathematically compatible with libjpeg v6b.  It can also optionally be
-  configured to be API/ABI-compatible with libjpeg v7 and v8 (see below.)
+  API but also more powerful.  The libjpeg API implementation in libjpeg-turbo
+  is both API/ABI-compatible and mathematically compatible with libjpeg v6b.
+  It can also optionally be configured to be API/ABI-compatible with libjpeg v7
+  and v8 (see below.)
 
+There is no significant performance advantage to either API when both are used
+to perform similar operations.
+
+======================
+Installation Directory
+======================
+
+This document assumes that libjpeg-turbo will be installed in the default
+directory (/opt/libjpeg-turbo on Un*x and Mac systems and
+c:\libjpeg-turbo[-gcc][64] on Windows systems.  If your installation of
+libjpeg-turbo resides in a different directory, then adjust the instructions
+accordingly.
 
 =============================
 Replacing libjpeg at Run Time
 =============================
 
-If a Unix application is dynamically linked with libjpeg, then you can replace
+Un*x
+----
+
+If a Un*x application is dynamically linked with libjpeg, then you can replace
 libjpeg with libjpeg-turbo at run time by manipulating LD_LIBRARY_PATH.
 For instance:
 
@@ -97,67 +115,51 @@ For instance:
   user  0m0.029s
   sys   0m0.010s
 
-NOTE: {lib} can be lib, lib32, lib64, or lib/64, depending on the O/S and
-architecture.
+({lib} = lib32 or lib64, depending on whether you wish to use the 32-bit or the
+64-bit version of libjpeg-turbo.)
 
-System administrators can also replace the libjpeg sym links in /usr/{lib} with
+System administrators can also replace the libjpeg symlinks in /usr/lib* with
 links to the libjpeg-turbo dynamic library located in /opt/libjpeg-turbo/{lib}.
 This will effectively accelerate every application that uses the libjpeg
 dynamic library on the system.
 
-The libjpeg-turbo SDK for Visual C++ installs the libjpeg-turbo DLL
-(jpeg62.dll, jpeg7.dll, or jpeg8.dll, depending on whether it was built with
-libjpeg v6b, v7, or v8 emulation) into c:\libjpeg-turbo[64]\bin, and the PATH
-environment variable can be modified such that this directory is searched
-before any others that might contain a libjpeg DLL.  However, if a libjpeg
-DLL exists in an application's install directory, then Windows will load this
-DLL first whenever the application is launched.  Thus, if an application ships
-with jpeg62.dll, jpeg7.dll, or jpeg8.dll, then back up the application's
-version of this DLL and copy c:\libjpeg-turbo[64]\bin\jpeg*.dll into the
-application's install directory to accelerate it.
-
-The version of the libjpeg-turbo DLL distributed in the libjpeg-turbo SDK for
-Visual C++ requires the Visual C++ 2008 C run-time DLL (msvcr90.dll).
+Windows
+-------
+
+If a Windows application is dynamically linked with libjpeg, then you can
+replace libjpeg with libjpeg-turbo at run time by backing up the application's
+copy of jpeg62.dll, jpeg7.dll, or jpeg8.dll (assuming the application has its
+own local copy of this library) and copying the corresponding DLL from
+libjpeg-turbo into the application's install directory.  The official
+libjpeg-turbo binary packages only provide jpeg62.dll.  If the application uses
+jpeg7.dll or jpeg8.dll instead, then it will be necessary to build
+libjpeg-turbo from source (see "libjpeg v7 and v8 API/ABI Emulation" below.)
+
+The following information is specific to the official libjpeg-turbo binary
+packages for Visual C++:
+
+-- jpeg62.dll requires the Visual C++ 2008 C run-time DLL (msvcr90.dll).
 msvcr90.dll ships with more recent versions of Windows, but users of older
 Windows releases can obtain it from the Visual C++ 2008 Redistributable
 Package, which is available as a free download from Microsoft's web site.
 
-NOTE:  Features of libjpeg that require passing a C run-time structure, such
-as a file handle, from an application to libjpeg will probably not work with
-the version of the libjpeg-turbo DLL distributed in the libjpeg-turbo SDK for
-Visual C++, unless the application is also built to use the Visual C++ 2008 C
-run-time DLL.  In particular, this affects jpeg_stdio_dest() and
+-- Features of the libjpeg API that require passing a C run-time structure,
+such as a file handle, from an application to the library will probably not
+work with jpeg62.dll, unless the application is also built to use the Visual
+C++ 2008 C run-time DLL.  In particular, this affects jpeg_stdio_dest() and
 jpeg_stdio_src().
 
+Mac
+---
+
 Mac applications typically embed their own copies of the libjpeg dylib inside
 the (hidden) application bundle, so it is not possible to globally replace
-libjpeg on OS X systems.  If an application uses a shared library version of
-libjpeg, then it may be possible to replace the application's version of it.
-This would generally involve copying libjpeg.*.dylib from libjpeg-turbo into
+libjpeg on OS X systems.  Replacing the application's version of the libjpeg
+dylib would generally involve copying libjpeg.*.dylib from libjpeg-turbo into
 the appropriate place in the application bundle and using install_name_tool to
-repoint the dylib to the new directory.  This requires an advanced knowledge of
-OS X and would not survive an upgrade or a re-install of the application.
-Thus, it is not recommended for most users.
-
-=======================
-Replacing TurboJPEG/IPP
-=======================
-
-libjpeg-turbo is a drop-in replacement for the TurboJPEG/IPP SDK used by
-VirtualGL 2.1.x and TurboVNC 0.6 (and prior.)  libjpeg-turbo contains a wrapper
-library (TurboJPEG/OSS) that emulates the TurboJPEG API using libjpeg-turbo
-instead of the closed-source Intel Performance Primitives.  You can replace the
-TurboJPEG/IPP package on Linux systems with the libjpeg-turbo package in order
-to make existing releases of VirtualGL 2.1.x and TurboVNC 0.x use the new codec
-at run time.  Note that the 64-bit libjpeg-turbo packages contain only 64-bit
-binaries, whereas the TurboJPEG/IPP 64-bit packages contained both 64-bit and
-32-bit binaries.  Thus, to replace a TurboJPEG/IPP 64-bit package, install
-both the 64-bit and 32-bit versions of libjpeg-turbo.
-
-You can also build the VirtualGL 2.1.x and TurboVNC 0.6 source code with
-the libjpeg-turbo SDK instead of TurboJPEG/IPP.  It should work identically.
-libjpeg-turbo also includes static library versions of TurboJPEG/OSS, which
-are used to build VirtualGL 2.2 and TurboVNC 1.0 and later.
+repoint the libjpeg-turbo dylib to its new directory.  This requires an
+advanced knowledge of OS X and would not survive an upgrade or a re-install of
+the application.  Thus, it is not recommended for most users.
 
 ========================================
 Using libjpeg-turbo in Your Own Programs
@@ -165,8 +167,8 @@ Using libjpeg-turbo in Your Own Programs
 
 For the most part, libjpeg-turbo should work identically to libjpeg, so in
 most cases, an application can be built against libjpeg and then run against
-libjpeg-turbo.  On Unix systems (including Cygwin), you can build against
-libjpeg-turbo instead of libjpeg by setting
+libjpeg-turbo.  On Un*x systems and Cygwin, you can build against libjpeg-turbo
+instead of libjpeg by setting
 
   CPATH=/opt/libjpeg-turbo/include
   and
@@ -183,20 +185,20 @@ If using MinGW, then set
 
 Building against libjpeg-turbo is useful, for instance, if you want to build an
 application that leverages the libjpeg-turbo colorspace extensions (see below.)
-On Linux and Solaris systems, you would still need to manipulate
-LD_LIBRARY_PATH or create appropriate sym links to use libjpeg-turbo at run
-time.  On such systems, you can pass -R /opt/libjpeg-turbo/{lib} to the linker
-to force the use of libjpeg-turbo at run time rather than libjpeg (also useful
-if you want to leverage the colorspace extensions), or you can link against the
-libjpeg-turbo static library.
+On Un*x systems, you would still need to manipulate LD_LIBRARY_PATH or create
+appropriate symlinks to use libjpeg-turbo at run time.  On such systems, you
+can pass -R /opt/libjpeg-turbo/{lib} to the linker to force the use of
+libjpeg-turbo at run time rather than libjpeg (also useful if you want to
+leverage the colorspace extensions), or you can link against the libjpeg-turbo
+static library.
 
-To force a Linux, Solaris, or MinGW application to link against the static
-version of libjpeg-turbo, you can use the following linker options:
+To force a Un*x or MinGW application to link against the static version of
+libjpeg-turbo, you can use the following linker options:
 
   -Wl,-Bstatic -ljpeg -Wl,-Bdynamic
 
 On OS X, simply add /opt/libjpeg-turbo/lib/libjpeg.a to the linker command
-line (this also works on Linux and Solaris.)
+line.
 
 To build Visual C++ applications using libjpeg-turbo, add
 c:\libjpeg-turbo[64]\include to the system or user INCLUDE environment
@@ -234,8 +236,10 @@ time with:
 
   #ifdef JCS_EXTENSIONS
 
-At run time, attempting to use these extensions with a version of libjpeg
-that doesn't support them will result in a "Bogus input colorspace" error.
+At run time, attempting to use these extensions with a libjpeg implementation
+that does not support them will result in a "Bogus input colorspace" error.
+Applications can trap this error in order to test whether run-time support is
+available for the colorspace extensions.
 
 When using the RGBX, BGRX, XBGR, and XRGB colorspaces during decompression, the
 X byte is undefined, and in order to ensure the best performance, libjpeg-turbo
@@ -252,34 +256,47 @@ extensions at compile time with:
 jcstest.c, located in the libjpeg-turbo source tree, demonstrates how to check
 for the existence of the colorspace extensions at compile time and run time.
 
-=================================
-libjpeg v7 and v8 API/ABI support
-=================================
+===================================
+libjpeg v7 and v8 API/ABI Emulation
+===================================
 
 With libjpeg v7 and v8, new features were added that necessitated extending the
 compression and decompression structures.  Unfortunately, due to the exposed
 nature of those structures, extending them also necessitated breaking backward
-ABI compatibility with previous libjpeg releases.  Thus, programs that are
+ABI compatibility with previous libjpeg releases.  Thus, programs that were
 built to use libjpeg v7 or v8 did not work with libjpeg-turbo, since it is
 based on the libjpeg v6b code base.  Although libjpeg v7 and v8 are still not
-as widely used as v6b, enough programs (including a few Linux distros) have
-made the switch that it was desirable to provide support for the libjpeg v7/v8
-API/ABI in libjpeg-turbo.  Although libjpeg-turbo can now be configured as a
-drop-in replacement for libjpeg v7 or v8, it should be noted that not all of
-the features in libjpeg v7 and v8 are supported (see below.)
+as widely used as v6b, enough programs (including a few Linux distros) made
+the switch that there was a demand to emulate the libjpeg v7 and v8 ABIs
+in libjpeg-turbo.  It should be noted, however, that this feature was added
+primarily so that applications that had already been compiled to use libjpeg
+v7+ could take advantage of accelerated baseline JPEG encoding/decoding
+without recompiling.  libjpeg-turbo does not claim to support all of the
+libjpeg v7+ features, nor to produce identical output to libjpeg v7+ in all
+cases (see below.)
 
 By passing an argument of --with-jpeg7 or --with-jpeg8 to configure, or an
 argument of -DWITH_JPEG7=1 or -DWITH_JPEG8=1 to cmake, you can build a version
-of libjpeg-turbo that emulates the libjpeg v7 or v8 API/ABI, so that programs
+of libjpeg-turbo that emulates the libjpeg v7 or v8 ABI, so that programs
 that are built against libjpeg v7 or v8 can be run with libjpeg-turbo.  The
 following section describes which libjpeg v7+ features are supported and which
 aren't.
 
-libjpeg v7 and v8 Features:
----------------------------
+Support for libjpeg v7 and v8 Features:
+---------------------------------------
 
 Fully supported:
 
+-- libjpeg: IDCT scaling extensions in decompressor
+   libjpeg-turbo supports IDCT scaling with scaling factors of 1/8, 1/4, 3/8,
+   1/2, 5/8, 3/4, 7/8, 9/8, 5/4, 11/8, 3/2, 13/8, 7/4, 15/8, and 2/1 (only 1/4
+   and 1/2 are SIMD-accelerated.)
+
+-- libjpeg: arithmetic coding
+
+-- libjpeg: In-memory source and destination managers
+   See notes below.
+
 -- cjpeg: Separate quality settings for luminance and chrominance
    Note that the libpjeg v7+ API was extended to accommodate this feature only
    for convenience purposes.  It has always been possible to implement this
@@ -287,38 +304,47 @@ Fully supported:
 
 -- cjpeg: 32-bit BMP support
 
+-- cjpeg: -rgb option
+
 -- jpegtran: lossless cropping
 
 -- jpegtran: -perfect option
 
+-- jpegtran: forcing width/height when performing lossless crop
+
 -- rdjpgcom: -raw option
 
 -- rdjpgcom: locale awareness
 
 
-Fully supported when using libjpeg v7/v8 emulation:
-
--- libjpeg: In-memory source and destination managers
-
-
 Not supported:
 
+NOTE:  As of this writing, extensive research has been conducted into the
+usefulness of DCT scaling as a means of data reduction and SmartScale as a
+means of quality improvement.  The reader is invited to peruse the research at
+http://www.libjpeg-turbo.org/About/SmartScale and draw his/her own conclusions,
+but it is the general belief of our project that these features have not
+demonstrated sufficient usefulness to justify inclusion in libjpeg-turbo.
+
 -- libjpeg: DCT scaling in compressor
    cinfo.scale_num and cinfo.scale_denom are silently ignored.
-   There is no technical reason why DCT scaling cannot be supported, but
-   without the SmartScale extension (see below), it would only be able to
-   down-scale using ratios of 1/2, 8/15, 4/7, 8/13, 2/3, 8/11, 4/5, and 8/9,
-   which is of limited usefulness.
+   There is no technical reason why DCT scaling could not be supported when
+   emulating the libjpeg v7+ API/ABI, but without the SmartScale extension (see
+   below), only scaling factors of 1/2, 8/15, 4/7, 8/13, 2/3, 8/11, 4/5, and
+   8/9 would be available, which is of limited usefulness.
 
 -- libjpeg: SmartScale
    cinfo.block_size is silently ignored.
    SmartScale is an extension to the JPEG format that allows for DCT block
-   sizes other than 8x8.  It would be difficult to support this feature while
-   retaining backward compatibility with libjpeg v6b.
-
--- libjpeg: IDCT scaling extensions in decompressor
-   libjpeg-turbo still supports IDCT scaling with scaling factors of 1/2, 1/4,
-   and 1/8 (same as libjpeg v6b.)
+   sizes other than 8x8.  Providing support for this new format would be
+   feasible (particularly without full acceleration.)  However, until/unless
+   the format becomes either an official industry standard or, at minimum, an
+   accepted solution in the community, we are hesitant to implement it, as
+   there is no sense of whether or how it might change in the future.  It is
+   our belief that SmartScale has not demonstrated sufficient usefulness as a
+   lossless format nor as a means of quality enhancement, and thus, our primary
+   interest in providing this feature would be as a means of supporting
+   additional DCT scaling factors.
 
 -- libjpeg: Fancy downsampling in compressor
    cinfo.do_fancy_downsampling is silently ignored.
@@ -331,9 +357,97 @@ Not supported:
 -- Lossless RGB JPEG files
    This requires the SmartScale feature, which is not supported.
 
+What About libjpeg v9?
+----------------------
+
+libjpeg v9 introduced yet another field to the JPEG compression structure
+(color_transform), thus making the ABI backward incompatible with that of
+libjpeg v8.  This new field was introduced solely for the purpose of supporting
+lossless SmartScale encoding.  Further, there was actually no reason to extend
+the API in this manner, as the color transform could have just as easily been
+activated by way of a new JPEG colorspace constant, thus preserving backward
+ABI compatibility.
+
+Our research (see link above) has shown that lossless SmartScale does not
+generally accomplish anything that can't already be accomplished better with
+existing, standard lossless formats.  Thus, at this time, it is our belief that
+there is not sufficient technical justification for software to upgrade from
+libjpeg v8 to libjpeg v9, and therefore, not sufficient technical justification
+for us to emulate the libjpeg v9 ABI.
+
+=====================================
+In-Memory Source/Destination Managers
+=====================================
+
+By default, libjpeg-turbo 1.3 and later includes the jpeg_mem_src() and
+jpeg_mem_dest() functions, even when not emulating the libjpeg v8 API/ABI.
+Previously, it was necessary to build libjpeg-turbo from source with libjpeg v8
+API/ABI emulation in order to use the in-memory source/destination managers,
+but several projects requested that those functions be included when emulating
+the libjpeg v6b API/ABI as well.  This allows the use of those functions by
+programs that need them without breaking ABI compatibility for programs that
+don't, and it allows those functions to be provided in the "official"
+libjpeg-turbo binaries.
+
+Those who are concerned about maintaining strict conformance with the libjpeg
+v6b or v7 API can pass an argument of --without-mem-srcdst to configure or
+an argument of -DWITH_MEM_SRCDST=0 to CMake prior to building libjpeg-turbo.
+This will restore the pre-1.3 behavior, in which jpeg_mem_src() and
+jpeg_mem_dest() are only included when emulating the libjpeg v8 API/ABI.
+
+On Un*x systems, including the in-memory source/destination managers changes
+the dynamic library version from 62.0.0 to 62.1.0 if using libjpeg v6b API/ABI
+emulation and from 7.0.0 to 7.1.0 if using libjpeg v7 API/ABI emulation.
+
+Note that, on most Un*x systems, the dynamic linker will not look for a
+function in a library until that function is actually used.  Thus, if a program
+is built against libjpeg-turbo 1.3+ and uses jpeg_mem_src() or jpeg_mem_dest(),
+that program will not fail if run against an older version of libjpeg-turbo or
+against libjpeg v7- until the program actually tries to call jpeg_mem_src() or
+jpeg_mem_dest().  Such is not the case on Windows.  If a program is built
+against the libjpeg-turbo 1.3+ DLL and uses jpeg_mem_src() or jpeg_mem_dest(),
+then it must use the libjpeg-turbo 1.3+ DLL at run time.
+
+Both cjpeg and djpeg have been extended to allow testing the in-memory
+source/destination manager functions.  See their respective man pages for more
+details.
+
+
+*******************************************************************************
+**     Mathematical Compatibility
+*******************************************************************************
+
+For the most part, libjpeg-turbo should produce identical output to libjpeg
+v6b.  The one exception to this is when using the floating point DCT/IDCT, in
+which case the outputs of libjpeg v6b and libjpeg-turbo are not guaranteed to
+be identical (the accuracy of the floating point DCT/IDCT is constant when
+using libjpeg-turbo's SIMD extensions, but otherwise, it can depend heavily on
+the compiler and compiler settings.)
+
+While libjpeg-turbo does emulate the libjpeg v8 API/ABI, under the hood, it is
+still using the same algorithms as libjpeg v6b, so there are several specific
+cases in which libjpeg-turbo cannot be expected to produce the same output as
+libjpeg v8:
+
+-- When decompressing using scaling factors of 1/2 and 1/4, because libjpeg v8
+   implements those scaling algorithms a bit differently than libjpeg v6b does,
+   and libjpeg-turbo's SIMD extensions are based on the libjpeg v6b behavior.
+
+-- When using chrominance subsampling, because libjpeg v8 implements this
+   with its DCT/IDCT scaling algorithms rather than with a separate
+   downsampling/upsampling algorithm.
+
+-- When using the floating point IDCT, for the reasons stated above and also
+   because the floating point IDCT algorithm was modified in libjpeg v8a to
+   improve accuracy.
+
+-- When decompressing using a scaling factor > 1 and merged (AKA "non-fancy" or
+   "non-smooth") chrominance upsampling, because libjpeg v8 does not support
+   merged upsampling with scaling factors > 1.
+
 
 *******************************************************************************
-**     Performance pitfalls
+**     Performance Pitfalls
 *******************************************************************************
 
 ===============
index 70e2555..afb4359 100644 (file)
@@ -40,7 +40,7 @@ case "$host_os" in
         ;;
     esac
   ;;
-  freebsd* | netbsd* | openbsd*)
+  kfreebsd* | freebsd* | netbsd* | openbsd*)
     if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
       objfmt='BSD-a.out'
     else
@@ -144,26 +144,26 @@ AC_DEFUN([AC_CHECK_COMPATIBLE_ARM_ASSEMBLER_IFELSE],[
   ac_save_CFLAGS="$CFLAGS"
   CFLAGS="$CCASFLAGS -x assembler-with-cpp"
   CC="$CCAS"
-  AC_COMPILE_IFELSE([[
+  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
     .text
     .fpu neon
     .arch armv7a
     .object_arch armv4
     .arm
     pld [r0]
-    vmovn.u16 d0, q0]], ac_good_gnu_arm_assembler=yes)
+    vmovn.u16 d0, q0]])], ac_good_gnu_arm_assembler=yes)
 
   ac_use_gas_preprocessor=no
   if test "x$ac_good_gnu_arm_assembler" = "xno" ; then
     CC="gas-preprocessor.pl $CCAS"
-    AC_COMPILE_IFELSE([[
+    AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
       .text
       .fpu neon
       .arch armv7a
       .object_arch armv4
       .arm
       pld [r0]
-      vmovn.u16 d0, q0]], ac_use_gas_preprocessor=yes)
+      vmovn.u16 d0, q0]])], ac_use_gas_preprocessor=yes)
   fi
   CFLAGS="$ac_save_CFLAGS"
   CC="$ac_save_CC"
index 47ae922..361861c 100644 (file)
@@ -6600,6 +6600,46 @@ AC_MSG_RESULT([$_am_result])
 rm -f confinc confmf
 ])
 
+# serial 2
+
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+
+# Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+
+# 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.
+
+# 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.
+
+# 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+])
+
 #  -*- Autoconf -*-
 
 
diff --git a/bmp.c b/bmp.c
index 4caefb4..fa4479d 100644 (file)
--- a/bmp.c
+++ b/bmp.c
@@ -169,7 +169,7 @@ int loadbmp(char *filename, unsigned char **buf, int *w, int *h,
                                nlines);
                }
                cinfo.next_scanline+=nlines;
-  }
+       }
 
        (*src->finish_input)(&cinfo, src);
 
@@ -236,7 +236,7 @@ int savebmp(char *filename, unsigned char *buf, int w, int h, int srcpf,
                        _throw("savebmp(): Could not initialize PPM writer");
        }
 
-  dst->output_file=file;
+       dst->output_file=file;
        (*dst->start_output)(&dinfo, dst);
        (*dinfo.mem->realize_virt_arrays)((j_common_ptr)&dinfo);
 
@@ -258,7 +258,7 @@ int savebmp(char *filename, unsigned char *buf, int w, int h, int srcpf,
                }
                (*dst->put_pixel_rows)(&dinfo, dst, nlines);
                dinfo.output_scanline+=nlines;
-  }
+       }
 
        (*dst->finish_output)(&dinfo, dst);
 
diff --git a/bmp.h b/bmp.h
index 0d1e4dc..c50c260 100644 (file)
--- a/bmp.h
+++ b/bmp.h
@@ -39,8 +39,4 @@ int savebmp(char *filename, unsigned char *buf, int w, int h, int pf,
 
 const char *bmpgeterr(void);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif
index 704d8b2..b60ddd6 100644 (file)
@@ -1,6 +1,21 @@
+NOTE:  This file was modified by The libjpeg-turbo Project to include only
+information relevant to libjpeg-turbo.
+
 CHANGE LOG for Independent JPEG Group's JPEG software
 
 
+Version 8d  15-Jan-2012
+-----------------------
+
+Add cjpeg -rgb option to create RGB JPEG files.
+Using this switch suppresses the conversion from RGB
+colorspace input to the default YCbCr JPEG colorspace.
+Thank to Michael Koch for the initial suggestion.
+
+Add option to disable the region adjustment in the transupp crop code.
+Thank to Jeffrey Friedl for the suggestion.
+
+
 Version 8b  16-May-2010
 -----------------------
 
@@ -31,6 +46,9 @@ Thank to Roberto Boni from Italy for the suggestion.
 Version 7  27-Jun-2009
 ----------------------
 
+New scaled DCTs implemented.
+djpeg now supports scalings N/8 with all N from 1 to 16.
+
 cjpeg -quality option has been extended for support of separate quality
 settings for luminance and chrominance (or in general, for every provided
 quantization table slot).
diff --git a/cjpeg.1 b/cjpeg.1
index 6fb7299..113efd5 100644 (file)
--- a/cjpeg.1
+++ b/cjpeg.1
@@ -1,4 +1,4 @@
-.TH CJPEG 1 "31 January 2012"
+.TH CJPEG 1 "18 January 2013"
 .SH NAME
 cjpeg \- compress an image file to a JPEG file
 .SH SYNOPSIS
@@ -49,6 +49,11 @@ By saying
 .BR \-grayscale ,
 you'll get a smaller JPEG file that takes less time to process.
 .TP
+.B \-rgb
+Create RGB JPEG file.
+Using this switch suppresses the conversion from RGB
+colorspace input to the default YCbCr JPEG colorspace.
+.TP
 .B \-optimize
 Perform optimization of entropy encoding parameters.  Without this, default
 encoding parameters are used.
@@ -190,6 +195,11 @@ selects 4000000 bytes.  If more space is needed, temporary files will be used.
 .BI \-outfile " name"
 Send output image to the named file, not to standard output.
 .TP
+.BI \-memdst
+Compress to memory instead of a file.  This feature was implemented mainly as a
+way of testing the in-memory destination manager (jpeg_mem_dest()), but it is
+also useful for benchmarking, since it reduces the I/O overhead.
+.TP
 .B \-verbose
 Enable debug printout.  More
 .BR \-v 's
@@ -308,6 +318,10 @@ Wallace, Gregory K.  "The JPEG Still Picture Compression Standard",
 Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44.
 .SH AUTHOR
 Independent JPEG Group
+.PP
+This file was modified by The libjpeg-turbo Project to include only information
+relevant to libjpeg-turbo, to wordsmith certain sections, and to describe
+features not present in libjpeg.
 .SH BUGS
 Support for GIF input files was removed in cjpeg v6b due to concerns over
 the Unisys LZW patent.  Although this patent expired in 2006, cjpeg still
diff --git a/cjpeg.c b/cjpeg.c
index 0475c02..0c23fe7 100644 (file)
--- a/cjpeg.c
+++ b/cjpeg.c
@@ -1,10 +1,11 @@
 /*
  * cjpeg.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1998, Thomas G. Lane.
- * Modified 2003-2008 by Guido Vollbeding.
- * Copyright (C) 2010, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
+ * Modified 2003-2011 by Guido Vollbeding.
+ * libjpeg-turbo Modifications:
+ * Copyright (C) 2010, 2013, D. R. Commander.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains a command-line user interface for the JPEG compressor.
@@ -138,6 +139,7 @@ select_file_type (j_compress_ptr cinfo, FILE * infile)
 
 static const char * progname;  /* program name for error messages */
 static char * outfilename;     /* for -outfile switch */
+boolean memdst;  /* for -memdst switch */
 
 
 LOCAL(void)
@@ -154,6 +156,7 @@ usage (void)
   fprintf(stderr, "Switches (names may be abbreviated):\n");
   fprintf(stderr, "  -quality N[,...]   Compression quality (0..100; 5-95 is useful range)\n");
   fprintf(stderr, "  -grayscale     Create monochrome JPEG file\n");
+  fprintf(stderr, "  -rgb           Create RGB JPEG file\n");
 #ifdef ENTROPY_OPT_SUPPORTED
   fprintf(stderr, "  -optimize      Optimize Huffman table (smaller file, but slow compression)\n");
 #endif
@@ -185,6 +188,9 @@ usage (void)
 #endif
   fprintf(stderr, "  -maxmemory N   Maximum memory to use (in kbytes)\n");
   fprintf(stderr, "  -outfile name  Specify name for output file\n");
+#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
+  fprintf(stderr, "  -memdst        Compress to memory instead of file (useful for benchmarking)\n");
+#endif
   fprintf(stderr, "  -verbose  or  -debug   Emit debug output\n");
   fprintf(stderr, "Switches for wizards:\n");
   fprintf(stderr, "  -baseline      Force baseline quantization tables\n");
@@ -226,6 +232,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
   simple_progressive = FALSE;
   is_targa = FALSE;
   outfilename = NULL;
+  memdst = FALSE;
   cinfo->err->trace_level = 0;
 
   /* Scan command line options, adjust parameters */
@@ -278,7 +285,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
        fprintf(stderr, "%s version %s (build %s)\n",
                PACKAGE_NAME, VERSION, BUILD);
        fprintf(stderr, "%s\n\n", JCOPYRIGHT);
-       fprintf(stderr, "Emulating The Independent JPEG Group's libjpeg, version %s\n\n",
+       fprintf(stderr, "Emulating The Independent JPEG Group's software, version %s\n\n",
                JVERSION);
        printed_version = TRUE;
       }
@@ -288,6 +295,10 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
       /* Force a monochrome JPEG file to be generated. */
       jpeg_set_colorspace(cinfo, JCS_GRAYSCALE);
 
+    } else if (keymatch(arg, "rgb", 3)) {
+      /* Force an RGB JPEG file to be generated. */
+      jpeg_set_colorspace(cinfo, JCS_RGB);
+
     } else if (keymatch(arg, "maxmemory", 3)) {
       /* Maximum memory in Kb (or Mb with 'm'). */
       long lval;
@@ -306,7 +317,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
 #ifdef ENTROPY_OPT_SUPPORTED
       cinfo->optimize_coding = TRUE;
 #else
-      fprintf(stderr, "%s: sorry, entropy optimization was not compiled\n",
+      fprintf(stderr, "%s: sorry, entropy optimization was not compiled in\n",
              progname);
       exit(EXIT_FAILURE);
 #endif
@@ -323,11 +334,21 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
       simple_progressive = TRUE;
       /* We must postpone execution until num_components is known. */
 #else
-      fprintf(stderr, "%s: sorry, progressive output was not compiled\n",
+      fprintf(stderr, "%s: sorry, progressive output was not compiled in\n",
              progname);
       exit(EXIT_FAILURE);
 #endif
 
+    } else if (keymatch(arg, "memdst", 2)) {
+      /* Use in-memory destination manager */
+#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
+      memdst = TRUE;
+#else
+      fprintf(stderr, "%s: sorry, in-memory destination manager was not compiled in\n",
+              progname);
+      exit(EXIT_FAILURE);
+#endif
+
     } else if (keymatch(arg, "quality", 1)) {
       /* Quality ratings (quantization table scaling factors). */
       if (++argn >= argc)      /* advance to next argument */
@@ -388,7 +409,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
       scansarg = argv[argn];
       /* We must postpone reading the file in case -progressive appears. */
 #else
-      fprintf(stderr, "%s: sorry, multi-scan output was not compiled\n",
+      fprintf(stderr, "%s: sorry, multi-scan output was not compiled in\n",
              progname);
       exit(EXIT_FAILURE);
 #endif
@@ -467,7 +488,9 @@ main (int argc, char **argv)
   int file_index;
   cjpeg_source_ptr src_mgr;
   FILE * input_file;
-  FILE * output_file;
+  FILE * output_file = NULL;
+  unsigned char *outbuffer = NULL;
+  unsigned long outsize = 0;
   JDIMENSION num_scanlines;
 
   /* On Mac, fetch a command line. */
@@ -510,19 +533,21 @@ main (int argc, char **argv)
   file_index = parse_switches(&cinfo, argc, argv, 0, FALSE);
 
 #ifdef TWO_FILE_COMMANDLINE
-  /* Must have either -outfile switch or explicit output file name */
-  if (outfilename == NULL) {
-    if (file_index != argc-2) {
-      fprintf(stderr, "%s: must name one input and one output file\n",
-             progname);
-      usage();
-    }
-    outfilename = argv[file_index+1];
-  } else {
-    if (file_index != argc-1) {
-      fprintf(stderr, "%s: must name one input and one output file\n",
-             progname);
-      usage();
+  if (!memdst) {
+    /* Must have either -outfile switch or explicit output file name */
+    if (outfilename == NULL) {
+      if (file_index != argc-2) {
+        fprintf(stderr, "%s: must name one input and one output file\n",
+                progname);
+        usage();
+      }
+      outfilename = argv[file_index+1];
+    } else {
+      if (file_index != argc-1) {
+        fprintf(stderr, "%s: must name one input and one output file\n",
+                progname);
+        usage();
+      }
     }
   }
 #else
@@ -550,7 +575,7 @@ main (int argc, char **argv)
       fprintf(stderr, "%s: can't open %s\n", progname, outfilename);
       exit(EXIT_FAILURE);
     }
-  } else {
+  } else if (!memdst) {
     /* default output file is stdout */
     output_file = write_stdout();
   }
@@ -573,7 +598,12 @@ main (int argc, char **argv)
   file_index = parse_switches(&cinfo, argc, argv, 0, TRUE);
 
   /* Specify data destination for compression */
-  jpeg_stdio_dest(&cinfo, output_file);
+#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
+  if (memdst)
+    jpeg_mem_dest(&cinfo, &outbuffer, &outsize);
+  else
+#endif
+    jpeg_stdio_dest(&cinfo, output_file);
 
   /* Start compressor */
   jpeg_start_compress(&cinfo, TRUE);
@@ -592,13 +622,19 @@ main (int argc, char **argv)
   /* Close files, if we opened them */
   if (input_file != stdin)
     fclose(input_file);
-  if (output_file != stdout)
+  if (output_file != stdout && output_file != NULL)
     fclose(output_file);
 
 #ifdef PROGRESS_REPORT
   end_progress_monitor((j_common_ptr) &cinfo);
 #endif
 
+  if (memdst) {
+    fprintf(stderr, "Compressed size:  %lu bytes\n", outsize);
+    if (outbuffer != NULL)
+      free(outbuffer);
+  }
+
   /* All done. */
   exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
   return 0;                    /* suppress no-return-value warnings */
diff --git a/cmakescripts/getdate.bat b/cmakescripts/getdate.bat
deleted file mode 100644 (file)
index b4251bb..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-@echo off
-for /f "tokens=1-4 eol=/ DELIMS=/ " %%i in ('date /t') do set BUILD=%%l%%j%%k
-echo %BUILD%
diff --git a/cmakescripts/md5cmp.cmake b/cmakescripts/md5cmp.cmake
new file mode 100644 (file)
index 0000000..c315aa8
--- /dev/null
@@ -0,0 +1,15 @@
+if(NOT MD5)
+  message(FATAL_ERROR "MD5 not specified")
+endif()
+
+if(NOT FILE)
+  message(FATAL_ERROR "FILE not specified")
+endif()
+
+file(MD5 ${FILE} MD5FILE)
+
+if(NOT MD5 STREQUAL MD5FILE)
+       message(FATAL_ERROR "MD5 of ${FILE} should be ${MD5}, not ${MD5FILE}.")
+else()
+       message(STATUS "${MD5}: OK")
+endif()
index b76c3dc..1d95275 100644 (file)
@@ -72,6 +72,9 @@
 /* libjpeg-turbo version */
 #undef LIBJPEG_TURBO_VERSION
 
+/* Support in-memory source/destination managers */
+#undef MEM_SRCDST_SUPPORTED
+
 /* Define if you have BSD-like bzero and bcopy */
 #undef NEED_BSD_STRINGS
 
@@ -81,6 +84,9 @@
 /* Define if you have sys/types.h */
 #undef NEED_SYS_TYPES_H
 
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
 /* Name of package */
 #undef PACKAGE
 
 /* Define if shift is unsigned */
 #undef RIGHT_SHIFT_IS_UNSIGNED
 
+/* The size of a `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
index 2f7fce0..e10e209 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for libjpeg-turbo 1.2.1.
+# Generated by GNU Autoconf 2.59 for libjpeg-turbo 1.3.1.
 #
 # Copyright (C) 2003 Free Software Foundation, Inc.
 # This configure script is free software; the Free Software Foundation
@@ -421,8 +421,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
 # Identity of this package.
 PACKAGE_NAME='libjpeg-turbo'
 PACKAGE_TARNAME='libjpeg-turbo'
-PACKAGE_VERSION='1.2.1'
-PACKAGE_STRING='libjpeg-turbo 1.2.1'
+PACKAGE_VERSION='1.3.1'
+PACKAGE_STRING='libjpeg-turbo 1.3.1'
 PACKAGE_BUGREPORT=''
 
 ac_default_prefix=/opt/libjpeg-turbo
@@ -463,7 +463,7 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP CCAS CCASFLAGS build build_cpu build_vendor build_os host host_cpu host_vendor host_os EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL JPEG_LIB_VERSION JPEG_LIB_VERSION_DECIMAL SO_MAJOR_VERSION SO_MINOR_VERSION VERSION_SCRIPT_TRUE VERSION_SCRIPT_FALSE VERSION_SCRIPT_FLAG WITH_ARITH_ENC_TRUE WITH_ARITH_ENC_FALSE WITH_ARITH_DEC_TRUE WITH_ARITH_DEC_FALSE WITH_ARITH_TRUE WITH_ARITH_FALSE JAVAC JAVACFLAGS JAR JAVA JNI_CFLAGS WITH_JAVA_TRUE WITH_JAVA_FALSE WITH_JAVA JAVA_RPM_CONTENTS_1 JAVA_RPM_CONTENTS_2 RPM_CONFIG_ARGS NASM NAFLAGS WITH_SIMD_TRUE WITH_SIMD_FALSE WITH_SSE_FLOAT_DCT_TRUE WITH_SSE_FLOAT_DCT_FALSE SIMD_I386_TRUE SIMD_I386_FALSE SIMD_X86_64_TRUE SIMD_X86_64_FALSE SIMD_ARM_TRUE SIMD_ARM_FALSE X86_64_TRUE X86_64_FALSE RPMARCH DEBARCH BUILD LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP CCAS CCASFLAGS build build_cpu build_vendor build_os host host_cpu host_vendor host_os EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL JPEG_LIB_VERSION JPEG_LIB_VERSION_DECIMAL SO_MAJOR_VERSION SO_MINOR_VERSION LIBTOOL_CURRENT SO_AGE MEM_SRCDST_FUNCTIONS VERSION_SCRIPT_TRUE VERSION_SCRIPT_FALSE VERSION_SCRIPT_FLAG WITH_ARITH_ENC_TRUE WITH_ARITH_ENC_FALSE WITH_ARITH_DEC_TRUE WITH_ARITH_DEC_FALSE WITH_ARITH_TRUE WITH_ARITH_FALSE JAVAC JAVACFLAGS JAR JAVA JNI_CFLAGS WITH_JAVA_TRUE WITH_JAVA_FALSE WITH_JAVA JAVA_RPM_CONTENTS_1 JAVA_RPM_CONTENTS_2 NASM NAFLAGS WITH_SIMD_TRUE WITH_SIMD_FALSE WITH_SSE_FLOAT_DCT_TRUE WITH_SSE_FLOAT_DCT_FALSE SIMD_I386_TRUE SIMD_I386_FALSE SIMD_X86_64_TRUE SIMD_X86_64_FALSE SIMD_ARM_TRUE SIMD_ARM_FALSE X86_64_TRUE X86_64_FALSE WITH_TURBOJPEG_TRUE WITH_TURBOJPEG_FALSE PKGNAME RPMARCH RPM_CONFIG_ARGS DEBARCH BUILD LIBOBJS LTLIBOBJS'
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -984,6 +984,10 @@ ac_env_JNI_CFLAGS_set=${JNI_CFLAGS+set}
 ac_env_JNI_CFLAGS_value=$JNI_CFLAGS
 ac_cv_env_JNI_CFLAGS_set=${JNI_CFLAGS+set}
 ac_cv_env_JNI_CFLAGS_value=$JNI_CFLAGS
+ac_env_PKGNAME_set=${PKGNAME+set}
+ac_env_PKGNAME_value=$PKGNAME
+ac_cv_env_PKGNAME_set=${PKGNAME+set}
+ac_cv_env_PKGNAME_value=$PKGNAME
 
 #
 # Report the --help message.
@@ -992,7 +996,7 @@ if test "$ac_init_help" = "long"; then
   # 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 <<_ACEOF
-\`configure' configures libjpeg-turbo 1.2.1 to adapt to many kinds of systems.
+\`configure' configures libjpeg-turbo 1.3.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1058,7 +1062,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libjpeg-turbo 1.2.1:";;
+     short | recursive ) echo "Configuration of libjpeg-turbo 1.3.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1091,11 +1095,16 @@ Optional Packages:
                           backward incompatible with libjpeg v6b.)
   --with-jpeg8            Emulate libjpeg v8 API/ABI (this makes libjpeg-turbo
                           backward incompatible with libjpeg v6b.)
-  --without-arith-enc     Omit arithmetic encoding support
-  --without-arith-dec     Omit arithmetic decoding support
-  --with-java             Build Java wrapper for the TurboJPEG/OSS library
+  --without-mem-srcdst    Do not include in-memory source/destination manager
+                          functions when emulating the libjpeg v6b or v7
+                          API/ABI
+  --without-arith-enc     Do not include arithmetic encoding support
+  --without-arith-dec     Do not include arithmetic decoding support
+  --without-turbojpeg     Do not include the TurboJPEG wrapper library and
+                          associated test programs
+  --with-java             Build Java wrapper for the TurboJPEG library
   --with-gas-preprocessor Force using gas-preprocessor.pl on ARM.
-  --without-simd          Omit SIMD extensions.
+  --without-simd          Do not include SIMD extensions
 
 Some influential environment variables:
   CC          C compiler command
@@ -1129,6 +1138,7 @@ Some influential environment variables:
               '-I/usr/java/include -I/usr/java/include/solaris' on Solaris,
               and '-I/usr/java/default/include
               -I/usr/java/default/include/linux' on Linux)
+  PKGNAME     distribution package name (default: libjpeg-turbo)
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -1228,7 +1238,7 @@ fi
 test -n "$ac_init_help" && exit 0
 if $ac_init_version; then
   cat <<\_ACEOF
-libjpeg-turbo configure 1.2.1
+libjpeg-turbo configure 1.3.1
 generated by GNU Autoconf 2.59
 
 Copyright (C) 2003 Free Software Foundation, Inc.
@@ -1242,7 +1252,7 @@ cat >&5 <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libjpeg-turbo $as_me 1.2.1, which was
+It was created by libjpeg-turbo $as_me 1.3.1, which was
 generated by GNU Autoconf 2.59.  Invocation command line was
 
   $ $0 $@
@@ -1887,7 +1897,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='libjpeg-turbo'
- VERSION='1.2.1'
+ VERSION='1.3.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -2026,6 +2036,8 @@ cat >>confdefs.h <<\_ACEOF
 _ACEOF
 
 
+
+
 # Checks for programs.
 SAVED_CFLAGS=${CFLAGS}
 SAVED_CPPFLAGS=${CPPFLAGS}
@@ -4205,6 +4217,7 @@ else
 fi
 
 
+
 # By default we simply use the C compiler to build assembly code.
 
 test "${CCAS+set}" = set || CCAS=$CC
@@ -4212,6 +4225,109 @@ test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
 
 
 
+if test "x$CC" != xcc; then
+  echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5
+echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6
+else
+  echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5
+echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6
+fi
+set dummy $CC; ac_cc=`echo $2 |
+                     sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if eval "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest.$ac_objext >&5'
+if { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+   test -f conftest.$ac_objext && { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); };
+then
+  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+  if test "x$CC" != xcc; then
+    # Test first that cc exists at all.
+    if { ac_try='cc -c conftest.$ac_ext >&5'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+      ac_try='cc -c conftest.$ac_ext -o conftest.$ac_objext >&5'
+      if { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        test -f conftest.$ac_objext && { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); };
+      then
+       # cc works too.
+       :
+      else
+       # cc exists but doesn't like -o.
+       eval ac_cv_prog_cc_${ac_cc}_c_o=no
+      fi
+    fi
+  fi
+else
+  eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f conftest*
+
+fi
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = yes"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+cat >>confdefs.h <<\_ACEOF
+#define NO_MINUS_C_MINUS_O 1
+_ACEOF
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+
 # 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:
@@ -4899,7 +5015,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 4902 "configure"' > conftest.$ac_ext
+  echo '#line 5018 "configure"' > conftest.$ac_ext
   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -6237,7 +6353,7 @@ fi
 
 
 # Provide some information about the compiler.
-echo "$as_me:6240:" \
+echo "$as_me:6356:" \
      "checking for Fortran 77 compiler version" >&5
 ac_compiler=`set X $ac_compile; echo $2`
 { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
@@ -7271,11 +7387,11 @@ else
    -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:7274: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:7390: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:7278: \$? = $ac_status" >&5
+   echo "$as_me:7394: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
@@ -7504,11 +7620,11 @@ else
    -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:7507: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:7623: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:7511: \$? = $ac_status" >&5
+   echo "$as_me:7627: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
@@ -7564,11 +7680,11 @@ else
    -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:7567: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:7683: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:7571: \$? = $ac_status" >&5
+   echo "$as_me:7687: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -8898,7 +9014,7 @@ linux*)
   libsuff=
   case "$host_cpu" in
   x86_64*|s390x*|powerpc64*)
-    echo '#line 8901 "configure"' > conftest.$ac_ext
+    echo '#line 9017 "configure"' > conftest.$ac_ext
     if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -9769,7 +9885,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 9772 "configure"
+#line 9888 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -9867,7 +9983,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 9870 "configure"
+#line 9986 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12046,11 +12162,11 @@ else
    -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:12049: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:12165: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:12053: \$? = $ac_status" >&5
+   echo "$as_me:12169: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
@@ -12106,11 +12222,11 @@ else
    -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:12109: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:12225: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:12113: \$? = $ac_status" >&5
+   echo "$as_me:12229: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -12617,7 +12733,7 @@ linux*)
   libsuff=
   case "$host_cpu" in
   x86_64*|s390x*|powerpc64*)
-    echo '#line 12620 "configure"' > conftest.$ac_ext
+    echo '#line 12736 "configure"' > conftest.$ac_ext
     if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -13488,7 +13604,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 13491 "configure"
+#line 13607 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -13586,7 +13702,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 13589 "configure"
+#line 13705 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -14413,11 +14529,11 @@ else
    -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14416: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:14532: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:14420: \$? = $ac_status" >&5
+   echo "$as_me:14536: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
@@ -14473,11 +14589,11 @@ else
    -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14476: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:14592: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:14480: \$? = $ac_status" >&5
+   echo "$as_me:14596: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -15787,7 +15903,7 @@ linux*)
   libsuff=
   case "$host_cpu" in
   x86_64*|s390x*|powerpc64*)
-    echo '#line 15790 "configure"' > conftest.$ac_ext
+    echo '#line 15906 "configure"' > conftest.$ac_ext
     if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -16528,11 +16644,11 @@ else
    -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:16531: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:16647: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:16535: \$? = $ac_status" >&5
+   echo "$as_me:16651: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
@@ -16761,11 +16877,11 @@ else
    -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:16764: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:16880: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:16768: \$? = $ac_status" >&5
+   echo "$as_me:16884: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
@@ -16821,11 +16937,11 @@ else
    -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:16824: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:16940: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:16828: \$? = $ac_status" >&5
+   echo "$as_me:16944: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -18155,7 +18271,7 @@ linux*)
   libsuff=
   case "$host_cpu" in
   x86_64*|s390x*|powerpc64*)
-    echo '#line 18158 "configure"' > conftest.$ac_ext
+    echo '#line 18274 "configure"' > conftest.$ac_ext
     if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -19026,7 +19142,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 19029 "configure"
+#line 19145 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -19124,7 +19240,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 19127 "configure"
+#line 19243 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -20150,20 +20266,56 @@ echo "${ECHO_T}no, using $LN_S" >&6
 fi
 
 
-# Check whether compiler supports pointers to undefined structures
-echo "$as_me:$LINENO: checking whether compiler supports pointers to undefined structures" >&5
-echo $ECHO_N "checking whether compiler supports pointers to undefined structures... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
+# When the prefix is /opt/libjpeg-turbo, we assume that an "official" binary is
+# being created, and thus we install things into specific locations.
+
+old_prefix=${prefix}
+if test "x$prefix" = "xNONE" -a "x$ac_default_prefix" != "x"; then
+  prefix=$ac_default_prefix
+fi
+DATADIR=`eval echo ${datadir}`
+DATADIR=`eval echo $DATADIR`
+if test "$DATADIR" = "/opt/libjpeg-turbo/share"; then
+  datadir='${prefix}'
+fi
+DATADIR=`eval echo ${datarootdir}`
+DATADIR=`eval echo $DATADIR`
+if test "$DATADIR" = "/opt/libjpeg-turbo/share"; then
+  datarootdir='${prefix}'
+fi
+
+old_exec_prefix=${exec_prefix}
+if test "x$exec_prefix" = "xNONE"; then
+  exec_prefix=${prefix}
+fi
+
+if test "x${libdir}" = 'x${exec_prefix}/lib' -o "x${libdir}" = 'x${prefix}/lib'; then
+  LIBDIR=`eval echo ${libdir}`
+  LIBDIR=`eval echo $LIBDIR`
+  if test "$LIBDIR" = "/opt/libjpeg-turbo/lib"; then
+    case $host_os in
+      darwin*)
+        ;;
+      *)
+        echo "$as_me:$LINENO: checking for long" >&5
+echo $ECHO_N "checking for long... $ECHO_C" >&6
+if test "${ac_cv_type_long+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
- typedef struct undefined_structure * undef_struct_ptr;
+$ac_includes_default
 int
 main ()
 {
-
+if ((long *) 0)
+  return 0;
+if (sizeof (long))
+  return 0;
   ;
   return 0;
 }
@@ -20190,37 +20342,31 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+  ac_cv_type_long=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define INCOMPLETE_TYPES_BROKEN 1
-_ACEOF
-
+ac_cv_type_long=no
 fi
 rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test "x${GCC}" = "xyes"; then
-  if test "x${SAVED_CFLAGS}" = "x"; then
-    CFLAGS=-O3
-  fi
-  if test "x${SAVED_CPPFLAGS}" = "x"; then
-    CPPFLAGS=-Wall
-  fi
 fi
+echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
+echo "${ECHO_T}$ac_cv_type_long" >&6
 
-echo "$as_me:$LINENO: checking whether __SUNPRO_C is declared" >&5
-echo $ECHO_N "checking whether __SUNPRO_C is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl___SUNPRO_C+set}" = set; then
+echo "$as_me:$LINENO: checking size of long" >&5
+echo $ECHO_N "checking size of long... $ECHO_C" >&6
+if test "${ac_cv_sizeof_long+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  if test "$ac_cv_type_long" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -20230,9 +20376,8 @@ $ac_includes_default
 int
 main ()
 {
-#ifndef __SUNPRO_C
-  char *p = (char *) __SUNPRO_C;
-#endif
+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)];
+test_array [0] = 0
 
   ;
   return 0;
@@ -20260,51 +20405,20 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  ac_cv_have_decl___SUNPRO_C=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl___SUNPRO_C=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl___SUNPRO_C" >&5
-echo "${ECHO_T}$ac_cv_have_decl___SUNPRO_C" >&6
-if test $ac_cv_have_decl___SUNPRO_C = yes; then
-  SUNCC="yes"
-else
-  SUNCC="no"
-fi
-
-if test "x${SUNCC}" = "xyes"; then
-  if test "x${SAVED_CFLAGS}" = "x"; then
-    CFLAGS=-xO5
-  fi
-fi
-
-# Checks for libraries.
-
-# Checks for header files.
-echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
+$ac_includes_default
 int
 main ()
 {
+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 0
 
   ;
   return 0;
@@ -20332,108 +20446,567 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  ac_cv_header_stdc=yes
+  ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-ac_cv_header_stdc=no
+ac_lo=`expr $ac_mid + 1`
+                   if test $ac_lo -le $ac_mid; then
+                     ac_lo= ac_hi=
+                     break
+                   fi
+                   ac_mid=`expr 2 '*' $ac_mid + 1`
 fi
 rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then
-  :
+  done
 else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then
-  :
-else
-  cat >conftest.$ac_ext <<_ACEOF
+cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <ctype.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-                  (('a' <= (c) && (c) <= 'i') \
-                    || ('j' <= (c) && (c) <= 'r') \
-                    || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+$ac_includes_default
 int
 main ()
 {
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-       || toupper (i) != TOUPPER (i))
-      exit(2);
-  exit (0);
+static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"
+                        || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"
+                        || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+                      if test $ac_mid -le $ac_hi; then
+                        ac_lo= ac_hi=
+                        break
+                      fi
+                      ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"
+                        || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_long=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (long)); }
+unsigned long ulongval () { return (long) (sizeof (long)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (long))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (long))))
+       exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (long))))
+       exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_long=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_long=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
+echo "${ECHO_T}$ac_cv_sizeof_long" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+        if test "${ac_cv_sizeof_long}" = "8"; then
+          libdir='${exec_prefix}/lib64'
+        elif test "${ac_cv_sizeof_long}" = "4"; then
+          libdir='${exec_prefix}/lib32'
+        fi
+        ;;
+    esac
+  fi
+fi
+exec_prefix=${old_exec_prefix}
+prefix=${old_prefix}
+
+# Check whether compiler supports pointers to undefined structures
+echo "$as_me:$LINENO: checking whether compiler supports pointers to undefined structures" >&5
+echo $ECHO_N "checking whether compiler supports pointers to undefined structures... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+ typedef struct undefined_structure * undef_struct_ptr;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"
+                        || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+cat >>confdefs.h <<\_ACEOF
+#define INCOMPLETE_TYPES_BROKEN 1
+_ACEOF
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test "x${GCC}" = "xyes"; then
+  if test "x${SAVED_CFLAGS}" = "x"; then
+    CFLAGS=-O3
+  fi
+  if test "x${SAVED_CPPFLAGS}" = "x"; then
+    CPPFLAGS=-Wall
+  fi
+fi
+
+echo "$as_me:$LINENO: checking whether __SUNPRO_C is declared" >&5
+echo $ECHO_N "checking whether __SUNPRO_C is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl___SUNPRO_C+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+#ifndef __SUNPRO_C
+  char *p = (char *) __SUNPRO_C;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"
+                        || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_have_decl___SUNPRO_C=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl___SUNPRO_C=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl___SUNPRO_C" >&5
+echo "${ECHO_T}$ac_cv_have_decl___SUNPRO_C" >&6
+if test $ac_cv_have_decl___SUNPRO_C = yes; then
+  SUNCC="yes"
+else
+  SUNCC="no"
+fi
+
+if test "x${SUNCC}" = "xyes"; then
+  if test "x${SAVED_CFLAGS}" = "x"; then
+    CFLAGS=-xO5
+  fi
+fi
+
+# Checks for libraries.
+
+# Checks for header files.
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"
+                        || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+                  (('a' <= (c) && (c) <= 'i') \
+                    || ('j' <= (c) && (c) <= 'r') \
+                    || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+       || toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 ac_cv_header_stdc=no
@@ -21202,25 +21775,25 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <stdio.h>
-        int is_shifting_signed (long arg) {
-        long res = arg >> 4;
-
-        if (res == -0x7F7E80CL)
-               return 1; /* right shift is signed */
-
-        /* see if unsigned-shift hack will fix it. */
-        /* we can't just test exact value since it depends on width of long... */
-        res |= (~0L) << (32-4);
-        if (res == -0x7F7E80CL)
-               return 0; /* right shift is unsigned */
-
-        printf("Right shift isn't acting as I expect it to.\n");
-        printf("I fear the JPEG software will not work at all.\n\n");
-        return 0; /* try it with unsigned anyway */
-        }
-        int main (void) {
-               exit(is_shifting_signed(-0x7F7E80B1L));
-        }
+   int is_shifting_signed (long arg) {
+     long res = arg >> 4;
+
+     if (res == -0x7F7E80CL)
+       return 1; /* right shift is signed */
+
+     /* see if unsigned-shift hack will fix it. */
+     /* we can't just test exact value since it depends on width of long... */
+     res |= (~0L) << (32-4);
+     if (res == -0x7F7E80CL)
+       return 0; /* right shift is unsigned */
+
+     printf("Right shift isn't acting as I expect it to.\n");
+     printf("I fear the JPEG software will not work at all.\n\n");
+     return 0; /* try it with unsigned anyway */
+   }
+   int main (void) {
+     exit(is_shifting_signed(-0x7F7E80B1L));
+   }
 _ACEOF
 rm -f conftest$ac_exeext
 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
@@ -21262,7 +21835,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 int possibly_duplicate_function () { return 0; }
-        int possibly_dupli_function () { return 1; }
+   int possibly_dupli_function () { return 1; }
 int
 main ()
 {
@@ -21437,15 +22010,15 @@ if test "${with_jpeg8+set}" = set; then
   withval="$with_jpeg8"
 
 fi;
-    if test "x${with_jpeg8}" = "xyes"; then
-        JPEG_LIB_VERSION=80
+  if test "x${with_jpeg8}" = "xyes"; then
+    JPEG_LIB_VERSION=80
+  else
+    if test "x${with_jpeg7}" = "xyes"; then
+      JPEG_LIB_VERSION=70
     else
-        if test "x${with_jpeg7}" = "xyes"; then
-            JPEG_LIB_VERSION=70
-        else
-            JPEG_LIB_VERSION=62
-        fi
+      JPEG_LIB_VERSION=62
     fi
+  fi
 fi
 JPEG_LIB_VERSION_DECIMAL=`expr $JPEG_LIB_VERSION / 10`.`expr $JPEG_LIB_VERSION % 10`
 
@@ -21457,24 +22030,60 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
-echo "$as_me:$LINENO: checking libjpeg shared library version" >&5
-echo $ECHO_N "checking libjpeg shared library version... $ECHO_C" >&6
 
 
 if test "x$SO_MAJOR_VERSION" = "x"; then
-    case "$JPEG_LIB_VERSION" in
-        62)  SO_MAJOR_VERSION=$JPEG_LIB_VERSION ;;
-        *)   SO_MAJOR_VERSION=`expr $JPEG_LIB_VERSION / 10` ;;
-    esac
+  case "$JPEG_LIB_VERSION" in
+    62)  SO_MAJOR_VERSION=$JPEG_LIB_VERSION ;;
+    *)   SO_MAJOR_VERSION=`expr $JPEG_LIB_VERSION / 10` ;;
+  esac
 fi
 if test "x$SO_MINOR_VERSION" = "x"; then
-    case "$JPEG_LIB_VERSION" in
-        80)  SO_MINOR_VERSION=2 ;;
-        *)   SO_MINOR_VERSION=0 ;;
-    esac
+  case "$JPEG_LIB_VERSION" in
+    80)  SO_MINOR_VERSION=2 ;;
+    *)   SO_MINOR_VERSION=0 ;;
+  esac
+fi
+
+RPM_CONFIG_ARGS=
+
+# Memory source/destination managers
+SO_AGE=0
+MEM_SRCDST_FUNCTIONS=
+if test "x${with_jpeg8}" != "xyes"; then
+  echo "$as_me:$LINENO: checking whether to include in-memory source/destination managers" >&5
+echo $ECHO_N "checking whether to include in-memory source/destination managers... $ECHO_C" >&6
+
+# Check whether --with-mem-srcdst or --without-mem-srcdst was given.
+if test "${with_mem_srcdst+set}" = set; then
+  withval="$with_mem_srcdst"
+
+fi;
+  if test "x$with_mem_srcdst" != "xno"; then
+    echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+cat >>confdefs.h <<\_ACEOF
+#define MEM_SRCDST_SUPPORTED 1
+_ACEOF
+
+    SO_AGE=1
+    MEM_SRCDST_FUNCTIONS="global:  jpeg_mem_dest;  jpeg_mem_src;";
+  else
+    echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-mem-srcdst"
+  fi
 fi
-echo "$as_me:$LINENO: result: $SO_MAJOR_VERSION:$SO_MINOR_VERSION" >&5
-echo "${ECHO_T}$SO_MAJOR_VERSION:$SO_MINOR_VERSION" >&6
+
+echo "$as_me:$LINENO: checking libjpeg shared library version" >&5
+echo $ECHO_N "checking libjpeg shared library version... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $SO_MAJOR_VERSION.$SO_AGE.$SO_MINOR_VERSION" >&5
+echo "${ECHO_T}$SO_MAJOR_VERSION.$SO_AGE.$SO_MINOR_VERSION" >&6
+LIBTOOL_CURRENT=`expr $SO_MAJOR_VERSION + $SO_AGE`
+
+
+
 
 
 
@@ -21537,7 +22146,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  VERSION_SCRIPT_FLAG=-Wl,--version-script,; echo "$as_me:$LINENO: result: yes (GNU style)" >&5
+  VERSION_SCRIPT_FLAG=-Wl,--version-script,;
+   echo "$as_me:$LINENO: result: yes (GNU style)" >&5
 echo "${ECHO_T}yes (GNU style)" >&6
 else
   echo "$as_me: failed program was:" >&5
@@ -21585,7 +22195,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  VERSION_SCRIPT_FLAG=-Wl,-M,; echo "$as_me:$LINENO: result: yes (Sun style)" >&5
+  VERSION_SCRIPT_FLAG=-Wl,-M,;
+     echo "$as_me:$LINENO: result: yes (Sun style)" >&5
 echo "${ECHO_T}yes (Sun style)" >&6
 else
   echo "$as_me: failed program was:" >&5
@@ -21661,7 +22272,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  ljt_cv_inline="__attribute__((always_inline))"
+  ljt_cv_inline="inline __attribute__((always_inline))"
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
@@ -21811,6 +22422,7 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
+# Arithmetic coding support
 echo "$as_me:$LINENO: checking whether to include arithmetic encoding support" >&5
 echo $ECHO_N "checking whether to include arithmetic encoding support... $ECHO_C" >&6
 
@@ -21820,15 +22432,16 @@ if test "${with_arith_enc+set}" = set; then
 
 fi;
 if test "x$with_arith_enc" = "xno"; then
-    echo "$as_me:$LINENO: result: no" >&5
+  echo "$as_me:$LINENO: result: no" >&5
 echo "${ECHO_T}no" >&6
+  RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-arith-enc"
 else
 
 cat >>confdefs.h <<\_ACEOF
 #define C_ARITH_CODING_SUPPORTED 1
 _ACEOF
 
-    echo "$as_me:$LINENO: result: yes" >&5
+  echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6
 fi
 
@@ -21851,15 +22464,16 @@ if test "${with_arith_dec+set}" = set; then
 
 fi;
 if test "x$with_arith_dec" = "xno"; then
-    echo "$as_me:$LINENO: result: no" >&5
+  echo "$as_me:$LINENO: result: no" >&5
 echo "${ECHO_T}no" >&6
+  RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-arith-dec"
 else
 
 cat >>confdefs.h <<\_ACEOF
 #define D_ARITH_CODING_SUPPORTED 1
 _ACEOF
 
-    echo "$as_me:$LINENO: result: yes" >&5
+  echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6
 fi
 
@@ -21884,6 +22498,25 @@ else
 fi
 
 
+# TurboJPEG support
+echo "$as_me:$LINENO: checking whether to build TurboJPEG C wrapper" >&5
+echo $ECHO_N "checking whether to build TurboJPEG C wrapper... $ECHO_C" >&6
+
+# Check whether --with-turbojpeg or --without-turbojpeg was given.
+if test "${with_turbojpeg+set}" = set; then
+  withval="$with_turbojpeg"
+
+fi;
+if test "x$with_turbojpeg" = "xno"; then
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+  RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-turbojpeg"
+else
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+fi
+
+# Java support
 
 if test "x$JAVAC" = "x"; then
   JAVAC=javac
 
 
 
-echo "$as_me:$LINENO: checking whether to build TurboJPEG/OSS Java wrapper" >&5
-echo $ECHO_N "checking whether to build TurboJPEG/OSS Java wrapper... $ECHO_C" >&6
+echo "$as_me:$LINENO: checking whether to build TurboJPEG Java wrapper" >&5
+echo $ECHO_N "checking whether to build TurboJPEG Java wrapper... $ECHO_C" >&6
 
 # Check whether --with-java or --without-java was given.
 if test "${with_java+set}" = set; then
   withval="$with_java"
 
 fi;
+if test "x$with_turbojpeg" = "xno"; then
+  with_java=no
+fi
 
-RPM_CONFIG_ARGS=
 WITH_JAVA=0
 if test "x$with_java" = "xyes"; then
-    echo "$as_me:$LINENO: result: yes" >&5
+  echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6
 
-    case $host_os in
-      darwin*)
-        DEFAULT_JNI_CFLAGS=-I/System/Library/Frameworks/JavaVM.framework/Headers
-        ;;
-      solaris*)
-        DEFAULT_JNI_CFLAGS='-I/usr/java/include -I/usr/java/include/solaris'
-        ;;
-      linux*)
-        DEFAULT_JNI_CFLAGS='-I/usr/java/default/include -I/usr/java/default/include/linux'
-        ;;
-    esac
-    if test "x$JNI_CFLAGS" = "x"; then
-        JNI_CFLAGS=$DEFAULT_JNI_CFLAGS
-    fi
+  case $host_os in
+    darwin*)
+      DEFAULT_JNI_CFLAGS=-I/System/Library/Frameworks/JavaVM.framework/Headers
+      ;;
+    solaris*)
+      DEFAULT_JNI_CFLAGS='-I/usr/java/include -I/usr/java/include/solaris'
+      ;;
+    linux*)
+      DEFAULT_JNI_CFLAGS='-I/usr/java/default/include -I/usr/java/default/include/linux'
+      ;;
+  esac
+  if test "x$JNI_CFLAGS" = "x"; then
+    JNI_CFLAGS=$DEFAULT_JNI_CFLAGS
+  fi
 
-    SAVE_CPPFLAGS=${CPPFLAGS}
-    CPPFLAGS="${CPPFLAGS} ${JNI_CFLAGS}"
+  SAVE_CPPFLAGS=${CPPFLAGS}
+  CPPFLAGS="${CPPFLAGS} ${JNI_CFLAGS}"
 
 for ac_header in jni.h
 do
 
 done
 
-    CPPFLAGS=${SAVE_CPPFLAGS}
+  CPPFLAGS=${SAVE_CPPFLAGS}
 
 
-    RPM_CONFIG_ARGS=--with-java
-    JAVA_RPM_CONTENTS_1='%dir /opt/%{name}/classes'
-    JAVA_RPM_CONTENTS_2=/opt/%{name}/classes/turbojpeg.jar
-    WITH_JAVA=1
+  RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --with-java"
+  JAVA_RPM_CONTENTS_1='%dir %{_datadir}/classes'
+  JAVA_RPM_CONTENTS_2=%{_datadir}/classes/turbojpeg.jar
+  WITH_JAVA=1
 else
-    echo "$as_me:$LINENO: result: no" >&5
+  echo "$as_me:$LINENO: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -22114,7 +22749,6 @@ fi
 
 
 
-
 # optionally force using gas-preprocessor.pl for compatibility testing
 
 # Check whether --with-gas-preprocessor or --without-gas-preprocessor was given.
@@ -22142,6 +22776,10 @@ if test "${with_simd+set}" = set; then
 
 fi;
 if test "x${with_simd}" != "xno"; then
+  require_simd=no
+  if test "x${with_simd}" = "xyes"; then
+    require_simd=yes
+  fi
   # Check if we're on a supported CPU
   echo "$as_me:$LINENO: checking if we have SIMD optimisations for cpu type" >&5
 echo $ECHO_N "checking if we have SIMD optimisations for cpu type... $ECHO_C" >&6
@@ -22230,7 +22868,7 @@ case "$host_os" in
         ;;
     esac
   ;;
-  freebsd* | netbsd* | openbsd*)
+  kfreebsd* | freebsd* | netbsd* | openbsd*)
     if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
       objfmt='BSD-a.out'
     else
@@ -22299,7 +22937,7 @@ echo "${ECHO_T}$NAFLAGS" >&6
 echo "$as_me:$LINENO: checking whether the assembler ($NASM $NAFLAGS) works" >&5
 echo $ECHO_N "checking whether the assembler ($NASM $NAFLAGS) works... $ECHO_C" >&6
 cat > conftest.asm <<EOF
-%line 22302 "configure"
+%line 22940 "configure"
         section .text
         global  _main,main
 _main:
@@ -22347,7 +22985,7 @@ fi
 
 
       simd_arch=x86_64
-    ;;
+      ;;
     i*86 | x86 | ia32)
       echo "$as_me:$LINENO: result: yes (i386)" >&5
 echo "${ECHO_T}yes (i386)" >&6
@@ -22432,7 +23070,7 @@ case "$host_os" in
         ;;
     esac
   ;;
-  freebsd* | netbsd* | openbsd*)
+  kfreebsd* | freebsd* | netbsd* | openbsd*)
     if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
       objfmt='BSD-a.out'
     else
@@ -22501,7 +23139,7 @@ echo "${ECHO_T}$NAFLAGS" >&6
 echo "$as_me:$LINENO: checking whether the assembler ($NASM $NAFLAGS) works" >&5
 echo $ECHO_N "checking whether the assembler ($NASM $NAFLAGS) works... $ECHO_C" >&6
 cat > conftest.asm <<EOF
-%line 22504 "configure"
+%line 23142 "configure"
         section .text
         global  _main,main
 _main:
@@ -22549,7 +23187,7 @@ fi
 
 
       simd_arch=i386
-    ;;
+      ;;
     arm*)
       echo "$as_me:$LINENO: result: yes (arm)" >&5
 echo "${ECHO_T}yes (arm)" >&6
@@ -22562,6 +23200,11 @@ echo $ECHO_N "checking if the assembler is GNU-compatible and can be used... $EC
   CFLAGS="$CCASFLAGS -x assembler-with-cpp"
   CC="$CCAS"
   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
 
     .text
     .fpu neon
@@ -22605,6 +23248,11 @@ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
   if test "x$ac_good_gnu_arm_assembler" = "xno" ; then
     CC="gas-preprocessor.pl $CCAS"
     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
 
       .text
       .fpu neon
@@ -22661,18 +23309,32 @@ echo "${ECHO_T}yes" >&6
     echo "$as_me:$LINENO: result: no" >&5
 echo "${ECHO_T}no" >&6
          with_simd=no
-         { echo "$as_me:$LINENO: WARNING: SIMD support can't be enabled.  Performance will suffer." >&5
-echo "$as_me: WARNING: SIMD support can't be enabled.  Performance will suffer." >&2;}
   fi
 
-    ;;
+      if test "x${with_simd}" = "xno"; then
+        if test "x${require_simd}" = "xyes"; then
+          { { echo "$as_me:$LINENO: error: SIMD support can't be enabled." >&5
+echo "$as_me: error: SIMD support can't be enabled." >&2;}
+   { (exit 1); exit 1; }; }
+        else
+          { echo "$as_me:$LINENO: WARNING: SIMD support can't be enabled.  Performance will suffer." >&5
+echo "$as_me: WARNING: SIMD support can't be enabled.  Performance will suffer." >&2;}
+        fi
+      fi
+      ;;
     *)
       echo "$as_me:$LINENO: result: no (\"$host_cpu\")" >&5
 echo "${ECHO_T}no (\"$host_cpu\")" >&6
-      { echo "$as_me:$LINENO: WARNING: SIMD support not available for this CPU.  Performance will suffer." >&5
-echo "$as_me: WARNING: SIMD support not available for this CPU.  Performance will suffer." >&2;}
       with_simd=no;
-    ;;
+      if test "x${require_simd}" = "xyes"; then
+        { { echo "$as_me:$LINENO: error: SIMD support not available for this CPU." >&5
+echo "$as_me: error: SIMD support not available for this CPU." >&2;}
+   { (exit 1); exit 1; }; }
+      else
+        { echo "$as_me:$LINENO: WARNING: SIMD support not available for this CPU.  Performance will suffer." >&5
+echo "$as_me: WARNING: SIMD support not available for this CPU.  Performance will suffer." >&2;}
+      fi
+      ;;
   esac
 
   if test "x${with_simd}" != "xno"; then
@@ -22682,6 +23344,8 @@ cat >>confdefs.h <<\_ACEOF
 _ACEOF
 
   fi
+else
+  RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-simd"
 fi
 
 
@@ -22745,6 +23409,22 @@ else
 fi
 
 
+
+if test "x$with_turbojpeg" != "xno"; then
+  WITH_TURBOJPEG_TRUE=
+  WITH_TURBOJPEG_FALSE='#'
+else
+  WITH_TURBOJPEG_TRUE='#'
+  WITH_TURBOJPEG_FALSE=
+fi
+
+
+
+if test "x$PKGNAME" = "x"; then
+  PKGNAME=$PACKAGE_NAME
+fi
+
+
 case "$host_cpu" in
   x86_64)
     RPMARCH=x86_64
@@ -22760,6 +23440,7 @@ esac
 
 
 
+
 cat >>confdefs.h <<_ACEOF
 #define BUILD "$BUILD"
 _ACEOF
@@ -22773,34 +23454,38 @@ _ACEOF
 
           ac_config_headers="$ac_config_headers jconfig.h"
 
-          ac_config_files="$ac_config_files pkgscripts/libjpeg-turbo.spec:release/libjpeg-turbo.spec.in"
+          ac_config_files="$ac_config_files pkgscripts/libjpeg-turbo.spec.tmpl:release/libjpeg-turbo.spec.in"
 
-          ac_config_files="$ac_config_files pkgscripts/makecygwinpkg:release/makecygwinpkg.in"
+          ac_config_files="$ac_config_files pkgscripts/makecygwinpkg.tmpl:release/makecygwinpkg.in"
 
-          ac_config_files="$ac_config_files pkgscripts/makedpkg:release/makedpkg.in"
+          ac_config_files="$ac_config_files pkgscripts/makedpkg.tmpl:release/makedpkg.in"
 
-          ac_config_files="$ac_config_files pkgscripts/makemacpkg:release/makemacpkg.in"
+          ac_config_files="$ac_config_files pkgscripts/makemacpkg.tmpl:release/makemacpkg.in"
 
           ac_config_files="$ac_config_files pkgscripts/Description.plist:release/Description.plist.in"
 
           ac_config_files="$ac_config_files pkgscripts/Info.plist:release/Info.plist.in"
 
-          ac_config_files="$ac_config_files pkgscripts/uninstall:release/uninstall.in"
-
-          ac_config_files="$ac_config_files pkgscripts/makesunpkg:release/makesunpkg.in"
+          ac_config_files="$ac_config_files pkgscripts/uninstall.tmpl:release/uninstall.in"
 
-          ac_config_files="$ac_config_files pkgscripts/pkginfo:release/pkginfo.in"
+if test "x$with_turbojpeg" != "xno"; then
+            ac_config_files="$ac_config_files tjbenchtest"
 
-          ac_config_files="$ac_config_files tjbenchtest"
+fi
+if test "x$with_java" = "xyes"; then
+            ac_config_files="$ac_config_files tjbenchtest.java"
 
-          ac_config_files="$ac_config_files tjexampletest"
+            ac_config_files="$ac_config_files tjexampletest"
 
+fi
           ac_config_files="$ac_config_files libjpeg.map"
 
                     ac_config_files="$ac_config_files Makefile simd/Makefile"
 
           ac_config_files="$ac_config_files java/Makefile"
 
+          ac_config_files="$ac_config_files md5/Makefile"
+
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
 # tests run on this system so they can be shared between configure
@@ -22997,6 +23682,13 @@ echo "$as_me: error: conditional \"X86_64\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
+if test -z "${WITH_TURBOJPEG_TRUE}" && test -z "${WITH_TURBOJPEG_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"WITH_TURBOJPEG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"WITH_TURBOJPEG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
 
 : ${CONFIG_STATUS=./config.status}
 ac_clean_files_save=$ac_clean_files
@@ -23268,7 +23960,7 @@ _ASBOX
 } >&5
 cat >&5 <<_CSEOF
 
-This file was extended by libjpeg-turbo $as_me 1.2.1, which was
+This file was extended by libjpeg-turbo $as_me 1.3.1, which was
 generated by GNU Autoconf 2.59.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -23331,7 +24023,7 @@ _ACEOF
 
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-libjpeg-turbo config.status 1.2.1
+libjpeg-turbo config.status 1.3.1
 configured by $0, generated by GNU Autoconf 2.59,
   with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
 
@@ -23441,21 +24133,21 @@ for ac_config_target in $ac_config_targets
 do
   case "$ac_config_target" in
   # Handling of arguments.
-  "pkgscripts/libjpeg-turbo.spec" ) CONFIG_FILES="$CONFIG_FILES pkgscripts/libjpeg-turbo.spec:release/libjpeg-turbo.spec.in" ;;
-  "pkgscripts/makecygwinpkg" ) CONFIG_FILES="$CONFIG_FILES pkgscripts/makecygwinpkg:release/makecygwinpkg.in" ;;
-  "pkgscripts/makedpkg" ) CONFIG_FILES="$CONFIG_FILES pkgscripts/makedpkg:release/makedpkg.in" ;;
-  "pkgscripts/makemacpkg" ) CONFIG_FILES="$CONFIG_FILES pkgscripts/makemacpkg:release/makemacpkg.in" ;;
+  "pkgscripts/libjpeg-turbo.spec.tmpl" ) CONFIG_FILES="$CONFIG_FILES pkgscripts/libjpeg-turbo.spec.tmpl:release/libjpeg-turbo.spec.in" ;;
+  "pkgscripts/makecygwinpkg.tmpl" ) CONFIG_FILES="$CONFIG_FILES pkgscripts/makecygwinpkg.tmpl:release/makecygwinpkg.in" ;;
+  "pkgscripts/makedpkg.tmpl" ) CONFIG_FILES="$CONFIG_FILES pkgscripts/makedpkg.tmpl:release/makedpkg.in" ;;
+  "pkgscripts/makemacpkg.tmpl" ) CONFIG_FILES="$CONFIG_FILES pkgscripts/makemacpkg.tmpl:release/makemacpkg.in" ;;
   "pkgscripts/Description.plist" ) CONFIG_FILES="$CONFIG_FILES pkgscripts/Description.plist:release/Description.plist.in" ;;
   "pkgscripts/Info.plist" ) CONFIG_FILES="$CONFIG_FILES pkgscripts/Info.plist:release/Info.plist.in" ;;
-  "pkgscripts/uninstall" ) CONFIG_FILES="$CONFIG_FILES pkgscripts/uninstall:release/uninstall.in" ;;
-  "pkgscripts/makesunpkg" ) CONFIG_FILES="$CONFIG_FILES pkgscripts/makesunpkg:release/makesunpkg.in" ;;
-  "pkgscripts/pkginfo" ) CONFIG_FILES="$CONFIG_FILES pkgscripts/pkginfo:release/pkginfo.in" ;;
+  "pkgscripts/uninstall.tmpl" ) CONFIG_FILES="$CONFIG_FILES pkgscripts/uninstall.tmpl:release/uninstall.in" ;;
   "tjbenchtest" ) CONFIG_FILES="$CONFIG_FILES tjbenchtest" ;;
+  "tjbenchtest.java" ) CONFIG_FILES="$CONFIG_FILES tjbenchtest.java" ;;
   "tjexampletest" ) CONFIG_FILES="$CONFIG_FILES tjexampletest" ;;
   "libjpeg.map" ) CONFIG_FILES="$CONFIG_FILES libjpeg.map" ;;
   "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
   "simd/Makefile" ) CONFIG_FILES="$CONFIG_FILES simd/Makefile" ;;
   "java/Makefile" ) CONFIG_FILES="$CONFIG_FILES java/Makefile" ;;
+  "md5/Makefile" ) CONFIG_FILES="$CONFIG_FILES md5/Makefile" ;;
   "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
   "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
   "jconfig.h" ) CONFIG_HEADERS="$CONFIG_HEADERS jconfig.h" ;;
@@ -23615,6 +24307,9 @@ s,@JPEG_LIB_VERSION@,$JPEG_LIB_VERSION,;t t
 s,@JPEG_LIB_VERSION_DECIMAL@,$JPEG_LIB_VERSION_DECIMAL,;t t
 s,@SO_MAJOR_VERSION@,$SO_MAJOR_VERSION,;t t
 s,@SO_MINOR_VERSION@,$SO_MINOR_VERSION,;t t
+s,@LIBTOOL_CURRENT@,$LIBTOOL_CURRENT,;t t
+s,@SO_AGE@,$SO_AGE,;t t
+s,@MEM_SRCDST_FUNCTIONS@,$MEM_SRCDST_FUNCTIONS,;t t
 s,@VERSION_SCRIPT_TRUE@,$VERSION_SCRIPT_TRUE,;t t
 s,@VERSION_SCRIPT_FALSE@,$VERSION_SCRIPT_FALSE,;t t
 s,@VERSION_SCRIPT_FLAG@,$VERSION_SCRIPT_FLAG,;t t
@@ -23634,7 +24329,6 @@ s,@WITH_JAVA_FALSE@,$WITH_JAVA_FALSE,;t t
 s,@WITH_JAVA@,$WITH_JAVA,;t t
 s,@JAVA_RPM_CONTENTS_1@,$JAVA_RPM_CONTENTS_1,;t t
 s,@JAVA_RPM_CONTENTS_2@,$JAVA_RPM_CONTENTS_2,;t t
-s,@RPM_CONFIG_ARGS@,$RPM_CONFIG_ARGS,;t t
 s,@NASM@,$NASM,;t t
 s,@NAFLAGS@,$NAFLAGS,;t t
 s,@WITH_SIMD_TRUE@,$WITH_SIMD_TRUE,;t t
@@ -23649,7 +24343,11 @@ s,@SIMD_ARM_TRUE@,$SIMD_ARM_TRUE,;t t
 s,@SIMD_ARM_FALSE@,$SIMD_ARM_FALSE,;t t
 s,@X86_64_TRUE@,$X86_64_TRUE,;t t
 s,@X86_64_FALSE@,$X86_64_FALSE,;t t
+s,@WITH_TURBOJPEG_TRUE@,$WITH_TURBOJPEG_TRUE,;t t
+s,@WITH_TURBOJPEG_FALSE@,$WITH_TURBOJPEG_FALSE,;t t
+s,@PKGNAME@,$PKGNAME,;t t
 s,@RPMARCH@,$RPMARCH,;t t
+s,@RPM_CONFIG_ARGS@,$RPM_CONFIG_ARGS,;t t
 s,@DEBARCH@,$DEBARCH,;t t
 s,@BUILD@,$BUILD,;t t
 s,@LIBOBJS@,$LIBOBJS,;t t
index 59f50ff..f90a75a 100644 (file)
@@ -2,7 +2,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ([2.56])
-AC_INIT([libjpeg-turbo], [1.2.1])
+AC_INIT([libjpeg-turbo], [1.3.1])
 BUILD=`date +%Y%m%d`
 
 AM_INIT_AUTOMAKE([-Wall foreign dist-bzip2])
@@ -11,22 +11,71 @@ AC_PREFIX_DEFAULT(/opt/libjpeg-turbo)
 # Always build with prototypes
 AC_DEFINE([HAVE_PROTOTYPES], 1, [Define if your compiler supports prototypes])
 
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
 # Checks for programs.
 SAVED_CFLAGS=${CFLAGS}
 SAVED_CPPFLAGS=${CPPFLAGS}
 AC_PROG_CPP
 AC_PROG_CC
+m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
 AM_PROG_AS
+AM_PROG_CC_C_O
 AC_PROG_INSTALL
 AC_PROG_LIBTOOL
 AC_PROG_LN_S
 
+# When the prefix is /opt/libjpeg-turbo, we assume that an "official" binary is
+# being created, and thus we install things into specific locations.
+
+old_prefix=${prefix}
+if test "x$prefix" = "xNONE" -a "x$ac_default_prefix" != "x"; then
+  prefix=$ac_default_prefix
+fi
+DATADIR=`eval echo ${datadir}`
+DATADIR=`eval echo $DATADIR`
+if test "$DATADIR" = "/opt/libjpeg-turbo/share"; then
+  datadir='${prefix}'
+fi
+DATADIR=`eval echo ${datarootdir}`
+DATADIR=`eval echo $DATADIR`
+if test "$DATADIR" = "/opt/libjpeg-turbo/share"; then
+  datarootdir='${prefix}'
+fi
+
+old_exec_prefix=${exec_prefix}
+if test "x$exec_prefix" = "xNONE"; then
+  exec_prefix=${prefix}
+fi
+
+if test "x${libdir}" = 'x${exec_prefix}/lib' -o "x${libdir}" = 'x${prefix}/lib'; then
+  LIBDIR=`eval echo ${libdir}`
+  LIBDIR=`eval echo $LIBDIR`
+  if test "$LIBDIR" = "/opt/libjpeg-turbo/lib"; then
+    case $host_os in
+      darwin*)
+        ;;
+      *)
+        AC_CHECK_SIZEOF(long)
+        if test "${ac_cv_sizeof_long}" = "8"; then
+          libdir='${exec_prefix}/lib64'
+        elif test "${ac_cv_sizeof_long}" = "4"; then
+          libdir='${exec_prefix}/lib32'
+        fi
+        ;;
+    esac
+  fi
+fi
+exec_prefix=${old_exec_prefix}
+prefix=${old_prefix}
+
 # Check whether compiler supports pointers to undefined structures
 AC_MSG_CHECKING(whether compiler supports pointers to undefined structures)
 AC_TRY_COMPILE([ typedef struct undefined_structure * undef_struct_ptr; ], ,
-AC_MSG_RESULT(yes),
-[AC_MSG_RESULT(no)
-AC_DEFINE([INCOMPLETE_TYPES_BROKEN],[1],[Compiler does not support pointers to undefined structures.])])
+  AC_MSG_RESULT(yes),
+  [AC_MSG_RESULT(no)
+   AC_DEFINE([INCOMPLETE_TYPES_BROKEN], [1],
+     [Compiler does not support pointers to undefined structures.])])
 
 if test "x${GCC}" = "xyes"; then
   if test "x${SAVED_CFLAGS}" = "x"; then
@@ -49,7 +98,8 @@ fi
 # Checks for header files.
 AC_HEADER_STDC
 AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
-AC_CHECK_HEADER([sys/types.h], AC_DEFINE([NEED_SYS_TYPES_H], 1, [Define if you have sys/types.h]))
+AC_CHECK_HEADER([sys/types.h],
+  AC_DEFINE([NEED_SYS_TYPES_H], 1, [Define if you have sys/types.h]))
 
 # Checks for typedefs, structures, and compiler characteristics.
 AC_C_CONST
@@ -60,85 +110,118 @@ AC_CHECK_TYPES([unsigned char, unsigned short])
 
 AC_MSG_CHECKING([if right shift is signed])
 AC_TRY_RUN(
-       [#include <stdio.h>
-        int is_shifting_signed (long arg) {
-        long res = arg >> 4;
-
-        if (res == -0x7F7E80CL)
-               return 1; /* right shift is signed */
-
-        /* see if unsigned-shift hack will fix it. */
-        /* we can't just test exact value since it depends on width of long... */
-        res |= (~0L) << (32-4);
-        if (res == -0x7F7E80CL)
-               return 0; /* right shift is unsigned */
-
-        printf("Right shift isn't acting as I expect it to.\n");
-        printf("I fear the JPEG software will not work at all.\n\n");
-        return 0; /* try it with unsigned anyway */
-        }
-        int main (void) {
-               exit(is_shifting_signed(-0x7F7E80B1L));
-        }],
-       [AC_MSG_RESULT(no)
-        AC_DEFINE([RIGHT_SHIFT_IS_UNSIGNED], 1, [Define if shift is unsigned])],
-       [AC_MSG_RESULT(yes)],
-       [AC_MSG_RESULT(Assuming that right shift is signed on target machine.)])
+  [#include <stdio.h>
+   int is_shifting_signed (long arg) {
+     long res = arg >> 4;
+
+     if (res == -0x7F7E80CL)
+       return 1; /* right shift is signed */
+
+     /* see if unsigned-shift hack will fix it. */
+     /* we can't just test exact value since it depends on width of long... */
+     res |= (~0L) << (32-4);
+     if (res == -0x7F7E80CL)
+       return 0; /* right shift is unsigned */
+
+     printf("Right shift isn't acting as I expect it to.\n");
+     printf("I fear the JPEG software will not work at all.\n\n");
+     return 0; /* try it with unsigned anyway */
+   }
+   int main (void) {
+     exit(is_shifting_signed(-0x7F7E80B1L));
+   }],
+  [AC_MSG_RESULT(no)
+   AC_DEFINE([RIGHT_SHIFT_IS_UNSIGNED], 1, [Define if shift is unsigned])],
+  [AC_MSG_RESULT(yes)],
+  [AC_MSG_RESULT(Assuming that right shift is signed on target machine.)])
 
 # test whether global names are unique to at least 15 chars
 AC_MSG_CHECKING([for short external names])
 AC_TRY_LINK(
-       [int possibly_duplicate_function () { return 0; }
-        int possibly_dupli_function () { return 1; }], [ ],
-       [AC_MSG_RESULT(ok)],
-       [AC_MSG_RESULT(short)
-        AC_DEFINE([NEED_SHORT_EXTERNAL_NAMES], 1, [Define if you need short function names])])
+  [int possibly_duplicate_function () { return 0; }
+   int possibly_dupli_function () { return 1; }], [ ],
+  [AC_MSG_RESULT(ok)],
+  [AC_MSG_RESULT(short)
+   AC_DEFINE([NEED_SHORT_EXTERNAL_NAMES], 1,
+     [Define if you need short function names])])
 
 # Checks for library functions.
 AC_CHECK_FUNCS([memset memcpy], [],
-       [AC_DEFINE([NEED_BSD_STRINGS], 1,
-                  [Define if you have BSD-like bzero and bcopy])])
+  [AC_DEFINE([NEED_BSD_STRINGS], 1,
+     [Define if you have BSD-like bzero and bcopy])])
 
 AC_MSG_CHECKING([libjpeg API version])
 AC_ARG_VAR(JPEG_LIB_VERSION, [libjpeg API version (62, 70, or 80)])
 if test "x$JPEG_LIB_VERSION" = "x"; then
-    AC_ARG_WITH([jpeg7],
-        AC_HELP_STRING([--with-jpeg7], [Emulate libjpeg v7 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b.)]))
-    AC_ARG_WITH([jpeg8],
-        AC_HELP_STRING([--with-jpeg8], [Emulate libjpeg v8 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b.)]))
-    if test "x${with_jpeg8}" = "xyes"; then
-        JPEG_LIB_VERSION=80
+  AC_ARG_WITH([jpeg7],
+    AC_HELP_STRING([--with-jpeg7],
+      [Emulate libjpeg v7 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b.)]))
+  AC_ARG_WITH([jpeg8],
+    AC_HELP_STRING([--with-jpeg8],
+      [Emulate libjpeg v8 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b.)]))
+  if test "x${with_jpeg8}" = "xyes"; then
+    JPEG_LIB_VERSION=80
+  else
+    if test "x${with_jpeg7}" = "xyes"; then
+      JPEG_LIB_VERSION=70
     else
-        if test "x${with_jpeg7}" = "xyes"; then
-            JPEG_LIB_VERSION=70
-        else
-            JPEG_LIB_VERSION=62
-        fi
+      JPEG_LIB_VERSION=62
     fi
+  fi
 fi
 JPEG_LIB_VERSION_DECIMAL=`expr $JPEG_LIB_VERSION / 10`.`expr $JPEG_LIB_VERSION % 10`
 AC_SUBST(JPEG_LIB_VERSION_DECIMAL)
 AC_MSG_RESULT([$JPEG_LIB_VERSION_DECIMAL])
-AC_DEFINE_UNQUOTED(JPEG_LIB_VERSION, [$JPEG_LIB_VERSION], [libjpeg API version])
+AC_DEFINE_UNQUOTED(JPEG_LIB_VERSION, [$JPEG_LIB_VERSION],
+  [libjpeg API version])
 
-AC_MSG_CHECKING([libjpeg shared library version])
-AC_ARG_VAR(SO_MAJOR_VERSION, [Major version of the libjpeg-turbo shared library (default is determined by the API version)])
-AC_ARG_VAR(SO_MINOR_VERSION, [Minor version of the libjpeg-turbo shared library (default is determined by the API version)])
+AC_ARG_VAR(SO_MAJOR_VERSION,
+  [Major version of the libjpeg-turbo shared library (default is determined by the API version)])
+AC_ARG_VAR(SO_MINOR_VERSION,
+  [Minor version of the libjpeg-turbo shared library (default is determined by the API version)])
 if test "x$SO_MAJOR_VERSION" = "x"; then
-    case "$JPEG_LIB_VERSION" in
-        62)  SO_MAJOR_VERSION=$JPEG_LIB_VERSION ;;
-        *)   SO_MAJOR_VERSION=`expr $JPEG_LIB_VERSION / 10` ;;
-    esac
+  case "$JPEG_LIB_VERSION" in
+    62)  SO_MAJOR_VERSION=$JPEG_LIB_VERSION ;;
+    *)   SO_MAJOR_VERSION=`expr $JPEG_LIB_VERSION / 10` ;;
+  esac
 fi
 if test "x$SO_MINOR_VERSION" = "x"; then
-    case "$JPEG_LIB_VERSION" in
-        80)  SO_MINOR_VERSION=2 ;;
-        *)   SO_MINOR_VERSION=0 ;;
-    esac
+  case "$JPEG_LIB_VERSION" in
+    80)  SO_MINOR_VERSION=2 ;;
+    *)   SO_MINOR_VERSION=0 ;;
+  esac
+fi
+
+RPM_CONFIG_ARGS=
+
+# Memory source/destination managers
+SO_AGE=0
+MEM_SRCDST_FUNCTIONS=
+if test "x${with_jpeg8}" != "xyes"; then
+  AC_MSG_CHECKING([whether to include in-memory source/destination managers])
+  AC_ARG_WITH([mem-srcdst],
+    AC_HELP_STRING([--without-mem-srcdst],
+      [Do not include in-memory source/destination manager functions when emulating the libjpeg v6b or v7 API/ABI]))
+  if test "x$with_mem_srcdst" != "xno"; then
+    AC_MSG_RESULT(yes)
+    AC_DEFINE([MEM_SRCDST_SUPPORTED], [1],
+      [Support in-memory source/destination managers])
+    SO_AGE=1
+    MEM_SRCDST_FUNCTIONS="global:  jpeg_mem_dest;  jpeg_mem_src;";
+  else
+    AC_MSG_RESULT(no)
+    RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-mem-srcdst"
+  fi
 fi
-AC_MSG_RESULT([$SO_MAJOR_VERSION:$SO_MINOR_VERSION])
+
+AC_MSG_CHECKING([libjpeg shared library version])
+AC_MSG_RESULT([$SO_MAJOR_VERSION.$SO_AGE.$SO_MINOR_VERSION])
+LIBTOOL_CURRENT=`expr $SO_MAJOR_VERSION + $SO_AGE`
+AC_SUBST(LIBTOOL_CURRENT)
 AC_SUBST(SO_MAJOR_VERSION)
 AC_SUBST(SO_MINOR_VERSION)
+AC_SUBST(SO_AGE)
+AC_SUBST(MEM_SRCDST_FUNCTIONS)
 
 AC_DEFINE_UNQUOTED(LIBJPEG_TURBO_VERSION, [$VERSION], [libjpeg-turbo version])
 
@@ -146,7 +229,7 @@ VERSION_SCRIPT=yes
 AC_ARG_ENABLE([ld-version-script],
   AS_HELP_STRING([--disable-ld-version-script],
     [Disable linker version script for libjpeg-turbo (default is to use linker version script if the linker supports it)]),
-    [VERSION_SCRIPT=$enableval], [])
+  [VERSION_SCRIPT=$enableval], [])
 
 AC_MSG_CHECKING([whether the linker supports version scripts])
 SAVED_LDFLAGS="$LDFLAGS"
@@ -156,12 +239,16 @@ VERS_1 {
   global: *;
 };
 EOF
-AC_LINK_IFELSE(AC_LANG_PROGRAM([], []),
-  [VERSION_SCRIPT_FLAG=-Wl,--version-script,; AC_MSG_RESULT([yes (GNU style)])], [])
+AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+  [VERSION_SCRIPT_FLAG=-Wl,--version-script,;
+   AC_MSG_RESULT([yes (GNU style)])],
+  [])
 if test "x$VERSION_SCRIPT_FLAG" = "x"; then
   LDFLAGS="$SAVED_LDFLAGS -Wl,-M,conftest.map"
-  AC_LINK_IFELSE(AC_LANG_PROGRAM([], []),
-    [VERSION_SCRIPT_FLAG=-Wl,-M,; AC_MSG_RESULT([yes (Sun style)])], [])
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+    [VERSION_SCRIPT_FLAG=-Wl,-M,;
+     AC_MSG_RESULT([yes (Sun style)])],
+    [])
 fi
 if test "x$VERSION_SCRIPT_FLAG" = "x"; then
   VERSION_SCRIPT=no
@@ -179,7 +266,7 @@ AC_SUBST(VERSION_SCRIPT_FLAG)
 AC_MSG_CHECKING(for inline)
 ljt_cv_inline=""
 AC_TRY_COMPILE(, [} __attribute__((always_inline)) int foo() { return 0; }
-int bar() { return foo();], ljt_cv_inline="__attribute__((always_inline))",
+int bar() { return foo();], ljt_cv_inline="inline __attribute__((always_inline))",
 AC_TRY_COMPILE(, [} __inline__ int foo() { return 0; }
 int bar() { return foo();], ljt_cv_inline="__inline__",
 AC_TRY_COMPILE(, [} __inline int foo() { return 0; }
@@ -189,30 +276,49 @@ int bar() { return foo();], ljt_cv_inline="inline"))))
 AC_MSG_RESULT($ljt_cv_inline)
 AC_DEFINE_UNQUOTED([INLINE],[$ljt_cv_inline],[How to obtain function inlining.])
 
+# Arithmetic coding support
 AC_MSG_CHECKING([whether to include arithmetic encoding support])
 AC_ARG_WITH([arith-enc],
-    AC_HELP_STRING([--without-arith-enc], [Omit arithmetic encoding support]))
+  AC_HELP_STRING([--without-arith-enc],
+    [Do not include arithmetic encoding support]))
 if test "x$with_arith_enc" = "xno"; then
-    AC_MSG_RESULT(no)
+  AC_MSG_RESULT(no)
+  RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-arith-enc"
 else
-    AC_DEFINE([C_ARITH_CODING_SUPPORTED], [1], [Support arithmetic encoding])
-    AC_MSG_RESULT(yes)
+  AC_DEFINE([C_ARITH_CODING_SUPPORTED], [1], [Support arithmetic encoding])
+  AC_MSG_RESULT(yes)
 fi
 AM_CONDITIONAL([WITH_ARITH_ENC], [test "x$with_arith_enc" != "xno"])
 
 AC_MSG_CHECKING([whether to include arithmetic decoding support])
 AC_ARG_WITH([arith-dec],
-    AC_HELP_STRING([--without-arith-dec], [Omit arithmetic decoding support]))
+  AC_HELP_STRING([--without-arith-dec],
+    [Do not include arithmetic decoding support]))
 if test "x$with_arith_dec" = "xno"; then
-    AC_MSG_RESULT(no)
+  AC_MSG_RESULT(no)
+  RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-arith-dec"
 else
-    AC_DEFINE([D_ARITH_CODING_SUPPORTED], [1], [Support arithmetic decoding])
-    AC_MSG_RESULT(yes)
+  AC_DEFINE([D_ARITH_CODING_SUPPORTED], [1], [Support arithmetic decoding])
+  AC_MSG_RESULT(yes)
 fi
 AM_CONDITIONAL([WITH_ARITH_DEC], [test "x$with_arith_dec" != "xno"])
 
-AM_CONDITIONAL([WITH_ARITH], [test "x$with_arith_dec" != "xno" -o "x$with_arith_enc" != "xno"])
+AM_CONDITIONAL([WITH_ARITH],
+  [test "x$with_arith_dec" != "xno" -o "x$with_arith_enc" != "xno"])
+
+# TurboJPEG support
+AC_MSG_CHECKING([whether to build TurboJPEG C wrapper])
+AC_ARG_WITH([turbojpeg],
+  AC_HELP_STRING([--without-turbojpeg],
+    [Do not include the TurboJPEG wrapper library and associated test programs]))
+if test "x$with_turbojpeg" = "xno"; then
+  AC_MSG_RESULT(no)
+  RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-turbojpeg"
+else
+  AC_MSG_RESULT(yes)
+fi
 
+# Java support
 AC_ARG_VAR(JAVAC, [Java compiler command (default: javac)])
 if test "x$JAVAC" = "x"; then
   JAVAC=javac
@@ -230,55 +336,58 @@ if test "x$JAVA" = "x"; then
   JAVA=java
 fi
 AC_SUBST(JAVA)
-AC_ARG_VAR(JNI_CFLAGS, [C compiler flags needed to include jni.h (default: -I/System/Library/Frameworks/JavaVM.framework/Headers on OS X, '-I/usr/java/include -I/usr/java/include/solaris' on Solaris, and '-I/usr/java/default/include -I/usr/java/default/include/linux' on Linux)])
+AC_ARG_VAR(JNI_CFLAGS,
+  [C compiler flags needed to include jni.h (default: -I/System/Library/Frameworks/JavaVM.framework/Headers on OS X, '-I/usr/java/include -I/usr/java/include/solaris' on Solaris, and '-I/usr/java/default/include -I/usr/java/default/include/linux' on Linux)])
 
-AC_MSG_CHECKING([whether to build TurboJPEG/OSS Java wrapper])
+AC_MSG_CHECKING([whether to build TurboJPEG Java wrapper])
 AC_ARG_WITH([java],
-    AC_HELP_STRING([--with-java],[Build Java wrapper for the TurboJPEG/OSS library]))
+  AC_HELP_STRING([--with-java], [Build Java wrapper for the TurboJPEG library]))
+if test "x$with_turbojpeg" = "xno"; then
+  with_java=no
+fi
 
-RPM_CONFIG_ARGS=
 WITH_JAVA=0
 if test "x$with_java" = "xyes"; then
-    AC_MSG_RESULT(yes)
+  AC_MSG_RESULT(yes)
 
-    case $host_os in
-      darwin*)
-        DEFAULT_JNI_CFLAGS=-I/System/Library/Frameworks/JavaVM.framework/Headers
-        ;;
-      solaris*)
-        DEFAULT_JNI_CFLAGS='-I/usr/java/include -I/usr/java/include/solaris'
-        ;;
-      linux*)
-        DEFAULT_JNI_CFLAGS='-I/usr/java/default/include -I/usr/java/default/include/linux'
-        ;;
-    esac
-    if test "x$JNI_CFLAGS" = "x"; then
-        JNI_CFLAGS=$DEFAULT_JNI_CFLAGS
-    fi
+  case $host_os in
+    darwin*)
+      DEFAULT_JNI_CFLAGS=-I/System/Library/Frameworks/JavaVM.framework/Headers
+      ;;
+    solaris*)
+      DEFAULT_JNI_CFLAGS='-I/usr/java/include -I/usr/java/include/solaris'
+      ;;
+    linux*)
+      DEFAULT_JNI_CFLAGS='-I/usr/java/default/include -I/usr/java/default/include/linux'
+      ;;
+  esac
+  if test "x$JNI_CFLAGS" = "x"; then
+    JNI_CFLAGS=$DEFAULT_JNI_CFLAGS
+  fi
 
-    SAVE_CPPFLAGS=${CPPFLAGS}
-    CPPFLAGS="${CPPFLAGS} ${JNI_CFLAGS}"
-    AC_CHECK_HEADERS([jni.h], [DUMMY=1],
-        [AC_MSG_ERROR([Could not find JNI header file])])
-    CPPFLAGS=${SAVE_CPPFLAGS}
-    AC_SUBST(JNI_CFLAGS)
-
-    RPM_CONFIG_ARGS=--with-java
-    JAVA_RPM_CONTENTS_1='%dir /opt/%{name}/classes'
-    JAVA_RPM_CONTENTS_2=/opt/%{name}/classes/turbojpeg.jar
-    WITH_JAVA=1
+  SAVE_CPPFLAGS=${CPPFLAGS}
+  CPPFLAGS="${CPPFLAGS} ${JNI_CFLAGS}"
+  AC_CHECK_HEADERS([jni.h], [DUMMY=1],
+    [AC_MSG_ERROR([Could not find JNI header file])])
+  CPPFLAGS=${SAVE_CPPFLAGS}
+  AC_SUBST(JNI_CFLAGS)
+
+  RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --with-java"
+  JAVA_RPM_CONTENTS_1='%dir %{_datadir}/classes'
+  JAVA_RPM_CONTENTS_2=%{_datadir}/classes/turbojpeg.jar
+  WITH_JAVA=1
 else
-    AC_MSG_RESULT(no)
+  AC_MSG_RESULT(no)
 fi
 AM_CONDITIONAL([WITH_JAVA], [test "x$with_java" = "xyes"])
 AC_SUBST(WITH_JAVA)
 AC_SUBST(JAVA_RPM_CONTENTS_1)
 AC_SUBST(JAVA_RPM_CONTENTS_2)
-AC_SUBST(RPM_CONFIG_ARGS)
 
 # optionally force using gas-preprocessor.pl for compatibility testing
 AC_ARG_WITH([gas-preprocessor],
-    AC_HELP_STRING([--with-gas-preprocessor],[Force using gas-preprocessor.pl on ARM.]))
+  AC_HELP_STRING([--with-gas-preprocessor],
+    [Force using gas-preprocessor.pl on ARM.]))
 if test "x${with_gas_preprocessor}" = "xyes"; then
   case $host_os in
     darwin*)
@@ -293,8 +402,12 @@ fi
 
 # SIMD is optional
 AC_ARG_WITH([simd],
-    AC_HELP_STRING([--without-simd],[Omit SIMD extensions.]))
+  AC_HELP_STRING([--without-simd], [Do not include SIMD extensions]))
 if test "x${with_simd}" != "xno"; then
+  require_simd=no
+  if test "x${with_simd}" = "xyes"; then
+    require_simd=yes
+  fi
   # Check if we're on a supported CPU
   AC_MSG_CHECKING([if we have SIMD optimisations for cpu type])
   case "$host_cpu" in
@@ -302,12 +415,12 @@ if test "x${with_simd}" != "xno"; then
       AC_MSG_RESULT([yes (x86_64)])
       AC_PROG_NASM
       simd_arch=x86_64
-    ;;
+      ;;
     i*86 | x86 | ia32)
       AC_MSG_RESULT([yes (i386)])
       AC_PROG_NASM
       simd_arch=i386
-    ;;
+      ;;
     arm*)
       AC_MSG_RESULT([yes (arm)])
       AC_MSG_CHECKING([if the assembler is GNU-compatible and can be used])
@@ -315,19 +428,31 @@ if test "x${with_simd}" != "xno"; then
         [AC_MSG_RESULT([yes])
          simd_arch=arm],
         [AC_MSG_RESULT([no])
-         with_simd=no
-         AC_MSG_WARN([SIMD support can't be enabled.  Performance will suffer.])])
-    ;;
+         with_simd=no])
+      if test "x${with_simd}" = "xno"; then
+        if test "x${require_simd}" = "xyes"; then
+          AC_MSG_ERROR([SIMD support can't be enabled.])
+        else
+          AC_MSG_WARN([SIMD support can't be enabled.  Performance will suffer.])
+        fi
+      fi
+      ;;
     *)
       AC_MSG_RESULT([no ("$host_cpu")])
-      AC_MSG_WARN([SIMD support not available for this CPU.  Performance will suffer.])
       with_simd=no;
-    ;;
+      if test "x${require_simd}" = "xyes"; then
+        AC_MSG_ERROR([SIMD support not available for this CPU.])
+      else
+        AC_MSG_WARN([SIMD support not available for this CPU.  Performance will suffer.])
+      fi
+      ;;
   esac
 
   if test "x${with_simd}" != "xno"; then
     AC_DEFINE([WITH_SIMD], [1], [Use accelerated SIMD routines.])
   fi
+else
+  RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-simd"
 fi
 
 AM_CONDITIONAL([WITH_SIMD], [test "x$with_simd" != "xno"])
@@ -336,6 +461,13 @@ AM_CONDITIONAL([SIMD_I386], [test "x$simd_arch" = "xi386"])
 AM_CONDITIONAL([SIMD_X86_64], [test "x$simd_arch" = "xx86_64"])
 AM_CONDITIONAL([SIMD_ARM], [test "x$simd_arch" = "xarm"])
 AM_CONDITIONAL([X86_64], [test "x$host_cpu" = "xx86_64" -o "x$host_cpu" = "xamd64"])
+AM_CONDITIONAL([WITH_TURBOJPEG], [test "x$with_turbojpeg" != "xno"])
+
+AC_ARG_VAR(PKGNAME, [distribution package name (default: libjpeg-turbo)])
+if test "x$PKGNAME" = "x"; then
+  PKGNAME=$PACKAGE_NAME
+fi
+AC_SUBST(PKGNAME)
 
 case "$host_cpu" in
   x86_64)
@@ -349,6 +481,7 @@ case "$host_cpu" in
 esac
 
 AC_SUBST(RPMARCH)
+AC_SUBST(RPM_CONFIG_ARGS)
 AC_SUBST(DEBARCH)
 AC_SUBST(BUILD)
 AC_DEFINE_UNQUOTED([BUILD], "$BUILD", [Build number])
@@ -359,18 +492,22 @@ AC_DEFINE_UNQUOTED([BUILD], "$BUILD", [Build number])
 # jconfig.h is a minimal version that allows this package to be built
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_HEADERS([jconfig.h])
-AC_CONFIG_FILES([pkgscripts/libjpeg-turbo.spec:release/libjpeg-turbo.spec.in])
-AC_CONFIG_FILES([pkgscripts/makecygwinpkg:release/makecygwinpkg.in])
-AC_CONFIG_FILES([pkgscripts/makedpkg:release/makedpkg.in])
-AC_CONFIG_FILES([pkgscripts/makemacpkg:release/makemacpkg.in])
+AC_CONFIG_FILES([pkgscripts/libjpeg-turbo.spec.tmpl:release/libjpeg-turbo.spec.in])
+AC_CONFIG_FILES([pkgscripts/makecygwinpkg.tmpl:release/makecygwinpkg.in])
+AC_CONFIG_FILES([pkgscripts/makedpkg.tmpl:release/makedpkg.in])
+AC_CONFIG_FILES([pkgscripts/makemacpkg.tmpl:release/makemacpkg.in])
 AC_CONFIG_FILES([pkgscripts/Description.plist:release/Description.plist.in])
 AC_CONFIG_FILES([pkgscripts/Info.plist:release/Info.plist.in])
-AC_CONFIG_FILES([pkgscripts/uninstall:release/uninstall.in])
-AC_CONFIG_FILES([pkgscripts/makesunpkg:release/makesunpkg.in])
-AC_CONFIG_FILES([pkgscripts/pkginfo:release/pkginfo.in])
-AC_CONFIG_FILES([tjbenchtest])
-AC_CONFIG_FILES([tjexampletest])
+AC_CONFIG_FILES([pkgscripts/uninstall.tmpl:release/uninstall.in])
+if test "x$with_turbojpeg" != "xno"; then
+  AC_CONFIG_FILES([tjbenchtest])
+fi
+if test "x$with_java" = "xyes"; then
+  AC_CONFIG_FILES([tjbenchtest.java])
+  AC_CONFIG_FILES([tjexampletest])
+fi
 AC_CONFIG_FILES([libjpeg.map])
 AC_CONFIG_FILES([Makefile simd/Makefile])
 AC_CONFIG_FILES([java/Makefile])
+AC_CONFIG_FILES([md5/Makefile])
 AC_OUTPUT
diff --git a/djpeg.1 b/djpeg.1
index e5e46f2..8bb7d27 100644 (file)
--- a/djpeg.1
+++ b/djpeg.1
@@ -1,4 +1,4 @@
-.TH DJPEG 1 "11 October 2010"
+.TH DJPEG 1 "18 January 2013"
 .SH NAME
 djpeg \- decompress a JPEG file to an image file
 .SH SYNOPSIS
@@ -62,8 +62,9 @@ runs noticeably faster in this mode.
 .TP
 .BI \-scale " M/N"
 Scale the output image by a factor M/N.  Currently the scale factor must be
-1/1, 1/2, 1/4, or 1/8.  Scaling is handy if the image is larger than your
-screen; also,
+M/8, where M is an integer between 1 and 16 inclusive, or any reduced fraction
+thereof (such as 1/2, 3/4, etc.)  Scaling is handy if the image is larger than
+your screen; also,
 .B djpeg
 runs much faster when scaling down the output.
 .TP
@@ -172,6 +173,10 @@ selects 4000000 bytes.  If more space is needed, temporary files will be used.
 .BI \-outfile " name"
 Send output image to the named file, not to standard output.
 .TP
+.BI \-memsrc
+Load input file into memory before decompressing.  This feature was implemented
+mainly as a way of testing the in-memory source manager (jpeg_mem_src().)
+.TP
 .B \-verbose
 Enable debug printout.  More
 .BR \-v 's
@@ -242,6 +247,10 @@ Wallace, Gregory K.  "The JPEG Still Picture Compression Standard",
 Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44.
 .SH AUTHOR
 Independent JPEG Group
+.PP
+This file was modified by The libjpeg-turbo Project to include only information
+relevant to libjpeg-turbo, to wordsmith certain sections, and to describe
+features not present in libjpeg.
 .SH BUGS
 To avoid the Unisys LZW patent,
 .B djpeg
diff --git a/djpeg.c b/djpeg.c
index 2438856..589c580 100644 (file)
--- a/djpeg.c
+++ b/djpeg.c
@@ -1,9 +1,10 @@
 /*
  * djpeg.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1997, Thomas G. Lane.
- * Copyright (C) 2010-2011, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
+ * libjpeg-turbo Modifications:
+ * Copyright (C) 2010-2011, 2013, D. R. Commander.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains a command-line user interface for the JPEG decompressor.
@@ -86,6 +87,8 @@ static IMAGE_FORMATS requested_fmt;
 
 static const char * progname;  /* program name for error messages */
 static char * outfilename;     /* for -outfile switch */
+boolean memsrc;  /* for -memsrc switch */
+#define INPUT_BUF_SIZE  4096
 
 
 LOCAL(void)
@@ -156,6 +159,10 @@ usage (void)
 #endif
   fprintf(stderr, "  -maxmemory N   Maximum memory to use (in kbytes)\n");
   fprintf(stderr, "  -outfile name  Specify name for output file\n");
+#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
+  fprintf(stderr, "  -memsrc        Load input file into memory before decompressing\n");
+#endif
+
   fprintf(stderr, "  -verbose  or  -debug   Emit debug output\n");
   exit(EXIT_FAILURE);
 }
@@ -179,6 +186,7 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
   /* Set up default JPEG parameters. */
   requested_fmt = DEFAULT_FMT; /* set default output file format */
   outfilename = NULL;
+  memsrc = FALSE;
   cinfo->err->trace_level = 0;
 
   /* Scan command line options, adjust parameters */
@@ -246,7 +254,7 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
        fprintf(stderr, "%s version %s (build %s)\n",
                PACKAGE_NAME, VERSION, BUILD);
        fprintf(stderr, "%s\n\n", JCOPYRIGHT);
-       fprintf(stderr, "Emulating The Independent JPEG Group's libjpeg, version %s\n\n",
+       fprintf(stderr, "Emulating The Independent JPEG Group's software, version %s\n\n",
                JVERSION);
        printed_version = TRUE;
       }
@@ -324,6 +332,16 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
        usage();
       outfilename = argv[argn];        /* save it away for later use */
 
+    } else if (keymatch(arg, "memsrc", 2)) {
+      /* Use in-memory source manager */
+#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
+      memsrc = TRUE;
+#else
+      fprintf(stderr, "%s: sorry, in-memory source manager was not compiled in\n",
+              progname);
+      exit(EXIT_FAILURE);
+#endif
+
     } else if (keymatch(arg, "pnm", 1) || keymatch(arg, "ppm", 1)) {
       /* PPM/PGM output format. */
       requested_fmt = FMT_PPM;
@@ -442,6 +460,8 @@ main (int argc, char **argv)
   djpeg_dest_ptr dest_mgr = NULL;
   FILE * input_file;
   FILE * output_file;
+  unsigned char *inbuffer = NULL;
+  unsigned long insize = 0;
   JDIMENSION num_scanlines;
 
   /* On Mac, fetch a command line. */
@@ -536,7 +556,30 @@ main (int argc, char **argv)
 #endif
 
   /* Specify data source for decompression */
-  jpeg_stdio_src(&cinfo, input_file);
+#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
+  if (memsrc) {
+    size_t nbytes;
+    do {
+      inbuffer = (unsigned char *)realloc(inbuffer, insize + INPUT_BUF_SIZE);
+      if (inbuffer == NULL) {
+        fprintf(stderr, "%s: memory allocation failure\n", progname);
+        exit(EXIT_FAILURE);
+      }
+      nbytes = JFREAD(input_file, &inbuffer[insize], INPUT_BUF_SIZE);
+      if (nbytes < INPUT_BUF_SIZE && ferror(input_file)) {
+        if (file_index < argc)
+          fprintf(stderr, "%s: can't read from %s\n", progname,
+                  argv[file_index]);
+        else
+          fprintf(stderr, "%s: can't read from stdin\n", progname);
+      }
+      insize += (unsigned long)nbytes;
+    } while (nbytes == INPUT_BUF_SIZE);
+    fprintf(stderr, "Compressed size:  %lu bytes\n", insize);
+    jpeg_mem_src(&cinfo, inbuffer, insize);
+  } else
+#endif
+    jpeg_stdio_src(&cinfo, input_file);
 
   /* Read file header, set default decompression parameters */
   (void) jpeg_read_header(&cinfo, TRUE);
@@ -620,6 +663,9 @@ main (int argc, char **argv)
   end_progress_monitor((j_common_ptr) &cinfo);
 #endif
 
+  if (memsrc && inbuffer != NULL)
+    free(inbuffer);
+
   /* All done. */
   exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
   return 0;                    /* suppress no-return-value warnings */
index 16a9c48..1e3fbd0 100644 (file)
@@ -2,35 +2,45 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.3.1"/>
 <title>TurboJPEG: Data Structures</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
-<body onload='searchBox.OnSelectItem(0);'>
-<!-- Generated by Doxygen 1.7.4 -->
-<script type="text/javascript"><!--
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
---></script>
-<div id="top">
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
+   <div id="projectname">TurboJPEG
+   &#160;<span id="projectnumber">1.2.1</span>
+   </div>
   </td>
  </tr>
  </tbody>
 </table>
 </div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.3.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
   <div id="navrow1" class="tabs">
     <ul class="tablist">
       <li><a href="index.html"><span>Main&#160;Page</span></a></li>
       <li><a href="modules.html"><span>Modules</span></a></li>
       <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
-      <li id="searchli">
+      <li>
         <div id="MSearchBox" class="MSearchBoxInactive">
         <span class="left">
           <img id="MSearchSelect" src="search/mag_sel.png"
@@ -55,24 +65,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
     </ul>
   </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Data Structures</div>  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here are the data structures with brief descriptions:</div><table>
-  <tr><td class="indexkey"><a class="el" href="structtjregion.html">tjregion</a></td><td class="indexvalue">Cropping region </td></tr>
-  <tr><td class="indexkey"><a class="el" href="structtjscalingfactor.html">tjscalingfactor</a></td><td class="indexvalue">Scaling factor </td></tr>
-  <tr><td class="indexkey"><a class="el" href="structtjtransform.html">tjtransform</a></td><td class="indexvalue">Lossless transform </td></tr>
-</table>
-</div>
+</div><!-- top -->
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
      onmouseout="return searchBox.OnSearchSelectHide()"
      onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a></div>
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
@@ -81,8 +80,24 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </iframe>
 </div>
 
-<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by&#160;
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
+<div class="header">
+  <div class="headertitle">
+<div class="title">Data Structures</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structtjregion.html" target="_self">tjregion</a></td><td class="desc">Cropping region</td></tr>
+<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structtjscalingfactor.html" target="_self">tjscalingfactor</a></td><td class="desc">Scaling factor</td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structtjtransform.html" target="_self">tjtransform</a></td><td class="desc">Lossless transform</td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.3.1
+</small></address>
 </body>
 </html>
index e401862..224b29a 100644 (file)
Binary files a/doc/html/bc_s.png and b/doc/html/bc_s.png differ
diff --git a/doc/html/bdwn.png b/doc/html/bdwn.png
new file mode 100644 (file)
index 0000000..940a0b9
Binary files /dev/null and b/doc/html/bdwn.png differ
index 9327b4f..4722b14 100644 (file)
@@ -2,35 +2,45 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.3.1"/>
 <title>TurboJPEG: Data Structure Index</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
-<body onload='searchBox.OnSelectItem(0);'>
-<!-- Generated by Doxygen 1.7.4 -->
-<script type="text/javascript"><!--
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
---></script>
-<div id="top">
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
+   <div id="projectname">TurboJPEG
+   &#160;<span id="projectnumber">1.2.1</span>
+   </div>
   </td>
  </tr>
  </tbody>
 </table>
 </div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.3.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
   <div id="navrow1" class="tabs">
     <ul class="tablist">
       <li><a href="index.html"><span>Main&#160;Page</span></a></li>
       <li><a href="modules.html"><span>Modules</span></a></li>
       <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
-      <li id="searchli">
+      <li>
         <div id="MSearchBox" class="MSearchBoxInactive">
         <span class="left">
           <img id="MSearchSelect" src="search/mag_sel.png"
@@ -55,23 +65,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
     </ul>
   </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Data Structure Index</div>  </div>
-</div>
-<div class="contents">
-<div class="qindex"><a class="qindex" href="#letter_T">T</a></div>
-<table align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
-<tr><td><a name="letter_T"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;T&#160;&#160;</div></td></tr></table>
-</td><td><a class="el" href="structtjregion.html">tjregion</a>&#160;&#160;&#160;</td><td><a class="el" href="structtjscalingfactor.html">tjscalingfactor</a>&#160;&#160;&#160;</td><td><a class="el" href="structtjtransform.html">tjtransform</a>&#160;&#160;&#160;</td></tr></table><div class="qindex"><a class="qindex" href="#letter_T">T</a></div>
-</div>
+</div><!-- top -->
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
      onmouseout="return searchBox.OnSearchSelectHide()"
      onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a></div>
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
@@ -80,8 +80,26 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </iframe>
 </div>
 
-<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by&#160;
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
+<div class="header">
+  <div class="headertitle">
+<div class="title">Data Structure Index</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_T">T</a></div>
+<table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
+<tr><td rowspan="2" valign="bottom"><a name="letter_T"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;T&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="structtjscalingfactor.html">tjscalingfactor</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtjtransform.html">tjtransform</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td></td><td></td><td></td></tr>
+<tr><td valign="top"><a class="el" href="structtjregion.html">tjregion</a>&#160;&#160;&#160;</td><td></td><td></td><td></td></tr>
+<tr><td></td><td></td><td></td><td></td></tr>
+</table>
+<div class="qindex"><a class="qindex" href="#letter_T">T</a></div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.3.1
+</small></address>
 </body>
 </html>
index b7d4bd9..98cc2c9 100644 (file)
Binary files a/doc/html/closed.png and b/doc/html/closed.png differ
index 74445fe..dabaff2 100644 (file)
@@ -1,13 +1,12 @@
-/* The standard CSS for doxygen */
+/* The standard CSS for doxygen 1.8.3.1 */
 
 body, table, div, p, dl {
-       font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
-       font-size: 12px;
+       font: 400 14px/19px Roboto,sans-serif;
 }
 
 /* @group Heading Levels */
 
-h1 {
+h1.groupheader {
        font-size: 150%;
 }
 
@@ -17,14 +16,34 @@ h1 {
        margin: 10px 2px;
 }
 
-h2 {
-       font-size: 120%;
+h2.groupheader {
+       border-bottom: 1px solid #879ECB;
+       color: #354C7B;
+       font-size: 150%;
+       font-weight: normal;
+       margin-top: 1.75em;
+       padding-top: 8px;
+       padding-bottom: 4px;
+       width: 100%;
 }
 
-h3 {
+h3.groupheader {
        font-size: 100%;
 }
 
+h1, h2, h3, h4, h5, h6 {
+       -webkit-transition: text-shadow 0.5s linear;
+       -moz-transition: text-shadow 0.5s linear;
+       -ms-transition: text-shadow 0.5s linear;
+       -o-transition: text-shadow 0.5s linear;
+       transition: text-shadow 0.5s linear;
+       margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+       text-shadow: 0 0 15px cyan;
+}
+
 dt {
        font-weight: bold;
 }
@@ -72,8 +91,6 @@ div.qindex, div.navtab{
        background-color: #EBEFF6;
        border: 1px solid #A3B4D7;
        text-align: center;
-       margin: 2px;
-       padding: 2px;
 }
 
 div.qindex, div.navpath {
@@ -123,12 +140,12 @@ a.el {
 a.elRef {
 }
 
-a.code {
-       color: #4665A2;
+a.code, a.code:visited {
+       color: #4665A2; 
 }
 
-a.codeRef {
-       color: #4665A2;
+a.codeRef, a.codeRef:visited {
+       color: #4665A2; 
 }
 
 /* @end */
@@ -137,20 +154,72 @@ dl.el {
        margin-left: -1cm;
 }
 
-.fragment {
+pre.fragment {
+        border: 1px solid #C4CFE5;
+        background-color: #FBFCFD;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+        overflow: auto;
+        word-wrap: break-word;
+        font-size:  9pt;
+        line-height: 125%;
+        font-family: monospace, fixed;
+        font-size: 105%;
+}
+
+div.fragment {
+        padding: 4px;
+        margin: 4px;
+       background-color: #FBFCFD;
+       border: 1px solid #C4CFE5;
+}
+
+div.line {
        font-family: monospace, fixed;
-       font-size: 105%;
+        font-size: 13px;
+       min-height: 13px;
+       line-height: 1.0;
+       text-wrap: unrestricted;
+       white-space: -moz-pre-wrap; /* Moz */
+       white-space: -pre-wrap;     /* Opera 4-6 */
+       white-space: -o-pre-wrap;   /* Opera 7 */
+       white-space: pre-wrap;      /* CSS3  */
+       word-wrap: break-word;      /* IE 5.5+ */
+       text-indent: -53px;
+       padding-left: 53px;
+       padding-bottom: 0px;
+       margin: 0px;
+       -webkit-transition-property: background-color, box-shadow;
+       -webkit-transition-duration: 0.5s;
+       -moz-transition-property: background-color, box-shadow;
+       -moz-transition-duration: 0.5s;
+       -ms-transition-property: background-color, box-shadow;
+       -ms-transition-duration: 0.5s;
+       -o-transition-property: background-color, box-shadow;
+       -o-transition-duration: 0.5s;
+       transition-property: background-color, box-shadow;
+       transition-duration: 0.5s;
 }
 
-pre.fragment {
-       border: 1px solid #C4CFE5;
-       background-color: #FBFCFD;
-       padding: 4px 6px;
-       margin: 4px 8px 4px 2px;
-       overflow: auto;
-       word-wrap: break-word;
-       font-size:  9pt;
-       line-height: 125%;
+div.line.glow {
+       background-color: cyan;
+       box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+       padding-right: 4px;
+       text-align: right;
+       border-right: 2px solid #0F0;
+       background-color: #E8E8E8;
+        white-space: pre;
+}
+span.lineno a {
+       background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+       background-color: #C8C8C8;
 }
 
 div.ah {
@@ -183,15 +252,15 @@ div.groupText {
 }
 
 body {
-       background: white;
+       background-color: white;
        color: black;
         margin: 0;
 }
 
 div.contents {
        margin-top: 10px;
-       margin-left: 10px;
-       margin-right: 5px;
+       margin-left: 12px;
+       margin-right: 8px;
 }
 
 td.indexkey {
@@ -200,6 +269,8 @@ td.indexkey {
        border: 1px solid #C4CFE5;
        margin: 2px 0px 2px 0;
        padding: 2px 10px;
+        white-space: nowrap;
+        vertical-align: top;
 }
 
 td.indexvalue {
@@ -292,6 +363,13 @@ span.vhdllogic {
        color: #ff0000 
 }
 
+blockquote {
+        background-color: #F7F8FB;
+        border-left: 2px solid #9CAFD4;
+        margin: 0 24px 0 4px;
+        padding: 0 12px 0 16px;
+}
+
 /* @end */
 
 /*
@@ -345,6 +423,24 @@ table.memberdecls {
        padding: 0px;
 }
 
+.memberdecls td, .fieldtable tr {
+       -webkit-transition-property: background-color, box-shadow;
+       -webkit-transition-duration: 0.5s;
+       -moz-transition-property: background-color, box-shadow;
+       -moz-transition-duration: 0.5s;
+       -ms-transition-property: background-color, box-shadow;
+       -ms-transition-duration: 0.5s;
+       -o-transition-property: background-color, box-shadow;
+       -o-transition-duration: 0.5s;
+       transition-property: background-color, box-shadow;
+       transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+       background-color: cyan;
+       box-shadow: 0 0 15px cyan;
+}
+
 .mdescLeft, .mdescRight,
 .memItemLeft, .memItemRight,
 .memTemplItemLeft, .memTemplItemRight, .memTemplParams {
@@ -359,8 +455,11 @@ table.memberdecls {
        color: #555;
 }
 
-.memItemLeft, .memItemRight, .memTemplParams {
-       border-top: 1px solid #C4CFE5;
+.memSeparator {
+        border-bottom: 1px solid #DEE4F0;
+        line-height: 1px;
+        margin: 0px;
+        padding: 0px;
 }
 
 .memItemLeft, .memTemplItemLeft {
@@ -374,6 +473,7 @@ table.memberdecls {
 .memTemplParams {
        color: #4665A2;
         white-space: nowrap;
+       font-size: 80%;
 }
 
 /* @end */
@@ -406,15 +506,29 @@ table.memberdecls {
        padding: 0;
        margin-bottom: 10px;
        margin-right: 5px;
+        -webkit-transition: box-shadow 0.5s linear;
+        -moz-transition: box-shadow 0.5s linear;
+        -ms-transition: box-shadow 0.5s linear;
+        -o-transition: box-shadow 0.5s linear;
+        transition: box-shadow 0.5s linear;
+        display: table !important;
+        width: 100%;
+}
+
+.memitem.glow {
+         box-shadow: 0 0 15px cyan;
 }
 
 .memname {
-        white-space: nowrap;
         font-weight: bold;
         margin-left: 6px;
 }
 
-.memproto {
+.memname td {
+       vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
         border-top: 1px solid #A8B8D9;
         border-left: 1px solid #A8B8D9;
         border-right: 1px solid #A8B8D9;
@@ -422,45 +536,55 @@ table.memberdecls {
         color: #253555;
         font-weight: bold;
         text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
         /* opera specific markup */
         box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        border-top-right-radius: 8px;
-        border-top-left-radius: 8px;
+        border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
         /* firefox specific markup */
         -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-        -moz-border-radius-topright: 8px;
-        -moz-border-radius-topleft: 8px;
+        -moz-border-radius-topright: 4px;
+        -moz-border-radius-topleft: 4px;
         /* webkit specific markup */
         -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        -webkit-border-top-right-radius: 8px;
-        -webkit-border-top-left-radius: 8px;
-        background-image:url('nav_f.png');
-        background-repeat:repeat-x;
-        background-color: #E2E8F2;
+        -webkit-border-top-right-radius: 4px;
+        -webkit-border-top-left-radius: 4px;
 
 }
 
-.memdoc {
+.memdoc, dl.reflist dd {
         border-bottom: 1px solid #A8B8D9;      
         border-left: 1px solid #A8B8D9;      
         border-right: 1px solid #A8B8D9; 
-        padding: 2px 5px;
+        padding: 6px 10px 2px 10px;
         background-color: #FBFCFD;
         border-top-width: 0;
+        background-image:url('nav_g.png');
+        background-repeat:repeat-x;
+        background-color: #FFFFFF;
         /* opera specific markup */
-        border-bottom-left-radius: 8px;
-        border-bottom-right-radius: 8px;
+        border-bottom-left-radius: 4px;
+        border-bottom-right-radius: 4px;
         box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
         /* firefox specific markup */
-        -moz-border-radius-bottomleft: 8px;
-        -moz-border-radius-bottomright: 8px;
+        -moz-border-radius-bottomleft: 4px;
+        -moz-border-radius-bottomright: 4px;
         -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-        background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7);
         /* webkit specific markup */
-        -webkit-border-bottom-left-radius: 8px;
-        -webkit-border-bottom-right-radius: 8px;
+        -webkit-border-bottom-left-radius: 4px;
+        -webkit-border-bottom-right-radius: 4px;
         -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7));
+}
+
+dl.reflist dt {
+        padding: 5px;
+}
+
+dl.reflist dd {
+        margin: 0px 0px 10px 0px;
+        padding: 5px;
 }
 
 .paramkey {
@@ -478,9 +602,13 @@ table.memberdecls {
 .paramname em {
        font-style: normal;
 }
+.paramname code {
+        line-height: 14px;
+}
 
 .params, .retval, .exception, .tparams {
-        border-spacing: 6px 2px;
+        margin-left: 0px;
+        padding-left: 0px;
 }       
 
 .params .paramname, .retval .paramname {
@@ -498,105 +626,116 @@ table.memberdecls {
         vertical-align: top;
 }
 
+table.mlabels {
+       border-spacing: 0px;
+}
 
+td.mlabels-left {
+       width: 100%;
+       padding: 0px;
+}
 
+td.mlabels-right {
+       vertical-align: bottom;
+       padding: 0px;
+       white-space: nowrap;
+}
 
-/* @end */
-
-/* @group Directory (tree) */
-
-/* for the tree view */
+span.mlabels {
+        margin-left: 8px;
+}
 
-.ftvtree {
-       font-family: sans-serif;
-       margin: 0px;
+span.mlabel {
+        background-color: #728DC1;
+        border-top:1px solid #5373B4;
+        border-left:1px solid #5373B4;
+        border-right:1px solid #C4CFE5;
+        border-bottom:1px solid #C4CFE5;
+       text-shadow: none;
+       color: white;
+       margin-right: 4px;
+       padding: 2px 3px;
+       border-radius: 3px;
+       font-size: 7pt;
+       white-space: nowrap;
+       vertical-align: middle;
 }
 
-/* these are for tree view when used as main index */
 
-.directory {
-       font-size: 9pt;
-       font-weight: bold;
-       margin: 5px;
-}
 
-.directory h3 {
-       margin: 0px;
-       margin-top: 1em;
-       font-size: 11pt;
-}
+/* @end */
 
-/*
-The following two styles can be used to replace the root node title
-with an image of your choice.  Simply uncomment the next two styles,
-specify the name of your image and be sure to set 'height' to the
-proper pixel height of your image.
-*/
+/* these are for tree view when not used as main index */
 
-/*
-.directory h3.swap {
-       height: 61px;
-       background-repeat: no-repeat;
-       background-image: url("yourimage.gif");
-}
-.directory h3.swap span {
-       display: none;
+div.directory {
+        margin: 10px 0px;
+        border-top: 1px solid #A8B8D9;
+        border-bottom: 1px solid #A8B8D9;
+        width: 100%;
 }
-*/
 
-.directory > h3 {
-       margin-top: 0;
+.directory table {
+        border-collapse:collapse;
 }
 
-.directory p {
-       margin: 0px;
-       white-space: nowrap;
+.directory td {
+        margin: 0px;
+        padding: 0px;
+       vertical-align: top;
 }
 
-.directory div {
-       display: none;
-       margin: 0px;
+.directory td.entry {
+        white-space: nowrap;
+        padding-right: 6px;
 }
 
-.directory img {
-       vertical-align: -30%;
+.directory td.entry a {
+        outline:none;
 }
 
-/* these are for tree view when not used as main index */
-
-.directory-alt {
-       font-size: 100%;
-       font-weight: bold;
+.directory td.entry a img {
+        border: none;
 }
 
-.directory-alt h3 {
-       margin: 0px;
-       margin-top: 1em;
-       font-size: 11pt;
+.directory td.desc {
+        width: 100%;
+        padding-left: 6px;
+       padding-right: 6px;
+       padding-top: 3px;
+       border-left: 1px solid rgba(0,0,0,0.05);
 }
 
-.directory-alt > h3 {
-       margin-top: 0;
+.directory tr.even {
+       padding-left: 6px;
+       background-color: #F7F8FB;
 }
 
-.directory-alt p {
-       margin: 0px;
-       white-space: nowrap;
+.directory img {
+       vertical-align: -30%;
 }
 
-.directory-alt div {
-       display: none;
-       margin: 0px;
+.directory .levels {
+        white-space: nowrap;
+        width: 100%;
+        text-align: right;
+        font-size: 9pt;
 }
 
-.directory-alt img {
-       vertical-align: -30%;
+.directory .levels span {
+        cursor: pointer;
+        padding-left: 2px;
+        padding-right: 2px;
+       color: #3D578C;
 }
 
-/* @end */
-
 div.dynheader {
         margin-top: 8px;
+       -webkit-touch-callout: none;
+       -webkit-user-select: none;
+       -khtml-user-select: none;
+       -moz-user-select: none;
+       -ms-user-select: none;
+       user-select: none;
 }
 
 address {
@@ -606,6 +745,8 @@ address {
 
 table.doxtable {
        border-collapse:collapse;
+        margin-top: 4px;
+        margin-bottom: 4px;
 }
 
 table.doxtable td, table.doxtable th {
@@ -619,9 +760,72 @@ table.doxtable th {
        font-size: 110%;
        padding-bottom: 4px;
        padding-top: 5px;
-       text-align:left;
 }
 
+table.fieldtable {
+        /*width: 100%;*/
+        margin-bottom: 10px;
+        border: 1px solid #A8B8D9;
+        border-spacing: 0px;
+        -moz-border-radius: 4px;
+        -webkit-border-radius: 4px;
+        border-radius: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+        padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+        white-space: nowrap;
+        border-right: 1px solid #A8B8D9;
+        border-bottom: 1px solid #A8B8D9;
+        vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+        padding-top: 5px;
+}
+
+.fieldtable td.fielddoc {
+        border-bottom: 1px solid #A8B8D9;
+        /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+        margin-top: 2px;
+}       
+        
+.fieldtable td.fielddoc p:last-child {
+        margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+        border-bottom: none;
+}
+
+.fieldtable th {
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+        font-size: 90%;
+        color: #253555;
+        padding-bottom: 4px;
+        padding-top: 5px;
+        text-align:left;
+        -moz-border-radius-topleft: 4px;
+        -moz-border-radius-topright: 4px;
+        -webkit-border-top-left-radius: 4px;
+        -webkit-border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        border-top-right-radius: 4px;
+        border-bottom: 1px solid #A8B8D9;
+}
+
+
 .tabsearch {
        top: 0px;
        left: 10px;
@@ -637,6 +841,7 @@ table.doxtable th {
        font-size: 11px;
        background-image:url('tab_b.png');
        background-repeat:repeat-x;
+       background-position: 0 -5px;
        height:30px;
        line-height:30px;
        color:#8AA0CC;
@@ -664,6 +869,10 @@ table.doxtable th {
        display:block;
        text-decoration: none;
        outline: none;
+       color: #283A5D;
+       font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+       text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+       text-decoration: none;        
 }
 
 .navpath li.navelem a:hover
@@ -702,7 +911,6 @@ div.summary a
 div.ingroups
 {
        font-size: 8pt;
-       padding-left: 5px;
        width: 50%;
        text-align: left;
 }
@@ -731,47 +939,74 @@ dl
         padding: 0 0 0 10px;
 }
 
-dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
 {
-        border-left:4px solid;
-        padding: 0 0 0 6px;
+       margin-left: 0px;
+       padding-left: 0px;
 }
 
 dl.note
 {
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
         border-color: #D0C000;
 }
 
 dl.warning, dl.attention
 {
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
         border-color: #FF0000;
 }
 
 dl.pre, dl.post, dl.invariant
 {
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
         border-color: #00D000;
 }
 
 dl.deprecated
 {
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
         border-color: #505050;
 }
 
 dl.todo
 {
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
         border-color: #00C0E0;
 }
 
 dl.test
 {
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
         border-color: #3030E0;
 }
 
 dl.bug
 {
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
         border-color: #C08050;
 }
 
+dl.section dd {
+       margin-bottom: 6px;
+}
+
+
 #projectlogo
 {
        text-align: center;
@@ -833,3 +1068,117 @@ dl.bug
        font-weight: bold;
 }
 
+div.zoom
+{
+       border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+        margin-bottom:50px;
+}
+
+dl.citelist dt {
+        color:#334975;
+        float:left;
+        font-weight:bold;
+        margin-right:10px;
+        padding:5px;
+}
+
+dl.citelist dd {
+        margin:2px 0;
+        padding:5px 0;
+}
+
+div.toc {
+        padding: 14px 25px;
+        background-color: #F4F6FA;
+        border: 1px solid #D8DFEE;
+        border-radius: 7px 7px 7px 7px;
+        float: right;
+        height: auto;
+        margin: 0 20px 10px 10px;
+        width: 200px;
+}
+
+div.toc li {
+        background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+        margin-top: 5px;
+        padding-left: 10px;
+        padding-top: 2px;
+}
+
+div.toc h3 {
+        font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+       color: #4665A2;
+        border-bottom: 0 none;
+        margin: 0;
+}
+
+div.toc ul {
+        list-style: none outside none;
+        border: medium none;
+        padding: 0px;
+}       
+
+div.toc li.level1 {
+        margin-left: 0px;
+}
+
+div.toc li.level2 {
+        margin-left: 15px;
+}
+
+div.toc li.level3 {
+        margin-left: 30px;
+}
+
+div.toc li.level4 {
+        margin-left: 45px;
+}
+
+.inherit_header {
+        font-weight: bold;
+        color: gray;
+        cursor: pointer;
+       -webkit-touch-callout: none;
+       -webkit-user-select: none;
+       -khtml-user-select: none;
+       -moz-user-select: none;
+       -ms-user-select: none;
+       user-select: none;
+}
+
+.inherit_header td {
+        padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+        display: none;
+}
+
+tr.heading h2 {
+        margin-top: 12px;
+        margin-bottom: 4px;
+}
+
+@media print
+{
+  #top { display: none; }
+  #side-nav { display: none; }
+  #nav-path { display: none; }
+  body { overflow:visible; }
+  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+  .summary { display: none; }
+  .memitem { page-break-inside: avoid; }
+  #doc-content
+  {
+    margin-left:0 !important;
+    height:auto !important;
+    width:auto !important;
+    overflow:inherit;
+    display:inline;
+  }
+}
+
index 635ed52..3ff17d8 100644 (file)
Binary files a/doc/html/doxygen.png and b/doc/html/doxygen.png differ
diff --git a/doc/html/dynsections.js b/doc/html/dynsections.js
new file mode 100644 (file)
index 0000000..ed092c7
--- /dev/null
@@ -0,0 +1,97 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+   content.hide();
+   summary.show();
+   $(linkObj).addClass('closed').removeClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+   content.show();
+   summary.hide();
+   $(linkObj).removeClass('closed').addClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ } 
+ return false;
+}
+
+function updateStripes()
+{
+  $('table.directory tr').
+       removeClass('even').filter(':visible:even').addClass('even');
+}
+function toggleLevel(level)
+{
+  $('table.directory tr').each(function(){ 
+    var l = this.id.split('_').length-1;
+    var i = $('#img'+this.id.substring(3));
+    var a = $('#arr'+this.id.substring(3));
+    if (l<level+1) {
+      i.attr('src','ftv2folderopen.png');
+      a.attr('src','ftv2mnode.png');
+      $(this).show();
+    } else if (l==level+1) {
+      i.attr('src','ftv2folderclosed.png');
+      a.attr('src','ftv2pnode.png');
+      $(this).show();
+    } else {
+      $(this).hide();
+    }
+  });
+  updateStripes();
+}
+
+function toggleFolder(id)
+{
+  //The clicked row
+  var currentRow = $('#row_'+id);
+  var currentRowImages = currentRow.find("img");
+
+  //All rows after the clicked row
+  var rows = currentRow.nextAll("tr");
+
+  //Only match elements AFTER this one (can't hide elements before)
+  var childRows = rows.filter(function() {
+    var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+    return this.id.match(re);
+  });
+
+  //First row is visible we are HIDING
+  if (childRows.filter(':first').is(':visible')===true) {
+    currentRowImages.filter("[id^=arr]").attr('src', 'ftv2pnode.png');
+    currentRowImages.filter("[id^=img]").attr('src', 'ftv2folderclosed.png');
+    rows.filter("[id^=row_"+id+"]").hide();
+  } else { //We are SHOWING
+    //All sub images
+    var childImages = childRows.find("img");
+    var childImg = childImages.filter("[id^=img]");
+    var childArr = childImages.filter("[id^=arr]");
+
+    currentRow.find("[id^=arr]").attr('src', 'ftv2mnode.png'); //open row
+    currentRow.find("[id^=img]").attr('src', 'ftv2folderopen.png'); //open row
+    childImg.attr('src','ftv2folderclosed.png'); //children closed
+    childArr.attr('src','ftv2pnode.png'); //children closed
+    childRows.show(); //show all children
+  }
+  updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+  var rows = $('tr.inherit.'+id);
+  var img = $('tr.inherit_header.'+id+' img');
+  var src = $(img).attr('src');
+  if (rows.filter(':first').is(':visible')===true) {
+    rows.css('display','none');
+    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+  } else {
+    rows.css('display','table-row'); // using show() causes jump in firefox
+    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+  }
+}
+
diff --git a/doc/html/ftv2blank.png b/doc/html/ftv2blank.png
new file mode 100644 (file)
index 0000000..63c605b
Binary files /dev/null and b/doc/html/ftv2blank.png differ
diff --git a/doc/html/ftv2cl.png b/doc/html/ftv2cl.png
new file mode 100644 (file)
index 0000000..132f657
Binary files /dev/null and b/doc/html/ftv2cl.png differ
diff --git a/doc/html/ftv2doc.png b/doc/html/ftv2doc.png
new file mode 100644 (file)
index 0000000..17edabf
Binary files /dev/null and b/doc/html/ftv2doc.png differ
diff --git a/doc/html/ftv2folderclosed.png b/doc/html/ftv2folderclosed.png
new file mode 100644 (file)
index 0000000..bb8ab35
Binary files /dev/null and b/doc/html/ftv2folderclosed.png differ
diff --git a/doc/html/ftv2folderopen.png b/doc/html/ftv2folderopen.png
new file mode 100644 (file)
index 0000000..d6c7f67
Binary files /dev/null and b/doc/html/ftv2folderopen.png differ
diff --git a/doc/html/ftv2lastnode.png b/doc/html/ftv2lastnode.png
new file mode 100644 (file)
index 0000000..63c605b
Binary files /dev/null and b/doc/html/ftv2lastnode.png differ
diff --git a/doc/html/ftv2link.png b/doc/html/ftv2link.png
new file mode 100644 (file)
index 0000000..17edabf
Binary files /dev/null and b/doc/html/ftv2link.png differ
diff --git a/doc/html/ftv2mlastnode.png b/doc/html/ftv2mlastnode.png
new file mode 100644 (file)
index 0000000..0b63f6d
Binary files /dev/null and b/doc/html/ftv2mlastnode.png differ
diff --git a/doc/html/ftv2mnode.png b/doc/html/ftv2mnode.png
new file mode 100644 (file)
index 0000000..0b63f6d
Binary files /dev/null and b/doc/html/ftv2mnode.png differ
diff --git a/doc/html/ftv2mo.png b/doc/html/ftv2mo.png
new file mode 100644 (file)
index 0000000..4bfb80f
Binary files /dev/null and b/doc/html/ftv2mo.png differ
diff --git a/doc/html/ftv2node.png b/doc/html/ftv2node.png
new file mode 100644 (file)
index 0000000..63c605b
Binary files /dev/null and b/doc/html/ftv2node.png differ
diff --git a/doc/html/ftv2ns.png b/doc/html/ftv2ns.png
new file mode 100644 (file)
index 0000000..72e3d71
Binary files /dev/null and b/doc/html/ftv2ns.png differ
diff --git a/doc/html/ftv2plastnode.png b/doc/html/ftv2plastnode.png
new file mode 100644 (file)
index 0000000..c6ee22f
Binary files /dev/null and b/doc/html/ftv2plastnode.png differ
diff --git a/doc/html/ftv2pnode.png b/doc/html/ftv2pnode.png
new file mode 100644 (file)
index 0000000..c6ee22f
Binary files /dev/null and b/doc/html/ftv2pnode.png differ
diff --git a/doc/html/ftv2splitbar.png b/doc/html/ftv2splitbar.png
new file mode 100644 (file)
index 0000000..fe895f2
Binary files /dev/null and b/doc/html/ftv2splitbar.png differ
diff --git a/doc/html/ftv2vertline.png b/doc/html/ftv2vertline.png
new file mode 100644 (file)
index 0000000..63c605b
Binary files /dev/null and b/doc/html/ftv2vertline.png differ
index a3470a4..7af0d8e 100644 (file)
@@ -2,35 +2,45 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.3.1"/>
 <title>TurboJPEG: Data Fields</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
-<body onload='searchBox.OnSelectItem(0);'>
-<!-- Generated by Doxygen 1.7.4 -->
-<script type="text/javascript"><!--
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
---></script>
-<div id="top">
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
+   <div id="projectname">TurboJPEG
+   &#160;<span id="projectnumber">1.2.1</span>
+   </div>
   </td>
  </tr>
  </tbody>
 </table>
 </div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.3.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
   <div id="navrow1" class="tabs">
     <ul class="tablist">
       <li><a href="index.html"><span>Main&#160;Page</span></a></li>
       <li><a href="modules.html"><span>Modules</span></a></li>
       <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
-      <li id="searchli">
+      <li>
         <div id="MSearchBox" class="MSearchBoxInactive">
         <span class="left">
           <img id="MSearchSelect" src="search/mag_sel.png"
@@ -61,7 +71,21 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="functions_vars.html"><span>Variables</span></a></li>
     </ul>
   </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
+
 <div class="contents">
 <div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div><ul>
 <li>customFilter
@@ -98,23 +122,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 : <a class="el" href="structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2">tjregion</a>
 </li>
 </ul>
-</div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Variables</a></div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by&#160;
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.3.1
+</small></address>
 </body>
 </html>
index ea240cc..e6a6f72 100644 (file)
@@ -2,35 +2,45 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.3.1"/>
 <title>TurboJPEG: Data Fields - Variables</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
-<body onload='searchBox.OnSelectItem(0);'>
-<!-- Generated by Doxygen 1.7.4 -->
-<script type="text/javascript"><!--
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
---></script>
-<div id="top">
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
+   <div id="projectname">TurboJPEG
+   &#160;<span id="projectnumber">1.2.1</span>
+   </div>
   </td>
  </tr>
  </tbody>
 </table>
 </div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.3.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
   <div id="navrow1" class="tabs">
     <ul class="tablist">
       <li><a href="index.html"><span>Main&#160;Page</span></a></li>
       <li><a href="modules.html"><span>Modules</span></a></li>
       <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
-      <li id="searchli">
+      <li>
         <div id="MSearchBox" class="MSearchBoxInactive">
         <span class="left">
           <img id="MSearchSelect" src="search/mag_sel.png"
@@ -61,7 +71,21 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
     </ul>
   </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
+
 <div class="contents">
 &#160;<ul>
 <li>customFilter
@@ -98,23 +122,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 : <a class="el" href="structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2">tjregion</a>
 </li>
 </ul>
-</div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Variables</a></div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by&#160;
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.3.1
+</small></address>
 </body>
 </html>
index cd14f44..b0ab027 100644 (file)
@@ -2,35 +2,45 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.3.1"/>
 <title>TurboJPEG: TurboJPEG</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
-<body onload='searchBox.OnSelectItem(0);'>
-<!-- Generated by Doxygen 1.7.4 -->
-<script type="text/javascript"><!--
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
---></script>
-<div id="top">
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
+   <div id="projectname">TurboJPEG
+   &#160;<span id="projectnumber">1.2.1</span>
+   </div>
   </td>
  </tr>
  </tbody>
 </table>
 </div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.3.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
   <div id="navrow1" class="tabs">
     <ul class="tablist">
       <li><a href="index.html"><span>Main&#160;Page</span></a></li>
       <li><a href="modules.html"><span>Modules</span></a></li>
       <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
-      <li id="searchli">
+      <li>
         <div id="MSearchBox" class="MSearchBoxInactive">
         <span class="left">
           <img id="MSearchSelect" src="search/mag_sel.png"
@@ -48,80 +58,121 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       </li>
     </ul>
   </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
+
 <div class="header">
   <div class="summary">
 <a href="#nested-classes">Data Structures</a> &#124;
-<a href="#define-members">Defines</a> &#124;
+<a href="#define-members">Macros</a> &#124;
 <a href="#typedef-members">Typedefs</a> &#124;
 <a href="#enum-members">Enumerations</a> &#124;
 <a href="#func-members">Functions</a> &#124;
 <a href="#var-members">Variables</a>  </div>
   <div class="headertitle">
 <div class="title">TurboJPEG</div>  </div>
-</div>
+</div><!--header-->
 <div class="contents">
 
 <p>TurboJPEG API.  
 <a href="#details">More...</a></p>
 <table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
 Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjscalingfactor.html">tjscalingfactor</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Scaling factor.  <a href="structtjscalingfactor.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjregion.html">tjregion</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Cropping region.  <a href="structtjregion.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjtransform.html">tjtransform</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Lossless transform.  <a href="structtjtransform.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga5ef3d169162ce77ce348e292a0b7477c">TJ_NUMSAMP</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of chrominance subsampling options.  <a href="#ga5ef3d169162ce77ce348e292a0b7477c"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga7010a4402f54a45ba822ad8675a4655e">TJ_NUMPF</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of pixel formats.  <a href="#ga7010a4402f54a45ba822ad8675a4655e"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec">TJFLAG_BOTTOMUP</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">The uncompressed source/destination image is stored in bottom-up (Windows, OpenGL) order, not top-down (X11) order.  <a href="#ga72ecf4ebe6eb702d3c6f5ca27455e1ec"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga4e872f11c82f241736fa8297920f24e5">TJFLAG_FORCEMMX</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use MMX code (if the underlying codec supports it.)  <a href="#ga4e872f11c82f241736fa8297920f24e5"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gae17e63189e8cd730feed3efbd2454f38">TJFLAG_FORCESSE</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use SSE code (if the underlying codec supports it.)  <a href="#gae17e63189e8cd730feed3efbd2454f38"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga8cf0bca96ea4d472563f4b0ebf8c48e7">TJFLAG_FORCESSE2</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use SSE2 code (if the underlying codec supports it.)  <a href="#ga8cf0bca96ea4d472563f4b0ebf8c48e7"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gaf9d49066633404da4386d70820295dd2">TJFLAG_FORCESSE3</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use SSE3 code (if the underlying codec supports it.)  <a href="#gaf9d49066633404da4386d70820295dd2"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga4ee4506c81177a06f77e2504a22efd2d">TJFLAG_FASTUPSAMPLE</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">When decompressing, use the fastest chrominance upsampling algorithm available in the underlying codec.  <a href="#ga4ee4506c81177a06f77e2504a22efd2d"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963">TJFLAG_NOREALLOC</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Disable buffer (re)allocation.  <a href="#ga8808d403c68b62aaa58a4c1e58e98963"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gaabce235db80d3f698b27f36cbd453da2">TJFLAG_FASTDCT</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Use the fastest DCT/IDCT algorithm available in the underlying codec.  <a href="#gaabce235db80d3f698b27f36cbd453da2"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gacb233cfd722d66d1ccbf48a7de81f0e0">TJFLAG_ACCURATEDCT</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Use the most accurate DCT/IDCT algorithm available in the underlying codec.  <a href="#gacb233cfd722d66d1ccbf48a7de81f0e0"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga0f6dbd18adf38b7d46ac547f0f4d562c">TJ_NUMXOP</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of transform operations.  <a href="#ga0f6dbd18adf38b7d46ac547f0f4d562c"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00">TJXOPT_PERFECT</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">This option will cause <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a> to return an error if the transform is not perfect.  <a href="#ga50e03cb5ed115330e212417429600b00"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga319826b7eb1583c0595bbe7b95428709">TJXOPT_TRIM</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">This option will cause <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a> to discard any partial MCU blocks that cannot be transformed.  <a href="#ga319826b7eb1583c0595bbe7b95428709"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga9c771a757fc1294add611906b89ab2d2">TJXOPT_CROP</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">This option will enable lossless cropping.  <a href="#ga9c771a757fc1294add611906b89ab2d2"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga3acee7b48ade1b99e5588736007c2589">TJXOPT_GRAY</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">This option will discard the color data in the input image and produce a grayscale output image.  <a href="#ga3acee7b48ade1b99e5588736007c2589"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gafbf992bbf6e006705886333703ffab31">TJXOPT_NOOUTPUT</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">This option will prevent <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a> from outputting a JPEG image for this particular transform (this can be used in conjunction with a custom filter to capture the transformed DCT coefficients without transcoding them.)  <a href="#gafbf992bbf6e006705886333703ffab31"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga0aba955473315e405295d978f0c16511">TJPAD</a>(width)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Pad the given width to the nearest 32-bit boundary.  <a href="#ga0aba955473315e405295d978f0c16511"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df">TJSCALED</a>(dimension, scalingFactor)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the scaled value of <code>dimension</code> using the given scaling factor.  <a href="#ga84878bb65404204743aa18cac02781df"></a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="typedef-members"></a>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjscalingfactor.html">tjscalingfactor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Scaling factor.  <a href="structtjscalingfactor.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjregion.html">tjregion</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cropping region.  <a href="structtjregion.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjtransform.html">tjtransform</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Lossless transform.  <a href="structtjtransform.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga5ef3d169162ce77ce348e292a0b7477c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga5ef3d169162ce77ce348e292a0b7477c">TJ_NUMSAMP</a></td></tr>
+<tr class="memdesc:ga5ef3d169162ce77ce348e292a0b7477c"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of chrominance subsampling options.  <a href="#ga5ef3d169162ce77ce348e292a0b7477c">More...</a><br/></td></tr>
+<tr class="separator:ga5ef3d169162ce77ce348e292a0b7477c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7010a4402f54a45ba822ad8675a4655e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga7010a4402f54a45ba822ad8675a4655e">TJ_NUMPF</a></td></tr>
+<tr class="memdesc:ga7010a4402f54a45ba822ad8675a4655e"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of pixel formats.  <a href="#ga7010a4402f54a45ba822ad8675a4655e">More...</a><br/></td></tr>
+<tr class="separator:ga7010a4402f54a45ba822ad8675a4655e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga72ecf4ebe6eb702d3c6f5ca27455e1ec"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec">TJFLAG_BOTTOMUP</a></td></tr>
+<tr class="memdesc:ga72ecf4ebe6eb702d3c6f5ca27455e1ec"><td class="mdescLeft">&#160;</td><td class="mdescRight">The uncompressed source/destination image is stored in bottom-up (Windows, OpenGL) order, not top-down (X11) order.  <a href="#ga72ecf4ebe6eb702d3c6f5ca27455e1ec">More...</a><br/></td></tr>
+<tr class="separator:ga72ecf4ebe6eb702d3c6f5ca27455e1ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4e872f11c82f241736fa8297920f24e5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga4e872f11c82f241736fa8297920f24e5">TJFLAG_FORCEMMX</a></td></tr>
+<tr class="memdesc:ga4e872f11c82f241736fa8297920f24e5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use MMX code (if the underlying codec supports it.)  <a href="#ga4e872f11c82f241736fa8297920f24e5">More...</a><br/></td></tr>
+<tr class="separator:ga4e872f11c82f241736fa8297920f24e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae17e63189e8cd730feed3efbd2454f38"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gae17e63189e8cd730feed3efbd2454f38">TJFLAG_FORCESSE</a></td></tr>
+<tr class="memdesc:gae17e63189e8cd730feed3efbd2454f38"><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use SSE code (if the underlying codec supports it.)  <a href="#gae17e63189e8cd730feed3efbd2454f38">More...</a><br/></td></tr>
+<tr class="separator:gae17e63189e8cd730feed3efbd2454f38"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8cf0bca96ea4d472563f4b0ebf8c48e7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga8cf0bca96ea4d472563f4b0ebf8c48e7">TJFLAG_FORCESSE2</a></td></tr>
+<tr class="memdesc:ga8cf0bca96ea4d472563f4b0ebf8c48e7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use SSE2 code (if the underlying codec supports it.)  <a href="#ga8cf0bca96ea4d472563f4b0ebf8c48e7">More...</a><br/></td></tr>
+<tr class="separator:ga8cf0bca96ea4d472563f4b0ebf8c48e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf9d49066633404da4386d70820295dd2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gaf9d49066633404da4386d70820295dd2">TJFLAG_FORCESSE3</a></td></tr>
+<tr class="memdesc:gaf9d49066633404da4386d70820295dd2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use SSE3 code (if the underlying codec supports it.)  <a href="#gaf9d49066633404da4386d70820295dd2">More...</a><br/></td></tr>
+<tr class="separator:gaf9d49066633404da4386d70820295dd2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4ee4506c81177a06f77e2504a22efd2d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga4ee4506c81177a06f77e2504a22efd2d">TJFLAG_FASTUPSAMPLE</a></td></tr>
+<tr class="memdesc:ga4ee4506c81177a06f77e2504a22efd2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">When decompressing an image that was compressed using chrominance subsampling, use the fastest chrominance upsampling algorithm available in the underlying codec.  <a href="#ga4ee4506c81177a06f77e2504a22efd2d">More...</a><br/></td></tr>
+<tr class="separator:ga4ee4506c81177a06f77e2504a22efd2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8808d403c68b62aaa58a4c1e58e98963"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963">TJFLAG_NOREALLOC</a></td></tr>
+<tr class="memdesc:ga8808d403c68b62aaa58a4c1e58e98963"><td class="mdescLeft">&#160;</td><td class="mdescRight">Disable buffer (re)allocation.  <a href="#ga8808d403c68b62aaa58a4c1e58e98963">More...</a><br/></td></tr>
+<tr class="separator:ga8808d403c68b62aaa58a4c1e58e98963"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaabce235db80d3f698b27f36cbd453da2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gaabce235db80d3f698b27f36cbd453da2">TJFLAG_FASTDCT</a></td></tr>
+<tr class="memdesc:gaabce235db80d3f698b27f36cbd453da2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Use the fastest DCT/IDCT algorithm available in the underlying codec.  <a href="#gaabce235db80d3f698b27f36cbd453da2">More...</a><br/></td></tr>
+<tr class="separator:gaabce235db80d3f698b27f36cbd453da2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacb233cfd722d66d1ccbf48a7de81f0e0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gacb233cfd722d66d1ccbf48a7de81f0e0">TJFLAG_ACCURATEDCT</a></td></tr>
+<tr class="memdesc:gacb233cfd722d66d1ccbf48a7de81f0e0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Use the most accurate DCT/IDCT algorithm available in the underlying codec.  <a href="#gacb233cfd722d66d1ccbf48a7de81f0e0">More...</a><br/></td></tr>
+<tr class="separator:gacb233cfd722d66d1ccbf48a7de81f0e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0f6dbd18adf38b7d46ac547f0f4d562c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga0f6dbd18adf38b7d46ac547f0f4d562c">TJ_NUMXOP</a></td></tr>
+<tr class="memdesc:ga0f6dbd18adf38b7d46ac547f0f4d562c"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of transform operations.  <a href="#ga0f6dbd18adf38b7d46ac547f0f4d562c">More...</a><br/></td></tr>
+<tr class="separator:ga0f6dbd18adf38b7d46ac547f0f4d562c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga50e03cb5ed115330e212417429600b00"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00">TJXOPT_PERFECT</a></td></tr>
+<tr class="memdesc:ga50e03cb5ed115330e212417429600b00"><td class="mdescLeft">&#160;</td><td class="mdescRight">This option will cause <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a> to return an error if the transform is not perfect.  <a href="#ga50e03cb5ed115330e212417429600b00">More...</a><br/></td></tr>
+<tr class="separator:ga50e03cb5ed115330e212417429600b00"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga319826b7eb1583c0595bbe7b95428709"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga319826b7eb1583c0595bbe7b95428709">TJXOPT_TRIM</a></td></tr>
+<tr class="memdesc:ga319826b7eb1583c0595bbe7b95428709"><td class="mdescLeft">&#160;</td><td class="mdescRight">This option will cause <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a> to discard any partial MCU blocks that cannot be transformed.  <a href="#ga319826b7eb1583c0595bbe7b95428709">More...</a><br/></td></tr>
+<tr class="separator:ga319826b7eb1583c0595bbe7b95428709"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9c771a757fc1294add611906b89ab2d2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga9c771a757fc1294add611906b89ab2d2">TJXOPT_CROP</a></td></tr>
+<tr class="memdesc:ga9c771a757fc1294add611906b89ab2d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">This option will enable lossless cropping.  <a href="#ga9c771a757fc1294add611906b89ab2d2">More...</a><br/></td></tr>
+<tr class="separator:ga9c771a757fc1294add611906b89ab2d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3acee7b48ade1b99e5588736007c2589"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga3acee7b48ade1b99e5588736007c2589">TJXOPT_GRAY</a></td></tr>
+<tr class="memdesc:ga3acee7b48ade1b99e5588736007c2589"><td class="mdescLeft">&#160;</td><td class="mdescRight">This option will discard the color data in the input image and produce a grayscale output image.  <a href="#ga3acee7b48ade1b99e5588736007c2589">More...</a><br/></td></tr>
+<tr class="separator:ga3acee7b48ade1b99e5588736007c2589"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafbf992bbf6e006705886333703ffab31"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gafbf992bbf6e006705886333703ffab31">TJXOPT_NOOUTPUT</a></td></tr>
+<tr class="memdesc:gafbf992bbf6e006705886333703ffab31"><td class="mdescLeft">&#160;</td><td class="mdescRight">This option will prevent <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a> from outputting a JPEG image for this particular transform (this can be used in conjunction with a custom filter to capture the transformed DCT coefficients without transcoding them.)  <a href="#gafbf992bbf6e006705886333703ffab31">More...</a><br/></td></tr>
+<tr class="separator:gafbf992bbf6e006705886333703ffab31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0aba955473315e405295d978f0c16511"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga0aba955473315e405295d978f0c16511">TJPAD</a>(width)</td></tr>
+<tr class="memdesc:ga0aba955473315e405295d978f0c16511"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pad the given width to the nearest 32-bit boundary.  <a href="#ga0aba955473315e405295d978f0c16511">More...</a><br/></td></tr>
+<tr class="separator:ga0aba955473315e405295d978f0c16511"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga84878bb65404204743aa18cac02781df"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df">TJSCALED</a>(dimension, scalingFactor)</td></tr>
+<tr class="memdesc:ga84878bb65404204743aa18cac02781df"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the scaled value of <code>dimension</code> using the given scaling factor.  <a href="#ga84878bb65404204743aa18cac02781df">More...</a><br/></td></tr>
+<tr class="separator:ga84878bb65404204743aa18cac02781df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
 Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structtjtransform.html">tjtransform</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gaa29f3189c41be12ec5dee7caec318a31">tjtransform</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Lossless transform.  <a href="#gaa29f3189c41be12ec5dee7caec318a31"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">TurboJPEG instance handle.  <a href="#ga758d2634ecb4949de7815cba621f5763"></a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="enum-members"></a>
+<tr class="memitem:gaa29f3189c41be12ec5dee7caec318a31"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structtjtransform.html">tjtransform</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gaa29f3189c41be12ec5dee7caec318a31">tjtransform</a></td></tr>
+<tr class="memdesc:gaa29f3189c41be12ec5dee7caec318a31"><td class="mdescLeft">&#160;</td><td class="mdescRight">Lossless transform.  <a href="#gaa29f3189c41be12ec5dee7caec318a31">More...</a><br/></td></tr>
+<tr class="separator:gaa29f3189c41be12ec5dee7caec318a31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga758d2634ecb4949de7815cba621f5763"><td class="memItemLeft" align="right" valign="top">typedef void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a></td></tr>
+<tr class="memdesc:ga758d2634ecb4949de7815cba621f5763"><td class="mdescLeft">&#160;</td><td class="mdescRight">TurboJPEG instance handle.  <a href="#ga758d2634ecb4949de7815cba621f5763">More...</a><br/></td></tr>
+<tr class="separator:ga758d2634ecb4949de7815cba621f5763"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
 Enumerations</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074">TJSAMP</a> { <br/>
+<tr class="memitem:ga1d047060ea80bb9820d540bb928e9074"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074">TJSAMP</a> { <br/>
 &#160;&#160;<a class="el" href="group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3">TJSAMP_444</a>, 
 <a class="el" href="group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a136130902cc578f11f32429b59368404">TJSAMP_422</a>, 
 <a class="el" href="group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a63085dbf683cfe39e513cdb6343e3737">TJSAMP_420</a>, 
@@ -130,8 +181,9 @@ Enumerations</h2></td></tr>
 &#160;&#160;<a class="el" href="group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074accf740e6f3aa6ba20ba922cad13cb974">TJSAMP_440</a>
 <br/>
  }</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Chrominance subsampling options.  <a href="group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a">TJPF</a> { <br/>
+<tr class="memdesc:ga1d047060ea80bb9820d540bb928e9074"><td class="mdescLeft">&#160;</td><td class="mdescRight">Chrominance subsampling options.  <a href="group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074">More...</a><br/></td></tr>
+<tr class="separator:ga1d047060ea80bb9820d540bb928e9074"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac916144e26c3817ac514e64ae5d12e2a"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a">TJPF</a> { <br/>
 &#160;&#160;<a class="el" href="group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7ce93230bff449518ce387c17e6ed37c">TJPF_RGB</a>, 
 <a class="el" href="group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aab10624437fb8ef495a0b153e65749839">TJPF_BGR</a>, 
 <a class="el" href="group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa83973bebb7e2dc6fa8bae89ff3f42e01">TJPF_RGBX</a>, 
@@ -147,8 +199,9 @@ Enumerations</h2></td></tr>
 <a class="el" href="group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aae8f846ed9d9de99b6e1dfe448848765c">TJPF_ARGB</a>
 <br/>
  }</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Pixel formats.  <a href="group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866">TJXOP</a> { <br/>
+<tr class="memdesc:gac916144e26c3817ac514e64ae5d12e2a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pixel formats.  <a href="group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a">More...</a><br/></td></tr>
+<tr class="separator:gac916144e26c3817ac514e64ae5d12e2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2de531af4e7e6c4f124908376b354866"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866">TJXOP</a> { <br/>
 &#160;&#160;<a class="el" href="group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aad88c0366cd3f7d0eac9d7a3fa1c2c27">TJXOP_NONE</a>, 
 <a class="el" href="group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aa0df69776caa30f0fa28e26332d311ce">TJXOP_HFLIP</a>, 
 <a class="el" href="group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a324eddfbec53b7e691f61e56929d0d5d">TJXOP_VFLIP</a>, 
@@ -160,61 +213,86 @@ Enumerations</h2></td></tr>
 <a class="el" href="group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a3064ee5dfb7f032df332818587567a08">TJXOP_ROT270</a>
 <br/>
  }</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Transform operations for <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a>  <a href="group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="func-members"></a>
+<tr class="memdesc:ga2de531af4e7e6c4f124908376b354866"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transform operations for <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a>  <a href="group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866">More...</a><br/></td></tr>
+<tr class="separator:ga2de531af4e7e6c4f124908376b354866"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
 Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">DLLEXPORT <a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga3d10c47fbe4a2489a2b30c931551d01a">tjInitCompress</a> (void)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a TurboJPEG compressor instance.  <a href="#ga3d10c47fbe4a2489a2b30c931551d01a"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">DLLEXPORT int DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gaba62b7a98f960839b588579898495cf2">tjCompress2</a> (<a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> handle, unsigned char *srcBuf, int width, int pitch, int height, int pixelFormat, unsigned char **jpegBuf, unsigned long *jpegSize, int jpegSubsamp, int jpegQual, int flags)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Compress an RGB or grayscale image into a JPEG image.  <a href="#gaba62b7a98f960839b588579898495cf2"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">DLLEXPORT unsigned long DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gaccc5bca7f12fcdcc302e6e1c6d4b311b">tjBufSize</a> (int width, int height, int jpegSubsamp)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum size of the buffer (in bytes) required to hold a JPEG image with the given parameters.  <a href="#gaccc5bca7f12fcdcc302e6e1c6d4b311b"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">DLLEXPORT unsigned long DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga9d0cb06fd5052d21b6f2b382db8b219c">tjBufSizeYUV</a> (int width, int height, int subsamp)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">The size of the buffer (in bytes) required to hold a YUV planar image with the given parameters.  <a href="#ga9d0cb06fd5052d21b6f2b382db8b219c"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">DLLEXPORT int DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga0fa4e7b1943687c6a0c0304529c55d35">tjEncodeYUV2</a> (<a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> handle, unsigned char *srcBuf, int width, int pitch, int height, int pixelFormat, unsigned char *dstBuf, int subsamp, int flags)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Encode an RGB or grayscale image into a YUV planar image.  <a href="#ga0fa4e7b1943687c6a0c0304529c55d35"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">DLLEXPORT <a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gae5408179d041e2a2f7199c8283cf649e">tjInitDecompress</a> (void)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a TurboJPEG decompressor instance.  <a href="#gae5408179d041e2a2f7199c8283cf649e"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">DLLEXPORT int DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gac5675fceb7997b385516cdffdb34e6aa">tjDecompressHeader2</a> (<a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> handle, unsigned char *jpegBuf, unsigned long jpegSize, int *width, int *height, int *jpegSubsamp)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve information about a JPEG image without decompressing it.  <a href="#gac5675fceb7997b385516cdffdb34e6aa"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">DLLEXPORT <a class="el" href="structtjscalingfactor.html">tjscalingfactor</a> *DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga6449044b9af402999ccf52f401333be8">tjGetScalingFactors</a> (int *numscalingfactors)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a list of fractional scaling factors that the JPEG decompressor in this implementation of TurboJPEG supports.  <a href="#ga6449044b9af402999ccf52f401333be8"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">DLLEXPORT int DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gada69cc6443d1bb493b40f1626259e5e9">tjDecompress2</a> (<a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> handle, unsigned char *jpegBuf, unsigned long jpegSize, unsigned char *dstBuf, int width, int pitch, int height, int pixelFormat, int flags)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Decompress a JPEG image to an RGB or grayscale image.  <a href="#gada69cc6443d1bb493b40f1626259e5e9"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">DLLEXPORT int DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gad7810af095624a4016e72957a50f77d8">tjDecompressToYUV</a> (<a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> handle, unsigned char *jpegBuf, unsigned long jpegSize, unsigned char *dstBuf, int flags)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Decompress a JPEG image to a YUV planar image.  <a href="#gad7810af095624a4016e72957a50f77d8"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">DLLEXPORT <a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga3155b775bfbac9dbba869b95a0367902">tjInitTransform</a> (void)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a new TurboJPEG transformer instance.  <a href="#ga3155b775bfbac9dbba869b95a0367902"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">DLLEXPORT int DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616">tjTransform</a> (<a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> handle, unsigned char *jpegBuf, unsigned long jpegSize, int n, unsigned char **dstBufs, unsigned long *dstSizes, <a class="el" href="structtjtransform.html">tjtransform</a> *transforms, int flags)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Losslessly transform a JPEG image into another JPEG image.  <a href="#gae403193ceb4aafb7e0f56ab587b48616"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">DLLEXPORT int DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga674adee917b95ad4a896f1ba39e12540">tjDestroy</a> (<a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> handle)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Destroy a TurboJPEG compressor, decompressor, or transformer instance.  <a href="#ga674adee917b95ad4a896f1ba39e12540"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">DLLEXPORT unsigned char *DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga5c9234bda6d993cdaffdd89bf81a00ff">tjAlloc</a> (int bytes)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocate an image buffer for use with TurboJPEG.  <a href="#ga5c9234bda6d993cdaffdd89bf81a00ff"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">DLLEXPORT void DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga8c4a1231dc06a450514c835f6471f137">tjFree</a> (unsigned char *buffer)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Free an image buffer previously allocated by TurboJPEG.  <a href="#ga8c4a1231dc06a450514c835f6471f137"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">DLLEXPORT char *DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf">tjGetErrorStr</a> (void)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a descriptive error message explaining why the last command failed.  <a href="#ga9af79c908ec131b1ae8d52fe40375abf"></a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="var-members"></a>
+<tr class="memitem:ga3d10c47fbe4a2489a2b30c931551d01a"><td class="memItemLeft" align="right" valign="top">DLLEXPORT <a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga3d10c47fbe4a2489a2b30c931551d01a">tjInitCompress</a> (void)</td></tr>
+<tr class="memdesc:ga3d10c47fbe4a2489a2b30c931551d01a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a TurboJPEG compressor instance.  <a href="#ga3d10c47fbe4a2489a2b30c931551d01a">More...</a><br/></td></tr>
+<tr class="separator:ga3d10c47fbe4a2489a2b30c931551d01a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaba62b7a98f960839b588579898495cf2"><td class="memItemLeft" align="right" valign="top">DLLEXPORT int DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gaba62b7a98f960839b588579898495cf2">tjCompress2</a> (<a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> handle, unsigned char *srcBuf, int width, int pitch, int height, int pixelFormat, unsigned char **jpegBuf, unsigned long *jpegSize, int jpegSubsamp, int jpegQual, int flags)</td></tr>
+<tr class="memdesc:gaba62b7a98f960839b588579898495cf2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compress an RGB or grayscale image into a JPEG image.  <a href="#gaba62b7a98f960839b588579898495cf2">More...</a><br/></td></tr>
+<tr class="separator:gaba62b7a98f960839b588579898495cf2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaccc5bca7f12fcdcc302e6e1c6d4b311b"><td class="memItemLeft" align="right" valign="top">DLLEXPORT unsigned long DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gaccc5bca7f12fcdcc302e6e1c6d4b311b">tjBufSize</a> (int width, int height, int jpegSubsamp)</td></tr>
+<tr class="memdesc:gaccc5bca7f12fcdcc302e6e1c6d4b311b"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum size of the buffer (in bytes) required to hold a JPEG image with the given parameters.  <a href="#gaccc5bca7f12fcdcc302e6e1c6d4b311b">More...</a><br/></td></tr>
+<tr class="separator:gaccc5bca7f12fcdcc302e6e1c6d4b311b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9d0cb06fd5052d21b6f2b382db8b219c"><td class="memItemLeft" align="right" valign="top">DLLEXPORT unsigned long DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga9d0cb06fd5052d21b6f2b382db8b219c">tjBufSizeYUV</a> (int width, int height, int subsamp)</td></tr>
+<tr class="memdesc:ga9d0cb06fd5052d21b6f2b382db8b219c"><td class="mdescLeft">&#160;</td><td class="mdescRight">The size of the buffer (in bytes) required to hold a YUV planar image with the given parameters.  <a href="#ga9d0cb06fd5052d21b6f2b382db8b219c">More...</a><br/></td></tr>
+<tr class="separator:ga9d0cb06fd5052d21b6f2b382db8b219c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0fa4e7b1943687c6a0c0304529c55d35"><td class="memItemLeft" align="right" valign="top">DLLEXPORT int DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga0fa4e7b1943687c6a0c0304529c55d35">tjEncodeYUV2</a> (<a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> handle, unsigned char *srcBuf, int width, int pitch, int height, int pixelFormat, unsigned char *dstBuf, int subsamp, int flags)</td></tr>
+<tr class="memdesc:ga0fa4e7b1943687c6a0c0304529c55d35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encode an RGB or grayscale image into a YUV planar image.  <a href="#ga0fa4e7b1943687c6a0c0304529c55d35">More...</a><br/></td></tr>
+<tr class="separator:ga0fa4e7b1943687c6a0c0304529c55d35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae5408179d041e2a2f7199c8283cf649e"><td class="memItemLeft" align="right" valign="top">DLLEXPORT <a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gae5408179d041e2a2f7199c8283cf649e">tjInitDecompress</a> (void)</td></tr>
+<tr class="memdesc:gae5408179d041e2a2f7199c8283cf649e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a TurboJPEG decompressor instance.  <a href="#gae5408179d041e2a2f7199c8283cf649e">More...</a><br/></td></tr>
+<tr class="separator:gae5408179d041e2a2f7199c8283cf649e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac5675fceb7997b385516cdffdb34e6aa"><td class="memItemLeft" align="right" valign="top">DLLEXPORT int DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gac5675fceb7997b385516cdffdb34e6aa">tjDecompressHeader2</a> (<a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> handle, unsigned char *jpegBuf, unsigned long jpegSize, int *width, int *height, int *jpegSubsamp)</td></tr>
+<tr class="memdesc:gac5675fceb7997b385516cdffdb34e6aa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve information about a JPEG image without decompressing it.  <a href="#gac5675fceb7997b385516cdffdb34e6aa">More...</a><br/></td></tr>
+<tr class="separator:gac5675fceb7997b385516cdffdb34e6aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6449044b9af402999ccf52f401333be8"><td class="memItemLeft" align="right" valign="top">DLLEXPORT <a class="el" href="structtjscalingfactor.html">tjscalingfactor</a> *DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga6449044b9af402999ccf52f401333be8">tjGetScalingFactors</a> (int *numscalingfactors)</td></tr>
+<tr class="memdesc:ga6449044b9af402999ccf52f401333be8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a list of fractional scaling factors that the JPEG decompressor in this implementation of TurboJPEG supports.  <a href="#ga6449044b9af402999ccf52f401333be8">More...</a><br/></td></tr>
+<tr class="separator:ga6449044b9af402999ccf52f401333be8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gada69cc6443d1bb493b40f1626259e5e9"><td class="memItemLeft" align="right" valign="top">DLLEXPORT int DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gada69cc6443d1bb493b40f1626259e5e9">tjDecompress2</a> (<a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> handle, unsigned char *jpegBuf, unsigned long jpegSize, unsigned char *dstBuf, int width, int pitch, int height, int pixelFormat, int flags)</td></tr>
+<tr class="memdesc:gada69cc6443d1bb493b40f1626259e5e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decompress a JPEG image to an RGB or grayscale image.  <a href="#gada69cc6443d1bb493b40f1626259e5e9">More...</a><br/></td></tr>
+<tr class="separator:gada69cc6443d1bb493b40f1626259e5e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad7810af095624a4016e72957a50f77d8"><td class="memItemLeft" align="right" valign="top">DLLEXPORT int DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gad7810af095624a4016e72957a50f77d8">tjDecompressToYUV</a> (<a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> handle, unsigned char *jpegBuf, unsigned long jpegSize, unsigned char *dstBuf, int flags)</td></tr>
+<tr class="memdesc:gad7810af095624a4016e72957a50f77d8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decompress a JPEG image to a YUV planar image.  <a href="#gad7810af095624a4016e72957a50f77d8">More...</a><br/></td></tr>
+<tr class="separator:gad7810af095624a4016e72957a50f77d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3155b775bfbac9dbba869b95a0367902"><td class="memItemLeft" align="right" valign="top">DLLEXPORT <a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga3155b775bfbac9dbba869b95a0367902">tjInitTransform</a> (void)</td></tr>
+<tr class="memdesc:ga3155b775bfbac9dbba869b95a0367902"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a new TurboJPEG transformer instance.  <a href="#ga3155b775bfbac9dbba869b95a0367902">More...</a><br/></td></tr>
+<tr class="separator:ga3155b775bfbac9dbba869b95a0367902"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae403193ceb4aafb7e0f56ab587b48616"><td class="memItemLeft" align="right" valign="top">DLLEXPORT int DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616">tjTransform</a> (<a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> handle, unsigned char *jpegBuf, unsigned long jpegSize, int n, unsigned char **dstBufs, unsigned long *dstSizes, <a class="el" href="structtjtransform.html">tjtransform</a> *transforms, int flags)</td></tr>
+<tr class="memdesc:gae403193ceb4aafb7e0f56ab587b48616"><td class="mdescLeft">&#160;</td><td class="mdescRight">Losslessly transform a JPEG image into another JPEG image.  <a href="#gae403193ceb4aafb7e0f56ab587b48616">More...</a><br/></td></tr>
+<tr class="separator:gae403193ceb4aafb7e0f56ab587b48616"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga674adee917b95ad4a896f1ba39e12540"><td class="memItemLeft" align="right" valign="top">DLLEXPORT int DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga674adee917b95ad4a896f1ba39e12540">tjDestroy</a> (<a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a> handle)</td></tr>
+<tr class="memdesc:ga674adee917b95ad4a896f1ba39e12540"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destroy a TurboJPEG compressor, decompressor, or transformer instance.  <a href="#ga674adee917b95ad4a896f1ba39e12540">More...</a><br/></td></tr>
+<tr class="separator:ga674adee917b95ad4a896f1ba39e12540"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5c9234bda6d993cdaffdd89bf81a00ff"><td class="memItemLeft" align="right" valign="top">DLLEXPORT unsigned char *DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga5c9234bda6d993cdaffdd89bf81a00ff">tjAlloc</a> (int bytes)</td></tr>
+<tr class="memdesc:ga5c9234bda6d993cdaffdd89bf81a00ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocate an image buffer for use with TurboJPEG.  <a href="#ga5c9234bda6d993cdaffdd89bf81a00ff">More...</a><br/></td></tr>
+<tr class="separator:ga5c9234bda6d993cdaffdd89bf81a00ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8c4a1231dc06a450514c835f6471f137"><td class="memItemLeft" align="right" valign="top">DLLEXPORT void DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga8c4a1231dc06a450514c835f6471f137">tjFree</a> (unsigned char *buffer)</td></tr>
+<tr class="memdesc:ga8c4a1231dc06a450514c835f6471f137"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free an image buffer previously allocated by TurboJPEG.  <a href="#ga8c4a1231dc06a450514c835f6471f137">More...</a><br/></td></tr>
+<tr class="separator:ga8c4a1231dc06a450514c835f6471f137"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9af79c908ec131b1ae8d52fe40375abf"><td class="memItemLeft" align="right" valign="top">DLLEXPORT char *DLLCALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf">tjGetErrorStr</a> (void)</td></tr>
+<tr class="memdesc:ga9af79c908ec131b1ae8d52fe40375abf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a descriptive error message explaining why the last command failed.  <a href="#ga9af79c908ec131b1ae8d52fe40375abf">More...</a><br/></td></tr>
+<tr class="separator:ga9af79c908ec131b1ae8d52fe40375abf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
 Variables</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c">tjMCUWidth</a> [TJ_NUMSAMP]</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">MCU block width (in pixels) for a given level of chrominance subsampling.  <a href="#ga9e61e7cd47a15a173283ba94e781308c"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf">tjMCUHeight</a> [TJ_NUMSAMP]</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">MCU block height (in pixels) for a given level of chrominance subsampling.  <a href="#gabd247bb9fecb393eca57366feb8327bf"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gadd9b446742ac8a3923f7992c7988fea8">tjRedOffset</a> [TJ_NUMPF]</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Red offset (in bytes) for a given pixel format.  <a href="#gadd9b446742ac8a3923f7992c7988fea8"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga82d6e35da441112a411da41923c0ba2f">tjGreenOffset</a> [TJ_NUMPF]</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Green offset (in bytes) for a given pixel format.  <a href="#ga82d6e35da441112a411da41923c0ba2f"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga84e2e35d3f08025f976ec1ec53693dea">tjBlueOffset</a> [TJ_NUMPF]</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Blue offset (in bytes) for a given pixel format.  <a href="#ga84e2e35d3f08025f976ec1ec53693dea"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c">tjPixelSize</a> [TJ_NUMPF]</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Pixel size (in bytes) for a given pixel format.  <a href="#gad77cf8fe5b2bfd3cb3f53098146abb4c"></a><br/></td></tr>
+<tr class="memitem:ga9e61e7cd47a15a173283ba94e781308c"><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c">tjMCUWidth</a> [<a class="el" href="group___turbo_j_p_e_g.html#ga5ef3d169162ce77ce348e292a0b7477c">TJ_NUMSAMP</a>]</td></tr>
+<tr class="memdesc:ga9e61e7cd47a15a173283ba94e781308c"><td class="mdescLeft">&#160;</td><td class="mdescRight">MCU block width (in pixels) for a given level of chrominance subsampling.  <a href="#ga9e61e7cd47a15a173283ba94e781308c">More...</a><br/></td></tr>
+<tr class="separator:ga9e61e7cd47a15a173283ba94e781308c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabd247bb9fecb393eca57366feb8327bf"><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf">tjMCUHeight</a> [<a class="el" href="group___turbo_j_p_e_g.html#ga5ef3d169162ce77ce348e292a0b7477c">TJ_NUMSAMP</a>]</td></tr>
+<tr class="memdesc:gabd247bb9fecb393eca57366feb8327bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">MCU block height (in pixels) for a given level of chrominance subsampling.  <a href="#gabd247bb9fecb393eca57366feb8327bf">More...</a><br/></td></tr>
+<tr class="separator:gabd247bb9fecb393eca57366feb8327bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadd9b446742ac8a3923f7992c7988fea8"><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gadd9b446742ac8a3923f7992c7988fea8">tjRedOffset</a> [<a class="el" href="group___turbo_j_p_e_g.html#ga7010a4402f54a45ba822ad8675a4655e">TJ_NUMPF</a>]</td></tr>
+<tr class="memdesc:gadd9b446742ac8a3923f7992c7988fea8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Red offset (in bytes) for a given pixel format.  <a href="#gadd9b446742ac8a3923f7992c7988fea8">More...</a><br/></td></tr>
+<tr class="separator:gadd9b446742ac8a3923f7992c7988fea8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga82d6e35da441112a411da41923c0ba2f"><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga82d6e35da441112a411da41923c0ba2f">tjGreenOffset</a> [<a class="el" href="group___turbo_j_p_e_g.html#ga7010a4402f54a45ba822ad8675a4655e">TJ_NUMPF</a>]</td></tr>
+<tr class="memdesc:ga82d6e35da441112a411da41923c0ba2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Green offset (in bytes) for a given pixel format.  <a href="#ga82d6e35da441112a411da41923c0ba2f">More...</a><br/></td></tr>
+<tr class="separator:ga82d6e35da441112a411da41923c0ba2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga84e2e35d3f08025f976ec1ec53693dea"><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga84e2e35d3f08025f976ec1ec53693dea">tjBlueOffset</a> [<a class="el" href="group___turbo_j_p_e_g.html#ga7010a4402f54a45ba822ad8675a4655e">TJ_NUMPF</a>]</td></tr>
+<tr class="memdesc:ga84e2e35d3f08025f976ec1ec53693dea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Blue offset (in bytes) for a given pixel format.  <a href="#ga84e2e35d3f08025f976ec1ec53693dea">More...</a><br/></td></tr>
+<tr class="separator:ga84e2e35d3f08025f976ec1ec53693dea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad77cf8fe5b2bfd3cb3f53098146abb4c"><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c">tjPixelSize</a> [<a class="el" href="group___turbo_j_p_e_g.html#ga7010a4402f54a45ba822ad8675a4655e">TJ_NUMPF</a>]</td></tr>
+<tr class="memdesc:gad77cf8fe5b2bfd3cb3f53098146abb4c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pixel size (in bytes) for a given pixel format.  <a href="#gad77cf8fe5b2bfd3cb3f53098146abb4c">More...</a><br/></td></tr>
+<tr class="separator:gad77cf8fe5b2bfd3cb3f53098146abb4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <p>TurboJPEG API. </p>
 <p>This API provides an interface for generating, decoding, and transforming planar YUV and JPEG images in memory. </p>
-<hr/><h2>Define Documentation</h2>
-<a class="anchor" id="ga7010a4402f54a45ba822ad8675a4655e"></a><!-- doxytag: member="turbojpeg.h::TJ_NUMPF" ref="ga7010a4402f54a45ba822ad8675a4655e" args="" -->
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ga7010a4402f54a45ba822ad8675a4655e"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -222,14 +300,13 @@ Variables</h2></td></tr>
           <td class="memname">#define TJ_NUMPF</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>The number of pixel formats. </p>
 
 </div>
 </div>
-<a class="anchor" id="ga5ef3d169162ce77ce348e292a0b7477c"></a><!-- doxytag: member="turbojpeg.h::TJ_NUMSAMP" ref="ga5ef3d169162ce77ce348e292a0b7477c" args="" -->
+<a class="anchor" id="ga5ef3d169162ce77ce348e292a0b7477c"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -237,14 +314,13 @@ Variables</h2></td></tr>
           <td class="memname">#define TJ_NUMSAMP</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>The number of chrominance subsampling options. </p>
 
 </div>
 </div>
-<a class="anchor" id="ga0f6dbd18adf38b7d46ac547f0f4d562c"></a><!-- doxytag: member="turbojpeg.h::TJ_NUMXOP" ref="ga0f6dbd18adf38b7d46ac547f0f4d562c" args="" -->
+<a class="anchor" id="ga0f6dbd18adf38b7d46ac547f0f4d562c"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -252,14 +328,13 @@ Variables</h2></td></tr>
           <td class="memname">#define TJ_NUMXOP</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
-<p>Number of transform operations. </p>
+<p>The number of transform operations. </p>
 
 </div>
 </div>
-<a class="anchor" id="gacb233cfd722d66d1ccbf48a7de81f0e0"></a><!-- doxytag: member="turbojpeg.h::TJFLAG_ACCURATEDCT" ref="gacb233cfd722d66d1ccbf48a7de81f0e0" args="" -->
+<a class="anchor" id="gacb233cfd722d66d1ccbf48a7de81f0e0"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -267,15 +342,14 @@ Variables</h2></td></tr>
           <td class="memname">#define TJFLAG_ACCURATEDCT</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Use the most accurate DCT/IDCT algorithm available in the underlying codec. </p>
-<p>The default if this flag is not specified is implementation-specific. The libjpeg implementation, for example, uses the fast algorithm by default when compressing, because this has been shown to have only a very slight effect on accuracy, but it uses the accurate algorithm when decompressing, because this has been shown to have a larger effect. </p>
+<p>The default if this flag is not specified is implementation-specific. For example, the implementation of TurboJPEG for libjpeg[-turbo] uses the fast algorithm by default when compressing, because this has been shown to have only a very slight effect on accuracy, but it uses the accurate algorithm when decompressing, because this has been shown to have a larger effect. </p>
 
 </div>
 </div>
-<a class="anchor" id="ga72ecf4ebe6eb702d3c6f5ca27455e1ec"></a><!-- doxytag: member="turbojpeg.h::TJFLAG_BOTTOMUP" ref="ga72ecf4ebe6eb702d3c6f5ca27455e1ec" args="" -->
+<a class="anchor" id="ga72ecf4ebe6eb702d3c6f5ca27455e1ec"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -283,14 +357,13 @@ Variables</h2></td></tr>
           <td class="memname">#define TJFLAG_BOTTOMUP</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>The uncompressed source/destination image is stored in bottom-up (Windows, OpenGL) order, not top-down (X11) order. </p>
 
 </div>
 </div>
-<a class="anchor" id="gaabce235db80d3f698b27f36cbd453da2"></a><!-- doxytag: member="turbojpeg.h::TJFLAG_FASTDCT" ref="gaabce235db80d3f698b27f36cbd453da2" args="" -->
+<a class="anchor" id="gaabce235db80d3f698b27f36cbd453da2"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -298,15 +371,14 @@ Variables</h2></td></tr>
           <td class="memname">#define TJFLAG_FASTDCT</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Use the fastest DCT/IDCT algorithm available in the underlying codec. </p>
-<p>The default if this flag is not specified is implementation-specific. The libjpeg implementation, for example, uses the fast algorithm by default when compressing, because this has been shown to have only a very slight effect on accuracy, but it uses the accurate algorithm when decompressing, because this has been shown to have a larger effect. </p>
+<p>The default if this flag is not specified is implementation-specific. For example, the implementation of TurboJPEG for libjpeg[-turbo] uses the fast algorithm by default when compressing, because this has been shown to have only a very slight effect on accuracy, but it uses the accurate algorithm when decompressing, because this has been shown to have a larger effect. </p>
 
 </div>
 </div>
-<a class="anchor" id="ga4ee4506c81177a06f77e2504a22efd2d"></a><!-- doxytag: member="turbojpeg.h::TJFLAG_FASTUPSAMPLE" ref="ga4ee4506c81177a06f77e2504a22efd2d" args="" -->
+<a class="anchor" id="ga4ee4506c81177a06f77e2504a22efd2d"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -314,15 +386,14 @@ Variables</h2></td></tr>
           <td class="memname">#define TJFLAG_FASTUPSAMPLE</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
-<p>When decompressing, use the fastest chrominance upsampling algorithm available in the underlying codec. </p>
+<p>When decompressing an image that was compressed using chrominance subsampling, use the fastest chrominance upsampling algorithm available in the underlying codec. </p>
 <p>The default is to use smooth upsampling, which creates a smooth transition between neighboring chrominance components in order to reduce upsampling artifacts in the decompressed image. </p>
 
 </div>
 </div>
-<a class="anchor" id="ga4e872f11c82f241736fa8297920f24e5"></a><!-- doxytag: member="turbojpeg.h::TJFLAG_FORCEMMX" ref="ga4e872f11c82f241736fa8297920f24e5" args="" -->
+<a class="anchor" id="ga4e872f11c82f241736fa8297920f24e5"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -330,14 +401,13 @@ Variables</h2></td></tr>
           <td class="memname">#define TJFLAG_FORCEMMX</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Turn off CPU auto-detection and force TurboJPEG to use MMX code (if the underlying codec supports it.) </p>
 
 </div>
 </div>
-<a class="anchor" id="gae17e63189e8cd730feed3efbd2454f38"></a><!-- doxytag: member="turbojpeg.h::TJFLAG_FORCESSE" ref="gae17e63189e8cd730feed3efbd2454f38" args="" -->
+<a class="anchor" id="gae17e63189e8cd730feed3efbd2454f38"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -345,14 +415,13 @@ Variables</h2></td></tr>
           <td class="memname">#define TJFLAG_FORCESSE</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Turn off CPU auto-detection and force TurboJPEG to use SSE code (if the underlying codec supports it.) </p>
 
 </div>
 </div>
-<a class="anchor" id="ga8cf0bca96ea4d472563f4b0ebf8c48e7"></a><!-- doxytag: member="turbojpeg.h::TJFLAG_FORCESSE2" ref="ga8cf0bca96ea4d472563f4b0ebf8c48e7" args="" -->
+<a class="anchor" id="ga8cf0bca96ea4d472563f4b0ebf8c48e7"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -360,14 +429,13 @@ Variables</h2></td></tr>
           <td class="memname">#define TJFLAG_FORCESSE2</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Turn off CPU auto-detection and force TurboJPEG to use SSE2 code (if the underlying codec supports it.) </p>
 
 </div>
 </div>
-<a class="anchor" id="gaf9d49066633404da4386d70820295dd2"></a><!-- doxytag: member="turbojpeg.h::TJFLAG_FORCESSE3" ref="gaf9d49066633404da4386d70820295dd2" args="" -->
+<a class="anchor" id="gaf9d49066633404da4386d70820295dd2"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -375,14 +443,13 @@ Variables</h2></td></tr>
           <td class="memname">#define TJFLAG_FORCESSE3</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Turn off CPU auto-detection and force TurboJPEG to use SSE3 code (if the underlying codec supports it.) </p>
 
 </div>
 </div>
-<a class="anchor" id="ga8808d403c68b62aaa58a4c1e58e98963"></a><!-- doxytag: member="turbojpeg.h::TJFLAG_NOREALLOC" ref="ga8808d403c68b62aaa58a4c1e58e98963" args="" -->
+<a class="anchor" id="ga8808d403c68b62aaa58a4c1e58e98963"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -390,15 +457,14 @@ Variables</h2></td></tr>
           <td class="memname">#define TJFLAG_NOREALLOC</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Disable buffer (re)allocation. </p>
 <p>If passed to <a class="el" href="group___turbo_j_p_e_g.html#gaba62b7a98f960839b588579898495cf2" title="Compress an RGB or grayscale image into a JPEG image.">tjCompress2()</a> or <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a>, this flag will cause those functions to generate an error if the JPEG image buffer is invalid or too small rather than attempting to allocate or reallocate that buffer. This reproduces the behavior of earlier versions of TurboJPEG. </p>
 
 </div>
 </div>
-<a class="anchor" id="ga0aba955473315e405295d978f0c16511"></a><!-- doxytag: member="turbojpeg.h::TJPAD" ref="ga0aba955473315e405295d978f0c16511" args="(width)" -->
+<a class="anchor" id="ga0aba955473315e405295d978f0c16511"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -410,14 +476,13 @@ Variables</h2></td></tr>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Pad the given width to the nearest 32-bit boundary. </p>
 
 </div>
 </div>
-<a class="anchor" id="ga84878bb65404204743aa18cac02781df"></a><!-- doxytag: member="turbojpeg.h::TJSCALED" ref="ga84878bb65404204743aa18cac02781df" args="(dimension, scalingFactor)" -->
+<a class="anchor" id="ga84878bb65404204743aa18cac02781df"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -439,15 +504,14 @@ Variables</h2></td></tr>
           <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Compute the scaled value of <code>dimension</code> using the given scaling factor. </p>
 <p>This macro performs the integer equivalent of <code>ceil(dimension * scalingFactor)</code>. </p>
 
 </div>
 </div>
-<a class="anchor" id="ga9c771a757fc1294add611906b89ab2d2"></a><!-- doxytag: member="turbojpeg.h::TJXOPT_CROP" ref="ga9c771a757fc1294add611906b89ab2d2" args="" -->
+<a class="anchor" id="ga9c771a757fc1294add611906b89ab2d2"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -455,15 +519,14 @@ Variables</h2></td></tr>
           <td class="memname">#define TJXOPT_CROP</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>This option will enable lossless cropping. </p>
 <p>See <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a> for more information. </p>
 
 </div>
 </div>
-<a class="anchor" id="ga3acee7b48ade1b99e5588736007c2589"></a><!-- doxytag: member="turbojpeg.h::TJXOPT_GRAY" ref="ga3acee7b48ade1b99e5588736007c2589" args="" -->
+<a class="anchor" id="ga3acee7b48ade1b99e5588736007c2589"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -471,14 +534,13 @@ Variables</h2></td></tr>
           <td class="memname">#define TJXOPT_GRAY</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>This option will discard the color data in the input image and produce a grayscale output image. </p>
 
 </div>
 </div>
-<a class="anchor" id="gafbf992bbf6e006705886333703ffab31"></a><!-- doxytag: member="turbojpeg.h::TJXOPT_NOOUTPUT" ref="gafbf992bbf6e006705886333703ffab31" args="" -->
+<a class="anchor" id="gafbf992bbf6e006705886333703ffab31"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -486,14 +548,13 @@ Variables</h2></td></tr>
           <td class="memname">#define TJXOPT_NOOUTPUT</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>This option will prevent <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a> from outputting a JPEG image for this particular transform (this can be used in conjunction with a custom filter to capture the transformed DCT coefficients without transcoding them.) </p>
 
 </div>
 </div>
-<a class="anchor" id="ga50e03cb5ed115330e212417429600b00"></a><!-- doxytag: member="turbojpeg.h::TJXOPT_PERFECT" ref="ga50e03cb5ed115330e212417429600b00" args="" -->
+<a class="anchor" id="ga50e03cb5ed115330e212417429600b00"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -501,15 +562,14 @@ Variables</h2></td></tr>
           <td class="memname">#define TJXOPT_PERFECT</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>This option will cause <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a> to return an error if the transform is not perfect. </p>
 <p>Lossless transforms operate on MCU blocks, whose size depends on the level of chrominance subsampling used (see <a class="el" href="group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c" title="MCU block width (in pixels) for a given level of chrominance subsampling.">tjMCUWidth</a> and <a class="el" href="group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf" title="MCU block height (in pixels) for a given level of chrominance subsampling.">tjMCUHeight</a>.) If the image's width or height is not evenly divisible by the MCU block size, then there will be partial MCU blocks on the right and/or bottom edges. It is not possible to move these partial MCU blocks to the top or left of the image, so any transform that would require that is "imperfect." If this option is not specified, then any partial MCU blocks that cannot be transformed will be left in place, which will create odd-looking strips on the right or bottom edge of the image. </p>
 
 </div>
 </div>
-<a class="anchor" id="ga319826b7eb1583c0595bbe7b95428709"></a><!-- doxytag: member="turbojpeg.h::TJXOPT_TRIM" ref="ga319826b7eb1583c0595bbe7b95428709" args="" -->
+<a class="anchor" id="ga319826b7eb1583c0595bbe7b95428709"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -517,15 +577,14 @@ Variables</h2></td></tr>
           <td class="memname">#define TJXOPT_TRIM</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>This option will cause <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a> to discard any partial MCU blocks that cannot be transformed. </p>
 
 </div>
 </div>
-<hr/><h2>Typedef Documentation</h2>
-<a class="anchor" id="ga758d2634ecb4949de7815cba621f5763"></a><!-- doxytag: member="turbojpeg.h::tjhandle" ref="ga758d2634ecb4949de7815cba621f5763" args="" -->
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ga758d2634ecb4949de7815cba621f5763"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -533,14 +592,13 @@ Variables</h2></td></tr>
           <td class="memname">typedef void* <a class="el" href="group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763">tjhandle</a></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>TurboJPEG instance handle. </p>
 
 </div>
 </div>
-<a class="anchor" id="gaa29f3189c41be12ec5dee7caec318a31"></a><!-- doxytag: member="turbojpeg.h::tjtransform" ref="gaa29f3189c41be12ec5dee7caec318a31" args="" -->
+<a class="anchor" id="gaa29f3189c41be12ec5dee7caec318a31"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -548,15 +606,14 @@ Variables</h2></td></tr>
           <td class="memname">typedef struct <a class="el" href="structtjtransform.html">tjtransform</a>  <a class="el" href="structtjtransform.html">tjtransform</a></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Lossless transform. </p>
 
 </div>
 </div>
-<hr/><h2>Enumeration Type Documentation</h2>
-<a class="anchor" id="gac916144e26c3817ac514e64ae5d12e2a"></a><!-- doxytag: member="turbojpeg.h::TJPF" ref="gac916144e26c3817ac514e64ae5d12e2a" args="" -->
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a class="anchor" id="gac916144e26c3817ac514e64ae5d12e2a"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -564,62 +621,59 @@ Variables</h2></td></tr>
           <td class="memname">enum <a class="el" href="group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a">TJPF</a></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Pixel formats. </p>
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aa7ce93230bff449518ce387c17e6ed37c"></a><!-- doxytag: member="TJPF_RGB" ref="ggac916144e26c3817ac514e64ae5d12e2aa7ce93230bff449518ce387c17e6ed37c" args="" -->TJPF_RGB</em>&nbsp;</td><td>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aa7ce93230bff449518ce387c17e6ed37c"></a>TJPF_RGB</em>&nbsp;</td><td class="fielddoc">
 <p>RGB pixel format. </p>
 <p>The red, green, and blue components in the image are stored in 3-byte pixels in the order R, G, B from lowest to highest byte address within each pixel. </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aab10624437fb8ef495a0b153e65749839"></a><!-- doxytag: member="TJPF_BGR" ref="ggac916144e26c3817ac514e64ae5d12e2aab10624437fb8ef495a0b153e65749839" args="" -->TJPF_BGR</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aab10624437fb8ef495a0b153e65749839"></a>TJPF_BGR</em>&nbsp;</td><td class="fielddoc">
 <p>BGR pixel format. </p>
 <p>The red, green, and blue components in the image are stored in 3-byte pixels in the order B, G, R from lowest to highest byte address within each pixel. </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aa83973bebb7e2dc6fa8bae89ff3f42e01"></a><!-- doxytag: member="TJPF_RGBX" ref="ggac916144e26c3817ac514e64ae5d12e2aa83973bebb7e2dc6fa8bae89ff3f42e01" args="" -->TJPF_RGBX</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aa83973bebb7e2dc6fa8bae89ff3f42e01"></a>TJPF_RGBX</em>&nbsp;</td><td class="fielddoc">
 <p>RGBX pixel format. </p>
 <p>The red, green, and blue components in the image are stored in 4-byte pixels in the order R, G, B from lowest to highest byte address within each pixel. The X component is ignored when compressing and undefined when decompressing. </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aa2a1fbf569ca79897eae886e3376ca4c8"></a><!-- doxytag: member="TJPF_BGRX" ref="ggac916144e26c3817ac514e64ae5d12e2aa2a1fbf569ca79897eae886e3376ca4c8" args="" -->TJPF_BGRX</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aa2a1fbf569ca79897eae886e3376ca4c8"></a>TJPF_BGRX</em>&nbsp;</td><td class="fielddoc">
 <p>BGRX pixel format. </p>
 <p>The red, green, and blue components in the image are stored in 4-byte pixels in the order B, G, R from lowest to highest byte address within each pixel. The X component is ignored when compressing and undefined when decompressing. </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aaf6603b27147de47e212e75dac027b2af"></a><!-- doxytag: member="TJPF_XBGR" ref="ggac916144e26c3817ac514e64ae5d12e2aaf6603b27147de47e212e75dac027b2af" args="" -->TJPF_XBGR</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aaf6603b27147de47e212e75dac027b2af"></a>TJPF_XBGR</em>&nbsp;</td><td class="fielddoc">
 <p>XBGR pixel format. </p>
 <p>The red, green, and blue components in the image are stored in 4-byte pixels in the order R, G, B from highest to lowest byte address within each pixel. The X component is ignored when compressing and undefined when decompressing. </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aadae996905efcfa3b42a0bb3bea7f9d84"></a><!-- doxytag: member="TJPF_XRGB" ref="ggac916144e26c3817ac514e64ae5d12e2aadae996905efcfa3b42a0bb3bea7f9d84" args="" -->TJPF_XRGB</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aadae996905efcfa3b42a0bb3bea7f9d84"></a>TJPF_XRGB</em>&nbsp;</td><td class="fielddoc">
 <p>XRGB pixel format. </p>
 <p>The red, green, and blue components in the image are stored in 4-byte pixels in the order B, G, R from highest to lowest byte address within each pixel. The X component is ignored when compressing and undefined when decompressing. </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aa5431b54b015337705f13118073711a1a"></a><!-- doxytag: member="TJPF_GRAY" ref="ggac916144e26c3817ac514e64ae5d12e2aa5431b54b015337705f13118073711a1a" args="" -->TJPF_GRAY</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aa5431b54b015337705f13118073711a1a"></a>TJPF_GRAY</em>&nbsp;</td><td class="fielddoc">
 <p>Grayscale pixel format. </p>
 <p>Each 1-byte pixel represents a luminance (brightness) level from 0 to 255. </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aa88d2e88fab67f6503cf972e14851cc12"></a><!-- doxytag: member="TJPF_RGBA" ref="ggac916144e26c3817ac514e64ae5d12e2aa88d2e88fab67f6503cf972e14851cc12" args="" -->TJPF_RGBA</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aa88d2e88fab67f6503cf972e14851cc12"></a>TJPF_RGBA</em>&nbsp;</td><td class="fielddoc">
 <p>RGBA pixel format. </p>
 <p>This is the same as <a class="el" href="group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa83973bebb7e2dc6fa8bae89ff3f42e01">TJPF_RGBX</a>, except that when decompressing, the X component is guaranteed to be 0xFF, which can be interpreted as an opaque alpha channel. </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aac037ff1845cf9b74bb81a3659c2b9fb4"></a><!-- doxytag: member="TJPF_BGRA" ref="ggac916144e26c3817ac514e64ae5d12e2aac037ff1845cf9b74bb81a3659c2b9fb4" args="" -->TJPF_BGRA</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aac037ff1845cf9b74bb81a3659c2b9fb4"></a>TJPF_BGRA</em>&nbsp;</td><td class="fielddoc">
 <p>BGRA pixel format. </p>
 <p>This is the same as <a class="el" href="group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa2a1fbf569ca79897eae886e3376ca4c8">TJPF_BGRX</a>, except that when decompressing, the X component is guaranteed to be 0xFF, which can be interpreted as an opaque alpha channel. </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aa1ba1a7f1631dbeaa49a0a85fc4a40081"></a><!-- doxytag: member="TJPF_ABGR" ref="ggac916144e26c3817ac514e64ae5d12e2aa1ba1a7f1631dbeaa49a0a85fc4a40081" args="" -->TJPF_ABGR</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aa1ba1a7f1631dbeaa49a0a85fc4a40081"></a>TJPF_ABGR</em>&nbsp;</td><td class="fielddoc">
 <p>ABGR pixel format. </p>
 <p>This is the same as <a class="el" href="group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aaf6603b27147de47e212e75dac027b2af">TJPF_XBGR</a>, except that when decompressing, the X component is guaranteed to be 0xFF, which can be interpreted as an opaque alpha channel. </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aae8f846ed9d9de99b6e1dfe448848765c"></a><!-- doxytag: member="TJPF_ARGB" ref="ggac916144e26c3817ac514e64ae5d12e2aae8f846ed9d9de99b6e1dfe448848765c" args="" -->TJPF_ARGB</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="ggac916144e26c3817ac514e64ae5d12e2aae8f846ed9d9de99b6e1dfe448848765c"></a>TJPF_ARGB</em>&nbsp;</td><td class="fielddoc">
 <p>ARGB pixel format. </p>
 <p>This is the same as <a class="el" href="group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aadae996905efcfa3b42a0bb3bea7f9d84">TJPF_XRGB</a>, except that when decompressing, the X component is guaranteed to be 0xFF, which can be interpreted as an opaque alpha channel. </p>
 </td></tr>
 </table>
-</dd>
-</dl>
 
 </div>
 </div>
-<a class="anchor" id="ga1d047060ea80bb9820d540bb928e9074"></a><!-- doxytag: member="turbojpeg.h::TJSAMP" ref="ga1d047060ea80bb9820d540bb928e9074" args="" -->
+<a class="anchor" id="ga1d047060ea80bb9820d540bb928e9074"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -627,39 +681,37 @@ Variables</h2></td></tr>
           <td class="memname">enum <a class="el" href="group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074">TJSAMP</a></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Chrominance subsampling options. </p>
 <p>When an image is converted from the RGB to the YCbCr colorspace as part of the JPEG compression process, some of the Cb and Cr (chrominance) components can be discarded or averaged together to produce a smaller image with little perceptible loss of image clarity (the human eye is more sensitive to small changes in brightness than small changes in color.) This is called "chrominance subsampling". </p>
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3"></a><!-- doxytag: member="TJSAMP_444" ref="gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3" args="" -->TJSAMP_444</em>&nbsp;</td><td>
+<p>NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the convention of the digital video community, the TurboJPEG API uses "YUV" to refer to an image format consisting of Y, Cb, and Cr image planes. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3"></a>TJSAMP_444</em>&nbsp;</td><td class="fielddoc">
 <p>4:4:4 chrominance subsampling (no chrominance subsampling). </p>
 <p>The JPEG or YUV image will contain one chrominance component for every pixel in the source image. </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="gga1d047060ea80bb9820d540bb928e9074a136130902cc578f11f32429b59368404"></a><!-- doxytag: member="TJSAMP_422" ref="gga1d047060ea80bb9820d540bb928e9074a136130902cc578f11f32429b59368404" args="" -->TJSAMP_422</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="gga1d047060ea80bb9820d540bb928e9074a136130902cc578f11f32429b59368404"></a>TJSAMP_422</em>&nbsp;</td><td class="fielddoc">
 <p>4:2:2 chrominance subsampling. </p>
 <p>The JPEG or YUV image will contain one chrominance component for every 2x1 block of pixels in the source image. </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="gga1d047060ea80bb9820d540bb928e9074a63085dbf683cfe39e513cdb6343e3737"></a><!-- doxytag: member="TJSAMP_420" ref="gga1d047060ea80bb9820d540bb928e9074a63085dbf683cfe39e513cdb6343e3737" args="" -->TJSAMP_420</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="gga1d047060ea80bb9820d540bb928e9074a63085dbf683cfe39e513cdb6343e3737"></a>TJSAMP_420</em>&nbsp;</td><td class="fielddoc">
 <p>4:2:0 chrominance subsampling. </p>
 <p>The JPEG or YUV image will contain one chrominance component for every 2x2 block of pixels in the source image. </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="gga1d047060ea80bb9820d540bb928e9074a3f1c9504842ddc7a48d0f690754b6248"></a><!-- doxytag: member="TJSAMP_GRAY" ref="gga1d047060ea80bb9820d540bb928e9074a3f1c9504842ddc7a48d0f690754b6248" args="" -->TJSAMP_GRAY</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="gga1d047060ea80bb9820d540bb928e9074a3f1c9504842ddc7a48d0f690754b6248"></a>TJSAMP_GRAY</em>&nbsp;</td><td class="fielddoc">
 <p>Grayscale. </p>
 <p>The JPEG or YUV image will contain no chrominance components. </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="gga1d047060ea80bb9820d540bb928e9074accf740e6f3aa6ba20ba922cad13cb974"></a><!-- doxytag: member="TJSAMP_440" ref="gga1d047060ea80bb9820d540bb928e9074accf740e6f3aa6ba20ba922cad13cb974" args="" -->TJSAMP_440</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="gga1d047060ea80bb9820d540bb928e9074accf740e6f3aa6ba20ba922cad13cb974"></a>TJSAMP_440</em>&nbsp;</td><td class="fielddoc">
 <p>4:4:0 chrominance subsampling. </p>
-<p>The JPEG or YUV image will contain one chrominance component for every 1x2 block of pixels in the source image. </p>
+<p>The JPEG or YUV image will contain one chrominance component for every 1x2 block of pixels in the source image. Note that 4:4:0 subsampling is not fully accelerated in libjpeg-turbo. </p>
 </td></tr>
 </table>
-</dd>
-</dl>
 
 </div>
 </div>
-<a class="anchor" id="ga2de531af4e7e6c4f124908376b354866"></a><!-- doxytag: member="turbojpeg.h::TJXOP" ref="ga2de531af4e7e6c4f124908376b354866" args="" -->
+<a class="anchor" id="ga2de531af4e7e6c4f124908376b354866"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -667,48 +719,45 @@ Variables</h2></td></tr>
           <td class="memname">enum <a class="el" href="group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866">TJXOP</a></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Transform operations for <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a> </p>
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="gga2de531af4e7e6c4f124908376b354866aad88c0366cd3f7d0eac9d7a3fa1c2c27"></a><!-- doxytag: member="TJXOP_NONE" ref="gga2de531af4e7e6c4f124908376b354866aad88c0366cd3f7d0eac9d7a3fa1c2c27" args="" -->TJXOP_NONE</em>&nbsp;</td><td>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="gga2de531af4e7e6c4f124908376b354866aad88c0366cd3f7d0eac9d7a3fa1c2c27"></a>TJXOP_NONE</em>&nbsp;</td><td class="fielddoc">
 <p>Do not transform the position of the image pixels. </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="gga2de531af4e7e6c4f124908376b354866aa0df69776caa30f0fa28e26332d311ce"></a><!-- doxytag: member="TJXOP_HFLIP" ref="gga2de531af4e7e6c4f124908376b354866aa0df69776caa30f0fa28e26332d311ce" args="" -->TJXOP_HFLIP</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="gga2de531af4e7e6c4f124908376b354866aa0df69776caa30f0fa28e26332d311ce"></a>TJXOP_HFLIP</em>&nbsp;</td><td class="fielddoc">
 <p>Flip (mirror) image horizontally. </p>
 <p>This transform is imperfect if there are any partial MCU blocks on the right edge (see <a class="el" href="group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00" title="This option will cause tjTransform() to return an error if the transform is not perfect.">TJXOPT_PERFECT</a>.) </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="gga2de531af4e7e6c4f124908376b354866a324eddfbec53b7e691f61e56929d0d5d"></a><!-- doxytag: member="TJXOP_VFLIP" ref="gga2de531af4e7e6c4f124908376b354866a324eddfbec53b7e691f61e56929d0d5d" args="" -->TJXOP_VFLIP</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="gga2de531af4e7e6c4f124908376b354866a324eddfbec53b7e691f61e56929d0d5d"></a>TJXOP_VFLIP</em>&nbsp;</td><td class="fielddoc">
 <p>Flip (mirror) image vertically. </p>
 <p>This transform is imperfect if there are any partial MCU blocks on the bottom edge (see <a class="el" href="group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00" title="This option will cause tjTransform() to return an error if the transform is not perfect.">TJXOPT_PERFECT</a>.) </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="gga2de531af4e7e6c4f124908376b354866a31060aed199f886afdd417f80499c32d"></a><!-- doxytag: member="TJXOP_TRANSPOSE" ref="gga2de531af4e7e6c4f124908376b354866a31060aed199f886afdd417f80499c32d" args="" -->TJXOP_TRANSPOSE</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="gga2de531af4e7e6c4f124908376b354866a31060aed199f886afdd417f80499c32d"></a>TJXOP_TRANSPOSE</em>&nbsp;</td><td class="fielddoc">
 <p>Transpose image (flip/mirror along upper left to lower right axis.) This transform is always perfect. </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="gga2de531af4e7e6c4f124908376b354866af3b14d488aea6ece9e5b3df73a74d6a4"></a><!-- doxytag: member="TJXOP_TRANSVERSE" ref="gga2de531af4e7e6c4f124908376b354866af3b14d488aea6ece9e5b3df73a74d6a4" args="" -->TJXOP_TRANSVERSE</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="gga2de531af4e7e6c4f124908376b354866af3b14d488aea6ece9e5b3df73a74d6a4"></a>TJXOP_TRANSVERSE</em>&nbsp;</td><td class="fielddoc">
 <p>Transverse transpose image (flip/mirror along upper right to lower left axis.) This transform is imperfect if there are any partial MCU blocks in the image (see <a class="el" href="group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00" title="This option will cause tjTransform() to return an error if the transform is not perfect.">TJXOPT_PERFECT</a>.) </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="gga2de531af4e7e6c4f124908376b354866a43b2bbb23bc4bd548422d43fbe9af128"></a><!-- doxytag: member="TJXOP_ROT90" ref="gga2de531af4e7e6c4f124908376b354866a43b2bbb23bc4bd548422d43fbe9af128" args="" -->TJXOP_ROT90</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="gga2de531af4e7e6c4f124908376b354866a43b2bbb23bc4bd548422d43fbe9af128"></a>TJXOP_ROT90</em>&nbsp;</td><td class="fielddoc">
 <p>Rotate image clockwise by 90 degrees. </p>
 <p>This transform is imperfect if there are any partial MCU blocks on the bottom edge (see <a class="el" href="group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00" title="This option will cause tjTransform() to return an error if the transform is not perfect.">TJXOPT_PERFECT</a>.) </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="gga2de531af4e7e6c4f124908376b354866a140952eb8dd0300accfcc22726d69692"></a><!-- doxytag: member="TJXOP_ROT180" ref="gga2de531af4e7e6c4f124908376b354866a140952eb8dd0300accfcc22726d69692" args="" -->TJXOP_ROT180</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="gga2de531af4e7e6c4f124908376b354866a140952eb8dd0300accfcc22726d69692"></a>TJXOP_ROT180</em>&nbsp;</td><td class="fielddoc">
 <p>Rotate image 180 degrees. </p>
 <p>This transform is imperfect if there are any partial MCU blocks in the image (see <a class="el" href="group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00" title="This option will cause tjTransform() to return an error if the transform is not perfect.">TJXOPT_PERFECT</a>.) </p>
 </td></tr>
-<tr><td valign="top"><em><a class="anchor" id="gga2de531af4e7e6c4f124908376b354866a3064ee5dfb7f032df332818587567a08"></a><!-- doxytag: member="TJXOP_ROT270" ref="gga2de531af4e7e6c4f124908376b354866a3064ee5dfb7f032df332818587567a08" args="" -->TJXOP_ROT270</em>&nbsp;</td><td>
+<tr><td class="fieldname"><em><a class="anchor" id="gga2de531af4e7e6c4f124908376b354866a3064ee5dfb7f032df332818587567a08"></a>TJXOP_ROT270</em>&nbsp;</td><td class="fielddoc">
 <p>Rotate image counter-clockwise by 90 degrees. </p>
 <p>This transform is imperfect if there are any partial MCU blocks on the right edge (see <a class="el" href="group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00" title="This option will cause tjTransform() to return an error if the transform is not perfect.">TJXOPT_PERFECT</a>.) </p>
 </td></tr>
 </table>
-</dd>
-</dl>
 
 </div>
 </div>
-<hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga5c9234bda6d993cdaffdd89bf81a00ff"></a><!-- doxytag: member="turbojpeg.h::tjAlloc" ref="ga5c9234bda6d993cdaffdd89bf81a00ff" args="(int bytes)" -->
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga5c9234bda6d993cdaffdd89bf81a00ff"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -720,23 +769,22 @@ Variables</h2></td></tr>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Allocate an image buffer for use with TurboJPEG. </p>
 <p>You should always use this function to allocate the JPEG destination buffer(s) for <a class="el" href="group___turbo_j_p_e_g.html#gaba62b7a98f960839b588579898495cf2" title="Compress an RGB or grayscale image into a JPEG image.">tjCompress2()</a> and <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a> unless you are disabling automatic buffer (re)allocation (by setting <a class="el" href="group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963" title="Disable buffer (re)allocation.">TJFLAG_NOREALLOC</a>.)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
+<dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">bytes</td><td>the number of bytes to allocate</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>a pointer to a newly-allocated buffer with the specified number of bytes</dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group___turbo_j_p_e_g.html#ga8c4a1231dc06a450514c835f6471f137" title="Free an image buffer previously allocated by TurboJPEG.">tjFree()</a> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>a pointer to a newly-allocated buffer with the specified number of bytes</dd></dl>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="group___turbo_j_p_e_g.html#ga8c4a1231dc06a450514c835f6471f137" title="Free an image buffer previously allocated by TurboJPEG.">tjFree()</a> </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="gaccc5bca7f12fcdcc302e6e1c6d4b311b"></a><!-- doxytag: member="turbojpeg.h::tjBufSize" ref="gaccc5bca7f12fcdcc302e6e1c6d4b311b" args="(int width, int height, int jpegSubsamp)" -->
+<a class="anchor" id="gaccc5bca7f12fcdcc302e6e1c6d4b311b"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -764,12 +812,11 @@ Variables</h2></td></tr>
           <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>The maximum size of the buffer (in bytes) required to hold a JPEG image with the given parameters. </p>
-<p>The number of bytes returned by this function is larger than the size of the uncompressed source image. The reason for this is that the JPEG format uses 16-bit coefficients, and it is thus possible for a very high-quality JPEG image with very high frequency content to expand rather than compress when converted to the JPEG format. Such images represent a very rare corner case, but since there is no way to predict the size of a JPEG image prior to compression, the corner case has to be handled.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
+<p>The number of bytes returned by this function is larger than the size of the uncompressed source image. The reason for this is that the JPEG format uses 16-bit coefficients, and it is thus possible for a very high-quality JPEG image with very high-frequency content to expand rather than compress when converted to the JPEG format. Such images represent a very rare corner case, but since there is no way to predict the size of a JPEG image prior to compression, the corner case has to be handled.</p>
+<dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">width</td><td>width of the image (in pixels) </td></tr>
     <tr><td class="paramname">height</td><td>height of the image (in pixels) </td></tr>
@@ -777,11 +824,11 @@ Variables</h2></td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the maximum size of the buffer (in bytes) required to hold the image, or -1 if the arguments are out of bounds. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>the maximum size of the buffer (in bytes) required to hold the image, or -1 if the arguments are out of bounds. </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="ga9d0cb06fd5052d21b6f2b382db8b219c"></a><!-- doxytag: member="turbojpeg.h::tjBufSizeYUV" ref="ga9d0cb06fd5052d21b6f2b382db8b219c" args="(int width, int height, int subsamp)" -->
+<a class="anchor" id="ga9d0cb06fd5052d21b6f2b382db8b219c"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -809,11 +856,10 @@ Variables</h2></td></tr>
           <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>The size of the buffer (in bytes) required to hold a YUV planar image with the given parameters. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
+<dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">width</td><td>width of the image (in pixels) </td></tr>
     <tr><td class="paramname">height</td><td>height of the image (in pixels) </td></tr>
@@ -821,11 +867,11 @@ Variables</h2></td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the size of the buffer (in bytes) required to hold the image, or -1 if the arguments are out of bounds. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>the size of the buffer (in bytes) required to hold the image, or -1 if the arguments are out of bounds. </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="gaba62b7a98f960839b588579898495cf2"></a><!-- doxytag: member="turbojpeg.h::tjCompress2" ref="gaba62b7a98f960839b588579898495cf2" args="(tjhandle handle, unsigned char *srcBuf, int width, int pitch, int height, int pixelFormat, unsigned char **jpegBuf, unsigned long *jpegSize, int jpegSubsamp, int jpegQual, int flags)" -->
+<a class="anchor" id="gaba62b7a98f960839b588579898495cf2"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -901,11 +947,10 @@ Variables</h2></td></tr>
           <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Compress an RGB or grayscale image into a JPEG image. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
+<dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">handle</td><td>a handle to a TurboJPEG compressor or transformer instance </td></tr>
     <tr><td class="paramname">srcBuf</td><td>pointer to an image buffer containing RGB or grayscale pixels to be compressed </td></tr>
@@ -926,11 +971,11 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if successful, or -1 if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>0 if successful, or -1 if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="gada69cc6443d1bb493b40f1626259e5e9"></a><!-- doxytag: member="turbojpeg.h::tjDecompress2" ref="gada69cc6443d1bb493b40f1626259e5e9" args="(tjhandle handle, unsigned char *jpegBuf, unsigned long jpegSize, unsigned char *dstBuf, int width, int pitch, int height, int pixelFormat, int flags)" -->
+<a class="anchor" id="gada69cc6443d1bb493b40f1626259e5e9"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -994,29 +1039,31 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
           <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Decompress a JPEG image to an RGB or grayscale image. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
+<dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">handle</td><td>a handle to a TurboJPEG decompressor or transformer instance </td></tr>
     <tr><td class="paramname">jpegBuf</td><td>pointer to a buffer containing the JPEG image to decompress </td></tr>
     <tr><td class="paramname">jpegSize</td><td>size of the JPEG image (in bytes) </td></tr>
-    <tr><td class="paramname">dstBuf</td><td>pointer to an image buffer that will receive the decompressed image. This buffer should normally be <code>pitch * scaledHeight</code> bytes in size, where <code>scaledHeight</code> can be determined by calling <a class="el" href="group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df" title="Compute the scaled value of dimension using the given scaling factor.">TJSCALED()</a> with the JPEG image height and one of the scaling factors returned by <a class="el" href="group___turbo_j_p_e_g.html#ga6449044b9af402999ccf52f401333be8" title="Returns a list of fractional scaling factors that the JPEG decompressor in this implementation of Tur...">tjGetScalingFactors()</a>. The dstBuf pointer may also be used to decompress into a specific region of a larger buffer. </td></tr>
-    <tr><td class="paramname">width</td><td>desired width (in pixels) of the destination image. If this is smaller than the width of the JPEG image being decompressed, then TurboJPEG will use scaling in the JPEG decompressor to generate the largest possible image that will fit within the desired width. If width is set to 0, then only the height will be considered when determining the scaled image size. </td></tr>
-    <tr><td class="paramname">pitch</td><td>bytes per line of the destination image. Normally, this is <code>scaledWidth * <a class="el" href="group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c" title="Pixel size (in bytes) for a given pixel format.">tjPixelSize</a>[pixelFormat]</code> if the decompressed image is unpadded, else <code><a class="el" href="group___turbo_j_p_e_g.html#ga0aba955473315e405295d978f0c16511" title="Pad the given width to the nearest 32-bit boundary.">TJPAD</a>(scaledWidth * <a class="el" href="group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c" title="Pixel size (in bytes) for a given pixel format.">tjPixelSize</a>[pixelFormat])</code> if each line of the decompressed image is padded to the nearest 32-bit boundary, as is the case for Windows bitmaps. (NOTE: <code>scaledWidth</code> can be determined by calling <a class="el" href="group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df" title="Compute the scaled value of dimension using the given scaling factor.">TJSCALED()</a> with the JPEG image width and one of the scaling factors returned by <a class="el" href="group___turbo_j_p_e_g.html#ga6449044b9af402999ccf52f401333be8" title="Returns a list of fractional scaling factors that the JPEG decompressor in this implementation of Tur...">tjGetScalingFactors()</a>.) You can also be clever and use the pitch parameter to skip lines, etc. Setting this parameter to 0 is the equivalent of setting it to <code>scaledWidth * <a class="el" href="group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c" title="Pixel size (in bytes) for a given pixel format.">tjPixelSize</a>[pixelFormat]</code>. </td></tr>
-    <tr><td class="paramname">height</td><td>desired height (in pixels) of the destination image. If this is smaller than the height of the JPEG image being decompressed, then TurboJPEG will use scaling in the JPEG decompressor to generate the largest possible image that will fit within the desired height. If height is set to 0, then only the width will be considered when determining the scaled image size. </td></tr>
-    <tr><td class="paramname">pixelFormat</td><td>pixel format of the destination image (see <a class="el" href="group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a">Pixel formats</a>.) </td></tr>
-    <tr><td class="paramname">flags</td><td>the bitwise OR of one or more of the <a class="el" href="group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec">flags</a>.</td></tr>
+    <tr><td class="paramname">dstBuf</td><td>pointer to an image buffer that will receive the decompressed image. This buffer should normally be <code>pitch * scaledHeight</code> bytes in size, where <code>scaledHeight</code> can be determined by calling <a class="el" href="group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df" title="Compute the scaled value of dimension using the given scaling factor.">TJSCALED()</a> with the JPEG image height and one of the scaling factors returned by <a class="el" href="group___turbo_j_p_e_g.html#ga6449044b9af402999ccf52f401333be8" title="Returns a list of fractional scaling factors that the JPEG decompressor in this implementation of Tur...">tjGetScalingFactors()</a>. The <code>dstBuf</code> pointer may also be used to decompress into a specific region of a larger buffer. </td></tr>
+    <tr><td class="paramname">width</td><td>desired width (in pixels) of the destination image. If this is different than the width of the JPEG image being decompressed, then TurboJPEG will use scaling in the JPEG decompressor to generate the largest possible image that will fit within the desired width. If <code>width</code> is set to 0, then only the height will be considered when determining the scaled image size. </td></tr>
+    <tr><td class="paramname">pitch</td><td>bytes per line of the destination image. Normally, this is <code>scaledWidth * <a class="el" href="group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c" title="Pixel size (in bytes) for a given pixel format.">tjPixelSize</a>[pixelFormat]</code> if the decompressed image is unpadded, else <code><a class="el" href="group___turbo_j_p_e_g.html#ga0aba955473315e405295d978f0c16511" title="Pad the given width to the nearest 32-bit boundary.">TJPAD</a>(scaledWidth * <a class="el" href="group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c" title="Pixel size (in bytes) for a given pixel format.">tjPixelSize</a>[pixelFormat])</code> if each line of the decompressed image is padded to the nearest 32-bit boundary, as is the case for Windows bitmaps. (NOTE: <code>scaledWidth</code> can be determined by calling <a class="el" href="group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df" title="Compute the scaled value of dimension using the given scaling factor.">TJSCALED()</a> with the JPEG image width and one of the scaling factors returned by <a class="el" href="group___turbo_j_p_e_g.html#ga6449044b9af402999ccf52f401333be8" title="Returns a list of fractional scaling factors that the JPEG decompressor in this implementation of Tur...">tjGetScalingFactors()</a>.) You can also be clever and use the pitch parameter to skip lines, etc. Setting this parameter to 0 is the equivalent of setting it to <code>scaledWidth<ul>
+<li><a class="el" href="group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c" title="Pixel size (in bytes) for a given pixel format.">tjPixelSize</a>[pixelFormat]. </li>
+</ul>
+</code></td></tr>
+    <tr><td class="paramname">height</td><td><code>desired height (in pixels) of the destination image. If this is different than the height of the JPEG image being decompressed, then TurboJPEG will use scaling in the JPEG decompressor to generate the largest possible image that will fit within the desired height. If <code>height</code> is set to 0, then only the width will be considered when determining the scaled image size. </code></td></tr>
+    <tr><td class="paramname">pixelFormat</td><td><code>pixel format of the destination image (see <a class="el" href="group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a">Pixel formats</a>.) </code></td></tr>
+    <tr><td class="paramname">flags</td><td><code>the bitwise OR of one or more of the <a class="el" href="group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec">flags</a>.</code></td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if successful, or -1 if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><code> 0 if successful, or -1 if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </code></dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="gac5675fceb7997b385516cdffdb34e6aa"></a><!-- doxytag: member="turbojpeg.h::tjDecompressHeader2" ref="gac5675fceb7997b385516cdffdb34e6aa" args="(tjhandle handle, unsigned char *jpegBuf, unsigned long jpegSize, int *width, int *height, int *jpegSubsamp)" -->
+<a class="anchor" id="gac5675fceb7997b385516cdffdb34e6aa"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -1062,11 +1109,10 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
           <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Retrieve information about a JPEG image without decompressing it. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
+<dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">handle</td><td>a handle to a TurboJPEG decompressor or transformer instance </td></tr>
     <tr><td class="paramname">jpegBuf</td><td>pointer to a buffer containing a JPEG image </td></tr>
@@ -1077,11 +1123,11 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if successful, or -1 if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>0 if successful, or -1 if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="gad7810af095624a4016e72957a50f77d8"></a><!-- doxytag: member="turbojpeg.h::tjDecompressToYUV" ref="gad7810af095624a4016e72957a50f77d8" args="(tjhandle handle, unsigned char *jpegBuf, unsigned long jpegSize, unsigned char *dstBuf, int flags)" -->
+<a class="anchor" id="gad7810af095624a4016e72957a50f77d8"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -1121,26 +1167,26 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
           <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Decompress a JPEG image to a YUV planar image. </p>
-<p>This function performs JPEG decompression but leaves out the color conversion step, so a planar YUV image is generated instead of an RGB image. The padding of the planes in this image is the same as the images generated by <a class="el" href="group___turbo_j_p_e_g.html#ga0fa4e7b1943687c6a0c0304529c55d35" title="Encode an RGB or grayscale image into a YUV planar image.">tjEncodeYUV2()</a>. Note that, if the width or height of the image is not an even multiple of the MCU block size (see <a class="el" href="group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c" title="MCU block width (in pixels) for a given level of chrominance subsampling.">tjMCUWidth</a> and <a class="el" href="group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf" title="MCU block height (in pixels) for a given level of chrominance subsampling.">tjMCUHeight</a>), then an intermediate buffer copy will be performed within TurboJPEG.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
+<p>This function performs JPEG decompression but leaves out the color conversion step, so a planar YUV image is generated instead of an RGB image. The padding of the planes in this image is the same as in the images generated by <a class="el" href="group___turbo_j_p_e_g.html#ga0fa4e7b1943687c6a0c0304529c55d35" title="Encode an RGB or grayscale image into a YUV planar image.">tjEncodeYUV2()</a>. Note that, if the width or height of the image is not an even multiple of the MCU block size (see <a class="el" href="group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c" title="MCU block width (in pixels) for a given level of chrominance subsampling.">tjMCUWidth</a> and <a class="el" href="group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf" title="MCU block height (in pixels) for a given level of chrominance subsampling.">tjMCUHeight</a>), then an intermediate buffer copy will be performed within TurboJPEG. </p>
+<p>NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the convention of the digital video community, the TurboJPEG API uses "YUV" to refer to an image format consisting of Y, Cb, and Cr image planes.</p>
+<dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">handle</td><td>a handle to a TurboJPEG decompressor or transformer instance </td></tr>
     <tr><td class="paramname">jpegBuf</td><td>pointer to a buffer containing the JPEG image to decompress </td></tr>
     <tr><td class="paramname">jpegSize</td><td>size of the JPEG image (in bytes) </td></tr>
-    <tr><td class="paramname">dstBuf</td><td>pointer to an image buffer that will receive the YUV image. Use <a class="el" href="group___turbo_j_p_e_g.html#ga9d0cb06fd5052d21b6f2b382db8b219c" title="The size of the buffer (in bytes) required to hold a YUV planar image with the given parameters...">tjBufSizeYUV</a> to determine the appropriate size for this buffer based on the image width, height, and level of subsampling. </td></tr>
+    <tr><td class="paramname">dstBuf</td><td>pointer to an image buffer that will receive the YUV image. Use <a class="el" href="group___turbo_j_p_e_g.html#ga9d0cb06fd5052d21b6f2b382db8b219c" title="The size of the buffer (in bytes) required to hold a YUV planar image with the given parameters...">tjBufSizeYUV()</a> to determine the appropriate size for this buffer based on the image width, height, and level of subsampling. </td></tr>
     <tr><td class="paramname">flags</td><td>the bitwise OR of one or more of the <a class="el" href="group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec">flags</a>.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if successful, or -1 if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>0 if successful, or -1 if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="ga674adee917b95ad4a896f1ba39e12540"></a><!-- doxytag: member="turbojpeg.h::tjDestroy" ref="ga674adee917b95ad4a896f1ba39e12540" args="(tjhandle handle)" -->
+<a class="anchor" id="ga674adee917b95ad4a896f1ba39e12540"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -1152,21 +1198,20 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Destroy a TurboJPEG compressor, decompressor, or transformer instance. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
+<dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">handle</td><td>a handle to a TurboJPEG compressor, decompressor or transformer instance</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if successful, or -1 if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>0 if successful, or -1 if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="ga0fa4e7b1943687c6a0c0304529c55d35"></a><!-- doxytag: member="turbojpeg.h::tjEncodeYUV2" ref="ga0fa4e7b1943687c6a0c0304529c55d35" args="(tjhandle handle, unsigned char *srcBuf, int width, int pitch, int height, int pixelFormat, unsigned char *dstBuf, int subsamp, int flags)" -->
+<a class="anchor" id="ga0fa4e7b1943687c6a0c0304529c55d35"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -1230,12 +1275,12 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
           <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Encode an RGB or grayscale image into a YUV planar image. </p>
-<p>This function uses the accelerated color conversion routines in TurboJPEG's underlying codec to produce a planar YUV image that is suitable for X Video. Specifically, if the chrominance components are subsampled along the horizontal dimension, then the width of the luminance plane is padded to 2 in the output image (same goes for the height of the luminance plane, if the chrominance components are subsampled along the vertical dimension.) Also, each line of each plane in the output image is padded to 4 bytes. Although this will work with any subsampling option, it is really only useful in combination with TJ_420, which produces an image compatible with the I420 (AKA "YUV420P") format.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
+<p>This function uses the accelerated color conversion routines in TurboJPEG's underlying codec to produce a planar YUV image that is suitable for X Video. Specifically, if the chrominance components are subsampled along the horizontal dimension, then the width of the luminance plane is padded to the nearest multiple of 2 in the output image (same goes for the height of the luminance plane, if the chrominance components are subsampled along the vertical dimension.) Also, each line of each plane in the output image is padded to 4 bytes. Although this will work with any subsampling option, it is really only useful in combination with TJ_420, which produces an image compatible with the I420 (AKA "YUV420P") format. </p>
+<p>NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the convention of the digital video community, the TurboJPEG API uses "YUV" to refer to an image format consisting of Y, Cb, and Cr image planes.</p>
+<dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">handle</td><td>a handle to a TurboJPEG compressor or transformer instance </td></tr>
     <tr><td class="paramname">srcBuf</td><td>pointer to an image buffer containing RGB or grayscale pixels to be encoded </td></tr>
@@ -1249,11 +1294,11 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if successful, or -1 if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>0 if successful, or -1 if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="ga8c4a1231dc06a450514c835f6471f137"></a><!-- doxytag: member="turbojpeg.h::tjFree" ref="ga8c4a1231dc06a450514c835f6471f137" args="(unsigned char *buffer)" -->
+<a class="anchor" id="ga8c4a1231dc06a450514c835f6471f137"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -1265,22 +1310,21 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Free an image buffer previously allocated by TurboJPEG. </p>
 <p>You should always use this function to free JPEG destination buffer(s) that were automatically (re)allocated by <a class="el" href="group___turbo_j_p_e_g.html#gaba62b7a98f960839b588579898495cf2" title="Compress an RGB or grayscale image into a JPEG image.">tjCompress2()</a> or <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a> or that were manually allocated using <a class="el" href="group___turbo_j_p_e_g.html#ga5c9234bda6d993cdaffdd89bf81a00ff" title="Allocate an image buffer for use with TurboJPEG.">tjAlloc()</a>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
+<dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">buffer</td><td>address of the buffer to free</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group___turbo_j_p_e_g.html#ga5c9234bda6d993cdaffdd89bf81a00ff" title="Allocate an image buffer for use with TurboJPEG.">tjAlloc()</a> </dd></dl>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="group___turbo_j_p_e_g.html#ga5c9234bda6d993cdaffdd89bf81a00ff" title="Allocate an image buffer for use with TurboJPEG.">tjAlloc()</a> </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="ga9af79c908ec131b1ae8d52fe40375abf"></a><!-- doxytag: member="turbojpeg.h::tjGetErrorStr" ref="ga9af79c908ec131b1ae8d52fe40375abf" args="(void)" -->
+<a class="anchor" id="ga9af79c908ec131b1ae8d52fe40375abf"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -1292,15 +1336,14 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Returns a descriptive error message explaining why the last command failed. </p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>a descriptive error message explaining why the last command failed. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>a descriptive error message explaining why the last command failed. </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="ga6449044b9af402999ccf52f401333be8"></a><!-- doxytag: member="turbojpeg.h::tjGetScalingFactors" ref="ga6449044b9af402999ccf52f401333be8" args="(int *numscalingfactors)" -->
+<a class="anchor" id="ga6449044b9af402999ccf52f401333be8"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -1312,21 +1355,20 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Returns a list of fractional scaling factors that the JPEG decompressor in this implementation of TurboJPEG supports. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
+<dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">numscalingfactors</td><td>pointer to an integer variable that will receive the number of elements in the list</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>a pointer to a list of fractional scaling factors, or NULL if an error is encountered (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>a pointer to a list of fractional scaling factors, or NULL if an error is encountered (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="ga3d10c47fbe4a2489a2b30c931551d01a"></a><!-- doxytag: member="turbojpeg.h::tjInitCompress" ref="ga3d10c47fbe4a2489a2b30c931551d01a" args="(void)" -->
+<a class="anchor" id="ga3d10c47fbe4a2489a2b30c931551d01a"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -1338,15 +1380,14 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Create a TurboJPEG compressor instance. </p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>a handle to the newly-created instance, or NULL if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>a handle to the newly-created instance, or NULL if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="gae5408179d041e2a2f7199c8283cf649e"></a><!-- doxytag: member="turbojpeg.h::tjInitDecompress" ref="gae5408179d041e2a2f7199c8283cf649e" args="(void)" -->
+<a class="anchor" id="gae5408179d041e2a2f7199c8283cf649e"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -1358,15 +1399,14 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Create a TurboJPEG decompressor instance. </p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>a handle to the newly-created instance, or NULL if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>a handle to the newly-created instance, or NULL if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="ga3155b775bfbac9dbba869b95a0367902"></a><!-- doxytag: member="turbojpeg.h::tjInitTransform" ref="ga3155b775bfbac9dbba869b95a0367902" args="(void)" -->
+<a class="anchor" id="ga3155b775bfbac9dbba869b95a0367902"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -1378,15 +1418,14 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Create a new TurboJPEG transformer instance. </p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>a handle to the newly-created instance, or NULL if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>a handle to the newly-created instance, or NULL if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="gae403193ceb4aafb7e0f56ab587b48616"></a><!-- doxytag: member="turbojpeg.h::tjTransform" ref="gae403193ceb4aafb7e0f56ab587b48616" args="(tjhandle handle, unsigned char *jpegBuf, unsigned long jpegSize, int n, unsigned char **dstBufs, unsigned long *dstSizes, tjtransform *transforms, int flags)" -->
+<a class="anchor" id="gae403193ceb4aafb7e0f56ab587b48616"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -1444,12 +1483,11 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
           <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Losslessly transform a JPEG image into another JPEG image. </p>
-<p>Lossless transforms work by moving the raw coefficients from one JPEG image structure to another without altering the values of the coefficients. While this is typically faster than decompressing the image, transforming it, and re-compressing it, lossless transforms are not free. Each lossless transform requires reading and Huffman decoding all of the coefficients in the source image, regardless of the size of the destination image. Thus, this function provides a means of generating multiple transformed images from the same source or of applying multiple transformations simultaneously, in order to eliminate the need to read the source coefficients multiple times.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
+<p>Lossless transforms work by moving the raw coefficients from one JPEG image structure to another without altering the values of the coefficients. While this is typically faster than decompressing the image, transforming it, and re-compressing it, lossless transforms are not free. Each lossless transform requires reading and performing Huffman decoding on all of the coefficients in the source image, regardless of the size of the destination image. Thus, this function provides a means of generating multiple transformed images from the same source or applying multiple transformations simultaneously, in order to eliminate the need to read the source coefficients multiple times.</p>
+<dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">handle</td><td>a handle to a TurboJPEG transformer instance </td></tr>
     <tr><td class="paramname">jpegBuf</td><td>pointer to a buffer containing the JPEG image to transform </td></tr>
@@ -1458,62 +1496,83 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
     <tr><td class="paramname">dstBufs</td><td>pointer to an array of n image buffers. <code>dstBufs[i]</code> will receive a JPEG image that has been transformed using the parameters in <code>transforms[i]</code>. TurboJPEG has the ability to reallocate the JPEG buffer to accommodate the size of the JPEG image. Thus, you can choose to:<ol type="1">
 <li>pre-allocate the JPEG buffer with an arbitrary size using <a class="el" href="group___turbo_j_p_e_g.html#ga5c9234bda6d993cdaffdd89bf81a00ff" title="Allocate an image buffer for use with TurboJPEG.">tjAlloc()</a> and let TurboJPEG grow the buffer as needed,</li>
 <li>set <code>dstBufs[i]</code> to NULL to tell TurboJPEG to allocate the buffer for you, or</li>
-<li>pre-allocate the buffer to a "worst case" size determined by calling <a class="el" href="group___turbo_j_p_e_g.html#gaccc5bca7f12fcdcc302e6e1c6d4b311b" title="The maximum size of the buffer (in bytes) required to hold a JPEG image with the given parameters...">tjBufSize()</a> with the cropped width and height. This should ensure that the buffer never has to be re-allocated (setting <a class="el" href="group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963" title="Disable buffer (re)allocation.">TJFLAG_NOREALLOC</a> guarantees this.)</li>
+<li>pre-allocate the buffer to a "worst case" size determined by calling <a class="el" href="group___turbo_j_p_e_g.html#gaccc5bca7f12fcdcc302e6e1c6d4b311b" title="The maximum size of the buffer (in bytes) required to hold a JPEG image with the given parameters...">tjBufSize()</a> with the transformed or cropped width and height. This should ensure that the buffer never has to be re-allocated (setting <a class="el" href="group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963" title="Disable buffer (re)allocation.">TJFLAG_NOREALLOC</a> guarantees this.)</li>
 </ol>
 If you choose option 1, <code>dstSizes[i]</code> should be set to the size of your pre-allocated buffer. In any case, unless you have set <a class="el" href="group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963" title="Disable buffer (re)allocation.">TJFLAG_NOREALLOC</a>, you should always check <code>dstBufs[i]</code> upon return from this function, as it may have changed. </td></tr>
     <tr><td class="paramname">dstSizes</td><td>pointer to an array of n unsigned long variables that will receive the actual sizes (in bytes) of each transformed JPEG image. If <code>dstBufs[i]</code> points to a pre-allocated buffer, then <code>dstSizes[i]</code> should be set to the size of the buffer. Upon return, <code>dstSizes[i]</code> will contain the size of the JPEG image (in bytes.) </td></tr>
-    <tr><td class="paramname">transforms</td><td>pointer to an array of n tjtransform structures, each of which specifies the transform parameters and/or cropping region for the corresponding transformed output image. </td></tr>
+    <tr><td class="paramname">transforms</td><td>pointer to an array of n <a class="el" href="structtjtransform.html" title="Lossless transform.">tjtransform</a> structures, each of which specifies the transform parameters and/or cropping region for the corresponding transformed output image. </td></tr>
     <tr><td class="paramname">flags</td><td>the bitwise OR of one or more of the <a class="el" href="group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec">flags</a>.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if successful, or -1 if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>0 if successful, or -1 if an error occurred (see <a class="el" href="group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf" title="Returns a descriptive error message explaining why the last command failed.">tjGetErrorStr()</a>.) </dd></dl>
 
 </div>
 </div>
-<hr/><h2>Variable Documentation</h2>
-<a class="anchor" id="ga84e2e35d3f08025f976ec1ec53693dea"></a><!-- doxytag: member="turbojpeg.h::tjBlueOffset" ref="ga84e2e35d3f08025f976ec1ec53693dea" args="[TJ_NUMPF]" -->
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ga84e2e35d3f08025f976ec1ec53693dea"></a>
 <div class="memitem">
 <div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">const int <a class="el" href="group___turbo_j_p_e_g.html#ga84e2e35d3f08025f976ec1ec53693dea">tjBlueOffset</a>[TJ_NUMPF]<code> [static]</code></td>
+          <td class="memname">const int tjBlueOffset[<a class="el" href="group___turbo_j_p_e_g.html#ga7010a4402f54a45ba822ad8675a4655e">TJ_NUMPF</a>]</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
 
 <p>Blue offset (in bytes) for a given pixel format. </p>
 <p>This specifies the number of bytes that the Blue component is offset from the start of the pixel. For instance, if a pixel of format TJ_BGRX is stored in <code>char pixel[]</code>, then the blue component will be <code>pixel[tjBlueOffset[TJ_BGRX]]</code>. </p>
 
 </div>
 </div>
-<a class="anchor" id="ga82d6e35da441112a411da41923c0ba2f"></a><!-- doxytag: member="turbojpeg.h::tjGreenOffset" ref="ga82d6e35da441112a411da41923c0ba2f" args="[TJ_NUMPF]" -->
+<a class="anchor" id="ga82d6e35da441112a411da41923c0ba2f"></a>
 <div class="memitem">
 <div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">const int <a class="el" href="group___turbo_j_p_e_g.html#ga82d6e35da441112a411da41923c0ba2f">tjGreenOffset</a>[TJ_NUMPF]<code> [static]</code></td>
+          <td class="memname">const int tjGreenOffset[<a class="el" href="group___turbo_j_p_e_g.html#ga7010a4402f54a45ba822ad8675a4655e">TJ_NUMPF</a>]</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
 
 <p>Green offset (in bytes) for a given pixel format. </p>
 <p>This specifies the number of bytes that the green component is offset from the start of the pixel. For instance, if a pixel of format TJ_BGRX is stored in <code>char pixel[]</code>, then the green component will be <code>pixel[tjGreenOffset[TJ_BGRX]]</code>. </p>
 
 </div>
 </div>
-<a class="anchor" id="gabd247bb9fecb393eca57366feb8327bf"></a><!-- doxytag: member="turbojpeg.h::tjMCUHeight" ref="gabd247bb9fecb393eca57366feb8327bf" args="[TJ_NUMSAMP]" -->
+<a class="anchor" id="gabd247bb9fecb393eca57366feb8327bf"></a>
 <div class="memitem">
 <div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">const int <a class="el" href="group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf">tjMCUHeight</a>[TJ_NUMSAMP]<code> [static]</code></td>
+          <td class="memname">const int tjMCUHeight[<a class="el" href="group___turbo_j_p_e_g.html#ga5ef3d169162ce77ce348e292a0b7477c">TJ_NUMSAMP</a>]</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
 
 <p>MCU block height (in pixels) for a given level of chrominance subsampling. </p>
 <p>MCU block sizes:</p>
@@ -1526,16 +1585,23 @@ If you choose option 1, <code>dstSizes[i]</code> should be set to the size of yo
 
 </div>
 </div>
-<a class="anchor" id="ga9e61e7cd47a15a173283ba94e781308c"></a><!-- doxytag: member="turbojpeg.h::tjMCUWidth" ref="ga9e61e7cd47a15a173283ba94e781308c" args="[TJ_NUMSAMP]" -->
+<a class="anchor" id="ga9e61e7cd47a15a173283ba94e781308c"></a>
 <div class="memitem">
 <div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">const int <a class="el" href="group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c">tjMCUWidth</a>[TJ_NUMSAMP]<code> [static]</code></td>
+          <td class="memname">const int tjMCUWidth[<a class="el" href="group___turbo_j_p_e_g.html#ga5ef3d169162ce77ce348e292a0b7477c">TJ_NUMSAMP</a>]</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
 
 <p>MCU block width (in pixels) for a given level of chrominance subsampling. </p>
 <p>MCU block sizes:</p>
@@ -1548,54 +1614,57 @@ If you choose option 1, <code>dstSizes[i]</code> should be set to the size of yo
 
 </div>
 </div>
-<a class="anchor" id="gad77cf8fe5b2bfd3cb3f53098146abb4c"></a><!-- doxytag: member="turbojpeg.h::tjPixelSize" ref="gad77cf8fe5b2bfd3cb3f53098146abb4c" args="[TJ_NUMPF]" -->
+<a class="anchor" id="gad77cf8fe5b2bfd3cb3f53098146abb4c"></a>
 <div class="memitem">
 <div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">const int <a class="el" href="group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c">tjPixelSize</a>[TJ_NUMPF]<code> [static]</code></td>
+          <td class="memname">const int tjPixelSize[<a class="el" href="group___turbo_j_p_e_g.html#ga7010a4402f54a45ba822ad8675a4655e">TJ_NUMPF</a>]</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
 
 <p>Pixel size (in bytes) for a given pixel format. </p>
 
 </div>
 </div>
-<a class="anchor" id="gadd9b446742ac8a3923f7992c7988fea8"></a><!-- doxytag: member="turbojpeg.h::tjRedOffset" ref="gadd9b446742ac8a3923f7992c7988fea8" args="[TJ_NUMPF]" -->
+<a class="anchor" id="gadd9b446742ac8a3923f7992c7988fea8"></a>
 <div class="memitem">
 <div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">const int <a class="el" href="group___turbo_j_p_e_g.html#gadd9b446742ac8a3923f7992c7988fea8">tjRedOffset</a>[TJ_NUMPF]<code> [static]</code></td>
+          <td class="memname">const int tjRedOffset[<a class="el" href="group___turbo_j_p_e_g.html#ga7010a4402f54a45ba822ad8675a4655e">TJ_NUMPF</a>]</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
 
 <p>Red offset (in bytes) for a given pixel format. </p>
 <p>This specifies the number of bytes that the red component is offset from the start of the pixel. For instance, if a pixel of format TJ_BGRX is stored in <code>char pixel[]</code>, then the red component will be <code>pixel[tjRedOffset[TJ_BGRX]]</code>. </p>
 
 </div>
 </div>
-</div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Variables</a></div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by&#160;
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.3.1
+</small></address>
 </body>
 </html>
index 4c7b84c..72daeb8 100644 (file)
@@ -2,35 +2,45 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.3.1"/>
 <title>TurboJPEG: Main Page</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
-<body onload='searchBox.OnSelectItem(0);'>
-<!-- Generated by Doxygen 1.7.4 -->
-<script type="text/javascript"><!--
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
---></script>
-<div id="top">
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
+   <div id="projectname">TurboJPEG
+   &#160;<span id="projectnumber">1.2.1</span>
+   </div>
   </td>
  </tr>
  </tbody>
 </table>
 </div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.3.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
   <div id="navrow1" class="tabs">
     <ul class="tablist">
       <li class="current"><a href="index.html"><span>Main&#160;Page</span></a></li>
       <li><a href="modules.html"><span>Modules</span></a></li>
       <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
-      <li id="searchli">
+      <li>
         <div id="MSearchBox" class="MSearchBoxInactive">
         <span class="left">
           <img id="MSearchSelect" src="search/mag_sel.png"
@@ -48,19 +58,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       </li>
     </ul>
   </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">TurboJPEG Documentation</div>  </div>
-</div>
-<div class="contents">
-</div>
+</div><!-- top -->
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
      onmouseout="return searchBox.OnSearchSelectHide()"
      onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a></div>
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
@@ -69,8 +73,17 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </iframe>
 </div>
 
-<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by&#160;
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
+<div class="header">
+  <div class="headertitle">
+<div class="title">TurboJPEG Documentation</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.3.1
+</small></address>
 </body>
 </html>
diff --git a/doc/html/installdox b/doc/html/installdox
deleted file mode 100755 (executable)
index edf5bbf..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/usr/bin/perl
-
-%subst = ( );
-$quiet   = 0;
-
-while ( @ARGV ) {
-  $_ = shift @ARGV;
-  if ( s/^-// ) {
-    if ( /^l(.*)/ ) {
-      $v = ($1 eq "") ? shift @ARGV : $1;
-      ($v =~ /\/$/) || ($v .= "/");
-      $_ = $v;
-      if ( /(.+)\@(.+)/ ) {
-        if ( exists $subst{$1} ) {
-          $subst{$1} = $2;
-        } else {
-          print STDERR "Unknown tag file $1 given with option -l\n";
-          &usage();
-        }
-      } else {
-        print STDERR "Argument $_ is invalid for option -l\n";
-        &usage();
-      }
-    }
-    elsif ( /^q/ ) {
-      $quiet = 1;
-    }
-    elsif ( /^\?|^h/ ) {
-      &usage();
-    }
-    else {
-      print STDERR "Illegal option -$_\n";
-      &usage();
-    }
-  }
-  else {
-    push (@files, $_ );
-  }
-}
-
-foreach $sub (keys %subst)
-{
-  if ( $subst{$sub} eq "" ) 
-  {
-    print STDERR "No substitute given for tag file `$sub'\n";
-    &usage();
-  }
-  elsif ( ! $quiet && $sub ne "_doc" && $sub ne "_cgi" )
-  {
-    print "Substituting $subst{$sub} for each occurrence of tag file $sub\n"; 
-  }
-}
-
-if ( ! @files ) {
-  if (opendir(D,".")) {
-    foreach $file ( readdir(D) ) {
-      $match = ".html";
-      next if ( $file =~ /^\.\.?$/ );
-      ($file =~ /$match/) && (push @files, $file);
-      ($file =~ /\.svg/) && (push @files, $file);
-      ($file =~ "navtree.js") && (push @files, $file);
-    }
-    closedir(D);
-  }
-}
-
-if ( ! @files ) {
-  print STDERR "Warning: No input files given and none found!\n";
-}
-
-foreach $f (@files)
-{
-  if ( ! $quiet ) {
-    print "Editing: $f...\n";
-  }
-  $oldf = $f;
-  $f   .= ".bak";
-  unless (rename $oldf,$f) {
-    print STDERR "Error: cannot rename file $oldf\n";
-    exit 1;
-  }
-  if (open(F,"<$f")) {
-    unless (open(G,">$oldf")) {
-      print STDERR "Error: opening file $oldf for writing\n";
-      exit 1;
-    }
-    if ($oldf ne "tree.js") {
-      while (<F>) {
-        s/doxygen\=\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\" (xlink:href|href|src)=\"\2/doxygen\=\"$1:$subst{$1}\" \3=\"$subst{$1}/g;
-        print G "$_";
-      }
-    }
-    else {
-      while (<F>) {
-        s/\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\", \"\2/\"$1:$subst{$1}\" ,\"$subst{$1}/g;
-        print G "$_";
-      }
-    }
-  } 
-  else {
-    print STDERR "Warning file $f does not exist\n";
-  }
-  unlink $f;
-}
-
-sub usage {
-  print STDERR "Usage: installdox [options] [html-file [html-file ...]]\n";
-  print STDERR "Options:\n";
-  print STDERR "     -l tagfile\@linkName   tag file + URL or directory \n";
-  print STDERR "     -q                    Quiet mode\n\n";
-  exit 1;
-}
index c052173..63939e7 100644 (file)
@@ -1,54 +1,8 @@
-/*
- * jQuery JavaScript Library v1.3.2
- * http://jquery.com/
- *
- * Copyright (c) 2009 John Resig
- * Dual licensed under the MIT and GPL licenses.
- * http://docs.jquery.com/License
- *
- * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
- * Revision: 6246
- */
-(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){
-var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
-/*
- * Sizzle CSS Selector Engine - v0.9.3
- *  Copyright 2009, The Dojo Foundation
- *  Released under the MIT, BSD, and GPL Licenses.
- *  More information: http://sizzlejs.com/
- */
-(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0)
-{I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function()
-{G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
-/*
- * jQuery UI 1.7.2
- *
- * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * http://docs.jquery.com/UI
- */
-jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* * jQuery UI Resizable 1.7.2
- *
- * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- *     ui.core.js
- */
-(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0))
-{s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;
-/**
- * jQuery.ScrollTo - Easy element scrolling using jQuery.
- * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com
- * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php).
- * Date: 2/8/2008
- * @author Ariel Flesler
- * @version 1.3.2
- */
-;(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p]);if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
-
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function()
+{g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d
+&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),
+f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c)
+{if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
index e95f920..25b7ec6 100644 (file)
@@ -2,35 +2,45 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.3.1"/>
 <title>TurboJPEG: Modules</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
-<body onload='searchBox.OnSelectItem(0);'>
-<!-- Generated by Doxygen 1.7.4 -->
-<script type="text/javascript"><!--
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
---></script>
-<div id="top">
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
+   <div id="projectname">TurboJPEG
+   &#160;<span id="projectnumber">1.2.1</span>
+   </div>
   </td>
  </tr>
  </tbody>
 </table>
 </div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.3.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
   <div id="navrow1" class="tabs">
     <ul class="tablist">
       <li><a href="index.html"><span>Main&#160;Page</span></a></li>
       <li class="current"><a href="modules.html"><span>Modules</span></a></li>
       <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
-      <li id="searchli">
+      <li>
         <div id="MSearchBox" class="MSearchBoxInactive">
         <span class="left">
           <img id="MSearchSelect" src="search/mag_sel.png"
@@ -48,22 +58,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       </li>
     </ul>
   </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Modules</div>  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all modules:</div><ul>
-<li><a class="el" href="group___turbo_j_p_e_g.html">TurboJPEG</a></li>
-</ul>
-</div>
+</div><!-- top -->
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
      onmouseout="return searchBox.OnSearchSelectHide()"
      onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Variables</a></div>
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a></div>
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
@@ -72,8 +73,22 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </iframe>
 </div>
 
-<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by&#160;
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
+<div class="header">
+  <div class="headertitle">
+<div class="title">Modules</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all modules:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group___turbo_j_p_e_g.html" target="_self">TurboJPEG</a></td><td class="desc">TurboJPEG API</td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.3.1
+</small></address>
 </body>
 </html>
index 1b07a16..72a58a5 100644 (file)
Binary files a/doc/html/nav_f.png and b/doc/html/nav_f.png differ
diff --git a/doc/html/nav_g.png b/doc/html/nav_g.png
new file mode 100644 (file)
index 0000000..2093a23
Binary files /dev/null and b/doc/html/nav_g.png differ
index 01f5fa6..33389b1 100644 (file)
Binary files a/doc/html/nav_h.png and b/doc/html/nav_h.png differ
index 7b35d2c..30f75c7 100644 (file)
Binary files a/doc/html/open.png and b/doc/html/open.png differ
index 8cfc38f..e7f34db 100644 (file)
@@ -1,18 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_63.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_customfilter">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1" target="_parent">customFilter</a>
-  <span class="SRScope">tjtransform</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/all_63.js b/doc/html/search/all_63.js
new file mode 100644 (file)
index 0000000..7b058da
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['customfilter',['customFilter',['../structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1',1,'tjtransform']]]
+];
index 2e53b02..360601f 100644 (file)
@@ -1,24 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_64.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_data">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3" target="_parent">data</a>
-  <span class="SRScope">tjtransform</span>
- </div>
-</div>
-<div class="SRResult" id="SR_denom">
- <div class="SREntry">
-  <a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3" target="_parent">denom</a>
-  <span class="SRScope">tjscalingfactor</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/all_64.js b/doc/html/search/all_64.js
new file mode 100644 (file)
index 0000000..e19a050
--- /dev/null
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['data',['data',['../structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3',1,'tjtransform']]],
+  ['denom',['denom',['../structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3',1,'tjscalingfactor']]]
+];
index ccb671d..dec41d6 100644 (file)
@@ -1,18 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_68.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_h">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115" target="_parent">h</a>
-  <span class="SRScope">tjregion</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/all_68.js b/doc/html/search/all_68.js
new file mode 100644 (file)
index 0000000..7b17e97
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['h',['h',['../structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115',1,'tjregion']]]
+];
index b9f5b05..e0fd765 100644 (file)
@@ -1,18 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6e.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_num">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec" target="_parent">num</a>
-  <span class="SRScope">tjscalingfactor</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/all_6e.js b/doc/html/search/all_6e.js
new file mode 100644 (file)
index 0000000..83faa13
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['num',['num',['../structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec',1,'tjscalingfactor']]]
+];
index d95bbef..5e86b03 100644 (file)
@@ -1,24 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6f.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_op">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498" target="_parent">op</a>
-  <span class="SRScope">tjtransform</span>
- </div>
-</div>
-<div class="SRResult" id="SR_options">
- <div class="SREntry">
-  <a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6" target="_parent">options</a>
-  <span class="SRScope">tjtransform</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/all_6f.js b/doc/html/search/all_6f.js
new file mode 100644 (file)
index 0000000..1cca832
--- /dev/null
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['op',['op',['../structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498',1,'tjtransform']]],
+  ['options',['options',['../structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6',1,'tjtransform']]]
+];
index 465fe88..347b9f6 100644 (file)
@@ -1,18 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_72.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_r">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf" target="_parent">r</a>
-  <span class="SRScope">tjtransform</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/all_72.js b/doc/html/search/all_72.js
new file mode 100644 (file)
index 0000000..01cde35
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['r',['r',['../structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf',1,'tjtransform']]]
+];
index fd77663..c646aef 100644 (file)
@@ -1,27 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_74.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_tjregion">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjregion.html" target="_parent">tjregion</a>
- </div>
-</div>
-<div class="SRResult" id="SR_tjscalingfactor">
- <div class="SREntry">
-  <a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../structtjscalingfactor.html" target="_parent">tjscalingfactor</a>
- </div>
-</div>
-<div class="SRResult" id="SR_tjtransform">
- <div class="SREntry">
-  <a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../structtjtransform.html" target="_parent">tjtransform</a>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/all_74.js b/doc/html/search/all_74.js
new file mode 100644 (file)
index 0000000..a1927ba
--- /dev/null
@@ -0,0 +1,75 @@
+var searchData=
+[
+  ['tj_5fnumpf',['TJ_NUMPF',['../group___turbo_j_p_e_g.html#ga7010a4402f54a45ba822ad8675a4655e',1,'turbojpeg.h']]],
+  ['tj_5fnumsamp',['TJ_NUMSAMP',['../group___turbo_j_p_e_g.html#ga5ef3d169162ce77ce348e292a0b7477c',1,'turbojpeg.h']]],
+  ['tj_5fnumxop',['TJ_NUMXOP',['../group___turbo_j_p_e_g.html#ga0f6dbd18adf38b7d46ac547f0f4d562c',1,'turbojpeg.h']]],
+  ['tjalloc',['tjAlloc',['../group___turbo_j_p_e_g.html#ga5c9234bda6d993cdaffdd89bf81a00ff',1,'turbojpeg.h']]],
+  ['tjblueoffset',['tjBlueOffset',['../group___turbo_j_p_e_g.html#ga84e2e35d3f08025f976ec1ec53693dea',1,'turbojpeg.h']]],
+  ['tjbufsize',['tjBufSize',['../group___turbo_j_p_e_g.html#gaccc5bca7f12fcdcc302e6e1c6d4b311b',1,'turbojpeg.h']]],
+  ['tjbufsizeyuv',['tjBufSizeYUV',['../group___turbo_j_p_e_g.html#ga9d0cb06fd5052d21b6f2b382db8b219c',1,'turbojpeg.h']]],
+  ['tjcompress2',['tjCompress2',['../group___turbo_j_p_e_g.html#gaba62b7a98f960839b588579898495cf2',1,'turbojpeg.h']]],
+  ['tjdecompress2',['tjDecompress2',['../group___turbo_j_p_e_g.html#gada69cc6443d1bb493b40f1626259e5e9',1,'turbojpeg.h']]],
+  ['tjdecompressheader2',['tjDecompressHeader2',['../group___turbo_j_p_e_g.html#gac5675fceb7997b385516cdffdb34e6aa',1,'turbojpeg.h']]],
+  ['tjdecompresstoyuv',['tjDecompressToYUV',['../group___turbo_j_p_e_g.html#gad7810af095624a4016e72957a50f77d8',1,'turbojpeg.h']]],
+  ['tjdestroy',['tjDestroy',['../group___turbo_j_p_e_g.html#ga674adee917b95ad4a896f1ba39e12540',1,'turbojpeg.h']]],
+  ['tjencodeyuv2',['tjEncodeYUV2',['../group___turbo_j_p_e_g.html#ga0fa4e7b1943687c6a0c0304529c55d35',1,'turbojpeg.h']]],
+  ['tjflag_5faccuratedct',['TJFLAG_ACCURATEDCT',['../group___turbo_j_p_e_g.html#gacb233cfd722d66d1ccbf48a7de81f0e0',1,'turbojpeg.h']]],
+  ['tjflag_5fbottomup',['TJFLAG_BOTTOMUP',['../group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec',1,'turbojpeg.h']]],
+  ['tjflag_5ffastdct',['TJFLAG_FASTDCT',['../group___turbo_j_p_e_g.html#gaabce235db80d3f698b27f36cbd453da2',1,'turbojpeg.h']]],
+  ['tjflag_5ffastupsample',['TJFLAG_FASTUPSAMPLE',['../group___turbo_j_p_e_g.html#ga4ee4506c81177a06f77e2504a22efd2d',1,'turbojpeg.h']]],
+  ['tjflag_5fforcemmx',['TJFLAG_FORCEMMX',['../group___turbo_j_p_e_g.html#ga4e872f11c82f241736fa8297920f24e5',1,'turbojpeg.h']]],
+  ['tjflag_5fforcesse',['TJFLAG_FORCESSE',['../group___turbo_j_p_e_g.html#gae17e63189e8cd730feed3efbd2454f38',1,'turbojpeg.h']]],
+  ['tjflag_5fforcesse2',['TJFLAG_FORCESSE2',['../group___turbo_j_p_e_g.html#ga8cf0bca96ea4d472563f4b0ebf8c48e7',1,'turbojpeg.h']]],
+  ['tjflag_5fforcesse3',['TJFLAG_FORCESSE3',['../group___turbo_j_p_e_g.html#gaf9d49066633404da4386d70820295dd2',1,'turbojpeg.h']]],
+  ['tjflag_5fnorealloc',['TJFLAG_NOREALLOC',['../group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963',1,'turbojpeg.h']]],
+  ['tjfree',['tjFree',['../group___turbo_j_p_e_g.html#ga8c4a1231dc06a450514c835f6471f137',1,'turbojpeg.h']]],
+  ['tjgeterrorstr',['tjGetErrorStr',['../group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf',1,'turbojpeg.h']]],
+  ['tjgetscalingfactors',['tjGetScalingFactors',['../group___turbo_j_p_e_g.html#ga6449044b9af402999ccf52f401333be8',1,'turbojpeg.h']]],
+  ['tjgreenoffset',['tjGreenOffset',['../group___turbo_j_p_e_g.html#ga82d6e35da441112a411da41923c0ba2f',1,'turbojpeg.h']]],
+  ['tjhandle',['tjhandle',['../group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763',1,'turbojpeg.h']]],
+  ['tjinitcompress',['tjInitCompress',['../group___turbo_j_p_e_g.html#ga3d10c47fbe4a2489a2b30c931551d01a',1,'turbojpeg.h']]],
+  ['tjinitdecompress',['tjInitDecompress',['../group___turbo_j_p_e_g.html#gae5408179d041e2a2f7199c8283cf649e',1,'turbojpeg.h']]],
+  ['tjinittransform',['tjInitTransform',['../group___turbo_j_p_e_g.html#ga3155b775bfbac9dbba869b95a0367902',1,'turbojpeg.h']]],
+  ['tjmcuheight',['tjMCUHeight',['../group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf',1,'turbojpeg.h']]],
+  ['tjmcuwidth',['tjMCUWidth',['../group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c',1,'turbojpeg.h']]],
+  ['tjpad',['TJPAD',['../group___turbo_j_p_e_g.html#ga0aba955473315e405295d978f0c16511',1,'turbojpeg.h']]],
+  ['tjpf',['TJPF',['../group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a',1,'turbojpeg.h']]],
+  ['tjpf_5fabgr',['TJPF_ABGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa1ba1a7f1631dbeaa49a0a85fc4a40081',1,'turbojpeg.h']]],
+  ['tjpf_5fargb',['TJPF_ARGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aae8f846ed9d9de99b6e1dfe448848765c',1,'turbojpeg.h']]],
+  ['tjpf_5fbgr',['TJPF_BGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aab10624437fb8ef495a0b153e65749839',1,'turbojpeg.h']]],
+  ['tjpf_5fbgra',['TJPF_BGRA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aac037ff1845cf9b74bb81a3659c2b9fb4',1,'turbojpeg.h']]],
+  ['tjpf_5fbgrx',['TJPF_BGRX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa2a1fbf569ca79897eae886e3376ca4c8',1,'turbojpeg.h']]],
+  ['tjpf_5fgray',['TJPF_GRAY',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa5431b54b015337705f13118073711a1a',1,'turbojpeg.h']]],
+  ['tjpf_5frgb',['TJPF_RGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7ce93230bff449518ce387c17e6ed37c',1,'turbojpeg.h']]],
+  ['tjpf_5frgba',['TJPF_RGBA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa88d2e88fab67f6503cf972e14851cc12',1,'turbojpeg.h']]],
+  ['tjpf_5frgbx',['TJPF_RGBX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa83973bebb7e2dc6fa8bae89ff3f42e01',1,'turbojpeg.h']]],
+  ['tjpf_5fxbgr',['TJPF_XBGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aaf6603b27147de47e212e75dac027b2af',1,'turbojpeg.h']]],
+  ['tjpf_5fxrgb',['TJPF_XRGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aadae996905efcfa3b42a0bb3bea7f9d84',1,'turbojpeg.h']]],
+  ['tjpixelsize',['tjPixelSize',['../group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c',1,'turbojpeg.h']]],
+  ['tjredoffset',['tjRedOffset',['../group___turbo_j_p_e_g.html#gadd9b446742ac8a3923f7992c7988fea8',1,'turbojpeg.h']]],
+  ['tjregion',['tjregion',['../structtjregion.html',1,'']]],
+  ['tjsamp',['TJSAMP',['../group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074',1,'turbojpeg.h']]],
+  ['tjsamp_5f420',['TJSAMP_420',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a63085dbf683cfe39e513cdb6343e3737',1,'turbojpeg.h']]],
+  ['tjsamp_5f422',['TJSAMP_422',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a136130902cc578f11f32429b59368404',1,'turbojpeg.h']]],
+  ['tjsamp_5f440',['TJSAMP_440',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074accf740e6f3aa6ba20ba922cad13cb974',1,'turbojpeg.h']]],
+  ['tjsamp_5f444',['TJSAMP_444',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3',1,'turbojpeg.h']]],
+  ['tjsamp_5fgray',['TJSAMP_GRAY',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a3f1c9504842ddc7a48d0f690754b6248',1,'turbojpeg.h']]],
+  ['tjscaled',['TJSCALED',['../group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df',1,'turbojpeg.h']]],
+  ['tjscalingfactor',['tjscalingfactor',['../structtjscalingfactor.html',1,'']]],
+  ['tjtransform',['tjtransform',['../structtjtransform.html',1,'tjtransform'],['../group___turbo_j_p_e_g.html#gaa29f3189c41be12ec5dee7caec318a31',1,'tjtransform():&#160;turbojpeg.h'],['../group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616',1,'tjTransform(tjhandle handle, unsigned char *jpegBuf, unsigned long jpegSize, int n, unsigned char **dstBufs, unsigned long *dstSizes, tjtransform *transforms, int flags):&#160;turbojpeg.h']]],
+  ['tjxop',['TJXOP',['../group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866',1,'turbojpeg.h']]],
+  ['tjxop_5fhflip',['TJXOP_HFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aa0df69776caa30f0fa28e26332d311ce',1,'turbojpeg.h']]],
+  ['tjxop_5fnone',['TJXOP_NONE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aad88c0366cd3f7d0eac9d7a3fa1c2c27',1,'turbojpeg.h']]],
+  ['tjxop_5frot180',['TJXOP_ROT180',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a140952eb8dd0300accfcc22726d69692',1,'turbojpeg.h']]],
+  ['tjxop_5frot270',['TJXOP_ROT270',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a3064ee5dfb7f032df332818587567a08',1,'turbojpeg.h']]],
+  ['tjxop_5frot90',['TJXOP_ROT90',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a43b2bbb23bc4bd548422d43fbe9af128',1,'turbojpeg.h']]],
+  ['tjxop_5ftranspose',['TJXOP_TRANSPOSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a31060aed199f886afdd417f80499c32d',1,'turbojpeg.h']]],
+  ['tjxop_5ftransverse',['TJXOP_TRANSVERSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866af3b14d488aea6ece9e5b3df73a74d6a4',1,'turbojpeg.h']]],
+  ['tjxop_5fvflip',['TJXOP_VFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a324eddfbec53b7e691f61e56929d0d5d',1,'turbojpeg.h']]],
+  ['tjxopt_5fcrop',['TJXOPT_CROP',['../group___turbo_j_p_e_g.html#ga9c771a757fc1294add611906b89ab2d2',1,'turbojpeg.h']]],
+  ['tjxopt_5fgray',['TJXOPT_GRAY',['../group___turbo_j_p_e_g.html#ga3acee7b48ade1b99e5588736007c2589',1,'turbojpeg.h']]],
+  ['tjxopt_5fnooutput',['TJXOPT_NOOUTPUT',['../group___turbo_j_p_e_g.html#gafbf992bbf6e006705886333703ffab31',1,'turbojpeg.h']]],
+  ['tjxopt_5fperfect',['TJXOPT_PERFECT',['../group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00',1,'turbojpeg.h']]],
+  ['tjxopt_5ftrim',['TJXOPT_TRIM',['../group___turbo_j_p_e_g.html#ga319826b7eb1583c0595bbe7b95428709',1,'turbojpeg.h']]],
+  ['turbojpeg',['TurboJPEG',['../group___turbo_j_p_e_g.html',1,'']]]
+];
index b4c8d88..55d7142 100644 (file)
@@ -1,18 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_77.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_w">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42" target="_parent">w</a>
-  <span class="SRScope">tjregion</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/all_77.js b/doc/html/search/all_77.js
new file mode 100644 (file)
index 0000000..4267002
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['w',['w',['../structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42',1,'tjregion']]]
+];
index a357691..39075d4 100644 (file)
@@ -1,18 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_78.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_x">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjregion.html#a4b6a37a93997091b26a75831fa291ad9" target="_parent">x</a>
-  <span class="SRScope">tjregion</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/all_78.js b/doc/html/search/all_78.js
new file mode 100644 (file)
index 0000000..41a27f2
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['x',['x',['../structtjregion.html#a4b6a37a93997091b26a75831fa291ad9',1,'tjregion']]]
+];
index a883bd1..033719a 100644 (file)
@@ -1,18 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_79.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_y">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2" target="_parent">y</a>
-  <span class="SRScope">tjregion</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/all_79.js b/doc/html/search/all_79.js
new file mode 100644 (file)
index 0000000..86890a6
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['y',['y',['../structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2',1,'tjregion']]]
+];
index fd77663..4b0fdaa 100644 (file)
@@ -1,27 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_74.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_tjregion">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjregion.html" target="_parent">tjregion</a>
- </div>
-</div>
-<div class="SRResult" id="SR_tjscalingfactor">
- <div class="SREntry">
-  <a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../structtjscalingfactor.html" target="_parent">tjscalingfactor</a>
- </div>
-</div>
-<div class="SRResult" id="SR_tjtransform">
- <div class="SREntry">
-  <a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../structtjtransform.html" target="_parent">tjtransform</a>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/classes_74.js b/doc/html/search/classes_74.js
new file mode 100644 (file)
index 0000000..cd623d2
--- /dev/null
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['tjregion',['tjregion',['../structtjregion.html',1,'']]],
+  ['tjscalingfactor',['tjscalingfactor',['../structtjscalingfactor.html',1,'']]],
+  ['tjtransform',['tjtransform',['../structtjtransform.html',1,'']]]
+];
diff --git a/doc/html/search/enums_74.html b/doc/html/search/enums_74.html
new file mode 100644 (file)
index 0000000..9b754ee
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="enums_74.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/html/search/enums_74.js b/doc/html/search/enums_74.js
new file mode 100644 (file)
index 0000000..20bd4db
--- /dev/null
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['tjpf',['TJPF',['../group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a',1,'turbojpeg.h']]],
+  ['tjsamp',['TJSAMP',['../group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074',1,'turbojpeg.h']]],
+  ['tjxop',['TJXOP',['../group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866',1,'turbojpeg.h']]]
+];
diff --git a/doc/html/search/enumvalues_74.html b/doc/html/search/enumvalues_74.html
new file mode 100644 (file)
index 0000000..0d69a0a
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="enumvalues_74.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/html/search/enumvalues_74.js b/doc/html/search/enumvalues_74.js
new file mode 100644 (file)
index 0000000..55664f1
--- /dev/null
@@ -0,0 +1,27 @@
+var searchData=
+[
+  ['tjpf_5fabgr',['TJPF_ABGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa1ba1a7f1631dbeaa49a0a85fc4a40081',1,'turbojpeg.h']]],
+  ['tjpf_5fargb',['TJPF_ARGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aae8f846ed9d9de99b6e1dfe448848765c',1,'turbojpeg.h']]],
+  ['tjpf_5fbgr',['TJPF_BGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aab10624437fb8ef495a0b153e65749839',1,'turbojpeg.h']]],
+  ['tjpf_5fbgra',['TJPF_BGRA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aac037ff1845cf9b74bb81a3659c2b9fb4',1,'turbojpeg.h']]],
+  ['tjpf_5fbgrx',['TJPF_BGRX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa2a1fbf569ca79897eae886e3376ca4c8',1,'turbojpeg.h']]],
+  ['tjpf_5fgray',['TJPF_GRAY',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa5431b54b015337705f13118073711a1a',1,'turbojpeg.h']]],
+  ['tjpf_5frgb',['TJPF_RGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7ce93230bff449518ce387c17e6ed37c',1,'turbojpeg.h']]],
+  ['tjpf_5frgba',['TJPF_RGBA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa88d2e88fab67f6503cf972e14851cc12',1,'turbojpeg.h']]],
+  ['tjpf_5frgbx',['TJPF_RGBX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa83973bebb7e2dc6fa8bae89ff3f42e01',1,'turbojpeg.h']]],
+  ['tjpf_5fxbgr',['TJPF_XBGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aaf6603b27147de47e212e75dac027b2af',1,'turbojpeg.h']]],
+  ['tjpf_5fxrgb',['TJPF_XRGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aadae996905efcfa3b42a0bb3bea7f9d84',1,'turbojpeg.h']]],
+  ['tjsamp_5f420',['TJSAMP_420',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a63085dbf683cfe39e513cdb6343e3737',1,'turbojpeg.h']]],
+  ['tjsamp_5f422',['TJSAMP_422',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a136130902cc578f11f32429b59368404',1,'turbojpeg.h']]],
+  ['tjsamp_5f440',['TJSAMP_440',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074accf740e6f3aa6ba20ba922cad13cb974',1,'turbojpeg.h']]],
+  ['tjsamp_5f444',['TJSAMP_444',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3',1,'turbojpeg.h']]],
+  ['tjsamp_5fgray',['TJSAMP_GRAY',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a3f1c9504842ddc7a48d0f690754b6248',1,'turbojpeg.h']]],
+  ['tjxop_5fhflip',['TJXOP_HFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aa0df69776caa30f0fa28e26332d311ce',1,'turbojpeg.h']]],
+  ['tjxop_5fnone',['TJXOP_NONE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aad88c0366cd3f7d0eac9d7a3fa1c2c27',1,'turbojpeg.h']]],
+  ['tjxop_5frot180',['TJXOP_ROT180',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a140952eb8dd0300accfcc22726d69692',1,'turbojpeg.h']]],
+  ['tjxop_5frot270',['TJXOP_ROT270',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a3064ee5dfb7f032df332818587567a08',1,'turbojpeg.h']]],
+  ['tjxop_5frot90',['TJXOP_ROT90',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a43b2bbb23bc4bd548422d43fbe9af128',1,'turbojpeg.h']]],
+  ['tjxop_5ftranspose',['TJXOP_TRANSPOSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a31060aed199f886afdd417f80499c32d',1,'turbojpeg.h']]],
+  ['tjxop_5ftransverse',['TJXOP_TRANSVERSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866af3b14d488aea6ece9e5b3df73a74d6a4',1,'turbojpeg.h']]],
+  ['tjxop_5fvflip',['TJXOP_VFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a324eddfbec53b7e691f61e56929d0d5d',1,'turbojpeg.h']]]
+];
diff --git a/doc/html/search/functions_74.html b/doc/html/search/functions_74.html
new file mode 100644 (file)
index 0000000..1605901
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_74.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/html/search/functions_74.js b/doc/html/search/functions_74.js
new file mode 100644 (file)
index 0000000..c746a91
--- /dev/null
@@ -0,0 +1,19 @@
+var searchData=
+[
+  ['tjalloc',['tjAlloc',['../group___turbo_j_p_e_g.html#ga5c9234bda6d993cdaffdd89bf81a00ff',1,'turbojpeg.h']]],
+  ['tjbufsize',['tjBufSize',['../group___turbo_j_p_e_g.html#gaccc5bca7f12fcdcc302e6e1c6d4b311b',1,'turbojpeg.h']]],
+  ['tjbufsizeyuv',['tjBufSizeYUV',['../group___turbo_j_p_e_g.html#ga9d0cb06fd5052d21b6f2b382db8b219c',1,'turbojpeg.h']]],
+  ['tjcompress2',['tjCompress2',['../group___turbo_j_p_e_g.html#gaba62b7a98f960839b588579898495cf2',1,'turbojpeg.h']]],
+  ['tjdecompress2',['tjDecompress2',['../group___turbo_j_p_e_g.html#gada69cc6443d1bb493b40f1626259e5e9',1,'turbojpeg.h']]],
+  ['tjdecompressheader2',['tjDecompressHeader2',['../group___turbo_j_p_e_g.html#gac5675fceb7997b385516cdffdb34e6aa',1,'turbojpeg.h']]],
+  ['tjdecompresstoyuv',['tjDecompressToYUV',['../group___turbo_j_p_e_g.html#gad7810af095624a4016e72957a50f77d8',1,'turbojpeg.h']]],
+  ['tjdestroy',['tjDestroy',['../group___turbo_j_p_e_g.html#ga674adee917b95ad4a896f1ba39e12540',1,'turbojpeg.h']]],
+  ['tjencodeyuv2',['tjEncodeYUV2',['../group___turbo_j_p_e_g.html#ga0fa4e7b1943687c6a0c0304529c55d35',1,'turbojpeg.h']]],
+  ['tjfree',['tjFree',['../group___turbo_j_p_e_g.html#ga8c4a1231dc06a450514c835f6471f137',1,'turbojpeg.h']]],
+  ['tjgeterrorstr',['tjGetErrorStr',['../group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf',1,'turbojpeg.h']]],
+  ['tjgetscalingfactors',['tjGetScalingFactors',['../group___turbo_j_p_e_g.html#ga6449044b9af402999ccf52f401333be8',1,'turbojpeg.h']]],
+  ['tjinitcompress',['tjInitCompress',['../group___turbo_j_p_e_g.html#ga3d10c47fbe4a2489a2b30c931551d01a',1,'turbojpeg.h']]],
+  ['tjinitdecompress',['tjInitDecompress',['../group___turbo_j_p_e_g.html#gae5408179d041e2a2f7199c8283cf649e',1,'turbojpeg.h']]],
+  ['tjinittransform',['tjInitTransform',['../group___turbo_j_p_e_g.html#ga3155b775bfbac9dbba869b95a0367902',1,'turbojpeg.h']]],
+  ['tjtransform',['tjTransform',['../group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616',1,'turbojpeg.h']]]
+];
diff --git a/doc/html/search/groups_74.html b/doc/html/search/groups_74.html
new file mode 100644 (file)
index 0000000..a169560
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_74.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/html/search/groups_74.js b/doc/html/search/groups_74.js
new file mode 100644 (file)
index 0000000..27d4ffb
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['turbojpeg',['TurboJPEG',['../group___turbo_j_p_e_g.html',1,'']]]
+];
index 50249e5..5b208ed 100644 (file)
@@ -4,13 +4,6 @@
     float: left;
 }
 
-#searchli {
-    float: right;
-    display: block;
-    width: 170px;
-    height: 36px;
-}
-
 #MSearchBox {
     white-space : nowrap;
     position: absolute;
@@ -20,6 +13,7 @@
     right: 0px;
     width: 170px;
     z-index: 102;
+    background-color: white;
 }
 
 #MSearchBox .left
@@ -224,6 +218,10 @@ a.SRScope:focus, a.SRScope:active {
     text-decoration: underline;
 }
 
+span.SRScope {
+    padding-left: 4px;
+}
+
 .SRPage .SRStatus {
     padding: 2px 5px;
     font-size: 8pt;
@@ -238,3 +236,36 @@ DIV.searchresults {
     margin-left: 10px;
     margin-right: 10px;
 }
+
+/*---------------- External search page results */
+
+.searchresult {
+    background-color: #F0F3F8;
+}
+
+.pages b {
+   color: white;
+   padding: 5px 5px 3px 5px;
+   background-image: url("../tab_a.png");
+   background-repeat: repeat-x;
+   text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+    line-height: 17px;
+    margin-left: 4px;
+    text-decoration: none;
+}
+
+.hl {
+    font-weight: bold;
+}
+
+#searchresults {
+    margin-bottom: 20px;
+}
+
+.searchpages {
+    margin-top: 10px;
+}
+
index 0a9c356..409672c 100644 (file)
@@ -9,14 +9,24 @@ var indexSectionsWithContent =
 {
   0: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100010000011001010011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
   1: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
-  2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100010000011001000011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+  2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+  3: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100010000011001010011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+  4: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+  5: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+  6: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+  7: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
 };
 
 var indexSectionNames =
 {
   0: "all",
   1: "classes",
-  2: "variables"
+  2: "functions",
+  3: "variables",
+  4: "typedefs",
+  5: "enums",
+  6: "enumvalues",
+  7: "groups"
 };
 
 function convertToId(search)
@@ -261,7 +271,7 @@ function SearchBox(name, resultsPath, inFrame, label)
         var node = child.firstChild;
         if (j==id)
         {
-          node.innerHTML='&bull;';
+          node.innerHTML='&#8226;';
         }
         else
         {
@@ -358,7 +368,7 @@ function SearchBox(name, resultsPath, inFrame, label)
        hasResultsPage = false;
     }
 
-    window.frames.MSearchResults.location.href = resultsPageWithSearch;  
+    window.frames.MSearchResults.location = resultsPageWithSearch;  
     var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
 
     if (domPopupSearchResultsWindow.style.display!='block')
@@ -728,3 +738,72 @@ function SearchResults(name)
       return false;
     }
 }
+
+function setKeyActions(elem,action)
+{
+  elem.setAttribute('onkeydown',action);
+  elem.setAttribute('onkeypress',action);
+  elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+  elem.setAttribute('class',attr);
+  elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+  var results = document.getElementById("SRResults");
+  for (var e=0; e<searchData.length; e++)
+  {
+    var id = searchData[e][0];
+    var srResult = document.createElement('div');
+    srResult.setAttribute('id','SR_'+id);
+    setClassAttr(srResult,'SRResult');
+    var srEntry = document.createElement('div');
+    setClassAttr(srEntry,'SREntry');
+    var srLink = document.createElement('a');
+    srLink.setAttribute('id','Item'+e);
+    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
+    setClassAttr(srLink,'SRSymbol');
+    srLink.innerHTML = searchData[e][1][0];
+    srEntry.appendChild(srLink);
+    if (searchData[e][1].length==2) // single result
+    {
+      srLink.setAttribute('href',searchData[e][1][1][0]);
+      if (searchData[e][1][1][1])
+      {
+       srLink.setAttribute('target','_parent');
+      }
+      var srScope = document.createElement('span');
+      setClassAttr(srScope,'SRScope');
+      srScope.innerHTML = searchData[e][1][1][2];
+      srEntry.appendChild(srScope);
+    }
+    else // multiple results
+    {
+      srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
+      var srChildren = document.createElement('div');
+      setClassAttr(srChildren,'SRChildren');
+      for (var c=0; c<searchData[e][1].length-1; c++)
+      {
+        var srChild = document.createElement('a');
+        srChild.setAttribute('id','Item'+e+'_c'+c);
+        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
+        setClassAttr(srChild,'SRScope');
+        srChild.setAttribute('href',searchData[e][1][c+1][0]);
+        if (searchData[e][1][c+1][1])
+        {
+         srChild.setAttribute('target','_parent');
+        }
+        srChild.innerHTML = searchData[e][1][c+1][2];
+        srChildren.appendChild(srChild);
+      }
+      srEntry.appendChild(srChildren);
+    }
+    srResult.appendChild(srEntry);
+    results.appendChild(srResult);
+  }
+}
+
diff --git a/doc/html/search/typedefs_74.html b/doc/html/search/typedefs_74.html
new file mode 100644 (file)
index 0000000..b2f6d2a
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="typedefs_74.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/html/search/typedefs_74.js b/doc/html/search/typedefs_74.js
new file mode 100644 (file)
index 0000000..85b00f5
--- /dev/null
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['tjhandle',['tjhandle',['../group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763',1,'turbojpeg.h']]],
+  ['tjtransform',['tjtransform',['../group___turbo_j_p_e_g.html#gaa29f3189c41be12ec5dee7caec318a31',1,'turbojpeg.h']]]
+];
index 8cfc38f..422085c 100644 (file)
@@ -1,18 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_63.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_customfilter">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1" target="_parent">customFilter</a>
-  <span class="SRScope">tjtransform</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/variables_63.js b/doc/html/search/variables_63.js
new file mode 100644 (file)
index 0000000..7b058da
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['customfilter',['customFilter',['../structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1',1,'tjtransform']]]
+];
index 2e53b02..df4414b 100644 (file)
@@ -1,24 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_64.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_data">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3" target="_parent">data</a>
-  <span class="SRScope">tjtransform</span>
- </div>
-</div>
-<div class="SRResult" id="SR_denom">
- <div class="SREntry">
-  <a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3" target="_parent">denom</a>
-  <span class="SRScope">tjscalingfactor</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/variables_64.js b/doc/html/search/variables_64.js
new file mode 100644 (file)
index 0000000..e19a050
--- /dev/null
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['data',['data',['../structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3',1,'tjtransform']]],
+  ['denom',['denom',['../structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3',1,'tjscalingfactor']]]
+];
index ccb671d..2f0a862 100644 (file)
@@ -1,18 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_68.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_h">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115" target="_parent">h</a>
-  <span class="SRScope">tjregion</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/variables_68.js b/doc/html/search/variables_68.js
new file mode 100644 (file)
index 0000000..7b17e97
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['h',['h',['../structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115',1,'tjregion']]]
+];
index b9f5b05..2eb4def 100644 (file)
@@ -1,18 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_6e.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_num">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec" target="_parent">num</a>
-  <span class="SRScope">tjscalingfactor</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/variables_6e.js b/doc/html/search/variables_6e.js
new file mode 100644 (file)
index 0000000..83faa13
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['num',['num',['../structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec',1,'tjscalingfactor']]]
+];
index d95bbef..f06e2e0 100644 (file)
@@ -1,24 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_6f.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_op">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498" target="_parent">op</a>
-  <span class="SRScope">tjtransform</span>
- </div>
-</div>
-<div class="SRResult" id="SR_options">
- <div class="SREntry">
-  <a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6" target="_parent">options</a>
-  <span class="SRScope">tjtransform</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/variables_6f.js b/doc/html/search/variables_6f.js
new file mode 100644 (file)
index 0000000..1cca832
--- /dev/null
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['op',['op',['../structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498',1,'tjtransform']]],
+  ['options',['options',['../structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6',1,'tjtransform']]]
+];
index 465fe88..8a4ee7b 100644 (file)
@@ -1,18 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_72.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_r">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf" target="_parent">r</a>
-  <span class="SRScope">tjtransform</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/variables_72.js b/doc/html/search/variables_72.js
new file mode 100644 (file)
index 0000000..01cde35
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['r',['r',['../structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf',1,'tjtransform']]]
+];
diff --git a/doc/html/search/variables_74.html b/doc/html/search/variables_74.html
new file mode 100644 (file)
index 0000000..1665fb8
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_74.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/html/search/variables_74.js b/doc/html/search/variables_74.js
new file mode 100644 (file)
index 0000000..13a056e
--- /dev/null
@@ -0,0 +1,9 @@
+var searchData=
+[
+  ['tjblueoffset',['tjBlueOffset',['../group___turbo_j_p_e_g.html#ga84e2e35d3f08025f976ec1ec53693dea',1,'turbojpeg.h']]],
+  ['tjgreenoffset',['tjGreenOffset',['../group___turbo_j_p_e_g.html#ga82d6e35da441112a411da41923c0ba2f',1,'turbojpeg.h']]],
+  ['tjmcuheight',['tjMCUHeight',['../group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf',1,'turbojpeg.h']]],
+  ['tjmcuwidth',['tjMCUWidth',['../group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c',1,'turbojpeg.h']]],
+  ['tjpixelsize',['tjPixelSize',['../group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c',1,'turbojpeg.h']]],
+  ['tjredoffset',['tjRedOffset',['../group___turbo_j_p_e_g.html#gadd9b446742ac8a3923f7992c7988fea8',1,'turbojpeg.h']]]
+];
index b4c8d88..434c6df 100644 (file)
@@ -1,18 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_77.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_w">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42" target="_parent">w</a>
-  <span class="SRScope">tjregion</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/variables_77.js b/doc/html/search/variables_77.js
new file mode 100644 (file)
index 0000000..4267002
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['w',['w',['../structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42',1,'tjregion']]]
+];
index a357691..602e879 100644 (file)
@@ -1,18 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_78.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_x">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjregion.html#a4b6a37a93997091b26a75831fa291ad9" target="_parent">x</a>
-  <span class="SRScope">tjregion</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/variables_78.js b/doc/html/search/variables_78.js
new file mode 100644 (file)
index 0000000..41a27f2
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['x',['x',['../structtjregion.html#a4b6a37a93997091b26a75831fa291ad9',1,'tjregion']]]
+];
index a883bd1..17faef9 100644 (file)
@@ -1,18 +1,18 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.3.1">
 <link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_79.js"></script>
 <script type="text/javascript" src="search.js"></script>
 </head>
 <body class="SRPage">
 <div id="SRIndex">
 <div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRResult" id="SR_y">
- <div class="SREntry">
-  <a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2" target="_parent">y</a>
-  <span class="SRScope">tjregion</span>
- </div>
-</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
 <div class="SRStatus" id="Searching">Searching...</div>
 <div class="SRStatus" id="NoMatches">No Matches</div>
 <script type="text/javascript"><!--
diff --git a/doc/html/search/variables_79.js b/doc/html/search/variables_79.js
new file mode 100644 (file)
index 0000000..86890a6
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['y',['y',['../structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2',1,'tjregion']]]
+];
index 78e9311..9ecd917 100644 (file)
@@ -2,35 +2,45 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.3.1"/>
 <title>TurboJPEG: tjregion Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
-<body onload='searchBox.OnSelectItem(0);'>
-<!-- Generated by Doxygen 1.7.4 -->
-<script type="text/javascript"><!--
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
---></script>
-<div id="top">
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
+   <div id="projectname">TurboJPEG
+   &#160;<span id="projectnumber">1.2.1</span>
+   </div>
   </td>
  </tr>
  </tbody>
 </table>
 </div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.3.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
   <div id="navrow1" class="tabs">
     <ul class="tablist">
       <li><a href="index.html"><span>Main&#160;Page</span></a></li>
       <li><a href="modules.html"><span>Modules</span></a></li>
       <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
-      <li id="searchli">
+      <li>
         <div id="MSearchBox" class="MSearchBoxInactive">
         <span class="left">
           <img id="MSearchSelect" src="search/mag_sel.png"
@@ -55,92 +65,106 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
     </ul>
   </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
+
+</div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-attribs">Data Fields</a>  </div>
   <div class="headertitle">
 <div class="title">tjregion Struct Reference<div class="ingroups"><a class="el" href="group___turbo_j_p_e_g.html">TurboJPEG</a></div></div>  </div>
-</div>
+</div><!--header-->
 <div class="contents">
-<!-- doxytag: class="tjregion" -->
+
 <p>Cropping region.  
  <a href="structtjregion.html#details">More...</a></p>
 
 <p><code>#include &lt;turbojpeg.h&gt;</code></p>
 <table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
 Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjregion.html#a4b6a37a93997091b26a75831fa291ad9">x</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">The left boundary of the cropping region.  <a href="#a4b6a37a93997091b26a75831fa291ad9"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2">y</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">The upper boundary of the cropping region.  <a href="#a7b3e0c24cfe87acc80e334cafdcf22c2"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42">w</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">The width of the cropping region.  <a href="#ab6eb73ceef584fc23c8c8097926dce42"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115">h</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">The height of the cropping region.  <a href="#aecefc45a26f4d8b60dd4d825c1710115"></a><br/></td></tr>
+<tr class="memitem:a4b6a37a93997091b26a75831fa291ad9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjregion.html#a4b6a37a93997091b26a75831fa291ad9">x</a></td></tr>
+<tr class="memdesc:a4b6a37a93997091b26a75831fa291ad9"><td class="mdescLeft">&#160;</td><td class="mdescRight">The left boundary of the cropping region.  <a href="#a4b6a37a93997091b26a75831fa291ad9">More...</a><br/></td></tr>
+<tr class="separator:a4b6a37a93997091b26a75831fa291ad9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b3e0c24cfe87acc80e334cafdcf22c2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2">y</a></td></tr>
+<tr class="memdesc:a7b3e0c24cfe87acc80e334cafdcf22c2"><td class="mdescLeft">&#160;</td><td class="mdescRight">The upper boundary of the cropping region.  <a href="#a7b3e0c24cfe87acc80e334cafdcf22c2">More...</a><br/></td></tr>
+<tr class="separator:a7b3e0c24cfe87acc80e334cafdcf22c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab6eb73ceef584fc23c8c8097926dce42"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42">w</a></td></tr>
+<tr class="memdesc:ab6eb73ceef584fc23c8c8097926dce42"><td class="mdescLeft">&#160;</td><td class="mdescRight">The width of the cropping region.  <a href="#ab6eb73ceef584fc23c8c8097926dce42">More...</a><br/></td></tr>
+<tr class="separator:ab6eb73ceef584fc23c8c8097926dce42"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aecefc45a26f4d8b60dd4d825c1710115"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115">h</a></td></tr>
+<tr class="memdesc:aecefc45a26f4d8b60dd4d825c1710115"><td class="mdescLeft">&#160;</td><td class="mdescRight">The height of the cropping region.  <a href="#aecefc45a26f4d8b60dd4d825c1710115">More...</a><br/></td></tr>
+<tr class="separator:aecefc45a26f4d8b60dd4d825c1710115"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>Cropping region. </p>
-</div><hr/><h2>Field Documentation</h2>
-<a class="anchor" id="aecefc45a26f4d8b60dd4d825c1710115"></a><!-- doxytag: member="tjregion::h" ref="aecefc45a26f4d8b60dd4d825c1710115" args="" -->
+</div><h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="aecefc45a26f4d8b60dd4d825c1710115"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">int <a class="el" href="structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115">tjregion::h</a></td>
+          <td class="memname">int tjregion::h</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>The height of the cropping region. </p>
 <p>Setting this to 0 is the equivalent of setting it to the height of the source JPEG image - y. </p>
 
 </div>
 </div>
-<a class="anchor" id="ab6eb73ceef584fc23c8c8097926dce42"></a><!-- doxytag: member="tjregion::w" ref="ab6eb73ceef584fc23c8c8097926dce42" args="" -->
+<a class="anchor" id="ab6eb73ceef584fc23c8c8097926dce42"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">int <a class="el" href="structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42">tjregion::w</a></td>
+          <td class="memname">int tjregion::w</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>The width of the cropping region. </p>
 <p>Setting this to 0 is the equivalent of setting it to the width of the source JPEG image - x. </p>
 
 </div>
 </div>
-<a class="anchor" id="a4b6a37a93997091b26a75831fa291ad9"></a><!-- doxytag: member="tjregion::x" ref="a4b6a37a93997091b26a75831fa291ad9" args="" -->
+<a class="anchor" id="a4b6a37a93997091b26a75831fa291ad9"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">int <a class="el" href="structtjregion.html#a4b6a37a93997091b26a75831fa291ad9">tjregion::x</a></td>
+          <td class="memname">int tjregion::x</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>The left boundary of the cropping region. </p>
 <p>This must be evenly divisible by the MCU block width (see <a class="el" href="group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c" title="MCU block width (in pixels) for a given level of chrominance subsampling.">tjMCUWidth</a>.) </p>
 
 </div>
 </div>
-<a class="anchor" id="a7b3e0c24cfe87acc80e334cafdcf22c2"></a><!-- doxytag: member="tjregion::y" ref="a7b3e0c24cfe87acc80e334cafdcf22c2" args="" -->
+<a class="anchor" id="a7b3e0c24cfe87acc80e334cafdcf22c2"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">int <a class="el" href="structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2">tjregion::y</a></td>
+          <td class="memname">int tjregion::y</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>The upper boundary of the cropping region. </p>
 <p>This must be evenly divisible by the MCU block height (see <a class="el" href="group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf" title="MCU block height (in pixels) for a given level of chrominance subsampling.">tjMCUHeight</a>.) </p>
@@ -150,23 +174,12 @@ Data Fields</h2></td></tr>
 <hr/>The documentation for this struct was generated from the following file:<ul>
 <li>turbojpeg.h</li>
 </ul>
-</div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Variables</a></div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by&#160;
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.3.1
+</small></address>
 </body>
 </html>
index 153522a..33c7366 100644 (file)
@@ -2,35 +2,45 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.3.1"/>
 <title>TurboJPEG: tjscalingfactor Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
-<body onload='searchBox.OnSelectItem(0);'>
-<!-- Generated by Doxygen 1.7.4 -->
-<script type="text/javascript"><!--
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
---></script>
-<div id="top">
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
+   <div id="projectname">TurboJPEG
+   &#160;<span id="projectnumber">1.2.1</span>
+   </div>
   </td>
  </tr>
  </tbody>
 </table>
 </div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.3.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
   <div id="navrow1" class="tabs">
     <ul class="tablist">
       <li><a href="index.html"><span>Main&#160;Page</span></a></li>
       <li><a href="modules.html"><span>Modules</span></a></li>
       <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
-      <li id="searchli">
+      <li>
         <div id="MSearchBox" class="MSearchBoxInactive">
         <span class="left">
           <img id="MSearchSelect" src="search/mag_sel.png"
@@ -55,55 +65,69 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
     </ul>
   </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
+
+</div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-attribs">Data Fields</a>  </div>
   <div class="headertitle">
 <div class="title">tjscalingfactor Struct Reference<div class="ingroups"><a class="el" href="group___turbo_j_p_e_g.html">TurboJPEG</a></div></div>  </div>
-</div>
+</div><!--header-->
 <div class="contents">
-<!-- doxytag: class="tjscalingfactor" -->
+
 <p>Scaling factor.  
  <a href="structtjscalingfactor.html#details">More...</a></p>
 
 <p><code>#include &lt;turbojpeg.h&gt;</code></p>
 <table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
 Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec">num</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Numerator.  <a href="#a9b011e57f981ee23083e2c1aa5e640ec"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3">denom</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Denominator.  <a href="#aefbcdf3e9e62274b2d312c695f133ce3"></a><br/></td></tr>
+<tr class="memitem:a9b011e57f981ee23083e2c1aa5e640ec"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec">num</a></td></tr>
+<tr class="memdesc:a9b011e57f981ee23083e2c1aa5e640ec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Numerator.  <a href="#a9b011e57f981ee23083e2c1aa5e640ec">More...</a><br/></td></tr>
+<tr class="separator:a9b011e57f981ee23083e2c1aa5e640ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aefbcdf3e9e62274b2d312c695f133ce3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3">denom</a></td></tr>
+<tr class="memdesc:aefbcdf3e9e62274b2d312c695f133ce3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Denominator.  <a href="#aefbcdf3e9e62274b2d312c695f133ce3">More...</a><br/></td></tr>
+<tr class="separator:aefbcdf3e9e62274b2d312c695f133ce3"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>Scaling factor. </p>
-</div><hr/><h2>Field Documentation</h2>
-<a class="anchor" id="aefbcdf3e9e62274b2d312c695f133ce3"></a><!-- doxytag: member="tjscalingfactor::denom" ref="aefbcdf3e9e62274b2d312c695f133ce3" args="" -->
+</div><h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="aefbcdf3e9e62274b2d312c695f133ce3"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">int <a class="el" href="structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3">tjscalingfactor::denom</a></td>
+          <td class="memname">int tjscalingfactor::denom</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Denominator. </p>
 
 </div>
 </div>
-<a class="anchor" id="a9b011e57f981ee23083e2c1aa5e640ec"></a><!-- doxytag: member="tjscalingfactor::num" ref="a9b011e57f981ee23083e2c1aa5e640ec" args="" -->
+<a class="anchor" id="a9b011e57f981ee23083e2c1aa5e640ec"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">int <a class="el" href="structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec">tjscalingfactor::num</a></td>
+          <td class="memname">int tjscalingfactor::num</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Numerator. </p>
 
@@ -112,23 +136,12 @@ Data Fields</h2></td></tr>
 <hr/>The documentation for this struct was generated from the following file:<ul>
 <li>turbojpeg.h</li>
 </ul>
-</div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Variables</a></div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by&#160;
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.3.1
+</small></address>
 </body>
 </html>
index 0a44092..f47ca59 100644 (file)
@@ -2,35 +2,45 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.3.1"/>
 <title>TurboJPEG: tjtransform Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
-<body onload='searchBox.OnSelectItem(0);'>
-<!-- Generated by Doxygen 1.7.4 -->
-<script type="text/javascript"><!--
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
---></script>
-<div id="top">
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
+   <div id="projectname">TurboJPEG
+   &#160;<span id="projectnumber">1.2.1</span>
+   </div>
   </td>
  </tr>
  </tbody>
 </table>
 </div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.3.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
   <div id="navrow1" class="tabs">
     <ul class="tablist">
       <li><a href="index.html"><span>Main&#160;Page</span></a></li>
       <li><a href="modules.html"><span>Modules</span></a></li>
       <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
-      <li id="searchli">
+      <li>
         <div id="MSearchBox" class="MSearchBoxInactive">
         <span class="left">
           <img id="MSearchSelect" src="search/mag_sel.png"
@@ -55,119 +65,133 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
     </ul>
   </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
+
+</div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-attribs">Data Fields</a>  </div>
   <div class="headertitle">
 <div class="title">tjtransform Struct Reference<div class="ingroups"><a class="el" href="group___turbo_j_p_e_g.html">TurboJPEG</a></div></div>  </div>
-</div>
+</div><!--header-->
 <div class="contents">
-<!-- doxytag: class="tjtransform" -->
+
 <p>Lossless transform.  
  <a href="structtjtransform.html#details">More...</a></p>
 
 <p><code>#include &lt;turbojpeg.h&gt;</code></p>
 <table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
 Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structtjregion.html">tjregion</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf">r</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Cropping region.  <a href="#ac324e5e442abec8a961e5bf219db12cf"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498">op</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">One of the <a class="el" href="group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866">transform operations</a>.  <a href="#a2525aab4ba6978a1c273f74fef50e498"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6">options</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">The bitwise OR of one of more of the <a class="el" href="group___turbo_j_p_e_g.html#ga9c771a757fc1294add611906b89ab2d2">transform options</a>.  <a href="#ac0e74655baa4402209a21e1ae481c8f6"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">data</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Arbitrary data that can be accessed within the body of the callback function.  <a href="#a688fe8f1a8ecc12a538d9e561cf338e3"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1">customFilter</a> )(short *coeffs, <a class="el" href="structtjregion.html">tjregion</a> arrayRegion, <a class="el" href="structtjregion.html">tjregion</a> planeRegion, int componentIndex, int transformIndex, struct <a class="el" href="structtjtransform.html">tjtransform</a> *transform)</td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">A callback function that can be used to modify the DCT coefficients after they are losslessly transformed but before they are transcoded to a new JPEG file.  <a href="#a43ee1bcdd2a8d7249a756774f78793c1"></a><br/></td></tr>
+<tr class="memitem:ac324e5e442abec8a961e5bf219db12cf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structtjregion.html">tjregion</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf">r</a></td></tr>
+<tr class="memdesc:ac324e5e442abec8a961e5bf219db12cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cropping region.  <a href="#ac324e5e442abec8a961e5bf219db12cf">More...</a><br/></td></tr>
+<tr class="separator:ac324e5e442abec8a961e5bf219db12cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2525aab4ba6978a1c273f74fef50e498"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498">op</a></td></tr>
+<tr class="memdesc:a2525aab4ba6978a1c273f74fef50e498"><td class="mdescLeft">&#160;</td><td class="mdescRight">One of the <a class="el" href="group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866">transform operations</a>.  <a href="#a2525aab4ba6978a1c273f74fef50e498">More...</a><br/></td></tr>
+<tr class="separator:a2525aab4ba6978a1c273f74fef50e498"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac0e74655baa4402209a21e1ae481c8f6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6">options</a></td></tr>
+<tr class="memdesc:ac0e74655baa4402209a21e1ae481c8f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">The bitwise OR of one of more of the <a class="el" href="group___turbo_j_p_e_g.html#ga9c771a757fc1294add611906b89ab2d2">transform options</a>.  <a href="#ac0e74655baa4402209a21e1ae481c8f6">More...</a><br/></td></tr>
+<tr class="separator:ac0e74655baa4402209a21e1ae481c8f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a688fe8f1a8ecc12a538d9e561cf338e3"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">data</a></td></tr>
+<tr class="memdesc:a688fe8f1a8ecc12a538d9e561cf338e3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Arbitrary data that can be accessed within the body of the callback function.  <a href="#a688fe8f1a8ecc12a538d9e561cf338e3">More...</a><br/></td></tr>
+<tr class="separator:a688fe8f1a8ecc12a538d9e561cf338e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43ee1bcdd2a8d7249a756774f78793c1"><td class="memItemLeft" align="right" valign="top">int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1">customFilter</a> )(short *coeffs, <a class="el" href="structtjregion.html">tjregion</a> arrayRegion, <a class="el" href="structtjregion.html">tjregion</a> planeRegion, int componentIndex, int transformIndex, struct <a class="el" href="structtjtransform.html">tjtransform</a> *transform)</td></tr>
+<tr class="memdesc:a43ee1bcdd2a8d7249a756774f78793c1"><td class="mdescLeft">&#160;</td><td class="mdescRight">A callback function that can be used to modify the DCT coefficients after they are losslessly transformed but before they are transcoded to a new JPEG image.  <a href="#a43ee1bcdd2a8d7249a756774f78793c1">More...</a><br/></td></tr>
+<tr class="separator:a43ee1bcdd2a8d7249a756774f78793c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>Lossless transform. </p>
-</div><hr/><h2>Field Documentation</h2>
-<a class="anchor" id="a43ee1bcdd2a8d7249a756774f78793c1"></a><!-- doxytag: member="tjtransform::customFilter" ref="a43ee1bcdd2a8d7249a756774f78793c1" args=")(short *coeffs, tjregion arrayRegion, tjregion planeRegion, int componentIndex, int transformIndex, struct tjtransform *transform)" -->
+</div><h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a43ee1bcdd2a8d7249a756774f78793c1"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">int(* <a class="el" href="structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1">tjtransform::customFilter</a>)(short *coeffs, <a class="el" href="structtjregion.html">tjregion</a> arrayRegion, <a class="el" href="structtjregion.html">tjregion</a> planeRegion, int componentIndex, int transformIndex, struct <a class="el" href="structtjtransform.html">tjtransform</a> *transform)</td>
+          <td class="memname">int(* tjtransform::customFilter)(short *coeffs, <a class="el" href="structtjregion.html">tjregion</a> arrayRegion, <a class="el" href="structtjregion.html">tjregion</a> planeRegion, int componentIndex, int transformIndex, struct <a class="el" href="structtjtransform.html">tjtransform</a> *transform)</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
-<p>A callback function that can be used to modify the DCT coefficients after they are losslessly transformed but before they are transcoded to a new JPEG file. </p>
+<p>A callback function that can be used to modify the DCT coefficients after they are losslessly transformed but before they are transcoded to a new JPEG image. </p>
 <p>This allows for custom filters or other transformations to be applied in the frequency domain.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
+<dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">coeffs</td><td>pointer to an array of transformed DCT coefficients. (NOTE: this pointer is not guaranteed to be valid once the callback returns, so applications wishing to hand off the DCT coefficients to another function or library should make a copy of them within the body of the callback.) </td></tr>
     <tr><td class="paramname">arrayRegion</td><td><a class="el" href="structtjregion.html" title="Cropping region.">tjregion</a> structure containing the width and height of the array pointed to by <code>coeffs</code> as well as its offset relative to the component plane. TurboJPEG implementations may choose to split each component plane into multiple DCT coefficient arrays and call the callback function once for each array. </td></tr>
     <tr><td class="paramname">planeRegion</td><td><a class="el" href="structtjregion.html" title="Cropping region.">tjregion</a> structure containing the width and height of the component plane to which <code>coeffs</code> belongs </td></tr>
     <tr><td class="paramname">componentID</td><td>ID number of the component plane to which <code>coeffs</code> belongs (Y, Cb, and Cr have, respectively, ID's of 0, 1, and 2 in typical JPEG images.) </td></tr>
-    <tr><td class="paramname">transformID</td><td>ID number of the transformed image to which <code>coeffs</code> belongs. This is the same as the index of the transform in the transforms array that was passed to <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a>. </td></tr>
+    <tr><td class="paramname">transformID</td><td>ID number of the transformed image to which <code>coeffs</code> belongs. This is the same as the index of the transform in the <code>transforms</code> array that was passed to <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a>. </td></tr>
     <tr><td class="paramname">transform</td><td>a pointer to a <a class="el" href="structtjtransform.html" title="Lossless transform.">tjtransform</a> structure that specifies the parameters and/or cropping region for this transform</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if the callback was successful, or -1 if an error occurred. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>0 if the callback was successful, or -1 if an error occurred. </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="a688fe8f1a8ecc12a538d9e561cf338e3"></a><!-- doxytag: member="tjtransform::data" ref="a688fe8f1a8ecc12a538d9e561cf338e3" args="" -->
+<a class="anchor" id="a688fe8f1a8ecc12a538d9e561cf338e3"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">void* <a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">tjtransform::data</a></td>
+          <td class="memname">void* tjtransform::data</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Arbitrary data that can be accessed within the body of the callback function. </p>
 
 </div>
 </div>
-<a class="anchor" id="a2525aab4ba6978a1c273f74fef50e498"></a><!-- doxytag: member="tjtransform::op" ref="a2525aab4ba6978a1c273f74fef50e498" args="" -->
+<a class="anchor" id="a2525aab4ba6978a1c273f74fef50e498"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">int <a class="el" href="structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498">tjtransform::op</a></td>
+          <td class="memname">int tjtransform::op</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>One of the <a class="el" href="group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866">transform operations</a>. </p>
 
 </div>
 </div>
-<a class="anchor" id="ac0e74655baa4402209a21e1ae481c8f6"></a><!-- doxytag: member="tjtransform::options" ref="ac0e74655baa4402209a21e1ae481c8f6" args="" -->
+<a class="anchor" id="ac0e74655baa4402209a21e1ae481c8f6"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">int <a class="el" href="structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6">tjtransform::options</a></td>
+          <td class="memname">int tjtransform::options</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>The bitwise OR of one of more of the <a class="el" href="group___turbo_j_p_e_g.html#ga9c771a757fc1294add611906b89ab2d2">transform options</a>. </p>
 
 </div>
 </div>
-<a class="anchor" id="ac324e5e442abec8a961e5bf219db12cf"></a><!-- doxytag: member="tjtransform::r" ref="ac324e5e442abec8a961e5bf219db12cf" args="" -->
+<a class="anchor" id="ac324e5e442abec8a961e5bf219db12cf"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname"><a class="el" href="structtjregion.html">tjregion</a> <a class="el" href="structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf">tjtransform::r</a></td>
+          <td class="memname"><a class="el" href="structtjregion.html">tjregion</a> tjtransform::r</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Cropping region. </p>
 
@@ -176,23 +200,12 @@ Data Fields</h2></td></tr>
 <hr/>The documentation for this struct was generated from the following file:<ul>
 <li>turbojpeg.h</li>
 </ul>
-</div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Variables</a></div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by&#160;
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.3.1
+</small></address>
 </body>
 </html>
diff --git a/doc/html/sync_off.png b/doc/html/sync_off.png
new file mode 100644 (file)
index 0000000..3b443fc
Binary files /dev/null and b/doc/html/sync_off.png differ
diff --git a/doc/html/sync_on.png b/doc/html/sync_on.png
new file mode 100644 (file)
index 0000000..e08320f
Binary files /dev/null and b/doc/html/sync_on.png differ
index 2d99ef2..3b725c4 100644 (file)
Binary files a/doc/html/tab_a.png and b/doc/html/tab_a.png differ
index b2c3d2b..e2b4a86 100644 (file)
Binary files a/doc/html/tab_b.png and b/doc/html/tab_b.png differ
index c11f48f..fd5cb70 100644 (file)
Binary files a/doc/html/tab_h.png and b/doc/html/tab_h.png differ
index 978943a..ab478c9 100644 (file)
Binary files a/doc/html/tab_s.png and b/doc/html/tab_s.png differ
index 2192056..9cf578f 100644 (file)
@@ -3,6 +3,7 @@
     width: 100%;
     z-index: 101;
     font-size: 13px;
+    font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
 }
 
 .tabs2 {
index 5a0b5a7..b881d82 100644 (file)
@@ -12,3 +12,4 @@ EXTRACT_STATIC = YES
 JAVADOC_AUTOBRIEF = YES
 MAX_INITIALIZER_LINES = 0
 ALWAYS_DETAILED_SEC = YES
+HTML_TIMESTAMP = NO
diff --git a/filelist.txt b/filelist.txt
deleted file mode 100644 (file)
index 2f905a6..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-IJG JPEG LIBRARY:  FILE LIST
-
-Copyright (C) 1994-2010, Thomas G. Lane, Guido Vollbeding, D. R. Commander.
-This file is part of the Independent JPEG Group's software.
-For conditions of distribution and use, see the accompanying README file.
-
-
-Here is a road map to the files in the IJG JPEG distribution.  The
-distribution includes the JPEG library proper, plus two application
-programs ("cjpeg" and "djpeg") which use the library to convert JPEG
-files to and from some other popular image formats.  A third application
-"jpegtran" uses the library to do lossless conversion between different
-variants of JPEG.  There are also two stand-alone applications,
-"rdjpgcom" and "wrjpgcom".
-
-
-THE JPEG LIBRARY
-================
-
-Include files:
-
-jpeglib.h      JPEG library's exported data and function declarations.
-jconfig.h      Configuration declarations.  Note: this file is not present
-               in the distribution; it is generated during installation.
-jmorecfg.h     Additional configuration declarations; need not be changed
-               for a standard installation.
-jerror.h       Declares JPEG library's error and trace message codes.
-jinclude.h     Central include file used by all IJG .c files to reference
-               system include files.
-jpegint.h      JPEG library's internal data structures.
-jchuff.h       Private declarations for Huffman encoder modules.
-jdhuff.h       Private declarations for Huffman decoder modules.
-jdct.h         Private declarations for forward & reverse DCT subsystems.
-jmemsys.h      Private declarations for memory management subsystem.
-jversion.h     Version information.
-
-Applications using the library should include jpeglib.h (which in turn
-includes jconfig.h and jmorecfg.h).  Optionally, jerror.h may be included
-if the application needs to reference individual JPEG error codes.  The
-other include files are intended for internal use and would not normally
-be included by an application program.  (cjpeg/djpeg/etc do use jinclude.h,
-since its function is to improve portability of the whole IJG distribution.
-Most other applications will directly include the system include files they
-want, and hence won't need jinclude.h.)
-
-
-C source code files:
-
-These files contain most of the functions intended to be called directly by
-an application program:
-
-jcapimin.c     Application program interface: core routines for compression.
-jcapistd.c     Application program interface: standard compression.
-jdapimin.c     Application program interface: core routines for decompression.
-jdapistd.c     Application program interface: standard decompression.
-jcomapi.c      Application program interface routines common to compression
-               and decompression.
-jcparam.c      Compression parameter setting helper routines.
-jctrans.c      API and library routines for transcoding compression.
-jdtrans.c      API and library routines for transcoding decompression.
-
-Compression side of the library:
-
-jcinit.c       Initialization: determines which other modules to use.
-jcmaster.c     Master control: setup and inter-pass sequencing logic.
-jcmainct.c     Main buffer controller (preprocessor => JPEG compressor).
-jcprepct.c     Preprocessor buffer controller.
-jccoefct.c     Buffer controller for DCT coefficient buffer.
-jccolor.c      Color space conversion.
-jcsample.c     Downsampling.
-jcdctmgr.c     DCT manager (DCT implementation selection & control).
-jfdctint.c     Forward DCT using slow-but-accurate integer method.
-jfdctfst.c     Forward DCT using faster, less accurate integer method.
-jfdctflt.c     Forward DCT using floating-point arithmetic.
-jchuff.c       Huffman entropy coding for sequential JPEG.
-jcphuff.c      Huffman entropy coding for progressive JPEG.
-jcarith.c      Arithmetic entropy coding.
-jcmarker.c     JPEG marker writing.
-jdatadst.c     Data destination managers for memory and stdio output.
-
-Decompression side of the library:
-
-jdmaster.c     Master control: determines which other modules to use.
-jdinput.c      Input controller: controls input processing modules.
-jdmainct.c     Main buffer controller (JPEG decompressor => postprocessor).
-jdcoefct.c     Buffer controller for DCT coefficient buffer.
-jdpostct.c     Postprocessor buffer controller.
-jdmarker.c     JPEG marker reading.
-jdhuff.c       Huffman entropy decoding for sequential JPEG.
-jdphuff.c      Huffman entropy decoding for progressive JPEG.
-jdarith.c      Arithmetic entropy decoding.
-jddctmgr.c     IDCT manager (IDCT implementation selection & control).
-jidctint.c     Inverse DCT using slow-but-accurate integer method.
-jidctfst.c     Inverse DCT using faster, less accurate integer method.
-jidctflt.c     Inverse DCT using floating-point arithmetic.
-jidctred.c     Inverse DCTs with reduced-size outputs.
-jdsample.c     Upsampling.
-jdcolor.c      Color space conversion.
-jdmerge.c      Merged upsampling/color conversion (faster, lower quality).
-jquant1.c      One-pass color quantization using a fixed-spacing colormap.
-jquant2.c      Two-pass color quantization using a custom-generated colormap.
-               Also handles one-pass quantization to an externally given map.
-jdatasrc.c     Data source managers for memory and stdio input.
-
-Support files for both compression and decompression:
-
-jaricom.c      Tables for common use in arithmetic entropy encoding and
-               decoding routines.
-jerror.c       Standard error handling routines (application replaceable).
-jmemmgr.c      System-independent (more or less) memory management code.
-jutils.c       Miscellaneous utility routines.
-
-jmemmgr.c relies on a system-dependent memory management module.  The IJG
-distribution includes the following implementations of the system-dependent
-module:
-
-jmemnobs.c     "No backing store": assumes adequate virtual memory exists.
-jmemansi.c     Makes temporary files with ANSI-standard routine tmpfile().
-jmemname.c     Makes temporary files with program-generated file names.
-jmemdos.c      Custom implementation for MS-DOS (16-bit environment only):
-               can use extended and expanded memory as well as temp files.
-jmemmac.c      Custom implementation for Apple Macintosh.
-
-Exactly one of the system-dependent modules should be configured into an
-installed JPEG library (see install.txt for hints about which one to use).
-On unusual systems you may find it worthwhile to make a special
-system-dependent memory manager.
-
-
-Non-C source code files:
-
-jmemdosa.asm   80x86 assembly code support for jmemdos.c; used only in
-               MS-DOS-specific configurations of the JPEG library.
-
-
-CJPEG/DJPEG/JPEGTRAN
-====================
-
-Include files:
-
-cdjpeg.h       Declarations shared by cjpeg/djpeg/jpegtran modules.
-cderror.h      Additional error and trace message codes for cjpeg et al.
-transupp.h     Declarations for jpegtran support routines in transupp.c.
-
-C source code files:
-
-cjpeg.c                Main program for cjpeg.
-djpeg.c                Main program for djpeg.
-jpegtran.c     Main program for jpegtran.
-cdjpeg.c       Utility routines used by all three programs.
-rdcolmap.c     Code to read a colormap file for djpeg's "-map" switch.
-rdswitch.c     Code to process some of cjpeg's more complex switches.
-               Also used by jpegtran.
-transupp.c     Support code for jpegtran: lossless image manipulations.
-
-Image file reader modules for cjpeg:
-
-rdbmp.c                BMP file input.
-rdgif.c                GIF file input (now just a stub).
-rdppm.c                PPM/PGM file input.
-rdrle.c                Utah RLE file input.
-rdtarga.c      Targa file input.
-
-Image file writer modules for djpeg:
-
-wrbmp.c                BMP file output.
-wrgif.c                GIF file output (a mere shadow of its former self).
-wrppm.c                PPM/PGM file output.
-wrrle.c                Utah RLE file output.
-wrtarga.c      Targa file output.
-
-
-RDJPGCOM/WRJPGCOM
-=================
-
-C source code files:
-
-rdjpgcom.c     Stand-alone rdjpgcom application.
-wrjpgcom.c     Stand-alone wrjpgcom application.
-
-These programs do not depend on the IJG library.  They do use
-jconfig.h and jinclude.h, only to improve portability.
-
-
-ADDITIONAL FILES
-================
-
-Documentation (see README for a guide to the documentation files):
-
-README         Master documentation file.
-*.txt          Other documentation files.
-*.1            Documentation in Unix man page format.
-change.log     Version-to-version change highlights.
-example.c      Sample code for calling JPEG library.
-
-Configuration/installation files and programs (see install.txt for more info):
-
-configure      Unix shell script to perform automatic configuration.
-configure.ac   Source file for use with Autoconf to generate configure.
-ltmain.sh      Support scripts for configure (from GNU libtool).
-config.guess
-config.sub
-depcomp
-missing
-install-sh     Install shell script for those Unix systems lacking one.
-Makefile.in    Makefile input for configure.
-Makefile.am    Source file for use with Automake to generate Makefile.in.
-jconfig.txt    Template for making jconfig.h by hand.
-aclocal.m4     M4 macro definitions for use with Autoconf.
-
-Test files (see install.txt for test procedure):
-
-test*.*                Source and comparison files for confidence test.
-               These are binary image files, NOT text files.
diff --git a/install.txt b/install.txt
deleted file mode 100644 (file)
index 1327dc4..0000000
+++ /dev/null
@@ -1,1096 +0,0 @@
-INSTALLATION INSTRUCTIONS for the Independent JPEG Group's JPEG software
-
-Copyright (C) 1991-2010, Thomas G. Lane, Guido Vollbeding.
-This file is part of the Independent JPEG Group's software.
-For conditions of distribution and use, see the accompanying README file.
-
-
-This file explains how to configure and install the IJG software.  We have
-tried to make this software extremely portable and flexible, so that it can be
-adapted to almost any environment.  The downside of this decision is that the
-installation process is complicated.  We have provided shortcuts to simplify
-the task on common systems.  But in any case, you will need at least a little
-familiarity with C programming and program build procedures for your system.
-
-If you are only using this software as part of a larger program, the larger
-program's installation procedure may take care of configuring the IJG code.
-For example, Ghostscript's installation script will configure the IJG code.
-You don't need to read this file if you just want to compile Ghostscript.
-
-If you are on a Unix machine, you may not need to read this file at all.
-Try doing
-       ./configure
-       make
-       make test
-If that doesn't complain, do
-       make install
-(better do "make -n install" first to see if the makefile will put the files
-where you want them).  Read further if you run into snags or want to customize
-the code for your system.
-
-
-TABLE OF CONTENTS
------------------
-
-Before you start
-Configuring the software:
-       using the automatic "configure" script
-       using one of the supplied jconfig and makefile files
-       by hand
-Building the software
-Testing the software
-Installing the software
-Optional stuff
-Optimization
-Hints for specific systems
-
-
-BEFORE YOU START
-================
-
-Before installing the software you must unpack the distributed source code.
-Since you are reading this file, you have probably already succeeded in this
-task.  However, there is a potential for error if you needed to convert the
-files to the local standard text file format (for example, if you are on
-MS-DOS you may have converted LF end-of-line to CR/LF).  You must apply
-such conversion to all the files EXCEPT those whose names begin with "test".
-The test files contain binary data; if you change them in any way then the
-self-test will give bad results.
-
-Please check the last section of this file to see if there are hints for the
-specific machine or compiler you are using.
-
-
-CONFIGURING THE SOFTWARE
-========================
-
-To configure the IJG code for your system, you need to create two files:
-  * jconfig.h: contains values for system-dependent #define symbols.
-  * Makefile: controls the compilation process.
-(On a non-Unix machine, you may create "project files" or some other
-substitute for a Makefile.  jconfig.h is needed in any environment.)
-
-We provide three different ways to generate these files:
-  * On a Unix system, you can just run the "configure" script.
-  * We provide sample jconfig files and makefiles for popular machines;
-    if your machine matches one of the samples, just copy the right sample
-    files to jconfig.h and Makefile.
-  * If all else fails, read the instructions below and make your own files.
-
-
-Configuring the software using the automatic "configure" script
----------------------------------------------------------------
-
-If you are on a Unix machine, you can just type
-       ./configure
-and let the configure script construct appropriate configuration files.
-If you're using "csh" on an old version of System V, you might need to type
-       sh configure
-instead to prevent csh from trying to execute configure itself.
-Expect configure to run for a few minutes, particularly on slower machines;
-it works by compiling a series of test programs.
-
-Configure was created with GNU Autoconf and it follows the usual conventions
-for GNU configure scripts.  It makes a few assumptions that you may want to
-override.  You can do this by providing optional switches to configure:
-
-* Configure will build both static and shared libraries, if possible.
-If you want to build libjpeg only as a static library, say
-       ./configure --disable-shared
-If you want to build libjpeg only as a shared library, say
-       ./configure --disable-static
-Configure uses GNU libtool to take care of system-dependent shared library
-building methods.
-
-* Configure will use gcc (GNU C compiler) if it's available, otherwise cc.
-To force a particular compiler to be selected, use the CC option, for example
-       ./configure CC='cc'
-The same method can be used to include any unusual compiler switches.
-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 "-g" for non-gcc compilers, "-g -O2" for gcc.
-You can override this by saying, for example,
-       ./configure CFLAGS='-O2'
-if you want to compile without debugging support.
-
-* 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
-"--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.
-
-Configure has some other features that are useful if you are cross-compiling
-or working in a network of multiple machine types; but if you need those
-features, you probably already know how to use them.
-
-
-Configuring the software using one of the supplied jconfig and makefile files
------------------------------------------------------------------------------
-
-If you have one of these systems, you can just use the provided configuration
-files:
-
-Makefile       jconfig file    System and/or compiler
-
-makefile.manx  jconfig.manx    Amiga, Manx Aztec C
-makefile.sas   jconfig.sas     Amiga, SAS C
-makeproj.mac   jconfig.mac     Apple Macintosh, Metrowerks CodeWarrior
-mak*jpeg.st    jconfig.st      Atari ST/STE/TT, Pure C or Turbo C
-makefile.bcc   jconfig.bcc     MS-DOS or OS/2, Borland C
-makefile.dj    jconfig.dj      MS-DOS, DJGPP (Delorie's port of GNU C)
-makefile.mc6   jconfig.mc6     MS-DOS, Microsoft C (16-bit only)
-makefile.wat   jconfig.wat     MS-DOS, OS/2, or Windows NT, Watcom C
-makefile.vc    jconfig.vc      Windows NT/95, MS Visual C++
-make*.vc6      jconfig.vc      Windows NT/95, MS Visual C++ 6
-make*.v10      jconfig.vc      Windows NT/95, MS Visual C++ 2010 (v10)
-makefile.mms   jconfig.vms     Digital VMS, with MMS software
-makefile.vms   jconfig.vms     Digital VMS, without MMS software
-
-Copy the proper jconfig file to jconfig.h and the makefile to Makefile (or
-whatever your system uses as the standard makefile name).  For more info see
-the appropriate system-specific hints section near the end of this file.
-
-
-Configuring the software by hand
---------------------------------
-
-First, generate a jconfig.h file.  If you are moderately familiar with C,
-the comments in jconfig.txt should be enough information to do this; just
-copy jconfig.txt to jconfig.h and edit it appropriately.  Otherwise, you may
-prefer to use the ckconfig.c program.  You will need to compile and execute
-ckconfig.c by hand --- we hope you know at least enough to do that.
-ckconfig.c may not compile the first try (in fact, the whole idea is for it
-to fail if anything is going to).  If you get compile errors, fix them by
-editing ckconfig.c according to the directions given in ckconfig.c.  Once
-you get it to run, it will write a suitable jconfig.h file, and will also
-print out some advice about which makefile to use.
-
-You may also want to look at the canned jconfig files, if there is one for a
-system similar to yours.
-
-Second, select a makefile and copy it to Makefile (or whatever your system
-uses as the standard makefile name).  The most generic makefiles we provide
-are
-       makefile.ansi:  if your C compiler supports function prototypes
-       makefile.unix:  if not.
-(You have function prototypes if ckconfig.c put "#define HAVE_PROTOTYPES"
-in jconfig.h.)  You may want to start from one of the other makefiles if
-there is one for a system similar to yours.
-
-Look over the selected Makefile and adjust options as needed.  In particular
-you may want to change the CC and CFLAGS definitions.  For instance, if you
-are using GCC, set CC=gcc.  If you had to use any compiler switches to get
-ckconfig.c to work, make sure the same switches are in CFLAGS.
-
-If you are on a system that doesn't use makefiles, you'll need to set up
-project files (or whatever you do use) to compile all the source files and
-link them into executable files cjpeg, djpeg, jpegtran, rdjpgcom, and wrjpgcom.
-See the file lists in any of the makefiles to find out which files go into
-each program.  Note that the provided makefiles all make a "library" file
-libjpeg first, but you don't have to do that if you don't want to; the file
-lists identify which source files are actually needed for compression,
-decompression, or both.  As a last resort, you can make a batch script that
-just compiles everything and links it all together; makefile.vms is an example
-of this (it's for VMS systems that have no make-like utility).
-
-Here are comments about some specific configuration decisions you'll
-need to make:
-
-Command line style
-------------------
-
-These programs can use a Unix-like command line style which supports
-redirection and piping, like this:
-       cjpeg inputfile >outputfile
-       cjpeg <inputfile >outputfile
-       source program | cjpeg >outputfile
-The simpler "two file" command line style is just
-       cjpeg inputfile outputfile
-You may prefer the two-file style, particularly if you don't have pipes.
-
-You MUST use two-file style on any system that doesn't cope well with binary
-data fed through stdin/stdout; this is true for some MS-DOS compilers, for
-example.  If you're not on a Unix system, it's safest to assume you need
-two-file style.  (But if your compiler provides either the Posix-standard
-fdopen() library routine or a Microsoft-compatible setmode() routine, you
-can safely use the Unix command line style, by defining USE_FDOPEN or
-USE_SETMODE respectively.)
-
-To use the two-file style, make jconfig.h say "#define TWO_FILE_COMMANDLINE".
-
-Selecting a memory manager
---------------------------
-
-The IJG code is capable of working on images that are too big to fit in main
-memory; data is swapped out to temporary files as necessary.  However, the
-code to do this is rather system-dependent.  We provide five different
-memory managers:
-
-* jmemansi.c   This version uses the ANSI-standard library routine tmpfile(),
-               which not all non-ANSI systems have.  On some systems
-               tmpfile() may put the temporary file in a non-optimal
-               location; if you don't like what it does, use jmemname.c.
-
-* jmemname.c   This version creates named temporary files.  For anything
-               except a Unix machine, you'll need to configure the
-               select_file_name() routine appropriately; see the comments
-               near the head of jmemname.c.  If you use this version, define
-               NEED_SIGNAL_CATCHER in jconfig.h to make sure the temp files
-               are removed if the program is aborted.
-
-* jmemnobs.c   (That stands for No Backing Store :-).)  This will compile on
-               almost any system, but it assumes you have enough main memory
-               or virtual memory to hold the biggest images you work with.
-
-* jmemdos.c    This should be used with most 16-bit MS-DOS compilers.
-               See the system-specific notes about MS-DOS for more info.
-               IMPORTANT: if you use this, define USE_MSDOS_MEMMGR in
-               jconfig.h, and include the assembly file jmemdosa.asm in the
-               programs.  The supplied makefiles and jconfig files for
-               16-bit MS-DOS compilers already do both.
-
-* jmemmac.c    Custom version for Apple Macintosh; see the system-specific
-               notes for Macintosh for more info.
-
-To use a particular memory manager, change the SYSDEPMEM variable in your
-makefile to equal the corresponding object file name (for example, jmemansi.o
-or jmemansi.obj for jmemansi.c).
-
-If you have plenty of (real or virtual) main memory, just use jmemnobs.c.
-"Plenty" means about ten bytes for every pixel in the largest images
-you plan to process, so a lot of systems don't meet this criterion.
-If yours doesn't, try jmemansi.c first.  If that doesn't compile, you'll have
-to use jmemname.c; be sure to adjust select_file_name() for local conditions.
-You may also need to change unlink() to remove() in close_backing_store().
-
-Except with jmemnobs.c or jmemmac.c, you need to adjust the DEFAULT_MAX_MEM
-setting to a reasonable value for your system (either by adding a #define for
-DEFAULT_MAX_MEM to jconfig.h, or by adding a -D switch to the Makefile).
-This value limits the amount of data space the program will attempt to
-allocate.  Code and static data space isn't counted, so the actual memory
-needs for cjpeg or djpeg are typically 100 to 150Kb more than the max-memory
-setting.  Larger max-memory settings reduce the amount of I/O needed to
-process a large image, but too large a value can result in "insufficient
-memory" failures.  On most Unix machines (and other systems with virtual
-memory), just set DEFAULT_MAX_MEM to several million and forget it.  At the
-other end of the spectrum, for MS-DOS machines you probably can't go much
-above 300K to 400K.  (On MS-DOS the value refers to conventional memory only.
-Extended/expanded memory is handled separately by jmemdos.c.)
-
-
-BUILDING THE SOFTWARE
-=====================
-
-Now you should be able to compile the software.  Just say "make" (or
-whatever's necessary to start the compilation).  Have a cup of coffee.
-
-Here are some things that could go wrong:
-
-If your compiler complains about undefined structures, you should be able to
-shut it up by putting "#define INCOMPLETE_TYPES_BROKEN" in jconfig.h.
-
-If you have trouble with missing system include files or inclusion of the
-wrong ones, read jinclude.h.  This shouldn't happen if you used configure
-or ckconfig.c to set up jconfig.h.
-
-There are a fair number of routines that do not use all of their parameters;
-some compilers will issue warnings about this, which you can ignore.  There
-are also a few configuration checks that may give "unreachable code" warnings.
-Any other warning deserves investigation.
-
-If you don't have a getenv() library routine, define NO_GETENV.
-
-Also see the system-specific hints, below.
-
-
-TESTING THE SOFTWARE
-====================
-
-As a quick test of functionality we've included a small sample image in
-several forms:
-       testorig.jpg    Starting point for the djpeg tests.
-       testimg.ppm     The output of djpeg testorig.jpg
-       testimg.bmp     The output of djpeg -bmp -colors 256 testorig.jpg
-       testimg.jpg     The output of cjpeg testimg.ppm
-       testprog.jpg    Progressive-mode equivalent of testorig.jpg.
-       testimgp.jpg    The output of cjpeg -progressive -optimize testimg.ppm
-(The first- and second-generation .jpg files aren't identical since JPEG is
-lossy.)  If you can generate duplicates of the testimg* files then you
-probably have working programs.
-
-With most of the makefiles, "make test" will perform the necessary
-comparisons.
-
-If you're using a makefile that doesn't provide the test option, run djpeg
-and cjpeg by hand and compare the output files to testimg* with whatever
-binary file comparison tool you have.  The files should be bit-for-bit
-identical.
-
-If the programs complain "MAX_ALLOC_CHUNK is wrong, please fix", then you
-need to reduce MAX_ALLOC_CHUNK to a value that fits in type size_t.
-Try adding "#define MAX_ALLOC_CHUNK 65520L" to jconfig.h.  A less likely
-configuration error is "ALIGN_TYPE is wrong, please fix": defining ALIGN_TYPE
-as long should take care of that one.
-
-If the cjpeg test run fails with "Missing Huffman code table entry", it's a
-good bet that you needed to define RIGHT_SHIFT_IS_UNSIGNED.  Go back to the
-configuration step and run ckconfig.c.  (This is a good plan for any other
-test failure, too.)
-
-If you are using Unix (one-file) command line style on a non-Unix system,
-it's a good idea to check that binary I/O through stdin/stdout actually
-works.  You should get the same results from "djpeg <testorig.jpg >out.ppm"
-as from "djpeg -outfile out.ppm testorig.jpg".  Note that the makefiles all
-use the latter style and therefore do not exercise stdin/stdout!  If this
-check fails, try recompiling with USE_SETMODE or USE_FDOPEN defined.
-If it still doesn't work, better use two-file style.
-
-If you chose a memory manager other than jmemnobs.c, you should test that
-temporary-file usage works.  Try "djpeg -bmp -colors 256 -max 0 testorig.jpg"
-and make sure its output matches testimg.bmp.  If you have any really large
-images handy, try compressing them with -optimize and/or decompressing with
--colors 256 to make sure your DEFAULT_MAX_MEM setting is not too large.
-
-NOTE: this is far from an exhaustive test of the JPEG software; some modules,
-such as 1-pass color quantization, are not exercised at all.  It's just a
-quick test to give you some confidence that you haven't missed something
-major.
-
-
-INSTALLING THE SOFTWARE
-=======================
-
-Once you're done with the above steps, you can install the software by
-copying the executable files (cjpeg, djpeg, jpegtran, rdjpgcom, and wrjpgcom)
-to wherever you normally install programs.  On Unix systems, you'll also want
-to put the man pages (cjpeg.1, djpeg.1, jpegtran.1, rdjpgcom.1, wrjpgcom.1)
-in the man-page directory.  The pre-fab makefiles don't support this step
-since there's such a wide variety of installation procedures on different
-systems.
-
-If you generated a Makefile with the "configure" script, you can just say
-       make install
-to install the programs and their man pages into the standard places.
-(You'll probably need to be root to do this.)  We recommend first saying
-       make -n install
-to see where configure thought the files should go.  You may need to edit
-the Makefile, particularly if your system's conventions for man page
-filenames don't match what configure expects.
-
-If you want to install the IJG library itself, for use in compiling other
-programs besides ours, then you need to put the four include files
-       jpeglib.h jerror.h jconfig.h jmorecfg.h
-into your include-file directory, and put the library file libjpeg.a
-(extension may vary depending on system) wherever library files go.
-If you generated a Makefile with "configure", it will do what it thinks
-is the right thing if you say
-       make install-lib
-
-
-OPTIONAL STUFF
-==============
-
-Progress monitor:
-
-If you like, you can #define PROGRESS_REPORT (in jconfig.h) to enable display
-of percent-done progress reports.  The routine provided in cdjpeg.c merely
-prints percentages to stderr, but you can customize it to do something
-fancier.
-
-Utah RLE file format support:
-
-We distribute the software with support for RLE image files (Utah Raster
-Toolkit format) disabled, because the RLE support won't compile without the
-Utah library.  If you have URT version 3.1 or later, you can enable RLE
-support as follows:
-       1.  #define RLE_SUPPORTED in jconfig.h.
-       2.  Add a -I option to CFLAGS in the Makefile for the directory
-           containing the URT .h files (typically the "include"
-           subdirectory of the URT distribution).
-       3.  Add -L... -lrle to LDLIBS in the Makefile, where ... specifies
-           the directory containing the URT "librle.a" file (typically the
-           "lib" subdirectory of the URT distribution).
-
-Support for 12-bit-deep pixel data:
-
-The JPEG standard allows either 8-bit or 12-bit data precision.  (For color,
-this means 8 or 12 bits per channel, of course.)  If you need to work with
-deeper than 8-bit data, you can compile the IJG code for 12-bit operation.
-To do so:
-  1. In jmorecfg.h, define BITS_IN_JSAMPLE as 12 rather than 8.
-  2. In jconfig.h, undefine BMP_SUPPORTED, RLE_SUPPORTED, and TARGA_SUPPORTED,
-     because the code for those formats doesn't handle 12-bit data and won't
-     even compile.  (The PPM code does work, as explained below.  The GIF
-     code works too; it scales 8-bit GIF data to and from 12-bit depth
-     automatically.)
-  3. Compile.  Don't expect "make test" to pass, since the supplied test
-     files are for 8-bit data.
-
-Currently, 12-bit support does not work on 16-bit-int machines.
-
-Note that a 12-bit version will not read 8-bit JPEG files, nor vice versa;
-so you'll want to keep around a regular 8-bit compilation as well.
-(Run-time selection of data depth, to allow a single copy that does both,
-is possible but would probably slow things down considerably; it's very low
-on our to-do list.)
-
-The PPM reader (rdppm.c) can read 12-bit data from either text-format or
-binary-format PPM and PGM files.  Binary-format PPM/PGM files which have a
-maxval greater than 255 are assumed to use 2 bytes per sample, MSB first
-(big-endian order).  As of early 1995, 2-byte binary format is not
-officially supported by the PBMPLUS library, but it is expected that a
-future release of PBMPLUS will support it.  Note that the PPM reader will
-read files of any maxval regardless of the BITS_IN_JSAMPLE setting; incoming
-data is automatically rescaled to either maxval=255 or maxval=4095 as
-appropriate for the cjpeg bit depth.
-
-The PPM writer (wrppm.c) will normally write 2-byte binary PPM or PGM
-format, maxval 4095, when compiled with BITS_IN_JSAMPLE=12.  Since this
-format is not yet widely supported, you can disable it by compiling wrppm.c
-with PPM_NORAWWORD defined; then the data is scaled down to 8 bits to make a
-standard 1-byte/sample PPM or PGM file.  (Yes, this means still another copy
-of djpeg to keep around.  But hopefully you won't need it for very long.
-Poskanzer's supposed to get that new PBMPLUS release out Real Soon Now.)
-
-Of course, if you are working with 12-bit data, you probably have it stored
-in some other, nonstandard format.  In that case you'll probably want to
-write your own I/O modules to read and write your format.
-
-Note that a 12-bit version of cjpeg always runs in "-optimize" mode, in
-order to generate valid Huffman tables.  This is necessary because our
-default Huffman tables only cover 8-bit data.
-
-Removing code:
-
-If you need to make a smaller version of the JPEG software, some optional
-functions can be removed at compile time.  See the xxx_SUPPORTED #defines in
-jconfig.h and jmorecfg.h.  If at all possible, we recommend that you leave in
-decoder support for all valid JPEG files, to ensure that you can read anyone's
-output.  Taking out support for image file formats that you don't use is the
-most painless way to make the programs smaller.  Another possibility is to
-remove some of the DCT methods: in particular, the "IFAST" method may not be
-enough faster than the others to be worth keeping on your machine.  (If you
-do remove ISLOW or IFAST, be sure to redefine JDCT_DEFAULT or JDCT_FASTEST
-to a supported method, by adding a #define in jconfig.h.)
-
-
-OPTIMIZATION
-============
-
-Unless you own a Cray, you'll probably be interested in making the JPEG
-software go as fast as possible.  This section covers some machine-dependent
-optimizations you may want to try.  We suggest that before trying any of
-this, you first get the basic installation to pass the self-test step.
-Repeat the self-test after any optimization to make sure that you haven't
-broken anything.
-
-The integer DCT routines perform a lot of multiplications.  These
-multiplications must yield 32-bit results, but none of their input values
-are more than 16 bits wide.  On many machines, notably the 680x0 and 80x86
-CPUs, a 16x16=>32 bit multiply instruction is faster than a full 32x32=>32
-bit multiply.  Unfortunately there is no portable way to specify such a
-multiplication in C, but some compilers can generate one when you use the
-right combination of casts.  See the MULTIPLYxxx macro definitions in
-jdct.h.  If your compiler makes "int" be 32 bits and "short" be 16 bits,
-defining SHORTxSHORT_32 is fairly likely to work.  When experimenting with
-alternate definitions, be sure to test not only whether the code still works
-(use the self-test), but also whether it is actually faster --- on some
-compilers, alternate definitions may compute the right answer, yet be slower
-than the default.  Timing cjpeg on a large PGM (grayscale) input file is the
-best way to check this, as the DCT will be the largest fraction of the runtime
-in that mode.  (Note: some of the distributed compiler-specific jconfig files
-already contain #define switches to select appropriate MULTIPLYxxx
-definitions.)
-
-If your machine has sufficiently fast floating point hardware, you may find
-that the float DCT method is faster than the integer DCT methods, even
-after tweaking the integer multiply macros.  In that case you may want to
-make the float DCT be the default method.  (The only objection to this is
-that float DCT results may vary slightly across machines.)  To do that, add
-"#define JDCT_DEFAULT JDCT_FLOAT" to jconfig.h.  Even if you don't change
-the default, you should redefine JDCT_FASTEST, which is the method selected
-by djpeg's -fast switch.  Don't forget to update the documentation files
-(usage.txt and/or cjpeg.1, djpeg.1) to agree with what you've done.
-
-If access to "short" arrays is slow on your machine, it may be a win to
-define type JCOEF as int rather than short.  This will cost a good deal of
-memory though, particularly in some multi-pass modes, so don't do it unless
-you have memory to burn and short is REALLY slow.
-
-If your compiler can compile function calls in-line, make sure the INLINE
-macro in jmorecfg.h is defined as the keyword that marks a function
-inline-able.  Some compilers have a switch that tells the compiler to inline
-any function it thinks is profitable (e.g., -finline-functions for gcc).
-Enabling such a switch is likely to make the compiled code bigger but faster.
-
-In general, it's worth trying the maximum optimization level of your compiler,
-and experimenting with any optional optimizations such as loop unrolling.
-(Unfortunately, far too many compilers have optimizer bugs ... be prepared to
-back off if the code fails self-test.)  If you do any experimentation along
-these lines, please report the optimal settings to jpeg-info@jpegclub.org so
-we can mention them in future releases.  Be sure to specify your machine and
-compiler version.
-
-
-HINTS FOR SPECIFIC SYSTEMS
-==========================
-
-We welcome reports on changes needed for systems not mentioned here.  Submit
-'em to jpeg-info@jpegclub.org.  Also, if configure or ckconfig.c is wrong
-about how to configure the JPEG software for your system, please let us know.
-
-
-Acorn RISC OS:
-
-(Thanks to Simon Middleton for these hints on compiling with Desktop C.)
-After renaming the files according to Acorn conventions, take a copy of
-makefile.ansi, change all occurrences of 'libjpeg.a' to 'libjpeg.o' and
-change these definitions as indicated:
-
-CFLAGS= -throwback -IC: -Wn
-LDLIBS=C:o.Stubs
-SYSDEPMEM=jmemansi.o
-LN=Link
-AR=LibFile -c -o
-
-Also add a new line '.c.o:; $(cc) $< $(cflags) -c -o $@'.  Remove the
-lines '$(RM) libjpeg.o' and '$(AR2) libjpeg.o' and the 'jconfig.h'
-dependency section.
-
-Copy jconfig.txt to jconfig.h.  Edit jconfig.h to define TWO_FILE_COMMANDLINE
-and CHAR_IS_UNSIGNED.
-
-Run the makefile using !AMU not !Make.  If you want to use the 'clean' and
-'test' makefile entries then you will have to fiddle with the syntax a bit
-and rename the test files.
-
-
-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:
-
-Copy the project files makcjpeg.st, makdjpeg.st, maktjpeg.st, and makljpeg.st
-to cjpeg.prj, djpeg.prj, jpegtran.prj, and libjpeg.prj respectively.  The
-project files should work as-is with Pure C.  For Turbo C, change library
-filenames "pc..." to "tc..." in each project file.  Note that libjpeg.prj
-selects jmemansi.c as the recommended memory manager.  You'll probably want to
-adjust the DEFAULT_MAX_MEM setting --- you want it to be a couple hundred K
-less than your normal free memory.  Put "#define DEFAULT_MAX_MEM nnnn" into
-jconfig.h to do this.
-
-To use the 68881/68882 coprocessor for the floating point DCT, add the
-compiler option "-8" to the project files and replace pcfltlib.lib with
-pc881lib.lib in cjpeg.prj and djpeg.prj.  Or if you don't have a
-coprocessor, you may prefer to remove the float DCT code by undefining
-DCT_FLOAT_SUPPORTED in jmorecfg.h (since without a coprocessor, the float
-code will be too slow to be useful).  In that case, you can delete
-pcfltlib.lib from the project files.
-
-Note that you must make libjpeg.lib before making cjpeg.ttp, djpeg.ttp,
-or jpegtran.ttp.  You'll have to perform the self-test by hand.
-
-We haven't bothered to include project files for rdjpgcom and wrjpgcom.
-Those source files should just be compiled by themselves; they don't
-depend on the JPEG library.  You can use the default.prj project file
-of the Pure C distribution to make the programs.
-
-There is a bug in some older versions of the Turbo C library which causes the
-space used by temporary files created with "tmpfile()" not to be freed after
-an abnormal program exit.  If you check your disk afterwards, you will find
-cluster chains that are allocated but not used by a file.  This should not
-happen in cjpeg/djpeg/jpegtran, since we enable a signal catcher to explicitly
-close temp files before exiting.  But if you use the JPEG library with your
-own code, be sure to supply a signal catcher, or else use a different
-system-dependent memory manager.
-
-
-Cray:
-
-Should you be so fortunate as to be running JPEG on a Cray YMP, there is a
-compiler bug in old versions of Cray's Standard C (prior to 3.1).  If you
-still have an old compiler, you'll need to insert a line reading
-"#pragma novector" just before the loop        
-    for (i = 1; i <= (int) htbl->bits[l]; i++)
-      huffsize[p++] = (char) l;
-in fix_huff_tbl (in V5beta1, line 204 of jchuff.c and line 176 of jdhuff.c).
-[This bug may or may not still occur with the current IJG code, but it's
-probably a dead issue anyway...]
-
-
-HP-UX:
-
-If you have HP-UX 7.05 or later with the "software development" C compiler,
-you should run the compiler in ANSI mode.  If using the configure script,
-say
-       ./configure CC='cc -Aa'
-(or -Ae if you prefer).  If configuring by hand, use makefile.ansi and add
-"-Aa" to the CFLAGS line in the makefile.
-
-If you have a pre-7.05 system, or if you are using the non-ANSI C compiler
-delivered with a minimum HP-UX system, then you must use makefile.unix
-(and do NOT add -Aa); or just run configure without the CC option.
-
-On HP 9000 series 800 machines, the HP C compiler is buggy in revisions prior
-to A.08.07.  If you get complaints about "not a typedef name", you'll have to
-use makefile.unix, or run configure without the CC option.
-
-
-Macintosh, generic comments:
-
-The supplied user-interface files (cjpeg.c, djpeg.c, etc) are set up to
-provide a Unix-style command line interface.  You can use this interface on
-the Mac by means of the ccommand() library routine provided by Metrowerks
-CodeWarrior or Think C.  This is only appropriate for testing the library,
-however; to make a user-friendly equivalent of cjpeg/djpeg you'd really want
-to develop a Mac-style user interface.  There isn't a complete example
-available at the moment, but there are some helpful starting points:
-1. Sam Bushell's free "To JPEG" applet provides drag-and-drop conversion to
-JPEG under System 7 and later.  This only illustrates how to use the
-compression half of the library, but it does a very nice job of that part.
-The CodeWarrior source code is available from http://www.pobox.com/~jsam.
-2. Jim Brunner prepared a Mac-style user interface for both compression and
-decompression.  Unfortunately, it hasn't been updated since IJG v4, and
-the library's API has changed considerably since then.  Still it may be of
-some help, particularly as a guide to compiling the IJG code under Think C.
-Jim's code is available from the Info-Mac archives, at sumex-aim.stanford.edu
-or mirrors thereof; see file /info-mac/dev/src/jpeg-convert-c.hqx.
-
-jmemmac.c is the recommended memory manager back end for Macintosh.  It uses
-NewPtr/DisposePtr instead of malloc/free, and has a Mac-specific
-implementation of jpeg_mem_available().  It also creates temporary files that
-follow Mac conventions.  (That part of the code relies on System-7-or-later OS
-functions.  See the comments in jmemmac.c if you need to run it on System 6.)
-NOTE that USE_MAC_MEMMGR must be defined in jconfig.h to use jmemmac.c.
-
-You can also use jmemnobs.c, if you don't care about handling images larger
-than available memory.  If you use any memory manager back end other than
-jmemmac.c, we recommend replacing "malloc" and "free" by "NewPtr" and
-"DisposePtr", because Mac C libraries often have peculiar implementations of
-malloc/free.  (For instance, free() may not return the freed space to the
-Mac Memory Manager.  This is undesirable for the IJG code because jmemmgr.c
-already clumps space requests.)
-
-
-Macintosh, Metrowerks CodeWarrior:
-
-The Unix-command-line-style interface can be used by defining USE_CCOMMAND.
-You'll also need to define TWO_FILE_COMMANDLINE to avoid stdin/stdout.
-This means that when using the cjpeg/djpeg programs, you'll have to type the
-input and output file names in the "Arguments" text-edit box, rather than
-using the file radio buttons.  (Perhaps USE_FDOPEN or USE_SETMODE would
-eliminate the problem, but I haven't heard from anyone who's tried it.)
-
-On 680x0 Macs, Metrowerks defines type "double" as a 10-byte IEEE extended
-float.  jmemmgr.c won't like this: it wants sizeof(ALIGN_TYPE) to be a power
-of 2.  Add "#define ALIGN_TYPE long" to jconfig.h to eliminate the complaint.
-
-The supplied configuration file jconfig.mac can be used for your jconfig.h;
-it includes all the recommended symbol definitions.  If you have AppleScript
-installed, you can run the supplied script makeproj.mac to create CodeWarrior
-project files for the library and the testbed applications, then build the
-library and applications.  (Thanks to Dan Sears and Don Agro for this nifty
-hack, which saves us from trying to maintain CodeWarrior project files as part
-of the IJG distribution...)
-
-
-Macintosh, Think C:
-
-The documentation in Jim Brunner's "JPEG Convert" source code (see above)
-includes detailed build instructions for Think C; it's probably somewhat
-out of date for the current release, but may be helpful.
-
-If you want to build the minimal command line version, proceed as follows.
-You'll have to prepare project files for the programs; we don't include any
-in the distribution since they are not text files.  Use the file lists in
-any of the supplied makefiles as a guide.  Also add the ANSI and Unix C
-libraries in a separate segment.  You may need to divide the JPEG files into
-more than one segment; we recommend dividing compression and decompression
-modules.  Define USE_CCOMMAND in jconfig.h so that the ccommand() routine is
-called.  You must also define TWO_FILE_COMMANDLINE because stdin/stdout
-don't handle binary data correctly.
-
-On 680x0 Macs, Think C defines type "double" as a 12-byte IEEE extended float.
-jmemmgr.c won't like this: it wants sizeof(ALIGN_TYPE) to be a power of 2.
-Add "#define ALIGN_TYPE long" to jconfig.h to eliminate the complaint.
-
-jconfig.mac should work as a jconfig.h configuration file for Think C,
-but the makeproj.mac AppleScript script is specific to CodeWarrior.  Sorry.
-
-
-MIPS R3000:
-
-MIPS's cc version 1.31 has a rather nasty optimization bug.  Don't use -O
-if you have that compiler version.  (Use "cc -V" to check the version.)
-Note that the R3000 chip is found in workstations from DEC and others.
-
-
-MS-DOS, generic comments for 16-bit compilers:
-
-The IJG code is designed to work well in 80x86 "small" or "medium" memory
-models (i.e., data pointers are 16 bits unless explicitly declared "far";
-code pointers can be either size).  You may be able to use small model to
-compile cjpeg or djpeg by itself, but you will probably have to use medium
-model for any larger application.  This won't make much difference in
-performance.  You *will* take a noticeable performance hit if you use a
-large-data memory model, and you should avoid "huge" model if at all
-possible.  Be sure that NEED_FAR_POINTERS is defined in jconfig.h if you use
-a small-data memory model; be sure it is NOT defined if you use a large-data
-model.  (The supplied makefiles and jconfig files for Borland and Microsoft C
-compile in medium model and define NEED_FAR_POINTERS.)
-
-The DOS-specific memory manager, jmemdos.c, should be used if possible.
-It needs some assembly-code routines which are in jmemdosa.asm; make sure
-your makefile assembles that file and includes it in the library.  If you
-don't have a suitable assembler, you can get pre-assembled object files for
-jmemdosa by FTP from ftp.uu.net:/graphics/jpeg/jdosaobj.zip.  (DOS-oriented
-distributions of the IJG source code often include these object files.)
-
-When using jmemdos.c, jconfig.h must define USE_MSDOS_MEMMGR and must set
-MAX_ALLOC_CHUNK to less than 64K (65520L is a typical value).  If your
-C library's far-heap malloc() can't allocate blocks that large, reduce
-MAX_ALLOC_CHUNK to whatever it can handle.
-
-If you can't use jmemdos.c for some reason --- for example, because you
-don't have an assembler to assemble jmemdosa.asm --- you'll have to fall
-back to jmemansi.c or jmemname.c.  You'll probably still need to set
-MAX_ALLOC_CHUNK in jconfig.h, because most DOS C libraries won't malloc()
-more than 64K at a time.  IMPORTANT: if you use jmemansi.c or jmemname.c,
-you will have to compile in a large-data memory model in order to get the
-right stdio library.  Too bad.
-
-wrjpgcom needs to be compiled in large model, because it malloc()s a 64KB
-work area to hold the comment text.  If your C library's malloc can't
-handle that, reduce MAX_COM_LENGTH as necessary in wrjpgcom.c.
-
-Most MS-DOS compilers treat stdin/stdout as text files, so you must use
-two-file command line style.  But if your compiler has either fdopen() or
-setmode(), you can use one-file style if you like.  To do this, define
-USE_SETMODE or USE_FDOPEN so that stdin/stdout will be set to binary mode.
-(USE_SETMODE seems to work with more DOS compilers than USE_FDOPEN.)  You
-should test that I/O through stdin/stdout produces the same results as I/O
-to explicitly named files... the "make test" procedures in the supplied
-makefiles do NOT use stdin/stdout.
-
-
-MS-DOS, generic comments for 32-bit compilers:
-
-None of the above comments about memory models apply if you are using a
-32-bit flat-memory-space environment, such as DJGPP or Watcom C.  (And you
-should use one if you have it, as performance will be much better than
-8086-compatible code!)  For flat-memory-space compilers, do NOT define
-NEED_FAR_POINTERS, and do NOT use jmemdos.c.  Use jmemnobs.c if the
-environment supplies adequate virtual memory, otherwise use jmemansi.c or
-jmemname.c.
-
-You'll still need to be careful about binary I/O through stdin/stdout.
-See the last paragraph of the previous section.
-
-
-MS-DOS, Borland C:
-
-Be sure to convert all the source files to DOS text format (CR/LF newlines).
-Although Borland C will often work OK with unmodified Unix (LF newlines)
-source files, sometimes it will give bogus compile errors.
-"Illegal character '#'" is the most common such error.  (This is true with
-Borland C 3.1, but perhaps is fixed in newer releases.)
-
-If you want one-file command line style, just undefine TWO_FILE_COMMANDLINE.
-jconfig.bcc already includes #define USE_SETMODE to make this work.
-(fdopen does not work correctly.)
-
-
-MS-DOS, Microsoft C:
-
-makefile.mc6 works with Microsoft C, DOS Visual C++, etc.  It should only
-be used if you want to build a 16-bit (small or medium memory model) program.
-
-If you want one-file command line style, just undefine TWO_FILE_COMMANDLINE.
-jconfig.mc6 already includes #define USE_SETMODE to make this work.
-(fdopen does not work correctly.)
-
-Note that this makefile assumes that the working copy of itself is called
-"makefile".  If you want to call it something else, say "makefile.mak",
-be sure to adjust the dependency line that reads "$(RFILE) : makefile".
-Otherwise the make will fail because it doesn't know how to create "makefile".
-Worse, some releases of Microsoft's make utilities give an incorrect error
-message in this situation.
-
-Old versions of MS C fail with an "out of macro expansion space" error
-because they can't cope with the macro TRACEMS8 (defined in jerror.h).
-If this happens to you, the easiest solution is to change TRACEMS8 to
-expand to nothing.  You'll lose the ability to dump out JPEG coefficient
-tables with djpeg -debug -debug, but at least you can compile.
-
-Original MS C 6.0 is very buggy; it compiles incorrect code unless you turn
-off optimization entirely (remove -O from CFLAGS).  6.00A is better, but it
-still generates bad code if you enable loop optimizations (-Ol or -Ox).
-
-MS C 8.0 crashes when compiling jquant1.c with optimization switch /Oo ...
-which is on by default.  To work around this bug, compile that one file
-with /Oo-.
-
-
-Microsoft Windows (all versions), generic comments:
-
-Some Windows system include files define typedef boolean as "unsigned char".
-The IJG code also defines typedef boolean, but we make it "int" by default.
-This doesn't affect the IJG programs because we don't import those Windows
-include files.  But if you use the JPEG library in your own program, and some
-of your program's files import one definition of boolean while some import the
-other, you can get all sorts of mysterious problems.  A good preventive step
-is to make the IJG library use "unsigned char" for boolean.  To do that,
-add something like this to your jconfig.h file:
-       /* Define "boolean" as unsigned char, not int, per Windows custom */
-       #ifndef __RPCNDR_H__    /* don't conflict if rpcndr.h already read */
-       typedef unsigned char boolean;
-       #endif
-       #define HAVE_BOOLEAN    /* prevent jmorecfg.h from redefining it */
-(This is already in jconfig.vc, by the way.)
-
-windef.h contains the declarations
-       #define far
-       #define FAR far
-Since jmorecfg.h tries to define FAR as empty, you may get a compiler
-warning if you include both jpeglib.h and windef.h (which windows.h
-includes).  To suppress the warning, you can put "#ifndef FAR"/"#endif"
-around the line "#define FAR" in jmorecfg.h.
-(Something like this is already in jmorecfg.h, by the way.)
-
-When using the library in a Windows application, you will almost certainly
-want to modify or replace the error handler module jerror.c, since our
-default error handler does a couple of inappropriate things:
-  1. it tries to write error and warning messages on stderr;
-  2. in event of a fatal error, it exits by calling exit().
-
-A simple stopgap solution for problem 1 is to replace the line
-       fprintf(stderr, "%s\n", buffer);
-(in output_message in jerror.c) with
-       MessageBox(GetActiveWindow(),buffer,"JPEG Error",MB_OK|MB_ICONERROR);
-It's highly recommended that you at least do that much, since otherwise
-error messages will disappear into nowhere.  (Beginning with IJG v6b, this
-code is already present in jerror.c; just define USE_WINDOWS_MESSAGEBOX in
-jconfig.h to enable it.)
-
-The proper solution for problem 2 is to return control to your calling
-application after a library error.  This can be done with the setjmp/longjmp
-technique discussed in libjpeg.txt and illustrated in example.c.  (NOTE:
-some older Windows C compilers provide versions of setjmp/longjmp that
-don't actually work under Windows.  You may need to use the Windows system
-functions Catch and Throw instead.)
-
-The recommended memory manager under Windows is jmemnobs.c; in other words,
-let Windows do any virtual memory management needed.  You should NOT use
-jmemdos.c nor jmemdosa.asm under Windows.
-
-For Windows 3.1, we recommend compiling in medium or large memory model;
-for newer Windows versions, use a 32-bit flat memory model.  (See the MS-DOS
-sections above for more info about memory models.)  In the 16-bit memory
-models only, you'll need to put
-       #define MAX_ALLOC_CHUNK 65520L  /* Maximum request to malloc() */
-into jconfig.h to limit allocation chunks to 64Kb.  (Without that, you'd
-have to use huge memory model, which slows things down unnecessarily.)
-jmemnobs.c works without modification in large or flat memory models, but to
-use medium model, you need to modify its jpeg_get_large and jpeg_free_large
-routines to allocate far memory.  In any case, you might like to replace
-its calls to malloc and free with direct calls on Windows memory allocation
-functions.
-
-You may also want to modify jdatasrc.c and jdatadst.c to use Windows file
-operations rather than fread/fwrite.  This is only necessary if your C
-compiler doesn't provide a competent implementation of C stdio functions.
-
-You might want to tweak the RGB_xxx macros in jmorecfg.h so that the library
-will accept or deliver color pixels in BGR sample order, not RGB; BGR order
-is usually more convenient under Windows.  Note that this change will break
-the sample applications cjpeg/djpeg, but the library itself works fine.
-
-
-Many people want to convert the IJG library into a DLL.  This is reasonably
-straightforward, but watch out for the following:
-
-  1. Don't try to compile as a DLL in small or medium memory model; use
-large model, or even better, 32-bit flat model.  Many places in the IJG code
-assume the address of a local variable is an ordinary (not FAR) pointer;
-that isn't true in a medium-model DLL.
-
-  2. Microsoft C cannot pass file pointers between applications and DLLs.
-(See Microsoft Knowledge Base, PSS ID Number Q50336.)  So jdatasrc.c and
-jdatadst.c don't work if you open a file in your application and then pass
-the pointer to the DLL.  One workaround is to make jdatasrc.c/jdatadst.c
-part of your main application rather than part of the DLL.
-
-  3. You'll probably need to modify the macros GLOBAL() and EXTERN() to
-attach suitable linkage keywords to the exported routine names.  Similarly,
-you'll want to modify METHODDEF() and JMETHOD() to ensure function pointers
-are declared in a way that lets application routines be called back through
-the function pointers.  These macros are in jmorecfg.h.  Typical definitions
-for a 16-bit DLL are:
-       #define GLOBAL(type)            type _far _pascal _loadds _export
-       #define EXTERN(type)            extern type _far _pascal _loadds
-       #define METHODDEF(type)         static type _far _pascal
-       #define JMETHOD(type,methodname,arglist)  \
-               type (_far _pascal *methodname) arglist
-For a 32-bit DLL you may want something like
-       #define GLOBAL(type)            __declspec(dllexport) type
-       #define EXTERN(type)            extern __declspec(dllexport) type
-Although not all the GLOBAL routines are actually intended to be called by
-the application, the performance cost of making them all DLL entry points is
-negligible.
-
-The unmodified IJG library presents a very C-specific application interface,
-so the resulting DLL is only usable from C or C++ applications.  There has
-been some talk of writing wrapper code that would present a simpler interface
-usable from other languages, such as Visual Basic.  This is on our to-do list
-but hasn't been very high priority --- any volunteers out there?
-
-
-Microsoft Windows, Borland C:
-
-The provided jconfig.bcc should work OK in a 32-bit Windows environment,
-but you'll need to tweak it in a 16-bit environment (you'd need to define
-NEED_FAR_POINTERS and MAX_ALLOC_CHUNK).  Beware that makefile.bcc will need
-alteration if you want to use it for Windows --- in particular, you should
-use jmemnobs.c not jmemdos.c under Windows.
-
-Borland C++ 4.5 fails with an internal compiler error when trying to compile
-jdmerge.c in 32-bit mode.  If enough people complain, perhaps Borland will fix
-it.  In the meantime, the simplest known workaround is to add a redundant
-definition of the variable range_limit in h2v1_merged_upsample(), at the head
-of the block that handles odd image width (about line 268 in v6 jdmerge.c):
-  /* If image width is odd, do the last output column separately */
-  if (cinfo->output_width & 1) {
-    register JSAMPLE * range_limit = cinfo->sample_range_limit; /* ADD THIS */
-    cb = GETJSAMPLE(*inptr1);
-Pretty bizarre, especially since the very similar routine h2v2_merged_upsample
-doesn't trigger the bug.
-Recent reports suggest that this bug does not occur with "bcc32a" (the
-Pentium-optimized version of the compiler).
-
-Another report from a user of Borland C 4.5 was that incorrect code (leading
-to a color shift in processed images) was produced if any of the following
-optimization switch combinations were used: 
-       -Ot -Og
-       -Ot -Op
-       -Ot -Om
-So try backing off on optimization if you see such a problem.  (Are there
-several different releases all numbered "4.5"??)
-
-
-Microsoft Windows, Microsoft Visual C++:
-
-jconfig.vc should work OK with any Microsoft compiler for a 32-bit memory
-model.  makefile.vc is intended for command-line use.  (If you are using
-the Developer Studio environment, you may prefer the DevStudio project
-files; see below.)
-
-IJG JPEG 7 adds extern "C" to jpeglib.h.  This avoids the need to put
-extern "C" { ... } around #include "jpeglib.h" in your C++ application.
-You can also force VC++ to treat the library as C++ code by renaming
-all the *.c files to *.cpp (and adjusting the makefile to match).
-In this case you also need to define the symbol DONT_USE_EXTERN_C in
-the configuration to prevent jpeglib.h from using extern "C".
-
-
-Microsoft Windows, Microsoft Visual C++ 6 Developer Studio:
-
-We include makefiles that should work as project files in DevStudio 6.0 or
-later.  There is a library makefile that builds the IJG library as a static
-Win32 library, and application makefiles that build the sample applications
-as Win32 console applications.  (Even if you only want the library, we
-recommend building the applications so that you can run the self-test.)
-
-To use:
-1. Open the command prompt, change to the main directory and execute the
-   command line
-       NMAKE /f makefile.vc  setup-vc6
-   This will move jconfig.vc to jconfig.h and makefiles to project files.
-   (Note that the renaming is critical!)
-2. Open the workspace file jpeg.dsw, build the library project.
-   (If you are using DevStudio more recent than 6.0, you'll probably
-   get a message saying that the project files are being updated.)
-3. Open the workspace file apps.dsw, build the application projects.
-4. To perform the self-test, execute the command line
-       NMAKE /f makefile.vc  test-build
-5. Move the application .exe files from `app`\Release to an
-   appropriate location on your path.
-
-
-Microsoft Windows, Microsoft Visual C++ 2010 Developer Studio (v10):
-
-We include makefiles that should work as project files in Visual Studio
-2010 or later.  There is a library makefile that builds the IJG library
-as a static Win32 library, and application makefiles that build the sample
-applications as Win32 console applications.  (Even if you only want the
-library, we recommend building the applications so that you can run the
-self-test.)
-
-To use:
-1. Open the command prompt, change to the main directory and execute the
-   command line
-       NMAKE /f makefile.vc  setup-v10
-   This will move jconfig.vc to jconfig.h and makefiles to project files.
-   (Note that the renaming is critical!)
-2. Open the solution file jpeg.sln, build the library project.
-   (If you are using Visual Studio more recent than 2010 (v10), you'll
-   probably get a message saying that the project files are being updated.)
-3. Open the solution file apps.sln, build the application projects.
-4. To perform the self-test, execute the command line
-       NMAKE /f makefile.vc  test-build
-5. Move the application .exe files from `app`\Release to an
-   appropriate location on your path.
-
-Note:
-There seems to be an optimization bug in the compiler which causes the
-self-test to fail with the color quantization option.
-We have disabled optimization for the file jquant2.c in the library
-project file which causes the self-test to pass properly.
-
-
-OS/2, Borland C++:
-
-Watch out for optimization bugs in older Borland compilers; you may need
-to back off the optimization switch settings.  See the comments in
-makefile.bcc.
-
-
-SGI:
-
-On some SGI systems, you may need to set "AR2= ar -ts" in the Makefile.
-If you are using configure, you can do this by saying
-       ./configure RANLIB='ar -ts'
-This change is not needed on all SGIs.  Use it only if the make fails at the
-stage of linking the completed programs.
-
-On the MIPS R4000 architecture (Indy, etc.), the compiler option "-mips2"
-reportedly speeds up the float DCT method substantially, enough to make it
-faster than the default int method (but still slower than the fast int
-method).  If you use -mips2, you may want to alter the default DCT method to
-be float.  To do this, put "#define JDCT_DEFAULT JDCT_FLOAT" in jconfig.h.
-
-
-VMS:
-
-On an Alpha/VMS system with MMS, be sure to use the "/Marco=Alpha=1"
-qualifier with MMS when building the JPEG package.
-
-VAX/VMS v5.5-1 may have problems with the test step of the build procedure
-reporting differences when it compares the original and test images.  If the
-error points to the last block of the files, it is most likely bogus and may
-be safely ignored.  It seems to be because the files are Stream_LF and
-Backup/Compare has difficulty with the (presumably) null padded files.
-This problem was not observed on VAX/VMS v6.1 or AXP/VMS v6.1.
index 87f8ec6..19127e3 100644 (file)
@@ -9,10 +9,11 @@ set(JAVA_CLASSNAMES org/libjpegturbo/turbojpeg/TJ
   org/libjpegturbo/turbojpeg/TJTransform
   org/libjpegturbo/turbojpeg/TJTransformer
   TJUnitTest
-  TJExample)
+  TJExample
+  TJBench)
 
 if(MSVC_IDE)
-  set(OBJDIR "${CMAKE_CURRENT_BINARY_DIR}/$(OutDir)")
+  set(OBJDIR "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}")
 else()
   set(OBJDIR ${CMAKE_CURRENT_BINARY_DIR})
 endif()
index 4a1b34e..1307d69 100644 (file)
@@ -1,15 +1,21 @@
 JAVAROOT = .
 
+org/libjpegturbo/turbojpeg/TJLoader.java: $(srcdir)/org/libjpegturbo/turbojpeg/TJLoader.java.tmpl
+       mkdir -p org/libjpegturbo/turbojpeg; \
+       cat $(srcdir)/org/libjpegturbo/turbojpeg/TJLoader.java.tmpl | \
+               sed s@%{__libdir}@$(libdir)@g > org/libjpegturbo/turbojpeg/TJLoader.java
+
+
 JAVASOURCES = org/libjpegturbo/turbojpeg/TJ.java \
        org/libjpegturbo/turbojpeg/TJCompressor.java \
        org/libjpegturbo/turbojpeg/TJCustomFilter.java \
        org/libjpegturbo/turbojpeg/TJDecompressor.java \
-       org/libjpegturbo/turbojpeg/TJLoader.java \
        org/libjpegturbo/turbojpeg/TJScalingFactor.java \
        org/libjpegturbo/turbojpeg/TJTransform.java \
        org/libjpegturbo/turbojpeg/TJTransformer.java \
        TJExample.java \
-       TJUnitTest.java
+       TJUnitTest.java \
+       TJBench.java
 
 JNIHEADERS = org_libjpegturbo_turbojpeg_TJ.h \
        org_libjpegturbo_turbojpeg_TJCompressor.h \
@@ -18,7 +24,7 @@ JNIHEADERS = org_libjpegturbo_turbojpeg_TJ.h \
 
 if WITH_JAVA
 
-dist_noinst_JAVA = ${JAVASOURCES}
+nodist_noinst_JAVA = ${JAVASOURCES} org/libjpegturbo/turbojpeg/TJLoader.java
 
 JAVA_CLASSES = org/libjpegturbo/turbojpeg/TJ.class \
        org/libjpegturbo/turbojpeg/TJCompressor.class \
@@ -29,7 +35,8 @@ JAVA_CLASSES = org/libjpegturbo/turbojpeg/TJ.class \
        org/libjpegturbo/turbojpeg/TJTransform.class \
        org/libjpegturbo/turbojpeg/TJTransformer.class \
        TJExample.class \
-       TJUnitTest.class
+       TJUnitTest.class \
+       TJBench.class
 
 all: all-am turbojpeg.jar
 
@@ -40,12 +47,12 @@ clean-local:
        rm -f turbojpeg.jar
 
 install-exec-local: turbojpeg.jar
-       mkdir -p $(DESTDIR)/$(prefix)/classes
-       $(INSTALL) -m 644 turbojpeg.jar $(DESTDIR)/$(prefix)/classes/
+       mkdir -p $(DESTDIR)/$(datadir)/classes
+       $(INSTALL) -m 644 turbojpeg.jar $(DESTDIR)/$(datadir)/classes/
 
 uninstall-local:
-       rm -f $(DESTDIR)/$(prefix)/classes/turbojpeg.jar
-       if [ -d $(DESTDIR)/$(prefix)/classes ]; then rmdir $(DESTDIR)/$(prefix)/classes; fi
+       rm -f $(DESTDIR)/$(datadir)/classes/turbojpeg.jar
+       if [ -d $(DESTDIR)/$(datadir)/classes ]; then rmdir $(DESTDIR)/$(datadir)/classes; fi
 
 headers: all
        javah -d ${srcdir} org.libjpegturbo.turbojpeg.TJ; \
@@ -55,9 +62,10 @@ headers: all
 
 docs: all
        mkdir -p ${srcdir}/doc; \
-       javadoc -d ${srcdir}/doc -sourcepath ${srcdir} org.libjpegturbo.turbojpeg
+       javadoc -notimestamp -d ${srcdir}/doc -sourcepath ${srcdir} org.libjpegturbo.turbojpeg
 
 endif
 
 EXTRA_DIST = MANIFEST.MF ${JAVASOURCES} ${JNIHEADERS} doc CMakeLists.txt \
+       org/libjpegturbo/turbojpeg/TJLoader.java.tmpl \
        org/libjpegturbo/turbojpeg/TJLoader.java.in
index 89826ad..2a032da 100644 (file)
@@ -36,8 +36,7 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = java
-DIST_COMMON = README $(am__dist_noinst_JAVA_DIST) \
-       $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
        $(top_srcdir)/configure.ac
@@ -48,15 +47,6 @@ CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/jconfig.h
 CONFIG_CLEAN_FILES =
 SOURCES =
 DIST_SOURCES =
-am__dist_noinst_JAVA_DIST = org/libjpegturbo/turbojpeg/TJ.java \
-       org/libjpegturbo/turbojpeg/TJCompressor.java \
-       org/libjpegturbo/turbojpeg/TJCustomFilter.java \
-       org/libjpegturbo/turbojpeg/TJDecompressor.java \
-       org/libjpegturbo/turbojpeg/TJLoader.java \
-       org/libjpegturbo/turbojpeg/TJScalingFactor.java \
-       org/libjpegturbo/turbojpeg/TJTransform.java \
-       org/libjpegturbo/turbojpeg/TJTransformer.java TJExample.java \
-       TJUnitTest.java
 CLASSPATH_ENV = CLASSPATH=$(JAVAROOT):$(srcdir)/$(JAVAROOT):$$CLASSPATH
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
@@ -109,9 +99,11 @@ LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
+LIBTOOL_CURRENT = @LIBTOOL_CURRENT@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MEM_SRCDST_FUNCTIONS = @MEM_SRCDST_FUNCTIONS@
 NAFLAGS = @NAFLAGS@
 NASM = @NASM@
 OBJEXT = @OBJEXT@
@@ -122,6 +114,7 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGNAME = @PKGNAME@
 RANLIB = @RANLIB@
 RPMARCH = @RPMARCH@
 RPM_CONFIG_ARGS = @RPM_CONFIG_ARGS@
@@ -133,6 +126,7 @@ SIMD_I386_FALSE = @SIMD_I386_FALSE@
 SIMD_I386_TRUE = @SIMD_I386_TRUE@
 SIMD_X86_64_FALSE = @SIMD_X86_64_FALSE@
 SIMD_X86_64_TRUE = @SIMD_X86_64_TRUE@
+SO_AGE = @SO_AGE@
 SO_MAJOR_VERSION = @SO_MAJOR_VERSION@
 SO_MINOR_VERSION = @SO_MINOR_VERSION@
 STRIP = @STRIP@
@@ -153,6 +147,8 @@ WITH_SIMD_FALSE = @WITH_SIMD_FALSE@
 WITH_SIMD_TRUE = @WITH_SIMD_TRUE@
 WITH_SSE_FLOAT_DCT_FALSE = @WITH_SSE_FLOAT_DCT_FALSE@
 WITH_SSE_FLOAT_DCT_TRUE = @WITH_SSE_FLOAT_DCT_TRUE@
+WITH_TURBOJPEG_FALSE = @WITH_TURBOJPEG_FALSE@
+WITH_TURBOJPEG_TRUE = @WITH_TURBOJPEG_TRUE@
 X86_64_FALSE = @X86_64_FALSE@
 X86_64_TRUE = @X86_64_TRUE@
 ac_ct_AR = @ac_ct_AR@
@@ -203,19 +199,19 @@ JAVASOURCES = org/libjpegturbo/turbojpeg/TJ.java \
        org/libjpegturbo/turbojpeg/TJCompressor.java \
        org/libjpegturbo/turbojpeg/TJCustomFilter.java \
        org/libjpegturbo/turbojpeg/TJDecompressor.java \
-       org/libjpegturbo/turbojpeg/TJLoader.java \
        org/libjpegturbo/turbojpeg/TJScalingFactor.java \
        org/libjpegturbo/turbojpeg/TJTransform.java \
        org/libjpegturbo/turbojpeg/TJTransformer.java \
        TJExample.java \
-       TJUnitTest.java
+       TJUnitTest.java \
+       TJBench.java
 
 JNIHEADERS = org_libjpegturbo_turbojpeg_TJ.h \
        org_libjpegturbo_turbojpeg_TJCompressor.h \
        org_libjpegturbo_turbojpeg_TJDecompressor.h \
        org_libjpegturbo_turbojpeg_TJTransformer.h
 
-@WITH_JAVA_TRUE@dist_noinst_JAVA = ${JAVASOURCES}
+@WITH_JAVA_TRUE@nodist_noinst_JAVA = ${JAVASOURCES} org/libjpegturbo/turbojpeg/TJLoader.java
 @WITH_JAVA_TRUE@JAVA_CLASSES = org/libjpegturbo/turbojpeg/TJ.class \
 @WITH_JAVA_TRUE@       org/libjpegturbo/turbojpeg/TJCompressor.class \
 @WITH_JAVA_TRUE@       org/libjpegturbo/turbojpeg/TJCustomFilter.class \
@@ -225,9 +221,11 @@ JNIHEADERS = org_libjpegturbo_turbojpeg_TJ.h \
 @WITH_JAVA_TRUE@       org/libjpegturbo/turbojpeg/TJTransform.class \
 @WITH_JAVA_TRUE@       org/libjpegturbo/turbojpeg/TJTransformer.class \
 @WITH_JAVA_TRUE@       TJExample.class \
-@WITH_JAVA_TRUE@       TJUnitTest.class
+@WITH_JAVA_TRUE@       TJUnitTest.class \
+@WITH_JAVA_TRUE@       TJBench.class
 
 EXTRA_DIST = MANIFEST.MF ${JAVASOURCES} ${JNIHEADERS} doc CMakeLists.txt \
+       org/libjpegturbo/turbojpeg/TJLoader.java.tmpl \
        org/libjpegturbo/turbojpeg/TJLoader.java.in
 
 all: all-am
@@ -273,16 +271,16 @@ distclean-libtool:
        -rm -f libtool
 uninstall-info-am:
 
-classdist_noinst.stamp: $(dist_noinst_JAVA)
+classnodist_noinst.stamp: $(nodist_noinst_JAVA)
        @if test -n "$?"; then \
          echo '$(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) $?' ; \
          $(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) \
            $(AM_JAVACFLAGS) $(JAVACFLAGS) $?; \
        else :; fi
-       echo timestamp > classdist_noinst.stamp
+       echo timestamp > classnodist_noinst.stamp
 
-clean-dist_noinstJAVA:
-       -rm -f *.class classdist_noinst.stamp
+clean-nodist_noinstJAVA:
+       -rm -f *.class classnodist_noinst.stamp
 tags: TAGS
 TAGS:
 
@@ -320,7 +318,7 @@ distdir: $(DISTFILES)
        done
 check-am: all-am
 check: check-am
-all-am: Makefile classdist_noinst.stamp
+all-am: Makefile classnodist_noinst.stamp
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -351,8 +349,8 @@ maintainer-clean-generic:
 @WITH_JAVA_FALSE@clean-local:
 clean: clean-am
 
-clean-am: clean-dist_noinstJAVA clean-generic clean-libtool \
-       clean-local mostlyclean-am
+clean-am: clean-generic clean-libtool clean-local \
+       clean-nodist_noinstJAVA mostlyclean-am
 
 distclean: distclean-am
        -rm -f Makefile
@@ -396,8 +394,8 @@ ps-am:
 
 uninstall-am: uninstall-info-am uninstall-local
 
-.PHONY: all all-am check check-am clean clean-dist_noinstJAVA \
-       clean-generic clean-libtool clean-local distclean \
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       clean-local clean-nodist_noinstJAVA distclean \
        distclean-generic distclean-libtool distdir dvi dvi-am html \
        html-am info info-am install install-am install-data \
        install-data-am install-exec install-exec-am \
@@ -408,6 +406,11 @@ uninstall-am: uninstall-info-am uninstall-local
        uninstall uninstall-am uninstall-info-am uninstall-local
 
 
+org/libjpegturbo/turbojpeg/TJLoader.java: $(srcdir)/org/libjpegturbo/turbojpeg/TJLoader.java.tmpl
+       mkdir -p org/libjpegturbo/turbojpeg; \
+       cat $(srcdir)/org/libjpegturbo/turbojpeg/TJLoader.java.tmpl | \
+               sed s@%{__libdir}@$(libdir)@g > org/libjpegturbo/turbojpeg/TJLoader.java
+
 @WITH_JAVA_TRUE@all: all-am turbojpeg.jar
 
 @WITH_JAVA_TRUE@turbojpeg.jar: $(JAVA_CLASSES) ${srcdir}/MANIFEST.MF
@@ -417,12 +420,12 @@ uninstall-am: uninstall-info-am uninstall-local
 @WITH_JAVA_TRUE@       rm -f turbojpeg.jar
 
 @WITH_JAVA_TRUE@install-exec-local: turbojpeg.jar
-@WITH_JAVA_TRUE@       mkdir -p $(DESTDIR)/$(prefix)/classes
-@WITH_JAVA_TRUE@       $(INSTALL) -m 644 turbojpeg.jar $(DESTDIR)/$(prefix)/classes/
+@WITH_JAVA_TRUE@       mkdir -p $(DESTDIR)/$(datadir)/classes
+@WITH_JAVA_TRUE@       $(INSTALL) -m 644 turbojpeg.jar $(DESTDIR)/$(datadir)/classes/
 
 @WITH_JAVA_TRUE@uninstall-local:
-@WITH_JAVA_TRUE@       rm -f $(DESTDIR)/$(prefix)/classes/turbojpeg.jar
-@WITH_JAVA_TRUE@       if [ -d $(DESTDIR)/$(prefix)/classes ]; then rmdir $(DESTDIR)/$(prefix)/classes; fi
+@WITH_JAVA_TRUE@       rm -f $(DESTDIR)/$(datadir)/classes/turbojpeg.jar
+@WITH_JAVA_TRUE@       if [ -d $(DESTDIR)/$(datadir)/classes ]; then rmdir $(DESTDIR)/$(datadir)/classes; fi
 
 @WITH_JAVA_TRUE@headers: all
 @WITH_JAVA_TRUE@       javah -d ${srcdir} org.libjpegturbo.turbojpeg.TJ; \
@@ -432,7 +435,7 @@ uninstall-am: uninstall-info-am uninstall-local
 
 @WITH_JAVA_TRUE@docs: all
 @WITH_JAVA_TRUE@       mkdir -p ${srcdir}/doc; \
-@WITH_JAVA_TRUE@       javadoc -d ${srcdir}/doc -sourcepath ${srcdir} org.libjpegturbo.turbojpeg
+@WITH_JAVA_TRUE@       javadoc -notimestamp -d ${srcdir}/doc -sourcepath ${srcdir} org.libjpegturbo.turbojpeg
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
index 22e0f73..88ddc3b 100644 (file)
@@ -1,25 +1,25 @@
-TurboJPEG/OSS Java Wrapper
-==========================
-
-TurboJPEG/OSS can optionally be built with a Java Native Interface wrapper,
-which allows the TurboJPEG/OSS dynamic library to be loaded and used directly
-from Java applications.  The Java front end for this is defined in several
-classes located under org/libjpegturbo/turbojpeg.  The source code for these
-Java classes is licensed under a BSD-style license, so the files can be
-incorporated directly into both open source and proprietary projects without
-restriction.  A Java archive (JAR) file containing these classes is also
-shipped with the "official" distribution packages of libjpeg-turbo.
+TurboJPEG Java Wrapper
+======================
+
+The TurboJPEG shared library can optionally be built with a Java Native
+Interface wrapper, which allows the library to be loaded and used directly from
+Java applications.  The Java front end for this is defined in several classes
+located under org/libjpegturbo/turbojpeg.  The source code for these Java
+classes is licensed under a BSD-style license, so the files can be incorporated
+directly into both open source and proprietary projects without restriction.  A
+Java archive (JAR) file containing these classes is also shipped with the
+"official" distribution packages of libjpeg-turbo.
 
 TJExample.java, which should also be located in the same directory as this
-README file, demonstrates how to use the TurboJPEG/OSS Java front end to
-compress and decompress JPEG images in memory.
+README file, demonstrates how to use the TurboJPEG Java API to compress and
+decompress JPEG images in memory.
 
 
 Performance Pitfalls
 --------------------
 
-The TurboJPEG Java front end defines several convenience methods that can
-allocate image buffers or instantiate classes to hold the result of compress,
+The TurboJPEG Java API defines several convenience methods that can allocate
+image buffers or instantiate classes to hold the result of compress,
 decompress, or transform operations.  However, if you use these methods, then
 be mindful of the amount of new data you are creating on the heap.  It may be
 necessary to manually invoke the garbage collector to prevent heap exhaustion
@@ -27,29 +27,26 @@ or to prevent performance degradation.  Background garbage collection can kill
 performance, particularly in a multi-threaded environment (Java pauses all
 threads when the GC runs.)
 
-The Java front end always gives you the option of pre-allocating your own
-source and destination buffers, which allows you to re-use these buffers for
+The TurboJPEG Java API always gives you the option of pre-allocating your own
+source and destination buffers, which allows you to re-use those buffers for
 compressing/decompressing multiple images.  If the image sequence you are
 compressing or decompressing consists of images of the same size, then
 pre-allocating the buffers is recommended.
 
 
-Note for OS X users
--------------------
-
-/usr/lib, the directory under which libturbojpeg.dylib is installed on Mac
-systems, is not part of the normal Java library path.  Thus, when running a
-Java application that uses TurboJPEG/OSS on Mac systems, you will need to pass
-an argument of -Djava.library.path=/usr/lib to java.
-
-
-Note for Solaris users
+Installation Directory
 ----------------------
 
-/opt/libjpeg-turbo/lib, the directory under which libturbojpeg.so is installed
-on Solaris systems, is not part of the normal Java library path.  Thus, when
-running a Java application that uses TurboJPEG/OSS on Solaris systems, you will
-need to pass an argument of -Djava.library.path=/opt/libjpeg-turbo/lib to java.
-If using a 64-bit data model, then instead pass an argument of
--Djava.library.path=/opt/libjpeg-turbo/lib/amd64 to use the 64-bit version of
-libturbojpeg.so.
+The TurboJPEG Java Wrapper will look for the TurboJPEG JNI library
+(libturbojpeg.so, libturbojpeg.jnilib, or turbojpeg.dll) in the system library
+paths or in any paths specified in LD_LIBRARY_PATH (Un*x), DYLD_LIBRARY_PATH
+(Mac), or PATH (Windows.)  Failing this, on Un*x and Mac systems, the wrapper
+will look for the JNI library under the library directory configured when
+libjpeg-turbo was built.  If that library directory is
+/opt/libjpeg-turbo/lib32, then /opt/libjpeg-turbo/lib64 is also searched, and
+vice versa.
+
+If you installed the JNI library into another directory, then you will need
+to pass an argument of -Djava.library.path={path_to_JNI_library} to java, or
+manipulate LD_LIBRARY_PATH, DYLD_LIBRARY_PATH, or PATH to include the directory
+containing the JNI library.
diff --git a/java/TJBench.java b/java/TJBench.java
new file mode 100644 (file)
index 0000000..e9ed226
--- /dev/null
@@ -0,0 +1,874 @@
+/*
+ * Copyright (C)2009-2014 D. R. Commander.  All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * - Neither the name of the libjpeg-turbo Project nor the names of its
+ *   contributors may be used to endorse or promote products derived from this
+ *   software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.io.*;
+import java.awt.image.*;
+import javax.imageio.*;
+import java.util.*;
+import org.libjpegturbo.turbojpeg.*;
+
+class TJBench {
+
+  static final int YUVENCODE = 1;
+  static final int YUVDECODE = 2;
+
+  static int flags = 0, yuv = 0, quiet = 0, pf = TJ.PF_BGR;
+  static boolean decompOnly, doTile;
+
+  static final String[] pixFormatStr = {
+    "RGB", "BGR", "RGBX", "BGRX", "XBGR", "XRGB", "GRAY"
+  };
+
+  static final String[] subNameLong = {
+    "4:4:4", "4:2:2", "4:2:0", "GRAY", "4:4:0"
+  };
+
+  static final String[] subName = {
+    "444", "422", "420", "GRAY", "440"
+  };
+
+  static TJScalingFactor sf;
+  static int xformOp = TJTransform.OP_NONE, xformOpt = 0;
+  static double benchTime = 5.0;
+
+
+  static final double getTime() {
+    return (double)System.nanoTime() / 1.0e9;
+  }
+
+
+  static String sigFig(double val, int figs) {
+    String format;
+    int digitsAfterDecimal = figs - (int)Math.ceil(Math.log10(Math.abs(val)));
+    if (digitsAfterDecimal < 1)
+      format = new String("%.0f");
+    else
+      format = new String("%." + digitsAfterDecimal + "f");
+    return String.format(format, val);
+  }
+
+
+  static byte[] loadImage(String fileName, int[] w, int[] h, int pixelFormat)
+                          throws Exception {
+    BufferedImage img = ImageIO.read(new File(fileName));
+    if (img == null)
+      throw new Exception("Could not read " + fileName);
+    w[0] = img.getWidth();
+    h[0] = img.getHeight();
+    int[] rgb = img.getRGB(0, 0, w[0], h[0], null, 0, w[0]);
+    int ps = TJ.getPixelSize(pixelFormat);
+    int rindex = TJ.getRedOffset(pixelFormat);
+    int gindex = TJ.getGreenOffset(pixelFormat);
+    int bindex = TJ.getBlueOffset(pixelFormat);
+    byte[] dstBuf = new byte[w[0] * h[0] * ps];
+    int pixels = w[0] * h[0], dstPtr = 0, rgbPtr = 0;
+    while (pixels-- > 0) {
+      dstBuf[dstPtr + rindex] = (byte)((rgb[rgbPtr] >> 16) & 0xff);
+      dstBuf[dstPtr + gindex] = (byte)((rgb[rgbPtr] >> 8) & 0xff);
+      dstBuf[dstPtr + bindex] = (byte)(rgb[rgbPtr] & 0xff);
+      dstPtr += ps;
+      rgbPtr++;
+    }
+    return dstBuf;
+  }
+
+
+  static void saveImage(String fileName, byte[] srcBuf, int w, int h,
+                        int pixelFormat) throws Exception {
+    BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
+    int pixels = w * h, srcPtr = 0;
+    int ps = TJ.getPixelSize(pixelFormat);
+    int rindex = TJ.getRedOffset(pixelFormat);
+    int gindex = TJ.getGreenOffset(pixelFormat);
+    int bindex = TJ.getBlueOffset(pixelFormat);
+    for (int y = 0; y < h; y++) {
+      for (int x = 0; x < w; x++, srcPtr += ps) {
+        int pixel = (srcBuf[srcPtr + rindex] & 0xff) << 16 |
+                    (srcBuf[srcPtr + gindex] & 0xff) << 8 |
+                    (srcBuf[srcPtr + bindex] & 0xff);
+        img.setRGB(x, y, pixel);
+      }
+    }
+    ImageIO.write(img, "bmp", new File(fileName));
+  }
+
+
+  /* Decompression test */
+  static void decompTest(byte[] srcBuf, byte[][] jpegBuf, int[] jpegSize,
+                         byte[] dstBuf, int w, int h, int subsamp,
+                         int jpegQual, String fileName, int tilew, int tileh)
+                         throws Exception {
+    String qualStr = new String(""), sizeStr, tempStr;
+    TJDecompressor tjd;
+    double start, elapsed;
+    int ps = TJ.getPixelSize(pf), i;
+    int yuvSize = TJ.bufSizeYUV(w, h, subsamp), bufsize;
+    int scaledw = (yuv == YUVDECODE) ? w : sf.getScaled(w);
+    int scaledh = (yuv == YUVDECODE) ? h : sf.getScaled(h);
+    int pitch = scaledw * ps;
+
+    if (jpegQual > 0)
+      qualStr = new String("_Q" + jpegQual);
+
+    tjd = new TJDecompressor();
+
+    int bufSize = (yuv == YUVDECODE ? yuvSize : pitch * scaledh);
+    if (dstBuf == null)
+      dstBuf = new byte[bufSize];
+
+    /* Set the destination buffer to gray so we know whether the decompressor
+       attempted to write to it */
+    Arrays.fill(dstBuf, (byte)127);
+
+    /* Execute once to preload cache */
+    tjd.setJPEGImage(jpegBuf[0], jpegSize[0]);
+    if (yuv == YUVDECODE)
+      tjd.decompressToYUV(dstBuf, flags);
+    else
+      tjd.decompress(dstBuf, 0, 0, scaledw, pitch, scaledh, pf, flags);
+
+    /* Benchmark */
+    for (i = 0, start = getTime(); (elapsed = getTime() - start) < benchTime;
+         i++) {
+      int tile = 0;
+      if (yuv == YUVDECODE)
+        tjd.decompressToYUV(dstBuf, flags);
+      else {
+        for (int y = 0; y < h; y += tileh) {
+          for (int x = 0; x < w; x += tilew, tile++) {
+            int width = doTile ? Math.min(tilew, w - x) : scaledw;
+            int height = doTile ? Math.min(tileh, h - y) : scaledh;
+            tjd.setJPEGImage(jpegBuf[tile], jpegSize[tile]);
+            tjd.decompress(dstBuf, x, y, width, pitch, height, pf, flags);
+          }
+        }
+      }
+    }
+
+    tjd = null;
+    for (i = 0; i < jpegBuf.length; i++)
+      jpegBuf[i] = null;
+    jpegBuf = null;  jpegSize = null;
+    System.gc();
+
+    if (quiet != 0)
+      System.out.println(
+        sigFig((double)(w * h) / 1000000. * (double)i / elapsed, 4));
+    else {
+      System.out.format("D--> Frame rate:           %f fps\n",
+                        (double)i / elapsed);
+      System.out.format("     Dest. throughput:     %f Megapixels/sec\n",
+                        (double)(w * h) / 1000000. * (double)i / elapsed);
+    }
+
+    if (yuv == YUVDECODE) {
+      tempStr = fileName + "_" + subName[subsamp] + qualStr + ".yuv";
+      FileOutputStream fos = new FileOutputStream(tempStr);
+      fos.write(dstBuf, 0, yuvSize);
+      fos.close();
+    } else {
+      if (sf.getNum() != 1 || sf.getDenom() != 1)
+        sizeStr = new String(sf.getNum() + "_" + sf.getDenom());
+      else if (tilew != w || tileh != h)
+        sizeStr = new String(tilew + "x" + tileh);
+      else
+        sizeStr = new String("full");
+      if (decompOnly)
+        tempStr = new String(fileName + "_" + sizeStr + ".bmp");
+      else
+        tempStr = new String(fileName + "_" + subName[subsamp] + qualStr +
+                             "_" + sizeStr + ".bmp");
+      saveImage(tempStr, dstBuf, scaledw, scaledh, pf);
+      int ndx = tempStr.indexOf('.');
+      tempStr = new String(tempStr.substring(0, ndx) + "-err.bmp");
+      if (srcBuf != null && sf.getNum() == 1 && sf.getDenom() == 1) {
+        if (quiet == 0)
+          System.out.println("Compression error written to " + tempStr + ".");
+        if (subsamp == TJ.SAMP_GRAY) {
+          for (int y = 0, index = 0; y < h; y++, index += pitch) {
+            for (int x = 0, index2 = index; x < w; x++, index2 += ps) {
+              int rindex = index2 + TJ.getRedOffset(pf);
+              int gindex = index2 + TJ.getGreenOffset(pf);
+              int bindex = index2 + TJ.getBlueOffset(pf);
+              int lum = (int)((double)(srcBuf[rindex] & 0xff) * 0.299 +
+                              (double)(srcBuf[gindex] & 0xff) * 0.587 +
+                              (double)(srcBuf[bindex] & 0xff) * 0.114 + 0.5);
+              if (lum > 255) lum = 255;
+              if (lum < 0) lum = 0;
+              dstBuf[rindex] = (byte)Math.abs((dstBuf[rindex] & 0xff) - lum);
+              dstBuf[gindex] = (byte)Math.abs((dstBuf[gindex] & 0xff) - lum);
+              dstBuf[bindex] = (byte)Math.abs((dstBuf[bindex] & 0xff) - lum);
+            }
+          }
+        } else {
+          for (int y = 0; y < h; y++)
+            for (int x = 0; x < w * ps; x++)
+              dstBuf[pitch * y + x] =
+                (byte)Math.abs((dstBuf[pitch * y + x] & 0xff) -
+                               (srcBuf[pitch * y + x] & 0xff));
+        }
+        saveImage(tempStr, dstBuf, w, h, pf);
+      }
+    }
+  }
+
+
+  static void doTestYUV(byte[] srcBuf, int w, int h, int subsamp,
+                        String fileName) throws Exception {
+    TJCompressor tjc;
+    byte[] dstBuf;
+    double start, elapsed;
+    int ps = TJ.getPixelSize(pf), i;
+    int yuvSize = 0;
+
+    yuvSize = TJ.bufSizeYUV(w, h, subsamp);
+    dstBuf = new byte[yuvSize];
+
+    if (quiet == 0)
+      System.out.format(">>>>>  %s (%s) <--> YUV %s  <<<<<\n",
+        pixFormatStr[pf],
+        (flags & TJ.FLAG_BOTTOMUP) != 0 ? "Bottom-up" : "Top-down",
+        subNameLong[subsamp]);
+
+    if (quiet == 1)
+      System.out.format("%s\t%s\t%s\tN/A\t", pixFormatStr[pf],
+                        (flags & TJ.FLAG_BOTTOMUP) != 0 ? "BU" : "TD",
+                        subNameLong[subsamp]);
+
+    tjc = new TJCompressor(srcBuf, 0, 0, w, 0, h, pf);
+    tjc.setSubsamp(subsamp);
+
+    /* Execute once to preload cache */
+    tjc.encodeYUV(dstBuf, flags);
+
+    /* Benchmark */
+    for (i = 0, start = getTime();
+         (elapsed = getTime() - start) < benchTime; i++)
+      tjc.encodeYUV(dstBuf, flags);
+
+    if (quiet == 1)
+      System.out.format("%-4d  %-4d\t", w, h);
+    if (quiet != 0) {
+      System.out.format("%s%c%s%c",
+        sigFig((double)(w * h) / 1000000. * (double) i / elapsed, 4),
+        quiet == 2 ? '\n' : '\t',
+        sigFig((double)(w * h * ps) / (double)yuvSize, 4),
+        quiet == 2 ? '\n' : '\t');
+    } else {
+      System.out.format("\n%s size: %d x %d\n", "Image", w, h);
+      System.out.format("C--> Frame rate:           %f fps\n",
+                        (double)i / elapsed);
+      System.out.format("     Output image size:    %d bytes\n", yuvSize);
+      System.out.format("     Compression ratio:    %f:1\n",
+                        (double)(w * h * ps) / (double)yuvSize);
+      System.out.format("     Source throughput:    %f Megapixels/sec\n",
+                        (double)(w * h) / 1000000. * (double)i / elapsed);
+      System.out.format("     Output bit stream:    %f Megabits/sec\n",
+                        (double)yuvSize * 8. / 1000000. * (double)i / elapsed);
+    }
+    String tempStr = fileName + "_" + subName[subsamp] + ".yuv";
+    FileOutputStream fos = new FileOutputStream(tempStr);
+    fos.write(dstBuf, 0, yuvSize);
+    fos.close();
+    if (quiet == 0)
+      System.out.println("Reference image written to " + tempStr);
+  }
+
+
+  static void doTest(byte[] srcBuf, int w, int h, int subsamp, int jpegQual,
+                     String fileName) throws Exception {
+    TJCompressor tjc;
+    byte[] tmpBuf;
+    byte[][] jpegBuf;
+    int[] jpegSize;
+    double start, elapsed;
+    int totalJpegSize = 0, tilew, tileh, i;
+    int ps = TJ.getPixelSize(pf), ntilesw = 1, ntilesh = 1, pitch = w * ps;
+
+    if (yuv == YUVENCODE) {
+      doTestYUV(srcBuf, w, h, subsamp, fileName);
+      return;
+    }
+
+    tmpBuf = new byte[pitch * h];
+
+    if (quiet == 0)
+      System.out.format(">>>>>  %s (%s) <--> JPEG %s Q%d  <<<<<\n",
+        pixFormatStr[pf],
+        (flags & TJ.FLAG_BOTTOMUP) != 0 ? "Bottom-up" : "Top-down",
+        subNameLong[subsamp], jpegQual);
+
+    tjc = new TJCompressor();
+
+    for (tilew = doTile ? 8 : w, tileh = doTile ? 8 : h; ;
+         tilew *= 2, tileh *= 2) {
+      if (tilew > w)
+        tilew = w;
+      if (tileh > h)
+        tileh = h;
+      ntilesw = (w + tilew - 1) / tilew;
+      ntilesh = (h + tileh - 1) / tileh;
+
+      jpegBuf = new byte[ntilesw * ntilesh][TJ.bufSize(tilew, tileh, subsamp)];
+      jpegSize = new int[ntilesw * ntilesh];
+
+      /* Compression test */
+      if (quiet == 1)
+        System.out.format("%s\t%s\t%s\t%d\t", pixFormatStr[pf],
+                          (flags & TJ.FLAG_BOTTOMUP) != 0 ? "BU" : "TD",
+                          subNameLong[subsamp], jpegQual);
+      for (i = 0; i < h; i++)
+        System.arraycopy(srcBuf, w * ps * i, tmpBuf, pitch * i, w * ps);
+      tjc.setSourceImage(srcBuf, 0, 0, tilew, pitch, tileh, pf);
+      tjc.setJPEGQuality(jpegQual);
+      tjc.setSubsamp(subsamp);
+
+      /* Execute once to preload cache */
+      tjc.compress(jpegBuf[0], flags);
+
+      /* Benchmark */
+      for (i = 0, start = getTime();
+           (elapsed = getTime() - start) < benchTime; i++) {
+        int tile = 0;
+        totalJpegSize = 0;
+        for (int y = 0; y < h; y += tileh) {
+          for (int x = 0; x < w; x += tilew, tile++) {
+            int width = Math.min(tilew, w - x);
+            int height = Math.min(tileh, h - y);
+            tjc.setSourceImage(srcBuf, x, y, width, pitch, height, pf);
+            tjc.compress(jpegBuf[tile], flags);
+            jpegSize[tile] = tjc.getCompressedSize();
+            totalJpegSize += jpegSize[tile];
+          }
+        }
+      }
+
+      if (quiet == 1)
+        System.out.format("%-4d  %-4d\t", tilew, tileh);
+      if (quiet != 0) {
+        System.out.format("%s%c%s%c",
+          sigFig((double)(w * h) / 1000000. * (double) i / elapsed, 4),
+          quiet == 2 ? '\n' : '\t',
+          sigFig((double)(w * h * ps) / (double)totalJpegSize, 4),
+          quiet == 2 ? '\n' : '\t');
+      } else {
+        System.out.format("\n%s size: %d x %d\n", doTile ? "Tile" : "Image",
+                          tilew, tileh);
+        System.out.format("C--> Frame rate:           %f fps\n",
+                          (double)i / elapsed);
+        System.out.format("     Output image size:    %d bytes\n",
+                          totalJpegSize);
+        System.out.format("     Compression ratio:    %f:1\n",
+                          (double)(w * h * ps) / (double)totalJpegSize);
+        System.out.format("     Source throughput:    %f Megapixels/sec\n",
+                          (double)(w * h) / 1000000. * (double)i / elapsed);
+        System.out.format("     Output bit stream:    %f Megabits/sec\n",
+          (double)totalJpegSize * 8. / 1000000. * (double)i / elapsed);
+      }
+      if (tilew == w && tileh == h) {
+        String tempStr = fileName + "_" + subName[subsamp] + "_" + "Q" +
+                         jpegQual + ".jpg";
+        FileOutputStream fos = new FileOutputStream(tempStr);
+        fos.write(jpegBuf[0], 0, jpegSize[0]);
+        fos.close();
+        if (quiet == 0)
+          System.out.println("Reference image written to " + tempStr);
+      }
+
+      /* Decompression test */
+      decompTest(srcBuf, jpegBuf, jpegSize, tmpBuf, w, h, subsamp, jpegQual,
+                 fileName, tilew, tileh);
+
+      if (tilew == w && tileh == h) break;
+    }
+  }
+
+
+  static void doDecompTest(String fileName) throws Exception {
+    TJTransformer tjt;
+    byte[][] jpegBuf;
+    byte[] srcBuf;
+    int[] jpegSize;
+    int totalJpegSize;
+    int w = 0, h = 0, subsamp = -1, _w, _h, _tilew, _tileh,
+      _ntilesw, _ntilesh, _subsamp, x, y;
+    int ntilesw = 1, ntilesh = 1;
+    double start, elapsed;
+    int ps = TJ.getPixelSize(pf), tile;
+
+    FileInputStream fis = new FileInputStream(fileName);
+    int srcSize = (int)fis.getChannel().size();
+    srcBuf = new byte[srcSize];
+    fis.read(srcBuf, 0, srcSize);
+    fis.close();
+
+    int index = fileName.indexOf('.');
+    if (index >= 0)
+      fileName = new String(fileName.substring(0, index));
+
+    tjt = new TJTransformer();
+
+    tjt.setJPEGImage(srcBuf, srcSize);
+    w = tjt.getWidth();
+    h = tjt.getHeight();
+    subsamp = tjt.getSubsamp();
+
+    if (quiet == 1) {
+      System.out.println("All performance values in Mpixels/sec\n");
+      System.out.format("Bitmap\tBitmap\tJPEG\t%s %s \tXform\tComp\tDecomp\n",
+                        (doTile ? "Tile " : "Image"),
+                        (doTile ? "Tile " : "Image"));
+      System.out.println("Format\tOrder\tSubsamp\tWidth Height\tPerf \tRatio\tPerf\n");
+    } else if (quiet == 0) {
+      System.out.format(">>>>>  JPEG %s --> %s (%s)  <<<<<\n",
+        subNameLong[subsamp], pixFormatStr[pf],
+        (flags & TJ.FLAG_BOTTOMUP) != 0 ? "Bottom-up" : "Top-down");
+    }
+
+    for (int tilew = doTile ? 16 : w, tileh = doTile ? 16 : h; ;
+         tilew *= 2, tileh *= 2) {
+      if (tilew > w)
+        tilew = w;
+      if (tileh > h)
+        tileh = h;
+      ntilesw = (w + tilew - 1) / tilew;
+      ntilesh = (h + tileh - 1) / tileh;
+
+      _w = w;  _h = h;  _tilew = tilew;  _tileh = tileh;
+      if (quiet == 0) {
+        System.out.format("\n%s size: %d x %d", (doTile ? "Tile" : "Image"),
+                          _tilew, _tileh);
+        if (sf.getNum() != 1 || sf.getDenom() != 1)
+          System.out.format(" --> %d x %d", sf.getScaled(_w),
+                            sf.getScaled(_h));
+        System.out.println("");
+      } else if (quiet == 1) {
+        System.out.format("%s\t%s\t%s\t", pixFormatStr[pf],
+                          (flags & TJ.FLAG_BOTTOMUP) != 0 ? "BU" : "TD",
+                          subNameLong[subsamp]);
+        System.out.format("%-4d  %-4d\t", tilew, tileh);
+      }
+
+      _subsamp = subsamp;
+      if (doTile || xformOp != TJTransform.OP_NONE || xformOpt != 0) {
+        if (xformOp == TJTransform.OP_TRANSPOSE ||
+            xformOp == TJTransform.OP_TRANSVERSE ||
+            xformOp == TJTransform.OP_ROT90 ||
+            xformOp == TJTransform.OP_ROT270) {
+          _w = h;  _h = w;  _tilew = tileh;  _tileh = tilew;
+        }
+
+        if ((xformOpt & TJTransform.OPT_GRAY) != 0)
+          _subsamp = TJ.SAMP_GRAY;
+        if (xformOp == TJTransform.OP_HFLIP ||
+            xformOp == TJTransform.OP_ROT180)
+          _w = _w - (_w % TJ.getMCUWidth(_subsamp));
+        if (xformOp == TJTransform.OP_VFLIP ||
+            xformOp == TJTransform.OP_ROT180)
+          _h = _h - (_h % TJ.getMCUHeight(_subsamp));
+        if (xformOp == TJTransform.OP_TRANSVERSE ||
+            xformOp == TJTransform.OP_ROT90)
+          _w = _w - (_w % TJ.getMCUHeight(_subsamp));
+        if (xformOp == TJTransform.OP_TRANSVERSE ||
+            xformOp == TJTransform.OP_ROT270)
+          _h = _h - (_h % TJ.getMCUWidth(_subsamp));
+        _ntilesw = (_w + _tilew - 1) / _tilew;
+        _ntilesh = (_h + _tileh - 1) / _tileh;
+
+        TJTransform[] t = new TJTransform[_ntilesw * _ntilesh];
+        jpegBuf = new byte[_ntilesw * _ntilesh][TJ.bufSize(_tilew, _tileh, subsamp)];
+
+        for (y = 0, tile = 0; y < _h; y += _tileh) {
+          for (x = 0; x < _w; x += _tilew, tile++) {
+            t[tile] = new TJTransform();
+            t[tile].width = Math.min(_tilew, _w - x);
+            t[tile].height = Math.min(_tileh, _h - y);
+            t[tile].x = x;
+            t[tile].y = y;
+            t[tile].op = xformOp;
+            t[tile].options = xformOpt | TJTransform.OPT_TRIM;
+            if ((t[tile].options & TJTransform.OPT_NOOUTPUT) != 0 &&
+                jpegBuf[tile] != null)
+              jpegBuf[tile] = null;
+          }
+        }
+
+        start = getTime();
+        tjt.transform(jpegBuf, t, flags);
+        jpegSize = tjt.getTransformedSizes();
+        elapsed = getTime() - start;
+
+        t = null;
+
+        for (tile = 0, totalJpegSize = 0; tile < _ntilesw * _ntilesh; tile++)
+          totalJpegSize += jpegSize[tile];
+
+        if (quiet != 0) {
+          System.out.format("%s%c%s%c",
+            sigFig((double)(w * h) / 1000000. / elapsed, 4),
+            quiet == 2 ? '\n' : '\t',
+            sigFig((double)(w * h * ps) / (double)totalJpegSize, 4),
+            quiet == 2 ? '\n' : '\t');
+        } else if (quiet == 0) {
+          System.out.format("X--> Frame rate:           %f fps\n",
+                            1.0 / elapsed);
+          System.out.format("     Output image size:    %d bytes\n",
+                            totalJpegSize);
+          System.out.format("     Compression ratio:    %f:1\n",
+                            (double)(w * h * ps) / (double)totalJpegSize);
+          System.out.format("     Source throughput:    %f Megapixels/sec\n",
+                            (double)(w * h) / 1000000. / elapsed);
+          System.out.format("     Output bit stream:    %f Megabits/sec\n",
+                            (double)totalJpegSize * 8. / 1000000. / elapsed);
+        }
+      } else {
+        if (quiet == 1)
+          System.out.print("N/A\tN/A\t");
+        jpegBuf = new byte[1][TJ.bufSize(_tilew, _tileh, subsamp)];
+        jpegSize = new int[1];
+        jpegSize[0] = srcSize;
+        System.arraycopy(srcBuf, 0, jpegBuf[0], 0, srcSize);
+      }
+
+      if (w == tilew)
+        _tilew = _w;
+      if (h == tileh)
+        _tileh = _h;
+      if ((xformOpt & TJTransform.OPT_NOOUTPUT) == 0)
+        decompTest(null, jpegBuf, jpegSize, null, _w, _h, _subsamp, 0,
+                   fileName, _tilew, _tileh);
+      else if (quiet == 1)
+        System.out.println("N/A");
+
+      jpegBuf = null;
+      jpegSize = null;
+
+      if (tilew == w && tileh == h) break;
+    }
+  }
+
+
+  static void usage() throws Exception {
+    int i;
+    TJScalingFactor[] scalingFactors = TJ.getScalingFactors();
+    int nsf = scalingFactors.length;
+    String className = new TJBench().getClass().getName();
+
+    System.out.println("\nUSAGE: java " + className);
+    System.out.println("       <Inputfile (BMP)> <Quality> [options]\n");
+    System.out.println("       java " + className);
+    System.out.println("       <Inputfile (JPG)> [options]\n");
+    System.out.println("Options:\n");
+    System.out.println("-alloc = Dynamically allocate JPEG image buffers");
+    System.out.println("-bottomup = Test bottom-up compression/decompression");
+    System.out.println("-tile = Test performance of the codec when the image is encoded as separate");
+    System.out.println("     tiles of varying sizes.");
+    System.out.println("-forcemmx, -forcesse, -forcesse2, -forcesse3 =");
+    System.out.println("     Force MMX, SSE, SSE2, or SSE3 code paths in the underlying codec");
+    System.out.println("-rgb, -bgr, -rgbx, -bgrx, -xbgr, -xrgb =");
+    System.out.println("     Test the specified color conversion path in the codec (default: BGR)");
+    System.out.println("-fastupsample = Use the fastest chrominance upsampling algorithm available in");
+    System.out.println("     the underlying codec");
+    System.out.println("-fastdct = Use the fastest DCT/IDCT algorithms available in the underlying");
+    System.out.println("     codec");
+    System.out.println("-accuratedct = Use the most accurate DCT/IDCT algorithms available in the");
+    System.out.println("     underlying codec");
+    System.out.println("-subsamp <s> = When testing JPEG compression, this option specifies the level");
+    System.out.println("     of chrominance subsampling to use (<s> = 444, 422, 440, 420, or GRAY).");
+    System.out.println("     The default is to test Grayscale, 4:2:0, 4:2:2, and 4:4:4 in sequence.");
+    System.out.println("-quiet = Output results in tabular rather than verbose format");
+    System.out.println("-yuvencode = Encode RGB input as planar YUV rather than compressing as JPEG");
+    System.out.println("-yuvdecode = Decode JPEG image to planar YUV rather than RGB");
+    System.out.println("-scale M/N = scale down the width/height of the decompressed JPEG image by a");
+    System.out.print  ("     factor of M/N (M/N = ");
+    for (i = 0; i < nsf; i++) {
+      System.out.format("%d/%d", scalingFactors[i].getNum(),
+                        scalingFactors[i].getDenom());
+      if (nsf == 2 && i != nsf - 1)
+        System.out.print(" or ");
+      else if (nsf > 2) {
+        if (i != nsf - 1)
+          System.out.print(", ");
+        if (i == nsf - 2)
+          System.out.print("or ");
+      }
+      if (i % 8 == 0 && i != 0)
+        System.out.print("\n     ");
+    }
+    System.out.println(")");
+    System.out.println("-hflip, -vflip, -transpose, -transverse, -rot90, -rot180, -rot270 =");
+    System.out.println("     Perform the corresponding lossless transform prior to");
+    System.out.println("     decompression (these options are mutually exclusive)");
+    System.out.println("-grayscale = Perform lossless grayscale conversion prior to decompression");
+    System.out.println("     test (can be combined with the other transforms above)");
+    System.out.println("-benchtime <t> = Run each benchmark for at least <t> seconds (default = 5.0)\n");
+    System.out.println("NOTE:  If the quality is specified as a range (e.g. 90-100), a separate");
+    System.out.println("test will be performed for all quality values in the range.\n");
+    System.exit(1);
+  }
+
+
+  public static void main(String[] argv) {
+    byte[] srcBuf = null;  int w = 0, h = 0;
+    int minQual = -1, maxQual = -1;
+    int minArg = 1;  int retval = 0;
+    int subsamp = -1;
+
+    try {
+
+      if (argv.length < minArg)
+        usage();
+
+      String tempStr = argv[0].toLowerCase();
+      if (tempStr.endsWith(".jpg") || tempStr.endsWith(".jpeg"))
+        decompOnly = true;
+
+      System.out.println("");
+
+      if (argv.length > minArg) {
+        for (int i = minArg; i < argv.length; i++) {
+          if (argv[i].equalsIgnoreCase("-yuvencode")) {
+            System.out.println("Testing YUV planar encoding\n");
+            yuv = YUVENCODE;  maxQual = minQual = 100;
+          }
+          if (argv[i].equalsIgnoreCase("-yuvdecode")) {
+            System.out.println("Testing YUV planar decoding\n");
+            yuv = YUVDECODE;
+          }
+        }
+      }
+
+      if (!decompOnly && yuv != YUVENCODE) {
+        minArg = 2;
+        if (argv.length < minArg)
+          usage();
+        try {
+          minQual = Integer.parseInt(argv[1]);
+        } catch (NumberFormatException e) {}
+        if (minQual < 1 || minQual > 100)
+          throw new Exception("Quality must be between 1 and 100.");
+        int dashIndex = argv[1].indexOf('-');
+        if (dashIndex > 0 && argv[1].length() > dashIndex + 1) {
+          try {
+            maxQual = Integer.parseInt(argv[1].substring(dashIndex + 1));
+          } catch (NumberFormatException e) {}
+        }
+        if (maxQual < 1 || maxQual > 100)
+          maxQual = minQual;
+      }
+
+      if (argv.length > minArg) {
+        for (int i = minArg; i < argv.length; i++) {
+          if (argv[i].equalsIgnoreCase("-tile")) {
+            doTile = true;  xformOpt |= TJTransform.OPT_CROP;
+          }
+          if (argv[i].equalsIgnoreCase("-forcesse3")) {
+            System.out.println("Forcing SSE3 code\n");
+            flags |= TJ.FLAG_FORCESSE3;
+          }
+          if (argv[i].equalsIgnoreCase("-forcesse2")) {
+            System.out.println("Forcing SSE2 code\n");
+            flags |= TJ.FLAG_FORCESSE2;
+          }
+          if (argv[i].equalsIgnoreCase("-forcesse")) {
+            System.out.println("Forcing SSE code\n");
+            flags |= TJ.FLAG_FORCESSE;
+          }
+          if (argv[i].equalsIgnoreCase("-forcemmx")) {
+            System.out.println("Forcing MMX code\n");
+            flags |= TJ.FLAG_FORCEMMX;
+          }
+          if (argv[i].equalsIgnoreCase("-fastupsample")) {
+            System.out.println("Using fast upsampling code\n");
+            flags |= TJ.FLAG_FASTUPSAMPLE;
+          }
+          if (argv[i].equalsIgnoreCase("-fastdct")) {
+            System.out.println("Using fastest DCT/IDCT algorithm\n");
+            flags |= TJ.FLAG_FASTDCT;
+          }
+          if (argv[i].equalsIgnoreCase("-accuratedct")) {
+            System.out.println("Using most accurate DCT/IDCT algorithm\n");
+            flags |= TJ.FLAG_ACCURATEDCT;
+          }
+          if (argv[i].equalsIgnoreCase("-rgb"))
+            pf = TJ.PF_RGB;
+          if (argv[i].equalsIgnoreCase("-rgbx"))
+            pf = TJ.PF_RGBX;
+          if (argv[i].equalsIgnoreCase("-bgr"))
+            pf = TJ.PF_BGR;
+          if (argv[i].equalsIgnoreCase("-bgrx"))
+            pf = TJ.PF_BGRX;
+          if (argv[i].equalsIgnoreCase("-xbgr"))
+            pf = TJ.PF_XBGR;
+          if (argv[i].equalsIgnoreCase("-xrgb"))
+            pf = TJ.PF_XRGB;
+          if (argv[i].equalsIgnoreCase("-bottomup"))
+            flags |= TJ.FLAG_BOTTOMUP;
+          if (argv[i].equalsIgnoreCase("-quiet"))
+            quiet = 1;
+          if (argv[i].equalsIgnoreCase("-qq"))
+            quiet = 2;
+          if (argv[i].equalsIgnoreCase("-scale") && i < argv.length - 1) {
+            int temp1 = 0, temp2 = 0;
+            boolean match = false, scanned = true;
+            Scanner scanner = new Scanner(argv[++i]).useDelimiter("/");
+            try {
+              temp1 = scanner.nextInt();
+              temp2 = scanner.nextInt();
+            } catch(Exception e) {}
+            if (temp2 <= 0) temp2 = 1;
+            if (temp1 > 0) {
+              TJScalingFactor[] scalingFactors = TJ.getScalingFactors();
+              for (int j = 0; j < scalingFactors.length; j++) {
+                if ((double)temp1 / (double)temp2 ==
+                    (double)scalingFactors[j].getNum() /
+                    (double)scalingFactors[j].getDenom()) {
+                  sf = scalingFactors[j];
+                  match = true;   break;
+                }
+              }
+              if (!match) usage();
+            } else
+              usage();
+          }
+          if (argv[i].equalsIgnoreCase("-hflip"))
+            xformOp = TJTransform.OP_HFLIP;
+          if (argv[i].equalsIgnoreCase("-vflip"))
+            xformOp = TJTransform.OP_VFLIP;
+          if (argv[i].equalsIgnoreCase("-transpose"))
+            xformOp = TJTransform.OP_TRANSPOSE;
+          if (argv[i].equalsIgnoreCase("-transverse"))
+            xformOp = TJTransform.OP_TRANSVERSE;
+          if (argv[i].equalsIgnoreCase("-rot90"))
+            xformOp = TJTransform.OP_ROT90;
+          if (argv[i].equalsIgnoreCase("-rot180"))
+            xformOp = TJTransform.OP_ROT180;
+          if (argv[i].equalsIgnoreCase("-rot270"))
+            xformOp = TJTransform.OP_ROT270;
+          if (argv[i].equalsIgnoreCase("-grayscale"))
+            xformOpt |= TJTransform.OPT_GRAY;
+          if (argv[i].equalsIgnoreCase("-nooutput"))
+            xformOpt |= TJTransform.OPT_NOOUTPUT;
+          if (argv[i].equalsIgnoreCase("-benchtime") && i < argv.length - 1) {
+            double temp = -1;
+            try {
+              temp = Double.parseDouble(argv[++i]);
+            } catch (NumberFormatException e) {}
+            if (temp > 0.0)
+              benchTime = temp;
+            else
+              usage();
+          }
+          if (argv[i].equalsIgnoreCase("-subsamp") && i < argv.length - 1) {
+            i++;
+            if (argv[i].toUpperCase().startsWith("G"))
+              subsamp = TJ.SAMP_GRAY;
+            else if (argv[i].equals("444"))
+              subsamp = TJ.SAMP_444;
+            else if (argv[i].equals("422"))
+              subsamp = TJ.SAMP_422;
+            else if (argv[i].equals("440"))
+              subsamp = TJ.SAMP_440;
+            else if (argv[i].equals("420"))
+              subsamp = TJ.SAMP_420;
+          }
+          if (argv[i].equalsIgnoreCase("-?"))
+            usage();
+        }
+      }
+
+      if (sf == null)
+        sf = new TJScalingFactor(1, 1);
+
+      if ((sf.getNum() != 1 || sf.getDenom() != 1) && doTile) {
+        System.out.println("Disabling tiled compression/decompression tests, because those tests do not");
+        System.out.println("work when scaled decompression is enabled.");
+        doTile = false;
+      }
+
+      if (yuv != 0 && doTile) {
+        System.out.println("Disabling tiled compression/decompression tests, because those tests do not");
+        System.out.println("work when YUV encoding or decoding is enabled.\n");
+        doTile = false;
+      }
+
+      if (!decompOnly) {
+        int[] width = new int[1], height = new int[1];
+        srcBuf = loadImage(argv[0], width, height, pf);
+        w = width[0];  h = height[0];
+        int index = -1;
+        if ((index = argv[0].indexOf('.')) >= 0)
+          argv[0] = argv[0].substring(0, index);
+      }
+
+      if (quiet == 1 && !decompOnly) {
+        System.out.println("All performance values in Mpixels/sec\n");
+        System.out.format("Bitmap\tBitmap\tJPEG\tJPEG\t%s %s \tComp\tComp\tDecomp\n",
+          (doTile ? "Tile " : "Image"), (doTile ? "Tile " : "Image"));
+        System.out.println("Format\tOrder\tSubsamp\tQual\tWidth Height\tPerf \tRatio\tPerf\n");
+      }
+
+      if (decompOnly) {
+        doDecompTest(argv[0]);
+        System.out.println("");
+        System.exit(retval);
+      }
+
+      System.gc();
+      if (subsamp >= 0 && subsamp < TJ.NUMSAMP) {
+        for (int i = maxQual; i >= minQual; i--)
+          doTest(srcBuf, w, h, subsamp, i, argv[0]);
+        System.out.println("");
+      } else {
+        for (int i = maxQual; i >= minQual; i--)
+          doTest(srcBuf, w, h, TJ.SAMP_GRAY, i, argv[0]);
+        System.out.println("");
+        System.gc();
+        for (int i = maxQual; i >= minQual; i--)
+          doTest(srcBuf, w, h, TJ.SAMP_420, i, argv[0]);
+        System.out.println("");
+        System.gc();
+        for (int i = maxQual; i >= minQual; i--)
+          doTest(srcBuf, w, h, TJ.SAMP_422, i, argv[0]);
+        System.out.println("");
+        System.gc();
+        for (int i = maxQual; i >= minQual; i--)
+          doTest(srcBuf, w, h, TJ.SAMP_444, i, argv[0]);
+        System.out.println("");
+      }
+
+    } catch (Exception e) {
+      System.out.println("ERROR: " + e.getMessage());
+      e.printStackTrace();
+      retval = -1;
+    }
+
+    System.exit(retval);
+  }
+
+}
index e726892..1ae350a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2011-2012 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2011-2012, 2014 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -51,12 +51,15 @@ public class TJExample implements TJCustomFilter {
     System.out.println("Options:\n");
     System.out.println("-scale M/N = if the input image is a JPEG file, scale the width/height of the");
     System.out.print("             output image by a factor of M/N (M/N = ");
-    for(int i = 0; i < sf.length; i++) {
+    for (int i = 0; i < sf.length; i++) {
       System.out.print(sf[i].getNum() + "/" + sf[i].getDenom());
-      if(sf.length == 2 && i != sf.length - 1) System.out.print(" or ");
-      else if(sf.length > 2) {
-        if(i != sf.length - 1) System.out.print(", ");
-        if(i == sf.length - 2) System.out.print("or ");
+      if (sf.length == 2 && i != sf.length - 1)
+        System.out.print(" or ");
+      else if (sf.length > 2) {
+        if (i != sf.length - 1)
+          System.out.print(", ");
+        if (i == sf.length - 2)
+          System.out.print("or ");
       }
     }
     System.out.println(")\n");
@@ -90,13 +93,14 @@ public class TJExample implements TJCustomFilter {
     System.exit(1);
   }
 
-  private final static String sampName[] = {
+  private static final String[] sampName = {
     "4:4:4", "4:2:2", "4:2:0", "Grayscale", "4:4:0"
   };
 
-  public static void main(String argv[]) {
+  public static void main(String[] argv) {
 
-    BufferedImage img = null;  byte[] bmpBuf = null;
+    BufferedImage img = null;
+    byte[] bmpBuf = null;
     TJTransform xform = new TJTransform();
     int flags = 0;
 
@@ -104,7 +108,7 @@ public class TJExample implements TJCustomFilter {
 
       sf = TJ.getScalingFactors();
 
-      if(argv.length < 2) {
+      if (argv.length < 2) {
         usage();
       }
 
@@ -113,119 +117,134 @@ public class TJExample implements TJCustomFilter {
       int outSubsamp = -1, outQual = 95;
       boolean display = false;
 
-      if(argv.length > 1) {
-        for(int i = 1; i < argv.length; i++) {
-          if(argv[i].length() < 2) continue;
-          if(argv[i].length() > 2
-            && argv[i].substring(0, 3).equalsIgnoreCase("-sc")) {
+      if (argv.length > 1) {
+        for (int i = 1; i < argv.length; i++) {
+          if (argv[i].length() < 2)
+            continue;
+          if (argv[i].length() > 2 &&
+              argv[i].substring(0, 3).equalsIgnoreCase("-sc")) {
             int match = 0;
-            if(i < argv.length - 1) {
+            if (i < argv.length - 1) {
               String[] scaleArg = argv[++i].split("/");
-              if(scaleArg.length == 2) {
+              if (scaleArg.length == 2) {
                 TJScalingFactor tempsf =
                   new TJScalingFactor(Integer.parseInt(scaleArg[0]),
-                    Integer.parseInt(scaleArg[1]));
-                for(int j = 0; j < sf.length; j++) {
-                  if(tempsf.equals(sf[j])) {
+                                      Integer.parseInt(scaleArg[1]));
+                for (int j = 0; j < sf.length; j++) {
+                  if (tempsf.equals(sf[j])) {
                     scaleFactor = sf[j];
-                    match = 1;  break;
+                    match = 1;
+                    break;
                   }
                 }
               }
             }
-            if(match != 1) usage();
+            if (match != 1) usage();
           }
-          if(argv[i].equalsIgnoreCase("-h") || argv[i].equalsIgnoreCase("-?"))
+          if (argv[i].equalsIgnoreCase("-h") || argv[i].equalsIgnoreCase("-?"))
             usage();
-          if(argv[i].length() > 2
-            && argv[i].substring(0, 3).equalsIgnoreCase("-sa")) {
-            if(i < argv.length - 1) {
+          if (argv[i].length() > 2 &&
+              argv[i].substring(0, 3).equalsIgnoreCase("-sa")) {
+            if (i < argv.length - 1) {
               i++;
-              if(argv[i].substring(0, 1).equalsIgnoreCase("g"))
+              if (argv[i].substring(0, 1).equalsIgnoreCase("g"))
                 outSubsamp = TJ.SAMP_GRAY;
-              else if(argv[i].equals("444")) outSubsamp = TJ.SAMP_444;
-              else if(argv[i].equals("422")) outSubsamp = TJ.SAMP_422;
-              else if(argv[i].equals("420")) outSubsamp = TJ.SAMP_420;
-              else usage();
-            }
-            else usage();
+              else if (argv[i].equals("444"))
+                outSubsamp = TJ.SAMP_444;
+              else if (argv[i].equals("422"))
+                outSubsamp = TJ.SAMP_422;
+              else if (argv[i].equals("420"))
+                outSubsamp = TJ.SAMP_420;
+              else
+                usage();
+            } else
+              usage();
           }
-          if(argv[i].substring(0, 2).equalsIgnoreCase("-q")) {
-            if(i < argv.length - 1) {
+          if (argv[i].substring(0, 2).equalsIgnoreCase("-q")) {
+            if (i < argv.length - 1) {
               int qual = Integer.parseInt(argv[++i]);
-              if(qual >= 1 && qual <= 100) outQual = qual;
-              else usage();
-            }
-            else usage();
+              if (qual >= 1 && qual <= 100)
+                outQual = qual;
+              else
+                usage();
+            } else
+              usage();
           }
-          if(argv[i].substring(0, 2).equalsIgnoreCase("-g"))
+          if (argv[i].substring(0, 2).equalsIgnoreCase("-g"))
             xform.options |= TJTransform.OPT_GRAY;
-          if(argv[i].equalsIgnoreCase("-hflip"))
+          if (argv[i].equalsIgnoreCase("-hflip"))
             xform.op = TJTransform.OP_HFLIP;
-          if(argv[i].equalsIgnoreCase("-vflip"))
+          if (argv[i].equalsIgnoreCase("-vflip"))
             xform.op = TJTransform.OP_VFLIP;
-          if(argv[i].equalsIgnoreCase("-transpose"))
+          if (argv[i].equalsIgnoreCase("-transpose"))
             xform.op = TJTransform.OP_TRANSPOSE;
-          if(argv[i].equalsIgnoreCase("-transverse"))
+          if (argv[i].equalsIgnoreCase("-transverse"))
             xform.op = TJTransform.OP_TRANSVERSE;
-          if(argv[i].equalsIgnoreCase("-rot90"))
+          if (argv[i].equalsIgnoreCase("-rot90"))
             xform.op = TJTransform.OP_ROT90;
-          if(argv[i].equalsIgnoreCase("-rot180"))
+          if (argv[i].equalsIgnoreCase("-rot180"))
             xform.op = TJTransform.OP_ROT180;
-          if(argv[i].equalsIgnoreCase("-rot270"))
+          if (argv[i].equalsIgnoreCase("-rot270"))
             xform.op = TJTransform.OP_ROT270;
-          if(argv[i].equalsIgnoreCase("-custom"))
+          if (argv[i].equalsIgnoreCase("-custom"))
             xform.cf = new TJExample();
-          else if(argv[i].length() > 2
-            && argv[i].substring(0, 2).equalsIgnoreCase("-c")) {
-            if(i >= argv.length - 1) usage();
+          else if (argv[i].length() > 2 &&
+                   argv[i].substring(0, 2).equalsIgnoreCase("-c")) {
+            if (i >= argv.length - 1)
+              usage();
             String[] cropArg = argv[++i].split(",");
-            if(cropArg.length != 3) usage();
+            if (cropArg.length != 3)
+              usage();
             String[] dimArg = cropArg[2].split("[xX]");
-            if(dimArg.length != 2) usage();
+            if (dimArg.length != 2)
+              usage();
             int tempx = Integer.parseInt(cropArg[0]);
             int tempy = Integer.parseInt(cropArg[1]);
             int tempw = Integer.parseInt(dimArg[0]);
             int temph = Integer.parseInt(dimArg[1]);
-            if(tempx < 0 || tempy < 0 || tempw < 0 || temph < 0) usage();
-            xform.x = tempx;  xform.y = tempy;
-            xform.width = tempw;  xform.height = temph;
+            if (tempx < 0 || tempy < 0 || tempw < 0 || temph < 0)
+              usage();
+            xform.x = tempx;
+            xform.y = tempy;
+            xform.width = tempw;
+            xform.height = temph;
             xform.options |= TJTransform.OPT_CROP;
           }
-          if(argv[i].substring(0, 2).equalsIgnoreCase("-d"))
+          if (argv[i].substring(0, 2).equalsIgnoreCase("-d"))
             display = true;
-          if(argv[i].equalsIgnoreCase("-fastupsample")) {
+          if (argv[i].equalsIgnoreCase("-fastupsample")) {
             System.out.println("Using fast upsampling code");
             flags |= TJ.FLAG_FASTUPSAMPLE;
           }
-          if(argv[i].equalsIgnoreCase("-fastdct")) {
+          if (argv[i].equalsIgnoreCase("-fastdct")) {
             System.out.println("Using fastest DCT/IDCT algorithm");
             flags |= TJ.FLAG_FASTDCT;
           }
-          if(argv[i].equalsIgnoreCase("-accuratedct")) {
+          if (argv[i].equalsIgnoreCase("-accuratedct")) {
             System.out.println("Using most accurate DCT/IDCT algorithm");
             flags |= TJ.FLAG_ACCURATEDCT;
           }
         }
       }
       String[] inFileTokens = argv[0].split("\\.");
-      if(inFileTokens.length > 1)
+      if (inFileTokens.length > 1)
         inFormat = inFileTokens[inFileTokens.length - 1];
       String[] outFileTokens;
-      if(display) outFormat = "bmp";
+      if (display)
+        outFormat = "bmp";
       else {
         outFileTokens = argv[1].split("\\.");
-        if(outFileTokens.length > 1)
+        if (outFileTokens.length > 1)
           outFormat = outFileTokens[outFileTokens.length - 1];
       }
 
       File file = new File(argv[0]);
       int width, height;
 
-      if(inFormat.equalsIgnoreCase("jpg")) {
+      if (inFormat.equalsIgnoreCase("jpg")) {
         FileInputStream fis = new FileInputStream(file);
         int inputSize = fis.available();
-        if(inputSize < 1) {
+        if (inputSize < 1) {
           System.out.println("Input file contains no data");
           System.exit(1);
         }
@@ -234,27 +253,28 @@ public class TJExample implements TJCustomFilter {
         fis.close();
 
         TJDecompressor tjd;
-        if(xform.op != TJTransform.OP_NONE || xform.options != 0
-          || xform.cf != null) {
+        if (xform.op != TJTransform.OP_NONE || xform.options != 0 ||
+            xform.cf != null) {
           TJTransformer tjt = new TJTransformer(inputBuf);
-          TJTransform t[] = new TJTransform[1];
+          TJTransform[] t = new TJTransform[1];
           t[0] = xform;
           t[0].options |= TJTransform.OPT_TRIM;
           TJDecompressor[] tjdx = tjt.transform(t, 0);
           tjd = tjdx[0];
-        }
-        else tjd = new TJDecompressor(inputBuf);
+        } else
+          tjd = new TJDecompressor(inputBuf);
 
         width = tjd.getWidth();
         height = tjd.getHeight();
         int inSubsamp = tjd.getSubsamp();
-        System.out.println("Source Image: " + width + " x " + height
-          + " pixels, " + sampName[inSubsamp] + " subsampling");
-        if(outSubsamp < 0) outSubsamp = inSubsamp;
+        System.out.println("Source Image: " + width + " x " + height +
+                           " pixels, " + sampName[inSubsamp] + " subsampling");
+        if (outSubsamp < 0)
+          outSubsamp = inSubsamp;
 
-        if(outFormat.equalsIgnoreCase("jpg")
-          && (xform.op != TJTransform.OP_NONE || xform.options != 0)
-          && scaleFactor.isOne()) {
+        if (outFormat.equalsIgnoreCase("jpg") &&
+            (xform.op != TJTransform.OP_NONE || xform.options != 0) &&
+            scaleFactor.isOne()) {
           file = new File(argv[1]);
           FileOutputStream fos = new FileOutputStream(file);
           fos.write(tjd.getJPEGBuf(), 0, tjd.getJPEGSize());
@@ -265,46 +285,48 @@ public class TJExample implements TJCustomFilter {
         width = scaleFactor.getScaled(width);
         height = scaleFactor.getScaled(height);
 
-        if(!outFormat.equalsIgnoreCase("jpg"))
+        if (!outFormat.equalsIgnoreCase("jpg"))
           img = tjd.decompress(width, height, BufferedImage.TYPE_INT_RGB,
                                flags);
-        else bmpBuf = tjd.decompress(width, 0, height, TJ.PF_BGRX, flags);
+        else
+          bmpBuf = tjd.decompress(width, 0, height, TJ.PF_BGRX, flags);
         tjd.close();
-      }
-      else {
+      } else {
         img = ImageIO.read(file);
+        if (img == null)
+          throw new Exception("Input image type not supported.");
         width = img.getWidth();
         height = img.getHeight();
-        if(outSubsamp < 0) {
-          if(img.getType() == BufferedImage.TYPE_BYTE_GRAY)
+        if (outSubsamp < 0) {
+          if (img.getType() == BufferedImage.TYPE_BYTE_GRAY)
             outSubsamp = TJ.SAMP_GRAY;
-          else outSubsamp = TJ.SAMP_444;
+          else
+            outSubsamp = TJ.SAMP_444;
         }
       }
       System.gc();
-      if(!display)
-        System.out.print("Dest. Image (" + outFormat + "):  " + width + " x "
-          + height + " pixels");
+      if (!display)
+        System.out.print("Dest. Image (" + outFormat + "):  " + width + " x " +
+                         height + " pixels");
 
-      if(display) {
+      if (display) {
         ImageIcon icon = new ImageIcon(img);
         JLabel label = new JLabel(icon, JLabel.CENTER);
         JOptionPane.showMessageDialog(null, label, "Output Image",
-          JOptionPane.PLAIN_MESSAGE);
-      }
-      else if(outFormat.equalsIgnoreCase("jpg")) {
-        System.out.println(", " + sampName[outSubsamp]
-          + " subsampling, quality = " + outQual);
+                                      JOptionPane.PLAIN_MESSAGE);
+      } else if (outFormat.equalsIgnoreCase("jpg")) {
+        System.out.println(", " + sampName[outSubsamp] +
+                           " subsampling, quality = " + outQual);
         TJCompressor tjc = new TJCompressor();
         int jpegSize;
         byte[] jpegBuf;
 
         tjc.setSubsamp(outSubsamp);
         tjc.setJPEGQuality(outQual);
-        if(img != null)
+        if (img != null)
           jpegBuf = tjc.compress(img, flags);
         else {
-          tjc.setSourceImage(bmpBuf, width, 0, height, TJ.PF_BGRX);
+          tjc.setSourceImage(bmpBuf, 0, 0, width, 0, height, TJ.PF_BGRX);
           jpegBuf = tjc.compress(flags);
         }
         jpegSize = tjc.getCompressedSize();
@@ -314,27 +336,26 @@ public class TJExample implements TJCustomFilter {
         FileOutputStream fos = new FileOutputStream(file);
         fos.write(jpegBuf, 0, jpegSize);
         fos.close();
-      }
-      else {
+      } else {
         System.out.print("\n");
         file = new File(argv[1]);
         ImageIO.write(img, outFormat, file);
       }
 
-    }
-    catch(Exception e) {
+    } catch(Exception e) {
       e.printStackTrace();
       System.exit(-1);
     }
   }
 
   public void customFilter(ShortBuffer coeffBuffer, Rectangle bufferRegion,
-    Rectangle planeRegion, int componentIndex, int transformIndex,
-    TJTransform transform) throws Exception {
-    for(int i=0; i<bufferRegion.width*bufferRegion.height; i++) {
-           coeffBuffer.put(i, (short)(-coeffBuffer.get(i)));
+                           Rectangle planeRegion, int componentIndex,
+                           int transformIndex, TJTransform transform)
+                           throws Exception {
+    for (int i = 0; i < bufferRegion.width * bufferRegion.height; i++) {
+      coeffBuffer.put(i, (short)(-coeffBuffer.get(i)));
     }
   }
 
-  static TJScalingFactor sf [] = null;
+  static TJScalingFactor[] sf = null;
 };
index b88b28e..6c7b29e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2011-2012 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2011-2012, 2014 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -50,48 +50,48 @@ public class TJUnitTest {
     System.exit(1);
   }
 
-  private final static String subNameLong[] = {
+  private static final String[] subNameLong = {
     "4:4:4", "4:2:2", "4:2:0", "GRAY", "4:4:0"
   };
-  private final static String subName[] = {
+  private static final String[] subName = {
     "444", "422", "420", "GRAY", "440"
   };
 
-  private final static String pixFormatStr[] = {
+  private static final String[] pixFormatStr = {
     "RGB", "BGR", "RGBX", "BGRX", "XBGR", "XRGB", "Grayscale",
     "RGBA", "BGRA", "ABGR", "ARGB"
   };
 
-  private final static int alphaOffset[] = {
+  private static final int[] alphaOffset = {
     -1, -1, -1, -1, -1, -1, -1, 3, 3, 0, 0
   };
 
-  private final static int _3byteFormats[] = {
+  private static final int[] _3byteFormats = {
     TJ.PF_RGB, TJ.PF_BGR
   };
-  private final static int _3byteFormatsBI[] = {
+  private static final int[] _3byteFormatsBI = {
     BufferedImage.TYPE_3BYTE_BGR
   };
-  private final static int _4byteFormats[] = {
+  private static final int[] _4byteFormats = {
     TJ.PF_RGBX, TJ.PF_BGRX, TJ.PF_XBGR, TJ.PF_XRGB
   };
-  private final static int _4byteFormatsBI[] = {
+  private static final int[] _4byteFormatsBI = {
     BufferedImage.TYPE_INT_BGR, BufferedImage.TYPE_INT_RGB,
     BufferedImage.TYPE_4BYTE_ABGR, BufferedImage.TYPE_4BYTE_ABGR_PRE,
     BufferedImage.TYPE_INT_ARGB, BufferedImage.TYPE_INT_ARGB_PRE
   };
-  private final static int onlyGray[] = {
+  private static final int[] onlyGray = {
     TJ.PF_GRAY
   };
-  private final static int onlyGrayBI[] = {
+  private static final int[] onlyGrayBI = {
     BufferedImage.TYPE_BYTE_GRAY
   };
-  private final static int onlyRGB[] = {
+  private static final int[] onlyRGB = {
     TJ.PF_RGB
   };
 
-  private final static int YUVENCODE = 1;
-  private final static int YUVDECODE = 2;
+  private static final int YUVENCODE = 1;
+  private static final int YUVDECODE = 2;
   private static int yuv = 0;
   private static boolean bi = false;
 
@@ -108,18 +108,18 @@ public class TJUnitTest {
       case BufferedImage.TYPE_BYTE_GRAY:
         return TJ.PF_GRAY;
       case BufferedImage.TYPE_INT_BGR:
-        if(byteOrder == ByteOrder.BIG_ENDIAN)
+        if (byteOrder == ByteOrder.BIG_ENDIAN)
           return TJ.PF_XBGR;
         else
           return TJ.PF_RGBX;
       case BufferedImage.TYPE_INT_RGB:
-        if(byteOrder == ByteOrder.BIG_ENDIAN)
+        if (byteOrder == ByteOrder.BIG_ENDIAN)
           return TJ.PF_XRGB;
         else
           return TJ.PF_BGRX;
       case BufferedImage.TYPE_INT_ARGB:
       case BufferedImage.TYPE_INT_ARGB_PRE:
-        if(byteOrder == ByteOrder.BIG_ENDIAN)
+        if (byteOrder == ByteOrder.BIG_ENDIAN)
           return TJ.PF_ARGB;
         else
           return TJ.PF_BGRA;
@@ -148,14 +148,13 @@ public class TJUnitTest {
     }
     return "Unknown";
   }
-  
 
   private static double getTime() {
     return (double)System.nanoTime() / 1.0e9;
   }
 
   private static void initBuf(byte[] buf, int w, int pitch, int h, int pf,
-    int flags) throws Exception {
+                              int flags) throws Exception {
     int roffset = TJ.getRedOffset(pf);
     int goffset = TJ.getGreenOffset(pf);
     int boffset = TJ.getBlueOffset(pf);
@@ -164,42 +163,46 @@ public class TJUnitTest {
     int index, row, col, halfway = 16;
 
     Arrays.fill(buf, (byte)0);
-    if(pf == TJ.PF_GRAY) {
-      for(row = 0; row < h; row++) {
-        for(col = 0; col < w; col++) {
-          if((flags & TJ.FLAG_BOTTOMUP) != 0)
+    if (pf == TJ.PF_GRAY) {
+      for (row = 0; row < h; row++) {
+        for (col = 0; col < w; col++) {
+          if ((flags & TJ.FLAG_BOTTOMUP) != 0)
             index = pitch * (h - row - 1) + col;
-          else index = pitch * row + col;
-          if(((row / 8) + (col / 8)) % 2 == 0)
+          else
+            index = pitch * row + col;
+          if (((row / 8) + (col / 8)) % 2 == 0)
             buf[index] = (row < halfway) ? (byte)255 : 0;
-          else buf[index] = (row < halfway) ? 76 : (byte)226;
+          else
+            buf[index] = (row < halfway) ? 76 : (byte)226;
         }
       }
       return;
     }
-    for(row = 0; row < h; row++) {
-      for(col = 0; col < w; col++) {
-        if((flags & TJ.FLAG_BOTTOMUP) != 0)
+    for (row = 0; row < h; row++) {
+      for (col = 0; col < w; col++) {
+        if ((flags & TJ.FLAG_BOTTOMUP) != 0)
           index = pitch * (h - row - 1) + col * ps;
-        else index = pitch * row + col * ps;
-        if(((row / 8) + (col / 8)) % 2 == 0) {
-          if(row < halfway) {
+        else
+          index = pitch * row + col * ps;
+        if (((row / 8) + (col / 8)) % 2 == 0) {
+          if (row < halfway) {
             buf[index + roffset] = (byte)255;
             buf[index + goffset] = (byte)255;
             buf[index + boffset] = (byte)255;
           }
-        }
-        else {
+        } else {
           buf[index + roffset] = (byte)255;
-          if(row >= halfway) buf[index + goffset] = (byte)255;
+          if (row >= halfway)
+            buf[index + goffset] = (byte)255;
         }
-        if (aoffset >= 0) buf[index + aoffset] = (byte)255;
+        if (aoffset >= 0)
+          buf[index + aoffset] = (byte)255;
       }
     }
   }
 
   private static void initIntBuf(int[] buf, int w, int pitch, int h, int pf,
-    int flags) throws Exception {
+                                 int flags) throws Exception {
     int rshift = TJ.getRedOffset(pf) * 8;
     int gshift = TJ.getGreenOffset(pf) * 8;
     int bshift = TJ.getBlueOffset(pf) * 8;
@@ -207,43 +210,44 @@ public class TJUnitTest {
     int index, row, col, halfway = 16;
 
     Arrays.fill(buf, 0);
-    for(row = 0; row < h; row++) {
-      for(col = 0; col < w; col++) {
-        if((flags & TJ.FLAG_BOTTOMUP) != 0)
+    for (row = 0; row < h; row++) {
+      for (col = 0; col < w; col++) {
+        if ((flags & TJ.FLAG_BOTTOMUP) != 0)
           index = pitch * (h - row - 1) + col;
-        else index = pitch * row + col;
-        if(((row / 8) + (col / 8)) % 2 == 0) {
-          if(row < halfway) {
+        else
+          index = pitch * row + col;
+        if (((row / 8) + (col / 8)) % 2 == 0) {
+          if (row < halfway) {
             buf[index] |= (255 << rshift);
             buf[index] |= (255 << gshift);
             buf[index] |= (255 << bshift);
           }
-        }
-        else {
+        } else {
           buf[index] |= (255 << rshift);
-          if(row >= halfway) buf[index] |= (255 << gshift);
+          if (row >= halfway)
+            buf[index] |= (255 << gshift);
         }
-        if (ashift >= 0) buf[index] |= (255 << ashift);
+        if (ashift >= 0)
+          buf[index] |= (255 << ashift);
       }
     }
   }
 
   private static void initImg(BufferedImage img, int pf, int flags)
-    throws Exception {
+                              throws Exception {
     WritableRaster wr = img.getRaster();
     int imgType = img.getType();
-    if(imgType == BufferedImage.TYPE_INT_RGB
-      || imgType == BufferedImage.TYPE_INT_BGR
-      || imgType == BufferedImage.TYPE_INT_ARGB
-      || imgType == BufferedImage.TYPE_INT_ARGB_PRE) {
+    if (imgType == BufferedImage.TYPE_INT_RGB ||
+        imgType == BufferedImage.TYPE_INT_BGR ||
+        imgType == BufferedImage.TYPE_INT_ARGB ||
+        imgType == BufferedImage.TYPE_INT_ARGB_PRE) {
       SinglePixelPackedSampleModel sm =
         (SinglePixelPackedSampleModel)img.getSampleModel();
       int pitch = sm.getScanlineStride();
       DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
       int[] buf = db.getData();
       initIntBuf(buf, img.getWidth(), pitch, img.getHeight(), pf, flags);
-    }
-    else {
+    } else {
       ComponentSampleModel sm = (ComponentSampleModel)img.getSampleModel();
       int pitch = sm.getScanlineStride();
       DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
@@ -253,34 +257,35 @@ public class TJUnitTest {
   }
 
   private static void checkVal(int row, int col, int v, String vname, int cv)
-    throws Exception {
+                               throws Exception {
     v = (v < 0) ? v + 256 : v;
-    if(v < cv - 1 || v > cv + 1) {
-      throw new Exception("\nComp. " + vname + " at " + row + "," + col
-        + " should be " + cv + ", not " + v + "\n");
+    if (v < cv - 1 || v > cv + 1) {
+      throw new Exception("Comp. " + vname + " at " + row + "," + col +
+                          " should be " + cv + ", not " + v);
     }
   }
 
   private static void checkVal0(int row, int col, int v, String vname)
-    throws Exception {
+                                throws Exception {
     v = (v < 0) ? v + 256 : v;
-    if(v > 1) {
-      throw new Exception("\nComp. " + vname + " at " + row + "," + col
-        + " should be 0, not " + v + "\n");
+    if (v > 1) {
+      throw new Exception("Comp. " + vname + " at " + row + "," + col +
+                          " should be 0, not " + v);
     }
   }
 
   private static void checkVal255(int row, int col, int v, String vname)
-    throws Exception {
+                                  throws Exception {
     v = (v < 0) ? v + 256 : v;
-    if(v < 254) {
-      throw new Exception("\nComp. " + vname + " at " + row + "," + col
-        + " should be 255, not " + v + "\n");
+    if (v < 254) {
+      throw new Exception("Comp. " + vname + " at " + row + "," + col +
+                          " should be 255, not " + v);
     }
   }
 
   private static int checkBuf(byte[] buf, int w, int pitch, int h, int pf,
-    int subsamp, TJScalingFactor sf, int flags) throws Exception {
+                              int subsamp, TJScalingFactor sf, int flags)
+                              throws Exception {
     int roffset = TJ.getRedOffset(pf);
     int goffset = TJ.getGreenOffset(pf);
     int boffset = TJ.getBlueOffset(pf);
@@ -291,68 +296,64 @@ public class TJUnitTest {
     int blockSize = 8 * sf.getNum() / sf.getDenom();
 
     try {
-      for(row = 0; row < halfway; row++) {
-        for(col = 0; col < w; col++) {
-          if((flags & TJ.FLAG_BOTTOMUP) != 0)
+      for (row = 0; row < halfway; row++) {
+        for (col = 0; col < w; col++) {
+          if ((flags & TJ.FLAG_BOTTOMUP) != 0)
             index = pitch * (h - row - 1) + col * ps;
-          else index = pitch * row + col * ps;
+          else
+            index = pitch * row + col * ps;
           byte r = buf[index + roffset];
           byte g = buf[index + goffset];
           byte b = buf[index + boffset];
           byte a = aoffset >= 0 ? buf[index + aoffset] : (byte)255;
-          if(((row / blockSize) + (col / blockSize)) % 2 == 0) {
-            if(row < halfway) {
+          if (((row / blockSize) + (col / blockSize)) % 2 == 0) {
+            if (row < halfway) {
               checkVal255(row, col, r, "R");
               checkVal255(row, col, g, "G");
               checkVal255(row, col, b, "B");
-            }
-            else {
+            } else {
               checkVal0(row, col, r, "R");
               checkVal0(row, col, g, "G");
               checkVal0(row, col, b, "B");
             }
-          }
-          else {
-            if(subsamp == TJ.SAMP_GRAY) {
-              if(row < halfway) {
+          } else {
+            if (subsamp == TJ.SAMP_GRAY) {
+              if (row < halfway) {
                 checkVal(row, col, r, "R", 76);
                 checkVal(row, col, g, "G", 76);
                 checkVal(row, col, b, "B", 76);
-              }
-              else {
+              } else {
                 checkVal(row, col, r, "R", 226);
                 checkVal(row, col, g, "G", 226);
                 checkVal(row, col, b, "B", 226);
               }
-            }
-            else {
+            } else {
               checkVal255(row, col, r, "R");
-              if(row < halfway) {
+              if (row < halfway) {
                 checkVal0(row, col, g, "G");
-              }
-              else {
+              } else {
                 checkVal255(row, col, g, "G");
               }
-              checkVal0(row, col, b, "B");                                                     
+              checkVal0(row, col, b, "B");
             }
           }
           checkVal255(row, col, a, "A");
         }
       }
-    }
-    catch(Exception e) {
-      System.out.println(e);
+    } catch(Exception e) {
+      System.out.println("\n" + e.getMessage());
       retval = 0;
     }
 
-    if(retval == 0) {
-      System.out.print("\n");
-      for(row = 0; row < h; row++) {
-        for(col = 0; col < w; col++) {
+    if (retval == 0) {
+      for (row = 0; row < h; row++) {
+        for (col = 0; col < w; col++) {
           int r = buf[pitch * row + col * ps + roffset];
           int g = buf[pitch * row + col * ps + goffset];
           int b = buf[pitch * row + col * ps + boffset];
-          if(r < 0) r += 256;  if(g < 0) g += 256;  if(b < 0) b += 256;
+          if (r < 0) r += 256;
+          if (g < 0) g += 256;
+          if (b < 0) b += 256;
           System.out.format("%3d/%3d/%3d ", r, g, b);
         }
         System.out.print("\n");
@@ -362,7 +363,8 @@ public class TJUnitTest {
   }
 
   private static int checkIntBuf(int[] buf, int w, int pitch, int h, int pf,
-    int subsamp, TJScalingFactor sf, int flags) throws Exception {
+                                 int subsamp, TJScalingFactor sf, int flags)
+                                 throws Exception {
     int rshift = TJ.getRedOffset(pf) * 8;
     int gshift = TJ.getGreenOffset(pf) * 8;
     int bshift = TJ.getBlueOffset(pf) * 8;
@@ -372,46 +374,42 @@ public class TJUnitTest {
     int blockSize = 8 * sf.getNum() / sf.getDenom();
 
     try {
-      for(row = 0; row < halfway; row++) {
-        for(col = 0; col < w; col++) {
-          if((flags & TJ.FLAG_BOTTOMUP) != 0)
+      for (row = 0; row < halfway; row++) {
+        for (col = 0; col < w; col++) {
+          if ((flags & TJ.FLAG_BOTTOMUP) != 0)
             index = pitch * (h - row - 1) + col;
-          else index = pitch * row + col;
+          else
+            index = pitch * row + col;
           int r = (buf[index] >> rshift) & 0xFF;
           int g = (buf[index] >> gshift) & 0xFF;
           int b = (buf[index] >> bshift) & 0xFF;
           int a = ashift >= 0 ? (buf[index] >> ashift) & 0xFF : 255;
-          if(((row / blockSize) + (col / blockSize)) % 2 == 0) {
-            if(row < halfway) {
+          if (((row / blockSize) + (col / blockSize)) % 2 == 0) {
+            if (row < halfway) {
               checkVal255(row, col, r, "R");
               checkVal255(row, col, g, "G");
               checkVal255(row, col, b, "B");
-            }
-            else {
+            } else {
               checkVal0(row, col, r, "R");
               checkVal0(row, col, g, "G");
               checkVal0(row, col, b, "B");
             }
-          }
-          else {
-            if(subsamp == TJ.SAMP_GRAY) {
-              if(row < halfway) {
+          } else {
+            if (subsamp == TJ.SAMP_GRAY) {
+              if (row < halfway) {
                 checkVal(row, col, r, "R", 76);
                 checkVal(row, col, g, "G", 76);
                 checkVal(row, col, b, "B", 76);
-              }
-              else {
+              } else {
                 checkVal(row, col, r, "R", 226);
                 checkVal(row, col, g, "G", 226);
                 checkVal(row, col, b, "B", 226);
               }
-            }
-            else {
+            } else {
               checkVal255(row, col, r, "R");
-              if(row < halfway) {
+              if (row < halfway) {
                 checkVal0(row, col, g, "G");
-              }
-              else {
+              } else {
                 checkVal255(row, col, g, "G");
               }
               checkVal0(row, col, b, "B");
@@ -420,20 +418,20 @@ public class TJUnitTest {
           checkVal255(row, col, a, "A");
         }
       }
-    }
-    catch(Exception e) {
-      System.out.println(e);
+    } catch(Exception e) {
+      System.out.println("\n" + e.getMessage());
       retval = 0;
     }
 
-    if(retval == 0) {
-      System.out.print("\n");
-      for(row = 0; row < h; row++) {
-        for(col = 0; col < w; col++) {
+    if (retval == 0) {
+      for (row = 0; row < h; row++) {
+        for (col = 0; col < w; col++) {
           int r = (buf[pitch * row + col] >> rshift) & 0xFF;
           int g = (buf[pitch * row + col] >> gshift) & 0xFF;
           int b = (buf[pitch * row + col] >> bshift) & 0xFF;
-          if(r < 0) r += 256;  if(g < 0) g += 256;  if(b < 0) b += 256;
+          if (r < 0) r += 256;
+          if (g < 0) g += 256;
+          if (b < 0) b += 256;
           System.out.format("%3d/%3d/%3d ", r, g, b);
         }
         System.out.print("\n");
@@ -442,29 +440,28 @@ public class TJUnitTest {
     return retval;
   }
 
-  private static int checkImg(BufferedImage img, int pf,
-    int subsamp, TJScalingFactor sf, int flags) throws Exception {
+  private static int checkImg(BufferedImage img, int pf, int subsamp,
+                              TJScalingFactor sf, int flags) throws Exception {
     WritableRaster wr = img.getRaster();
     int imgType = img.getType();
-    if(imgType == BufferedImage.TYPE_INT_RGB
-      || imgType == BufferedImage.TYPE_INT_BGR
-      || imgType == BufferedImage.TYPE_INT_ARGB
-      || imgType == BufferedImage.TYPE_INT_ARGB_PRE) {
-       SinglePixelPackedSampleModel sm =
+    if (imgType == BufferedImage.TYPE_INT_RGB ||
+        imgType == BufferedImage.TYPE_INT_BGR ||
+        imgType == BufferedImage.TYPE_INT_ARGB ||
+        imgType == BufferedImage.TYPE_INT_ARGB_PRE) {
+      SinglePixelPackedSampleModel sm =
         (SinglePixelPackedSampleModel)img.getSampleModel();
       int pitch = sm.getScanlineStride();
       DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
       int[] buf = db.getData();
       return checkIntBuf(buf, img.getWidth(), pitch, img.getHeight(), pf,
-        subsamp, sf, flags);
-    }
-    else {
+                         subsamp, sf, flags);
+    } else {
       ComponentSampleModel sm = (ComponentSampleModel)img.getSampleModel();
       int pitch = sm.getScanlineStride();
       DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
       byte[] buf = db.getData();
       return checkBuf(buf, img.getWidth(), pitch, img.getHeight(), pf, subsamp,
-        sf, flags);
+                      sf, flags);
     }
   }
 
@@ -473,51 +470,52 @@ public class TJUnitTest {
   }
 
   private static int checkBufYUV(byte[] buf, int size, int w, int h,
-    int subsamp) throws Exception {
+                                 int subsamp) throws Exception {
     int row, col;
-    int hsf = TJ.getMCUWidth(subsamp)/8, vsf = TJ.getMCUHeight(subsamp)/8;
+    int hsf = TJ.getMCUWidth(subsamp) / 8, vsf = TJ.getMCUHeight(subsamp) / 8;
     int pw = PAD(w, hsf), ph = PAD(h, vsf);
     int cw = pw / hsf, ch = ph / vsf;
     int ypitch = PAD(pw, 4), uvpitch = PAD(cw, 4);
     int retval = 1;
-    int correctsize = ypitch * ph
-      + (subsamp == TJ.SAMP_GRAY ? 0 : uvpitch * ch * 2);
+    int correctsize = ypitch * ph +
+                      (subsamp == TJ.SAMP_GRAY ? 0 : uvpitch * ch * 2);
     int halfway = 16;
 
     try {
-      if(size != correctsize)
-        throw new Exception("\nIncorrect size " + size + ".  Should be "
-          + correctsize);
+      if (size != correctsize)
+        throw new Exception("Incorrect size " + size + ".  Should be " +
+                            correctsize);
 
-      for(row = 0; row < ph; row++) {
-        for(col = 0; col < pw; col++) {
+      for (row = 0; row < ph; row++) {
+        for (col = 0; col < pw; col++) {
           byte y = buf[ypitch * row + col];
-          if(((row / 8) + (col / 8)) % 2 == 0) {
-            if(row < halfway) checkVal255(row, col, y, "Y");
-            else checkVal0(row, col, y, "Y");
-          }
-          else {
-            if(row < halfway) checkVal(row, col, y, "Y", 76);
-            else checkVal(row, col, y, "Y", 226);
+          if (((row / 8) + (col / 8)) % 2 == 0) {
+            if (row < halfway)
+              checkVal255(row, col, y, "Y");
+            else
+              checkVal0(row, col, y, "Y");
+          } else {
+            if (row < halfway)
+              checkVal(row, col, y, "Y", 76);
+            else
+              checkVal(row, col, y, "Y", 226);
           }
         }
       }
-      if(subsamp != TJ.SAMP_GRAY) {
+      if (subsamp != TJ.SAMP_GRAY) {
         halfway = 16 / vsf;
-        for(row = 0; row < ch; row++) {
-          for(col = 0; col < cw; col++) {
+        for (row = 0; row < ch; row++) {
+          for (col = 0; col < cw; col++) {
             byte u = buf[ypitch * ph + (uvpitch * row + col)],
-              v = buf[ypitch * ph + uvpitch * ch + (uvpitch * row + col)];
-            if(((row * vsf / 8) + (col * hsf / 8)) % 2 == 0) {
+                 v = buf[ypitch * ph + uvpitch * ch + (uvpitch * row + col)];
+            if (((row * vsf / 8) + (col * hsf / 8)) % 2 == 0) {
               checkVal(row, col, u, "U", 128);
               checkVal(row, col, v, "V", 128);
-            }
-            else {
-              if(row < halfway) {
+            } else {
+              if (row < halfway) {
                 checkVal(row, col, u, "U", 85);
                 checkVal255(row, col, v, "V");
-              }
-              else {
+              } else {
                 checkVal0(row, col, u, "U");
                 checkVal(row, col, v, "V", 149);
               }
@@ -525,47 +523,45 @@ public class TJUnitTest {
           }
         }
       }
-    }
-    catch(Exception e) {
-      System.out.println(e);
+    } catch(Exception e) {
+      System.out.println("\n" + e.getMessage());
       retval = 0;
     }
 
-    if(retval == 0) {
-      for(row = 0; row < ph; row++) {
-        for(col = 0; col < pw; col++) {
+    if (retval == 0) {
+      for (row = 0; row < ph; row++) {
+        for (col = 0; col < pw; col++) {
           int y = buf[ypitch * row + col];
-          if(y < 0) y += 256;
+          if (y < 0) y += 256;
           System.out.format("%3d ", y);
         }
         System.out.print("\n");
       }
       System.out.print("\n");
-      for(row = 0; row < ch; row++) {
-        for(col = 0; col < cw; col++) {
+      for (row = 0; row < ch; row++) {
+        for (col = 0; col < cw; col++) {
           int u = buf[ypitch * ph + (uvpitch * row + col)];
-          if(u < 0) u += 256;
+          if (u < 0) u += 256;
           System.out.format("%3d ", u);
         }
         System.out.print("\n");
       }
       System.out.print("\n");
-      for(row = 0; row < ch; row++) {
-        for(col = 0; col < cw; col++) {
+      for (row = 0; row < ch; row++) {
+        for (col = 0; col < cw; col++) {
           int v = buf[ypitch * ph + uvpitch * ch + (uvpitch * row + col)];
-          if(v < 0) v += 256;
+          if (v < 0) v += 256;
           System.out.format("%3d ", v);
         }
         System.out.print("\n");
       }
-      System.out.print("\n");
     }
 
     return retval;
   }
 
   private static void writeJPEG(byte[] jpegBuf, int jpegBufSize,
-    String filename) throws Exception {
+                                String filename) throws Exception {
     File file = new File(filename);
     FileOutputStream fos = new FileOutputStream(file);
     fos.write(jpegBuf, 0, jpegBufSize);
@@ -573,8 +569,8 @@ public class TJUnitTest {
   }
 
   private static int compTest(TJCompressor tjc, byte[] dstBuf, int w,
-    int h, int pf, String baseName, int subsamp, int jpegQual,
-    int flags) throws Exception {
+                              int h, int pf, String baseName, int subsamp,
+                              int jpegQual, int flags) throws Exception {
     String tempstr;
     byte[] srcBuf = null;
     BufferedImage img = null;
@@ -585,28 +581,32 @@ public class TJUnitTest {
     if (bi) {
       pf = biTypePF(imgType);
       pfStr = biTypeStr(imgType);
-    }
-    else pfStr = pixFormatStr[pf];
+    } else
+      pfStr = pixFormatStr[pf];
     ps =  TJ.getPixelSize(pf);
 
     System.out.print(pfStr + " ");
-    if(bi) System.out.print("(" + pixFormatStr[pf] + ") ");
-    if((flags & TJ.FLAG_BOTTOMUP) != 0) System.out.print("Bottom-Up");
-    else System.out.print("Top-Down ");
+    if (bi)
+      System.out.print("(" + pixFormatStr[pf] + ") ");
+    if ((flags & TJ.FLAG_BOTTOMUP) != 0)
+      System.out.print("Bottom-Up");
+    else
+      System.out.print("Top-Down ");
     System.out.print(" -> " + subNameLong[subsamp] + " ");
-    if(yuv == YUVENCODE) System.out.print("YUV ... ");
-    else System.out.print("Q" + jpegQual + " ... ");
+    if (yuv == YUVENCODE)
+      System.out.print("YUV ... ");
+    else
+      System.out.print("Q" + jpegQual + " ... ");
 
-    if(bi) {
+    if (bi) {
       img = new BufferedImage(w, h, imgType);
       initImg(img, pf, flags);
-      tempstr = baseName + "_enc_" + pfStr + "_"
-        + (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_"
-        + subName[subsamp] + "_Q" + jpegQual + ".png";
+      tempstr = baseName + "_enc_" + pfStr + "_" +
+                (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_" +
+                subName[subsamp] + "_Q" + jpegQual + ".png";
       File file = new File(tempstr);
       ImageIO.write(img, "png", file);
-    }
-    else {
+    } else {
       srcBuf = new byte[w * h * ps + 1];
       initBuf(srcBuf, w, w * ps, h, pf, flags);
     }
@@ -615,36 +615,40 @@ public class TJUnitTest {
     t = getTime();
     tjc.setSubsamp(subsamp);
     tjc.setJPEGQuality(jpegQual);
-    if(bi) {
-      if(yuv == YUVENCODE) tjc.encodeYUV(img, dstBuf, flags);
-      else tjc.compress(img, dstBuf, flags);
-    }
-    else {
-      tjc.setSourceImage(srcBuf, w, 0, h, pf);
-      if(yuv == YUVENCODE) tjc.encodeYUV(dstBuf, flags);
-      else tjc.compress(dstBuf, flags);
+    if (bi) {
+      if (yuv == YUVENCODE)
+        tjc.encodeYUV(img, dstBuf, flags);
+      else
+        tjc.compress(img, dstBuf, flags);
+    } else {
+      tjc.setSourceImage(srcBuf, 0, 0, w, 0, h, pf);
+      if (yuv == YUVENCODE)
+        tjc.encodeYUV(dstBuf, flags);
+      else
+        tjc.compress(dstBuf, flags);
     }
     size = tjc.getCompressedSize();
     t = getTime() - t;
 
-    if(yuv == YUVENCODE)
-      tempstr = baseName + "_enc_" + pfStr + "_"
-        + (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_"
-        + subName[subsamp] + ".yuv";
+    if (yuv == YUVENCODE)
+      tempstr = baseName + "_enc_" + pfStr + "_" +
+                (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_" +
+                subName[subsamp] + ".yuv";
     else
-      tempstr = baseName + "_enc_" + pfStr + "_"
-        + (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_"
-        + subName[subsamp] + "_Q" + jpegQual + ".jpg";
+      tempstr = baseName + "_enc_" + pfStr + "_" +
+                (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_" +
+                subName[subsamp] + "_Q" + jpegQual + ".jpg";
     writeJPEG(dstBuf, size, tempstr);
 
-    if(yuv == YUVENCODE) {
-      if(checkBufYUV(dstBuf, size, w, h, subsamp) == 1)
+    if (yuv == YUVENCODE) {
+      if (checkBufYUV(dstBuf, size, w, h, subsamp) == 1)
         System.out.print("Passed.");
       else {
-        System.out.print("FAILED!");  exitStatus = -1;
+        System.out.print("FAILED!");
+        exitStatus = -1;
       }
-    }
-    else System.out.print("Done.");
+    } else
+      System.out.print("Done.");
     System.out.format("  %.6f ms\n", t * 1000.);
     System.out.println("  Result in " + tempstr);
 
@@ -652,8 +656,9 @@ public class TJUnitTest {
   }
 
   private static void decompTest(TJDecompressor tjd, byte[] jpegBuf,
-    int jpegSize, int w, int h, int pf, String baseName, int subsamp,
-    int flags, TJScalingFactor sf) throws Exception {
+                                 int jpegSize, int w, int h, int pf,
+                                 String baseName, int subsamp, int flags,
+                                 TJScalingFactor sf) throws Exception {
     String pfStr, tempstr;
     double t;
     int scaledWidth = sf.getScaled(w);
@@ -662,216 +667,243 @@ public class TJUnitTest {
     BufferedImage img = null;
     byte[] dstBuf = null;
 
-    if(yuv == YUVENCODE) return;
+    if (yuv == YUVENCODE) return;
 
     if (bi) {
       pf = biTypePF(imgType);
       pfStr = biTypeStr(imgType);
-    }
-    else pfStr = pixFormatStr[pf];
+    } else
+      pfStr = pixFormatStr[pf];
 
     System.out.print("JPEG -> ");
-    if(yuv == YUVDECODE)
-      System.out.print("YUV " + subName[subsamp] + " ... ");
+    if (yuv == YUVDECODE)
+      System.out.print("YUV " + subNameLong[subsamp] + " ... ");
     else {
       System.out.print(pfStr + " ");
-      if(bi) System.out.print("(" + pixFormatStr[pf] + ") ");
-      if((flags & TJ.FLAG_BOTTOMUP) != 0) System.out.print("Bottom-Up ");
-      else System.out.print("Top-Down  ");
-      if(!sf.isOne())
+      if (bi)
+        System.out.print("(" + pixFormatStr[pf] + ") ");
+      if ((flags & TJ.FLAG_BOTTOMUP) != 0)
+        System.out.print("Bottom-Up ");
+      else
+        System.out.print("Top-Down  ");
+      if (!sf.isOne())
         System.out.print(sf.getNum() + "/" + sf.getDenom() + " ... ");
-      else System.out.print("... ");
+      else
+        System.out.print("... ");
     }
 
     t = getTime();
     tjd.setJPEGImage(jpegBuf, jpegSize);
-    if(tjd.getWidth() != w || tjd.getHeight() != h
-      || tjd.getSubsamp() != subsamp)
+    if (tjd.getWidth() != w || tjd.getHeight() != h ||
+        tjd.getSubsamp() != subsamp)
       throw new Exception("Incorrect JPEG header");
 
     temp1 = scaledWidth;
     temp2 = scaledHeight;
     temp1 = tjd.getScaledWidth(temp1, temp2);
     temp2 = tjd.getScaledHeight(temp1, temp2);
-    if(temp1 != scaledWidth || temp2 != scaledHeight)
+    if (temp1 != scaledWidth || temp2 != scaledHeight)
       throw new Exception("Scaled size mismatch");
 
-    if(yuv == YUVDECODE) dstBuf = tjd.decompressToYUV(flags);
+    if (yuv == YUVDECODE)
+      dstBuf = tjd.decompressToYUV(flags);
     else {
-      if(bi)
+      if (bi)
         img = tjd.decompress(scaledWidth, scaledHeight, imgType, flags);
-      else dstBuf = tjd.decompress(scaledWidth, 0, scaledHeight, pf, flags);
+      else
+        dstBuf = tjd.decompress(scaledWidth, 0, scaledHeight, pf, flags);
     }
     t = getTime() - t;
 
-    if(bi) {
-      tempstr = baseName + "_dec_" + pfStr + "_"
-        + (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_"
-        + subName[subsamp] + "_" + (double)sf.getNum() / (double)sf.getDenom()
-        + "x" + ".png";
+    if (bi) {
+      tempstr = baseName + "_dec_" + pfStr + "_" +
+                (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_" +
+                subName[subsamp] + "_" +
+                (double)sf.getNum() / (double)sf.getDenom() + "x" + ".png";
       File file = new File(tempstr);
       ImageIO.write(img, "png", file);
     }
 
-    if(yuv == YUVDECODE) {
-      if(checkBufYUV(dstBuf, dstBuf.length, w, h, subsamp) == 1)
+    if (yuv == YUVDECODE) {
+      if (checkBufYUV(dstBuf, dstBuf.length, w, h, subsamp) == 1)
         System.out.print("Passed.");
       else {
         System.out.print("FAILED!");  exitStatus = -1;
       }
-    }
-    else {
-      if((bi && checkImg(img, pf, subsamp, sf, flags) == 1)
-        || (!bi && checkBuf(dstBuf, scaledWidth, scaledWidth
-          * TJ.getPixelSize(pf), scaledHeight, pf, subsamp, sf, flags) == 1))
+    } else {
+      if ((bi && checkImg(img, pf, subsamp, sf, flags) == 1) ||
+          (!bi && checkBuf(dstBuf, scaledWidth,
+                           scaledWidth * TJ.getPixelSize(pf), scaledHeight, pf,
+                           subsamp, sf, flags) == 1))
         System.out.print("Passed.");
       else {
-        System.out.print("FAILED!");  exitStatus = -1;
+        System.out.print("FAILED!");
+        exitStatus = -1;
       }
     }
     System.out.format("  %.6f ms\n", t * 1000.);
   }
 
   private static void decompTest(TJDecompressor tjd, byte[] jpegBuf,
-    int jpegSize, int w, int h, int pf, String baseName, int subsamp,
-    int flags) throws Exception {
+                                 int jpegSize, int w, int h, int pf,
+                                 String baseName, int subsamp,
+                                 int flags) throws Exception {
     int i;
-    if((subsamp == TJ.SAMP_444 || subsamp == TJ.SAMP_GRAY) && yuv == 0) {
-      TJScalingFactor sf[] = TJ.getScalingFactors();
-      for(i = 0; i < sf.length; i++)
+    if ((subsamp == TJ.SAMP_444 || subsamp == TJ.SAMP_GRAY) && yuv == 0) {
+      TJScalingFactor[] sf = TJ.getScalingFactors();
+      for (i = 0; i < sf.length; i++)
         decompTest(tjd, jpegBuf, jpegSize, w, h, pf, baseName, subsamp,
-          flags, sf[i]);
-    }
-    else
+                   flags, sf[i]);
+    } else
       decompTest(tjd, jpegBuf, jpegSize, w, h, pf, baseName, subsamp,
-        flags, new TJScalingFactor(1, 1));
-    System.out.print("\n");
+                 flags, new TJScalingFactor(1, 1));
   }
 
   private static void doTest(int w, int h, int[] formats, int subsamp,
-    String baseName) throws Exception {
+                             String baseName) throws Exception {
     TJCompressor tjc = null;
     TJDecompressor tjd = null;
     int size;
     byte[] dstBuf;
 
-    if(yuv == YUVENCODE) dstBuf = new byte[TJ.bufSizeYUV(w, h, subsamp)];
-    else dstBuf = new byte[TJ.bufSize(w, h, subsamp)];
+    if (yuv == YUVENCODE)
+      dstBuf = new byte[TJ.bufSizeYUV(w, h, subsamp)];
+    else
+      dstBuf = new byte[TJ.bufSize(w, h, subsamp)];
 
     try {
       tjc = new TJCompressor();
-      tjd = new TJDecompressor();  
+      tjd = new TJDecompressor();
 
-      for(int pf : formats) {
-        for(int i = 0; i < 2; i++) {
+      for (int pf : formats) {
+        for (int i = 0; i < 2; i++) {
           int flags = 0;
-          if (subsamp == TJ.SAMP_422 || subsamp == TJ.SAMP_420
-            || subsamp == TJ.SAMP_440)
+          if (subsamp == TJ.SAMP_422 || subsamp == TJ.SAMP_420 ||
+              subsamp == TJ.SAMP_440)
             flags |= TJ.FLAG_FASTUPSAMPLE;
-          if(i == 1) {
-            if(yuv == YUVDECODE) {
-              tjc.close();  tjd.close();  return;
-            }
-            else flags |= TJ.FLAG_BOTTOMUP;
+          if (i == 1) {
+            if (yuv == YUVDECODE) {
+              tjc.close();
+              tjd.close();
+              return;
+            } else
+              flags |= TJ.FLAG_BOTTOMUP;
           }
           size = compTest(tjc, dstBuf, w, h, pf, baseName, subsamp, 100,
-            flags);
+                          flags);
           decompTest(tjd, dstBuf, size, w, h, pf, baseName, subsamp, flags);
-          if(pf >= TJ.PF_RGBX && pf <= TJ.PF_XRGB && !bi)
+          if (pf >= TJ.PF_RGBX && pf <= TJ.PF_XRGB && !bi)
             decompTest(tjd, dstBuf, size, w, h, pf + (TJ.PF_RGBA - TJ.PF_RGBX),
-              baseName, subsamp, flags);
+                       baseName, subsamp, flags);
+          System.out.print("\n");
         }
       }
-    }
-    catch(Exception e) {
-      if(tjc != null) tjc.close();
-      if(tjd != null) tjd.close();
+      System.out.print("--------------------\n\n");
+    catch(Exception e) {
+      if (tjc != null) tjc.close();
+      if (tjd != null) tjd.close();
       throw e;
     }
-    if(tjc != null) tjc.close();
-    if(tjd != null) tjd.close();
+    if (tjc != null) tjc.close();
+    if (tjd != null) tjd.close();
   }
 
   private static void bufSizeTest() throws Exception {
     int w, h, i, subsamp;
-    byte[] srcBuf, jpegBuf;
+    byte[] srcBuf, dstBuf;
     TJCompressor tjc = null;
     Random r = new Random();
 
     try {
       tjc = new TJCompressor();
       System.out.println("Buffer size regression test");
-      for(subsamp = 0; subsamp < TJ.NUMSAMP; subsamp++) {
-        for(w = 1; w < 48; w++) {
+      for (subsamp = 0; subsamp < TJ.NUMSAMP; subsamp++) {
+        for (w = 1; w < 48; w++) {
           int maxh = (w == 1) ? 2048 : 48;
-          for(h = 1; h < maxh; h++) {
-            if(h % 100 == 0)
+          for (h = 1; h < maxh; h++) {
+            if (h % 100 == 0)
               System.out.format("%04d x %04d\b\b\b\b\b\b\b\b\b\b\b", w, h);
             srcBuf = new byte[w * h * 4];
-            jpegBuf = new byte[TJ.bufSize(w, h, subsamp)];
-            for(i = 0; i < w * h * 4; i++) {
+            if (yuv == YUVENCODE)
+              dstBuf = new byte[TJ.bufSizeYUV(w, h, subsamp)];
+            else
+              dstBuf = new byte[TJ.bufSize(w, h, subsamp)];
+            for (i = 0; i < w * h * 4; i++) {
               srcBuf[i] = (byte)(r.nextInt(2) * 255);
             }
-            tjc.setSourceImage(srcBuf, w, 0, h, TJ.PF_BGRX);
+            tjc.setSourceImage(srcBuf, 0, 0, w, 0, h, TJ.PF_BGRX);
             tjc.setSubsamp(subsamp);
             tjc.setJPEGQuality(100);
-            tjc.compress(jpegBuf, 0);
+            if (yuv == YUVENCODE)
+              tjc.encodeYUV(dstBuf, 0);
+            else
+              tjc.compress(dstBuf, 0);
 
             srcBuf = new byte[h * w * 4];
-            jpegBuf = new byte[TJ.bufSize(h, w, subsamp)];
-            for(i = 0; i < h * w * 4; i++) {
+            if (yuv == YUVENCODE)
+              dstBuf = new byte[TJ.bufSizeYUV(h, w, subsamp)];
+            else
+              dstBuf = new byte[TJ.bufSize(h, w, subsamp)];
+            for (i = 0; i < h * w * 4; i++) {
               srcBuf[i] = (byte)(r.nextInt(2) * 255);
             }
-            tjc.setSourceImage(srcBuf, h, 0, w, TJ.PF_BGRX);
-            tjc.compress(jpegBuf, 0);
+            tjc.setSourceImage(srcBuf, 0, 0, h, 0, w, TJ.PF_BGRX);
+            if (yuv == YUVENCODE)
+              tjc.encodeYUV(dstBuf, 0);
+            else
+              tjc.compress(dstBuf, 0);
           }
         }
       }
       System.out.println("Done.      ");
-    }
-    catch(Exception e) {
-      if(tjc != null) tjc.close();
+    } catch(Exception e) {
+      if (tjc != null) tjc.close();
       throw e;
     }
-    if(tjc != null) tjc.close();
+    if (tjc != null) tjc.close();
   }
 
-  public static void main(String argv[]) {
+  public static void main(String[] argv) {
     try {
       String testName = "javatest";
       boolean doyuv = false;
-      for(int i = 0; i < argv.length; i++) {
-        if(argv[i].equalsIgnoreCase("-yuv")) doyuv = true;
-        if(argv[i].substring(0, 1).equalsIgnoreCase("-h")
-          || argv[i].equalsIgnoreCase("-?"))
+      for (int i = 0; i < argv.length; i++) {
+        if (argv[i].equalsIgnoreCase("-yuv"))
+          doyuv = true;
+        if (argv[i].substring(0, 1).equalsIgnoreCase("-h") ||
+            argv[i].equalsIgnoreCase("-?"))
           usage();
-        if(argv[i].equalsIgnoreCase("-bi")) {
+        if (argv[i].equalsIgnoreCase("-bi")) {
           bi = true;
           testName = "javabitest";
         }
       }
-      if(doyuv) yuv = YUVENCODE;
-      doTest(35, 39, bi ? _3byteFormatsBI : _3byteFormats, TJ.SAMP_444, testName);
-      doTest(39, 41, bi ? _4byteFormatsBI : _4byteFormats, TJ.SAMP_444, testName);
+      if (doyuv) yuv = YUVENCODE;
+      doTest(35, 39, bi ? _3byteFormatsBI : _3byteFormats, TJ.SAMP_444,
+             testName);
+      doTest(39, 41, bi ? _4byteFormatsBI : _4byteFormats, TJ.SAMP_444,
+             testName);
       doTest(41, 35, bi ? _3byteFormatsBI : _3byteFormats, TJ.SAMP_422,
-        testName);
+             testName);
       doTest(35, 39, bi ? _4byteFormatsBI : _4byteFormats, TJ.SAMP_422,
-        testName);
+             testName);
       doTest(39, 41, bi ? _3byteFormatsBI : _3byteFormats, TJ.SAMP_420,
-        testName);
+             testName);
       doTest(41, 35, bi ? _4byteFormatsBI : _4byteFormats, TJ.SAMP_420,
-        testName);
+             testName);
       doTest(35, 39, bi ? _3byteFormatsBI : _3byteFormats, TJ.SAMP_440,
-        testName);
+             testName);
       doTest(39, 41, bi ? _4byteFormatsBI : _4byteFormats, TJ.SAMP_440,
-        testName);
+             testName);
       doTest(35, 39, bi ? onlyGrayBI : onlyGray, TJ.SAMP_GRAY, testName);
       doTest(39, 41, bi ? _3byteFormatsBI : _3byteFormats, TJ.SAMP_GRAY,
-        testName);
+             testName);
       doTest(41, 35, bi ? _4byteFormatsBI : _4byteFormats, TJ.SAMP_GRAY,
-        testName);
-      if(!doyuv && !bi) bufSizeTest();
-      if(doyuv && !bi) {
+             testName);
+      if (!bi)
+        bufSizeTest();
+      if (doyuv && !bi) {
+        System.out.print("\n--------------------\n\n");
         yuv = YUVDECODE;
         doTest(48, 48, onlyRGB, TJ.SAMP_444, "javatest_yuv0");
         doTest(35, 39, onlyRGB, TJ.SAMP_444, "javatest_yuv1");
@@ -886,8 +918,7 @@ public class TJUnitTest {
         doTest(48, 48, onlyGray, TJ.SAMP_GRAY, "javatest_yuv0");
         doTest(39, 41, onlyGray, TJ.SAMP_GRAY, "javatest_yuv1");
       }
-    }
-    catch(Exception e) {
+    } catch(Exception e) {
       e.printStackTrace();
       exitStatus = -1;
     }
index 4860d29..b2810b5 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:14 CDT 2012 -->
 <TITLE>
 All Classes
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
 
index accfa3f..ddc3d63 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:14 CDT 2012 -->
 <TITLE>
 All Classes
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
 
index 26d6d95..e4adb67 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:14 CDT 2012 -->
 <TITLE>
 Constant Field Values
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
 
index 27f6caf..65951d2 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:14 CDT 2012 -->
 <TITLE>
 Deprecated List
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
 
@@ -83,8 +81,46 @@ function windowTitle()
 </CENTER>
 <HR SIZE="4" NOSHADE>
 <B>Contents</B><UL>
+<LI><A HREF="#method">Deprecated Methods</A>
+<LI><A HREF="#constructor">Deprecated Constructors</A>
 </UL>
 
+<A NAME="method"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Deprecated Methods</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)">org.libjpegturbo.turbojpeg.TJDecompressor.decompress(byte[], int, int, int, int, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>Use
+ <A HREF="org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>TJDecompressor.decompress(byte[], int, int, int, int, int, int, int)</CODE></A> instead.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)">org.libjpegturbo.turbojpeg.TJCompressor.setSourceImage(byte[], int, int, int, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>Use
+ <A HREF="org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>TJCompressor.setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> instead.</I>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="constructor"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Deprecated Constructors</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int)">org.libjpegturbo.turbojpeg.TJCompressor(byte[], int, int, int, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>Use
+ <A HREF="org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int, int, int)"><CODE>TJCompressor.TJCompressor(byte[], int, int, int, int, int, int)</CODE></A> instead.</I>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
 <HR>
 
 
index 8724af8..b919d0a 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:14 CDT 2012 -->
 <TITLE>
 API Help
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
 
index 5213541..6642769 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:14 CDT 2012 -->
 <TITLE>
 Index
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="./stylesheet.css" TITLE="Style">
 
@@ -83,8 +81,7 @@ function windowTitle()
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#bufSize(int, int, int)"><B>bufSize(int, int, int)</B></A> - 
 Static method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
 <DD>Returns the maximum size of the buffer (in bytes) required to hold a JPEG
- image with the given width and height, and level of chrominance
- subsampling.
+ image with the given width, height, and level of chrominance subsampling.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#bufSizeYUV(int, int, int)"><B>bufSizeYUV(int, int, int)</B></A> - 
 Static method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
 <DD>Returns the size of the buffer (in bytes) required to hold a YUV planar
@@ -123,20 +120,28 @@ Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg
 Method in interface org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCustomFilter.html" title="interface in org.libjpegturbo.turbojpeg">TJCustomFilter</A>
 <DD>A callback function that can be used to modify the DCT coefficients after
  they are losslessly transformed but before they are transcoded to a new
- JPEG file.
+ JPEG image.
 </DL>
 <HR>
 <A NAME="_D_"><!-- --></A><H2>
 <B>D</B></H2>
 <DL>
-<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)"><B>decompress(byte[], int, int, int, int, int)</B></A> - 
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><B>decompress(byte[], int, int, int, int, int, int, int)</B></A> - 
 Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
 <DD>Decompress the JPEG source image associated with this decompressor
  instance and output a decompressed image to the given destination buffer.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)"><B>decompress(byte[], int, int, int, int, int)</B></A> - 
+Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
+<DD><B>Deprecated.</B>&nbsp;<I>Use
+ <A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>TJDecompressor.decompress(byte[], int, int, int, int, int, int, int)</CODE></A> instead.</I>
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int, int, int, int, int)"><B>decompress(int, int, int, int, int)</B></A> - 
 Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
 <DD>Decompress the JPEG source image associated with this decompressor
  instance and return a buffer containing the decompressed image.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int[], int, int, int, int, int, int, int)"><B>decompress(int[], int, int, int, int, int, int, int)</B></A> - 
+Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
+<DD>Decompress the JPEG source image associated with this decompressor
+ instance and output a decompressed image to the given destination buffer.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(java.awt.image.BufferedImage, int)"><B>decompress(BufferedImage, int)</B></A> - 
 Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
 <DD>Decompress the JPEG source image associated with this decompressor
@@ -204,8 +209,9 @@ Static variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/
 <DD>Use the fastest DCT/IDCT algorithm available in the underlying codec.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#FLAG_FASTUPSAMPLE"><B>FLAG_FASTUPSAMPLE</B></A> - 
 Static variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
-<DD>When decompressing, use the fastest chrominance upsampling algorithm
- available in the underlying codec.
+<DD>When decompressing an image that was compressed using chrominance
+ subsampling, use the fastest chrominance upsampling algorithm available in
+ the underlying codec.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#FLAG_FORCEMMX"><B>FLAG_FORCEMMX</B></A> - 
 Static variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
 <DD>Turn off CPU auto-detection and force TurboJPEG to use MMX code
@@ -266,7 +272,7 @@ Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg
 <DD>Returns numerator
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#getPixelSize(int)"><B>getPixelSize(int)</B></A> - 
 Static method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
-<DD>Returns the pixel size (in bytes) of the given pixel format.
+<DD>Returns the pixel size (in bytes) for the given pixel format.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#getRedOffset(int)"><B>getRedOffset(int)</B></A> - 
 Static method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
 <DD>For the given pixel format, returns the number of bytes that the red
@@ -276,12 +282,12 @@ Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg
 <DD>Returns the scaled value of <code>dimension</code>.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)"><B>getScaledHeight(int, int)</B></A> - 
 Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>Returns the height of the largest scaled down image that the TurboJPEG
+<DD>Returns the height of the largest scaled-down image that the TurboJPEG
  decompressor can generate without exceeding the desired image width and
  height.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)"><B>getScaledWidth(int, int)</B></A> - 
 Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>Returns the width of the largest scaled down image that the TurboJPEG
+<DD>Returns the width of the largest scaled-down image that the TurboJPEG
  decompressor can generate without exceeding the desired image width and
  height.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#getScalingFactors()"><B>getScalingFactors()</B></A> - 
@@ -294,8 +300,8 @@ Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg
  associated with this decompressor instance.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html#getTransformedSizes()"><B>getTransformedSizes()</B></A> - 
 Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html" title="class in org.libjpegturbo.turbojpeg">TJTransformer</A>
-<DD>Returns an array containing the sizes of the transformed JPEG images from
the most recent call to <A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html#transform(byte[][], org.libjpegturbo.turbojpeg.TJTransform[], int)"><CODE>transform()</CODE></A>.
+<DD>Returns an array containing the sizes of the transformed JPEG images
generated by the most recent transform operation.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getWidth()"><B>getWidth()</B></A> - 
 Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
 <DD>Returns the width of the JPEG image associated with this decompressor
@@ -471,9 +477,13 @@ Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setJPEGQuality(int)"><B>setJPEGQuality(int)</B></A> - 
 Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
 <DD>Set the JPEG image quality level for subsequent compress operations.
-<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)"><B>setSourceImage(byte[], int, int, int, int)</B></A> - 
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><B>setSourceImage(byte[], int, int, int, int, int, int)</B></A> - 
 Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
 <DD>Associate an uncompressed source image with this compressor instance.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)"><B>setSourceImage(byte[], int, int, int, int)</B></A> - 
+Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
+<DD><B>Deprecated.</B>&nbsp;<I>Use
+ <A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>TJCompressor.setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> instead.</I>
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSubsamp(int)"><B>setSubsamp(int)</B></A> - 
 Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
 <DD>Set the level of chrominance subsampling for subsequent compress/encode
@@ -489,23 +499,27 @@ Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/tur
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg"><B>TJCompressor</B></A> - Class in <A HREF="./org/libjpegturbo/turbojpeg/package-summary.html">org.libjpegturbo.turbojpeg</A><DD>TurboJPEG compressor<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor()"><B>TJCompressor()</B></A> - 
 Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
 <DD>Create a TurboJPEG compressor instance.
-<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int)"><B>TJCompressor(byte[], int, int, int, int)</B></A> - 
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int, int, int)"><B>TJCompressor(byte[], int, int, int, int, int, int)</B></A> - 
 Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
 <DD>Create a TurboJPEG compressor instance and associate the uncompressed
- source image stored in <code>srcImage</code> with the newly-created
+ source image stored in <code>srcImage</code> with the newly created
  instance.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int)"><B>TJCompressor(byte[], int, int, int, int)</B></A> - 
+Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
+<DD><B>Deprecated.</B>&nbsp;<I>Use
+ <A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int, int, int)"><CODE>TJCompressor.TJCompressor(byte[], int, int, int, int, int, int)</CODE></A> instead.</I>
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJCustomFilter.html" title="interface in org.libjpegturbo.turbojpeg"><B>TJCustomFilter</B></A> - Interface in <A HREF="./org/libjpegturbo/turbojpeg/package-summary.html">org.libjpegturbo.turbojpeg</A><DD>Custom filter callback interface<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg"><B>TJDecompressor</B></A> - Class in <A HREF="./org/libjpegturbo/turbojpeg/package-summary.html">org.libjpegturbo.turbojpeg</A><DD>TurboJPEG decompressor<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#TJDecompressor()"><B>TJDecompressor()</B></A> - 
 Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
 <DD>Create a TurboJPEG decompresssor instance.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#TJDecompressor(byte[])"><B>TJDecompressor(byte[])</B></A> - 
 Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
 <DD>Create a TurboJPEG decompressor instance and associate the JPEG image
- stored in <code>jpegImage</code> with the newly-created instance.
+ stored in <code>jpegImage</code> with the newly created instance.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#TJDecompressor(byte[], int)"><B>TJDecompressor(byte[], int)</B></A> - 
 Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
 <DD>Create a TurboJPEG decompressor instance and associate the JPEG image
  of length <code>imageSize</code> bytes stored in <code>jpegImage</code>
- with the newly-created instance.
+ with the newly created instance.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJScalingFactor.html" title="class in org.libjpegturbo.turbojpeg"><B>TJScalingFactor</B></A> - Class in <A HREF="./org/libjpegturbo/turbojpeg/package-summary.html">org.libjpegturbo.turbojpeg</A><DD>Fractional scaling factor<DT><A HREF="./org/libjpegturbo/turbojpeg/TJScalingFactor.html#TJScalingFactor(int, int)"><B>TJScalingFactor(int, int)</B></A> - 
 Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJScalingFactor.html" title="class in org.libjpegturbo.turbojpeg">TJScalingFactor</A>
 <DD>&nbsp;
@@ -524,12 +538,12 @@ Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/tur
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html#TJTransformer(byte[])"><B>TJTransformer(byte[])</B></A> - 
 Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html" title="class in org.libjpegturbo.turbojpeg">TJTransformer</A>
 <DD>Create a TurboJPEG lossless transformer instance and associate the JPEG
- image stored in <code>jpegImage</code> with the newly-created instance.
+ image stored in <code>jpegImage</code> with the newly created instance.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html#TJTransformer(byte[], int)"><B>TJTransformer(byte[], int)</B></A> - 
 Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html" title="class in org.libjpegturbo.turbojpeg">TJTransformer</A>
 <DD>Create a TurboJPEG lossless transformer instance and associate the JPEG
  image of length <code>imageSize</code> bytes stored in
- <code>jpegImage</code> with the newly-created instance.
+ <code>jpegImage</code> with the newly created instance.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html#transform(byte[][], org.libjpegturbo.turbojpeg.TJTransform[], int)"><B>transform(byte[][], TJTransform[], int)</B></A> - 
 Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html" title="class in org.libjpegturbo.turbojpeg">TJTransformer</A>
 <DD>Losslessly transform the JPEG image associated with this transformer
index 93c50af..356cd1d 100644 (file)
@@ -2,7 +2,6 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc on Fri Jun 29 14:29:14 CDT 2012-->
 <TITLE>
 Generated Documentation (Untitled)
 </TITLE>
@@ -10,8 +9,42 @@ Generated Documentation (Untitled)
     targetPage = "" + window.location.search;
     if (targetPage != "" && targetPage != "undefined")
         targetPage = targetPage.substring(1);
-    if (targetPage.indexOf(":") != -1)
+    if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
         targetPage = "undefined";
+    function validURL(url) {
+        var pos = url.indexOf(".html");
+        if (pos == -1 || pos != url.length - 5)
+            return false;
+        var allowNumber = false;
+        var allowSep = false;
+        var seenDot = false;
+        for (var i = 0; i < url.length - 5; i++) {
+            var ch = url.charAt(i);
+            if ('a' <= ch && ch <= 'z' ||
+                    'A' <= ch && ch <= 'Z' ||
+                    ch == '$' ||
+                    ch == '_') {
+                allowNumber = true;
+                allowSep = true;
+            } else if ('0' <= ch && ch <= '9'
+                    || ch == '-') {
+                if (!allowNumber)
+                     return false;
+            } else if (ch == '/' || ch == '.') {
+                if (!allowSep)
+                    return false;
+                allowNumber = false;
+                allowSep = false;
+                if (ch == '.')
+                     seenDot = true;
+                if (ch == '/' && seenDot)
+                     return false;
+            } else {
+                return false;
+            }
+        }
+        return true;
+    }
     function loadFrames() {
         if (targetPage != "" && targetPage != "undefined")
              top.classFrame.location = top.targetPage;
index 326b22f..f905406 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
 <TITLE>
 TJ
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
@@ -146,8 +144,9 @@ TurboJPEG utility class (cannot be instantiated)
 <TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_FASTUPSAMPLE">FLAG_FASTUPSAMPLE</A></B></CODE>
 
 <BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When decompressing, use the fastest chrominance upsampling algorithm
- available in the underlying codec.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When decompressing an image that was compressed using chrominance
+ subsampling, use the fastest chrominance upsampling algorithm available in
+ the underlying codec.</TD>
 </TR>
 <TR BGCOLOR="white" CLASS="TableRowColor">
 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -364,8 +363,7 @@ TurboJPEG utility class (cannot be instantiated)
 
 <BR>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the maximum size of the buffer (in bytes) required to hold a JPEG
- image with the given width and height, and level of chrominance
- subsampling.</TD>
+ image with the given width, height, and level of chrominance subsampling.</TD>
 </TR>
 <TR BGCOLOR="white" CLASS="TableRowColor">
 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -420,7 +418,7 @@ TurboJPEG utility class (cannot be instantiated)
 <TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getPixelSize(int)">getPixelSize</A></B>(int&nbsp;pixelFormat)</CODE>
 
 <BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the pixel size (in bytes) of the given pixel format.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the pixel size (in bytes) for the given pixel format.</TD>
 </TR>
 <TR BGCOLOR="white" CLASS="TableRowColor">
 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -534,6 +532,7 @@ public static final int <B>SAMP_440</B></PRE>
 <DL>
 <DD>4:4:0 chrominance subsampling.  The JPEG or YUV image will contain one
  chrominance component for every 1x2 block of pixels in the source image.
+ Note that 4:4:0 subsampling is not fully accelerated in libjpeg-turbo.
 <P>
 <DL>
 <DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.libjpegturbo.turbojpeg.TJ.SAMP_440">Constant Field Values</A></DL>
@@ -779,11 +778,11 @@ FLAG_FASTUPSAMPLE</H3>
 <PRE>
 public static final int <B>FLAG_FASTUPSAMPLE</B></PRE>
 <DL>
-<DD>When decompressing, use the fastest chrominance upsampling algorithm
- available in the underlying codec.  The default is to use smooth
- upsampling, which creates a smooth transition between neighboring
- chrominance components in order to reduce upsampling artifacts in the
- decompressed image.
+<DD>When decompressing an image that was compressed using chrominance
+ subsampling, use the fastest chrominance upsampling algorithm available in
+ the underlying codec.  The default is to use smooth upsampling, which
+ creates a smooth transition between neighboring chrominance components in
order to reduce upsampling artifacts in the decompressed image.
 <P>
 <DL>
 <DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.libjpegturbo.turbojpeg.TJ.FLAG_FASTUPSAMPLE">Constant Field Values</A></DL>
@@ -796,11 +795,11 @@ FLAG_FASTDCT</H3>
 public static final int <B>FLAG_FASTDCT</B></PRE>
 <DL>
 <DD>Use the fastest DCT/IDCT algorithm available in the underlying codec.  The
- default if this flag is not specified is implementation-specific.  The
libjpeg implementation, for example, uses the fast algorithm by default
- when compressing, because this has been shown to have only a very slight
- effect on accuracy, but it uses the accurate algorithm when decompressing,
- because this has been shown to have a larger effect.
+ default if this flag is not specified is implementation-specific.  For
example, the implementation of TurboJPEG for libjpeg[-turbo] uses the fast
+ algorithm by default when compressing, because this has been shown to have
+ only a very slight effect on accuracy, but it uses the accurate algorithm
when decompressing, because this has been shown to have a larger effect.
 <P>
 <DL>
 <DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.libjpegturbo.turbojpeg.TJ.FLAG_FASTDCT">Constant Field Values</A></DL>
@@ -814,11 +813,11 @@ public static final int <B>FLAG_ACCURATEDCT</B></PRE>
 <DL>
 <DD>Use the most accurate DCT/IDCT algorithm available in the underlying
  codec.  The default if this flag is not specified is
- implementation-specific.  The libjpeg implementation, for example, uses
- the fast algorithm by default when compressing, because this has been
- shown to have only a very slight effect on accuracy, but it uses the
- accurate algorithm when decompressing, because this has been shown to have
- a larger effect.
+ implementation-specific.  For example, the implementation of TurboJPEG for
+ libjpeg[-turbo] uses the fast algorithm by default when compressing,
+ because this has been shown to have only a very slight effect on accuracy,
+ but it uses the accurate algorithm when decompressing, because this has
been shown to have a larger effect.
 <P>
 <DL>
 <DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.libjpegturbo.turbojpeg.TJ.FLAG_ACCURATEDCT">Constant Field Values</A></DL>
@@ -896,11 +895,11 @@ getPixelSize</H3>
 public static int <B>getPixelSize</B>(int&nbsp;pixelFormat)
                         throws java.lang.Exception</PRE>
 <DL>
-<DD>Returns the pixel size (in bytes) of the given pixel format.
+<DD>Returns the pixel size (in bytes) for the given pixel format.
 <P>
 <DD><DL>
 <DT><B>Parameters:</B><DD><CODE>pixelFormat</CODE> - the pixel format (one of <code>PF_*</code>)
-<DT><B>Returns:</B><DD>the pixel size (in bytes) of the given pixel format
+<DT><B>Returns:</B><DD>the pixel size (in bytes) for the given pixel format
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
 </DD>
@@ -979,15 +978,13 @@ public static int <B>bufSize</B>(int&nbsp;width,
                    throws java.lang.Exception</PRE>
 <DL>
 <DD>Returns the maximum size of the buffer (in bytes) required to hold a JPEG
- image with the given width and height, and level of chrominance
- subsampling.
+ image with the given width, height, and level of chrominance subsampling.
 <P>
 <DD><DL>
 <DT><B>Parameters:</B><DD><CODE>width</CODE> - the width (in pixels) of the JPEG image<DD><CODE>height</CODE> - the height (in pixels) of the JPEG image<DD><CODE>jpegSubsamp</CODE> - the level of chrominance subsampling to be used when
  generating the JPEG image (one of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.SAMP_*</CODE></A>)
 <DT><B>Returns:</B><DD>the maximum size of the buffer (in bytes) required to hold a JPEG
- image with the given width and height, and level of chrominance
- subsampling
+ image with the given width, height, and level of chrominance subsampling
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
 </DD>
index 1c7088a..935db0e 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
 <TITLE>
 TJCompressor
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
@@ -129,8 +127,21 @@ TurboJPEG compressor
              int&nbsp;pixelFormat)</CODE>
 
 <BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Use
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int, int, int)"><CODE>TJCompressor(byte[], int, int, int, int, int, int)</CODE></A> instead.</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int, int, int)">TJCompressor</A></B>(byte[]&nbsp;srcImage,
+             int&nbsp;x,
+             int&nbsp;y,
+             int&nbsp;width,
+             int&nbsp;pitch,
+             int&nbsp;height,
+             int&nbsp;pixelFormat)</CODE>
+
+<BR>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a TurboJPEG compressor instance and associate the uncompressed
- source image stored in <code>srcImage</code> with the newly-created
+ source image stored in <code>srcImage</code> with the newly created
  instance.</TD>
 </TR>
 </TABLE>
@@ -266,6 +277,21 @@ TurboJPEG compressor
                int&nbsp;pixelFormat)</CODE>
 
 <BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Use
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> instead.</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)">setSourceImage</A></B>(byte[]&nbsp;srcImage,
+               int&nbsp;x,
+               int&nbsp;y,
+               int&nbsp;width,
+               int&nbsp;pitch,
+               int&nbsp;height,
+               int&nbsp;pixelFormat)</CODE>
+
+<BR>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associate an uncompressed source image with this compressor instance.</TD>
 </TR>
 <TR BGCOLOR="white" CLASS="TableRowColor">
@@ -315,10 +341,12 @@ public <B>TJCompressor</B>()
 </DL>
 <HR>
 
-<A NAME="TJCompressor(byte[], int, int, int, int)"><!-- --></A><H3>
+<A NAME="TJCompressor(byte[], int, int, int, int, int, int)"><!-- --></A><H3>
 TJCompressor</H3>
 <PRE>
 public <B>TJCompressor</B>(byte[]&nbsp;srcImage,
+                    int&nbsp;x,
+                    int&nbsp;y,
                     int&nbsp;width,
                     int&nbsp;pitch,
                     int&nbsp;height,
@@ -326,11 +354,33 @@ public <B>TJCompressor</B>(byte[]&nbsp;srcImage,
              throws java.lang.Exception</PRE>
 <DL>
 <DD>Create a TurboJPEG compressor instance and associate the uncompressed
- source image stored in <code>srcImage</code> with the newly-created
+ source image stored in <code>srcImage</code> with the newly created
  instance.
 <P>
 <DL>
-<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int)</CODE></A> for description<DD><CODE>width</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int)</CODE></A> for description<DD><CODE>pitch</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int)</CODE></A> for description<DD><CODE>height</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int)</CODE></A> for description<DD><CODE>pixelFormat</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int)</CODE></A> for description
+<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>x</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>y</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>width</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>pitch</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>height</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>pixelFormat</CODE> - pixel format of the source image (one of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#PF_RGB"><CODE>TJ.PF_*</CODE></A>)
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.Exception</CODE></DL>
+</DL>
+<HR>
+
+<A NAME="TJCompressor(byte[], int, int, int, int)"><!-- --></A><H3>
+TJCompressor</H3>
+<PRE>
+<FONT SIZE="-1">@Deprecated
+</FONT>public <B>TJCompressor</B>(byte[]&nbsp;srcImage,
+                               int&nbsp;width,
+                               int&nbsp;pitch,
+                               int&nbsp;height,
+                               int&nbsp;pixelFormat)
+             throws java.lang.Exception</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>Use
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int, int, int)"><CODE>TJCompressor(byte[], int, int, int, int, int, int)</CODE></A> instead.</I>
+<P>
+<DL>
+
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
 </DL>
@@ -345,10 +395,12 @@ public <B>TJCompressor</B>(byte[]&nbsp;srcImage,
 </TR>
 </TABLE>
 
-<A NAME="setSourceImage(byte[], int, int, int, int)"><!-- --></A><H3>
+<A NAME="setSourceImage(byte[], int, int, int, int, int, int)"><!-- --></A><H3>
 setSourceImage</H3>
 <PRE>
 public void <B>setSourceImage</B>(byte[]&nbsp;srcImage,
+                           int&nbsp;x,
+                           int&nbsp;y,
                            int&nbsp;width,
                            int&nbsp;pitch,
                            int&nbsp;height,
@@ -359,15 +411,41 @@ public void <B>setSourceImage</B>(byte[]&nbsp;srcImage,
 <P>
 <DD><DL>
 <DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - image buffer containing RGB or grayscale pixels to be
- compressed<DD><CODE>width</CODE> - width (in pixels) of the source image<DD><CODE>pitch</CODE> - bytes per line of the source image.  Normally, this should be
+ compressed or encoded<DD><CODE>x</CODE> - x offset (in pixels) of the region in the source image from which
+ the JPEG or YUV image should be compressed/encoded<DD><CODE>y</CODE> - y offset (in pixels) of the region in the source image from which
+ the JPEG or YUV image should be compressed/encoded<DD><CODE>width</CODE> - width (in pixels) of the region in the source image from
+ which the JPEG or YUV image should be compressed/encoded<DD><CODE>pitch</CODE> - bytes per line of the source image.  Normally, this should be
  <code>width * TJ.pixelSize(pixelFormat)</code> if the source image is
  unpadded, but you can use this parameter to, for instance, specify that
- the scanlines in the source image are padded to 4-byte boundaries, as is
- the case for Windows bitmaps.  You can also be clever and use this
- parameter to skip lines, etc.  Setting this parameter to 0 is the
- equivalent of setting it to <code>width *
- TJ.pixelSize(pixelFormat)</code>.<DD><CODE>height</CODE> - height (in pixels) of the source image<DD><CODE>pixelFormat</CODE> - pixel format of the source image (one of
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)
+ the scanlines in the source image are padded to a 4-byte boundary or to
+ compress/encode a JPEG or YUV image from a region of a larger source
+ image.  You can also be clever and use this parameter to skip lines, etc.
+ Setting this parameter to 0 is the equivalent of setting it to
+ <code>width * TJ.pixelSize(pixelFormat)</code>.<DD><CODE>height</CODE> - height (in pixels) of the region in the source image from
+ which the JPEG or YUV image should be compressed/encoded<DD><CODE>pixelFormat</CODE> - pixel format of the source image (one of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#PF_RGB"><CODE>TJ.PF_*</CODE></A>)
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.Exception</CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setSourceImage(byte[], int, int, int, int)"><!-- --></A><H3>
+setSourceImage</H3>
+<PRE>
+<FONT SIZE="-1">@Deprecated
+</FONT>public void <B>setSourceImage</B>(byte[]&nbsp;srcImage,
+                                      int&nbsp;width,
+                                      int&nbsp;pitch,
+                                      int&nbsp;height,
+                                      int&nbsp;pixelFormat)
+                    throws java.lang.Exception</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>Use
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> instead.</I>
+<P>
+<DD><DL>
+
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
 </DD>
@@ -384,8 +462,9 @@ public void <B>setSubsamp</B>(int&nbsp;newSubsamp)
  operations.
 <P>
 <DD><DL>
-<DT><B>Parameters:</B><DD><CODE>newSubsamp</CODE> - the new level of chrominance subsampling (one of
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.SAMP_*</CODE></A>)
+<DT><B>Parameters:</B><DD><CODE>newSubsamp</CODE> - the level of chrominance subsampling to use in
+ subsequent compress/encode operations (one of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#SAMP_444"><CODE>TJ.SAMP_*</CODE></A>)
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
 </DD>
@@ -422,7 +501,9 @@ public void <B>compress</B>(byte[]&nbsp;dstBuf,
 <DD><DL>
 <DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the JPEG image.  Use
  <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#bufSize(int, int, int)"><CODE>TJ.bufSize(int, int, int)</CODE></A> to determine the maximum size for this buffer based on
- the image width and height.<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ the source image's width and height and the desired level of chrominance
+ subsampling.<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
 </DD>
@@ -439,7 +520,8 @@ public byte[] <B>compress</B>(int&nbsp;flags)
  instance and return a buffer containing a JPEG image.
 <P>
 <DD><DL>
-<DT><B>Parameters:</B><DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
 <DT><B>Returns:</B><DD>a buffer containing a JPEG image.  The length of this buffer will
  not be equal to the size of the JPEG image.  Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#getCompressedSize()"><CODE>getCompressedSize()</CODE></A> to obtain the size of the JPEG image.
 <DT><B>Throws:</B>
@@ -463,7 +545,8 @@ public void <B>compress</B>(java.awt.image.BufferedImage&nbsp;srcImage,
 <DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - a <code>BufferedImage</code> instance containing RGB or
  grayscale pixels to be compressed<DD><CODE>dstBuf</CODE> - buffer that will receive the JPEG image.  Use
  <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#bufSize(int, int, int)"><CODE>TJ.bufSize(int, int, int)</CODE></A> to determine the maximum size for this buffer based on
- the image width and height.<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ the image width, height, and level of chrominance subsampling.<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
 </DD>
@@ -482,7 +565,8 @@ public byte[] <B>compress</B>(java.awt.image.BufferedImage&nbsp;srcImage,
 <P>
 <DD><DL>
 <DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - a <code>BufferedImage</code> instance containing RGB or
- grayscale pixels to be compressed<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ grayscale pixels to be compressed<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
 <DT><B>Returns:</B><DD>a buffer containing a JPEG image.  The length of this buffer will
  not be equal to the size of the JPEG image.  Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#getCompressedSize()"><CODE>getCompressedSize()</CODE></A> to obtain the size of the JPEG image.
 <DT><B>Throws:</B>
@@ -504,18 +588,23 @@ public void <B>encodeYUV</B>(byte[]&nbsp;dstBuf,
  TurboJPEG's underlying codec to produce a planar YUV image that is
  suitable for direct video display.  Specifically, if the chrominance
  components are subsampled along the horizontal dimension, then the width
- of the luminance plane is padded to 2 in the output image (same goes for
- the height of the luminance plane, if the chrominance components are
- subsampled along the vertical dimension.)  Also, each line of each plane
- in the output image is padded to 4 bytes.  Although this will work with
- any subsampling option, it is really only useful in combination with
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#SAMP_420"><CODE>TJ.SAMP_420</CODE></A>, which produces an image compatible with the I420 (AKA
- "YUV420P") format.
+ of the luminance plane is padded to the nearest multiple of 2 in the
+ output image (same goes for the height of the luminance plane, if the
+ chrominance components are subsampled along the vertical dimension.)
+ Also, each line of each plane in the output image is padded to 4 bytes.
+ Although this will work with any subsampling option, it is really only
+ useful in combination with <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#SAMP_420"><CODE>TJ.SAMP_420</CODE></A>, which produces an image
+ compatible with the I420 (AKA "YUV420P") format.
+ <p>
+ NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the
+ convention of the digital video community, the TurboJPEG API uses "YUV" to
+ refer to an image format consisting of Y, Cb, and Cr image planes.
 <P>
 <DD><DL>
 <DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the YUV planar image.  Use
  <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#bufSizeYUV(int, int, int)"><CODE>TJ.bufSizeYUV(int, int, int)</CODE></A> to determine the appropriate size for this buffer
- based on the image width, height, and level of chrominance subsampling.<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ based on the image width, height, and level of chrominance subsampling.<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
 </DD>
@@ -533,7 +622,8 @@ public byte[] <B>encodeYUV</B>(int&nbsp;flags)
  <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(byte[], int)"><CODE>encodeYUV(byte[], int)</CODE></A> for more detail.
 <P>
 <DD><DL>
-<DT><B>Parameters:</B><DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
 <DT><B>Returns:</B><DD>a buffer containing a YUV planar image
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
@@ -557,7 +647,8 @@ public void <B>encodeYUV</B>(java.awt.image.BufferedImage&nbsp;srcImage,
 <DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - a <code>BufferedImage</code> instance containing RGB or
  grayscale pixels to be encoded<DD><CODE>dstBuf</CODE> - buffer that will receive the YUV planar image.  Use
  <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#bufSizeYUV(int, int, int)"><CODE>TJ.bufSizeYUV(int, int, int)</CODE></A> to determine the appropriate size for this buffer
- based on the image width, height, and level of chrominance subsampling.<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ based on the image width, height, and level of chrominance subsampling.<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
 </DD>
@@ -577,7 +668,8 @@ public byte[] <B>encodeYUV</B>(java.awt.image.BufferedImage&nbsp;srcImage,
 <P>
 <DD><DL>
 <DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - a <code>BufferedImage</code> instance containing RGB or
- grayscale pixels to be encoded<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ grayscale pixels to be encoded<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
 <DT><B>Returns:</B><DD>a buffer containing a YUV planar image
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
index 9a3b56e..3291c71 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
 <TITLE>
 TJCustomFilter
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
@@ -124,7 +122,7 @@ Custom filter callback interface
 <BR>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A callback function that can be used to modify the DCT coefficients after
  they are losslessly transformed but before they are transcoded to a new
- JPEG file.</TD>
+ JPEG image.</TD>
 </TR>
 </TABLE>
 &nbsp;
@@ -153,7 +151,7 @@ void <B>customFilter</B>(java.nio.ShortBuffer&nbsp;coeffBuffer,
 <DL>
 <DD>A callback function that can be used to modify the DCT coefficients after
  they are losslessly transformed but before they are transcoded to a new
- JPEG file.  This allows for custom filters or other transformations to be
+ JPEG image.  This allows for custom filters or other transformations to be
  applied in the frequency domain.
 <P>
 <DD><DL>
@@ -167,10 +165,10 @@ void <B>customFilter</B>(java.nio.ShortBuffer&nbsp;coeffBuffer,
  into multiple DCT coefficient buffers and call the callback function once
  for each buffer.<DD><CODE>planeRegion</CODE> - rectangle containing the width and height of the
  component plane to which <code>coeffBuffer</code> belongs<DD><CODE>componentID</CODE> - ID number of the component plane to which
- <code>coeffBuffer</code>belongs (Y, Cb, and Cr have, respectively, ID's of
- 0, 1, and 2 in typical JPEG images.)<DD><CODE>transformID</CODE> - ID number of the transformed image to which
+ <code>coeffBuffer</code> belongs (Y, Cb, and Cr have, respectively, ID's
of 0, 1, and 2 in typical JPEG images.)<DD><CODE>transformID</CODE> - ID number of the transformed image to which
  <code>coeffBuffer</code> belongs.  This is the same as the index of the
- transform in the transforms array that was passed to <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransformer.html#transform(byte[][], org.libjpegturbo.turbojpeg.TJTransform[], int)"><CODE>TJTransformer.transform()</CODE></A>.<DD><CODE>transform</CODE> - a <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransform.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJTransform</CODE></A> instance that specifies the
+ transform in the <code>transforms</code> array that was passed to <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransformer.html#transform(byte[][], org.libjpegturbo.turbojpeg.TJTransform[], int)"><CODE>TJTransformer.transform()</CODE></A>.<DD><CODE>transform</CODE> - a <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransform.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJTransform</CODE></A> instance that specifies the
  parameters and/or cropping region for this transform
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
index 2505470..d69f943 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
 <TITLE>
 TJDecompressor
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
@@ -186,7 +184,7 @@ TurboJPEG decompressor
 
 <BR>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a TurboJPEG decompressor instance and associate the JPEG image
- stored in <code>jpegImage</code> with the newly-created instance.</TD>
+ stored in <code>jpegImage</code> with the newly created instance.</TD>
 </TR>
 <TR BGCOLOR="white" CLASS="TableRowColor">
 <TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#TJDecompressor(byte[], int)">TJDecompressor</A></B>(byte[]&nbsp;jpegImage,
@@ -195,7 +193,7 @@ TurboJPEG decompressor
 <BR>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a TurboJPEG decompressor instance and associate the JPEG image
  of length <code>imageSize</code> bytes stored in <code>jpegImage</code>
- with the newly-created instance.</TD>
+ with the newly created instance.</TD>
 </TR>
 </TABLE>
 &nbsp;
@@ -237,6 +235,38 @@ TurboJPEG decompressor
            int&nbsp;flags)</CODE>
 
 <BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Use
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A> instead.</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)">decompress</A></B>(byte[]&nbsp;dstBuf,
+           int&nbsp;x,
+           int&nbsp;y,
+           int&nbsp;desiredWidth,
+           int&nbsp;pitch,
+           int&nbsp;desiredHeight,
+           int&nbsp;pixelFormat,
+           int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Decompress the JPEG source image associated with this decompressor
+ instance and output a decompressed image to the given destination buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int[], int, int, int, int, int, int, int)">decompress</A></B>(int[]&nbsp;dstBuf,
+           int&nbsp;x,
+           int&nbsp;y,
+           int&nbsp;desiredWidth,
+           int&nbsp;stride,
+           int&nbsp;desiredHeight,
+           int&nbsp;pixelFormat,
+           int&nbsp;flags)</CODE>
+
+<BR>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Decompress the JPEG source image associated with this decompressor
  instance and output a decompressed image to the given destination buffer.</TD>
 </TR>
@@ -326,7 +356,7 @@ TurboJPEG decompressor
                 int&nbsp;desiredHeight)</CODE>
 
 <BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the height of the largest scaled down image that the TurboJPEG
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the height of the largest scaled-down image that the TurboJPEG
  decompressor can generate without exceeding the desired image width and
  height.</TD>
 </TR>
@@ -337,7 +367,7 @@ TurboJPEG decompressor
                int&nbsp;desiredHeight)</CODE>
 
 <BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the width of the largest scaled down image that the TurboJPEG
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the width of the largest scaled-down image that the TurboJPEG
  decompressor can generate without exceeding the desired image width and
  height.</TD>
 </TR>
@@ -483,7 +513,7 @@ public <B>TJDecompressor</B>(byte[]&nbsp;jpegImage)
                throws java.lang.Exception</PRE>
 <DL>
 <DD>Create a TurboJPEG decompressor instance and associate the JPEG image
- stored in <code>jpegImage</code> with the newly-created instance.
+ stored in <code>jpegImage</code> with the newly created instance.
 <P>
 <DL>
 <DT><B>Parameters:</B><DD><CODE>jpegImage</CODE> - JPEG image buffer (size of the JPEG image is assumed to
@@ -502,7 +532,7 @@ public <B>TJDecompressor</B>(byte[]&nbsp;jpegImage,
 <DL>
 <DD>Create a TurboJPEG decompressor instance and associate the JPEG image
  of length <code>imageSize</code> bytes stored in <code>jpegImage</code>
- with the newly-created instance.
+ with the newly created instance.
 <P>
 <DL>
 <DT><B>Parameters:</B><DD><CODE>jpegImage</CODE> - JPEG image buffer<DD><CODE>imageSize</CODE> - size of the JPEG image (in bytes)
@@ -584,7 +614,7 @@ public int <B>getSubsamp</B>()
                throws java.lang.Exception</PRE>
 <DL>
 <DD>Returns the level of chrominance subsampling used in the JPEG image
- associated with this decompressor instance.
+ associated with this decompressor instance.  See <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.SAMP_*</CODE></A>.
 <P>
 <DD><DL>
 
@@ -639,7 +669,7 @@ public int <B>getScaledWidth</B>(int&nbsp;desiredWidth,
                           int&nbsp;desiredHeight)
                    throws java.lang.Exception</PRE>
 <DL>
-<DD>Returns the width of the largest scaled down image that the TurboJPEG
+<DD>Returns the width of the largest scaled-down image that the TurboJPEG
  decompressor can generate without exceeding the desired image width and
  height.
 <P>
@@ -651,7 +681,7 @@ public int <B>getScaledWidth</B>(int&nbsp;desiredWidth,
  Setting this to 0 is the same as setting it to the height of the JPEG
  image (in other words, the height will not be considered when determining
  the scaled image size.)
-<DT><B>Returns:</B><DD>the width of the largest scaled down image that the TurboJPEG
+<DT><B>Returns:</B><DD>the width of the largest scaled-down image that the TurboJPEG
  decompressor can generate without exceeding the desired image width and
  height
 <DT><B>Throws:</B>
@@ -667,7 +697,7 @@ public int <B>getScaledHeight</B>(int&nbsp;desiredWidth,
                            int&nbsp;desiredHeight)
                     throws java.lang.Exception</PRE>
 <DL>
-<DD>Returns the height of the largest scaled down image that the TurboJPEG
+<DD>Returns the height of the largest scaled-down image that the TurboJPEG
  decompressor can generate without exceeding the desired image width and
  height.
 <P>
@@ -679,7 +709,7 @@ public int <B>getScaledHeight</B>(int&nbsp;desiredWidth,
  Setting this to 0 is the same as setting it to the height of the JPEG
  image (in other words, the height will not be considered when determining
  the scaled image size.)
-<DT><B>Returns:</B><DD>the height of the largest scaled down image that the TurboJPEG
+<DT><B>Returns:</B><DD>the height of the largest scaled-down image that the TurboJPEG
  decompressor can generate without exceeding the desired image width and
  height
 <DT><B>Throws:</B>
@@ -688,10 +718,12 @@ public int <B>getScaledHeight</B>(int&nbsp;desiredWidth,
 </DL>
 <HR>
 
-<A NAME="decompress(byte[], int, int, int, int, int)"><!-- --></A><H3>
+<A NAME="decompress(byte[], int, int, int, int, int, int, int)"><!-- --></A><H3>
 decompress</H3>
 <PRE>
 public void <B>decompress</B>(byte[]&nbsp;dstBuf,
+                       int&nbsp;x,
+                       int&nbsp;y,
                        int&nbsp;desiredWidth,
                        int&nbsp;pitch,
                        int&nbsp;desiredHeight,
@@ -707,28 +739,59 @@ public void <B>decompress</B>(byte[]&nbsp;dstBuf,
  buffer should normally be <code>pitch * scaledHeight</code> bytes in size,
  where <code>scaledHeight</code> can be determined by calling <code>
  scalingFactor.<A HREF="../../../org/libjpegturbo/turbojpeg/TJScalingFactor.html#getScaled(int)"><CODE>getScaled</CODE></A>(jpegHeight)
- </code> with one of the scaling factors returned from <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getScalingFactors()"><CODE>TJ.getScalingFactors()</CODE></A> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)"><CODE>getScaledHeight(int, int)</CODE></A>.<DD><CODE>desiredWidth</CODE> - desired width (in pixels) of the decompressed image.
- If the desired image dimensions are smaller than the dimensions of the
- JPEG image being decompressed, then TurboJPEG will use scaling in the JPEG
- decompressor to generate the largest possible image that will fit within
- the desired dimensions.  Setting this to 0 is the same as setting it to
- the width of the JPEG image (in other words, the width will not be
- considered when determining the scaled image size.)<DD><CODE>pitch</CODE> - bytes per line of the destination image.  Normally, this
+ </code> with one of the scaling factors returned from <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getScalingFactors()"><CODE>TJ.getScalingFactors()</CODE></A> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)"><CODE>getScaledHeight(int, int)</CODE></A>.  However,
+ the buffer may also be larger than the dimensions of the JPEG image, in
+ which case the <code>x</code>, <code>y</code>, and <code>pitch</code>
+ parameters can be used to specify the region into which the JPEG image
+ should be decompressed.<DD><CODE>x</CODE> - x offset (in pixels) of the region into which the JPEG image
+ should be decompressed, relative to the start of <code>dstBuf</code>.<DD><CODE>y</CODE> - y offset (in pixels) of the region into which the JPEG image
+ should be decompressed, relative to the start of <code>dstBuf</code>.<DD><CODE>desiredWidth</CODE> - desired width (in pixels) of the decompressed image
+ (or image region.)  If the desired image dimensions are different than the
+ dimensions of the JPEG image being decompressed, then TurboJPEG will use
+ scaling in the JPEG decompressor to generate the largest possible image
+ that will fit within the desired dimensions.  Setting this to 0 is the
+ same as setting it to the width of the JPEG image (in other words, the
+ width will not be considered when determining the scaled image size.)<DD><CODE>pitch</CODE> - bytes per line of the destination image.  Normally, this
  should be set to <code>scaledWidth * TJ.pixelSize(pixelFormat)</code> if
  the decompressed image is unpadded, but you can use this to, for instance,
- pad each line of the decompressed image to a 4-byte boundary.  NOTE:
+ pad each line of the decompressed image to a 4-byte boundary or to
+ decompress the JPEG image into a region of a larger image.  NOTE:
  <code>scaledWidth</code> can be determined by calling <code>
  scalingFactor.<A HREF="../../../org/libjpegturbo/turbojpeg/TJScalingFactor.html#getScaled(int)"><CODE>getScaled</CODE></A>(jpegWidth)
  </code> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)"><CODE>getScaledWidth(int, int)</CODE></A>.  Setting this parameter to
  0 is the equivalent of setting it to <code>scaledWidth *
- TJ.pixelSize(pixelFormat)</code>.<DD><CODE>desiredHeight</CODE> - desired height (in pixels) of the decompressed image.
- If the desired image dimensions are smaller than the dimensions of the
- JPEG image being decompressed, then TurboJPEG will use scaling in the JPEG
- decompressor to generate the largest possible image that will fit within
- the desired dimensions.  Setting this to 0 is the same as setting it to
- the height of the JPEG image (in other words, the height will not be
- considered when determining the scaled image size.)<DD><CODE>pixelFormat</CODE> - pixel format of the decompressed image (one of
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ TJ.pixelSize(pixelFormat)</code>.<DD><CODE>desiredHeight</CODE> - desired height (in pixels) of the decompressed image
+ (or image region.)  If the desired image dimensions are different than the
+ dimensions of the JPEG image being decompressed, then TurboJPEG will use
+ scaling in the JPEG decompressor to generate the largest possible image
+ that will fit within the desired dimensions.  Setting this to 0 is the
+ same as setting it to the height of the JPEG image (in other words, the
+ height will not be considered when determining the scaled image size.)<DD><CODE>pixelFormat</CODE> - pixel format of the decompressed/decoded image (one of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#PF_RGB"><CODE>TJ.PF_*</CODE></A>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.Exception</CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="decompress(byte[], int, int, int, int, int)"><!-- --></A><H3>
+decompress</H3>
+<PRE>
+<FONT SIZE="-1">@Deprecated
+</FONT>public void <B>decompress</B>(byte[]&nbsp;dstBuf,
+                                  int&nbsp;desiredWidth,
+                                  int&nbsp;pitch,
+                                  int&nbsp;desiredHeight,
+                                  int&nbsp;pixelFormat,
+                                  int&nbsp;flags)
+                throws java.lang.Exception</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>Use
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A> instead.</I>
+<P>
+<DD><DL>
+
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
 </DD>
@@ -750,10 +813,14 @@ public byte[] <B>decompress</B>(int&nbsp;desiredWidth,
 <P>
 <DD><DL>
 <DT><B>Parameters:</B><DD><CODE>desiredWidth</CODE> - see
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int)</CODE></A> for description<DD><CODE>pitch</CODE> - see
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int)</CODE></A> for description<DD><CODE>desiredHeight</CODE> - see
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int)</CODE></A> for description<DD><CODE>pixelFormat</CODE> - pixel format of the decompressed image (one of
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A>
+ for description<DD><CODE>pitch</CODE> - see
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A>
+ for description<DD><CODE>desiredHeight</CODE> - see
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A>
+ for description<DD><CODE>pixelFormat</CODE> - pixel format of the decompressed image (one of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#PF_RGB"><CODE>TJ.PF_*</CODE></A>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
 <DT><B>Returns:</B><DD>a buffer containing the decompressed image
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
@@ -772,16 +839,18 @@ public void <B>decompressToYUV</B>(byte[]&nbsp;dstBuf,
  instance and output a YUV planar image to the given destination buffer.
  This method performs JPEG decompression but leaves out the color
  conversion step, so a planar YUV image is generated instead of an RGB
- image.  The padding of the planes in this image is the same as the images
- generated by <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(byte[], int)"><CODE>TJCompressor.encodeYUV(byte[], int)</CODE></A>.  Note that, if
- the width or height of the image is not an even multiple of the MCU block
- size (see <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getMCUWidth(int)"><CODE>TJ.getMCUWidth(int)</CODE></A> and <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getMCUHeight(int)"><CODE>TJ.getMCUHeight(int)</CODE></A>), then an
- intermediate buffer copy will be performed within TurboJPEG.
+ image.  The padding of the planes in this image is the same as in the
+ images generated by <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(byte[], int)"><CODE>TJCompressor.encodeYUV(byte[], int)</CODE></A>.
+ <p>
+ NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the
+ convention of the digital video community, the TurboJPEG API uses "YUV" to
+ refer to an image format consisting of Y, Cb, and Cr image planes.
 <P>
 <DD><DL>
 <DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the YUV planar image.  Use
  <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#bufSizeYUV(int, int, int)"><CODE>TJ.bufSizeYUV(int, int, int)</CODE></A> to determine the appropriate size for this buffer
- based on the image width, height, and level of chrominance subsampling.<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ based on the image width, height, and level of chrominance subsampling.<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
 </DD>
@@ -798,7 +867,8 @@ public byte[] <B>decompressToYUV</B>(int&nbsp;flags)
  instance and return a buffer containing a YUV planar image.  See <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int)"><CODE>decompressToYUV(byte[], int)</CODE></A> for more detail.
 <P>
 <DD><DL>
-<DT><B>Parameters:</B><DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
 <DT><B>Returns:</B><DD>a buffer containing a YUV planar image
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
@@ -806,6 +876,60 @@ public byte[] <B>decompressToYUV</B>(int&nbsp;flags)
 </DL>
 <HR>
 
+<A NAME="decompress(int[], int, int, int, int, int, int, int)"><!-- --></A><H3>
+decompress</H3>
+<PRE>
+public void <B>decompress</B>(int[]&nbsp;dstBuf,
+                       int&nbsp;x,
+                       int&nbsp;y,
+                       int&nbsp;desiredWidth,
+                       int&nbsp;stride,
+                       int&nbsp;desiredHeight,
+                       int&nbsp;pixelFormat,
+                       int&nbsp;flags)
+                throws java.lang.Exception</PRE>
+<DL>
+<DD>Decompress the JPEG source image associated with this decompressor
+ instance and output a decompressed image to the given destination buffer.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the decompressed image.  This
+ buffer should normally be <code>stride * scaledHeight</code> pixels in
+ size, where <code>scaledHeight</code> can be determined by calling <code>
+ scalingFactor.<A HREF="../../../org/libjpegturbo/turbojpeg/TJScalingFactor.html#getScaled(int)"><CODE>getScaled</CODE></A>(jpegHeight)
+ </code> with one of the scaling factors returned from <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getScalingFactors()"><CODE>TJ.getScalingFactors()</CODE></A> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)"><CODE>getScaledHeight(int, int)</CODE></A>.  However,
+ the buffer may also be larger than the dimensions of the JPEG image, in
+ which case the <code>x</code>, <code>y</code>, and <code>stride</code>
+ parameters can be used to specify the region into which the JPEG image
+ should be decompressed.<DD><CODE>x</CODE> - x offset (in pixels) of the region into which the JPEG image
+ should be decompressed, relative to the start of <code>dstBuf</code>.<DD><CODE>y</CODE> - y offset (in pixels) of the region into which the JPEG image
+ should be decompressed, relative to the start of <code>dstBuf</code>.<DD><CODE>desiredWidth</CODE> - desired width (in pixels) of the decompressed image
+ (or image region.)  If the desired image dimensions are different than the
+ dimensions of the JPEG image being decompressed, then TurboJPEG will use
+ scaling in the JPEG decompressor to generate the largest possible image
+ that will fit within the desired dimensions.  Setting this to 0 is the
+ same as setting it to the width of the JPEG image (in other words, the
+ width will not be considered when determining the scaled image size.)<DD><CODE>stride</CODE> - pixels per line of the destination image.  Normally, this
+ should be set to <code>scaledWidth</code>, but you can use this to, for
+ instance, decompress the JPEG image into a region of a larger image.
+ NOTE: <code>scaledWidth</code> can be determined by calling <code>
+ scalingFactor.<A HREF="../../../org/libjpegturbo/turbojpeg/TJScalingFactor.html#getScaled(int)"><CODE>getScaled</CODE></A>(jpegWidth)
+ </code> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)"><CODE>getScaledWidth(int, int)</CODE></A>.  Setting this parameter to
+ 0 is the equivalent of setting it to <code>scaledWidth</code>.<DD><CODE>desiredHeight</CODE> - desired height (in pixels) of the decompressed image
+ (or image region.)  If the desired image dimensions are different than the
+ dimensions of the JPEG image being decompressed, then TurboJPEG will use
+ scaling in the JPEG decompressor to generate the largest possible image
+ that will fit within the desired dimensions.  Setting this to 0 is the
+ same as setting it to the height of the JPEG image (in other words, the
+ height will not be considered when determining the scaled image size.)<DD><CODE>pixelFormat</CODE> - pixel format of the decompressed image (one of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#PF_RGB"><CODE>TJ.PF_*</CODE></A>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.Exception</CODE></DL>
+</DD>
+</DL>
+<HR>
+
 <A NAME="decompress(java.awt.image.BufferedImage, int)"><!-- --></A><H3>
 decompress</H3>
 <PRE>
@@ -819,7 +943,10 @@ public void <B>decompress</B>(java.awt.image.BufferedImage&nbsp;dstImage,
 <P>
 <DD><DL>
 <DT><B>Parameters:</B><DD><CODE>dstImage</CODE> - a <code>BufferedImage</code> instance that will receive
- the decompressed image<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ the decompressed image.  The width and height of the
+ <code>BufferedImage</code> instance must match one of the scaled image
+ sizes that TurboJPEG is capable of generating from the JPEG image.<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
 </DD>
@@ -841,10 +968,13 @@ public java.awt.image.BufferedImage <B>decompress</B>(int&nbsp;desiredWidth,
 <P>
 <DD><DL>
 <DT><B>Parameters:</B><DD><CODE>desiredWidth</CODE> - see
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int)</CODE></A> for description<DD><CODE>desiredHeight</CODE> - see
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int)</CODE></A> for description<DD><CODE>bufferedImageType</CODE> - the image type of the newly-created
- <code>BufferedImage</code> instance (for instance,
- <code>BufferedImage.TYPE_INT_RGB</code>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A> for
+ description<DD><CODE>desiredHeight</CODE> - see
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A> for
+ description<DD><CODE>bufferedImageType</CODE> - the image type of the <code>BufferedImage</code>
+ instance that will be created (for instance,
+ <code>BufferedImage.TYPE_INT_RGB</code>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
 <DT><B>Returns:</B><DD>a <code>BufferedImage</code> instance containing the
  decompressed image
 <DT><B>Throws:</B>
index 4964a29..af29fc5 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
 <TITLE>
 TJScalingFactor
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
index ebb9644..3a68c9f 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
 <TITLE>
 TJTransform
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
@@ -676,8 +674,10 @@ public <B>TJTransform</B>(int&nbsp;x,
 <DT><B>Parameters:</B><DD><CODE>x</CODE> - the left boundary of the cropping region.  This must be evenly
  divisible by the MCU block width (see <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getMCUWidth(int)"><CODE>TJ.getMCUWidth(int)</CODE></A>)<DD><CODE>y</CODE> - the upper boundary of the cropping region.  This must be evenly
  divisible by the MCU block height (see <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getMCUHeight(int)"><CODE>TJ.getMCUHeight(int)</CODE></A>)<DD><CODE>w</CODE> - the width of the cropping region.  Setting this to 0 is the
- equivalent of setting it to the width of the source JPEG image - x.<DD><CODE>h</CODE> - the height of the cropping region.  Setting this to 0 is the
- equivalent of setting it to the height of the source JPEG image - y.<DD><CODE>op</CODE> - one of the transform operations (<code>OP_*</code>)<DD><CODE>options</CODE> - the bitwise OR of one or more of the transform options
+ equivalent of setting it to (width of the source JPEG image -
+ <code>x</code>).<DD><CODE>h</CODE> - the height of the cropping region.  Setting this to 0 is the
+ equivalent of setting it to (height of the source JPEG image -
+ <code>y</code>).<DD><CODE>op</CODE> - one of the transform operations (<code>OP_*</code>)<DD><CODE>options</CODE> - the bitwise OR of one or more of the transform options
  (<code>OPT_*</code>)<DD><CODE>cf</CODE> - an instance of an object that implements the <A HREF="../../../org/libjpegturbo/turbojpeg/TJCustomFilter.html" title="interface in org.libjpegturbo.turbojpeg"><CODE>TJCustomFilter</CODE></A> interface, or null if no custom filter is needed
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
index df81c9c..c08f358 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
 <TITLE>
 TJTransformer
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
@@ -145,7 +143,7 @@ TurboJPEG lossless transformer
 
 <BR>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a TurboJPEG lossless transformer instance and associate the JPEG
- image stored in <code>jpegImage</code> with the newly-created instance.</TD>
+ image stored in <code>jpegImage</code> with the newly created instance.</TD>
 </TR>
 <TR BGCOLOR="white" CLASS="TableRowColor">
 <TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJTransformer.html#TJTransformer(byte[], int)">TJTransformer</A></B>(byte[]&nbsp;jpegImage,
@@ -154,7 +152,7 @@ TurboJPEG lossless transformer
 <BR>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a TurboJPEG lossless transformer instance and associate the JPEG
  image of length <code>imageSize</code> bytes stored in
- <code>jpegImage</code> with the newly-created instance.</TD>
+ <code>jpegImage</code> with the newly created instance.</TD>
 </TR>
 </TABLE>
 &nbsp;
@@ -172,8 +170,8 @@ TurboJPEG lossless transformer
 <TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJTransformer.html#getTransformedSizes()">getTransformedSizes</A></B>()</CODE>
 
 <BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the sizes of the transformed JPEG images from
the most recent call to <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransformer.html#transform(byte[][], org.libjpegturbo.turbojpeg.TJTransform[], int)"><CODE>transform()</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the sizes of the transformed JPEG images
generated by the most recent transform operation.</TD>
 </TR>
 <TR BGCOLOR="white" CLASS="TableRowColor">
 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -205,7 +203,7 @@ TurboJPEG lossless transformer
 <TH ALIGN="left"><B>Methods inherited from class org.libjpegturbo.turbojpeg.<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A></B></TH>
 </TR>
 <TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#close()">close</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(java.awt.image.BufferedImage, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int)">decompressToYUV</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(int)">decompressToYUV</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#finalize()">finalize</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getHeight()">getHeight</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGBuf()">getJPEGBuf</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGSize()">getJPEGSize</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)">getScaledHeight</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)">getScaledWidth</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getSubsamp()">getSubsamp</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getWidth()">getWidth</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#setJPEGImage(byte[], int)">setJPEGImage</A></CODE></TD>
+<TD><CODE><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#close()">close</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(java.awt.image.BufferedImage, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int[], int, int, int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int)">decompressToYUV</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(int)">decompressToYUV</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#finalize()">finalize</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getHeight()">getHeight</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGBuf()">getJPEGBuf</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGSize()">getJPEGSize</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)">getScaledHeight</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)">getScaledWidth</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getSubsamp()">getSubsamp</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getWidth()">getWidth</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#setJPEGImage(byte[], int)">setJPEGImage</A></CODE></TD>
 </TR>
 </TABLE>
 &nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
@@ -252,7 +250,7 @@ public <B>TJTransformer</B>(byte[]&nbsp;jpegImage)
               throws java.lang.Exception</PRE>
 <DL>
 <DD>Create a TurboJPEG lossless transformer instance and associate the JPEG
- image stored in <code>jpegImage</code> with the newly-created instance.
+ image stored in <code>jpegImage</code> with the newly created instance.
 <P>
 <DL>
 <DT><B>Parameters:</B><DD><CODE>jpegImage</CODE> - JPEG image buffer (size of the JPEG image is assumed to
@@ -271,7 +269,7 @@ public <B>TJTransformer</B>(byte[]&nbsp;jpegImage,
 <DL>
 <DD>Create a TurboJPEG lossless transformer instance and associate the JPEG
  image of length <code>imageSize</code> bytes stored in
- <code>jpegImage</code> with the newly-created instance.
+ <code>jpegImage</code> with the newly created instance.
 <P>
 <DL>
 <DT><B>Parameters:</B><DD><CODE>jpegImage</CODE> - JPEG image buffer<DD><CODE>imageSize</CODE> - size of the JPEG image (in bytes)
@@ -303,20 +301,22 @@ public void <B>transform</B>(byte[][]&nbsp;dstBufs,
  JPEG image structure to another without altering the values of the
  coefficients.  While this is typically faster than decompressing the
  image, transforming it, and re-compressing it, lossless transforms are not
- free.  Each lossless transform requires reading and Huffman decoding all
of the coefficients in the source image, regardless of the size of the
- destination image.  Thus, this method provides a means of generating
- multiple transformed images from the same source or of applying multiple
- transformations simultaneously, in order to eliminate the need to read the
- source coefficients multiple times.
+ free.  Each lossless transform requires reading and performing Huffman
decoding on all of the coefficients in the source image, regardless of the
+ size of the destination image.  Thus, this method provides a means of
+ generating multiple transformed images from the same source or of applying
+ multiple transformations simultaneously, in order to eliminate the need to
read the source coefficients multiple times.
 <P>
 <DD><DL>
 <DT><B>Parameters:</B><DD><CODE>dstBufs</CODE> - an array of image buffers.  <code>dstbufs[i]</code> will
  receive a JPEG image that has been transformed using the parameters in
  <code>transforms[i]</code>.  Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#bufSize(int, int, int)"><CODE>TJ.bufSize(int, int, int)</CODE></A> to determine the
- maximum size for each buffer based on the cropped width and height.<DD><CODE>transforms</CODE> - an array of <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransform.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJTransform</CODE></A> instances, each of
+ maximum size for each buffer based on the transformed or cropped width and
+ height and the level of subsampling used in the source image.<DD><CODE>transforms</CODE> - an array of <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransform.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJTransform</CODE></A> instances, each of
  which specifies the transform parameters and/or cropping region for the
- corresponding transformed output image<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ corresponding transformed output image<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
 </DD>
@@ -337,7 +337,8 @@ public <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html" title="
 <DD><DL>
 <DT><B>Parameters:</B><DD><CODE>transforms</CODE> - an array of <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransform.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJTransform</CODE></A> instances, each of
  which specifies the transform parameters and/or cropping region for the
- corresponding transformed output image<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ corresponding transformed output image<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
 <DT><B>Returns:</B><DD>an array of <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJDecompressor</CODE></A> instances, each of
  which has a transformed JPEG image associated with it
 <DT><B>Throws:</B>
@@ -352,13 +353,13 @@ getTransformedSizes</H3>
 public int[] <B>getTransformedSizes</B>()
                           throws java.lang.Exception</PRE>
 <DL>
-<DD>Returns an array containing the sizes of the transformed JPEG images from
the most recent call to <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransformer.html#transform(byte[][], org.libjpegturbo.turbojpeg.TJTransform[], int)"><CODE>transform()</CODE></A>.
+<DD>Returns an array containing the sizes of the transformed JPEG images
generated by the most recent transform operation.
 <P>
 <DD><DL>
 
-<DT><B>Returns:</B><DD>an array containing the sizes of the transformed JPEG images from
- the most recent call to <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransformer.html#transform(byte[][], org.libjpegturbo.turbojpeg.TJTransform[], int)"><CODE>transform()</CODE></A>
+<DT><B>Returns:</B><DD>an array containing the sizes of the transformed JPEG images
+ generated by the most recent transform operation
 <DT><B>Throws:</B>
 <DD><CODE>java.lang.Exception</CODE></DL>
 </DD>
index 562e570..f160418 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
 <TITLE>
 org.libjpegturbo.turbojpeg
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
index 600546c..505512c 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
 <TITLE>
 org.libjpegturbo.turbojpeg
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
index e33355b..e13143d 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
 <TITLE>
 org.libjpegturbo.turbojpeg Class Hierarchy
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
index fc5467a..1c12b10 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:14 CDT 2012 -->
 <TITLE>
 Class Hierarchy
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
 
index 8c7e089..8ba0661 100644 (file)
@@ -2,12 +2,10 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:14 CDT 2012 -->
 <TITLE>
 Serialized Form
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
 
index 78a72f6..6c6a95d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2011-2012 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2011-2013 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -31,38 +31,39 @@ package org.libjpegturbo.turbojpeg;
 /**
  * TurboJPEG utility class (cannot be instantiated)
  */
-final public class TJ {
+public final class TJ {
 
 
   /**
    * The number of chrominance subsampling options
    */
-  final public static int NUMSAMP   = 5;
+  public static final int NUMSAMP   = 5;
   /**
    * 4:4:4 chrominance subsampling (no chrominance subsampling).  The JPEG
    * or YUV image will contain one chrominance component for every pixel in the
    * source image.
    */
-  final public static int SAMP_444  = 0;
+  public static final int SAMP_444  = 0;
   /**
    * 4:2:2 chrominance subsampling.  The JPEG or YUV image will contain one
    * chrominance component for every 2x1 block of pixels in the source image.
    */
-  final public static int SAMP_422  = 1;
+  public static final int SAMP_422  = 1;
   /**
    * 4:2:0 chrominance subsampling.  The JPEG or YUV image will contain one
    * chrominance component for every 2x2 block of pixels in the source image.
    */
-  final public static int SAMP_420  = 2;
+  public static final int SAMP_420  = 2;
   /**
    * Grayscale.  The JPEG or YUV image will contain no chrominance components.
    */
-  final public static int SAMP_GRAY = 3;
+  public static final int SAMP_GRAY = 3;
   /**
    * 4:4:0 chrominance subsampling.  The JPEG or YUV image will contain one
    * chrominance component for every 1x2 block of pixels in the source image.
+   * Note that 4:4:0 subsampling is not fully accelerated in libjpeg-turbo.
    */
-  final public static int SAMP_440  = 4;
+  public static final int SAMP_440  = 4;
 
 
   /**
@@ -75,12 +76,12 @@ final public class TJ {
    * @return the MCU block width for the given level of chrominance subsampling
    */
   public static int getMCUWidth(int subsamp) throws Exception {
-    if(subsamp < 0 || subsamp >= NUMSAMP)
+    if (subsamp < 0 || subsamp >= NUMSAMP)
       throw new Exception("Invalid subsampling type");
     return mcuWidth[subsamp];
   }
 
-  final private static int mcuWidth[] = {
+  private static final int[] mcuWidth = {
     8, 16, 16, 8, 8
   };
 
@@ -96,12 +97,12 @@ final public class TJ {
    * subsampling
    */
   public static int getMCUHeight(int subsamp) throws Exception {
-    if(subsamp < 0 || subsamp >= NUMSAMP)
+    if (subsamp < 0 || subsamp >= NUMSAMP)
       throw new Exception("Invalid subsampling type");
     return mcuHeight[subsamp];
   }
 
-  final private static int mcuHeight[] = {
+  private static final int[] mcuHeight = {
     8, 8, 16, 8, 16
   };
 
@@ -109,92 +110,92 @@ final public class TJ {
   /**
    * The number of pixel formats
    */
-  final public static int NUMPF   = 11;
+  public static final int NUMPF   = 11;
   /**
    * RGB pixel format.  The red, green, and blue components in the image are
    * stored in 3-byte pixels in the order R, G, B from lowest to highest byte
    * address within each pixel.
    */
-  final public static int PF_RGB  = 0;
+  public static final int PF_RGB  = 0;
   /**
    * BGR pixel format.  The red, green, and blue components in the image are
    * stored in 3-byte pixels in the order B, G, R from lowest to highest byte
    * address within each pixel.
    */
-  final public static int PF_BGR  = 1;
+  public static final int PF_BGR  = 1;
   /**
    * RGBX pixel format.  The red, green, and blue components in the image are
    * stored in 4-byte pixels in the order R, G, B from lowest to highest byte
    * address within each pixel.  The X component is ignored when compressing
    * and undefined when decompressing.
    */
-  final public static int PF_RGBX = 2;
+  public static final int PF_RGBX = 2;
   /**
    * BGRX pixel format.  The red, green, and blue components in the image are
    * stored in 4-byte pixels in the order B, G, R from lowest to highest byte
    * address within each pixel.  The X component is ignored when compressing
    * and undefined when decompressing.
    */
-  final public static int PF_BGRX = 3;
+  public static final int PF_BGRX = 3;
   /**
    * XBGR pixel format.  The red, green, and blue components in the image are
    * stored in 4-byte pixels in the order R, G, B from highest to lowest byte
    * address within each pixel.  The X component is ignored when compressing
    * and undefined when decompressing.
    */
-  final public static int PF_XBGR = 4;
+  public static final int PF_XBGR = 4;
   /**
    * XRGB pixel format.  The red, green, and blue components in the image are
    * stored in 4-byte pixels in the order B, G, R from highest to lowest byte
    * address within each pixel.  The X component is ignored when compressing
    * and undefined when decompressing.
    */
-  final public static int PF_XRGB = 5;
+  public static final int PF_XRGB = 5;
   /**
    * Grayscale pixel format.  Each 1-byte pixel represents a luminance
    * (brightness) level from 0 to 255.
    */
-  final public static int PF_GRAY = 6;
+  public static final int PF_GRAY = 6;
   /**
    * RGBA pixel format.  This is the same as {@link #PF_RGBX}, except that when
    * decompressing, the X byte is guaranteed to be 0xFF, which can be
    * interpreted as an opaque alpha channel.
    */
-  final public static int PF_RGBA = 7;
+  public static final int PF_RGBA = 7;
   /**
    * BGRA pixel format.  This is the same as {@link #PF_BGRX}, except that when
    * decompressing, the X byte is guaranteed to be 0xFF, which can be
    * interpreted as an opaque alpha channel.
    */
-  final public static int PF_BGRA = 8;
+  public static final int PF_BGRA = 8;
   /**
    * ABGR pixel format.  This is the same as {@link #PF_XBGR}, except that when
    * decompressing, the X byte is guaranteed to be 0xFF, which can be
    * interpreted as an opaque alpha channel.
    */
-  final public static int PF_ABGR = 9;
+  public static final int PF_ABGR = 9;
   /**
    * ARGB pixel format.  This is the same as {@link #PF_XRGB}, except that when
    * decompressing, the X byte is guaranteed to be 0xFF, which can be
    * interpreted as an opaque alpha channel.
    */
-  final public static int PF_ARGB = 10;
+  public static final int PF_ARGB = 10;
 
 
   /**
-   * Returns the pixel size (in bytes) of the given pixel format.
+   * Returns the pixel size (in bytes) for the given pixel format.
    *
    * @param pixelFormat the pixel format (one of <code>PF_*</code>)
    *
-   * @return the pixel size (in bytes) of the given pixel format
+   * @return the pixel size (in bytes) for the given pixel format
    */
   public static int getPixelSize(int pixelFormat) throws Exception {
-    if(pixelFormat < 0 || pixelFormat >= NUMPF)
+    if (pixelFormat < 0 || pixelFormat >= NUMPF)
       throw new Exception("Invalid pixel format");
     return pixelSize[pixelFormat];
   }
 
-  final private static int pixelSize[] = {
+  private static final int[] pixelSize = {
     3, 3, 4, 4, 4, 4, 1, 4, 4, 4, 4
   };
 
@@ -211,12 +212,12 @@ final public class TJ {
    * @return the red offset for the given pixel format
    */
   public static int getRedOffset(int pixelFormat) throws Exception {
-    if(pixelFormat < 0 || pixelFormat >= NUMPF)
+    if (pixelFormat < 0 || pixelFormat >= NUMPF)
       throw new Exception("Invalid pixel format");
     return redOffset[pixelFormat];
   }
 
-  final private static int redOffset[] = {
+  private static final int[] redOffset = {
     0, 2, 0, 2, 3, 1, 0, 0, 2, 3, 1
   };
 
@@ -233,12 +234,12 @@ final public class TJ {
    * @return the green offset for the given pixel format
    */
   public static int getGreenOffset(int pixelFormat) throws Exception {
-    if(pixelFormat < 0 || pixelFormat >= NUMPF)
+    if (pixelFormat < 0 || pixelFormat >= NUMPF)
       throw new Exception("Invalid pixel format");
     return greenOffset[pixelFormat];
   }
 
-  final private static int greenOffset[] = {
+  private static final int[] greenOffset = {
     1, 1, 1, 1, 2, 2, 0, 1, 1, 2, 2
   };
 
@@ -255,12 +256,12 @@ final public class TJ {
    * @return the blue offset for the given pixel format
    */
   public static int getBlueOffset(int pixelFormat) throws Exception {
-    if(pixelFormat < 0 || pixelFormat >= NUMPF)
+    if (pixelFormat < 0 || pixelFormat >= NUMPF)
       throw new Exception("Invalid pixel format");
     return blueOffset[pixelFormat];
   }
 
-  final private static int blueOffset[] = {
+  private static final int[] blueOffset = {
     2, 0, 2, 0, 1, 3, 0, 2, 0, 1, 3
   };
 
@@ -269,60 +270,59 @@ final public class TJ {
    * The uncompressed source/destination image is stored in bottom-up (Windows,
    * OpenGL) order, not top-down (X11) order.
    */
-  final public static int FLAG_BOTTOMUP     = 2;
+  public static final int FLAG_BOTTOMUP     = 2;
   /**
    * Turn off CPU auto-detection and force TurboJPEG to use MMX code
    * (if the underlying codec supports it.)
    */
-  final public static int FLAG_FORCEMMX     = 8;
+  public static final int FLAG_FORCEMMX     = 8;
   /**
    * Turn off CPU auto-detection and force TurboJPEG to use SSE code
    * (if the underlying codec supports it.)
    */
-  final public static int FLAG_FORCESSE     = 16;
+  public static final int FLAG_FORCESSE     = 16;
   /**
    * Turn off CPU auto-detection and force TurboJPEG to use SSE2 code
    * (if the underlying codec supports it.)
    */
-  final public static int FLAG_FORCESSE2    = 32;
+  public static final int FLAG_FORCESSE2    = 32;
   /**
    * Turn off CPU auto-detection and force TurboJPEG to use SSE3 code
    * (if the underlying codec supports it.)
    */
-  final public static int FLAG_FORCESSE3    = 128;
+  public static final int FLAG_FORCESSE3    = 128;
   /**
-   * When decompressing, use the fastest chrominance upsampling algorithm
-   * available in the underlying codec.  The default is to use smooth
-   * upsampling, which creates a smooth transition between neighboring
-   * chrominance components in order to reduce upsampling artifacts in the
-   * decompressed image.
+   * When decompressing an image that was compressed using chrominance
+   * subsampling, use the fastest chrominance upsampling algorithm available in
+   * the underlying codec.  The default is to use smooth upsampling, which
+   * creates a smooth transition between neighboring chrominance components in
+   * order to reduce upsampling artifacts in the decompressed image.
    */
-  final public static int FLAG_FASTUPSAMPLE = 256;
+  public static final int FLAG_FASTUPSAMPLE = 256;
   /**
    * Use the fastest DCT/IDCT algorithm available in the underlying codec.  The
-   * default if this flag is not specified is implementation-specific.  The
-   * libjpeg implementation, for example, uses the fast algorithm by default
-   * when compressing, because this has been shown to have only a very slight
-   * effect on accuracy, but it uses the accurate algorithm when decompressing,
-   * because this has been shown to have a larger effect.
+   * default if this flag is not specified is implementation-specific.  For
+   * example, the implementation of TurboJPEG for libjpeg[-turbo] uses the fast
+   * algorithm by default when compressing, because this has been shown to have
+   * only a very slight effect on accuracy, but it uses the accurate algorithm
+   * when decompressing, because this has been shown to have a larger effect.
    */
-  final public static int FLAG_FASTDCT      =  2048;
+  public static final int FLAG_FASTDCT      =  2048;
   /**
    * Use the most accurate DCT/IDCT algorithm available in the underlying
    * codec.  The default if this flag is not specified is
-   * implementation-specific.  The libjpeg implementation, for example, uses
-   * the fast algorithm by default when compressing, because this has been
-   * shown to have only a very slight effect on accuracy, but it uses the
-   * accurate algorithm when decompressing, because this has been shown to have
-   * a larger effect.
+   * implementation-specific.  For example, the implementation of TurboJPEG for
+   * libjpeg[-turbo] uses the fast algorithm by default when compressing,
+   * because this has been shown to have only a very slight effect on accuracy,
+   * but it uses the accurate algorithm when decompressing, because this has
+   * been shown to have a larger effect.
    */
-  final public static int FLAG_ACCURATEDCT  =  4096;
+  public static final int FLAG_ACCURATEDCT  =  4096;
 
 
   /**
    * Returns the maximum size of the buffer (in bytes) required to hold a JPEG
-   * image with the given width and height, and level of chrominance
-   * subsampling.
+   * image with the given width, height, and level of chrominance subsampling.
    *
    * @param width the width (in pixels) of the JPEG image
    *
@@ -332,10 +332,9 @@ final public class TJ {
    * generating the JPEG image (one of {@link TJ TJ.SAMP_*})
    *
    * @return the maximum size of the buffer (in bytes) required to hold a JPEG
-   * image with the given width and height, and level of chrominance
-   * subsampling
+   * image with the given width, height, and level of chrominance subsampling
    */
-  public native static int bufSize(int width, int height, int jpegSubsamp)
+  public static native int bufSize(int width, int height, int jpegSubsamp)
     throws Exception;
 
   /**
@@ -352,8 +351,7 @@ final public class TJ {
    * @return the size of the buffer (in bytes) required to hold a YUV planar
    * image with the given width, height, and level of chrominance subsampling
    */
-  public native static int bufSizeYUV(int width, int height,
-    int subsamp)
+  public static native int bufSizeYUV(int width, int height, int subsamp)
     throws Exception;
 
   /**
@@ -363,7 +361,7 @@ final public class TJ {
    * @return a list of fractional scaling factors that the JPEG decompressor in
    * this implementation of TurboJPEG supports
    */
-  public native static TJScalingFactor[] getScalingFactors()
+  public static native TJScalingFactor[] getScalingFactors()
     throws Exception;
 
   static {
index b3c9b95..6fb653f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2011 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2011-2014 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -36,7 +36,7 @@ import java.nio.*;
  */
 public class TJCompressor {
 
-  private final static String NO_ASSOC_ERROR =
+  private static final String NO_ASSOC_ERROR =
     "No source image is associated with this instance";
 
   /**
@@ -48,21 +48,36 @@ public class TJCompressor {
 
   /**
    * Create a TurboJPEG compressor instance and associate the uncompressed
-   * source image stored in <code>srcImage</code> with the newly-created
+   * source image stored in <code>srcImage</code> with the newly created
    * instance.
    *
    * @param srcImage see {@link #setSourceImage} for description
    *
+   * @param x see {@link #setSourceImage} for description
+   *
+   * @param y see {@link #setSourceImage} for description
+   *
    * @param width see {@link #setSourceImage} for description
    *
    * @param pitch see {@link #setSourceImage} for description
    *
    * @param height see {@link #setSourceImage} for description
    *
-   * @param pixelFormat see {@link #setSourceImage} for description
+   * @param pixelFormat pixel format of the source image (one of
+   * {@link TJ#PF_RGB TJ.PF_*})
+   */
+  public TJCompressor(byte[] srcImage, int x, int y, int width, int pitch,
+                      int height, int pixelFormat) throws Exception {
+    setSourceImage(srcImage, x, y, width, pitch, height, pixelFormat);
+  }
+
+  /**
+   * @deprecated Use
+   * {@link #TJCompressor(byte[], int, int, int, int, int, int)} instead.
    */
+  @Deprecated
   public TJCompressor(byte[] srcImage, int width, int pitch, int height,
-    int pixelFormat) throws Exception {
+                      int pixelFormat) throws Exception {
     setSourceImage(srcImage, width, pitch, height, pixelFormat);
   }
 
@@ -70,47 +85,73 @@ public class TJCompressor {
    * Associate an uncompressed source image with this compressor instance.
    *
    * @param srcImage image buffer containing RGB or grayscale pixels to be
-   * compressed
+   * compressed or encoded
+   *
+   * @param x x offset (in pixels) of the region in the source image from which
+   * the JPEG or YUV image should be compressed/encoded
    *
-   * @param width width (in pixels) of the source image
+   * @param y y offset (in pixels) of the region in the source image from which
+   * the JPEG or YUV image should be compressed/encoded
+   *
+   * @param width width (in pixels) of the region in the source image from
+   * which the JPEG or YUV image should be compressed/encoded
    *
    * @param pitch bytes per line of the source image.  Normally, this should be
    * <code>width * TJ.pixelSize(pixelFormat)</code> if the source image is
    * unpadded, but you can use this parameter to, for instance, specify that
-   * the scanlines in the source image are padded to 4-byte boundaries, as is
-   * the case for Windows bitmaps.  You can also be clever and use this
-   * parameter to skip lines, etc.  Setting this parameter to 0 is the
-   * equivalent of setting it to <code>width *
-   * TJ.pixelSize(pixelFormat)</code>.
+   * the scanlines in the source image are padded to a 4-byte boundary or to
+   * compress/encode a JPEG or YUV image from a region of a larger source
+   * image.  You can also be clever and use this parameter to skip lines, etc.
+   * Setting this parameter to 0 is the equivalent of setting it to
+   * <code>width * TJ.pixelSize(pixelFormat)</code>.
    *
-   * @param height height (in pixels) of the source image
+   * @param height height (in pixels) of the region in the source image from
+   * which the JPEG or YUV image should be compressed/encoded
    *
    * @param pixelFormat pixel format of the source image (one of
-   * {@link TJ TJ.PF_*})
+   * {@link TJ#PF_RGB TJ.PF_*})
    */
-  public void setSourceImage(byte[] srcImage, int width, int pitch,
-    int height, int pixelFormat) throws Exception {
-    if(handle == 0) init();
-    if(srcImage == null || width < 1 || height < 1 || pitch < 0
-      || pixelFormat < 0 || pixelFormat >= TJ.NUMPF)
+  public void setSourceImage(byte[] srcImage, int x, int y, int width,
+                             int pitch, int height, int pixelFormat)
+                             throws Exception {
+    if (handle == 0) init();
+    if (srcImage == null || x < 0 || y < 0 || width < 1 || height < 1 ||
+        pitch < 0 || pixelFormat < 0 || pixelFormat >= TJ.NUMPF)
       throw new Exception("Invalid argument in setSourceImage()");
     srcBuf = srcImage;
     srcWidth = width;
-    if(pitch == 0) srcPitch = width * TJ.getPixelSize(pixelFormat);
-    else srcPitch = pitch;
+    if (pitch == 0)
+      srcPitch = width * TJ.getPixelSize(pixelFormat);
+    else
+      srcPitch = pitch;
     srcHeight = height;
     srcPixelFormat = pixelFormat;
+    srcX = x;
+    srcY = y;
   }
 
   /**
+   * @deprecated Use
+   * {@link #setSourceImage(byte[], int, int, int, int, int, int)} instead.
+   */
+  @Deprecated
+  public void setSourceImage(byte[] srcImage, int width, int pitch,
+                             int height, int pixelFormat) throws Exception {
+    setSourceImage(srcImage, 0, 0, width, pitch, height, pixelFormat);
+    srcX = srcY = -1;
+  }
+
+
+  /**
    * Set the level of chrominance subsampling for subsequent compress/encode
    * operations.
    *
-   * @param newSubsamp the new level of chrominance subsampling (one of
-   * {@link TJ TJ.SAMP_*})
+   * @param newSubsamp the level of chrominance subsampling to use in
+   * subsequent compress/encode operations (one of
+   * {@link TJ#SAMP_444 TJ.SAMP_*})
    */
   public void setSubsamp(int newSubsamp) throws Exception {
-    if(newSubsamp < 0 || newSubsamp >= TJ.NUMSAMP)
+    if (newSubsamp < 0 || newSubsamp >= TJ.NUMSAMP)
       throw new Exception("Invalid argument in setSubsamp()");
     subsamp = newSubsamp;
   }
@@ -122,7 +163,7 @@ public class TJCompressor {
    * 100 = best)
    */
   public void setJPEGQuality(int quality) throws Exception {
-    if(quality < 1 || quality > 100)
+    if (quality < 1 || quality > 100)
       throw new Exception("Invalid argument in setJPEGQuality()");
     jpegQuality = quality;
   }
@@ -133,32 +174,44 @@ public class TJCompressor {
    *
    * @param dstBuf buffer that will receive the JPEG image.  Use
    * {@link TJ#bufSize} to determine the maximum size for this buffer based on
-   * the image width and height.
+   * the source image's width and height and the desired level of chrominance
+   * subsampling.
    *
-   * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
    */
   public void compress(byte[] dstBuf, int flags) throws Exception {
-    if(dstBuf == null || flags < 0)
+    if (dstBuf == null || flags < 0)
       throw new Exception("Invalid argument in compress()");
-    if(srcBuf == null) throw new Exception(NO_ASSOC_ERROR);
-    if(jpegQuality < 0) throw new Exception("JPEG Quality not set");
-    if(subsamp < 0) throw new Exception("Subsampling level not set");
-    compressedSize = compress(srcBuf, srcWidth, srcPitch,
-      srcHeight, srcPixelFormat, dstBuf, subsamp, jpegQuality, flags);
+    if (srcBuf == null)
+      throw new Exception(NO_ASSOC_ERROR);
+    if (jpegQuality < 0)
+      throw new Exception("JPEG Quality not set");
+    if (subsamp < 0)
+      throw new Exception("Subsampling level not set");
+    if (srcX >= 0 && srcY >= 0)
+      compressedSize = compress(srcBuf, srcX, srcY, srcWidth, srcPitch,
+                                srcHeight, srcPixelFormat, dstBuf, subsamp,
+                                jpegQuality, flags);
+    else
+      compressedSize = compress(srcBuf, srcWidth, srcPitch, srcHeight,
+                                srcPixelFormat, dstBuf, subsamp, jpegQuality,
+                                flags);
   }
 
   /**
    * Compress the uncompressed source image associated with this compressor
    * instance and return a buffer containing a JPEG image.
    *
-   * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
    *
    * @return a buffer containing a JPEG image.  The length of this buffer will
    * not be equal to the size of the JPEG image.  Use {@link
    * #getCompressedSize} to obtain the size of the JPEG image.
    */
   public byte[] compress(int flags) throws Exception {
-    if(srcWidth < 1 || srcHeight < 1)
+    if (srcWidth < 1 || srcHeight < 1)
       throw new Exception(NO_ASSOC_ERROR);
     byte[] buf = new byte[TJ.bufSize(srcWidth, srcHeight, subsamp)];
     compress(buf, flags);
@@ -174,18 +227,20 @@ public class TJCompressor {
    *
    * @param dstBuf buffer that will receive the JPEG image.  Use
    * {@link TJ#bufSize} to determine the maximum size for this buffer based on
-   * the image width and height.
+   * the image width, height, and level of chrominance subsampling.
    *
-   * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
    */
   public void compress(BufferedImage srcImage, byte[] dstBuf, int flags)
-    throws Exception {
-    if(srcImage == null || dstBuf == null || flags < 0)
+                       throws Exception {
+    if (srcImage == null || dstBuf == null || flags < 0)
       throw new Exception("Invalid argument in compress()");
     int width = srcImage.getWidth();
     int height = srcImage.getHeight();
-    int pixelFormat;  boolean intPixels = false;
-    if(byteOrder == null)
+    int pixelFormat;
+    boolean intPixels = false;
+    if (byteOrder == null)
       byteOrder = ByteOrder.nativeOrder();
     switch(srcImage.getType()) {
       case BufferedImage.TYPE_3BYTE_BGR:
@@ -196,7 +251,7 @@ public class TJCompressor {
       case BufferedImage.TYPE_BYTE_GRAY:
         pixelFormat = TJ.PF_GRAY;  break;
       case BufferedImage.TYPE_INT_BGR:
-        if(byteOrder == ByteOrder.BIG_ENDIAN)
+        if (byteOrder == ByteOrder.BIG_ENDIAN)
           pixelFormat = TJ.PF_XBGR;
         else
           pixelFormat = TJ.PF_RGBX;
@@ -204,7 +259,7 @@ public class TJCompressor {
       case BufferedImage.TYPE_INT_RGB:
       case BufferedImage.TYPE_INT_ARGB:
       case BufferedImage.TYPE_INT_ARGB_PRE:
-        if(byteOrder == ByteOrder.BIG_ENDIAN)
+        if (byteOrder == ByteOrder.BIG_ENDIAN)
           pixelFormat = TJ.PF_XRGB;
         else
           pixelFormat = TJ.PF_BGRX;
@@ -213,28 +268,39 @@ public class TJCompressor {
         throw new Exception("Unsupported BufferedImage format");
     }
     WritableRaster wr = srcImage.getRaster();
-    if(jpegQuality < 0) throw new Exception("JPEG Quality not set");
-    if(subsamp < 0) throw new Exception("Subsampling level not set");
-    if(intPixels) {
+    if (jpegQuality < 0)
+      throw new Exception("JPEG Quality not set");
+    if (subsamp < 0)
+      throw new Exception("Subsampling level not set");
+    if (intPixels) {
       SinglePixelPackedSampleModel sm =
         (SinglePixelPackedSampleModel)srcImage.getSampleModel();
-      int pitch = sm.getScanlineStride();
+      int stride = sm.getScanlineStride();
       DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
       int[] buf = db.getData();
-      compressedSize = compress(buf, width, pitch, height, pixelFormat, dstBuf,
-        subsamp, jpegQuality, flags);
-    }
-    else {
+      if (srcX >= 0 && srcY >= 0)
+        compressedSize = compress(buf, srcX, srcY, width, stride, height,
+                                  pixelFormat, dstBuf, subsamp, jpegQuality,
+                                  flags);
+      else
+        compressedSize = compress(buf, width, stride, height, pixelFormat,
+                                  dstBuf, subsamp, jpegQuality, flags);
+    } else {
       ComponentSampleModel sm =
         (ComponentSampleModel)srcImage.getSampleModel();
       int pixelSize = sm.getPixelStride();
-      if(pixelSize != TJ.getPixelSize(pixelFormat))
+      if (pixelSize != TJ.getPixelSize(pixelFormat))
         throw new Exception("Inconsistency between pixel format and pixel size in BufferedImage");
       int pitch = sm.getScanlineStride();
       DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
       byte[] buf = db.getData();
-      compressedSize = compress(buf, width, pitch, height, pixelFormat, dstBuf,
-        subsamp, jpegQuality, flags);
+      if (srcX >= 0 && srcY >= 0)
+        compressedSize = compress(buf, srcX, srcY, width, pitch, height,
+                                  pixelFormat, dstBuf, subsamp, jpegQuality,
+                                  flags);
+      else
+        compressedSize = compress(buf, width, pitch, height, pixelFormat,
+                                  dstBuf, subsamp, jpegQuality, flags);
     }
   }
 
@@ -245,7 +311,8 @@ public class TJCompressor {
    * @param srcImage a <code>BufferedImage</code> instance containing RGB or
    * grayscale pixels to be compressed
    *
-   * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
    *
    * @return a buffer containing a JPEG image.  The length of this buffer will
    * not be equal to the size of the JPEG image.  Use {@link
@@ -266,27 +333,34 @@ public class TJCompressor {
    * TurboJPEG's underlying codec to produce a planar YUV image that is
    * suitable for direct video display.  Specifically, if the chrominance
    * components are subsampled along the horizontal dimension, then the width
-   * of the luminance plane is padded to 2 in the output image (same goes for
-   * the height of the luminance plane, if the chrominance components are
-   * subsampled along the vertical dimension.)  Also, each line of each plane
-   * in the output image is padded to 4 bytes.  Although this will work with
-   * any subsampling option, it is really only useful in combination with
-   * {@link TJ#SAMP_420}, which produces an image compatible with the I420 (AKA
-   * "YUV420P") format.
+   * of the luminance plane is padded to the nearest multiple of 2 in the
+   * output image (same goes for the height of the luminance plane, if the
+   * chrominance components are subsampled along the vertical dimension.)
+   * Also, each line of each plane in the output image is padded to 4 bytes.
+   * Although this will work with any subsampling option, it is really only
+   * useful in combination with {@link TJ#SAMP_420}, which produces an image
+   * compatible with the I420 (AKA "YUV420P") format.
+   * <p>
+   * NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the
+   * convention of the digital video community, the TurboJPEG API uses "YUV" to
+   * refer to an image format consisting of Y, Cb, and Cr image planes.
    *
    * @param dstBuf buffer that will receive the YUV planar image.  Use
    * {@link TJ#bufSizeYUV} to determine the appropriate size for this buffer
    * based on the image width, height, and level of chrominance subsampling.
    *
-   * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
    */
   public void encodeYUV(byte[] dstBuf, int flags) throws Exception {
-    if(dstBuf == null || flags < 0)
+    if (dstBuf == null || flags < 0)
       throw new Exception("Invalid argument in compress()");
-    if(srcBuf == null) throw new Exception(NO_ASSOC_ERROR);
-    if(subsamp < 0) throw new Exception("Subsampling level not set");
+    if (srcBuf == null)
+      throw new Exception(NO_ASSOC_ERROR);
+    if (subsamp < 0)
+      throw new Exception("Subsampling level not set");
     encodeYUV(srcBuf, srcWidth, srcPitch, srcHeight,
-      srcPixelFormat, dstBuf, subsamp, flags);
+              srcPixelFormat, dstBuf, subsamp, flags);
     compressedSize = TJ.bufSizeYUV(srcWidth, srcHeight, subsamp);
   }
 
@@ -295,14 +369,16 @@ public class TJCompressor {
    * instance and return a buffer containing a YUV planar image.  See
    * {@link #encodeYUV(byte[], int)} for more detail.
    *
-   * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
    *
    * @return a buffer containing a YUV planar image
    */
   public byte[] encodeYUV(int flags) throws Exception {
-    if(srcWidth < 1 || srcHeight < 1)
+    if (srcWidth < 1 || srcHeight < 1)
       throw new Exception(NO_ASSOC_ERROR);
-    if(subsamp < 0) throw new Exception("Subsampling level not set");
+    if (subsamp < 0)
+      throw new Exception("Subsampling level not set");
     byte[] buf = new byte[TJ.bufSizeYUV(srcWidth, srcHeight, subsamp)];
     encodeYUV(buf, flags);
     return buf;
@@ -320,16 +396,17 @@ public class TJCompressor {
    * {@link TJ#bufSizeYUV} to determine the appropriate size for this buffer
    * based on the image width, height, and level of chrominance subsampling.
    *
-   * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
    */
   public void encodeYUV(BufferedImage srcImage, byte[] dstBuf, int flags)
     throws Exception {
-    if(srcImage == null || dstBuf == null || flags < 0)
+    if (srcImage == null || dstBuf == null || flags < 0)
       throw new Exception("Invalid argument in encodeYUV()");
     int width = srcImage.getWidth();
     int height = srcImage.getHeight();
     int pixelFormat;  boolean intPixels = false;
-    if(byteOrder == null)
+    if (byteOrder == null)
       byteOrder = ByteOrder.nativeOrder();
     switch(srcImage.getType()) {
       case BufferedImage.TYPE_3BYTE_BGR:
@@ -340,7 +417,7 @@ public class TJCompressor {
       case BufferedImage.TYPE_BYTE_GRAY:
         pixelFormat = TJ.PF_GRAY;  break;
       case BufferedImage.TYPE_INT_BGR:
-        if(byteOrder == ByteOrder.BIG_ENDIAN)
+        if (byteOrder == ByteOrder.BIG_ENDIAN)
           pixelFormat = TJ.PF_XBGR;
         else
           pixelFormat = TJ.PF_RGBX;
@@ -348,7 +425,7 @@ public class TJCompressor {
       case BufferedImage.TYPE_INT_RGB:
       case BufferedImage.TYPE_INT_ARGB:
       case BufferedImage.TYPE_INT_ARGB_PRE:
-        if(byteOrder == ByteOrder.BIG_ENDIAN)
+        if (byteOrder == ByteOrder.BIG_ENDIAN)
           pixelFormat = TJ.PF_XRGB;
         else
           pixelFormat = TJ.PF_BGRX;
@@ -357,27 +434,26 @@ public class TJCompressor {
         throw new Exception("Unsupported BufferedImage format");
     }
     WritableRaster wr = srcImage.getRaster();
-    if(subsamp < 0) throw new Exception("Subsampling level not set");
-    if(intPixels) {
+    if (subsamp < 0) throw new Exception("Subsampling level not set");
+    if (intPixels) {
       SinglePixelPackedSampleModel sm =
         (SinglePixelPackedSampleModel)srcImage.getSampleModel();
-      int pitch = sm.getScanlineStride();
+      int stride = sm.getScanlineStride();
       DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
       int[] buf = db.getData();
-      encodeYUV(buf, width, pitch, height, pixelFormat, dstBuf, subsamp,
-        flags);
-    }
-    else {
+      encodeYUV(buf, width, stride, height, pixelFormat, dstBuf, subsamp,
+                flags);
+    } else {
       ComponentSampleModel sm =
         (ComponentSampleModel)srcImage.getSampleModel();
       int pixelSize = sm.getPixelStride();
-      if(pixelSize != TJ.getPixelSize(pixelFormat))
+      if (pixelSize != TJ.getPixelSize(pixelFormat))
         throw new Exception("Inconsistency between pixel format and pixel size in BufferedImage");
       int pitch = sm.getScanlineStride();
       DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
       byte[] buf = db.getData();
       encodeYUV(buf, width, pitch, height, pixelFormat, dstBuf, subsamp,
-        flags);
+                flags);
     }
     compressedSize = TJ.bufSizeYUV(width, height, subsamp);
   }
@@ -390,13 +466,14 @@ public class TJCompressor {
    * @param srcImage a <code>BufferedImage</code> instance containing RGB or
    * grayscale pixels to be encoded
    *
-   * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
    *
    * @return a buffer containing a YUV planar image
    */
-  public byte[] encodeYUV(BufferedImage srcImage, int flags)
-    throws Exception {
-    if(subsamp < 0) throw new Exception("Subsampling level not set");
+  public byte[] encodeYUV(BufferedImage srcImage, int flags) throws Exception {
+    if (subsamp < 0)
+      throw new Exception("Subsampling level not set");
     int width = srcImage.getWidth();
     int height = srcImage.getHeight();
     byte[] buf = new byte[TJ.bufSizeYUV(width, height, subsamp)];
@@ -425,9 +502,8 @@ public class TJCompressor {
   protected void finalize() throws Throwable {
     try {
       close();
-    }
-    catch(Exception e) {}
-    finally {
+    } catch(Exception e) {
+    } finally {
       super.finalize();
     }
   };
@@ -438,19 +514,27 @@ public class TJCompressor {
 
   // JPEG size in bytes is returned
   private native int compress(byte[] srcBuf, int width, int pitch,
-    int height, int pixelFormat, byte[] dstbuf, int jpegSubsamp, int jpegQual,
-    int flags) throws Exception;
+    int height, int pixelFormat, byte[] dstBuf, int jpegSubsamp, int jpegQual,
+    int flags) throws Exception; // deprecated
+
+  private native int compress(byte[] srcBuf, int x, int y, int width,
+    int pitch, int height, int pixelFormat, byte[] dstBuf, int jpegSubsamp,
+    int jpegQual, int flags) throws Exception;
+
+  private native int compress(int[] srcBuf, int width, int stride,
+    int height, int pixelFormat, byte[] dstBuf, int jpegSubsamp, int jpegQual,
+    int flags) throws Exception; // deprecated
 
-  private native int compress(int[] srcBuf, int width, int pitch,
-    int height, int pixelFormat, byte[] dstbuf, int jpegSubsamp, int jpegQual,
-    int flags) throws Exception;
+  private native int compress(int[] srcBuf, int x, int y, int width,
+    int stride, int height, int pixelFormat, byte[] dstBuf, int jpegSubsamp,
+    int jpegQual, int flags) throws Exception;
 
   private native void encodeYUV(byte[] srcBuf, int width, int pitch,
-    int height, int pixelFormat, byte[] dstbuf, int subsamp, int flags)
+    int height, int pixelFormat, byte[] dstBuf, int subsamp, int flags)
     throws Exception;
 
-  private native void encodeYUV(int[] srcBuf, int width, int pitch,
-    int height, int pixelFormat, byte[] dstbuf, int subsamp, int flags)
+  private native void encodeYUV(int[] srcBuf, int width, int stride,
+    int height, int pixelFormat, byte[] dstBuf, int subsamp, int flags)
     throws Exception;
 
   static {
@@ -461,6 +545,8 @@ public class TJCompressor {
   private byte[] srcBuf = null;
   private int srcWidth = 0;
   private int srcHeight = 0;
+  private int srcX = -1;
+  private int srcY = -1;
   private int srcPitch = 0;
   private int srcPixelFormat = -1;
   private int subsamp = -1;
index 711225b..bf78f2e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2011 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2011, 2013 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -39,7 +39,7 @@ public interface TJCustomFilter {
   /**
    * A callback function that can be used to modify the DCT coefficients after
    * they are losslessly transformed but before they are transcoded to a new
-   * JPEG file.  This allows for custom filters or other transformations to be
+   * JPEG image.  This allows for custom filters or other transformations to be
    * applied in the frequency domain.
    *
    * @param coeffBuffer a buffer containing transformed DCT coefficients.
@@ -58,19 +58,19 @@ public interface TJCustomFilter {
    * component plane to which <code>coeffBuffer</code> belongs
    *
    * @param componentID ID number of the component plane to which
-   * <code>coeffBuffer</code>belongs (Y, Cb, and Cr have, respectively, ID's of
-   * 0, 1, and 2 in typical JPEG images.)
+   * <code>coeffBuffer</code> belongs (Y, Cb, and Cr have, respectively, ID's
+   * of 0, 1, and 2 in typical JPEG images.)
    *
    * @param transformID ID number of the transformed image to which
    * <code>coeffBuffer</code> belongs.  This is the same as the index of the
-   * transform in the transforms array that was passed to {@link
+   * transform in the <code>transforms</code> array that was passed to {@link
    * TJTransformer#transform TJTransformer.transform()}.
    *
    * @param transform a {@link TJTransform} instance that specifies the
    * parameters and/or cropping region for this transform
    */
-  public void customFilter(ShortBuffer coeffBuffer, Rectangle bufferRegion,
-    Rectangle planeRegion, int componentID, int transformID,
-    TJTransform transform)
+  void customFilter(ShortBuffer coeffBuffer, Rectangle bufferRegion,
+                    Rectangle planeRegion, int componentID, int transformID,
+                    TJTransform transform)
     throws Exception;
 }
index de6cacc..ec8ab77 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2011 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2011-2014 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -36,7 +36,7 @@ import java.nio.*;
  */
 public class TJDecompressor {
 
-  private final static String NO_ASSOC_ERROR =
+  private static final String NO_ASSOC_ERROR =
     "No JPEG image is associated with this instance";
 
   /**
@@ -48,7 +48,7 @@ public class TJDecompressor {
 
   /**
    * Create a TurboJPEG decompressor instance and associate the JPEG image
-   * stored in <code>jpegImage</code> with the newly-created instance.
+   * stored in <code>jpegImage</code> with the newly created instance.
    *
    * @param jpegImage JPEG image buffer (size of the JPEG image is assumed to
    * be the length of the array)
@@ -61,7 +61,7 @@ public class TJDecompressor {
   /**
    * Create a TurboJPEG decompressor instance and associate the JPEG image
    * of length <code>imageSize</code> bytes stored in <code>jpegImage</code>
-   * with the newly-created instance.
+   * with the newly created instance.
    *
    * @param jpegImage JPEG image buffer
    *
@@ -82,7 +82,7 @@ public class TJDecompressor {
    * @param imageSize size of the JPEG image (in bytes)
    */
   public void setJPEGImage(byte[] jpegImage, int imageSize) throws Exception {
-    if(jpegImage == null || imageSize < 1)
+    if (jpegImage == null || imageSize < 1)
       throw new Exception("Invalid argument in setJPEGImage()");
     jpegBuf = jpegImage;
     jpegBufSize = imageSize;
@@ -97,7 +97,8 @@ public class TJDecompressor {
    * instance
    */
   public int getWidth() throws Exception {
-    if(jpegWidth < 1) throw new Exception(NO_ASSOC_ERROR);
+    if (jpegWidth < 1)
+      throw new Exception(NO_ASSOC_ERROR);
     return jpegWidth;
   }
 
@@ -109,20 +110,22 @@ public class TJDecompressor {
    * instance
    */
   public int getHeight() throws Exception {
-    if(jpegHeight < 1) throw new Exception(NO_ASSOC_ERROR);
+    if (jpegHeight < 1)
+      throw new Exception(NO_ASSOC_ERROR);
     return jpegHeight;
   }
 
   /**
    * Returns the level of chrominance subsampling used in the JPEG image
-   * associated with this decompressor instance.
+   * associated with this decompressor instance.  See {@link TJ TJ.SAMP_*}.
    *
    * @return the level of chrominance subsampling used in the JPEG image
    * associated with this decompressor instance
    */
   public int getSubsamp() throws Exception {
-    if(jpegSubsamp < 0) throw new Exception(NO_ASSOC_ERROR);
-    if(jpegSubsamp >= TJ.NUMSAMP)
+    if (jpegSubsamp < 0)
+      throw new Exception(NO_ASSOC_ERROR);
+    if (jpegSubsamp >= TJ.NUMSAMP)
       throw new Exception("JPEG header information is invalid");
     return jpegSubsamp;
   }
@@ -133,7 +136,8 @@ public class TJDecompressor {
    * @return the JPEG image buffer associated with this decompressor instance
    */
   public byte[] getJPEGBuf() throws Exception {
-    if(jpegBuf == null) throw new Exception(NO_ASSOC_ERROR);
+    if (jpegBuf == null)
+      throw new Exception(NO_ASSOC_ERROR);
     return jpegBuf;
   }
 
@@ -145,13 +149,13 @@ public class TJDecompressor {
    * decompressor instance
    */
   public int getJPEGSize() throws Exception {
-    if(jpegBufSize < 1) throw new Exception(NO_ASSOC_ERROR);
+    if (jpegBufSize < 1)
+      throw new Exception(NO_ASSOC_ERROR);
     return jpegBufSize;
   }
 
-
   /**
-   * Returns the width of the largest scaled down image that the TurboJPEG
+   * Returns the width of the largest scaled-down image that the TurboJPEG
    * decompressor can generate without exceeding the desired image width and
    * height.
    *
@@ -165,33 +169,35 @@ public class TJDecompressor {
    * image (in other words, the height will not be considered when determining
    * the scaled image size.)
    *
-   * @return the width of the largest scaled down image that the TurboJPEG
+   * @return the width of the largest scaled-down image that the TurboJPEG
    * decompressor can generate without exceeding the desired image width and
    * height
    */
   public int getScaledWidth(int desiredWidth, int desiredHeight)
-    throws Exception {
-    if(jpegWidth < 1 || jpegHeight < 1)
+                            throws Exception {
+    if (jpegWidth < 1 || jpegHeight < 1)
       throw new Exception(NO_ASSOC_ERROR);
-    if(desiredWidth < 0 || desiredHeight < 0)
+    if (desiredWidth < 0 || desiredHeight < 0)
       throw new Exception("Invalid argument in getScaledWidth()");
-    TJScalingFactor sf[] = TJ.getScalingFactors();
-    if(desiredWidth == 0) desiredWidth = jpegWidth;
-    if(desiredHeight == 0) desiredHeight = jpegHeight;
+    TJScalingFactor[] sf = TJ.getScalingFactors();
+    if (desiredWidth == 0)
+      desiredWidth = jpegWidth;
+    if (desiredHeight == 0)
+      desiredHeight = jpegHeight;
     int scaledWidth = jpegWidth, scaledHeight = jpegHeight;
-    for(int i = 0; i < sf.length; i++) {
+    for (int i = 0; i < sf.length; i++) {
       scaledWidth = sf[i].getScaled(jpegWidth);
       scaledHeight = sf[i].getScaled(jpegHeight);
-      if(scaledWidth <= desiredWidth && scaledHeight <= desiredHeight)
+      if (scaledWidth <= desiredWidth && scaledHeight <= desiredHeight)
         break;
     }
-    if(scaledWidth > desiredWidth || scaledHeight > desiredHeight)
+    if (scaledWidth > desiredWidth || scaledHeight > desiredHeight)
       throw new Exception("Could not scale down to desired image dimensions");
     return scaledWidth;
   }
 
   /**
-   * Returns the height of the largest scaled down image that the TurboJPEG
+   * Returns the height of the largest scaled-down image that the TurboJPEG
    * decompressor can generate without exceeding the desired image width and
    * height.
    *
@@ -205,27 +211,29 @@ public class TJDecompressor {
    * image (in other words, the height will not be considered when determining
    * the scaled image size.)
    *
-   * @return the height of the largest scaled down image that the TurboJPEG
+   * @return the height of the largest scaled-down image that the TurboJPEG
    * decompressor can generate without exceeding the desired image width and
    * height
    */
   public int getScaledHeight(int desiredWidth, int desiredHeight)
-    throws Exception {
-    if(jpegWidth < 1 || jpegHeight < 1)
+                             throws Exception {
+    if (jpegWidth < 1 || jpegHeight < 1)
       throw new Exception(NO_ASSOC_ERROR);
-    if(desiredWidth < 0 || desiredHeight < 0)
+    if (desiredWidth < 0 || desiredHeight < 0)
       throw new Exception("Invalid argument in getScaledHeight()");
-    TJScalingFactor sf[] = TJ.getScalingFactors();
-    if(desiredWidth == 0) desiredWidth = jpegWidth;
-    if(desiredHeight == 0) desiredHeight = jpegHeight;
+    TJScalingFactor[] sf = TJ.getScalingFactors();
+    if (desiredWidth == 0)
+      desiredWidth = jpegWidth;
+    if (desiredHeight == 0)
+      desiredHeight = jpegHeight;
     int scaledWidth = jpegWidth, scaledHeight = jpegHeight;
-    for(int i = 0; i < sf.length; i++) {
+    for (int i = 0; i < sf.length; i++) {
       scaledWidth = sf[i].getScaled(jpegWidth);
       scaledHeight = sf[i].getScaled(jpegHeight);
-      if(scaledWidth <= desiredWidth && scaledHeight <= desiredHeight)
+      if (scaledWidth <= desiredWidth && scaledHeight <= desiredHeight)
         break;
     }
-    if(scaledWidth > desiredWidth || scaledHeight > desiredHeight)
+    if (scaledWidth > desiredWidth || scaledHeight > desiredHeight)
       throw new Exception("Could not scale down to desired image dimensions");
     return scaledHeight;
   }
@@ -239,47 +247,78 @@ public class TJDecompressor {
    * where <code>scaledHeight</code> can be determined by calling <code>
    * scalingFactor.{@link TJScalingFactor#getScaled getScaled}(jpegHeight)
    * </code> with one of the scaling factors returned from {@link
-   * TJ#getScalingFactors} or by calling {@link #getScaledHeight}.
-   *
-   * @param desiredWidth desired width (in pixels) of the decompressed image.
-   * If the desired image dimensions are smaller than the dimensions of the
-   * JPEG image being decompressed, then TurboJPEG will use scaling in the JPEG
-   * decompressor to generate the largest possible image that will fit within
-   * the desired dimensions.  Setting this to 0 is the same as setting it to
-   * the width of the JPEG image (in other words, the width will not be
-   * considered when determining the scaled image size.)
+   * TJ#getScalingFactors} or by calling {@link #getScaledHeight}.  However,
+   * the buffer may also be larger than the dimensions of the JPEG image, in
+   * which case the <code>x</code>, <code>y</code>, and <code>pitch</code>
+   * parameters can be used to specify the region into which the JPEG image
+   * should be decompressed.
+   *
+   * @param x x offset (in pixels) of the region into which the JPEG image
+   * should be decompressed, relative to the start of <code>dstBuf</code>.
+   *
+   * @param y y offset (in pixels) of the region into which the JPEG image
+   * should be decompressed, relative to the start of <code>dstBuf</code>.
+   *
+   * @param desiredWidth desired width (in pixels) of the decompressed image
+   * (or image region.)  If the desired image dimensions are different than the
+   * dimensions of the JPEG image being decompressed, then TurboJPEG will use
+   * scaling in the JPEG decompressor to generate the largest possible image
+   * that will fit within the desired dimensions.  Setting this to 0 is the
+   * same as setting it to the width of the JPEG image (in other words, the
+   * width will not be considered when determining the scaled image size.)
    *
    * @param pitch bytes per line of the destination image.  Normally, this
    * should be set to <code>scaledWidth * TJ.pixelSize(pixelFormat)</code> if
    * the decompressed image is unpadded, but you can use this to, for instance,
-   * pad each line of the decompressed image to a 4-byte boundary.  NOTE:
+   * pad each line of the decompressed image to a 4-byte boundary or to
+   * decompress the JPEG image into a region of a larger image.  NOTE:
    * <code>scaledWidth</code> can be determined by calling <code>
    * scalingFactor.{@link TJScalingFactor#getScaled getScaled}(jpegWidth)
    * </code> or by calling {@link #getScaledWidth}.  Setting this parameter to
    * 0 is the equivalent of setting it to <code>scaledWidth *
    * TJ.pixelSize(pixelFormat)</code>.
    *
-   * @param desiredHeight desired height (in pixels) of the decompressed image.
-   * If the desired image dimensions are smaller than the dimensions of the
-   * JPEG image being decompressed, then TurboJPEG will use scaling in the JPEG
-   * decompressor to generate the largest possible image that will fit within
-   * the desired dimensions.  Setting this to 0 is the same as setting it to
-   * the height of the JPEG image (in other words, the height will not be
-   * considered when determining the scaled image size.)
+   * @param desiredHeight desired height (in pixels) of the decompressed image
+   * (or image region.)  If the desired image dimensions are different than the
+   * dimensions of the JPEG image being decompressed, then TurboJPEG will use
+   * scaling in the JPEG decompressor to generate the largest possible image
+   * that will fit within the desired dimensions.  Setting this to 0 is the
+   * same as setting it to the height of the JPEG image (in other words, the
+   * height will not be considered when determining the scaled image size.)
    *
-   * @param pixelFormat pixel format of the decompressed image (one of
-   * {@link TJ TJ.PF_*})
+   * @param pixelFormat pixel format of the decompressed/decoded image (one of
+   * {@link TJ#PF_RGB TJ.PF_*})
    *
-   * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
    */
-  public void decompress(byte[] dstBuf, int desiredWidth, int pitch,
-    int desiredHeight, int pixelFormat, int flags) throws Exception {
-    if(jpegBuf == null) throw new Exception(NO_ASSOC_ERROR);
-    if(dstBuf == null || desiredWidth < 0 || pitch < 0 || desiredHeight < 0
-      || pixelFormat < 0 || pixelFormat >= TJ.NUMPF || flags < 0)
+  public void decompress(byte[] dstBuf, int x, int y, int desiredWidth,
+                         int pitch, int desiredHeight, int pixelFormat,
+                         int flags) throws Exception {
+    if (jpegBuf == null)
+      throw new Exception(NO_ASSOC_ERROR);
+    if (dstBuf == null || x < 0 || y < 0 || desiredWidth < 0 || pitch < 0 ||
+        desiredHeight < 0 || pixelFormat < 0 || pixelFormat >= TJ.NUMPF ||
+        flags < 0)
       throw new Exception("Invalid argument in decompress()");
-    decompress(jpegBuf, jpegBufSize, dstBuf, desiredWidth, pitch,
-      desiredHeight, pixelFormat, flags);
+    if (x > 0 || y > 0)
+      decompress(jpegBuf, jpegBufSize, dstBuf, x, y, desiredWidth, pitch,
+                 desiredHeight, pixelFormat, flags);
+    else
+      decompress(jpegBuf, jpegBufSize, dstBuf, desiredWidth, pitch,
+                 desiredHeight, pixelFormat, flags);
+  }
+
+  /**
+   * @deprecated Use
+   * {@link #decompress(byte[], int, int, int, int, int, int, int)} instead.
+   */
+  @Deprecated
+  public void decompress(byte[] dstBuf, int desiredWidth, int pitch,
+                         int desiredHeight, int pixelFormat, int flags)
+                         throws Exception {
+    decompress(dstBuf, 0, 0, desiredWidth, pitch, desiredHeight, pixelFormat,
+               flags);
   }
 
   /**
@@ -287,30 +326,35 @@ public class TJDecompressor {
    * instance and return a buffer containing the decompressed image.
    *
    * @param desiredWidth see
-   * {@link #decompress(byte[], int, int, int, int, int)} for description
+   * {@link #decompress(byte[], int, int, int, int, int, int, int)}
+   * for description
    *
    * @param pitch see
-   * {@link #decompress(byte[], int, int, int, int, int)} for description
+   * {@link #decompress(byte[], int, int, int, int, int, int, int)}
+   * for description
    *
    * @param desiredHeight see
-   * {@link #decompress(byte[], int, int, int, int, int)} for description
+   * {@link #decompress(byte[], int, int, int, int, int, int, int)}
+   * for description
    *
    * @param pixelFormat pixel format of the decompressed image (one of
-   * {@link TJ TJ.PF_*})
+   * {@link TJ#PF_RGB TJ.PF_*})
    *
-   * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
    *
    * @return a buffer containing the decompressed image
    */
   public byte[] decompress(int desiredWidth, int pitch, int desiredHeight,
-    int pixelFormat, int flags) throws Exception {
-    if(desiredWidth < 0 || pitch < 0 || desiredHeight < 0
-      || pixelFormat < 0 || pixelFormat >= TJ.NUMPF || flags < 0)
+                           int pixelFormat, int flags) throws Exception {
+    if (desiredWidth < 0 || pitch < 0 || desiredHeight < 0 ||
+        pixelFormat < 0 || pixelFormat >= TJ.NUMPF || flags < 0)
       throw new Exception("Invalid argument in decompress()");
     int pixelSize = TJ.getPixelSize(pixelFormat);
     int scaledWidth = getScaledWidth(desiredWidth, desiredHeight);
     int scaledHeight = getScaledHeight(desiredWidth, desiredHeight);
-    if(pitch == 0) pitch = scaledWidth * pixelSize;
+    if (pitch == 0)
+      pitch = scaledWidth * pixelSize;
     byte[] buf = new byte[pitch * scaledHeight];
     decompress(buf, desiredWidth, pitch, desiredHeight, pixelFormat, flags);
     return buf;
@@ -321,41 +365,45 @@ public class TJDecompressor {
    * instance and output a YUV planar image to the given destination buffer.
    * This method performs JPEG decompression but leaves out the color
    * conversion step, so a planar YUV image is generated instead of an RGB
-   * image.  The padding of the planes in this image is the same as the images
-   * generated by {@link TJCompressor#encodeYUV(byte[], int)}.  Note that, if
-   * the width or height of the image is not an even multiple of the MCU block
-   * size (see {@link TJ#getMCUWidth} and {@link TJ#getMCUHeight}), then an
-   * intermediate buffer copy will be performed within TurboJPEG.
+   * image.  The padding of the planes in this image is the same as in the
+   * images generated by {@link TJCompressor#encodeYUV(byte[], int)}.
+   * <p>
+   * NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the
+   * convention of the digital video community, the TurboJPEG API uses "YUV" to
+   * refer to an image format consisting of Y, Cb, and Cr image planes.
    *
    * @param dstBuf buffer that will receive the YUV planar image.  Use
    * {@link TJ#bufSizeYUV} to determine the appropriate size for this buffer
    * based on the image width, height, and level of chrominance subsampling.
    *
-   * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
    */
   public void decompressToYUV(byte[] dstBuf, int flags) throws Exception {
-    if(jpegBuf == null) throw new Exception(NO_ASSOC_ERROR);
-    if(dstBuf == null || flags < 0)
+    if (jpegBuf == null)
+      throw new Exception(NO_ASSOC_ERROR);
+    if (dstBuf == null || flags < 0)
       throw new Exception("Invalid argument in decompressToYUV()");
     decompressToYUV(jpegBuf, jpegBufSize, dstBuf, flags);
   }
 
-  
+
   /**
    * Decompress the JPEG source image associated with this decompressor
    * instance and return a buffer containing a YUV planar image.  See {@link
    * #decompressToYUV(byte[], int)} for more detail.
    *
-   * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
    *
    * @return a buffer containing a YUV planar image
    */
   public byte[] decompressToYUV(int flags) throws Exception {
-    if(flags < 0)
+    if (flags < 0)
       throw new Exception("Invalid argument in decompressToYUV()");
-    if(jpegWidth < 1 || jpegHeight < 1 || jpegSubsamp < 0)
+    if (jpegWidth < 1 || jpegHeight < 1 || jpegSubsamp < 0)
       throw new Exception(NO_ASSOC_ERROR);
-    if(jpegSubsamp >= TJ.NUMSAMP)
+    if (jpegSubsamp >= TJ.NUMSAMP)
       throw new Exception("JPEG header information is invalid");
     byte[] buf = new byte[TJ.bufSizeYUV(jpegWidth, jpegHeight, jpegSubsamp)];
     decompressToYUV(buf, flags);
@@ -364,25 +412,93 @@ public class TJDecompressor {
 
   /**
    * Decompress the JPEG source image associated with this decompressor
+   * instance and output a decompressed image to the given destination buffer.
+   *
+   * @param dstBuf buffer that will receive the decompressed image.  This
+   * buffer should normally be <code>stride * scaledHeight</code> pixels in
+   * size, where <code>scaledHeight</code> can be determined by calling <code>
+   * scalingFactor.{@link TJScalingFactor#getScaled getScaled}(jpegHeight)
+   * </code> with one of the scaling factors returned from {@link
+   * TJ#getScalingFactors} or by calling {@link #getScaledHeight}.  However,
+   * the buffer may also be larger than the dimensions of the JPEG image, in
+   * which case the <code>x</code>, <code>y</code>, and <code>stride</code>
+   * parameters can be used to specify the region into which the JPEG image
+   * should be decompressed.
+   *
+   * @param x x offset (in pixels) of the region into which the JPEG image
+   * should be decompressed, relative to the start of <code>dstBuf</code>.
+   *
+   * @param y y offset (in pixels) of the region into which the JPEG image
+   * should be decompressed, relative to the start of <code>dstBuf</code>.
+   *
+   * @param desiredWidth desired width (in pixels) of the decompressed image
+   * (or image region.)  If the desired image dimensions are different than the
+   * dimensions of the JPEG image being decompressed, then TurboJPEG will use
+   * scaling in the JPEG decompressor to generate the largest possible image
+   * that will fit within the desired dimensions.  Setting this to 0 is the
+   * same as setting it to the width of the JPEG image (in other words, the
+   * width will not be considered when determining the scaled image size.)
+   *
+   * @param stride pixels per line of the destination image.  Normally, this
+   * should be set to <code>scaledWidth</code>, but you can use this to, for
+   * instance, decompress the JPEG image into a region of a larger image.
+   * NOTE: <code>scaledWidth</code> can be determined by calling <code>
+   * scalingFactor.{@link TJScalingFactor#getScaled getScaled}(jpegWidth)
+   * </code> or by calling {@link #getScaledWidth}.  Setting this parameter to
+   * 0 is the equivalent of setting it to <code>scaledWidth</code>.
+   *
+   * @param desiredHeight desired height (in pixels) of the decompressed image
+   * (or image region.)  If the desired image dimensions are different than the
+   * dimensions of the JPEG image being decompressed, then TurboJPEG will use
+   * scaling in the JPEG decompressor to generate the largest possible image
+   * that will fit within the desired dimensions.  Setting this to 0 is the
+   * same as setting it to the height of the JPEG image (in other words, the
+   * height will not be considered when determining the scaled image size.)
+   *
+   * @param pixelFormat pixel format of the decompressed image (one of
+   * {@link TJ#PF_RGB TJ.PF_*})
+   *
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
+   */
+  public void decompress(int[] dstBuf, int x, int y, int desiredWidth,
+                         int stride, int desiredHeight, int pixelFormat,
+                         int flags) throws Exception {
+    if (jpegBuf == null)
+      throw new Exception(NO_ASSOC_ERROR);
+    if (dstBuf == null || x < 0 || y < 0 || desiredWidth < 0 || stride < 0 ||
+        desiredHeight < 0 || pixelFormat < 0 || pixelFormat >= TJ.NUMPF ||
+        flags < 0)
+      throw new Exception("Invalid argument in decompress()");
+    decompress(jpegBuf, jpegBufSize, dstBuf, x, y, desiredWidth, stride,
+               desiredHeight, pixelFormat, flags);
+  }
+
+  /**
+   * Decompress the JPEG source image associated with this decompressor
    * instance and output a decompressed image to the given
    * <code>BufferedImage</code> instance.
    *
    * @param dstImage a <code>BufferedImage</code> instance that will receive
-   * the decompressed image
+   * the decompressed image.  The width and height of the
+   * <code>BufferedImage</code> instance must match one of the scaled image
+   * sizes that TurboJPEG is capable of generating from the JPEG image.
+   *
    *
-   * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
    */
   public void decompress(BufferedImage dstImage, int flags) throws Exception {
-    if(dstImage == null || flags < 0)
+    if (dstImage == null || flags < 0)
       throw new Exception("Invalid argument in decompress()");
     int desiredWidth = dstImage.getWidth();
     int desiredHeight = dstImage.getHeight();
     int scaledWidth = getScaledWidth(desiredWidth, desiredHeight);
     int scaledHeight = getScaledHeight(desiredWidth, desiredHeight);
-    if(scaledWidth != desiredWidth || scaledHeight != desiredHeight)
-      throw new Exception("BufferedImage dimensions do not match a scaled image size that TurboJPEG is capable of generating.");
+    if (scaledWidth != desiredWidth || scaledHeight != desiredHeight)
+      throw new Exception("BufferedImage dimensions do not match one of the scaled image sizes that TurboJPEG is capable of generating.");
     int pixelFormat;  boolean intPixels = false;
-    if(byteOrder == null)
+    if (byteOrder == null)
       byteOrder = ByteOrder.nativeOrder();
     switch(dstImage.getType()) {
       case BufferedImage.TYPE_3BYTE_BGR:
@@ -393,20 +509,20 @@ public class TJDecompressor {
       case BufferedImage.TYPE_BYTE_GRAY:
         pixelFormat = TJ.PF_GRAY;  break;
       case BufferedImage.TYPE_INT_BGR:
-        if(byteOrder == ByteOrder.BIG_ENDIAN)
+        if (byteOrder == ByteOrder.BIG_ENDIAN)
           pixelFormat = TJ.PF_XBGR;
         else
           pixelFormat = TJ.PF_RGBX;
         intPixels = true;  break;
       case BufferedImage.TYPE_INT_RGB:
-        if(byteOrder == ByteOrder.BIG_ENDIAN)
+        if (byteOrder == ByteOrder.BIG_ENDIAN)
           pixelFormat = TJ.PF_XRGB;
         else
           pixelFormat = TJ.PF_BGRX;
         intPixels = true;  break;
       case BufferedImage.TYPE_INT_ARGB:
       case BufferedImage.TYPE_INT_ARGB_PRE:
-        if(byteOrder == ByteOrder.BIG_ENDIAN)
+        if (byteOrder == ByteOrder.BIG_ENDIAN)
           pixelFormat = TJ.PF_ARGB;
         else
           pixelFormat = TJ.PF_BGRA;
@@ -415,21 +531,21 @@ public class TJDecompressor {
         throw new Exception("Unsupported BufferedImage format");
     }
     WritableRaster wr = dstImage.getRaster();
-    if(intPixels) {
+    if (intPixels) {
       SinglePixelPackedSampleModel sm =
         (SinglePixelPackedSampleModel)dstImage.getSampleModel();
-      int pitch = sm.getScanlineStride();
+      int stride = sm.getScanlineStride();
       DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
       int[] buf = db.getData();
-      if(jpegBuf == null) throw new Exception(NO_ASSOC_ERROR);
-      decompress(jpegBuf, jpegBufSize, buf, scaledWidth, pitch, scaledHeight,
-        pixelFormat, flags);
-    }
-    else {
+      if (jpegBuf == null)
+        throw new Exception(NO_ASSOC_ERROR);
+      decompress(jpegBuf, jpegBufSize, buf, scaledWidth, stride, scaledHeight,
+                 pixelFormat, flags);
+    else {
       ComponentSampleModel sm =
         (ComponentSampleModel)dstImage.getSampleModel();
       int pixelSize = sm.getPixelStride();
-      if(pixelSize != TJ.getPixelSize(pixelFormat))
+      if (pixelSize != TJ.getPixelSize(pixelFormat))
         throw new Exception("Inconsistency between pixel format and pixel size in BufferedImage");
       int pitch = sm.getScanlineStride();
       DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
@@ -444,28 +560,32 @@ public class TJDecompressor {
    * decompressed image.
    *
    * @param desiredWidth see
-   * {@link #decompress(byte[], int, int, int, int, int)} for description
+   * {@link #decompress(byte[], int, int, int, int, int, int, int)} for
+   * description
    *
    * @param desiredHeight see
-   * {@link #decompress(byte[], int, int, int, int, int)} for description
+   * {@link #decompress(byte[], int, int, int, int, int, int, int)} for
+   * description
    *
-   * @param bufferedImageType the image type of the newly-created
-   * <code>BufferedImage</code> instance (for instance,
+   * @param bufferedImageType the image type of the <code>BufferedImage</code>
+   * instance that will be created (for instance,
    * <code>BufferedImage.TYPE_INT_RGB</code>)
    *
-   * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
    *
    * @return a <code>BufferedImage</code> instance containing the
    * decompressed image
    */
   public BufferedImage decompress(int desiredWidth, int desiredHeight,
-    int bufferedImageType, int flags) throws Exception {
-    if(desiredWidth < 0 || desiredHeight < 0 || flags < 0)
+                                  int bufferedImageType, int flags)
+                                  throws Exception {
+    if (desiredWidth < 0 || desiredHeight < 0 || flags < 0)
       throw new Exception("Invalid argument in decompress()");
     int scaledWidth = getScaledWidth(desiredWidth, desiredHeight);
     int scaledHeight = getScaledHeight(desiredWidth, desiredHeight);
     BufferedImage img = new BufferedImage(scaledWidth, scaledHeight,
-      bufferedImageType);
+                                          bufferedImageType);
     decompress(img, flags);
     return img;
   }
@@ -480,9 +600,8 @@ public class TJDecompressor {
   protected void finalize() throws Throwable {
     try {
       close();
-    }
-    catch(Exception e) {}
-    finally {
+    } catch(Exception e) {
+    } finally {
       super.finalize();
     }
   };
@@ -496,15 +615,22 @@ public class TJDecompressor {
 
   private native void decompress(byte[] srcBuf, int size, byte[] dstBuf,
     int desiredWidth, int pitch, int desiredHeight, int pixelFormat, int flags)
-    throws Exception;
+    throws Exception; // deprecated
+
+  private native void decompress(byte[] srcBuf, int size, byte[] dstBuf, int x,
+    int y, int desiredWidth, int pitch, int desiredHeight, int pixelFormat,
+    int flags) throws Exception;
 
   private native void decompress(byte[] srcBuf, int size, int[] dstBuf,
-    int desiredWidth, int pitch, int desiredHeight, int pixelFormat, int flags)
-    throws Exception;
+    int desiredWidth, int stride, int desiredHeight, int pixelFormat,
+    int flags) throws Exception; // deprecated
+
+  private native void decompress(byte[] srcBuf, int size, int[] dstBuf, int x,
+    int y, int desiredWidth, int stride, int desiredHeight, int pixelFormat,
+    int flags) throws Exception;
 
   private native void decompressToYUV(byte[] srcBuf, int size, byte[] dstBuf,
-    int flags)
-    throws Exception;
+    int flags) throws Exception;
 
   static {
     TJLoader.load();
diff --git a/java/org/libjpegturbo/turbojpeg/TJLoader.java.tmpl b/java/org/libjpegturbo/turbojpeg/TJLoader.java.tmpl
new file mode 100644 (file)
index 0000000..a4f1c87
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C)2011-2013 D. R. Commander.  All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * - Neither the name of the libjpeg-turbo Project nor the names of its
+ *   contributors may be used to endorse or promote products derived from this
+ *   software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.libjpegturbo.turbojpeg;
+
+final class TJLoader {
+  static void load() {
+    try {
+      System.loadLibrary("turbojpeg");
+    } catch (java.lang.UnsatisfiedLinkError e) {
+      String os = System.getProperty("os.name").toLowerCase();
+      if (os.indexOf("mac") >= 0) {
+        try {
+          System.load("%{__libdir}/libturbojpeg.jnilib");
+        } catch (java.lang.UnsatisfiedLinkError e2) {
+          System.load("/usr/lib/libturbojpeg.jnilib");
+        }
+      } else {
+        try {
+          System.load("%{__libdir}/libturbojpeg.so");
+        } catch (java.lang.UnsatisfiedLinkError e3) {
+          String libdir = "%{__libdir}";
+          if (libdir.equals("/opt/libjpeg-turbo/lib64")) {
+            System.load("/opt/libjpeg-turbo/lib32/libturbojpeg.so");
+          } else if (libdir.equals("/opt/libjpeg-turbo/lib32")) {
+            System.load("/opt/libjpeg-turbo/lib64/libturbojpeg.so");
+          } else {
+            throw e3;
+          }
+        }
+      }
+    }
+  }
+};
index d71ceee..4e7363f 100644 (file)
@@ -34,7 +34,7 @@ package org.libjpegturbo.turbojpeg;
 public class TJScalingFactor {
 
   public TJScalingFactor(int num, int denom) throws Exception {
-    if(num < 1 || denom < 1)
+    if (num < 1 || denom < 1)
       throw new Exception("Numerator and denominator must be >= 1");
     this.num = num;
     this.denom = denom;
index 399cf3a..b464ffd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2011 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2011, 2013 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -40,54 +40,54 @@ public class TJTransform extends Rectangle {
   /**
    * The number of lossless transform operations
    */
-  final public static int NUMOP         = 8;
+  public static final int NUMOP         = 8;
   /**
    * Do not transform the position of the image pixels.
    */
-  final public static int OP_NONE       = 0;
+  public static final int OP_NONE       = 0;
   /**
    * Flip (mirror) image horizontally.  This transform is imperfect if there
    * are any partial MCU blocks on the right edge.
    * @see #OPT_PERFECT
    */
-  final public static int OP_HFLIP      = 1;
+  public static final int OP_HFLIP      = 1;
   /**
    * Flip (mirror) image vertically.  This transform is imperfect if there are
    * any partial MCU blocks on the bottom edge.
    * @see #OPT_PERFECT
    */
-  final public static int OP_VFLIP      = 2;
+  public static final int OP_VFLIP      = 2;
   /**
    * Transpose image (flip/mirror along upper left to lower right axis).  This
    * transform is always perfect.
    * @see #OPT_PERFECT
    */
-  final public static int OP_TRANSPOSE  = 3;
+  public static final int OP_TRANSPOSE  = 3;
   /**
    * Transverse transpose image (flip/mirror along upper right to lower left
    * axis).  This transform is imperfect if there are any partial MCU blocks in
    * the image.
    * @see #OPT_PERFECT
    */
-  final public static int OP_TRANSVERSE = 4;
+  public static final int OP_TRANSVERSE = 4;
   /**
    * Rotate image clockwise by 90 degrees.  This transform is imperfect if
    * there are any partial MCU blocks on the bottom edge.
    * @see #OPT_PERFECT
    */
-  final public static int OP_ROT90      = 5;
+  public static final int OP_ROT90      = 5;
   /**
    * Rotate image 180 degrees.  This transform is imperfect if there are any
    * partial MCU blocks in the image.
    * @see #OPT_PERFECT
    */
-  final public static int OP_ROT180     = 6;
+  public static final int OP_ROT180     = 6;
   /**
    * Rotate image counter-clockwise by 90 degrees.  This transform is imperfect
    * if there are any partial MCU blocks on the right edge.
    * @see #OPT_PERFECT
    */
-  final public static int OP_ROT270     = 7;
+  public static final int OP_ROT270     = 7;
 
 
   /**
@@ -103,21 +103,21 @@ public class TJTransform extends Rectangle {
    * partial MCU blocks that cannot be transformed will be left in place, which
    * will create odd-looking strips on the right or bottom edge of the image.
    */
-  final public static int OPT_PERFECT  = 1;
+  public static final int OPT_PERFECT  = 1;
   /**
    * This option will discard any partial MCU blocks that cannot be
    * transformed.
    */
-  final public static int OPT_TRIM     = 2;
+  public static final int OPT_TRIM     = 2;
   /**
    * This option will enable lossless cropping.
    */
-  final public static int OPT_CROP     = 4;
+  public static final int OPT_CROP     = 4;
   /**
    * This option will discard the color data in the input image and produce
    * a grayscale output image.
    */
-  final public static int OPT_GRAY     = 8;
+  public static final int OPT_GRAY     = 8;
   /**
    * This option will prevent {@link TJTransformer#transform
    * TJTransformer.transform()} from outputting a JPEG image for this
@@ -125,9 +125,9 @@ public class TJTransform extends Rectangle {
    * filter to capture the transformed DCT coefficients without transcoding
    * them.
    */
-  final public static int OPT_NOOUTPUT = 16;
+  public static final int OPT_NOOUTPUT = 16;
+
 
-  
   /**
    * Create a new lossless transform instance.
    */
@@ -144,10 +144,12 @@ public class TJTransform extends Rectangle {
    * divisible by the MCU block height (see {@link TJ#getMCUHeight})
    *
    * @param w the width of the cropping region.  Setting this to 0 is the
-   * equivalent of setting it to the width of the source JPEG image - x.
+   * equivalent of setting it to (width of the source JPEG image -
+   * <code>x</code>).
    *
    * @param h the height of the cropping region.  Setting this to 0 is the
-   * equivalent of setting it to the height of the source JPEG image - y.
+   * equivalent of setting it to (height of the source JPEG image -
+   * <code>y</code>).
    *
    * @param op one of the transform operations (<code>OP_*</code>)
    *
@@ -158,9 +160,11 @@ public class TJTransform extends Rectangle {
    * TJCustomFilter} interface, or null if no custom filter is needed
    */
   public TJTransform(int x, int y, int w, int h, int op, int options,
-    TJCustomFilter cf) throws Exception {
+                     TJCustomFilter cf) throws Exception {
     super(x, y, w, h);
-    this.op = op;  this.options = options;  this.cf = cf;
+    this.op = op;
+    this.options = options;
+    this.cf = cf;
   }
 
   /**
@@ -180,9 +184,11 @@ public class TJTransform extends Rectangle {
    * TJCustomFilter} interface, or null if no custom filter is needed
    */
   public TJTransform(Rectangle r, int op, int options,
-    TJCustomFilter cf) throws Exception {
+                     TJCustomFilter cf) throws Exception {
     super(r);
-    this.op = op;  this.options = options;  this.cf = cf;
+    this.op = op;
+    this.options = options;
+    this.cf = cf;
   }
 
   /**
index 6c07483..3240b07 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2011 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2011, 2013-2014 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -42,7 +42,7 @@ public class TJTransformer extends TJDecompressor {
 
   /**
    * Create a TurboJPEG lossless transformer instance and associate the JPEG
-   * image stored in <code>jpegImage</code> with the newly-created instance.
+   * image stored in <code>jpegImage</code> with the newly created instance.
    *
    * @param jpegImage JPEG image buffer (size of the JPEG image is assumed to
    * be the length of the array)
@@ -55,7 +55,7 @@ public class TJTransformer extends TJDecompressor {
   /**
    * Create a TurboJPEG lossless transformer instance and associate the JPEG
    * image of length <code>imageSize</code> bytes stored in
-   * <code>jpegImage</code> with the newly-created instance.
+   * <code>jpegImage</code> with the newly created instance.
    *
    * @param jpegImage JPEG image buffer
    *
@@ -73,31 +73,34 @@ public class TJTransformer extends TJDecompressor {
    * JPEG image structure to another without altering the values of the
    * coefficients.  While this is typically faster than decompressing the
    * image, transforming it, and re-compressing it, lossless transforms are not
-   * free.  Each lossless transform requires reading and Huffman decoding all
-   * of the coefficients in the source image, regardless of the size of the
-   * destination image.  Thus, this method provides a means of generating
-   * multiple transformed images from the same source or of applying multiple
-   * transformations simultaneously, in order to eliminate the need to read the
-   * source coefficients multiple times.
+   * free.  Each lossless transform requires reading and performing Huffman
+   * decoding on all of the coefficients in the source image, regardless of the
+   * size of the destination image.  Thus, this method provides a means of
+   * generating multiple transformed images from the same source or of applying
+   * multiple transformations simultaneously, in order to eliminate the need to
+   * read the source coefficients multiple times.
    *
    * @param dstBufs an array of image buffers.  <code>dstbufs[i]</code> will
    * receive a JPEG image that has been transformed using the parameters in
    * <code>transforms[i]</code>.  Use {@link TJ#bufSize} to determine the
-   * maximum size for each buffer based on the cropped width and height.
+   * maximum size for each buffer based on the transformed or cropped width and
+   * height and the level of subsampling used in the source image.
    *
    * @param transforms an array of {@link TJTransform} instances, each of
    * which specifies the transform parameters and/or cropping region for the
    * corresponding transformed output image
    *
-   * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
    */
   public void transform(byte[][] dstBufs, TJTransform[] transforms,
-    int flags) throws Exception {
-    if(jpegBuf == null) throw new Exception("JPEG buffer not initialized");
+                        int flags) throws Exception {
+    if (jpegBuf == null)
+      throw new Exception("JPEG buffer not initialized");
     transformedSizes = transform(jpegBuf, jpegBufSize, dstBufs, transforms,
-      flags);
+                                 flags);
   }
-  
+
   /**
    * Losslessly transform the JPEG image associated with this transformer
    * instance and return an array of {@link TJDecompressor} instances, each of
@@ -110,37 +113,38 @@ public class TJTransformer extends TJDecompressor {
    * @return an array of {@link TJDecompressor} instances, each of
    * which has a transformed JPEG image associated with it
    *
-   * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+   * @param flags the bitwise OR of one or more of
+   * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
    */
   public TJDecompressor[] transform(TJTransform[] transforms, int flags)
     throws Exception {
     byte[][] dstBufs = new byte[transforms.length][];
-    if(jpegWidth < 1 || jpegHeight < 1)
+    if (jpegWidth < 1 || jpegHeight < 1)
       throw new Exception("JPEG buffer not initialized");
-    for(int i = 0; i < transforms.length; i++) {
+    for (int i = 0; i < transforms.length; i++) {
       int w = jpegWidth, h = jpegHeight;
-      if((transforms[i].options & TJTransform.OPT_CROP) != 0) {
-        if(transforms[i].width != 0) w = transforms[i].width;
-        if(transforms[i].height != 0) h = transforms[i].height;
+      if ((transforms[i].options & TJTransform.OPT_CROP) != 0) {
+        if (transforms[i].width != 0) w = transforms[i].width;
+        if (transforms[i].height != 0) h = transforms[i].height;
       }
       dstBufs[i] = new byte[TJ.bufSize(w, h, jpegSubsamp)];
     }
     TJDecompressor[] tjd = new TJDecompressor[transforms.length];
     transform(dstBufs, transforms, flags);
-    for(int i = 0; i < transforms.length; i++)
+    for (int i = 0; i < transforms.length; i++)
       tjd[i] = new TJDecompressor(dstBufs[i], transformedSizes[i]);
     return tjd;
   }
-  
+
   /**
-   * Returns an array containing the sizes of the transformed JPEG images from
-   * the most recent call to {@link #transform transform()}.
+   * Returns an array containing the sizes of the transformed JPEG images
+   * generated by the most recent transform operation.
    *
-   * @return an array containing the sizes of the transformed JPEG images from
-   * the most recent call to {@link #transform transform()}
+   * @return an array containing the sizes of the transformed JPEG images
+   * generated by the most recent transform operation
    */
   public int[] getTransformedSizes() throws Exception {
-    if(transformedSizes == null)
+    if (transformedSizes == null)
       throw new Exception("No image has been transformed yet");
     return transformedSizes;
   }
index c892086..d7b032a 100644 (file)
@@ -55,6 +55,10 @@ extern "C" {
 #define org_libjpegturbo_turbojpeg_TJ_FLAG_FORCESSE3 128L
 #undef org_libjpegturbo_turbojpeg_TJ_FLAG_FASTUPSAMPLE
 #define org_libjpegturbo_turbojpeg_TJ_FLAG_FASTUPSAMPLE 256L
+#undef org_libjpegturbo_turbojpeg_TJ_FLAG_FASTDCT
+#define org_libjpegturbo_turbojpeg_TJ_FLAG_FASTDCT 2048L
+#undef org_libjpegturbo_turbojpeg_TJ_FLAG_ACCURATEDCT
+#define org_libjpegturbo_turbojpeg_TJ_FLAG_ACCURATEDCT 4096L
 /*
  * Class:     org_libjpegturbo_turbojpeg_TJ
  * Method:    bufSize
index 59f81e3..2fc9136 100644 (file)
@@ -34,6 +34,14 @@ JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3
 /*
  * Class:     org_libjpegturbo_turbojpeg_TJCompressor
  * Method:    compress
+ * Signature: ([BIIIIII[BIII)I
+ */
+JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3BIIIIII_3BIII
+  (JNIEnv *, jobject, jbyteArray, jint, jint, jint, jint, jint, jint, jbyteArray, jint, jint, jint);
+
+/*
+ * Class:     org_libjpegturbo_turbojpeg_TJCompressor
+ * Method:    compress
  * Signature: ([IIIII[BIII)I
  */
 JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3IIIII_3BIII
@@ -41,6 +49,14 @@ JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3
 
 /*
  * Class:     org_libjpegturbo_turbojpeg_TJCompressor
+ * Method:    compress
+ * Signature: ([IIIIIII[BIII)I
+ */
+JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3IIIIIII_3BIII
+  (JNIEnv *, jobject, jintArray, jint, jint, jint, jint, jint, jint, jbyteArray, jint, jint, jint);
+
+/*
+ * Class:     org_libjpegturbo_turbojpeg_TJCompressor
  * Method:    encodeYUV
  * Signature: ([BIIII[BII)V
  */
index 6b67296..f798a77 100644 (file)
@@ -42,6 +42,14 @@ JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
 /*
  * Class:     org_libjpegturbo_turbojpeg_TJDecompressor
  * Method:    decompress
+ * Signature: ([BI[BIIIIIII)V
+ */
+JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3BIIIIIII
+  (JNIEnv *, jobject, jbyteArray, jint, jbyteArray, jint, jint, jint, jint, jint, jint, jint);
+
+/*
+ * Class:     org_libjpegturbo_turbojpeg_TJDecompressor
+ * Method:    decompress
  * Signature: ([BI[IIIIII)V
  */
 JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3IIIIII
@@ -49,6 +57,14 @@ JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
 
 /*
  * Class:     org_libjpegturbo_turbojpeg_TJDecompressor
+ * Method:    decompress
+ * Signature: ([BI[IIIIIIII)V
+ */
+JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3IIIIIIII
+  (JNIEnv *, jobject, jbyteArray, jint, jintArray, jint, jint, jint, jint, jint, jint, jint);
+
+/*
+ * Class:     org_libjpegturbo_turbojpeg_TJDecompressor
  * Method:    decompressToYUV
  * Signature: ([BI[BI)V
  */
index dbac84a..dda3beb 100644 (file)
@@ -1,9 +1,10 @@
 /*
  * jccolext.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1996, Thomas G. Lane.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2009-2012, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains input colorspace conversion routines.
index 3a0772b..94b4184 100644 (file)
--- a/jccolor.c
+++ b/jccolor.c
@@ -1,10 +1,11 @@
 /*
  * jccolor.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1996, Thomas G. Lane.
+ * libjpeg-turbo Modifications:
  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
  * Copyright (C) 2009-2012, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains input colorspace conversion routines.
index 12f8872..3234a01 100644 (file)
@@ -1,11 +1,12 @@
 /*
  * jcdctmgr.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1994-1996, Thomas G. Lane.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 1999-2006, MIYASAKA Masaru.
  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
  * Copyright (C) 2011 D. R. Commander
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains the forward-DCT management logic.
index fd4fa46..29bf389 100644 (file)
--- a/jchuff.c
+++ b/jchuff.c
@@ -1,9 +1,10 @@
 /*
  * jchuff.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1997, Thomas G. Lane.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2009-2011, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains Huffman entropy encoding routines.
@@ -298,8 +299,6 @@ dump_buffer (working_state * state)
 {
   struct jpeg_destination_mgr * dest = state->cinfo->dest;
 
-  dest->free_in_buffer = state->free_in_buffer;
-
   if (! (*dest->empty_output_buffer) (state->cinfo))
     return FALSE;
   /* After a successful buffer dump, must reset buffer pointers */
index bd0051a..5b7ff21 100644 (file)
@@ -170,7 +170,7 @@ process_data_buffer_main (j_compress_ptr cinfo,
                          JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
                          JDIMENSION in_rows_avail)
 {
-  my_main_ptr main = (my_main_ptr) cinfo->main;
+  my_main_ptr main_ptr = (my_main_ptr) cinfo->main;
   int ci;
   jpeg_component_info *compptr;
   boolean writing = (main_ptr->pass_mode != JBUF_CRANK_DEST);
index b1c1e45..4fbece4 100644 (file)
@@ -1,9 +1,11 @@
 /*
  * jcmarker.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1998, Thomas G. Lane.
+ * Modified 2003-2010 by Guido Vollbeding.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2010, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains routines to write JPEG datastream markers.
@@ -20,24 +22,24 @@ typedef enum {                      /* JPEG marker codes */
   M_SOF1  = 0xc1,
   M_SOF2  = 0xc2,
   M_SOF3  = 0xc3,
-  
+
   M_SOF5  = 0xc5,
   M_SOF6  = 0xc6,
   M_SOF7  = 0xc7,
-  
+
   M_JPG   = 0xc8,
   M_SOF9  = 0xc9,
   M_SOF10 = 0xca,
   M_SOF11 = 0xcb,
-  
+
   M_SOF13 = 0xcd,
   M_SOF14 = 0xce,
   M_SOF15 = 0xcf,
-  
+
   M_DHT   = 0xc4,
-  
+
   M_DAC   = 0xcc,
-  
+
   M_RST0  = 0xd0,
   M_RST1  = 0xd1,
   M_RST2  = 0xd2,
@@ -46,7 +48,7 @@ typedef enum {                        /* JPEG marker codes */
   M_RST5  = 0xd5,
   M_RST6  = 0xd6,
   M_RST7  = 0xd7,
-  
+
   M_SOI   = 0xd8,
   M_EOI   = 0xd9,
   M_SOS   = 0xda,
@@ -55,7 +57,7 @@ typedef enum {                        /* JPEG marker codes */
   M_DRI   = 0xdd,
   M_DHP   = 0xde,
   M_EXP   = 0xdf,
-  
+
   M_APP0  = 0xe0,
   M_APP1  = 0xe1,
   M_APP2  = 0xe2,
@@ -72,13 +74,13 @@ typedef enum {                      /* JPEG marker codes */
   M_APP13 = 0xed,
   M_APP14 = 0xee,
   M_APP15 = 0xef,
-  
+
   M_JPG0  = 0xf0,
   M_JPG13 = 0xfd,
   M_COM   = 0xfe,
-  
+
   M_TEM   = 0x01,
-  
+
   M_ERROR = 0x100
 } JPEG_MARKER;
 
@@ -231,32 +233,38 @@ emit_dac (j_compress_ptr cinfo)
   char ac_in_use[NUM_ARITH_TBLS];
   int length, i;
   jpeg_component_info *compptr;
-  
+
   for (i = 0; i < NUM_ARITH_TBLS; i++)
     dc_in_use[i] = ac_in_use[i] = 0;
-  
+
   for (i = 0; i < cinfo->comps_in_scan; i++) {
     compptr = cinfo->cur_comp_info[i];
-    dc_in_use[compptr->dc_tbl_no] = 1;
-    ac_in_use[compptr->ac_tbl_no] = 1;
+    /* DC needs no table for refinement scan */
+    if (cinfo->Ss == 0 && cinfo->Ah == 0)
+      dc_in_use[compptr->dc_tbl_no] = 1;
+    /* AC needs no table when not present */
+    if (cinfo->Se)
+      ac_in_use[compptr->ac_tbl_no] = 1;
   }
-  
+
   length = 0;
   for (i = 0; i < NUM_ARITH_TBLS; i++)
     length += dc_in_use[i] + ac_in_use[i];
-  
-  emit_marker(cinfo, M_DAC);
-  
-  emit_2bytes(cinfo, length*2 + 2);
-  
-  for (i = 0; i < NUM_ARITH_TBLS; i++) {
-    if (dc_in_use[i]) {
-      emit_byte(cinfo, i);
-      emit_byte(cinfo, cinfo->arith_dc_L[i] + (cinfo->arith_dc_U[i]<<4));
-    }
-    if (ac_in_use[i]) {
-      emit_byte(cinfo, i + 0x10);
-      emit_byte(cinfo, cinfo->arith_ac_K[i]);
+
+  if (length) {
+    emit_marker(cinfo, M_DAC);
+
+    emit_2bytes(cinfo, length*2 + 2);
+
+    for (i = 0; i < NUM_ARITH_TBLS; i++) {
+      if (dc_in_use[i]) {
+       emit_byte(cinfo, i);
+       emit_byte(cinfo, cinfo->arith_dc_L[i] + (cinfo->arith_dc_U[i]<<4));
+      }
+      if (ac_in_use[i]) {
+       emit_byte(cinfo, i + 0x10);
+       emit_byte(cinfo, cinfo->arith_ac_K[i]);
+      }
     }
   }
 #endif /* C_ARITH_CODING_SUPPORTED */
@@ -322,22 +330,16 @@ emit_sos (j_compress_ptr cinfo)
   for (i = 0; i < cinfo->comps_in_scan; i++) {
     compptr = cinfo->cur_comp_info[i];
     emit_byte(cinfo, compptr->component_id);
-    td = compptr->dc_tbl_no;
-    ta = compptr->ac_tbl_no;
-    if (cinfo->progressive_mode) {
-      /* Progressive mode: only DC or only AC tables are used in one scan;
-       * furthermore, Huffman coding of DC refinement uses no table at all.
-       * We emit 0 for unused field(s); this is recommended by the P&M text
-       * but does not seem to be specified in the standard.
-       */
-      if (cinfo->Ss == 0) {
-       ta = 0;                 /* DC scan */
-       if (cinfo->Ah != 0 && !cinfo->arith_code)
-         td = 0;               /* no DC table either */
-      } else {
-       td = 0;                 /* AC scan */
-      }
-    }
+
+    /* We emit 0 for unused field(s); this is recommended by the P&M text
+     * but does not seem to be specified in the standard.
+     */
+
+    /* DC needs no table for refinement scan */
+    td = cinfo->Ss == 0 && cinfo->Ah == 0 ? compptr->dc_tbl_no : 0;
+    /* AC needs no table when not present */
+    ta = cinfo->Se ? compptr->ac_tbl_no : 0;
+
     emit_byte(cinfo, (td << 4) + ta);
   }
 
@@ -531,7 +533,10 @@ write_frame_header (j_compress_ptr cinfo)
 
   /* Emit the proper SOF marker */
   if (cinfo->arith_code) {
-    emit_sof(cinfo, M_SOF9);   /* SOF code for arithmetic coding */
+    if (cinfo->progressive_mode)
+      emit_sof(cinfo, M_SOF10); /* SOF code for progressive arithmetic */
+    else
+      emit_sof(cinfo, M_SOF9);  /* SOF code for sequential arithmetic */
   } else {
     if (cinfo->progressive_mode)
       emit_sof(cinfo, M_SOF2); /* SOF code for progressive Huffman */
@@ -568,19 +573,12 @@ write_scan_header (j_compress_ptr cinfo)
      */
     for (i = 0; i < cinfo->comps_in_scan; i++) {
       compptr = cinfo->cur_comp_info[i];
-      if (cinfo->progressive_mode) {
-       /* Progressive mode: only DC or only AC tables are used in one scan */
-       if (cinfo->Ss == 0) {
-         if (cinfo->Ah == 0)   /* DC needs no table for refinement scan */
-           emit_dht(cinfo, compptr->dc_tbl_no, FALSE);
-       } else {
-         emit_dht(cinfo, compptr->ac_tbl_no, TRUE);
-       }
-      } else {
-       /* Sequential mode: need both DC and AC tables */
+      /* DC needs no table for refinement scan */
+      if (cinfo->Ss == 0 && cinfo->Ah == 0)
        emit_dht(cinfo, compptr->dc_tbl_no, FALSE);
+      /* AC needs no table when not present */
+      if (cinfo->Se)
        emit_dht(cinfo, compptr->ac_tbl_no, TRUE);
-      }
     }
   }
 
index 3ca346c..dca0315 100644 (file)
@@ -1,10 +1,11 @@
 /*
  * jcmaster.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1997, Thomas G. Lane.
  * Modified 2003-2010 by Guido Vollbeding.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2010, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains master control logic for the JPEG compressor.
@@ -601,7 +602,7 @@ jinit_c_master_control (j_compress_ptr cinfo, boolean transcode_only)
     cinfo->num_scans = 1;
   }
 
-  if (cinfo->progressive_mode) /*  TEMPORARY HACK ??? */
+  if (cinfo->progressive_mode && !cinfo->arith_code)   /*  TEMPORARY HACK ??? */
     cinfo->optimize_coding = TRUE; /* assume default tables no good for progressive mode */
 
   /* Initialize my private state */
index 27d4cc9..6b80ce2 100644 (file)
@@ -12,6 +12,9 @@
 /* Support arithmetic decoding */
 #undef D_ARITH_CODING_SUPPORTED
 
+/* Support in-memory source/destination managers */
+#undef MEM_SRCDST_SUPPORTED
+
 /* Compiler supports function prototypes. */
 #undef HAVE_PROTOTYPES
 
index 557fdc9..2b9a740 100644 (file)
--- a/jcparam.c
+++ b/jcparam.c
@@ -1,10 +1,11 @@
 /*
  * jcparam.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1998, Thomas G. Lane.
  * Modified 2003-2008 by Guido Vollbeding.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2009-2011, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains optional default-setting code for the JPEG compressor.
index 98f16da..358ed25 100644 (file)
--- a/jcstest.c
+++ b/jcstest.c
@@ -78,7 +78,7 @@ int main(void)
   jerr.pub.output_message = my_output_message;
 
   if(setjmp(jerr.jb)) {
-    // this will execute if libjpeg has an error
+    /* this will execute if libjpeg has an error */
     jcs_valid = 0;
     goto done;
   }
@@ -105,7 +105,7 @@ int main(void)
   #endif
 
   if(setjmp(jerr.jb)) {
-    // this will execute if libjpeg has an error
+    /* this will execute if libjpeg has an error */
     jcs_alpha_valid = 0;
     goto done2;
   }
index 2343da5..a50fda5 100644 (file)
@@ -1,9 +1,10 @@
 /*
  * jdapistd.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1994-1996, Thomas G. Lane.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2010, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains application interface code for the decompression half
index cb674dc..a8bf240 100644 (file)
@@ -1,9 +1,11 @@
 /*
- * jdatadst.c
+ * jdatadst-tj.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1994-1996, Thomas G. Lane.
- * Modified 2009 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
+ * Modified 2009-2012 by Guido Vollbeding.
+ * libjpeg-turbo Modifications:
+ * Copyright (C) 2011, D. R. Commander.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains compression data destination routines for the case of
@@ -91,7 +93,7 @@ empty_mem_output_buffer (j_compress_ptr cinfo)
 
   /* Try to allocate new buffer with double size */
   nextsize = dest->bufsize * 2;
-  nextbuffer = malloc(nextsize);
+  nextbuffer = (JOCTET *) malloc(nextsize);
 
   if (nextbuffer == NULL)
     ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10);
@@ -175,7 +177,7 @@ jpeg_mem_dest_tj (j_compress_ptr cinfo,
   if (*outbuffer == NULL || *outsize == 0) {
     if (alloc) {
       /* Allocate initial buffer */
-      dest->newbuffer = *outbuffer = malloc(OUTPUT_BUF_SIZE);
+      dest->newbuffer = *outbuffer = (unsigned char *) malloc(OUTPUT_BUF_SIZE);
       if (dest->newbuffer == NULL)
         ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10);
       *outsize = OUTPUT_BUF_SIZE;
index 2f48869..1b89fab 100644 (file)
@@ -1,9 +1,11 @@
 /*
  * jdatadst.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1994-1996, Thomas G. Lane.
- * Modified 2009 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
+ * Modified 2009-2012 by Guido Vollbeding.
+ * libjpeg-turbo Modifications:
+ * Copyright (C) 2013, D. R. Commander.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains compression data destination routines for the case of
@@ -40,7 +42,7 @@ typedef my_destination_mgr * my_dest_ptr;
 #define OUTPUT_BUF_SIZE  4096  /* choose an efficiently fwrite'able size */
 
 
-#if JPEG_LIB_VERSION >= 80
+#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
 /* Expanded data destination object for memory output */
 
 typedef struct {
@@ -76,7 +78,7 @@ init_destination (j_compress_ptr cinfo)
   dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
 }
 
-#if JPEG_LIB_VERSION >= 80
+#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
 METHODDEF(void)
 init_mem_destination (j_compress_ptr cinfo)
 {
@@ -123,7 +125,7 @@ empty_output_buffer (j_compress_ptr cinfo)
   return TRUE;
 }
 
-#if JPEG_LIB_VERSION >= 80
+#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
 METHODDEF(boolean)
 empty_mem_output_buffer (j_compress_ptr cinfo)
 {
@@ -133,7 +135,7 @@ empty_mem_output_buffer (j_compress_ptr cinfo)
 
   /* Try to allocate new buffer with double size */
   nextsize = dest->bufsize * 2;
-  nextbuffer = malloc(nextsize);
+  nextbuffer = (JOCTET *) malloc(nextsize);
 
   if (nextbuffer == NULL)
     ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10);
@@ -182,14 +184,14 @@ term_destination (j_compress_ptr cinfo)
     ERREXIT(cinfo, JERR_FILE_WRITE);
 }
 
-#if JPEG_LIB_VERSION >= 80
+#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
 METHODDEF(void)
 term_mem_destination (j_compress_ptr cinfo)
 {
   my_mem_dest_ptr dest = (my_mem_dest_ptr) cinfo->dest;
 
   *dest->outbuffer = dest->buffer;
-  *dest->outsize = dest->bufsize - dest->pub.free_in_buffer;
+  *dest->outsize = (unsigned long)(dest->bufsize - dest->pub.free_in_buffer);
 }
 #endif
 
@@ -225,7 +227,7 @@ jpeg_stdio_dest (j_compress_ptr cinfo, FILE * outfile)
 }
 
 
-#if JPEG_LIB_VERSION >= 80
+#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
 /*
  * Prepare for output to a memory buffer.
  * The caller may supply an own initial buffer with appropriate size.
@@ -265,7 +267,7 @@ jpeg_mem_dest (j_compress_ptr cinfo,
 
   if (*outbuffer == NULL || *outsize == 0) {
     /* Allocate initial buffer */
-    dest->newbuffer = *outbuffer = malloc(OUTPUT_BUF_SIZE);
+    dest->newbuffer = *outbuffer = (unsigned char *) malloc(OUTPUT_BUF_SIZE);
     if (dest->newbuffer == NULL)
       ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10);
     *outsize = OUTPUT_BUF_SIZE;
index d860a02..259c6de 100644 (file)
@@ -1,9 +1,11 @@
 /*
- * jdatasrc.c
+ * jdatasrc-tj.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1994-1996, Thomas G. Lane.
- * Modified 2009-2010 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
+ * Modified 2009-2011 by Guido Vollbeding.
+ * libjpeg-turbo Modifications:
+ * Copyright (C) 2011, D. R. Commander.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains decompression data source routines for the case of
@@ -69,16 +71,17 @@ init_mem_source (j_decompress_ptr cinfo)
 METHODDEF(boolean)
 fill_mem_input_buffer (j_decompress_ptr cinfo)
 {
-  static JOCTET mybuffer[4];
+  static const JOCTET mybuffer[4] = {
+    (JOCTET) 0xFF, (JOCTET) JPEG_EOI, 0, 0
+  };
 
   /* The whole JPEG data is expected to reside in the supplied memory
    * buffer, so any request for more data beyond the given buffer size
    * is treated as an error.
    */
   WARNMS(cinfo, JWRN_JPEG_EOF);
+
   /* Insert a fake EOI marker */
-  mybuffer[0] = (JOCTET) 0xFF;
-  mybuffer[1] = (JOCTET) JPEG_EOI;
 
   cinfo->src->next_input_byte = mybuffer;
   cinfo->src->bytes_in_buffer = 2;
index 7609f76..1e9c8ad 100644 (file)
@@ -1,9 +1,11 @@
 /*
  * jdatasrc.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1994-1996, Thomas G. Lane.
- * Modified 2009-2010 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
+ * Modified 2009-2011 by Guido Vollbeding.
+ * libjpeg-turbo Modifications:
+ * Copyright (C) 2013, D. R. Commander.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains decompression data source routines for the case of
@@ -53,7 +55,7 @@ init_source (j_decompress_ptr cinfo)
   src->start_of_file = TRUE;
 }
 
-#if JPEG_LIB_VERSION >= 80
+#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
 METHODDEF(void)
 init_mem_source (j_decompress_ptr cinfo)
 {
@@ -120,20 +122,21 @@ fill_input_buffer (j_decompress_ptr cinfo)
   return TRUE;
 }
 
-#if JPEG_LIB_VERSION >= 80
+#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
 METHODDEF(boolean)
 fill_mem_input_buffer (j_decompress_ptr cinfo)
 {
-  static JOCTET mybuffer[4];
+  static const JOCTET mybuffer[4] = {
+    (JOCTET) 0xFF, (JOCTET) JPEG_EOI, 0, 0
+  };
 
   /* The whole JPEG data is expected to reside in the supplied memory
    * buffer, so any request for more data beyond the given buffer size
    * is treated as an error.
    */
   WARNMS(cinfo, JWRN_JPEG_EOF);
+
   /* Insert a fake EOI marker */
-  mybuffer[0] = (JOCTET) 0xFF;
-  mybuffer[1] = (JOCTET) JPEG_EOI;
 
   cinfo->src->next_input_byte = mybuffer;
   cinfo->src->bytes_in_buffer = 2;
@@ -243,7 +246,7 @@ jpeg_stdio_src (j_decompress_ptr cinfo, FILE * infile)
 }
 
 
-#if JPEG_LIB_VERSION >= 80
+#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
 /*
  * Prepare for input from a supplied memory buffer.
  * The buffer must contain the whole JPEG data.
index 48a9fc6..d38db6c 100644 (file)
@@ -1,9 +1,10 @@
 /*
  * jdcoefct.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1994-1997, Thomas G. Lane.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2010, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains the coefficient buffer controller for decompression.
index 3b8aeff..6e9e31a 100644 (file)
@@ -1,9 +1,10 @@
 /*
  * jdcolext.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1997, Thomas G. Lane.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2009, 2011, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains output colorspace conversion routines.
index 694de9b..ccf9047 100644 (file)
--- a/jdcolor.c
+++ b/jdcolor.c
@@ -1,10 +1,12 @@
 /*
  * jdcolor.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1997, Thomas G. Lane.
+ * Modified 2011 by Guido Vollbeding.
+ * libjpeg-turbo Modifications:
  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
  * Copyright (C) 2009, 2011-2012, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains output colorspace conversion routines.
@@ -27,20 +29,28 @@ typedef struct {
   int * Cb_b_tab;              /* => table for Cb to B conversion */
   INT32 * Cr_g_tab;            /* => table for Cr to G conversion */
   INT32 * Cb_g_tab;            /* => table for Cb to G conversion */
+
+  /* Private state for RGB->Y conversion */
+  INT32 * rgb_y_tab;           /* => table for RGB to Y conversion */
 } my_color_deconverter;
 
 typedef my_color_deconverter * my_cconvert_ptr;
 
 
 /**************** YCbCr -> RGB conversion: most common case **************/
+/****************   RGB -> Y   conversion: less common case **************/
 
 /*
  * YCbCr is defined per CCIR 601-1, except that Cb and Cr are
  * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5.
  * The conversion equations to be implemented are therefore
+ *
  *     R = Y                + 1.40200 * Cr
  *     G = Y - 0.34414 * Cb - 0.71414 * Cr
  *     B = Y + 1.77200 * Cb
+ *
+ *     Y = 0.29900 * R + 0.58700 * G + 0.11400 * B
+ *
  * where Cb and Cr represent the incoming values less CENTERJSAMPLE.
  * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.)
  *
@@ -65,6 +75,18 @@ typedef my_color_deconverter * my_cconvert_ptr;
 #define ONE_HALF       ((INT32) 1 << (SCALEBITS-1))
 #define FIX(x)         ((INT32) ((x) * (1L<<SCALEBITS) + 0.5))
 
+/* We allocate one big table for RGB->Y conversion and divide it up into
+ * three parts, instead of doing three alloc_small requests.  This lets us
+ * use a single table base address, which can be held in a register in the
+ * inner loops on many machines (more than can hold all three addresses,
+ * anyway).
+ */
+
+#define R_Y_OFF                0                       /* offset to R => Y section */
+#define G_Y_OFF                (1*(MAXJSAMPLE+1))      /* offset to G => Y section */
+#define B_Y_OFF                (2*(MAXJSAMPLE+1))      /* etc. */
+#define TABLE_SIZE     (3*(MAXJSAMPLE+1))
+
 
 /* Include inline routines for colorspace extensions */
 
@@ -272,6 +294,66 @@ ycc_rgb_convert (j_decompress_ptr cinfo,
 
 
 /*
+ * Initialize for RGB->grayscale colorspace conversion.
+ */
+
+LOCAL(void)
+build_rgb_y_table (j_decompress_ptr cinfo)
+{
+  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
+  INT32 * rgb_y_tab;
+  INT32 i;
+
+  /* Allocate and fill in the conversion tables. */
+  cconvert->rgb_y_tab = rgb_y_tab = (INT32 *)
+    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
+                               (TABLE_SIZE * SIZEOF(INT32)));
+
+  for (i = 0; i <= MAXJSAMPLE; i++) {
+    rgb_y_tab[i+R_Y_OFF] = FIX(0.29900) * i;
+    rgb_y_tab[i+G_Y_OFF] = FIX(0.58700) * i;
+    rgb_y_tab[i+B_Y_OFF] = FIX(0.11400) * i + ONE_HALF;
+  }
+}
+
+
+/*
+ * Convert RGB to grayscale.
+ */
+
+METHODDEF(void)
+rgb_gray_convert (j_decompress_ptr cinfo,
+                 JSAMPIMAGE input_buf, JDIMENSION input_row,
+                 JSAMPARRAY output_buf, int num_rows)
+{
+  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
+  register int r, g, b;
+  register INT32 * ctab = cconvert->rgb_y_tab;
+  register JSAMPROW outptr;
+  register JSAMPROW inptr0, inptr1, inptr2;
+  register JDIMENSION col;
+  JDIMENSION num_cols = cinfo->output_width;
+
+  while (--num_rows >= 0) {
+    inptr0 = input_buf[0][input_row];
+    inptr1 = input_buf[1][input_row];
+    inptr2 = input_buf[2][input_row];
+    input_row++;
+    outptr = *output_buf++;
+    for (col = 0; col < num_cols; col++) {
+      r = GETJSAMPLE(inptr0[col]);
+      g = GETJSAMPLE(inptr1[col]);
+      b = GETJSAMPLE(inptr2[col]);
+      /* Y */
+      outptr[col] = (JSAMPLE)
+               ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
+                >> SCALEBITS);
+    }
+  }
+}
+
+
+/*
  * Color conversion for no colorspace change: just copy the data,
  * converting from separate-planes to interleaved representation.
  */
@@ -409,6 +491,7 @@ rgb_rgb_convert (j_decompress_ptr cinfo,
   }
 }
 
+
 /*
  * Adobe-style YCCK->CMYK conversion.
  * We convert YCbCr to R=1-C, G=1-M, and B=1-Y using the same
@@ -526,6 +609,9 @@ jinit_color_deconverter (j_decompress_ptr cinfo)
       /* For color->grayscale conversion, only the Y (0) component is needed */
       for (ci = 1; ci < cinfo->num_components; ci++)
        cinfo->comp_info[ci].component_needed = FALSE;
+    } else if (cinfo->jpeg_color_space == JCS_RGB) {
+      cconvert->pub.color_convert = rgb_gray_convert;
+      build_rgb_y_table(cinfo);
     } else
       ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
     break;
diff --git a/jdct.h b/jdct.h
index 7b49a97..3637448 100644 (file)
--- a/jdct.h
+++ b/jdct.h
@@ -95,9 +95,21 @@ typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */
 #define jpeg_idct_islow                jRDislow
 #define jpeg_idct_ifast                jRDifast
 #define jpeg_idct_float                jRDfloat
+#define jpeg_idct_7x7          jRD7x7
+#define jpeg_idct_6x6          jRD6x6
+#define jpeg_idct_5x5          jRD5x5
 #define jpeg_idct_4x4          jRD4x4
+#define jpeg_idct_3x3          jRD3x3
 #define jpeg_idct_2x2          jRD2x2
 #define jpeg_idct_1x1          jRD1x1
+#define jpeg_idct_9x9          jRD9x9
+#define jpeg_idct_10x10                jRD10x10
+#define jpeg_idct_11x11                jRD11x11
+#define jpeg_idct_12x12                jRD12x12
+#define jpeg_idct_13x13                jRD13x13
+#define jpeg_idct_14x14                jRD14x14
+#define jpeg_idct_15x15                jRD15x15
+#define jpeg_idct_16x16                jRD16x16
 #endif /* NEED_SHORT_EXTERNAL_NAMES */
 
 /* Extern declarations for the forward and inverse DCT routines. */
@@ -115,15 +127,51 @@ EXTERN(void) jpeg_idct_ifast
 EXTERN(void) jpeg_idct_float
     JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
         JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+EXTERN(void) jpeg_idct_7x7
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+EXTERN(void) jpeg_idct_6x6
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+EXTERN(void) jpeg_idct_5x5
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
 EXTERN(void) jpeg_idct_4x4
     JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
         JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+EXTERN(void) jpeg_idct_3x3
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
 EXTERN(void) jpeg_idct_2x2
     JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
         JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
 EXTERN(void) jpeg_idct_1x1
     JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
         JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+EXTERN(void) jpeg_idct_9x9
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+EXTERN(void) jpeg_idct_10x10
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+EXTERN(void) jpeg_idct_11x11
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+EXTERN(void) jpeg_idct_12x12
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+EXTERN(void) jpeg_idct_13x13
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+EXTERN(void) jpeg_idct_14x14
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+EXTERN(void) jpeg_idct_15x15
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+EXTERN(void) jpeg_idct_16x16
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
 
 
 /*
index 044e469..0a5decb 100644 (file)
@@ -1,10 +1,12 @@
 /*
  * jddctmgr.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1994-1996, Thomas G. Lane.
+ * Modified 2002-2010 by Guido Vollbeding.
+ * libjpeg-turbo Modifications:
  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
  * Copyright (C) 2010, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains the inverse-DCT management logic.
@@ -115,6 +117,10 @@ start_pass (j_decompress_ptr cinfo)
         method_ptr = jpeg_idct_2x2;
       method = JDCT_ISLOW;     /* jidctred uses islow-style table */
       break;
+    case 3:
+      method_ptr = jpeg_idct_3x3;
+      method = JDCT_ISLOW;     /* jidctint uses islow-style table */
+      break;
     case 4:
       if (jsimd_can_idct_4x4())
         method_ptr = jsimd_idct_4x4;
@@ -122,6 +128,18 @@ start_pass (j_decompress_ptr cinfo)
         method_ptr = jpeg_idct_4x4;
       method = JDCT_ISLOW;     /* jidctred uses islow-style table */
       break;
+    case 5:
+      method_ptr = jpeg_idct_5x5;
+      method = JDCT_ISLOW;     /* jidctint uses islow-style table */
+      break;
+    case 6:
+      method_ptr = jpeg_idct_6x6;
+      method = JDCT_ISLOW;     /* jidctint uses islow-style table */
+      break;
+    case 7:
+      method_ptr = jpeg_idct_7x7;
+      method = JDCT_ISLOW;     /* jidctint uses islow-style table */
+      break;
 #endif
     case DCTSIZE:
       switch (cinfo->dct_method) {
@@ -157,6 +175,38 @@ start_pass (j_decompress_ptr cinfo)
        break;
       }
       break;
+    case 9:
+      method_ptr = jpeg_idct_9x9;
+      method = JDCT_ISLOW;     /* jidctint uses islow-style table */
+      break;
+    case 10:
+      method_ptr = jpeg_idct_10x10;
+      method = JDCT_ISLOW;     /* jidctint uses islow-style table */
+      break;
+    case 11:
+      method_ptr = jpeg_idct_11x11;
+      method = JDCT_ISLOW;     /* jidctint uses islow-style table */
+      break;
+    case 12:
+      method_ptr = jpeg_idct_12x12;
+      method = JDCT_ISLOW;     /* jidctint uses islow-style table */
+      break;
+    case 13:
+      method_ptr = jpeg_idct_13x13;
+      method = JDCT_ISLOW;     /* jidctint uses islow-style table */
+      break;
+    case 14:
+      method_ptr = jpeg_idct_14x14;
+      method = JDCT_ISLOW;     /* jidctint uses islow-style table */
+      break;
+    case 15:
+      method_ptr = jpeg_idct_15x15;
+      method = JDCT_ISLOW;     /* jidctint uses islow-style table */
+      break;
+    case 16:
+      method_ptr = jpeg_idct_16x16;
+      method = JDCT_ISLOW;     /* jidctint uses islow-style table */
+      break;
     default:
       ERREXIT1(cinfo, JERR_BAD_DCTSIZE, compptr->_DCT_scaled_size);
       break;
index f822dba..dba5f18 100644 (file)
--- a/jdhuff.c
+++ b/jdhuff.c
@@ -1,9 +1,10 @@
 /*
  * jdhuff.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1997, Thomas G. Lane.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2009-2011, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains Huffman entropy decoding routines.
index 96f2dab..2201436 100644 (file)
--- a/jdhuff.h
+++ b/jdhuff.h
@@ -1,9 +1,10 @@
 /*
  * jdhuff.h
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1997, Thomas G. Lane.
+ * Modifications:
  * Copyright (C) 2010-2011, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains declarations for Huffman entropy decoding routines
index 9fcd089..e7ba33f 100644 (file)
--- a/jdinput.c
+++ b/jdinput.c
@@ -1,10 +1,10 @@
 /*
  * jdinput.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1997, Thomas G. Lane.
- * Modified 2002-2009 by Guido Vollbeding.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2010, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains input control logic for the JPEG decompressor.
@@ -38,79 +38,6 @@ METHODDEF(int) consume_markers JPP((j_decompress_ptr cinfo));
  * Routines to calculate various quantities related to the size of the image.
  */
 
-
-#if JPEG_LIB_VERSION >= 80
-/*
- * Compute output image dimensions and related values.
- * NOTE: this is exported for possible use by application.
- * Hence it mustn't do anything that can't be done twice.
- */
-
-GLOBAL(void)
-jpeg_core_output_dimensions (j_decompress_ptr cinfo)
-/* Do computations that are needed before master selection phase.
- * This function is used for transcoding and full decompression.
- */
-{
-#ifdef IDCT_SCALING_SUPPORTED
-  int ci;
-  jpeg_component_info *compptr;
-
-  /* Compute actual output image dimensions and DCT scaling choices. */
-  if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom) {
-    /* Provide 1/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 1;
-    cinfo->min_DCT_v_scaled_size = 1;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 2) {
-    /* Provide 2/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 2L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 2L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 2;
-    cinfo->min_DCT_v_scaled_size = 2;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 4) {
-    /* Provide 4/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 4L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 4L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 4;
-    cinfo->min_DCT_v_scaled_size = 4;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 8) {
-    /* Provide 8/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 8L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 8L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 8;
-    cinfo->min_DCT_v_scaled_size = 8;
-  }
-  /* Recompute dimensions of components */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    compptr->DCT_h_scaled_size = cinfo->min_DCT_h_scaled_size;
-    compptr->DCT_v_scaled_size = cinfo->min_DCT_v_scaled_size;
-  }
-
-#else /* !IDCT_SCALING_SUPPORTED */
-
-  /* Hardwire it to "no scaling" */
-  cinfo->output_width = cinfo->image_width;
-  cinfo->output_height = cinfo->image_height;
-  /* jdinput.c has already initialized DCT_scaled_size,
-   * and has computed unscaled downsampled_width and downsampled_height.
-   */
-
-#endif /* IDCT_SCALING_SUPPORTED */
-}
-#endif
-
-
 LOCAL(void)
 initial_setup (j_decompress_ptr cinfo)
 /* Called once, when first SOS marker is reached */
index eb32cae..26b816c 100644 (file)
@@ -1,9 +1,10 @@
 /*
  * jdmainct.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1994-1996, Thomas G. Lane.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2010, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains the main buffer controller for decompression.
index 6fc0f7d..c8771bc 100644 (file)
@@ -1,9 +1,10 @@
 /*
  * jdmarker.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1998, Thomas G. Lane.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2012, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains routines to decode JPEG datastream markers.
@@ -303,7 +304,7 @@ get_sos (j_decompress_ptr cinfo)
 /* Process a SOS marker */
 {
   INT32 length;
-  int i, ci, n, c, cc;
+  int i, ci, n, c, cc, pi;
   jpeg_component_info * compptr;
   INPUT_VARS(cinfo);
 
@@ -347,6 +348,13 @@ get_sos (j_decompress_ptr cinfo)
     
     TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc,
             compptr->dc_tbl_no, compptr->ac_tbl_no);
+
+    /* This CSi (cc) should differ from the previous CSi */
+    for (pi = 0; pi < i; pi++) {
+      if (cinfo->cur_comp_info[pi] == compptr) {
+        ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, cc);
+      }
+    }
   }
 
   /* Collect the additional scan parameters Ss, Se, Ah/Al. */
@@ -464,18 +472,21 @@ get_dht (j_decompress_ptr cinfo)
     for (i = 0; i < count; i++)
       INPUT_BYTE(cinfo, huffval[i], return FALSE);
 
+    MEMZERO(&huffval[count], (256 - count) * SIZEOF(UINT8));
+
     length -= count;
 
     if (index & 0x10) {                /* AC table definition */
       index -= 0x10;
+      if (index < 0 || index >= NUM_HUFF_TBLS)
+        ERREXIT1(cinfo, JERR_DHT_INDEX, index);
       htblptr = &cinfo->ac_huff_tbl_ptrs[index];
     } else {                   /* DC table definition */
+      if (index < 0 || index >= NUM_HUFF_TBLS)
+        ERREXIT1(cinfo, JERR_DHT_INDEX, index);
       htblptr = &cinfo->dc_huff_tbl_ptrs[index];
     }
 
-    if (index < 0 || index >= NUM_HUFF_TBLS)
-      ERREXIT1(cinfo, JERR_DHT_INDEX, index);
-
     if (*htblptr == NULL)
       *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
   
index c73ec02..e1f9f9e 100644 (file)
@@ -1,9 +1,11 @@
 /*
  * jdmaster.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1997, Thomas G. Lane.
+ * Modified 2002-2009 by Guido Vollbeding.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2009-2011, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains master control logic for the JPEG decompressor.
@@ -89,6 +91,177 @@ use_merged_upsample (j_decompress_ptr cinfo)
  * Compute output image dimensions and related values.
  * NOTE: this is exported for possible use by application.
  * Hence it mustn't do anything that can't be done twice.
+ */
+
+#if JPEG_LIB_VERSION >= 80
+GLOBAL(void)
+#else
+LOCAL(void)
+#endif
+jpeg_core_output_dimensions (j_decompress_ptr cinfo)
+/* Do computations that are needed before master selection phase.
+ * This function is used for transcoding and full decompression.
+ */
+{
+#ifdef IDCT_SCALING_SUPPORTED
+  int ci;
+  jpeg_component_info *compptr;
+
+  /* Compute actual output image dimensions and DCT scaling choices. */
+  if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom) {
+    /* Provide 1/block_size scaling */
+    cinfo->output_width = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_width, (long) DCTSIZE);
+    cinfo->output_height = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_height, (long) DCTSIZE);
+    cinfo->_min_DCT_h_scaled_size = 1;
+    cinfo->_min_DCT_v_scaled_size = 1;
+  } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 2) {
+    /* Provide 2/block_size scaling */
+    cinfo->output_width = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_width * 2L, (long) DCTSIZE);
+    cinfo->output_height = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_height * 2L, (long) DCTSIZE);
+    cinfo->_min_DCT_h_scaled_size = 2;
+    cinfo->_min_DCT_v_scaled_size = 2;
+  } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 3) {
+    /* Provide 3/block_size scaling */
+    cinfo->output_width = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_width * 3L, (long) DCTSIZE);
+    cinfo->output_height = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_height * 3L, (long) DCTSIZE);
+    cinfo->_min_DCT_h_scaled_size = 3;
+    cinfo->_min_DCT_v_scaled_size = 3;
+  } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 4) {
+    /* Provide 4/block_size scaling */
+    cinfo->output_width = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_width * 4L, (long) DCTSIZE);
+    cinfo->output_height = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_height * 4L, (long) DCTSIZE);
+    cinfo->_min_DCT_h_scaled_size = 4;
+    cinfo->_min_DCT_v_scaled_size = 4;
+  } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 5) {
+    /* Provide 5/block_size scaling */
+    cinfo->output_width = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_width * 5L, (long) DCTSIZE);
+    cinfo->output_height = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_height * 5L, (long) DCTSIZE);
+    cinfo->_min_DCT_h_scaled_size = 5;
+    cinfo->_min_DCT_v_scaled_size = 5;
+  } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 6) {
+    /* Provide 6/block_size scaling */
+    cinfo->output_width = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_width * 6L, (long) DCTSIZE);
+    cinfo->output_height = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_height * 6L, (long) DCTSIZE);
+    cinfo->_min_DCT_h_scaled_size = 6;
+    cinfo->_min_DCT_v_scaled_size = 6;
+  } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 7) {
+    /* Provide 7/block_size scaling */
+    cinfo->output_width = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_width * 7L, (long) DCTSIZE);
+    cinfo->output_height = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_height * 7L, (long) DCTSIZE);
+    cinfo->_min_DCT_h_scaled_size = 7;
+    cinfo->_min_DCT_v_scaled_size = 7;
+  } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 8) {
+    /* Provide 8/block_size scaling */
+    cinfo->output_width = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_width * 8L, (long) DCTSIZE);
+    cinfo->output_height = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_height * 8L, (long) DCTSIZE);
+    cinfo->_min_DCT_h_scaled_size = 8;
+    cinfo->_min_DCT_v_scaled_size = 8;
+  } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 9) {
+    /* Provide 9/block_size scaling */
+    cinfo->output_width = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_width * 9L, (long) DCTSIZE);
+    cinfo->output_height = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_height * 9L, (long) DCTSIZE);
+    cinfo->_min_DCT_h_scaled_size = 9;
+    cinfo->_min_DCT_v_scaled_size = 9;
+  } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 10) {
+    /* Provide 10/block_size scaling */
+    cinfo->output_width = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_width * 10L, (long) DCTSIZE);
+    cinfo->output_height = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_height * 10L, (long) DCTSIZE);
+    cinfo->_min_DCT_h_scaled_size = 10;
+    cinfo->_min_DCT_v_scaled_size = 10;
+  } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 11) {
+    /* Provide 11/block_size scaling */
+    cinfo->output_width = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_width * 11L, (long) DCTSIZE);
+    cinfo->output_height = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_height * 11L, (long) DCTSIZE);
+    cinfo->_min_DCT_h_scaled_size = 11;
+    cinfo->_min_DCT_v_scaled_size = 11;
+  } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 12) {
+    /* Provide 12/block_size scaling */
+    cinfo->output_width = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_width * 12L, (long) DCTSIZE);
+    cinfo->output_height = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_height * 12L, (long) DCTSIZE);
+    cinfo->_min_DCT_h_scaled_size = 12;
+    cinfo->_min_DCT_v_scaled_size = 12;
+  } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 13) {
+    /* Provide 13/block_size scaling */
+    cinfo->output_width = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_width * 13L, (long) DCTSIZE);
+    cinfo->output_height = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_height * 13L, (long) DCTSIZE);
+    cinfo->_min_DCT_h_scaled_size = 13;
+    cinfo->_min_DCT_v_scaled_size = 13;
+  } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 14) {
+    /* Provide 14/block_size scaling */
+    cinfo->output_width = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_width * 14L, (long) DCTSIZE);
+    cinfo->output_height = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_height * 14L, (long) DCTSIZE);
+    cinfo->_min_DCT_h_scaled_size = 14;
+    cinfo->_min_DCT_v_scaled_size = 14;
+  } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 15) {
+    /* Provide 15/block_size scaling */
+    cinfo->output_width = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_width * 15L, (long) DCTSIZE);
+    cinfo->output_height = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_height * 15L, (long) DCTSIZE);
+    cinfo->_min_DCT_h_scaled_size = 15;
+    cinfo->_min_DCT_v_scaled_size = 15;
+  } else {
+    /* Provide 16/block_size scaling */
+    cinfo->output_width = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_width * 16L, (long) DCTSIZE);
+    cinfo->output_height = (JDIMENSION)
+      jdiv_round_up((long) cinfo->image_height * 16L, (long) DCTSIZE);
+    cinfo->_min_DCT_h_scaled_size = 16;
+    cinfo->_min_DCT_v_scaled_size = 16;
+  }
+
+  /* Recompute dimensions of components */
+  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
+       ci++, compptr++) {
+    compptr->_DCT_h_scaled_size = cinfo->_min_DCT_h_scaled_size;
+    compptr->_DCT_v_scaled_size = cinfo->_min_DCT_v_scaled_size;
+  }
+
+#else /* !IDCT_SCALING_SUPPORTED */
+
+  /* Hardwire it to "no scaling" */
+  cinfo->output_width = cinfo->image_width;
+  cinfo->output_height = cinfo->image_height;
+  /* jdinput.c has already initialized DCT_scaled_size,
+   * and has computed unscaled downsampled_width and downsampled_height.
+   */
+
+#endif /* IDCT_SCALING_SUPPORTED */
+}
+
+
+/*
+ * Compute output image dimensions and related values.
+ * NOTE: this is exported for possible use by application.
+ * Hence it mustn't do anything that can't be done twice.
  * Also note that it may be called before the master module is initialized!
  */
 
@@ -105,65 +278,24 @@ jpeg_calc_output_dimensions (j_decompress_ptr cinfo)
   if (cinfo->global_state != DSTATE_READY)
     ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
 
+  /* Compute core output image dimensions and DCT scaling choices. */
+  jpeg_core_output_dimensions(cinfo);
+
 #ifdef IDCT_SCALING_SUPPORTED
 
-  /* Compute actual output image dimensions and DCT scaling choices. */
-  if (cinfo->scale_num * 8 <= cinfo->scale_denom) {
-    /* Provide 1/8 scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width, 8L);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height, 8L);
-#if JPEG_LIB_VERSION >= 70
-    cinfo->min_DCT_h_scaled_size = cinfo->min_DCT_v_scaled_size = 1;
-#else
-    cinfo->min_DCT_scaled_size = 1;
-#endif
-  } else if (cinfo->scale_num * 4 <= cinfo->scale_denom) {
-    /* Provide 1/4 scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width, 4L);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height, 4L);
-#if JPEG_LIB_VERSION >= 70
-    cinfo->min_DCT_h_scaled_size = cinfo->min_DCT_v_scaled_size = 2;
-#else
-    cinfo->min_DCT_scaled_size = 2;
-#endif
-  } else if (cinfo->scale_num * 2 <= cinfo->scale_denom) {
-    /* Provide 1/2 scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width, 2L);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height, 2L);
-#if JPEG_LIB_VERSION >= 70
-    cinfo->min_DCT_h_scaled_size = cinfo->min_DCT_v_scaled_size = 4;
-#else
-    cinfo->min_DCT_scaled_size = 4;
-#endif
-  } else {
-    /* Provide 1/1 scaling */
-    cinfo->output_width = cinfo->image_width;
-    cinfo->output_height = cinfo->image_height;
-#if JPEG_LIB_VERSION >= 70
-    cinfo->min_DCT_h_scaled_size = cinfo->min_DCT_v_scaled_size = DCTSIZE;
-#else
-    cinfo->min_DCT_scaled_size = DCTSIZE;
-#endif
-  }
   /* In selecting the actual DCT scaling for each component, we try to
    * scale up the chroma components via IDCT scaling rather than upsampling.
    * This saves time if the upsampler gets to use 1:1 scaling.
-   * Note this code assumes that the supported DCT scalings are powers of 2.
+   * Note this code adapts subsampling ratios which are powers of 2.
    */
   for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
        ci++, compptr++) {
     int ssize = cinfo->_min_DCT_scaled_size;
     while (ssize < DCTSIZE &&
-          (compptr->h_samp_factor * ssize * 2 <=
-           cinfo->max_h_samp_factor * cinfo->_min_DCT_scaled_size) &&
-          (compptr->v_samp_factor * ssize * 2 <=
-           cinfo->max_v_samp_factor * cinfo->_min_DCT_scaled_size)) {
+          ((cinfo->max_h_samp_factor * cinfo->_min_DCT_scaled_size) %
+           (compptr->h_samp_factor * ssize * 2) == 0) &&
+          ((cinfo->max_v_samp_factor * cinfo->_min_DCT_scaled_size) %
+           (compptr->v_samp_factor * ssize * 2) == 0)) {
       ssize = ssize * 2;
     }
 #if JPEG_LIB_VERSION >= 70
index 5336125..9830be2 100644 (file)
--- a/jdmerge.c
+++ b/jdmerge.c
@@ -1,10 +1,11 @@
 /*
  * jdmerge.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1994-1996, Thomas G. Lane.
  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2009, 2011, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains code for merged upsampling/color conversion.
index 2b93265..1f0a550 100644 (file)
@@ -1,9 +1,10 @@
 /*
  * jdmrgext.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1994-1996, Thomas G. Lane.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2011, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains code for merged upsampling/color conversion.
index 2267809..fa97aab 100644 (file)
--- a/jdphuff.c
+++ b/jdphuff.c
@@ -198,6 +198,7 @@ start_pass_phuff_decoder (j_decompress_ptr cinfo)
  * On some machines, a shift and add will be faster than a table lookup.
  */
 
+#define AVOID_TABLES
 #ifdef AVOID_TABLES
 
 #define HUFF_EXTEND(x,s)  ((x) < (1<<((s)-1)) ? (x) + (((-1)<<(s)) + 1) : (x))
index 1864dd6..361b589 100644 (file)
@@ -1,10 +1,11 @@
 /*
  * jdsample.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1996, Thomas G. Lane.
+ * libjpeg-turbo Modifications:
  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
  * Copyright (C) 2010, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains upsampling routines.
index a72b320..77d8121 100644 (file)
@@ -2,6 +2,7 @@
  * jidctint.c
  *
  * Copyright (C) 1991-1998, Thomas G. Lane.
+ * Modification developed 2002-2009 by Guido Vollbeding.
  * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * The advantage of this method is that no data path contains more than one
  * multiplication; this allows a very simple and accurate implementation in
  * scaled fixed-point arithmetic, with a minimal number of shifts.
+ *
+ * We also provide IDCT routines with various output sample block sizes for
+ * direct resolution reduction or enlargement without additional resampling:
+ * NxN (N=1...16) pixels for one 8x8 input DCT block.
+ *
+ * For N<8 we simply take the corresponding low-frequency coefficients of
+ * the 8x8 input DCT block and apply an NxN point IDCT on the sub-block
+ * to yield the downscaled outputs.
+ * This can be seen as direct low-pass downsampling from the DCT domain
+ * point of view rather than the usual spatial domain point of view,
+ * yielding significant computational savings and results at least
+ * as good as common bilinear (averaging) spatial downsampling.
+ *
+ * For N>8 we apply a partial NxN IDCT on the 8 input coefficients as
+ * lower frequencies and higher frequencies assumed to be zero.
+ * It turns out that the computational effort is similar to the 8x8 IDCT
+ * regarding the output size.
+ * Furthermore, the scaling and descaling is the same for all IDCT sizes.
+ *
+ * CAUTION: We rely on the FIX() macro except for the N=1,2,4,8 cases
+ * since there would be too many additional constants to pre-calculate.
  */
 
 #define JPEG_INTERNALS
@@ -38,7 +60,7 @@
  */
 
 #if DCTSIZE != 8
-  Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */
+  Sorry, this code only copes with 8x8 DCT blocks. /* deliberate syntax err */
 #endif
 
 
@@ -386,4 +408,2216 @@ jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr,
   }
 }
 
+#ifdef IDCT_SCALING_SUPPORTED
+
+
+/*
+ * Perform dequantization and inverse DCT on one block of coefficients,
+ * producing a 7x7 output block.
+ *
+ * Optimized algorithm with 12 multiplications in the 1-D kernel.
+ * cK represents sqrt(2) * cos(K*pi/14).
+ */
+
+GLOBAL(void)
+jpeg_idct_7x7 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
+              JCOEFPTR coef_block,
+              JSAMPARRAY output_buf, JDIMENSION output_col)
+{
+  INT32 tmp0, tmp1, tmp2, tmp10, tmp11, tmp12, tmp13;
+  INT32 z1, z2, z3;
+  JCOEFPTR inptr;
+  ISLOW_MULT_TYPE * quantptr;
+  int * wsptr;
+  JSAMPROW outptr;
+  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
+  int ctr;
+  int workspace[7*7];  /* buffers data between passes */
+  SHIFT_TEMPS
+
+  /* Pass 1: process columns from input, store into work array. */
+
+  inptr = coef_block;
+  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
+  wsptr = workspace;
+  for (ctr = 0; ctr < 7; ctr++, inptr++, quantptr++, wsptr++) {
+    /* Even part */
+
+    tmp13 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
+    tmp13 <<= CONST_BITS;
+    /* Add fudge factor here for final descale. */
+    tmp13 += ONE << (CONST_BITS-PASS1_BITS-1);
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
+    z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
+    z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
+
+    tmp10 = MULTIPLY(z2 - z3, FIX(0.881747734));     /* c4 */
+    tmp12 = MULTIPLY(z1 - z2, FIX(0.314692123));     /* c6 */
+    tmp11 = tmp10 + tmp12 + tmp13 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */
+    tmp0 = z1 + z3;
+    z2 -= tmp0;
+    tmp0 = MULTIPLY(tmp0, FIX(1.274162392)) + tmp13; /* c2 */
+    tmp10 += tmp0 - MULTIPLY(z3, FIX(0.077722536));  /* c2-c4-c6 */
+    tmp12 += tmp0 - MULTIPLY(z1, FIX(2.470602249));  /* c2+c4+c6 */
+    tmp13 += MULTIPLY(z2, FIX(1.414213562));         /* c0 */
+
+    /* Odd part */
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
+    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
+    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
+
+    tmp1 = MULTIPLY(z1 + z2, FIX(0.935414347));      /* (c3+c1-c5)/2 */
+    tmp2 = MULTIPLY(z1 - z2, FIX(0.170262339));      /* (c3+c5-c1)/2 */
+    tmp0 = tmp1 - tmp2;
+    tmp1 += tmp2;
+    tmp2 = MULTIPLY(z2 + z3, - FIX(1.378756276));    /* -c1 */
+    tmp1 += tmp2;
+    z2 = MULTIPLY(z1 + z3, FIX(0.613604268));        /* c5 */
+    tmp0 += z2;
+    tmp2 += z2 + MULTIPLY(z3, FIX(1.870828693));     /* c3+c1-c5 */
+
+    /* Final output stage */
+
+    wsptr[7*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS);
+    wsptr[7*6] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS);
+    wsptr[7*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS);
+    wsptr[7*5] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS);
+    wsptr[7*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS);
+    wsptr[7*4] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS);
+    wsptr[7*3] = (int) RIGHT_SHIFT(tmp13, CONST_BITS-PASS1_BITS);
+  }
+
+  /* Pass 2: process 7 rows from work array, store into output array. */
+
+  wsptr = workspace;
+  for (ctr = 0; ctr < 7; ctr++) {
+    outptr = output_buf[ctr] + output_col;
+
+    /* Even part */
+
+    /* Add fudge factor here for final descale. */
+    tmp13 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
+    tmp13 <<= CONST_BITS;
+
+    z1 = (INT32) wsptr[2];
+    z2 = (INT32) wsptr[4];
+    z3 = (INT32) wsptr[6];
+
+    tmp10 = MULTIPLY(z2 - z3, FIX(0.881747734));     /* c4 */
+    tmp12 = MULTIPLY(z1 - z2, FIX(0.314692123));     /* c6 */
+    tmp11 = tmp10 + tmp12 + tmp13 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */
+    tmp0 = z1 + z3;
+    z2 -= tmp0;
+    tmp0 = MULTIPLY(tmp0, FIX(1.274162392)) + tmp13; /* c2 */
+    tmp10 += tmp0 - MULTIPLY(z3, FIX(0.077722536));  /* c2-c4-c6 */
+    tmp12 += tmp0 - MULTIPLY(z1, FIX(2.470602249));  /* c2+c4+c6 */
+    tmp13 += MULTIPLY(z2, FIX(1.414213562));         /* c0 */
+
+    /* Odd part */
+
+    z1 = (INT32) wsptr[1];
+    z2 = (INT32) wsptr[3];
+    z3 = (INT32) wsptr[5];
+
+    tmp1 = MULTIPLY(z1 + z2, FIX(0.935414347));      /* (c3+c1-c5)/2 */
+    tmp2 = MULTIPLY(z1 - z2, FIX(0.170262339));      /* (c3+c5-c1)/2 */
+    tmp0 = tmp1 - tmp2;
+    tmp1 += tmp2;
+    tmp2 = MULTIPLY(z2 + z3, - FIX(1.378756276));    /* -c1 */
+    tmp1 += tmp2;
+    z2 = MULTIPLY(z1 + z3, FIX(0.613604268));        /* c5 */
+    tmp0 += z2;
+    tmp2 += z2 + MULTIPLY(z3, FIX(1.870828693));     /* c3+c1-c5 */
+
+    /* Final output stage */
+
+    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+
+    wsptr += 7;                /* advance pointer to next row */
+  }
+}
+
+
+/*
+ * Perform dequantization and inverse DCT on one block of coefficients,
+ * producing a reduced-size 6x6 output block.
+ *
+ * Optimized algorithm with 3 multiplications in the 1-D kernel.
+ * cK represents sqrt(2) * cos(K*pi/12).
+ */
+
+GLOBAL(void)
+jpeg_idct_6x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
+              JCOEFPTR coef_block,
+              JSAMPARRAY output_buf, JDIMENSION output_col)
+{
+  INT32 tmp0, tmp1, tmp2, tmp10, tmp11, tmp12;
+  INT32 z1, z2, z3;
+  JCOEFPTR inptr;
+  ISLOW_MULT_TYPE * quantptr;
+  int * wsptr;
+  JSAMPROW outptr;
+  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
+  int ctr;
+  int workspace[6*6];  /* buffers data between passes */
+  SHIFT_TEMPS
+
+  /* Pass 1: process columns from input, store into work array. */
+
+  inptr = coef_block;
+  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
+  wsptr = workspace;
+  for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) {
+    /* Even part */
+
+    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
+    tmp0 <<= CONST_BITS;
+    /* Add fudge factor here for final descale. */
+    tmp0 += ONE << (CONST_BITS-PASS1_BITS-1);
+    tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
+    tmp10 = MULTIPLY(tmp2, FIX(0.707106781));   /* c4 */
+    tmp1 = tmp0 + tmp10;
+    tmp11 = RIGHT_SHIFT(tmp0 - tmp10 - tmp10, CONST_BITS-PASS1_BITS);
+    tmp10 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
+    tmp0 = MULTIPLY(tmp10, FIX(1.224744871));   /* c2 */
+    tmp10 = tmp1 + tmp0;
+    tmp12 = tmp1 - tmp0;
+
+    /* Odd part */
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
+    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
+    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
+    tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */
+    tmp0 = tmp1 + ((z1 + z2) << CONST_BITS);
+    tmp2 = tmp1 + ((z3 - z2) << CONST_BITS);
+    tmp1 = (z1 - z2 - z3) << PASS1_BITS;
+
+    /* Final output stage */
+
+    wsptr[6*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS);
+    wsptr[6*5] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS);
+    wsptr[6*1] = (int) (tmp11 + tmp1);
+    wsptr[6*4] = (int) (tmp11 - tmp1);
+    wsptr[6*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS);
+    wsptr[6*3] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS);
+  }
+
+  /* Pass 2: process 6 rows from work array, store into output array. */
+
+  wsptr = workspace;
+  for (ctr = 0; ctr < 6; ctr++) {
+    outptr = output_buf[ctr] + output_col;
+
+    /* Even part */
+
+    /* Add fudge factor here for final descale. */
+    tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
+    tmp0 <<= CONST_BITS;
+    tmp2 = (INT32) wsptr[4];
+    tmp10 = MULTIPLY(tmp2, FIX(0.707106781));   /* c4 */
+    tmp1 = tmp0 + tmp10;
+    tmp11 = tmp0 - tmp10 - tmp10;
+    tmp10 = (INT32) wsptr[2];
+    tmp0 = MULTIPLY(tmp10, FIX(1.224744871));   /* c2 */
+    tmp10 = tmp1 + tmp0;
+    tmp12 = tmp1 - tmp0;
+
+    /* Odd part */
+
+    z1 = (INT32) wsptr[1];
+    z2 = (INT32) wsptr[3];
+    z3 = (INT32) wsptr[5];
+    tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */
+    tmp0 = tmp1 + ((z1 + z2) << CONST_BITS);
+    tmp2 = tmp1 + ((z3 - z2) << CONST_BITS);
+    tmp1 = (z1 - z2 - z3) << CONST_BITS;
+
+    /* Final output stage */
+
+    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+
+    wsptr += 6;                /* advance pointer to next row */
+  }
+}
+
+
+/*
+ * Perform dequantization and inverse DCT on one block of coefficients,
+ * producing a reduced-size 5x5 output block.
+ *
+ * Optimized algorithm with 5 multiplications in the 1-D kernel.
+ * cK represents sqrt(2) * cos(K*pi/10).
+ */
+
+GLOBAL(void)
+jpeg_idct_5x5 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
+              JCOEFPTR coef_block,
+              JSAMPARRAY output_buf, JDIMENSION output_col)
+{
+  INT32 tmp0, tmp1, tmp10, tmp11, tmp12;
+  INT32 z1, z2, z3;
+  JCOEFPTR inptr;
+  ISLOW_MULT_TYPE * quantptr;
+  int * wsptr;
+  JSAMPROW outptr;
+  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
+  int ctr;
+  int workspace[5*5];  /* buffers data between passes */
+  SHIFT_TEMPS
+
+  /* Pass 1: process columns from input, store into work array. */
+
+  inptr = coef_block;
+  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
+  wsptr = workspace;
+  for (ctr = 0; ctr < 5; ctr++, inptr++, quantptr++, wsptr++) {
+    /* Even part */
+
+    tmp12 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
+    tmp12 <<= CONST_BITS;
+    /* Add fudge factor here for final descale. */
+    tmp12 += ONE << (CONST_BITS-PASS1_BITS-1);
+    tmp0 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
+    tmp1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
+    z1 = MULTIPLY(tmp0 + tmp1, FIX(0.790569415)); /* (c2+c4)/2 */
+    z2 = MULTIPLY(tmp0 - tmp1, FIX(0.353553391)); /* (c2-c4)/2 */
+    z3 = tmp12 + z2;
+    tmp10 = z3 + z1;
+    tmp11 = z3 - z1;
+    tmp12 -= z2 << 2;
+
+    /* Odd part */
+
+    z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
+    z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
+
+    z1 = MULTIPLY(z2 + z3, FIX(0.831253876));     /* c3 */
+    tmp0 = z1 + MULTIPLY(z2, FIX(0.513743148));   /* c1-c3 */
+    tmp1 = z1 - MULTIPLY(z3, FIX(2.176250899));   /* c1+c3 */
+
+    /* Final output stage */
+
+    wsptr[5*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS);
+    wsptr[5*4] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS);
+    wsptr[5*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS);
+    wsptr[5*3] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS);
+    wsptr[5*2] = (int) RIGHT_SHIFT(tmp12, CONST_BITS-PASS1_BITS);
+  }
+
+  /* Pass 2: process 5 rows from work array, store into output array. */
+
+  wsptr = workspace;
+  for (ctr = 0; ctr < 5; ctr++) {
+    outptr = output_buf[ctr] + output_col;
+
+    /* Even part */
+
+    /* Add fudge factor here for final descale. */
+    tmp12 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
+    tmp12 <<= CONST_BITS;
+    tmp0 = (INT32) wsptr[2];
+    tmp1 = (INT32) wsptr[4];
+    z1 = MULTIPLY(tmp0 + tmp1, FIX(0.790569415)); /* (c2+c4)/2 */
+    z2 = MULTIPLY(tmp0 - tmp1, FIX(0.353553391)); /* (c2-c4)/2 */
+    z3 = tmp12 + z2;
+    tmp10 = z3 + z1;
+    tmp11 = z3 - z1;
+    tmp12 -= z2 << 2;
+
+    /* Odd part */
+
+    z2 = (INT32) wsptr[1];
+    z3 = (INT32) wsptr[3];
+
+    z1 = MULTIPLY(z2 + z3, FIX(0.831253876));     /* c3 */
+    tmp0 = z1 + MULTIPLY(z2, FIX(0.513743148));   /* c1-c3 */
+    tmp1 = z1 - MULTIPLY(z3, FIX(2.176250899));   /* c1+c3 */
+
+    /* Final output stage */
+
+    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+
+    wsptr += 5;                /* advance pointer to next row */
+  }
+}
+
+
+/*
+ * Perform dequantization and inverse DCT on one block of coefficients,
+ * producing a reduced-size 3x3 output block.
+ *
+ * Optimized algorithm with 2 multiplications in the 1-D kernel.
+ * cK represents sqrt(2) * cos(K*pi/6).
+ */
+
+GLOBAL(void)
+jpeg_idct_3x3 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
+              JCOEFPTR coef_block,
+              JSAMPARRAY output_buf, JDIMENSION output_col)
+{
+  INT32 tmp0, tmp2, tmp10, tmp12;
+  JCOEFPTR inptr;
+  ISLOW_MULT_TYPE * quantptr;
+  int * wsptr;
+  JSAMPROW outptr;
+  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
+  int ctr;
+  int workspace[3*3];  /* buffers data between passes */
+  SHIFT_TEMPS
+
+  /* Pass 1: process columns from input, store into work array. */
+
+  inptr = coef_block;
+  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
+  wsptr = workspace;
+  for (ctr = 0; ctr < 3; ctr++, inptr++, quantptr++, wsptr++) {
+    /* Even part */
+
+    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
+    tmp0 <<= CONST_BITS;
+    /* Add fudge factor here for final descale. */
+    tmp0 += ONE << (CONST_BITS-PASS1_BITS-1);
+    tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
+    tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */
+    tmp10 = tmp0 + tmp12;
+    tmp2 = tmp0 - tmp12 - tmp12;
+
+    /* Odd part */
+
+    tmp12 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
+    tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */
+
+    /* Final output stage */
+
+    wsptr[3*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS);
+    wsptr[3*2] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS);
+    wsptr[3*1] = (int) RIGHT_SHIFT(tmp2, CONST_BITS-PASS1_BITS);
+  }
+
+  /* Pass 2: process 3 rows from work array, store into output array. */
+
+  wsptr = workspace;
+  for (ctr = 0; ctr < 3; ctr++) {
+    outptr = output_buf[ctr] + output_col;
+
+    /* Even part */
+
+    /* Add fudge factor here for final descale. */
+    tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
+    tmp0 <<= CONST_BITS;
+    tmp2 = (INT32) wsptr[2];
+    tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */
+    tmp10 = tmp0 + tmp12;
+    tmp2 = tmp0 - tmp12 - tmp12;
+
+    /* Odd part */
+
+    tmp12 = (INT32) wsptr[1];
+    tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */
+
+    /* Final output stage */
+
+    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp2,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+
+    wsptr += 3;                /* advance pointer to next row */
+  }
+}
+
+
+/*
+ * Perform dequantization and inverse DCT on one block of coefficients,
+ * producing a 9x9 output block.
+ *
+ * Optimized algorithm with 10 multiplications in the 1-D kernel.
+ * cK represents sqrt(2) * cos(K*pi/18).
+ */
+
+GLOBAL(void)
+jpeg_idct_9x9 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
+              JCOEFPTR coef_block,
+              JSAMPARRAY output_buf, JDIMENSION output_col)
+{
+  INT32 tmp0, tmp1, tmp2, tmp3, tmp10, tmp11, tmp12, tmp13, tmp14;
+  INT32 z1, z2, z3, z4;
+  JCOEFPTR inptr;
+  ISLOW_MULT_TYPE * quantptr;
+  int * wsptr;
+  JSAMPROW outptr;
+  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
+  int ctr;
+  int workspace[8*9];  /* buffers data between passes */
+  SHIFT_TEMPS
+
+  /* Pass 1: process columns from input, store into work array. */
+
+  inptr = coef_block;
+  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
+  wsptr = workspace;
+  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
+    /* Even part */
+
+    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
+    tmp0 <<= CONST_BITS;
+    /* Add fudge factor here for final descale. */
+    tmp0 += ONE << (CONST_BITS-PASS1_BITS-1);
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
+    z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
+    z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
+
+    tmp3 = MULTIPLY(z3, FIX(0.707106781));      /* c6 */
+    tmp1 = tmp0 + tmp3;
+    tmp2 = tmp0 - tmp3 - tmp3;
+
+    tmp0 = MULTIPLY(z1 - z2, FIX(0.707106781)); /* c6 */
+    tmp11 = tmp2 + tmp0;
+    tmp14 = tmp2 - tmp0 - tmp0;
+
+    tmp0 = MULTIPLY(z1 + z2, FIX(1.328926049)); /* c2 */
+    tmp2 = MULTIPLY(z1, FIX(1.083350441));      /* c4 */
+    tmp3 = MULTIPLY(z2, FIX(0.245575608));      /* c8 */
+
+    tmp10 = tmp1 + tmp0 - tmp3;
+    tmp12 = tmp1 - tmp0 + tmp2;
+    tmp13 = tmp1 - tmp2 + tmp3;
+
+    /* Odd part */
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
+    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
+    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
+    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
+
+    z2 = MULTIPLY(z2, - FIX(1.224744871));           /* -c3 */
+
+    tmp2 = MULTIPLY(z1 + z3, FIX(0.909038955));      /* c5 */
+    tmp3 = MULTIPLY(z1 + z4, FIX(0.483689525));      /* c7 */
+    tmp0 = tmp2 + tmp3 - z2;
+    tmp1 = MULTIPLY(z3 - z4, FIX(1.392728481));      /* c1 */
+    tmp2 += z2 - tmp1;
+    tmp3 += z2 + tmp1;
+    tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */
+
+    /* Final output stage */
+
+    wsptr[8*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS);
+    wsptr[8*8] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS);
+    wsptr[8*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS);
+    wsptr[8*7] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS);
+    wsptr[8*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS);
+    wsptr[8*6] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS);
+    wsptr[8*3] = (int) RIGHT_SHIFT(tmp13 + tmp3, CONST_BITS-PASS1_BITS);
+    wsptr[8*5] = (int) RIGHT_SHIFT(tmp13 - tmp3, CONST_BITS-PASS1_BITS);
+    wsptr[8*4] = (int) RIGHT_SHIFT(tmp14, CONST_BITS-PASS1_BITS);
+  }
+
+  /* Pass 2: process 9 rows from work array, store into output array. */
+
+  wsptr = workspace;
+  for (ctr = 0; ctr < 9; ctr++) {
+    outptr = output_buf[ctr] + output_col;
+
+    /* Even part */
+
+    /* Add fudge factor here for final descale. */
+    tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
+    tmp0 <<= CONST_BITS;
+
+    z1 = (INT32) wsptr[2];
+    z2 = (INT32) wsptr[4];
+    z3 = (INT32) wsptr[6];
+
+    tmp3 = MULTIPLY(z3, FIX(0.707106781));      /* c6 */
+    tmp1 = tmp0 + tmp3;
+    tmp2 = tmp0 - tmp3 - tmp3;
+
+    tmp0 = MULTIPLY(z1 - z2, FIX(0.707106781)); /* c6 */
+    tmp11 = tmp2 + tmp0;
+    tmp14 = tmp2 - tmp0 - tmp0;
+
+    tmp0 = MULTIPLY(z1 + z2, FIX(1.328926049)); /* c2 */
+    tmp2 = MULTIPLY(z1, FIX(1.083350441));      /* c4 */
+    tmp3 = MULTIPLY(z2, FIX(0.245575608));      /* c8 */
+
+    tmp10 = tmp1 + tmp0 - tmp3;
+    tmp12 = tmp1 - tmp0 + tmp2;
+    tmp13 = tmp1 - tmp2 + tmp3;
+
+    /* Odd part */
+
+    z1 = (INT32) wsptr[1];
+    z2 = (INT32) wsptr[3];
+    z3 = (INT32) wsptr[5];
+    z4 = (INT32) wsptr[7];
+
+    z2 = MULTIPLY(z2, - FIX(1.224744871));           /* -c3 */
+
+    tmp2 = MULTIPLY(z1 + z3, FIX(0.909038955));      /* c5 */
+    tmp3 = MULTIPLY(z1 + z4, FIX(0.483689525));      /* c7 */
+    tmp0 = tmp2 + tmp3 - z2;
+    tmp1 = MULTIPLY(z3 - z4, FIX(1.392728481));      /* c1 */
+    tmp2 += z2 - tmp1;
+    tmp3 += z2 + tmp1;
+    tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */
+
+    /* Final output stage */
+
+    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp3,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp3,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp14,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+
+    wsptr += 8;                /* advance pointer to next row */
+  }
+}
+
+
+/*
+ * Perform dequantization and inverse DCT on one block of coefficients,
+ * producing a 10x10 output block.
+ *
+ * Optimized algorithm with 12 multiplications in the 1-D kernel.
+ * cK represents sqrt(2) * cos(K*pi/20).
+ */
+
+GLOBAL(void)
+jpeg_idct_10x10 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
+                JCOEFPTR coef_block,
+                JSAMPARRAY output_buf, JDIMENSION output_col)
+{
+  INT32 tmp10, tmp11, tmp12, tmp13, tmp14;
+  INT32 tmp20, tmp21, tmp22, tmp23, tmp24;
+  INT32 z1, z2, z3, z4, z5;
+  JCOEFPTR inptr;
+  ISLOW_MULT_TYPE * quantptr;
+  int * wsptr;
+  JSAMPROW outptr;
+  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
+  int ctr;
+  int workspace[8*10]; /* buffers data between passes */
+  SHIFT_TEMPS
+
+  /* Pass 1: process columns from input, store into work array. */
+
+  inptr = coef_block;
+  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
+  wsptr = workspace;
+  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
+    /* Even part */
+
+    z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
+    z3 <<= CONST_BITS;
+    /* Add fudge factor here for final descale. */
+    z3 += ONE << (CONST_BITS-PASS1_BITS-1);
+    z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
+    z1 = MULTIPLY(z4, FIX(1.144122806));         /* c4 */
+    z2 = MULTIPLY(z4, FIX(0.437016024));         /* c8 */
+    tmp10 = z3 + z1;
+    tmp11 = z3 - z2;
+
+    tmp22 = RIGHT_SHIFT(z3 - ((z1 - z2) << 1),   /* c0 = (c4-c8)*2 */
+                       CONST_BITS-PASS1_BITS);
+
+    z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
+    z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
+
+    z1 = MULTIPLY(z2 + z3, FIX(0.831253876));    /* c6 */
+    tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */
+    tmp13 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c2+c6 */
+
+    tmp20 = tmp10 + tmp12;
+    tmp24 = tmp10 - tmp12;
+    tmp21 = tmp11 + tmp13;
+    tmp23 = tmp11 - tmp13;
+
+    /* Odd part */
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
+    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
+    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
+    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
+
+    tmp11 = z2 + z4;
+    tmp13 = z2 - z4;
+
+    tmp12 = MULTIPLY(tmp13, FIX(0.309016994));        /* (c3-c7)/2 */
+    z5 = z3 << CONST_BITS;
+
+    z2 = MULTIPLY(tmp11, FIX(0.951056516));           /* (c3+c7)/2 */
+    z4 = z5 + tmp12;
+
+    tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */
+    tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */
+
+    z2 = MULTIPLY(tmp11, FIX(0.587785252));           /* (c1-c9)/2 */
+    z4 = z5 - tmp12 - (tmp13 << (CONST_BITS - 1));
+
+    tmp12 = (z1 - tmp13 - z3) << PASS1_BITS;
+
+    tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */
+    tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */
+
+    /* Final output stage */
+
+    wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
+    wsptr[8*9] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
+    wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS);
+    wsptr[8*8] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS);
+    wsptr[8*2] = (int) (tmp22 + tmp12);
+    wsptr[8*7] = (int) (tmp22 - tmp12);
+    wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS);
+    wsptr[8*6] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS);
+    wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS);
+    wsptr[8*5] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS);
+  }
+
+  /* Pass 2: process 10 rows from work array, store into output array. */
+
+  wsptr = workspace;
+  for (ctr = 0; ctr < 10; ctr++) {
+    outptr = output_buf[ctr] + output_col;
+
+    /* Even part */
+
+    /* Add fudge factor here for final descale. */
+    z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
+    z3 <<= CONST_BITS;
+    z4 = (INT32) wsptr[4];
+    z1 = MULTIPLY(z4, FIX(1.144122806));         /* c4 */
+    z2 = MULTIPLY(z4, FIX(0.437016024));         /* c8 */
+    tmp10 = z3 + z1;
+    tmp11 = z3 - z2;
+
+    tmp22 = z3 - ((z1 - z2) << 1);               /* c0 = (c4-c8)*2 */
+
+    z2 = (INT32) wsptr[2];
+    z3 = (INT32) wsptr[6];
+
+    z1 = MULTIPLY(z2 + z3, FIX(0.831253876));    /* c6 */
+    tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */
+    tmp13 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c2+c6 */
+
+    tmp20 = tmp10 + tmp12;
+    tmp24 = tmp10 - tmp12;
+    tmp21 = tmp11 + tmp13;
+    tmp23 = tmp11 - tmp13;
+
+    /* Odd part */
+
+    z1 = (INT32) wsptr[1];
+    z2 = (INT32) wsptr[3];
+    z3 = (INT32) wsptr[5];
+    z3 <<= CONST_BITS;
+    z4 = (INT32) wsptr[7];
+
+    tmp11 = z2 + z4;
+    tmp13 = z2 - z4;
+
+    tmp12 = MULTIPLY(tmp13, FIX(0.309016994));        /* (c3-c7)/2 */
+
+    z2 = MULTIPLY(tmp11, FIX(0.951056516));           /* (c3+c7)/2 */
+    z4 = z3 + tmp12;
+
+    tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */
+    tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */
+
+    z2 = MULTIPLY(tmp11, FIX(0.587785252));           /* (c1-c9)/2 */
+    z4 = z3 - tmp12 - (tmp13 << (CONST_BITS - 1));
+
+    tmp12 = ((z1 - tmp13) << CONST_BITS) - z3;
+
+    tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */
+    tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */
+
+    /* Final output stage */
+
+    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+    outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14,
+                                             CONST_BITS+PASS1_BITS+3)
+                           & RANGE_MASK];
+
+    wsptr += 8;                /* advance pointer to next row */
+  }
+}
+
+
+/*
+ * Perform dequantization and inverse DCT on one block of coefficients,
+ * producing a 11x11 output block.
+ *
+ * Optimized algorithm with 24 multiplications in the 1-D kernel.
+ * cK represents sqrt(2) * cos(K*pi/22).
+ */
+
+GLOBAL(void)
+jpeg_idct_11x11 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
+                JCOEFPTR coef_block,
+                JSAMPARRAY output_buf, JDIMENSION output_col)
+{
+  INT32 tmp10, tmp11, tmp12, tmp13, tmp14;
+  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25;
+  INT32 z1, z2, z3, z4;
+  JCOEFPTR inptr;
+  ISLOW_MULT_TYPE * quantptr;
+  int * wsptr;
+  JSAMPROW outptr;
+  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
+  int ctr;
+  int workspace[8*11]; /* buffers data between passes */
+  SHIFT_TEMPS
+
+  /* Pass 1: process columns from input, store into work array. */
+
+  inptr = coef_block;
+  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
+  wsptr = workspace;
+  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
+    /* Even part */
+
+    tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
+    tmp10 <<= CONST_BITS;
+    /* Add fudge factor here for final descale. */
+    tmp10 += ONE << (CONST_BITS-PASS1_BITS-1);
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
+    z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
+    z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
+
+    tmp20 = MULTIPLY(z2 - z3, FIX(2.546640132));     /* c2+c4 */
+    tmp23 = MULTIPLY(z2 - z1, FIX(0.430815045));     /* c2-c6 */
+    z4 = z1 + z3;
+    tmp24 = MULTIPLY(z4, - FIX(1.155664402));        /* -(c2-c10) */
+    z4 -= z2;
+    tmp25 = tmp10 + MULTIPLY(z4, FIX(1.356927976));  /* c2 */
+    tmp21 = tmp20 + tmp23 + tmp25 -
+           MULTIPLY(z2, FIX(1.821790775));          /* c2+c4+c10-c6 */
+    tmp20 += tmp25 + MULTIPLY(z3, FIX(2.115825087)); /* c4+c6 */
+    tmp23 += tmp25 - MULTIPLY(z1, FIX(1.513598477)); /* c6+c8 */
+    tmp24 += tmp25;
+    tmp22 = tmp24 - MULTIPLY(z3, FIX(0.788749120));  /* c8+c10 */
+    tmp24 += MULTIPLY(z2, FIX(1.944413522)) -        /* c2+c8 */
+            MULTIPLY(z1, FIX(1.390975730));         /* c4+c10 */
+    tmp25 = tmp10 - MULTIPLY(z4, FIX(1.414213562));  /* c0 */
+
+    /* Odd part */
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
+    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
+    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
+    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
+
+    tmp11 = z1 + z2;
+    tmp14 = MULTIPLY(tmp11 + z3 + z4, FIX(0.398430003)); /* c9 */
+    tmp11 = MULTIPLY(tmp11, FIX(0.887983902));           /* c3-c9 */
+    tmp12 = MULTIPLY(z1 + z3, FIX(0.670361295));         /* c5-c9 */
+    tmp13 = tmp14 + MULTIPLY(z1 + z4, FIX(0.366151574)); /* c7-c9 */
+    tmp10 = tmp11 + tmp12 + tmp13 -
+           MULTIPLY(z1, FIX(0.923107866));              /* c7+c5+c3-c1-2*c9 */
+    z1    = tmp14 - MULTIPLY(z2 + z3, FIX(1.163011579)); /* c7+c9 */
+    tmp11 += z1 + MULTIPLY(z2, FIX(2.073276588));        /* c1+c7+3*c9-c3 */
+    tmp12 += z1 - MULTIPLY(z3, FIX(1.192193623));        /* c3+c5-c7-c9 */
+    z1    = MULTIPLY(z2 + z4, - FIX(1.798248910));       /* -(c1+c9) */
+    tmp11 += z1;
+    tmp13 += z1 + MULTIPLY(z4, FIX(2.102458632));        /* c1+c5+c9-c7 */
+    tmp14 += MULTIPLY(z2, - FIX(1.467221301)) +          /* -(c5+c9) */
+            MULTIPLY(z3, FIX(1.001388905)) -            /* c1-c9 */
+            MULTIPLY(z4, FIX(1.684843907));             /* c3+c9 */
+
+    /* Final output stage */
+
+    wsptr[8*0]  = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
+    wsptr[8*10] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
+    wsptr[8*1]  = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS);
+    wsptr[8*9]  = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS);
+    wsptr[8*2]  = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS);
+    wsptr[8*8]  = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS);
+    wsptr[8*3]  = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS);
+    wsptr[8*7]  = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS);
+    wsptr[8*4]  = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS);
+    wsptr[8*6]  = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS);
+    wsptr[8*5]  = (int) RIGHT_SHIFT(tmp25, CONST_BITS-PASS1_BITS);
+  }
+
+  /* Pass 2: process 11 rows from work array, store into output array. */
+
+  wsptr = workspace;
+  for (ctr = 0; ctr < 11; ctr++) {
+    outptr = output_buf[ctr] + output_col;
+
+    /* Even part */
+
+    /* Add fudge factor here for final descale. */
+    tmp10 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
+    tmp10 <<= CONST_BITS;
+
+    z1 = (INT32) wsptr[2];
+    z2 = (INT32) wsptr[4];
+    z3 = (INT32) wsptr[6];
+
+    tmp20 = MULTIPLY(z2 - z3, FIX(2.546640132));     /* c2+c4 */
+    tmp23 = MULTIPLY(z2 - z1, FIX(0.430815045));     /* c2-c6 */
+    z4 = z1 + z3;
+    tmp24 = MULTIPLY(z4, - FIX(1.155664402));        /* -(c2-c10) */
+    z4 -= z2;
+    tmp25 = tmp10 + MULTIPLY(z4, FIX(1.356927976));  /* c2 */
+    tmp21 = tmp20 + tmp23 + tmp25 -
+           MULTIPLY(z2, FIX(1.821790775));          /* c2+c4+c10-c6 */
+    tmp20 += tmp25 + MULTIPLY(z3, FIX(2.115825087)); /* c4+c6 */
+    tmp23 += tmp25 - MULTIPLY(z1, FIX(1.513598477)); /* c6+c8 */
+    tmp24 += tmp25;
+    tmp22 = tmp24 - MULTIPLY(z3, FIX(0.788749120));  /* c8+c10 */
+    tmp24 += MULTIPLY(z2, FIX(1.944413522)) -        /* c2+c8 */
+            MULTIPLY(z1, FIX(1.390975730));         /* c4+c10 */
+    tmp25 = tmp10 - MULTIPLY(z4, FIX(1.414213562));  /* c0 */
+
+    /* Odd part */
+
+    z1 = (INT32) wsptr[1];
+    z2 = (INT32) wsptr[3];
+    z3 = (INT32) wsptr[5];
+    z4 = (INT32) wsptr[7];
+
+    tmp11 = z1 + z2;
+    tmp14 = MULTIPLY(tmp11 + z3 + z4, FIX(0.398430003)); /* c9 */
+    tmp11 = MULTIPLY(tmp11, FIX(0.887983902));           /* c3-c9 */
+    tmp12 = MULTIPLY(z1 + z3, FIX(0.670361295));         /* c5-c9 */
+    tmp13 = tmp14 + MULTIPLY(z1 + z4, FIX(0.366151574)); /* c7-c9 */
+    tmp10 = tmp11 + tmp12 + tmp13 -
+           MULTIPLY(z1, FIX(0.923107866));              /* c7+c5+c3-c1-2*c9 */
+    z1    = tmp14 - MULTIPLY(z2 + z3, FIX(1.163011579)); /* c7+c9 */
+    tmp11 += z1 + MULTIPLY(z2, FIX(2.073276588));        /* c1+c7+3*c9-c3 */
+    tmp12 += z1 - MULTIPLY(z3, FIX(1.192193623));        /* c3+c5-c7-c9 */
+    z1    = MULTIPLY(z2 + z4, - FIX(1.798248910));       /* -(c1+c9) */
+    tmp11 += z1;
+    tmp13 += z1 + MULTIPLY(z4, FIX(2.102458632));        /* c1+c5+c9-c7 */
+    tmp14 += MULTIPLY(z2, - FIX(1.467221301)) +          /* -(c5+c9) */
+            MULTIPLY(z3, FIX(1.001388905)) -            /* c1-c9 */
+            MULTIPLY(z4, FIX(1.684843907));             /* c3+c9 */
+
+    /* Final output stage */
+
+    outptr[0]  = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[1]  = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[9]  = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[2]  = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[8]  = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[3]  = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[7]  = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[4]  = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[6]  = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[5]  = range_limit[(int) RIGHT_SHIFT(tmp25,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+
+    wsptr += 8;                /* advance pointer to next row */
+  }
+}
+
+
+/*
+ * Perform dequantization and inverse DCT on one block of coefficients,
+ * producing a 12x12 output block.
+ *
+ * Optimized algorithm with 15 multiplications in the 1-D kernel.
+ * cK represents sqrt(2) * cos(K*pi/24).
+ */
+
+GLOBAL(void)
+jpeg_idct_12x12 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
+                JCOEFPTR coef_block,
+                JSAMPARRAY output_buf, JDIMENSION output_col)
+{
+  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15;
+  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25;
+  INT32 z1, z2, z3, z4;
+  JCOEFPTR inptr;
+  ISLOW_MULT_TYPE * quantptr;
+  int * wsptr;
+  JSAMPROW outptr;
+  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
+  int ctr;
+  int workspace[8*12]; /* buffers data between passes */
+  SHIFT_TEMPS
+
+  /* Pass 1: process columns from input, store into work array. */
+
+  inptr = coef_block;
+  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
+  wsptr = workspace;
+  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
+    /* Even part */
+
+    z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
+    z3 <<= CONST_BITS;
+    /* Add fudge factor here for final descale. */
+    z3 += ONE << (CONST_BITS-PASS1_BITS-1);
+
+    z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
+    z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */
+
+    tmp10 = z3 + z4;
+    tmp11 = z3 - z4;
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
+    z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */
+    z1 <<= CONST_BITS;
+    z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
+    z2 <<= CONST_BITS;
+
+    tmp12 = z1 - z2;
+
+    tmp21 = z3 + tmp12;
+    tmp24 = z3 - tmp12;
+
+    tmp12 = z4 + z2;
+
+    tmp20 = tmp10 + tmp12;
+    tmp25 = tmp10 - tmp12;
+
+    tmp12 = z4 - z1 - z2;
+
+    tmp22 = tmp11 + tmp12;
+    tmp23 = tmp11 - tmp12;
+
+    /* Odd part */
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
+    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
+    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
+    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
+
+    tmp11 = MULTIPLY(z2, FIX(1.306562965));                  /* c3 */
+    tmp14 = MULTIPLY(z2, - FIX_0_541196100);                 /* -c9 */
+
+    tmp10 = z1 + z3;
+    tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669));          /* c7 */
+    tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384));       /* c5-c7 */
+    tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716));  /* c1-c5 */
+    tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580));           /* -(c7+c11) */
+    tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */
+    tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */
+    tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) -        /* c7-c11 */
+            MULTIPLY(z4, FIX(1.982889723));                 /* c5+c7 */
+
+    z1 -= z4;
+    z2 -= z3;
+    z3 = MULTIPLY(z1 + z2, FIX_0_541196100);                 /* c9 */
+    tmp11 = z3 + MULTIPLY(z1, FIX_0_765366865);              /* c3-c9 */
+    tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065);              /* c3+c9 */
+
+    /* Final output stage */
+
+    wsptr[8*0]  = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
+    wsptr[8*11] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
+    wsptr[8*1]  = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS);
+    wsptr[8*10] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS);
+    wsptr[8*2]  = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS);
+    wsptr[8*9]  = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS);
+    wsptr[8*3]  = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS);
+    wsptr[8*8]  = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS);
+    wsptr[8*4]  = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS);
+    wsptr[8*7]  = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS);
+    wsptr[8*5]  = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS);
+    wsptr[8*6]  = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS);
+  }
+
+  /* Pass 2: process 12 rows from work array, store into output array. */
+
+  wsptr = workspace;
+  for (ctr = 0; ctr < 12; ctr++) {
+    outptr = output_buf[ctr] + output_col;
+
+    /* Even part */
+
+    /* Add fudge factor here for final descale. */
+    z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
+    z3 <<= CONST_BITS;
+
+    z4 = (INT32) wsptr[4];
+    z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */
+
+    tmp10 = z3 + z4;
+    tmp11 = z3 - z4;
+
+    z1 = (INT32) wsptr[2];
+    z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */
+    z1 <<= CONST_BITS;
+    z2 = (INT32) wsptr[6];
+    z2 <<= CONST_BITS;
+
+    tmp12 = z1 - z2;
+
+    tmp21 = z3 + tmp12;
+    tmp24 = z3 - tmp12;
+
+    tmp12 = z4 + z2;
+
+    tmp20 = tmp10 + tmp12;
+    tmp25 = tmp10 - tmp12;
+
+    tmp12 = z4 - z1 - z2;
+
+    tmp22 = tmp11 + tmp12;
+    tmp23 = tmp11 - tmp12;
+
+    /* Odd part */
+
+    z1 = (INT32) wsptr[1];
+    z2 = (INT32) wsptr[3];
+    z3 = (INT32) wsptr[5];
+    z4 = (INT32) wsptr[7];
+
+    tmp11 = MULTIPLY(z2, FIX(1.306562965));                  /* c3 */
+    tmp14 = MULTIPLY(z2, - FIX_0_541196100);                 /* -c9 */
+
+    tmp10 = z1 + z3;
+    tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669));          /* c7 */
+    tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384));       /* c5-c7 */
+    tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716));  /* c1-c5 */
+    tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580));           /* -(c7+c11) */
+    tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */
+    tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */
+    tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) -        /* c7-c11 */
+            MULTIPLY(z4, FIX(1.982889723));                 /* c5+c7 */
+
+    z1 -= z4;
+    z2 -= z3;
+    z3 = MULTIPLY(z1 + z2, FIX_0_541196100);                 /* c9 */
+    tmp11 = z3 + MULTIPLY(z1, FIX_0_765366865);              /* c3-c9 */
+    tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065);              /* c3+c9 */
+
+    /* Final output stage */
+
+    outptr[0]  = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[1]  = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[2]  = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[9]  = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[3]  = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[8]  = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[4]  = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[7]  = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[5]  = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[6]  = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+
+    wsptr += 8;                /* advance pointer to next row */
+  }
+}
+
+
+/*
+ * Perform dequantization and inverse DCT on one block of coefficients,
+ * producing a 13x13 output block.
+ *
+ * Optimized algorithm with 29 multiplications in the 1-D kernel.
+ * cK represents sqrt(2) * cos(K*pi/26).
+ */
+
+GLOBAL(void)
+jpeg_idct_13x13 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
+                JCOEFPTR coef_block,
+                JSAMPARRAY output_buf, JDIMENSION output_col)
+{
+  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15;
+  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26;
+  INT32 z1, z2, z3, z4;
+  JCOEFPTR inptr;
+  ISLOW_MULT_TYPE * quantptr;
+  int * wsptr;
+  JSAMPROW outptr;
+  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
+  int ctr;
+  int workspace[8*13]; /* buffers data between passes */
+  SHIFT_TEMPS
+
+  /* Pass 1: process columns from input, store into work array. */
+
+  inptr = coef_block;
+  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
+  wsptr = workspace;
+  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
+    /* Even part */
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
+    z1 <<= CONST_BITS;
+    /* Add fudge factor here for final descale. */
+    z1 += ONE << (CONST_BITS-PASS1_BITS-1);
+
+    z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
+    z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
+    z4 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
+
+    tmp10 = z3 + z4;
+    tmp11 = z3 - z4;
+
+    tmp12 = MULTIPLY(tmp10, FIX(1.155388986));                /* (c4+c6)/2 */
+    tmp13 = MULTIPLY(tmp11, FIX(0.096834934)) + z1;           /* (c4-c6)/2 */
+
+    tmp20 = MULTIPLY(z2, FIX(1.373119086)) + tmp12 + tmp13;   /* c2 */
+    tmp22 = MULTIPLY(z2, FIX(0.501487041)) - tmp12 + tmp13;   /* c10 */
+
+    tmp12 = MULTIPLY(tmp10, FIX(0.316450131));                /* (c8-c12)/2 */
+    tmp13 = MULTIPLY(tmp11, FIX(0.486914739)) + z1;           /* (c8+c12)/2 */
+
+    tmp21 = MULTIPLY(z2, FIX(1.058554052)) - tmp12 + tmp13;   /* c6 */
+    tmp25 = MULTIPLY(z2, - FIX(1.252223920)) + tmp12 + tmp13; /* c4 */
+
+    tmp12 = MULTIPLY(tmp10, FIX(0.435816023));                /* (c2-c10)/2 */
+    tmp13 = MULTIPLY(tmp11, FIX(0.937303064)) - z1;           /* (c2+c10)/2 */
+
+    tmp23 = MULTIPLY(z2, - FIX(0.170464608)) - tmp12 - tmp13; /* c12 */
+    tmp24 = MULTIPLY(z2, - FIX(0.803364869)) + tmp12 - tmp13; /* c8 */
+
+    tmp26 = MULTIPLY(tmp11 - z2, FIX(1.414213562)) + z1;      /* c0 */
+
+    /* Odd part */
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
+    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
+    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
+    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
+
+    tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651));     /* c3 */
+    tmp12 = MULTIPLY(z1 + z3, FIX(1.163874945));     /* c5 */
+    tmp15 = z1 + z4;
+    tmp13 = MULTIPLY(tmp15, FIX(0.937797057));       /* c7 */
+    tmp10 = tmp11 + tmp12 + tmp13 -
+           MULTIPLY(z1, FIX(2.020082300));          /* c7+c5+c3-c1 */
+    tmp14 = MULTIPLY(z2 + z3, - FIX(0.338443458));   /* -c11 */
+    tmp11 += tmp14 + MULTIPLY(z2, FIX(0.837223564)); /* c5+c9+c11-c3 */
+    tmp12 += tmp14 - MULTIPLY(z3, FIX(1.572116027)); /* c1+c5-c9-c11 */
+    tmp14 = MULTIPLY(z2 + z4, - FIX(1.163874945));   /* -c5 */
+    tmp11 += tmp14;
+    tmp13 += tmp14 + MULTIPLY(z4, FIX(2.205608352)); /* c3+c5+c9-c7 */
+    tmp14 = MULTIPLY(z3 + z4, - FIX(0.657217813));   /* -c9 */
+    tmp12 += tmp14;
+    tmp13 += tmp14;
+    tmp15 = MULTIPLY(tmp15, FIX(0.338443458));       /* c11 */
+    tmp14 = tmp15 + MULTIPLY(z1, FIX(0.318774355)) - /* c9-c11 */
+           MULTIPLY(z2, FIX(0.466105296));          /* c1-c7 */
+    z1    = MULTIPLY(z3 - z2, FIX(0.937797057));     /* c7 */
+    tmp14 += z1;
+    tmp15 += z1 + MULTIPLY(z3, FIX(0.384515595)) -   /* c3-c7 */
+            MULTIPLY(z4, FIX(1.742345811));         /* c1+c11 */
+
+    /* Final output stage */
+
+    wsptr[8*0]  = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
+    wsptr[8*12] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
+    wsptr[8*1]  = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS);
+    wsptr[8*11] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS);
+    wsptr[8*2]  = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS);
+    wsptr[8*10] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS);
+    wsptr[8*3]  = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS);
+    wsptr[8*9]  = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS);
+    wsptr[8*4]  = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS);
+    wsptr[8*8]  = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS);
+    wsptr[8*5]  = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS);
+    wsptr[8*7]  = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS);
+    wsptr[8*6]  = (int) RIGHT_SHIFT(tmp26, CONST_BITS-PASS1_BITS);
+  }
+
+  /* Pass 2: process 13 rows from work array, store into output array. */
+
+  wsptr = workspace;
+  for (ctr = 0; ctr < 13; ctr++) {
+    outptr = output_buf[ctr] + output_col;
+
+    /* Even part */
+
+    /* Add fudge factor here for final descale. */
+    z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
+    z1 <<= CONST_BITS;
+
+    z2 = (INT32) wsptr[2];
+    z3 = (INT32) wsptr[4];
+    z4 = (INT32) wsptr[6];
+
+    tmp10 = z3 + z4;
+    tmp11 = z3 - z4;
+
+    tmp12 = MULTIPLY(tmp10, FIX(1.155388986));                /* (c4+c6)/2 */
+    tmp13 = MULTIPLY(tmp11, FIX(0.096834934)) + z1;           /* (c4-c6)/2 */
+
+    tmp20 = MULTIPLY(z2, FIX(1.373119086)) + tmp12 + tmp13;   /* c2 */
+    tmp22 = MULTIPLY(z2, FIX(0.501487041)) - tmp12 + tmp13;   /* c10 */
+
+    tmp12 = MULTIPLY(tmp10, FIX(0.316450131));                /* (c8-c12)/2 */
+    tmp13 = MULTIPLY(tmp11, FIX(0.486914739)) + z1;           /* (c8+c12)/2 */
+
+    tmp21 = MULTIPLY(z2, FIX(1.058554052)) - tmp12 + tmp13;   /* c6 */
+    tmp25 = MULTIPLY(z2, - FIX(1.252223920)) + tmp12 + tmp13; /* c4 */
+
+    tmp12 = MULTIPLY(tmp10, FIX(0.435816023));                /* (c2-c10)/2 */
+    tmp13 = MULTIPLY(tmp11, FIX(0.937303064)) - z1;           /* (c2+c10)/2 */
+
+    tmp23 = MULTIPLY(z2, - FIX(0.170464608)) - tmp12 - tmp13; /* c12 */
+    tmp24 = MULTIPLY(z2, - FIX(0.803364869)) + tmp12 - tmp13; /* c8 */
+
+    tmp26 = MULTIPLY(tmp11 - z2, FIX(1.414213562)) + z1;      /* c0 */
+
+    /* Odd part */
+
+    z1 = (INT32) wsptr[1];
+    z2 = (INT32) wsptr[3];
+    z3 = (INT32) wsptr[5];
+    z4 = (INT32) wsptr[7];
+
+    tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651));     /* c3 */
+    tmp12 = MULTIPLY(z1 + z3, FIX(1.163874945));     /* c5 */
+    tmp15 = z1 + z4;
+    tmp13 = MULTIPLY(tmp15, FIX(0.937797057));       /* c7 */
+    tmp10 = tmp11 + tmp12 + tmp13 -
+           MULTIPLY(z1, FIX(2.020082300));          /* c7+c5+c3-c1 */
+    tmp14 = MULTIPLY(z2 + z3, - FIX(0.338443458));   /* -c11 */
+    tmp11 += tmp14 + MULTIPLY(z2, FIX(0.837223564)); /* c5+c9+c11-c3 */
+    tmp12 += tmp14 - MULTIPLY(z3, FIX(1.572116027)); /* c1+c5-c9-c11 */
+    tmp14 = MULTIPLY(z2 + z4, - FIX(1.163874945));   /* -c5 */
+    tmp11 += tmp14;
+    tmp13 += tmp14 + MULTIPLY(z4, FIX(2.205608352)); /* c3+c5+c9-c7 */
+    tmp14 = MULTIPLY(z3 + z4, - FIX(0.657217813));   /* -c9 */
+    tmp12 += tmp14;
+    tmp13 += tmp14;
+    tmp15 = MULTIPLY(tmp15, FIX(0.338443458));       /* c11 */
+    tmp14 = tmp15 + MULTIPLY(z1, FIX(0.318774355)) - /* c9-c11 */
+           MULTIPLY(z2, FIX(0.466105296));          /* c1-c7 */
+    z1    = MULTIPLY(z3 - z2, FIX(0.937797057));     /* c7 */
+    tmp14 += z1;
+    tmp15 += z1 + MULTIPLY(z3, FIX(0.384515595)) -   /* c3-c7 */
+            MULTIPLY(z4, FIX(1.742345811));         /* c1+c11 */
+
+    /* Final output stage */
+
+    outptr[0]  = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[1]  = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[2]  = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[3]  = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[9]  = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[4]  = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[8]  = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[5]  = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[7]  = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[6]  = range_limit[(int) RIGHT_SHIFT(tmp26,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+
+    wsptr += 8;                /* advance pointer to next row */
+  }
+}
+
+
+/*
+ * Perform dequantization and inverse DCT on one block of coefficients,
+ * producing a 14x14 output block.
+ *
+ * Optimized algorithm with 20 multiplications in the 1-D kernel.
+ * cK represents sqrt(2) * cos(K*pi/28).
+ */
+
+GLOBAL(void)
+jpeg_idct_14x14 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
+                JCOEFPTR coef_block,
+                JSAMPARRAY output_buf, JDIMENSION output_col)
+{
+  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16;
+  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26;
+  INT32 z1, z2, z3, z4;
+  JCOEFPTR inptr;
+  ISLOW_MULT_TYPE * quantptr;
+  int * wsptr;
+  JSAMPROW outptr;
+  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
+  int ctr;
+  int workspace[8*14]; /* buffers data between passes */
+  SHIFT_TEMPS
+
+  /* Pass 1: process columns from input, store into work array. */
+
+  inptr = coef_block;
+  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
+  wsptr = workspace;
+  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
+    /* Even part */
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
+    z1 <<= CONST_BITS;
+    /* Add fudge factor here for final descale. */
+    z1 += ONE << (CONST_BITS-PASS1_BITS-1);
+    z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
+    z2 = MULTIPLY(z4, FIX(1.274162392));         /* c4 */
+    z3 = MULTIPLY(z4, FIX(0.314692123));         /* c12 */
+    z4 = MULTIPLY(z4, FIX(0.881747734));         /* c8 */
+
+    tmp10 = z1 + z2;
+    tmp11 = z1 + z3;
+    tmp12 = z1 - z4;
+
+    tmp23 = RIGHT_SHIFT(z1 - ((z2 + z3 - z4) << 1), /* c0 = (c4+c12-c8)*2 */
+                       CONST_BITS-PASS1_BITS);
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
+    z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
+
+    z3 = MULTIPLY(z1 + z2, FIX(1.105676686));    /* c6 */
+
+    tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */
+    tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */
+    tmp15 = MULTIPLY(z1, FIX(0.613604268)) -     /* c10 */
+           MULTIPLY(z2, FIX(1.378756276));      /* c2 */
+
+    tmp20 = tmp10 + tmp13;
+    tmp26 = tmp10 - tmp13;
+    tmp21 = tmp11 + tmp14;
+    tmp25 = tmp11 - tmp14;
+    tmp22 = tmp12 + tmp15;
+    tmp24 = tmp12 - tmp15;
+
+    /* Odd part */
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
+    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
+    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
+    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
+    tmp13 = z4 << CONST_BITS;
+
+    tmp14 = z1 + z3;
+    tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607));           /* c3 */
+    tmp12 = MULTIPLY(tmp14, FIX(1.197448846));             /* c5 */
+    tmp10 = tmp11 + tmp12 + tmp13 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */
+    tmp14 = MULTIPLY(tmp14, FIX(0.752406978));             /* c9 */
+    tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426));        /* c9+c11-c13 */
+    z1    -= z2;
+    tmp15 = MULTIPLY(z1, FIX(0.467085129)) - tmp13;        /* c11 */
+    tmp16 += tmp15;
+    z1    += z4;
+    z4    = MULTIPLY(z2 + z3, - FIX(0.158341681)) - tmp13; /* -c13 */
+    tmp11 += z4 - MULTIPLY(z2, FIX(0.424103948));          /* c3-c9-c13 */
+    tmp12 += z4 - MULTIPLY(z3, FIX(2.373959773));          /* c3+c5-c13 */
+    z4    = MULTIPLY(z3 - z2, FIX(1.405321284));           /* c1 */
+    tmp14 += z4 + tmp13 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */
+    tmp15 += z4 + MULTIPLY(z2, FIX(0.674957567));          /* c1+c11-c5 */
+
+    tmp13 = (z1 - z3) << PASS1_BITS;
+
+    /* Final output stage */
+
+    wsptr[8*0]  = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
+    wsptr[8*13] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
+    wsptr[8*1]  = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS);
+    wsptr[8*12] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS);
+    wsptr[8*2]  = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS);
+    wsptr[8*11] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS);
+    wsptr[8*3]  = (int) (tmp23 + tmp13);
+    wsptr[8*10] = (int) (tmp23 - tmp13);
+    wsptr[8*4]  = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS);
+    wsptr[8*9]  = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS);
+    wsptr[8*5]  = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS);
+    wsptr[8*8]  = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS);
+    wsptr[8*6]  = (int) RIGHT_SHIFT(tmp26 + tmp16, CONST_BITS-PASS1_BITS);
+    wsptr[8*7]  = (int) RIGHT_SHIFT(tmp26 - tmp16, CONST_BITS-PASS1_BITS);
+  }
+
+  /* Pass 2: process 14 rows from work array, store into output array. */
+
+  wsptr = workspace;
+  for (ctr = 0; ctr < 14; ctr++) {
+    outptr = output_buf[ctr] + output_col;
+
+    /* Even part */
+
+    /* Add fudge factor here for final descale. */
+    z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
+    z1 <<= CONST_BITS;
+    z4 = (INT32) wsptr[4];
+    z2 = MULTIPLY(z4, FIX(1.274162392));         /* c4 */
+    z3 = MULTIPLY(z4, FIX(0.314692123));         /* c12 */
+    z4 = MULTIPLY(z4, FIX(0.881747734));         /* c8 */
+
+    tmp10 = z1 + z2;
+    tmp11 = z1 + z3;
+    tmp12 = z1 - z4;
+
+    tmp23 = z1 - ((z2 + z3 - z4) << 1);          /* c0 = (c4+c12-c8)*2 */
+
+    z1 = (INT32) wsptr[2];
+    z2 = (INT32) wsptr[6];
+
+    z3 = MULTIPLY(z1 + z2, FIX(1.105676686));    /* c6 */
+
+    tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */
+    tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */
+    tmp15 = MULTIPLY(z1, FIX(0.613604268)) -     /* c10 */
+           MULTIPLY(z2, FIX(1.378756276));      /* c2 */
+
+    tmp20 = tmp10 + tmp13;
+    tmp26 = tmp10 - tmp13;
+    tmp21 = tmp11 + tmp14;
+    tmp25 = tmp11 - tmp14;
+    tmp22 = tmp12 + tmp15;
+    tmp24 = tmp12 - tmp15;
+
+    /* Odd part */
+
+    z1 = (INT32) wsptr[1];
+    z2 = (INT32) wsptr[3];
+    z3 = (INT32) wsptr[5];
+    z4 = (INT32) wsptr[7];
+    z4 <<= CONST_BITS;
+
+    tmp14 = z1 + z3;
+    tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607));           /* c3 */
+    tmp12 = MULTIPLY(tmp14, FIX(1.197448846));             /* c5 */
+    tmp10 = tmp11 + tmp12 + z4 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */
+    tmp14 = MULTIPLY(tmp14, FIX(0.752406978));             /* c9 */
+    tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426));        /* c9+c11-c13 */
+    z1    -= z2;
+    tmp15 = MULTIPLY(z1, FIX(0.467085129)) - z4;           /* c11 */
+    tmp16 += tmp15;
+    tmp13 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - z4;    /* -c13 */
+    tmp11 += tmp13 - MULTIPLY(z2, FIX(0.424103948));       /* c3-c9-c13 */
+    tmp12 += tmp13 - MULTIPLY(z3, FIX(2.373959773));       /* c3+c5-c13 */
+    tmp13 = MULTIPLY(z3 - z2, FIX(1.405321284));           /* c1 */
+    tmp14 += tmp13 + z4 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */
+    tmp15 += tmp13 + MULTIPLY(z2, FIX(0.674957567));       /* c1+c11-c5 */
+
+    tmp13 = ((z1 - z3) << CONST_BITS) + z4;
+
+    /* Final output stage */
+
+    outptr[0]  = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[1]  = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[2]  = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[3]  = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[4]  = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[9]  = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[5]  = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[8]  = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[6]  = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[7]  = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+
+    wsptr += 8;                /* advance pointer to next row */
+  }
+}
+
+
+/*
+ * Perform dequantization and inverse DCT on one block of coefficients,
+ * producing a 15x15 output block.
+ *
+ * Optimized algorithm with 22 multiplications in the 1-D kernel.
+ * cK represents sqrt(2) * cos(K*pi/30).
+ */
+
+GLOBAL(void)
+jpeg_idct_15x15 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
+                JCOEFPTR coef_block,
+                JSAMPARRAY output_buf, JDIMENSION output_col)
+{
+  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16;
+  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27;
+  INT32 z1, z2, z3, z4;
+  JCOEFPTR inptr;
+  ISLOW_MULT_TYPE * quantptr;
+  int * wsptr;
+  JSAMPROW outptr;
+  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
+  int ctr;
+  int workspace[8*15]; /* buffers data between passes */
+  SHIFT_TEMPS
+
+  /* Pass 1: process columns from input, store into work array. */
+
+  inptr = coef_block;
+  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
+  wsptr = workspace;
+  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
+    /* Even part */
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
+    z1 <<= CONST_BITS;
+    /* Add fudge factor here for final descale. */
+    z1 += ONE << (CONST_BITS-PASS1_BITS-1);
+
+    z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
+    z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
+    z4 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
+
+    tmp10 = MULTIPLY(z4, FIX(0.437016024)); /* c12 */
+    tmp11 = MULTIPLY(z4, FIX(1.144122806)); /* c6 */
+
+    tmp12 = z1 - tmp10;
+    tmp13 = z1 + tmp11;
+    z1 -= (tmp11 - tmp10) << 1;             /* c0 = (c6-c12)*2 */
+
+    z4 = z2 - z3;
+    z3 += z2;
+    tmp10 = MULTIPLY(z3, FIX(1.337628990)); /* (c2+c4)/2 */
+    tmp11 = MULTIPLY(z4, FIX(0.045680613)); /* (c2-c4)/2 */
+    z2 = MULTIPLY(z2, FIX(1.439773946));    /* c4+c14 */
+
+    tmp20 = tmp13 + tmp10 + tmp11;
+    tmp23 = tmp12 - tmp10 + tmp11 + z2;
+
+    tmp10 = MULTIPLY(z3, FIX(0.547059574)); /* (c8+c14)/2 */
+    tmp11 = MULTIPLY(z4, FIX(0.399234004)); /* (c8-c14)/2 */
+
+    tmp25 = tmp13 - tmp10 - tmp11;
+    tmp26 = tmp12 + tmp10 - tmp11 - z2;
+
+    tmp10 = MULTIPLY(z3, FIX(0.790569415)); /* (c6+c12)/2 */
+    tmp11 = MULTIPLY(z4, FIX(0.353553391)); /* (c6-c12)/2 */
+
+    tmp21 = tmp12 + tmp10 + tmp11;
+    tmp24 = tmp13 - tmp10 + tmp11;
+    tmp11 += tmp11;
+    tmp22 = z1 + tmp11;                     /* c10 = c6-c12 */
+    tmp27 = z1 - tmp11 - tmp11;             /* c0 = (c6-c12)*2 */
+
+    /* Odd part */
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
+    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
+    z4 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
+    z3 = MULTIPLY(z4, FIX(1.224744871));                    /* c5 */
+    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
+
+    tmp13 = z2 - z4;
+    tmp15 = MULTIPLY(z1 + tmp13, FIX(0.831253876));         /* c9 */
+    tmp11 = tmp15 + MULTIPLY(z1, FIX(0.513743148));         /* c3-c9 */
+    tmp14 = tmp15 - MULTIPLY(tmp13, FIX(2.176250899));      /* c3+c9 */
+
+    tmp13 = MULTIPLY(z2, - FIX(0.831253876));               /* -c9 */
+    tmp15 = MULTIPLY(z2, - FIX(1.344997024));               /* -c3 */
+    z2 = z1 - z4;
+    tmp12 = z3 + MULTIPLY(z2, FIX(1.406466353));            /* c1 */
+
+    tmp10 = tmp12 + MULTIPLY(z4, FIX(2.457431844)) - tmp15; /* c1+c7 */
+    tmp16 = tmp12 - MULTIPLY(z1, FIX(1.112434820)) + tmp13; /* c1-c13 */
+    tmp12 = MULTIPLY(z2, FIX(1.224744871)) - z3;            /* c5 */
+    z2 = MULTIPLY(z1 + z4, FIX(0.575212477));               /* c11 */
+    tmp13 += z2 + MULTIPLY(z1, FIX(0.475753014)) - z3;      /* c7-c11 */
+    tmp15 += z2 - MULTIPLY(z4, FIX(0.869244010)) + z3;      /* c11+c13 */
+
+    /* Final output stage */
+
+    wsptr[8*0]  = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
+    wsptr[8*14] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
+    wsptr[8*1]  = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS);
+    wsptr[8*13] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS);
+    wsptr[8*2]  = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS);
+    wsptr[8*12] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS);
+    wsptr[8*3]  = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS);
+    wsptr[8*11] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS);
+    wsptr[8*4]  = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS);
+    wsptr[8*10] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS);
+    wsptr[8*5]  = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS);
+    wsptr[8*9]  = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS);
+    wsptr[8*6]  = (int) RIGHT_SHIFT(tmp26 + tmp16, CONST_BITS-PASS1_BITS);
+    wsptr[8*8]  = (int) RIGHT_SHIFT(tmp26 - tmp16, CONST_BITS-PASS1_BITS);
+    wsptr[8*7]  = (int) RIGHT_SHIFT(tmp27, CONST_BITS-PASS1_BITS);
+  }
+
+  /* Pass 2: process 15 rows from work array, store into output array. */
+
+  wsptr = workspace;
+  for (ctr = 0; ctr < 15; ctr++) {
+    outptr = output_buf[ctr] + output_col;
+
+    /* Even part */
+
+    /* Add fudge factor here for final descale. */
+    z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
+    z1 <<= CONST_BITS;
+
+    z2 = (INT32) wsptr[2];
+    z3 = (INT32) wsptr[4];
+    z4 = (INT32) wsptr[6];
+
+    tmp10 = MULTIPLY(z4, FIX(0.437016024)); /* c12 */
+    tmp11 = MULTIPLY(z4, FIX(1.144122806)); /* c6 */
+
+    tmp12 = z1 - tmp10;
+    tmp13 = z1 + tmp11;
+    z1 -= (tmp11 - tmp10) << 1;             /* c0 = (c6-c12)*2 */
+
+    z4 = z2 - z3;
+    z3 += z2;
+    tmp10 = MULTIPLY(z3, FIX(1.337628990)); /* (c2+c4)/2 */
+    tmp11 = MULTIPLY(z4, FIX(0.045680613)); /* (c2-c4)/2 */
+    z2 = MULTIPLY(z2, FIX(1.439773946));    /* c4+c14 */
+
+    tmp20 = tmp13 + tmp10 + tmp11;
+    tmp23 = tmp12 - tmp10 + tmp11 + z2;
+
+    tmp10 = MULTIPLY(z3, FIX(0.547059574)); /* (c8+c14)/2 */
+    tmp11 = MULTIPLY(z4, FIX(0.399234004)); /* (c8-c14)/2 */
+
+    tmp25 = tmp13 - tmp10 - tmp11;
+    tmp26 = tmp12 + tmp10 - tmp11 - z2;
+
+    tmp10 = MULTIPLY(z3, FIX(0.790569415)); /* (c6+c12)/2 */
+    tmp11 = MULTIPLY(z4, FIX(0.353553391)); /* (c6-c12)/2 */
+
+    tmp21 = tmp12 + tmp10 + tmp11;
+    tmp24 = tmp13 - tmp10 + tmp11;
+    tmp11 += tmp11;
+    tmp22 = z1 + tmp11;                     /* c10 = c6-c12 */
+    tmp27 = z1 - tmp11 - tmp11;             /* c0 = (c6-c12)*2 */
+
+    /* Odd part */
+
+    z1 = (INT32) wsptr[1];
+    z2 = (INT32) wsptr[3];
+    z4 = (INT32) wsptr[5];
+    z3 = MULTIPLY(z4, FIX(1.224744871));                    /* c5 */
+    z4 = (INT32) wsptr[7];
+
+    tmp13 = z2 - z4;
+    tmp15 = MULTIPLY(z1 + tmp13, FIX(0.831253876));         /* c9 */
+    tmp11 = tmp15 + MULTIPLY(z1, FIX(0.513743148));         /* c3-c9 */
+    tmp14 = tmp15 - MULTIPLY(tmp13, FIX(2.176250899));      /* c3+c9 */
+
+    tmp13 = MULTIPLY(z2, - FIX(0.831253876));               /* -c9 */
+    tmp15 = MULTIPLY(z2, - FIX(1.344997024));               /* -c3 */
+    z2 = z1 - z4;
+    tmp12 = z3 + MULTIPLY(z2, FIX(1.406466353));            /* c1 */
+
+    tmp10 = tmp12 + MULTIPLY(z4, FIX(2.457431844)) - tmp15; /* c1+c7 */
+    tmp16 = tmp12 - MULTIPLY(z1, FIX(1.112434820)) + tmp13; /* c1-c13 */
+    tmp12 = MULTIPLY(z2, FIX(1.224744871)) - z3;            /* c5 */
+    z2 = MULTIPLY(z1 + z4, FIX(0.575212477));               /* c11 */
+    tmp13 += z2 + MULTIPLY(z1, FIX(0.475753014)) - z3;      /* c7-c11 */
+    tmp15 += z2 - MULTIPLY(z4, FIX(0.869244010)) + z3;      /* c11+c13 */
+
+    /* Final output stage */
+
+    outptr[0]  = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[14] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[1]  = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[2]  = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[3]  = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[4]  = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[5]  = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[9]  = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[6]  = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[8]  = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[7]  = range_limit[(int) RIGHT_SHIFT(tmp27,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+
+    wsptr += 8;                /* advance pointer to next row */
+  }
+}
+
+
+/*
+ * Perform dequantization and inverse DCT on one block of coefficients,
+ * producing a 16x16 output block.
+ *
+ * Optimized algorithm with 28 multiplications in the 1-D kernel.
+ * cK represents sqrt(2) * cos(K*pi/32).
+ */
+
+GLOBAL(void)
+jpeg_idct_16x16 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
+                JCOEFPTR coef_block,
+                JSAMPARRAY output_buf, JDIMENSION output_col)
+{
+  INT32 tmp0, tmp1, tmp2, tmp3, tmp10, tmp11, tmp12, tmp13;
+  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27;
+  INT32 z1, z2, z3, z4;
+  JCOEFPTR inptr;
+  ISLOW_MULT_TYPE * quantptr;
+  int * wsptr;
+  JSAMPROW outptr;
+  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
+  int ctr;
+  int workspace[8*16]; /* buffers data between passes */
+  SHIFT_TEMPS
+
+  /* Pass 1: process columns from input, store into work array. */
+
+  inptr = coef_block;
+  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
+  wsptr = workspace;
+  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
+    /* Even part */
+
+    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
+    tmp0 <<= CONST_BITS;
+    /* Add fudge factor here for final descale. */
+    tmp0 += 1 << (CONST_BITS-PASS1_BITS-1);
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
+    tmp1 = MULTIPLY(z1, FIX(1.306562965));      /* c4[16] = c2[8] */
+    tmp2 = MULTIPLY(z1, FIX_0_541196100);       /* c12[16] = c6[8] */
+
+    tmp10 = tmp0 + tmp1;
+    tmp11 = tmp0 - tmp1;
+    tmp12 = tmp0 + tmp2;
+    tmp13 = tmp0 - tmp2;
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
+    z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
+    z3 = z1 - z2;
+    z4 = MULTIPLY(z3, FIX(0.275899379));        /* c14[16] = c7[8] */
+    z3 = MULTIPLY(z3, FIX(1.387039845));        /* c2[16] = c1[8] */
+
+    tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447);  /* (c6+c2)[16] = (c3+c1)[8] */
+    tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223);  /* (c6-c14)[16] = (c3-c7)[8] */
+    tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */
+    tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */
+
+    tmp20 = tmp10 + tmp0;
+    tmp27 = tmp10 - tmp0;
+    tmp21 = tmp12 + tmp1;
+    tmp26 = tmp12 - tmp1;
+    tmp22 = tmp13 + tmp2;
+    tmp25 = tmp13 - tmp2;
+    tmp23 = tmp11 + tmp3;
+    tmp24 = tmp11 - tmp3;
+
+    /* Odd part */
+
+    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
+    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
+    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
+    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
+
+    tmp11 = z1 + z3;
+
+    tmp1  = MULTIPLY(z1 + z2, FIX(1.353318001));   /* c3 */
+    tmp2  = MULTIPLY(tmp11,   FIX(1.247225013));   /* c5 */
+    tmp3  = MULTIPLY(z1 + z4, FIX(1.093201867));   /* c7 */
+    tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586));   /* c9 */
+    tmp11 = MULTIPLY(tmp11,   FIX(0.666655658));   /* c11 */
+    tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528));   /* c13 */
+    tmp0  = tmp1 + tmp2 + tmp3 -
+           MULTIPLY(z1, FIX(2.286341144));        /* c7+c5+c3-c1 */
+    tmp13 = tmp10 + tmp11 + tmp12 -
+           MULTIPLY(z1, FIX(1.835730603));        /* c9+c11+c13-c15 */
+    z1    = MULTIPLY(z2 + z3, FIX(0.138617169));   /* c15 */
+    tmp1  += z1 + MULTIPLY(z2, FIX(0.071888074));  /* c9+c11-c3-c15 */
+    tmp2  += z1 - MULTIPLY(z3, FIX(1.125726048));  /* c5+c7+c15-c3 */
+    z1    = MULTIPLY(z3 - z2, FIX(1.407403738));   /* c1 */
+    tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282));  /* c1+c11-c9-c13 */
+    tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411));  /* c1+c5+c13-c7 */
+    z2    += z4;
+    z1    = MULTIPLY(z2, - FIX(0.666655658));      /* -c11 */
+    tmp1  += z1;
+    tmp3  += z1 + MULTIPLY(z4, FIX(1.065388962));  /* c3+c11+c15-c7 */
+    z2    = MULTIPLY(z2, - FIX(1.247225013));      /* -c5 */
+    tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809));  /* c1+c5+c9-c13 */
+    tmp12 += z2;
+    z2    = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */
+    tmp2  += z2;
+    tmp3  += z2;
+    z2    = MULTIPLY(z4 - z3, FIX(0.410524528));   /* c13 */
+    tmp10 += z2;
+    tmp11 += z2;
+
+    /* Final output stage */
+
+    wsptr[8*0]  = (int) RIGHT_SHIFT(tmp20 + tmp0,  CONST_BITS-PASS1_BITS);
+    wsptr[8*15] = (int) RIGHT_SHIFT(tmp20 - tmp0,  CONST_BITS-PASS1_BITS);
+    wsptr[8*1]  = (int) RIGHT_SHIFT(tmp21 + tmp1,  CONST_BITS-PASS1_BITS);
+    wsptr[8*14] = (int) RIGHT_SHIFT(tmp21 - tmp1,  CONST_BITS-PASS1_BITS);
+    wsptr[8*2]  = (int) RIGHT_SHIFT(tmp22 + tmp2,  CONST_BITS-PASS1_BITS);
+    wsptr[8*13] = (int) RIGHT_SHIFT(tmp22 - tmp2,  CONST_BITS-PASS1_BITS);
+    wsptr[8*3]  = (int) RIGHT_SHIFT(tmp23 + tmp3,  CONST_BITS-PASS1_BITS);
+    wsptr[8*12] = (int) RIGHT_SHIFT(tmp23 - tmp3,  CONST_BITS-PASS1_BITS);
+    wsptr[8*4]  = (int) RIGHT_SHIFT(tmp24 + tmp10, CONST_BITS-PASS1_BITS);
+    wsptr[8*11] = (int) RIGHT_SHIFT(tmp24 - tmp10, CONST_BITS-PASS1_BITS);
+    wsptr[8*5]  = (int) RIGHT_SHIFT(tmp25 + tmp11, CONST_BITS-PASS1_BITS);
+    wsptr[8*10] = (int) RIGHT_SHIFT(tmp25 - tmp11, CONST_BITS-PASS1_BITS);
+    wsptr[8*6]  = (int) RIGHT_SHIFT(tmp26 + tmp12, CONST_BITS-PASS1_BITS);
+    wsptr[8*9]  = (int) RIGHT_SHIFT(tmp26 - tmp12, CONST_BITS-PASS1_BITS);
+    wsptr[8*7]  = (int) RIGHT_SHIFT(tmp27 + tmp13, CONST_BITS-PASS1_BITS);
+    wsptr[8*8]  = (int) RIGHT_SHIFT(tmp27 - tmp13, CONST_BITS-PASS1_BITS);
+  }
+
+  /* Pass 2: process 16 rows from work array, store into output array. */
+
+  wsptr = workspace;
+  for (ctr = 0; ctr < 16; ctr++) {
+    outptr = output_buf[ctr] + output_col;
+
+    /* Even part */
+
+    /* Add fudge factor here for final descale. */
+    tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
+    tmp0 <<= CONST_BITS;
+
+    z1 = (INT32) wsptr[4];
+    tmp1 = MULTIPLY(z1, FIX(1.306562965));      /* c4[16] = c2[8] */
+    tmp2 = MULTIPLY(z1, FIX_0_541196100);       /* c12[16] = c6[8] */
+
+    tmp10 = tmp0 + tmp1;
+    tmp11 = tmp0 - tmp1;
+    tmp12 = tmp0 + tmp2;
+    tmp13 = tmp0 - tmp2;
+
+    z1 = (INT32) wsptr[2];
+    z2 = (INT32) wsptr[6];
+    z3 = z1 - z2;
+    z4 = MULTIPLY(z3, FIX(0.275899379));        /* c14[16] = c7[8] */
+    z3 = MULTIPLY(z3, FIX(1.387039845));        /* c2[16] = c1[8] */
+
+    tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447);  /* (c6+c2)[16] = (c3+c1)[8] */
+    tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223);  /* (c6-c14)[16] = (c3-c7)[8] */
+    tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */
+    tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */
+
+    tmp20 = tmp10 + tmp0;
+    tmp27 = tmp10 - tmp0;
+    tmp21 = tmp12 + tmp1;
+    tmp26 = tmp12 - tmp1;
+    tmp22 = tmp13 + tmp2;
+    tmp25 = tmp13 - tmp2;
+    tmp23 = tmp11 + tmp3;
+    tmp24 = tmp11 - tmp3;
+
+    /* Odd part */
+
+    z1 = (INT32) wsptr[1];
+    z2 = (INT32) wsptr[3];
+    z3 = (INT32) wsptr[5];
+    z4 = (INT32) wsptr[7];
+
+    tmp11 = z1 + z3;
+
+    tmp1  = MULTIPLY(z1 + z2, FIX(1.353318001));   /* c3 */
+    tmp2  = MULTIPLY(tmp11,   FIX(1.247225013));   /* c5 */
+    tmp3  = MULTIPLY(z1 + z4, FIX(1.093201867));   /* c7 */
+    tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586));   /* c9 */
+    tmp11 = MULTIPLY(tmp11,   FIX(0.666655658));   /* c11 */
+    tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528));   /* c13 */
+    tmp0  = tmp1 + tmp2 + tmp3 -
+           MULTIPLY(z1, FIX(2.286341144));        /* c7+c5+c3-c1 */
+    tmp13 = tmp10 + tmp11 + tmp12 -
+           MULTIPLY(z1, FIX(1.835730603));        /* c9+c11+c13-c15 */
+    z1    = MULTIPLY(z2 + z3, FIX(0.138617169));   /* c15 */
+    tmp1  += z1 + MULTIPLY(z2, FIX(0.071888074));  /* c9+c11-c3-c15 */
+    tmp2  += z1 - MULTIPLY(z3, FIX(1.125726048));  /* c5+c7+c15-c3 */
+    z1    = MULTIPLY(z3 - z2, FIX(1.407403738));   /* c1 */
+    tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282));  /* c1+c11-c9-c13 */
+    tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411));  /* c1+c5+c13-c7 */
+    z2    += z4;
+    z1    = MULTIPLY(z2, - FIX(0.666655658));      /* -c11 */
+    tmp1  += z1;
+    tmp3  += z1 + MULTIPLY(z4, FIX(1.065388962));  /* c3+c11+c15-c7 */
+    z2    = MULTIPLY(z2, - FIX(1.247225013));      /* -c5 */
+    tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809));  /* c1+c5+c9-c13 */
+    tmp12 += z2;
+    z2    = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */
+    tmp2  += z2;
+    tmp3  += z2;
+    z2    = MULTIPLY(z4 - z3, FIX(0.410524528));   /* c13 */
+    tmp10 += z2;
+    tmp11 += z2;
+
+    /* Final output stage */
+
+    outptr[0]  = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp0,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[15] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp0,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[1]  = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp1,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[14] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp1,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[2]  = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp2,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp2,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[3]  = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp3,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp3,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[4]  = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp10,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp10,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[5]  = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp11,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp11,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[6]  = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp12,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[9]  = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp12,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[7]  = range_limit[(int) RIGHT_SHIFT(tmp27 + tmp13,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+    outptr[8]  = range_limit[(int) RIGHT_SHIFT(tmp27 - tmp13,
+                                              CONST_BITS+PASS1_BITS+3)
+                            & RANGE_MASK];
+
+    wsptr += 8;                /* advance pointer to next row */
+  }
+}
+
+#endif /* IDCT_SCALING_SUPPORTED */
 #endif /* DCT_ISLOW_SUPPORTED */
index f22c4f3..55af056 100644 (file)
@@ -1,9 +1,10 @@
 /*
  * jmorecfg.h
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1997, Thomas G. Lane.
+ * Modifications:
  * Copyright (C) 2009, 2011, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains additional configuration options that customize the
@@ -211,8 +212,11 @@ typedef unsigned int JDIMENSION;
  */
 
 #ifdef NEED_FAR_POINTERS
+#ifndef FAR
 #define FAR  far
+#endif
 #else
+#undef FAR
 #define FAR
 #endif
 
index 1b9e0a4..ed9eeab 100644 (file)
@@ -11,6 +11,8 @@
 
 #if JPEG_LIB_VERSION >= 70
 #define _DCT_scaled_size DCT_h_scaled_size
+#define _DCT_h_scaled_size DCT_h_scaled_size
+#define _DCT_v_scaled_size DCT_v_scaled_size
 #define _min_DCT_scaled_size min_DCT_h_scaled_size
 #define _min_DCT_h_scaled_size min_DCT_h_scaled_size
 #define _min_DCT_v_scaled_size min_DCT_v_scaled_size
@@ -18,6 +20,8 @@
 #define _jpeg_height jpeg_height
 #else
 #define _DCT_scaled_size DCT_scaled_size
+#define _DCT_h_scaled_size DCT_scaled_size
+#define _DCT_v_scaled_size DCT_scaled_size
 #define _min_DCT_scaled_size min_DCT_scaled_size
 #define _min_DCT_h_scaled_size min_DCT_scaled_size
 #define _min_DCT_v_scaled_size min_DCT_scaled_size
index d19a3ef..91668ed 100644 (file)
--- a/jpeglib.h
+++ b/jpeglib.h
@@ -1,10 +1,11 @@
 /*
  * jpeglib.h
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1998, Thomas G. Lane.
  * Modified 2002-2009 by Guido Vollbeding.
- * Copyright (C) 2009-2011, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
+ * Modifications:
+ * Copyright (C) 2009-2011, 2013, D. R. Commander.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file defines the application interface for the JPEG library.
@@ -912,7 +913,7 @@ typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo));
 #define jpeg_destroy_decompress        jDestDecompress
 #define jpeg_stdio_dest                jStdDest
 #define jpeg_stdio_src         jStdSrc
-#if JPEG_LIB_VERSION >= 80
+#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
 #define jpeg_mem_dest          jMemDest
 #define jpeg_mem_src           jMemSrc
 #endif
@@ -999,7 +1000,7 @@ EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo));
 EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile));
 EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile));
 
-#if JPEG_LIB_VERSION >= 80
+#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
 /* Data source and destination managers: memory buffers. */
 EXTERN(void) jpeg_mem_dest JPP((j_compress_ptr cinfo,
                               unsigned char ** outbuffer,
index 160b47d..b6a3e56 100644 (file)
@@ -1,4 +1,4 @@
-.TH JPEGTRAN 1 "31 January 2012"
+.TH JPEGTRAN 1 "1 January 2013"
 .SH NAME
 jpegtran \- lossless transformation of JPEG files
 .SH SYNOPSIS
@@ -251,6 +251,9 @@ Wallace, Gregory K.  "The JPEG Still Picture Compression Standard",
 Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44.
 .SH AUTHOR
 Independent JPEG Group
+.PP
+This file was modified by The libjpeg-turbo Project to include only information
+relevant to libjpeg-turbo and to wordsmith certain sections.
 .SH BUGS
 The transform options can't transform odd-size images perfectly.  Use
 .B \-trim
index 6a22ed2..54c8ece 100644 (file)
@@ -1,9 +1,10 @@
 /*
  * jpegtran.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1995-2010, Thomas G. Lane, Guido Vollbeding.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2010, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains a command-line user interface for JPEG transcoding.
@@ -205,7 +206,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
        fprintf(stderr, "%s version %s (build %s)\n",
                PACKAGE_NAME, VERSION, BUILD);
        fprintf(stderr, "%s\n\n", JCOPYRIGHT);
-       fprintf(stderr, "Emulating The Independent JPEG Group's libjpeg, version %s\n\n",
+       fprintf(stderr, "Emulating The Independent JPEG Group's software, version %s\n\n",
                JVERSION);
        printed_version = TRUE;
       }
index 362bb1e..aa2c59a 100644 (file)
--- a/jquant1.c
+++ b/jquant1.c
@@ -1,9 +1,10 @@
 /*
  * jquant1.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1996, Thomas G. Lane.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2009, D. R. Commander
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains 1-pass color quantization (color mapping) routines.
index da964f7..9b060e5 100644 (file)
--- a/jquant2.c
+++ b/jquant2.c
@@ -1,9 +1,10 @@
 /*
  * jquant2.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1996, Thomas G. Lane.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2009, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains 2-pass color quantization (color mapping) routines.
index 71d7b91..c37651b 100644 (file)
@@ -1,9 +1,10 @@
 /*
  * jversion.h
  *
- * Copyright (C) 1991-2010, Thomas G. Lane, Guido Vollbeding.
- * Copyright (C) 2010, 2012, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
+ * This file was part of the Independent JPEG Group's software:
+ * Copyright (C) 1991-2012, Thomas G. Lane, Guido Vollbeding.
+ * Modifications:
+ * Copyright (C) 2010, 2012-2014, D. R. Commander.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains software version identification.
 
 #if JPEG_LIB_VERSION >= 80
 
-#define JVERSION       "8b  16-May-2010"
+#define JVERSION       "8d  15-Jan-2012"
 
 #elif JPEG_LIB_VERSION >= 70
 
-#define JVERSION        "7  27-Jun-2009"
+#define JVERSION       "7  27-Jun-2009"
 
 #else
 
@@ -24,8 +25,8 @@
 
 #endif
 
-#define JCOPYRIGHT     "Copyright (C) 1991-2010 Thomas G. Lane, Guido Vollbeding\n" \
+#define JCOPYRIGHT     "Copyright (C) 1991-2012 Thomas G. Lane, Guido Vollbeding\n" \
                        "Copyright (C) 1999-2006 MIYASAKA Masaru\n" \
                        "Copyright (C) 2009 Pierre Ossman for Cendio AB\n" \
-                       "Copyright (C) 2009-2012 D. R. Commander\n" \
+                       "Copyright (C) 2009-2014 D. R. Commander\n" \
                        "Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies)"
index 5443943..b4480d8 100644 (file)
@@ -1,4 +1,5 @@
 LIBJPEGTURBO_@JPEG_LIB_VERSION_DECIMAL@ {
+  @MEM_SRCDST_FUNCTIONS@
   local:
     jsimd_*;
     jconst_*;
index d350fc7..88d3a5d 100644 (file)
@@ -1,7 +1,9 @@
 USING THE IJG JPEG LIBRARY
 
-Copyright (C) 1994-2010, Thomas G. Lane, Guido Vollbeding, D. R. Commander.
-This file is part of the Independent JPEG Group's software.
+This file was part of the Independent JPEG Group's software:
+Copyright (C) 1994-2011, Thomas G. Lane, Guido Vollbeding.
+Modifications:
+Copyright (C) 2010, D. R. Commander.
 For conditions of distribution and use, see the accompanying README file.
 
 
@@ -1019,7 +1021,8 @@ The actual dimensions of the JPEG image that will be written to the file are
 given by the following fields.  These are computed from the input image
 dimensions and the compression parameters by jpeg_start_compress().  You can
 also call jpeg_calc_jpeg_dimensions() to obtain the values that will result
-from the current parameter settings.
+from the current parameter settings.  This can be useful if you are trying
+to pick a scaling ratio that will get close to a desired target size.
 
 JDIMENSION jpeg_width          Actual dimensions of output image.
 JDIMENSION jpeg_height
@@ -1113,7 +1116,8 @@ J_COLOR_SPACE out_color_space
 unsigned int scale_num, scale_denom
        Scale the image by the fraction scale_num/scale_denom.  Default is
        1/1, or no scaling.  Currently, the only supported scaling ratios
-       are 1/1, 1/2, 1/4, and 1/8.  (The library design allows for arbitrary
+       are M/8 with all M from 1 to 16, or any reduced fraction thereof (such
+       as 1/2, 3/4, etc.)  (The library design allows for arbitrary
        scaling ratios but this is not likely to be implemented any time soon.)
        Smaller scaling ratios permit significantly faster decoding since
        fewer pixels need be processed and a simpler IDCT method can be used.
@@ -1275,8 +1279,9 @@ jpeg_read_header's guess by setting jpeg_color_space.  jpeg_read_header also
 selects a default output color space based on (its guess of) jpeg_color_space;
 set out_color_space to override this.  Again, you must select a supported
 transformation.  jdcolor.c currently supports
-       YCbCr => GRAYSCALE
        YCbCr => RGB
+       YCbCr => GRAYSCALE
+       RGB => GRAYSCALE
        GRAYSCALE => RGB
        YCCK => CMYK
 as well as the null transforms.  (Since GRAYSCALE=>RGB is provided, an
diff --git a/md5/Makefile.am b/md5/Makefile.am
new file mode 100644 (file)
index 0000000..b36f019
--- /dev/null
@@ -0,0 +1,4 @@
+noinst_PROGRAMS = md5cmp
+
+md5cmp_SOURCES = md5cmp.c md5.c md5hl.c md5.h
+md5cmp_CFLAGS = -I$(srcdir)
diff --git a/md5/Makefile.in b/md5/Makefile.in
new file mode 100644 (file)
index 0000000..0dd0a78
--- /dev/null
@@ -0,0 +1,515 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+SOURCES = $(md5cmp_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = md5cmp$(EXEEXT)
+subdir = md5
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/jconfig.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_md5cmp_OBJECTS = md5cmp-md5cmp.$(OBJEXT) md5cmp-md5.$(OBJEXT) \
+       md5cmp-md5hl.$(OBJEXT)
+md5cmp_OBJECTS = $(am_md5cmp_OBJECTS)
+md5cmp_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(md5cmp_SOURCES)
+DIST_SOURCES = $(md5cmp_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD = @BUILD@
+CC = @CC@
+CCAS = @CCAS@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBARCH = @DEBARCH@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVA_RPM_CONTENTS_1 = @JAVA_RPM_CONTENTS_1@
+JAVA_RPM_CONTENTS_2 = @JAVA_RPM_CONTENTS_2@
+JNI_CFLAGS = @JNI_CFLAGS@
+JPEG_LIB_VERSION = @JPEG_LIB_VERSION@
+JPEG_LIB_VERSION_DECIMAL = @JPEG_LIB_VERSION_DECIMAL@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_CURRENT = @LIBTOOL_CURRENT@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MEM_SRCDST_FUNCTIONS = @MEM_SRCDST_FUNCTIONS@
+NAFLAGS = @NAFLAGS@
+NASM = @NASM@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGNAME = @PKGNAME@
+RANLIB = @RANLIB@
+RPMARCH = @RPMARCH@
+RPM_CONFIG_ARGS = @RPM_CONFIG_ARGS@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIMD_ARM_FALSE = @SIMD_ARM_FALSE@
+SIMD_ARM_TRUE = @SIMD_ARM_TRUE@
+SIMD_I386_FALSE = @SIMD_I386_FALSE@
+SIMD_I386_TRUE = @SIMD_I386_TRUE@
+SIMD_X86_64_FALSE = @SIMD_X86_64_FALSE@
+SIMD_X86_64_TRUE = @SIMD_X86_64_TRUE@
+SO_AGE = @SO_AGE@
+SO_MAJOR_VERSION = @SO_MAJOR_VERSION@
+SO_MINOR_VERSION = @SO_MINOR_VERSION@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSION_SCRIPT_FALSE = @VERSION_SCRIPT_FALSE@
+VERSION_SCRIPT_FLAG = @VERSION_SCRIPT_FLAG@
+VERSION_SCRIPT_TRUE = @VERSION_SCRIPT_TRUE@
+WITH_ARITH_DEC_FALSE = @WITH_ARITH_DEC_FALSE@
+WITH_ARITH_DEC_TRUE = @WITH_ARITH_DEC_TRUE@
+WITH_ARITH_ENC_FALSE = @WITH_ARITH_ENC_FALSE@
+WITH_ARITH_ENC_TRUE = @WITH_ARITH_ENC_TRUE@
+WITH_ARITH_FALSE = @WITH_ARITH_FALSE@
+WITH_ARITH_TRUE = @WITH_ARITH_TRUE@
+WITH_JAVA = @WITH_JAVA@
+WITH_JAVA_FALSE = @WITH_JAVA_FALSE@
+WITH_JAVA_TRUE = @WITH_JAVA_TRUE@
+WITH_SIMD_FALSE = @WITH_SIMD_FALSE@
+WITH_SIMD_TRUE = @WITH_SIMD_TRUE@
+WITH_SSE_FLOAT_DCT_FALSE = @WITH_SSE_FLOAT_DCT_FALSE@
+WITH_SSE_FLOAT_DCT_TRUE = @WITH_SSE_FLOAT_DCT_TRUE@
+WITH_TURBOJPEG_FALSE = @WITH_TURBOJPEG_FALSE@
+WITH_TURBOJPEG_TRUE = @WITH_TURBOJPEG_TRUE@
+X86_64_FALSE = @X86_64_FALSE@
+X86_64_TRUE = @X86_64_TRUE@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+md5cmp_SOURCES = md5cmp.c md5.c md5hl.c md5.h
+md5cmp_CFLAGS = -I$(srcdir)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  md5/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  md5/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+       @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+md5cmp$(EXEEXT): $(md5cmp_OBJECTS) $(md5cmp_DEPENDENCIES) 
+       @rm -f md5cmp$(EXEEXT)
+       $(LINK) $(md5cmp_LDFLAGS) $(md5cmp_OBJECTS) $(md5cmp_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5cmp-md5.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5cmp-md5cmp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5cmp-md5hl.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+md5cmp-md5cmp.o: md5cmp.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(md5cmp_CFLAGS) $(CFLAGS) -MT md5cmp-md5cmp.o -MD -MP -MF "$(DEPDIR)/md5cmp-md5cmp.Tpo" -c -o md5cmp-md5cmp.o `test -f 'md5cmp.c' || echo '$(srcdir)/'`md5cmp.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/md5cmp-md5cmp.Tpo" "$(DEPDIR)/md5cmp-md5cmp.Po"; else rm -f "$(DEPDIR)/md5cmp-md5cmp.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='md5cmp.c' object='md5cmp-md5cmp.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(md5cmp_CFLAGS) $(CFLAGS) -c -o md5cmp-md5cmp.o `test -f 'md5cmp.c' || echo '$(srcdir)/'`md5cmp.c
+
+md5cmp-md5cmp.obj: md5cmp.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(md5cmp_CFLAGS) $(CFLAGS) -MT md5cmp-md5cmp.obj -MD -MP -MF "$(DEPDIR)/md5cmp-md5cmp.Tpo" -c -o md5cmp-md5cmp.obj `if test -f 'md5cmp.c'; then $(CYGPATH_W) 'md5cmp.c'; else $(CYGPATH_W) '$(srcdir)/md5cmp.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/md5cmp-md5cmp.Tpo" "$(DEPDIR)/md5cmp-md5cmp.Po"; else rm -f "$(DEPDIR)/md5cmp-md5cmp.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='md5cmp.c' object='md5cmp-md5cmp.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(md5cmp_CFLAGS) $(CFLAGS) -c -o md5cmp-md5cmp.obj `if test -f 'md5cmp.c'; then $(CYGPATH_W) 'md5cmp.c'; else $(CYGPATH_W) '$(srcdir)/md5cmp.c'; fi`
+
+md5cmp-md5.o: md5.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(md5cmp_CFLAGS) $(CFLAGS) -MT md5cmp-md5.o -MD -MP -MF "$(DEPDIR)/md5cmp-md5.Tpo" -c -o md5cmp-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/md5cmp-md5.Tpo" "$(DEPDIR)/md5cmp-md5.Po"; else rm -f "$(DEPDIR)/md5cmp-md5.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='md5.c' object='md5cmp-md5.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(md5cmp_CFLAGS) $(CFLAGS) -c -o md5cmp-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c
+
+md5cmp-md5.obj: md5.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(md5cmp_CFLAGS) $(CFLAGS) -MT md5cmp-md5.obj -MD -MP -MF "$(DEPDIR)/md5cmp-md5.Tpo" -c -o md5cmp-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/md5cmp-md5.Tpo" "$(DEPDIR)/md5cmp-md5.Po"; else rm -f "$(DEPDIR)/md5cmp-md5.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='md5.c' object='md5cmp-md5.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(md5cmp_CFLAGS) $(CFLAGS) -c -o md5cmp-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`
+
+md5cmp-md5hl.o: md5hl.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(md5cmp_CFLAGS) $(CFLAGS) -MT md5cmp-md5hl.o -MD -MP -MF "$(DEPDIR)/md5cmp-md5hl.Tpo" -c -o md5cmp-md5hl.o `test -f 'md5hl.c' || echo '$(srcdir)/'`md5hl.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/md5cmp-md5hl.Tpo" "$(DEPDIR)/md5cmp-md5hl.Po"; else rm -f "$(DEPDIR)/md5cmp-md5hl.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='md5hl.c' object='md5cmp-md5hl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(md5cmp_CFLAGS) $(CFLAGS) -c -o md5cmp-md5hl.o `test -f 'md5hl.c' || echo '$(srcdir)/'`md5hl.c
+
+md5cmp-md5hl.obj: md5hl.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(md5cmp_CFLAGS) $(CFLAGS) -MT md5cmp-md5hl.obj -MD -MP -MF "$(DEPDIR)/md5cmp-md5hl.Tpo" -c -o md5cmp-md5hl.obj `if test -f 'md5hl.c'; then $(CYGPATH_W) 'md5hl.c'; else $(CYGPATH_W) '$(srcdir)/md5hl.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/md5cmp-md5hl.Tpo" "$(DEPDIR)/md5cmp-md5hl.Po"; else rm -f "$(DEPDIR)/md5cmp-md5hl.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='md5hl.c' object='md5cmp-md5hl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(md5cmp_CFLAGS) $(CFLAGS) -c -o md5cmp-md5hl.obj `if test -f 'md5hl.c'; then $(CYGPATH_W) 'md5hl.c'; else $(CYGPATH_W) '$(srcdir)/md5hl.c'; fi`
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstPROGRAMS ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-exec \
+       install-exec-am install-info install-info-am install-man \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/md5/md5.c b/md5/md5.c
new file mode 100644 (file)
index 0000000..7193e95
--- /dev/null
+++ b/md5/md5.c
@@ -0,0 +1,322 @@
+/*
+ * MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
+ *
+ * Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+ * rights reserved.
+ *
+ * License to copy and use this software is granted provided that it
+ * is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+ * Algorithm" in all material mentioning or referencing this software
+ * or this function.
+ *
+ * License is also granted to make and use derivative works provided
+ * that such works are identified as "derived from the RSA Data
+ * Security, Inc. MD5 Message-Digest Algorithm" in all material
+ * mentioning or referencing the derived work.
+ *
+ * RSA Data Security, Inc. makes no representations concerning either
+ * the merchantability of this software or the suitability of this
+ * software for any particular purpose. It is provided "as is"
+ * without express or implied warranty of any kind.
+ *
+ * These notices must be retained in any copies of any part of this
+ * documentation and/or software.
+ *
+ * This code is the same as the code published by RSA Inc.  It has been
+ * edited for clarity and style only.
+ */
+
+#include <sys/types.h>
+#include <string.h>
+
+#include "./md5.h"
+
+static void MD5Transform(unsigned int [4], const unsigned char [64]);
+
+#if (BYTE_ORDER == LITTLE_ENDIAN)
+#define Encode memcpy
+#define Decode memcpy
+#else 
+
+/*
+ * Encodes input (unsigned int) into output (unsigned char). Assumes len is
+ * a multiple of 4.
+ */
+
+static void
+Encode (unsigned char *output, unsigned int *input, unsigned int len)
+{
+       unsigned int i;
+       unsigned int *op = (unsigned int *)output;
+
+       for (i = 0; i < len / 4; i++)
+               op[i] = htole32(input[i]);
+}
+
+/*
+ * Decodes input (unsigned char) into output (unsigned int). Assumes len is
+ * a multiple of 4.
+ */
+
+static void
+Decode (unsigned int *output, const unsigned char *input, unsigned int len)
+{
+       unsigned int i;
+       const unsigned int *ip = (const unsigned int *)input;
+
+       for (i = 0; i < len / 4; i++)
+               output[i] = le32toh(ip[i]);
+}
+#endif
+
+static unsigned char PADDING[64] = {
+  0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+/* F, G, H and I are basic MD5 functions. */
+#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
+#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
+#define H(x, y, z) ((x) ^ (y) ^ (z))
+#define I(x, y, z) ((y) ^ ((x) | (~z)))
+
+/* ROTATE_LEFT rotates x left n bits. */
+#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
+
+/*
+ * FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
+ * Rotation is separate from addition to prevent recomputation.
+ */
+#define FF(a, b, c, d, x, s, ac) { \
+       (a) += F ((b), (c), (d)) + (x) + (unsigned int)(ac); \
+       (a) = ROTATE_LEFT ((a), (s)); \
+       (a) += (b); \
+       }
+#define GG(a, b, c, d, x, s, ac) { \
+       (a) += G ((b), (c), (d)) + (x) + (unsigned int)(ac); \
+       (a) = ROTATE_LEFT ((a), (s)); \
+       (a) += (b); \
+       }
+#define HH(a, b, c, d, x, s, ac) { \
+       (a) += H ((b), (c), (d)) + (x) + (unsigned int)(ac); \
+       (a) = ROTATE_LEFT ((a), (s)); \
+       (a) += (b); \
+       }
+#define II(a, b, c, d, x, s, ac) { \
+       (a) += I ((b), (c), (d)) + (x) + (unsigned int)(ac); \
+       (a) = ROTATE_LEFT ((a), (s)); \
+       (a) += (b); \
+       }
+
+/* MD5 initialization. Begins an MD5 operation, writing a new context. */
+
+void
+MD5Init (context)
+       MD5_CTX *context;
+{
+
+       context->count[0] = context->count[1] = 0;
+
+       /* Load magic initialization constants.  */
+       context->state[0] = 0x67452301;
+       context->state[1] = 0xefcdab89;
+       context->state[2] = 0x98badcfe;
+       context->state[3] = 0x10325476;
+}
+
+/* 
+ * MD5 block update operation. Continues an MD5 message-digest
+ * operation, processing another message block, and updating the
+ * context.
+ */
+
+void
+MD5Update (context, in, inputLen)
+       MD5_CTX *context;
+       const void *in;
+       unsigned int inputLen;
+{
+       unsigned int i, idx, partLen;
+       const unsigned char *input = in;
+
+       /* Compute number of bytes mod 64 */
+       idx = (unsigned int)((context->count[0] >> 3) & 0x3F);
+
+       /* Update number of bits */
+       if ((context->count[0] += ((unsigned int)inputLen << 3))
+           < ((unsigned int)inputLen << 3))
+               context->count[1]++;
+       context->count[1] += ((unsigned int)inputLen >> 29);
+
+       partLen = 64 - idx;
+
+       /* Transform as many times as possible. */
+       if (inputLen >= partLen) {
+               memcpy((void *)&context->buffer[idx], (const void *)input,
+                   partLen);
+               MD5Transform (context->state, context->buffer);
+
+               for (i = partLen; i + 63 < inputLen; i += 64)
+                       MD5Transform (context->state, &input[i]);
+
+               idx = 0;
+       }
+       else
+               i = 0;
+
+       /* Buffer remaining input */
+       memcpy ((void *)&context->buffer[idx], (const void *)&input[i],
+           inputLen-i);
+}
+
+/*
+ * MD5 padding. Adds padding followed by original length.
+ */
+
+void
+MD5Pad (context)
+       MD5_CTX *context;
+{
+       unsigned char bits[8];
+       unsigned int idx, padLen;
+
+       /* Save number of bits */
+       Encode (bits, context->count, 8);
+
+       /* Pad out to 56 mod 64. */
+       idx = (unsigned int)((context->count[0] >> 3) & 0x3f);
+       padLen = (idx < 56) ? (56 - idx) : (120 - idx);
+       MD5Update (context, PADDING, padLen);
+
+       /* Append length (before padding) */
+       MD5Update (context, bits, 8);
+}
+
+/*
+ * MD5 finalization. Ends an MD5 message-digest operation, writing the
+ * the message digest and zeroizing the context.
+ */
+
+void
+MD5Final (digest, context)
+       unsigned char digest[16];
+       MD5_CTX *context;
+{
+       /* Do padding. */
+       MD5Pad (context);
+
+       /* Store state in digest */
+       Encode (digest, context->state, 16);
+
+       /* Zeroize sensitive information. */
+       memset ((void *)context, 0, sizeof (*context));
+}
+
+/* MD5 basic transformation. Transforms state based on block. */
+
+static void
+MD5Transform (state, block)
+       unsigned int state[4];
+       const unsigned char block[64];
+{
+       unsigned int a = state[0], b = state[1], c = state[2], d = state[3], x[16];
+
+       Decode (x, block, 64);
+
+       /* Round 1 */
+#define S11 7
+#define S12 12
+#define S13 17
+#define S14 22
+       FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
+       FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
+       FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
+       FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
+       FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
+       FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
+       FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
+       FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
+       FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
+       FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
+       FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
+       FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
+       FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
+       FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
+       FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
+       FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
+
+       /* Round 2 */
+#define S21 5
+#define S22 9
+#define S23 14
+#define S24 20
+       GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
+       GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
+       GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
+       GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
+       GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
+       GG (d, a, b, c, x[10], S22,  0x2441453); /* 22 */
+       GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
+       GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
+       GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
+       GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
+       GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
+       GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
+       GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
+       GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
+       GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
+       GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
+
+       /* Round 3 */
+#define S31 4
+#define S32 11
+#define S33 16
+#define S34 23
+       HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
+       HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
+       HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
+       HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
+       HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
+       HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
+       HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
+       HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
+       HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
+       HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
+       HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
+       HH (b, c, d, a, x[ 6], S34,  0x4881d05); /* 44 */
+       HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
+       HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
+       HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
+       HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
+
+       /* Round 4 */
+#define S41 6
+#define S42 10
+#define S43 15
+#define S44 21
+       II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
+       II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
+       II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
+       II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
+       II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
+       II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
+       II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
+       II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
+       II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
+       II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
+       II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
+       II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
+       II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
+       II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
+       II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
+       II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
+
+       state[0] += a;
+       state[1] += b;
+       state[2] += c;
+       state[3] += d;
+
+       /* Zeroize sensitive information. */
+       memset ((void *)x, 0, sizeof (x));
+}
diff --git a/md5/md5.h b/md5/md5.h
new file mode 100644 (file)
index 0000000..551e252
--- /dev/null
+++ b/md5/md5.h
@@ -0,0 +1,49 @@
+/* MD5.H - header file for MD5C.C
+ * $FreeBSD$
+ */
+
+/*-
+ Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+rights reserved.
+
+License to copy and use this software is granted provided that it
+is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+Algorithm" in all material mentioning or referencing this software
+or this function.
+
+License is also granted to make and use derivative works provided
+that such works are identified as "derived from the RSA Data
+Security, Inc. MD5 Message-Digest Algorithm" in all material
+mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either
+the merchantability of this software or the suitability of this
+software for any particular purpose. It is provided "as is"
+without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this
+documentation and/or software.
+ */
+
+#ifndef _SYS_MD5_H_
+#define _SYS_MD5_H_
+
+#define MD5_BLOCK_LENGTH               64
+#define MD5_DIGEST_LENGTH              16
+#define MD5_DIGEST_STRING_LENGTH       (MD5_DIGEST_LENGTH * 2 + 1)
+
+/* MD5 context. */
+typedef struct MD5Context {
+  unsigned int state[4];       /* state (ABCD) */
+  unsigned int count[2];       /* number of bits, modulo 2^64 (lsb first) */
+  unsigned char buffer[64];    /* input buffer */
+} MD5_CTX;
+
+void   MD5Init (MD5_CTX *);
+void   MD5Update (MD5_CTX *, const void *, unsigned int);
+void   MD5Final (unsigned char [16], MD5_CTX *);
+char * MD5End(MD5_CTX *, char *);
+char * MD5File(const char *, char *);
+char * MD5FileChunk(const char *, char *, off_t, off_t);
+char * MD5Data(const void *, unsigned int, char *);
+#endif /* _SYS_MD5_H_ */
similarity index 68%
rename from java/org/libjpegturbo/turbojpeg/TJLoader.java
rename to md5/md5cmp.c
index db77bba..07acda4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2011 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2013 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-package org.libjpegturbo.turbojpeg;
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include "./md5.h"
 
-final class TJLoader {
-  static void load() {
-    System.loadLibrary("turbojpeg");
-  }
-};
+int main(int argc, char *argv[])
+{
+       char *md5sum = NULL, buf[65];
+
+       if (argc < 3) {
+               fprintf(stderr, "USAGE: %s <correct MD5 sum> <file>\n", argv[0]);
+               return -1;
+       }
+
+       if (strlen(argv[1]) != 32)
+               fprintf(stderr, "WARNING: MD5 hash size is wrong.\n");
+
+       md5sum = MD5File(argv[2], buf);
+       if (!md5sum) {
+               perror("Could not obtain MD5 sum");
+               return -1;
+       }
+
+       if (!strcasecmp(md5sum, argv[1])) {
+               fprintf(stderr, "%s: OK\n", argv[2]);
+               return 0;
+       } else {
+               fprintf(stderr, "%s: FAILED.  Checksum is %s\n", argv[2], md5sum);
+               return -1;
+       }
+}
diff --git a/md5/md5hl.c b/md5/md5hl.c
new file mode 100644 (file)
index 0000000..eaa41e2
--- /dev/null
@@ -0,0 +1,97 @@
+/* mdXhl.c * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <phk@FreeBSD.org> wrote this file.  As long as you retain this notice you
+ * can do whatever you want with this stuff. If we meet some day, and you think
+ * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
+ * ----------------------------------------------------------------------------
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#define LENGTH 16
+
+#include "./md5.h"
+
+char *
+MD5End(MD5_CTX *ctx, char *buf)
+{
+       int i;
+       unsigned char digest[LENGTH];
+       static const char hex[]="0123456789abcdef";
+
+       if (!buf)
+               buf = malloc(2*LENGTH + 1);
+       if (!buf)
+               return 0;
+       MD5Final(digest, ctx);
+       for (i = 0; i < LENGTH; i++) {
+               buf[i+i] = hex[digest[i] >> 4];
+               buf[i+i+1] = hex[digest[i] & 0x0f];
+       }
+       buf[i+i] = '\0';
+       return buf;
+}
+
+char *
+MD5File(const char *filename, char *buf)
+{
+       return (MD5FileChunk(filename, buf, 0, 0));
+}
+
+char *
+MD5FileChunk(const char *filename, char *buf, off_t ofs, off_t len)
+{
+       unsigned char buffer[BUFSIZ];
+       MD5_CTX ctx;
+       struct stat stbuf;
+       int f, i, e;
+       off_t n;
+
+       MD5Init(&ctx);
+       f = open(filename, O_RDONLY);
+       if (f < 0)
+               return 0;
+       if (fstat(f, &stbuf) < 0)
+               return 0;
+       if (ofs > stbuf.st_size)
+               ofs = stbuf.st_size;
+       if ((len == 0) || (len > stbuf.st_size - ofs))
+               len = stbuf.st_size - ofs;
+       if (lseek(f, ofs, SEEK_SET) < 0)
+               return 0;
+       n = len;
+       i = 0;
+       while (n > 0) {
+               if (n > sizeof(buffer))
+                       i = read(f, buffer, sizeof(buffer));
+               else
+                       i = read(f, buffer, n);
+               if (i < 0) 
+                       break;
+               MD5Update(&ctx, buffer, i);
+               n -= i;
+       } 
+       e = errno;
+       close(f);
+       errno = e;
+       if (i < 0)
+               return 0;
+       return (MD5End(&ctx, buf));
+}
+
+char *
+MD5Data (const void *data, unsigned int len, char *buf)
+{
+       MD5_CTX ctx;
+
+       MD5Init(&ctx);
+       MD5Update(&ctx,data,len);
+       return (MD5End(&ctx, buf));
+}
diff --git a/rdbmp.c b/rdbmp.c
index be32e43..ba9f728 100644 (file)
--- a/rdbmp.c
+++ b/rdbmp.c
@@ -1,10 +1,11 @@
 /*
  * rdbmp.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1994-1996, Thomas G. Lane.
  * Modified 2009-2010 by Guido Vollbeding.
+ * libjpeg-turbo Modifications:
  * Modified 2011 by Siarhei Siamashka.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains routines to read input images in Microsoft "BMP"
index d406755..fc0727a 100644 (file)
@@ -1,9 +1,10 @@
 /*
  * rdswitch.c
  *
+ * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1996, Thomas G. Lane.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2010, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains routines to process some of cjpeg's more complicated
index 06c94ab..2ae4878 100644 (file)
@@ -1,13 +1,13 @@
 {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
 {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
 {\colortbl;\red255\green255\blue255;}
-\margl1440\margr1440\vieww15200\viewh9600\viewkind0
+\margl1440\margr1440\vieww26380\viewh15840\viewkind0
 \deftab720
 \pard\pardeftab720\ql\qnatural
 
-\f0\fs24 \cf0 libjpeg-turbo is a derivative of libjpeg that uses SIMD instructions (MMX, SSE2, NEON) to accelerate baseline JPEG compression and decompression on x86, x86-64, and ARM systems.  On such systems, libjpeg-turbo is generally 2-4x as fast as the unmodified version of libjpeg, all else being equal.\
+\f0\fs24 \cf0 libjpeg-turbo is a JPEG image codec that uses SIMD instructions (MMX, SSE2, NEON) to accelerate baseline JPEG compression and decompression on x86, x86-64, and ARM systems.  On such systems, libjpeg-turbo is generally 2-4x as fast as libjpeg, all else being equal.  On other types of systems, libjpeg-turbo can still outperform libjpeg by a significant amount, by virtue of its highly-optimized Huffman coding routines.  In many cases, the performance of libjpeg-turbo rivals that of proprietary high-speed JPEG codecs.\
 \
-libjpeg-turbo was originally based on libjpeg/SIMD by Miyasaka Masaru, but the TigerVNC and VirtualGL projects made numerous enhancements to the codec in 2009, including improved support for Mac OS X, 64-bit support, support for 32-bit and big-endian pixel formats (RGBX, XBGR, etc.), accelerated Huffman encoding/decoding, and various bug fixes.  The goal was to produce a fully open-source codec that could replace the partially closed-source TurboJPEG/IPP codec used by VirtualGL and TurboVNC.  libjpeg-turbo generally achieves 80-120% of the performance of TurboJPEG/IPP.  It is faster in some areas but slower in others.\
+libjpeg-turbo implements both the traditional libjpeg API as well as the less powerful but more straightforward TurboJPEG API.  libjpeg-turbo also features colorspace extensions that allow it to compress from/decompress to 32-bit and big-endian pixel buffers (RGBX, XBGR, etc.), as well as a full-featured Java interface.\
 \
-In early 2010, libjpeg-turbo spun off into its own independent project, with the goal of making high-speed JPEG compression/decompression technology available to a broader range of users and developers.\
+libjpeg-turbo was originally based on libjpeg/SIMD, an MMX-accelerated derivative of libjpeg v6b developed by Miyasaka Masaru.  The TigerVNC and VirtualGL projects made numerous enhancements to the codec in 2009, and in early 2010, libjpeg-turbo spun off into an independent project, with the goal of making high-speed JPEG compression/decompression technology available to a broader range of users and developers.\
 }
\ No newline at end of file
index 9082f65..a570c5b 100755 (executable)
@@ -1,4 +1,4 @@
-{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
 {\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fmodern\fcharset0 CourierNewPSMT;}
 {\colortbl;\red255\green255\blue255;}
 \margl1440\margr1440\vieww9000\viewh8400\viewkind0
@@ -14,6 +14,4 @@
 
 \f0 \cf0 \
 from the command line.\
-\
-If TurboJPEG/IPP is currently installed, then it must be removed prior to installing libjpeg-turbo.\
 }
\ No newline at end of file
diff --git a/release/copyright b/release/copyright
deleted file mode 100755 (executable)
index 125388d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-libjpeg-turbo is released under a BSD-style license (see README and README-turbo.txt)
index 9cf7c46..5ae4ce9 100644 (file)
@@ -4,23 +4,27 @@ Section: misc
 Priority: optional
 Architecture: {__ARCH}
 Essential: no
-Maintainer: The libjpeg-turbo Project [http://www.libjpeg-turbo.org]
+Maintainer: The libjpeg-turbo Project <information@libjpeg-turbo.org>
+Homepage: http://www.libjpeg-turbo.org
 Description: A SIMD-accelerated JPEG codec that provides both the libjpeg and TurboJPEG APIs
- libjpeg-turbo is a derivative of libjpeg that uses SIMD instructions (MMX,
SSE2, NEON) to accelerate baseline JPEG compression and decompression on x86,
+ libjpeg-turbo is a JPEG image codec that uses SIMD instructions (MMX, SSE2,
+ NEON) to accelerate baseline JPEG compression and decompression on x86,
  x86-64, and ARM systems.  On such systems, libjpeg-turbo is generally 2-4x as
- fast as the unmodified version of libjpeg, all else being equal.
+ fast as libjpeg, all else being equal.  On other types of systems,
+ libjpeg-turbo can still outperform libjpeg by a significant amount, by virtue
+ of its highly-optimized Huffman coding routines.  In many cases, the
+ performance of libjpeg-turbo rivals that of proprietary high-speed JPEG
+ codecs.
  .
- libjpeg-turbo was originally based on libjpeg/SIMD by Miyasaka Masaru, but
- the TigerVNC and VirtualGL projects made numerous enhancements to the codec
- in 2009, including improved support for Mac OS X, 64-bit support, support
- for 32-bit and big-endian pixel formats (RGBX, XBGR, etc.), accelerated
- Huffman encoding/decoding, and various bug fixes.  The goal was to produce a
- fully open-source codec that could replace the partially closed-source
- TurboJPEG/IPP codec used by VirtualGL and TurboVNC.  libjpeg-turbo generally
- achieves 80-120% of the performance of TurboJPEG/IPP.  It is faster in some
- areas but slower in others.
+ libjpeg-turbo implements both the traditional libjpeg API as well as the less
+ powerful but more straightforward TurboJPEG API.  libjpeg-turbo also features
+ colorspace extensions that allow it to compress from/decompress to 32-bit and
+ big-endian pixel buffers (RGBX, XBGR, etc.), as well as a full-featured Java
+ interface.
  .
- In early 2010, libjpeg-turbo spun off into its own independent project, with
- the goal of making high-speed JPEG compression/decompression technology
- available to a broader range of users and developers.
+ libjpeg-turbo was originally based on libjpeg/SIMD, an MMX-accelerated
+ derivative of libjpeg v6b developed by Miyasaka Masaru.  The TigerVNC and
+ VirtualGL projects made numerous enhancements to the codec in 2009, and in
+ early 2010, libjpeg-turbo spun off into an independent project, with the goal
+ of making high-speed JPEG compression/decompression technology available to a
+ broader range of users and developers.
index f4643fd..4f65303 100755 (executable)
@@ -1,7 +1,7 @@
 !include x64.nsh
 Name "@CMAKE_PROJECT_NAME@ SDK for @INST_PLATFORM@"
 OutFile "@CMAKE_BINARY_DIR@\${BUILDDIR}@INST_NAME@.exe"
-InstallDir c:\@INST_DIR@
+InstallDir "@INST_DIR@"
 
 SetCompressor bzip2
 
@@ -41,6 +41,11 @@ Section "@CMAKE_PROJECT_NAME@ SDK for @INST_PLATFORM@ (required)"
 !endif
        SetOutPath $INSTDIR\bin
 !ifdef GCC
+       File "@CMAKE_BINARY_DIR@\libturbojpeg.dll"
+!else
+       File "@CMAKE_BINARY_DIR@\${BUILDDIR}turbojpeg.dll"
+!endif
+!ifdef GCC
        File "/oname=libjpeg-@DLL_VERSION@.dll" "@CMAKE_BINARY_DIR@\sharedlib\libjpeg-*.dll" 
 !else
        File "@CMAKE_BINARY_DIR@\sharedlib\${BUILDDIR}jpeg@DLL_VERSION@.dll"
@@ -82,12 +87,12 @@ Section "@CMAKE_PROJECT_NAME@ SDK for @INST_PLATFORM@ (required)"
        File "@CMAKE_SOURCE_DIR@\usage.txt"
        File "@CMAKE_SOURCE_DIR@\wizard.txt"
 
-       WriteRegStr HKLM "SOFTWARE\@INST_DIR@ @VERSION@" "Install_Dir" "$INSTDIR"
+       WriteRegStr HKLM "SOFTWARE\@INST_REG_NAME@ @VERSION@" "Install_Dir" "$INSTDIR"
 
-       WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@INST_DIR@ @VERSION@" "DisplayName" "@CMAKE_PROJECT_NAME@ SDK v@VERSION@ for @INST_PLATFORM@"
-       WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@INST_DIR@ @VERSION@" "UninstallString" '"$INSTDIR\uninstall_@VERSION@.exe"'
-       WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@INST_DIR@ @VERSION@" "NoModify" 1
-       WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@INST_DIR@ @VERSION@" "NoRepair" 1
+       WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@INST_REG_NAME@ @VERSION@" "DisplayName" "@CMAKE_PROJECT_NAME@ SDK v@VERSION@ for @INST_PLATFORM@"
+       WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@INST_REG_NAME@ @VERSION@" "UninstallString" '"$INSTDIR\uninstall_@VERSION@.exe"'
+       WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@INST_REG_NAME@ @VERSION@" "NoModify" 1
+       WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@INST_REG_NAME@ @VERSION@" "NoRepair" 1
        WriteUninstaller "uninstall_@VERSION@.exe"
 SectionEnd
 
@@ -100,19 +105,21 @@ Section "Uninstall"
 
        SetShellVarContext all
 
-       DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@INST_DIR@ @VERSION@"
-       DeleteRegKey HKLM "SOFTWARE\@INST_DIR@ @VERSION@"
+       DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@INST_REG_NAME@ @VERSION@"
+       DeleteRegKey HKLM "SOFTWARE\@INST_REG_NAME@ @VERSION@"
 
 !ifdef GCC
        Delete $INSTDIR\bin\libjpeg-@DLL_VERSION@.dll
        Delete $SYSDIR\libturbojpeg.dll
-       Delete $INSTDIR\lib\libturbojpeg.dll.a"
-       Delete $INSTDIR\lib\libturbojpeg.a"
-       Delete $INSTDIR\lib\libjpeg.dll.a"
-       Delete $INSTDIR\lib\libjpeg.a"
+       Delete $INSTDIR\bin\libturbojpeg.dll
+       Delete $INSTDIR\lib\libturbojpeg.dll.a
+       Delete $INSTDIR\lib\libturbojpeg.a
+       Delete $INSTDIR\lib\libjpeg.dll.a
+       Delete $INSTDIR\lib\libjpeg.a
 !else
        Delete $INSTDIR\bin\jpeg@DLL_VERSION@.dll
        Delete $SYSDIR\turbojpeg.dll
+       Delete $INSTDIR\bin\turbojpeg.dll
        Delete $INSTDIR\lib\jpeg.lib
        Delete $INSTDIR\lib\jpeg-static.lib
        Delete $INSTDIR\lib\turbojpeg.lib
@@ -127,11 +134,11 @@ Section "Uninstall"
        Delete $INSTDIR\bin\tjbench.exe
        Delete $INSTDIR\bin\rdjpgcom.exe
        Delete $INSTDIR\bin\wrjpgcom.exe
-       Delete $INSTDIR\include\jconfig.h"
-       Delete $INSTDIR\include\jerror.h"
-       Delete $INSTDIR\include\jmorecfg.h"
-       Delete $INSTDIR\include\jpeglib.h"
-       Delete $INSTDIR\include\turbojpeg.h"
+       Delete $INSTDIR\include\jconfig.h
+       Delete $INSTDIR\include\jerror.h
+       Delete $INSTDIR\include\jmorecfg.h
+       Delete $INSTDIR\include\jpeglib.h
+       Delete $INSTDIR\include\turbojpeg.h
        Delete $INSTDIR\uninstall_@VERSION@.exe
        Delete $INSTDIR\doc\README
        Delete $INSTDIR\doc\README-turbo.txt
index 9e0ff88..207d638 100644 (file)
@@ -1,11 +1,32 @@
+# Path under which libjpeg-turbo should be installed
+%define _prefix %{__prefix}
+
+# Path under which executables should be installed
+%define _bindir %{__bindir}
+
+# Path under which Java classes and man pages should be installed
+%define _datadir %{__datadir}
+
+# Path under which docs should be installed
+%define _docdir /usr/share/doc/%{name}-%{version}
+
+# Path under which headers should be installed
+%define _includedir %{__includedir}
+
+# _libdir is set to %{_prefix}/%{_lib} by default
 %ifarch x86_64
-%define __lib lib64
+%define _lib lib64
 %else
-%define __lib lib
+%if "%{_prefix}" == "/opt/libjpeg-turbo"
+%define _lib lib32
 %endif
+%endif
+
+# Path under which man pages should be installed
+%define _mandir %{__mandir}
 
 Summary: A SIMD-accelerated JPEG codec that provides both the libjpeg and TurboJPEG APIs
-Name: @PACKAGE_NAME@
+Name: @PKGNAME@
 Version: @VERSION@
 Vendor: The libjpeg-turbo Project
 URL: http://www.libjpeg-turbo.org
@@ -15,51 +36,66 @@ Release: @BUILD@
 License: BSD-style
 BuildRoot: %{_blddir}/%{name}-buildroot-%{version}-%{release}
 Prereq: /sbin/ldconfig
-Provides: %{name} = %{version}-%{release}, turbojpeg = 2.00
-Obsoletes: turbojpeg
+%ifarch x86_64
+Provides: %{name} = %{version}-%{release}, @PACKAGE_NAME@ = %{version}-%{release}, libturbojpeg.so()(64bit)
+%else
+Provides: %{name} = %{version}-%{release}, @PACKAGE_NAME@ = %{version}-%{release}, libturbojpeg.so
+%endif
 
 %description
-libjpeg-turbo is a derivative of libjpeg that uses SIMD instructions (MMX,
-SSE2, NEON) to accelerate baseline JPEG compression and decompression on x86,
-x86-64, and ARM systems.  On such systems, libjpeg-turbo is generally 2-4x as
-fast as the unmodified version of libjpeg, all else being equal.
-
-libjpeg-turbo was originally based on libjpeg/SIMD by Miyasaka Masaru, but
-the TigerVNC and VirtualGL projects made numerous enhancements to the codec in
-2009, including improved support for Mac OS X, 64-bit support, support for
-32-bit and big-endian pixel formats (RGBX, XBGR, etc.), accelerated Huffman
-encoding/decoding, and various bug fixes.  The goal was to produce a fully
-open-source codec that could replace the partially closed-source TurboJPEG/IPP
-codec used by VirtualGL and TurboVNC.  libjpeg-turbo generally achieves 80-120%
-of the performance of TurboJPEG/IPP.  It is faster in some areas but slower in
-others.
-
-In early 2010, libjpeg-turbo spun off into its own independent project, with
-the goal of making high-speed JPEG compression/decompression technology
-available to a broader range of users and developers.
+libjpeg-turbo is a JPEG image codec that uses SIMD instructions (MMX, SSE2,
+NEON) to accelerate baseline JPEG compression and decompression on x86, x86-64,
+and ARM systems.  On such systems, libjpeg-turbo is generally 2-4x as fast as
+libjpeg, all else being equal.  On other types of systems, libjpeg-turbo can
+still outperform libjpeg by a significant amount, by virtue of its
+highly-optimized Huffman coding routines.  In many cases, the performance of
+libjpeg-turbo rivals that of proprietary high-speed JPEG codecs.
+
+libjpeg-turbo implements both the traditional libjpeg API as well as the less
+powerful but more straightforward TurboJPEG API.  libjpeg-turbo also features
+colorspace extensions that allow it to compress from/decompress to 32-bit and
+big-endian pixel buffers (RGBX, XBGR, etc.), as well as a full-featured Java
+interface.
+
+libjpeg-turbo was originally based on libjpeg/SIMD, an MMX-accelerated
+derivative of libjpeg v6b developed by Miyasaka Masaru.  The TigerVNC and
+VirtualGL projects made numerous enhancements to the codec in 2009, and in
+early 2010, libjpeg-turbo spun off into an independent project, with the goal
+of making high-speed JPEG compression/decompression technology available to a
+broader range of users and developers.
 
 #-->%prep
-#-->%setup -q
+#-->%setup -q -n libjpeg-turbo-%{version}
 
 #-->%build
-#-->./configure libdir=/opt/%{name}/%{__lib} mandir=/opt/%{name}/man JPEG_LIB_VERSION=@JPEG_LIB_VERSION@ SO_MAJOR_VERSION=@SO_MAJOR_VERSION@ SO_MINOR_VERSION=@SO_MINOR_VERSION@ --with-pic @RPM_CONFIG_ARGS@
-#-->make DESTDIR=$RPM_BUILD_ROOT libdir=/opt/%{name}/%{__lib} mandir=/opt/%{name}/man
+#-->./configure prefix=%{_prefix} bindir=%{_bindir} datadir=%{_datadir} \
+#-->   docdir=%{_docdir} includedir=%{_includedir} libdir=%{_libdir} \
+#-->   mandir=%{_mandir} JPEG_LIB_VERSION=@JPEG_LIB_VERSION@ \
+#-->   SO_MAJOR_VERSION=@SO_MAJOR_VERSION@ SO_MINOR_VERSION=@SO_MINOR_VERSION@ \
+#-->   --with-pic @RPM_CONFIG_ARGS@
+#-->make DESTDIR=$RPM_BUILD_ROOT
 
 %install
 
 rm -rf $RPM_BUILD_ROOT
-make install DESTDIR=$RPM_BUILD_ROOT libdir=/opt/%{name}/%{__lib} mandir=/opt/%{name}/man docdir=/opt/%{name}/doc exampledir=/opt/%{name}/doc
-rm -f $RPM_BUILD_ROOT/opt/%{name}/%{__lib}/*.la
-mkdir -p $RPM_BUILD_ROOT/usr/%{__lib}
-mv $RPM_BUILD_ROOT/opt/%{name}/%{__lib}/libturbojpeg.* $RPM_BUILD_ROOT/usr/%{__lib}
-/sbin/ldconfig -n $RPM_BUILD_ROOT/opt/%{name}/%{__lib}
-/sbin/ldconfig -n $RPM_BUILD_ROOT/usr/%{__lib}
-mkdir -p $RPM_BUILD_ROOT/usr/include
-mv $RPM_BUILD_ROOT/opt/%{name}/include/turbojpeg.h $RPM_BUILD_ROOT/usr/include
-ln -fs /usr/include/turbojpeg.h $RPM_BUILD_ROOT/opt/%{name}/include/
-ln -fs /usr/%{__lib}/libturbojpeg.a $RPM_BUILD_ROOT/opt/%{name}/%{__lib}/
-mkdir -p $RPM_BUILD_ROOT%{_defaultdocdir}
-mv $RPM_BUILD_ROOT/opt/%{name}/doc $RPM_BUILD_ROOT%{_defaultdocdir}/%{name}-%{version}
+make install DESTDIR=$RPM_BUILD_ROOT docdir=%{_docdir} exampledir=%{_docdir}
+rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
+/sbin/ldconfig -n $RPM_BUILD_ROOT%{_libdir}
+
+#-->%if 0
+
+LJT_LIBDIR=%{__libdir}
+if [ ! "$LJT_LIBDIR" = "%{_libdir}" ]; then
+       echo ERROR: libjpeg-turbo must be configured with libdir=%{_prefix}/%{_lib} when generating an in-tree RPM for this architecture.
+       exit 1
+fi
+
+#-->%endif
+
+LJT_DOCDIR=%{__docdir}
+if [ "%{_prefix}" = "/opt/libjpeg-turbo" -a "$LJT_DOCDIR" = "/opt/libjpeg-turbo/doc" ]; then
+       ln -fs %{_docdir} $RPM_BUILD_ROOT/$LJT_DOCDIR
+fi
 
 %post -p /sbin/ldconfig
 
@@ -70,42 +106,44 @@ rm -rf $RPM_BUILD_ROOT
 
 %files
 %defattr(-,root,root)
-%dir %{_defaultdocdir}/%{name}-%{version}
-%doc %{_defaultdocdir}/%{name}-%{version}/*
-%dir /opt/%{name}
-%dir /opt/%{name}/bin
-/opt/%{name}/bin/cjpeg
-/opt/%{name}/bin/djpeg
-/opt/%{name}/bin/jpegtran
-/opt/%{name}/bin/tjbench
-/opt/%{name}/bin/rdjpgcom
-/opt/%{name}/bin/wrjpgcom
-%dir /opt/%{name}/%{__lib}
-%ifarch x86_64
-%else
-/opt/%{name}/lib32
+%dir %{_docdir}
+%doc %{_docdir}/*
+%dir %{_prefix}
+%if "%{_prefix}" == "/opt/libjpeg-turbo" && "%{_docdir}" != "%{_prefix}/doc"
+ %{_prefix}/doc
+%endif
+%dir %{_bindir}
+%{_bindir}/cjpeg
+%{_bindir}/djpeg
+%{_bindir}/jpegtran
+%{_bindir}/tjbench
+%{_bindir}/rdjpgcom
+%{_bindir}/wrjpgcom
+%dir %{_libdir}
+%{_libdir}/libjpeg.so.@SO_MAJOR_VERSION@.@SO_AGE@.@SO_MINOR_VERSION@
+%{_libdir}/libjpeg.so.@SO_MAJOR_VERSION@
+%{_libdir}/libjpeg.so
+%{_libdir}/libjpeg.a
+%{_libdir}/libturbojpeg.so.0.0.0
+%{_libdir}/libturbojpeg.so.0
+%{_libdir}/libturbojpeg.so
+%{_libdir}/libturbojpeg.a
+%dir %{_includedir}
+%{_includedir}/jconfig.h
+%{_includedir}/jerror.h
+%{_includedir}/jmorecfg.h
+%{_includedir}/jpeglib.h
+%{_includedir}/turbojpeg.h
+%dir %{_mandir}
+%dir %{_mandir}/man1
+%{_mandir}/man1/cjpeg.1*
+%{_mandir}/man1/djpeg.1*
+%{_mandir}/man1/jpegtran.1*
+%{_mandir}/man1/rdjpgcom.1*
+%{_mandir}/man1/wrjpgcom.1*
+%if "%{_prefix}" != "%{_datadir}"
+ %dir %{_datadir}
 %endif
-/opt/%{name}/%{__lib}/libjpeg.so.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@
-/opt/%{name}/%{__lib}/libjpeg.so.@SO_MAJOR_VERSION@
-/opt/%{name}/%{__lib}/libjpeg.so
-/opt/%{name}/%{__lib}/libjpeg.a
-/opt/%{name}/%{__lib}/libturbojpeg.a
-/usr/%{__lib}/libturbojpeg.so
-/usr/%{__lib}/libturbojpeg.a
-/usr/include/turbojpeg.h
-%dir /opt/%{name}/include
-/opt/%{name}/include/jconfig.h
-/opt/%{name}/include/jerror.h
-/opt/%{name}/include/jmorecfg.h
-/opt/%{name}/include/jpeglib.h
-/opt/%{name}/include/turbojpeg.h
-%dir /opt/%{name}/man
-%dir /opt/%{name}/man/man1
-/opt/%{name}/man/man1/cjpeg.1*
-/opt/%{name}/man/man1/djpeg.1*
-/opt/%{name}/man/man1/jpegtran.1*
-/opt/%{name}/man/man1/rdjpgcom.1*
-/opt/%{name}/man/man1/wrjpgcom.1*
 @JAVA_RPM_CONTENTS_1@
 @JAVA_RPM_CONTENTS_2@
 
index 32cecdd..f303546 100755 (executable)
@@ -15,21 +15,27 @@ onexit()
        fi
 }
 
-PACKAGE_NAME=@PACKAGE_NAME@
+PACKAGE_NAME=@PKGNAME@
 VERSION=@VERSION@
+BUILD=@BUILD@
 SRCDIR=@abs_top_srcdir@
 
+PREFIX=%{__prefix}
+DOCDIR=%{__docdir}
+LIBDIR=%{__libdir}
+
 umask 022
-rm -f $PACKAGE_NAME-$VERSION-cygwin.tar.bz2
+rm -f $PACKAGE_NAME-$VERSION-$BUILD.tar.bz2
 TMPDIR=`mktemp -d /tmp/ljtbuild.XXXXXX`
 __PWD=`pwd`
-make install DESTDIR=$TMPDIR/pkg mandir=/opt/$PACKAGE_NAME/man \
-       docdir=/usr/share/doc/$PACKAGE_NAME-$VERSION \
+make install DESTDIR=$TMPDIR/pkg docdir=/usr/share/doc/$PACKAGE_NAME-$VERSION \
        exampledir=/usr/share/doc/$PACKAGE_NAME-$VERSION
-rm $TMPDIR/pkg/opt/$PACKAGE_NAME/lib/*.la
-ln -fs lib $TMPDIR/pkg/opt/$PACKAGE_NAME/lib32
+rm $TMPDIR/pkg$LIBDIR/*.la
+if [ "$PREFIX" = "/opt/libjpeg-turbo" -a "$DOCDIR" = "/opt/libjpeg-turbo/doc" ]; then
+       ln -fs /usr/share/doc/$PACKAGE_NAME-$VERSION $TMPDIR/pkg$DOCDIR
+fi
 cd $TMPDIR/pkg
-tar cfj ../$PACKAGE_NAME-$VERSION-cygwin.tar.bz2 *
+tar cfj ../$PACKAGE_NAME-$VERSION-$BUILD.tar.bz2 *
 cd $__PWD
 mv $TMPDIR/*.tar.bz2 .
 
index 6d081bb..fa6bc19 100644 (file)
@@ -23,9 +23,6 @@ makedeb()
        if [ $SUPPLEMENT = 1 ]; then
                PACKAGE_NAME=$PACKAGE_NAME\32
                DEBARCH=amd64
-               __LIB=lib32
-       else
-               __LIB=lib
        fi
 
        umask 022
@@ -36,48 +33,34 @@ makedeb()
                | sed s/{__VERSION}/$VERSION/g | sed s/{__BUILD}/$BUILD/g \
                | sed s/{__ARCH}/$DEBARCH/g > $TMPDIR/DEBIAN/control)
 
-       make install prefix=$TMPDIR/opt/$DIRNAME libdir=$TMPDIR/opt/$DIRNAME/$__LIB \
-               mandir=$TMPDIR/opt/$DIRNAME/man \
-               docdir=$TMPDIR/usr/share/doc/$DIRNAME-$VERSION \
-               exampledir=$TMPDIR/usr/share/doc/$DIRNAME-$VERSION
-       rm -f $TMPDIR/opt/$DIRNAME/$__LIB/*.la
-
        if [ $SUPPLEMENT = 1 ]; then
-               rm -rf $TMPDIR/opt/$DIRNAME/include
-               rm -rf $TMPDIR/opt/$DIRNAME/man
-               rm -rf $TMPDIR/opt/$DIRNAME/bin
-               rm -rf $TMPDIR/opt/$DIRNAME/classes
-               rm -rf $TMPDIR/usr
-       fi
-
-       mkdir -p $TMPDIR/usr/$__LIB
-       mv $TMPDIR/opt/$DIRNAME/$__LIB/libturbojpeg.* $TMPDIR/usr/$__LIB
-       ln -fs /usr/$__LIB/libturbojpeg.a $TMPDIR/opt/$DIRNAME/$__LIB/
-       /sbin/ldconfig -n $TMPDIR/opt/$DIRNAME/$__LIB
-       /sbin/ldconfig -n $TMPDIR/usr/$__LIB
-
-       if [ ! $SUPPLEMENT = 1 ]; then
-               if [ "$DEBARCH" = "amd64" ]; then
-                       ln -fs lib $TMPDIR/opt/$DIRNAME/lib64
-               else
-                       if [ ! "$__LIB" = "lib32" ]; then
-                               ln -fs lib $TMPDIR/opt/$DIRNAME/lib32
-                       fi
+               make install DESTDIR=$TMPDIR bindir=/dummy/bin datadir=/dummy/data \
+                       docdir=/dummy/doc includedir=/dummy/include mandir=/dummy/man
+               rm -f $TMPDIR$LIBDIR/*.la
+               rm -rf $TMPDIR/dummy
+       else
+               make install DESTDIR=$TMPDIR docdir=/usr/share/doc/$DIRNAME-$VERSION \
+                       exampledir=/usr/share/doc/$DIRNAME-$VERSION
+               rm -f $TMPDIR$LIBDIR/*.la
+               if [ "$PREFIX" = "/opt/libjpeg-turbo" -a "$DOCDIR" = "/opt/libjpeg-turbo/doc" ]; then
+                       ln -fs /usr/share/doc/$DIRNAME-$VERSION $TMPDIR$DOCDIR
                fi
-               mkdir -p $TMPDIR/usr/include
-               mv $TMPDIR/opt/$DIRNAME/include/turbojpeg.h $TMPDIR/usr/include
-               ln -fs /usr/include/turbojpeg.h $TMPDIR/opt/$DIRNAME/include/
        fi
 
+       /sbin/ldconfig -n $TMPDIR$LIBDIR
+
        sudo chown -Rh root:root $TMPDIR/*
        dpkg -b $TMPDIR $PACKAGE_NAME\_$VERSION\_$DEBARCH.deb
 }
 
-PACKAGE_NAME=@PACKAGE_NAME@
+PACKAGE_NAME=@PKGNAME@
 VERSION=@VERSION@
 BUILD=@BUILD@
 DEBARCH=@DEBARCH@
 SRCDIR=@abs_top_srcdir@
+PREFIX=%{__prefix}
+DOCDIR=%{__docdir}
+LIBDIR=%{__libdir}
 
 makedeb 0
 if [ "$DEBARCH" = "i386" ]; then makedeb 1; fi
index 7b43aa3..65abdef 100644 (file)
@@ -17,11 +17,11 @@ onexit()
 
 usage()
 {
-       echo "$0 [-build32 [32-bit build dir]] [-buildarmv6 [ARM v6 build dir]] [-buildarmv7 [ARM v7 build dir]]"
+       echo "$0 [-build32 [32-bit build dir]] [-buildarmv6 [ARM v6 build dir]] [-buildarmv7 [ARM v7 build dir]] [-buildarmv7s [ARM v7s build dir]]"
        exit 1
 }
 
-PACKAGE_NAME=@PACKAGE_NAME@
+PACKAGE_NAME=@PKGNAME@
 VERSION=@VERSION@
 BUILD=@BUILD@
 SRCDIR=@abs_top_srcdir@
@@ -31,7 +31,15 @@ BUILDDIRARMV6=@abs_top_srcdir@/iosarmv6
 BUILDARMV6=0
 BUILDDIRARMV7=@abs_top_srcdir@/iosarmv7
 BUILDARMV7=0
+BUILDDIRARMV7S=@abs_top_srcdir@/iosarmv7s
+BUILDARMV7S=0
 WITH_JAVA=@WITH_JAVA@
+
+PREFIX=%{__prefix}
+BINDIR=%{__bindir}
+DOCDIR=%{__docdir}
+LIBDIR=%{__libdir}
+
 while [ $# -gt 0 ]; do
        case $1 in
        -h*)             usage 0                   ;;
@@ -59,6 +67,14 @@ while [ $# -gt 0 ]; do
                        fi
                fi
                ;;
+       -buildarmv7s)
+               BUILDARMV7S=1
+               if [ $# -gt 1 ]; then
+                       if [[ ! "$2" =~ -.* ]]; then
+                               BUILDDIRARMV7S=$2;  shift
+                       fi
+               fi
+               ;;
        esac
        shift
 done
@@ -72,15 +88,13 @@ umask 022
 TMPDIR=`mktemp -d /tmp/$PACKAGE_NAME-build.XXXXXX`
 PKGROOT=$TMPDIR/pkg/Package_Root
 mkdir -p $PKGROOT
-mkdir -p $PKGROOT/opt/$PACKAGE_NAME/bin
-make install DESTDIR=$PKGROOT mandir=/opt/$PACKAGE_NAME/man \
-       docdir=/Library/Documentation/$PACKAGE_NAME \
+make install DESTDIR=$PKGROOT docdir=/Library/Documentation/$PACKAGE_NAME \
        exampledir=/Library/Documentation/$PACKAGE_NAME
-rm -f $PKGROOT/opt/$PACKAGE_NAME/lib/*.la
-mkdir -p $PKGROOT/usr/lib
-mv $PKGROOT/opt/$PACKAGE_NAME/lib/libturbojpeg.* $PKGROOT/usr/lib
-mkdir -p $PKGROOT/usr/include
-mv $PKGROOT/opt/$PACKAGE_NAME/include/turbojpeg.h $PKGROOT/usr/include
+rm -f $PKGROOT$LIBDIR/*.la
+
+if [ "$PREFIX" = "/opt/libjpeg-turbo" -a "$DOCDIR" = "/opt/libjpeg-turbo/doc" ]; then
+       ln -fs /Library/Documentation/$PACKAGE_NAME $PKGROOT$DOCDIR
+fi
 
 if [ $BUILD32 = 1 ]; then
        if [ ! -d $BUILDDIR32 ]; then
@@ -95,55 +109,55 @@ if [ $BUILD32 = 1 ]; then
        pushd $BUILDDIR32
        make install DESTDIR=$TMPDIR/dist.x86
        popd
-       if [ ! -h $TMPDIR/dist.x86/opt/$PACKAGE_NAME/lib/libjpeg.@SO_MAJOR_VERSION@.dylib -a \
-               ! -h $PKGROOT/opt/$PACKAGE_NAME/lib/libjpeg.@SO_MAJOR_VERSION@.dylib ]; then
+       if [ ! -h $TMPDIR/dist.x86/$LIBDIR/libjpeg.@SO_MAJOR_VERSION@.dylib -a \
+               ! -h $PKGROOT/$LIBDIR/libjpeg.@SO_MAJOR_VERSION@.dylib ]; then
                lipo -create \
-                       -arch i386 $TMPDIR/dist.x86/opt/$PACKAGE_NAME/lib/libjpeg.@SO_MAJOR_VERSION@.dylib \
-                       -arch x86_64 $PKGROOT/opt/$PACKAGE_NAME/lib/libjpeg.@SO_MAJOR_VERSION@.dylib \
-                       -output $PKGROOT/opt/$PACKAGE_NAME/lib/libjpeg.@SO_MAJOR_VERSION@.dylib
-       elif [ ! -h $TMPDIR/dist.x86/opt/$PACKAGE_NAME/lib/libjpeg.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@.dylib -a \
-               ! -h $PKGROOT/opt/$PACKAGE_NAME/lib/libjpeg.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@.dylib ]; then
+                       -arch i386 $TMPDIR/dist.x86/$LIBDIR/libjpeg.@SO_MAJOR_VERSION@.dylib \
+                       -arch x86_64 $PKGROOT/$LIBDIR/libjpeg.@SO_MAJOR_VERSION@.dylib \
+                       -output $PKGROOT/$LIBDIR/libjpeg.@SO_MAJOR_VERSION@.dylib
+       elif [ ! -h $TMPDIR/dist.x86/$LIBDIR/libjpeg.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@.dylib -a \
+               ! -h $PKGROOT/$LIBDIR/libjpeg.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@.dylib ]; then
                lipo -create \
-                       -arch i386 $TMPDIR/dist.x86/opt/$PACKAGE_NAME/lib/libjpeg.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@.dylib \
-                       -arch x86_64 $PKGROOT/opt/$PACKAGE_NAME/lib/libjpeg.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@.dylib \
-                       -output $PKGROOT/opt/$PACKAGE_NAME/lib/libjpeg.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@.dylib
+                       -arch i386 $TMPDIR/dist.x86/$LIBDIR/libjpeg.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@.dylib \
+                       -arch x86_64 $PKGROOT/$LIBDIR/libjpeg.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@.dylib \
+                       -output $PKGROOT/$LIBDIR/libjpeg.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@.dylib
        fi
        lipo -create \
-               -arch i386 $TMPDIR/dist.x86/opt/$PACKAGE_NAME/lib/libjpeg.a \
-               -arch x86_64 $PKGROOT/opt/$PACKAGE_NAME/lib/libjpeg.a \
-               -output $PKGROOT/opt/$PACKAGE_NAME/lib/libjpeg.a
+               -arch i386 $TMPDIR/dist.x86/$LIBDIR/libjpeg.a \
+               -arch x86_64 $PKGROOT/$LIBDIR/libjpeg.a \
+               -output $PKGROOT/$LIBDIR/libjpeg.a
        lipo -create \
-               -arch i386 $TMPDIR/dist.x86/opt/$PACKAGE_NAME/lib/libturbojpeg.dylib \
-               -arch x86_64 $PKGROOT/usr/lib/libturbojpeg.dylib \
-               -output $PKGROOT/usr/lib/libturbojpeg.dylib
+               -arch i386 $TMPDIR/dist.x86/$LIBDIR/libturbojpeg.0.dylib \
+               -arch x86_64 $PKGROOT/$LIBDIR/libturbojpeg.0.dylib \
+               -output $PKGROOT/$LIBDIR/libturbojpeg.0.dylib
        lipo -create \
-               -arch i386 $TMPDIR/dist.x86/opt/$PACKAGE_NAME/lib/libturbojpeg.a \
-               -arch x86_64 $PKGROOT/usr/lib/libturbojpeg.a \
-               -output $PKGROOT/usr/lib/libturbojpeg.a
+               -arch i386 $TMPDIR/dist.x86/$LIBDIR/libturbojpeg.a \
+               -arch x86_64 $PKGROOT/$LIBDIR/libturbojpeg.a \
+               -output $PKGROOT/$LIBDIR/libturbojpeg.a
        lipo -create \
-               -arch i386 $TMPDIR/dist.x86/opt/$PACKAGE_NAME/bin/cjpeg \
-               -arch x86_64 $PKGROOT/opt/$PACKAGE_NAME/bin/cjpeg \
-               -output $PKGROOT/opt/$PACKAGE_NAME/bin/cjpeg
+               -arch i386 $TMPDIR/dist.x86/$BINDIR/cjpeg \
+               -arch x86_64 $PKGROOT/$BINDIR/cjpeg \
+               -output $PKGROOT/$BINDIR/cjpeg
        lipo -create \
-               -arch i386 $TMPDIR/dist.x86/opt/$PACKAGE_NAME/bin/djpeg \
-               -arch x86_64 $PKGROOT/opt/$PACKAGE_NAME/bin/djpeg \
-               -output $PKGROOT/opt/$PACKAGE_NAME/bin/djpeg
+               -arch i386 $TMPDIR/dist.x86/$BINDIR/djpeg \
+               -arch x86_64 $PKGROOT/$BINDIR/djpeg \
+               -output $PKGROOT/$BINDIR/djpeg
        lipo -create \
-               -arch i386 $TMPDIR/dist.x86/opt/$PACKAGE_NAME/bin/jpegtran \
-               -arch x86_64 $PKGROOT/opt/$PACKAGE_NAME/bin/jpegtran \
-               -output $PKGROOT/opt/$PACKAGE_NAME/bin/jpegtran
+               -arch i386 $TMPDIR/dist.x86/$BINDIR/jpegtran \
+               -arch x86_64 $PKGROOT/$BINDIR/jpegtran \
+               -output $PKGROOT/$BINDIR/jpegtran
        lipo -create \
-               -arch i386 $TMPDIR/dist.x86/opt/$PACKAGE_NAME/bin/tjbench \
-               -arch x86_64 $PKGROOT/opt/$PACKAGE_NAME/bin/tjbench \
-               -output $PKGROOT/opt/$PACKAGE_NAME/bin/tjbench
+               -arch i386 $TMPDIR/dist.x86/$BINDIR/tjbench \
+               -arch x86_64 $PKGROOT/$BINDIR/tjbench \
+               -output $PKGROOT/$BINDIR/tjbench
        lipo -create \
-               -arch i386 $TMPDIR/dist.x86/opt/$PACKAGE_NAME/bin/rdjpgcom \
-               -arch x86_64 $PKGROOT/opt/$PACKAGE_NAME/bin/rdjpgcom \
-               -output $PKGROOT/opt/$PACKAGE_NAME/bin/rdjpgcom
+               -arch i386 $TMPDIR/dist.x86/$BINDIR/rdjpgcom \
+               -arch x86_64 $PKGROOT/$BINDIR/rdjpgcom \
+               -output $PKGROOT/$BINDIR/rdjpgcom
        lipo -create \
-               -arch i386 $TMPDIR/dist.x86/opt/$PACKAGE_NAME/bin/wrjpgcom \
-               -arch x86_64 $PKGROOT/opt/$PACKAGE_NAME/bin/wrjpgcom \
-               -output $PKGROOT/opt/$PACKAGE_NAME/bin/wrjpgcom
+               -arch i386 $TMPDIR/dist.x86/$BINDIR/wrjpgcom \
+               -arch x86_64 $PKGROOT/$BINDIR/wrjpgcom \
+               -output $PKGROOT/$BINDIR/wrjpgcom
 
 fi
 
@@ -161,13 +175,13 @@ if [ $BUILDARMV6 = 1 ]; then
        make install DESTDIR=$TMPDIR/dist.armv6
        popd
        lipo -create \
-               $PKGROOT/opt/$PACKAGE_NAME/lib/libjpeg.a \
-               -arch arm $TMPDIR/dist.armv6/opt/$PACKAGE_NAME/lib/libjpeg.a \
-               -output $PKGROOT/opt/$PACKAGE_NAME/lib/libjpeg.a
+               $PKGROOT/$LIBDIR/libjpeg.a \
+               -arch arm $TMPDIR/dist.armv6/$LIBDIR/libjpeg.a \
+               -output $PKGROOT/$LIBDIR/libjpeg.a
        lipo -create \
-               $PKGROOT/usr/lib/libturbojpeg.a \
-               -arch arm $TMPDIR/dist.armv6/opt/$PACKAGE_NAME/lib/libturbojpeg.a \
-               -output $PKGROOT/usr/lib/libturbojpeg.a
+               $PKGROOT/$LIBDIR/libturbojpeg.a \
+               -arch arm $TMPDIR/dist.armv6/$LIBDIR/libturbojpeg.a \
+               -output $PKGROOT/$LIBDIR/libturbojpeg.a
 fi
 
 if [ $BUILDARMV7 = 1 ]; then
@@ -184,28 +198,51 @@ if [ $BUILDARMV7 = 1 ]; then
        make install DESTDIR=$TMPDIR/dist.armv7
        popd
        lipo -create \
-               $PKGROOT/opt/$PACKAGE_NAME/lib/libjpeg.a \
-               -arch arm $TMPDIR/dist.armv7/opt/$PACKAGE_NAME/lib/libjpeg.a \
-               -output $PKGROOT/opt/$PACKAGE_NAME/lib/libjpeg.a
+               $PKGROOT/$LIBDIR/libjpeg.a \
+               -arch arm $TMPDIR/dist.armv7/$LIBDIR/libjpeg.a \
+               -output $PKGROOT/$LIBDIR/libjpeg.a
        lipo -create \
-               $PKGROOT/usr/lib/libturbojpeg.a \
-               -arch arm $TMPDIR/dist.armv7/opt/$PACKAGE_NAME/lib/libturbojpeg.a \
-               -output $PKGROOT/usr/lib/libturbojpeg.a
+               $PKGROOT/$LIBDIR/libturbojpeg.a \
+               -arch arm $TMPDIR/dist.armv7/$LIBDIR/libturbojpeg.a \
+               -output $PKGROOT/$LIBDIR/libturbojpeg.a
 fi
 
-install_name_tool -id /opt/$PACKAGE_NAME/lib/libjpeg.@SO_MAJOR_VERSION@.dylib $PKGROOT/opt/$PACKAGE_NAME/lib/libjpeg.@SO_MAJOR_VERSION@.dylib
-install_name_tool -id libturbojpeg.dylib $PKGROOT/usr/lib/libturbojpeg.dylib
+if [ $BUILDARMV7S = 1 ]; then
+       if [ ! -d $BUILDDIRARMV7S ]; then
+               echo ERROR: ARM v7s build directory $BUILDDIRARMV7S does not exist
+               exit 1
+       fi
+       if [ ! -f $BUILDDIRARMV7S/Makefile ]; then
+               echo ERROR: ARM v7s build directory $BUILDDIRARMV7S is not configured
+               exit 1
+       fi
+       mkdir -p $TMPDIR/dist.armv7s
+       pushd $BUILDDIRARMV7S
+       make install DESTDIR=$TMPDIR/dist.armv7s
+       popd
+       lipo -create \
+               $PKGROOT/$LIBDIR/libjpeg.a \
+               -arch arm $TMPDIR/dist.armv7s/$LIBDIR/libjpeg.a \
+               -output $PKGROOT/$LIBDIR/libjpeg.a
+       lipo -create \
+               $PKGROOT/$LIBDIR/libturbojpeg.a \
+               -arch arm $TMPDIR/dist.armv7s/$LIBDIR/libturbojpeg.a \
+               -output $PKGROOT/$LIBDIR/libturbojpeg.a
+fi
+
+install_name_tool -id $LIBDIR/libjpeg.@SO_MAJOR_VERSION@.dylib $PKGROOT/$LIBDIR/libjpeg.@SO_MAJOR_VERSION@.dylib
+install_name_tool -id $LIBDIR/libturbojpeg.0.dylib $PKGROOT/$LIBDIR/libturbojpeg.0.dylib
 
-ln -fs /usr/include/turbojpeg.h $PKGROOT/opt/$PACKAGE_NAME/include/
-ln -fs /usr/lib/libturbojpeg.a $PKGROOT/opt/$PACKAGE_NAME/lib/
 if [ $WITH_JAVA = 1 ]; then
-       ln -fs libturbojpeg.dylib $PKGROOT/usr/lib/libturbojpeg.jnilib
-fi
-if [ ! -h $PKGROOT/opt/$PACKAGE_NAME/lib32 ]; then
-       ln -fs lib $PKGROOT/opt/$PACKAGE_NAME/lib32
+       ln -fs libturbojpeg.0.dylib $PKGROOT/$LIBDIR/libturbojpeg.jnilib
 fi
-if [ ! -h $PKGROOT/opt/$PACKAGE_NAME/lib64 ]; then
-       ln -fs lib $PKGROOT/opt/$PACKAGE_NAME/lib64
+if [ "$PREFIX" = "/opt/libjpeg-turbo" -a "$LIBDIR" = "/opt/libjpeg-turbo/lib" ]; then
+       if [ ! -h $PKGROOT/$PREFIX/lib32 ]; then
+               ln -fs lib $PKGROOT/$PREFIX/lib32
+       fi
+       if [ ! -h $PKGROOT/$PREFIX/lib64 ]; then
+               ln -fs lib $PKGROOT/$PREFIX/lib64
+       fi
 fi
 
 chmod 1775 $PKGROOT/Library
@@ -214,10 +251,9 @@ mkdir -p $TMPDIR/pkg/Resources
 
 cp pkgscripts/Description.plist $TMPDIR/pkg/
 cp pkgscripts/Info.plist $TMPDIR/pkg/
-install -m 755 pkgscripts/uninstall $PKGROOT/opt/$PACKAGE_NAME/bin/
+install -m 755 pkgscripts/uninstall $PKGROOT/$BINDIR/
 
-sudo chown -R root:admin $PKGROOT 
-sudo chown -R root:0 $PKGROOT/usr 
+sudo chown -R root:admin $PKGROOT
 cp $SRCDIR/release/License.rtf $SRCDIR/release/Welcome.rtf $SRCDIR/release/ReadMe.rtf $TMPDIR/pkg/Resources/ 
 
 mkdir $TMPDIR/dmg
diff --git a/release/makesunpkg.in b/release/makesunpkg.in
deleted file mode 100644 (file)
index 7cf36a8..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-#!/bin/sh
-
-set -u
-set -e
-trap onexit INT
-trap onexit TERM
-trap onexit EXIT
-
-TMPDIR=
-
-onexit()
-{
-       if [ ! "$TMPDIR" = "" ]; then
-               rm -rf $TMPDIR
-       fi
-}
-
-usage()
-{
-       echo "$0 [combined [32-bit build dir.]]"
-       exit 1
-}
-
-COMBINED=0
-
-PACKAGE_NAME=@PACKAGE_NAME@
-VERSION=@VERSION@
-BUILD=@BUILD@
-PKGARCH=@DEBARCH@
-SRCDIR=@abs_top_srcdir@
-BUILDDIR32=@abs_top_srcdir@/solx86
-WITH_JAVA=@WITH_JAVA@
-if [ $# -gt 0 ]; then
-       if [ "$1" = "combined" ]; then
-               COMBINED=1
-               if [ $# -gt 1 ]; then   BUILDDIR32=$2; fi
-       fi
-fi
-
-umask 022
-TMPDIR=`mktemp -d /tmp/$PACKAGE_NAME-build.XXXXXX`
-rm -f $PACKAGE_NAME.pkg.bz2
-cp $SRCDIR/release/copyright $TMPDIR
-touch $TMPDIR/depend
-cp pkgscripts/pkginfo $TMPDIR/pkginfo 
-
-if [ "$PKGARCH" = "i386" ]; then
-       __LIB=lib
-else
-       __LIB=lib/$PKGARCH
-fi
-
-if [ $COMBINED = 1 ]; then
-       if [ ! -d $BUILDDIR32 ]; then
-               echo ERROR: 32-bit build directory $BUILDDIR32 does not exist
-               exit 1
-       fi
-       if [ ! -f $BUILDDIR32/Makefile ]; then
-               echo ERROR: 32-bit build directory $BUILDDIR32 is not configured
-               exit 1
-       fi
-       PWD=`pwd`
-       cd $BUILDDIR32
-       make install DESTDIR=$TMPDIR mandir=/opt/$PACKAGE_NAME/man AM_MAKEFLAGS="mandir=/opt/$PACKAGE_NAME/man"
-       cd $PWD
-fi
-# This mess is to work around a bug in /usr/ccs/bin/make
-make install DESTDIR=$TMPDIR libdir=/opt/$PACKAGE_NAME/$__LIB \
-       mandir=/opt/$PACKAGE_NAME/man docdir=/opt/$PACKAGE_NAME/doc \
-       exampledir=/opt/$PACKAGE_NAME/doc \
-       AM_MAKEFLAGS="libdir=/opt/$PACKAGE_NAME/$__LIB mandir=/opt/$PACKAGE_NAME/man docdir=/opt/$PACKAGE_NAME/doc exampledir=/opt/$PACKAGE_NAME/doc"
-rm -f $TMPDIR/opt/$PACKAGE_NAME/$__LIB/*.la
-
-cat >$TMPDIR/proto <<EOF
-i copyright
-i depend
-i pkginfo
-d none $PACKAGE_NAME 0755 root bin
-d none $PACKAGE_NAME/bin 0755 root bin
-f none $PACKAGE_NAME/bin/cjpeg 0755 root bin
-f none $PACKAGE_NAME/bin/djpeg 0755 root bin
-f none $PACKAGE_NAME/bin/jpegtran 0755 root bin
-f none $PACKAGE_NAME/bin/tjbench 0755 root bin
-f none $PACKAGE_NAME/bin/rdjpgcom 0755 root bin
-f none $PACKAGE_NAME/bin/wrjpgcom 0755 root bin
-d none $PACKAGE_NAME/lib 0755 root bin
-EOF
-if [ $COMBINED = 1 ]; then
-cat >>$TMPDIR/proto <<EOF
-f none $PACKAGE_NAME/lib/libjpeg.so.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@ 0755 root bin
-s none $PACKAGE_NAME/lib/libjpeg.so.@SO_MAJOR_VERSION@=libjpeg.so.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@
-s none $PACKAGE_NAME/lib/libjpeg.so=libjpeg.so.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@
-f none $PACKAGE_NAME/lib/libjpeg.a 0644 root bin
-f none $PACKAGE_NAME/lib/libturbojpeg.so 0755 root bin
-f none $PACKAGE_NAME/lib/libturbojpeg.a 0644 root bin
-EOF
-fi
-if [ "${__LIB}" != "lib" ]; then
-echo d none $PACKAGE_NAME/${__LIB} 0755 root bin >>$TMPDIR/proto
-echo s none $PACKAGE_NAME/lib64=${__LIB} >>$TMPDIR/proto
-echo s none $PACKAGE_NAME/lib/64=$PKGARCH >>$TMPDIR/proto
-fi
-cat >>$TMPDIR/proto <<EOF
-f none $PACKAGE_NAME/${__LIB}/libjpeg.so.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@ 0755 root bin
-s none $PACKAGE_NAME/${__LIB}/libjpeg.so.@SO_MAJOR_VERSION@=libjpeg.so.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@
-s none $PACKAGE_NAME/${__LIB}/libjpeg.so=libjpeg.so.@SO_MAJOR_VERSION@.0.@SO_MINOR_VERSION@
-f none $PACKAGE_NAME/${__LIB}/libjpeg.a 0644 root bin
-f none $PACKAGE_NAME/${__LIB}/libturbojpeg.so 0755 root bin
-f none $PACKAGE_NAME/${__LIB}/libturbojpeg.a 0644 root bin
-s none $PACKAGE_NAME/lib32=lib
-d none $PACKAGE_NAME/man 0755 root bin
-d none $PACKAGE_NAME/man/man1 0755 root bin
-d none $PACKAGE_NAME/man/man1/cjpeg.1 0644 root bin
-d none $PACKAGE_NAME/man/man1/djpeg.1 0644 root bin
-d none $PACKAGE_NAME/man/man1/jpegtran.1 0644 root bin
-d none $PACKAGE_NAME/man/man1/rdjpgcom.1 0644 root bin
-d none $PACKAGE_NAME/man/man1/wrjpgcom.1 0644 root bin
-d none $PACKAGE_NAME/include 0755 root bin
-f none $PACKAGE_NAME/include/jconfig.h 0644 root bin
-f none $PACKAGE_NAME/include/jerror.h 0644 root bin
-f none $PACKAGE_NAME/include/jmorecfg.h 0644 root bin
-f none $PACKAGE_NAME/include/jpeglib.h 0644 root bin
-f none $PACKAGE_NAME/include/turbojpeg.h 0644 root bin
-d none $PACKAGE_NAME/doc 0755 root bin
-f none $PACKAGE_NAME/doc/README 0644 root bin
-f none $PACKAGE_NAME/doc/README-turbo.txt 0644 root bin
-f none $PACKAGE_NAME/doc/example.c 0644 root bin
-f none $PACKAGE_NAME/doc/libjpeg.txt 0644 root bin
-f none $PACKAGE_NAME/doc/structure.txt 0644 root bin
-f none $PACKAGE_NAME/doc/usage.txt 0644 root bin
-f none $PACKAGE_NAME/doc/wizard.txt 0644 root bin
-EOF
-if [ $WITH_JAVA = 1 ]; then
-echo d none $PACKAGE_NAME/classes 0755 root bin >>$TMPDIR/proto
-echo f none $PACKAGE_NAME/classes/turbojpeg.jar 0644 root bin >>$TMPDIR/proto
-fi
-
-pkgmk -o -r $TMPDIR/opt -d $TMPDIR -a i386 -f $TMPDIR/proto
-pkgtrans -s $TMPDIR $TMPDIR/$PACKAGE_NAME-$VERSION.pkg $PACKAGE_NAME
-bzip2 $TMPDIR/$PACKAGE_NAME-$VERSION.pkg
-cp $TMPDIR/$PACKAGE_NAME-$VERSION.pkg.bz2 . 
-
-exit
diff --git a/release/pkginfo.in b/release/pkginfo.in
deleted file mode 100644 (file)
index 772ad0f..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-ARCH=i386
-PKG=@PACKAGE_NAME@
-NAME=@PACKAGE_NAME@ SDK and run time libraries
-VERSION=@VERSION@,REV=@BUILD@
-SUNW_PKGVERS=1.0
-DESC=A SIMD-accelerated JPEG codec that provides both the libjpeg and TurboJPEG APIs
-VENDOR=The libjpeg-turbo Project
-HOTLINE=http://www.libjpeg-turbo.org
-EMAIL=information@libjpeg-turbo.org
-MAXINST=1
-CATEGORY=application
-BASEDIR=/opt
-CLASSES=none
-SUNW_PKG_ALLZONES=true
-SUNW_PKG_HOLLOW=false
-SUNW_PKG_THISZONE=false
index 2e4598c..f167bbd 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C)2009-2011 D. R. Commander.  All Rights Reserved.
+# Copyright (C)2009-2011, 2013 D. R. Commander.  All Rights Reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
@@ -31,7 +31,7 @@ if [ ! "`id -u`" = "0" ]; then
        exit -1
 fi
 
-PACKAGE=@PACKAGE_NAME@
+PACKAGE=@PKGNAME@
 MACPACKAGE=com.$PACKAGE.$PACKAGE
 RECEIPT=/Library/Receipts/$PACKAGE.pkg
 
@@ -56,27 +56,46 @@ done
 popd
 
 echo Removing package directories ...
-if [ -d /opt/$PACKAGE/bin ]; then
-       rmdir /opt/$PACKAGE/bin 2>&1 || EXITSTATUS=-1
+PREFIX=%{__prefix}
+BINDIR=%{__bindir}
+DATADIR=%{__datadir}
+INCLUDEDIR=%{__includedir}
+LIBDIR=%{__libdir}
+MANDIR=%{__mandir}
+
+if [ -d $BINDIR ]; then
+       rmdir $BINDIR 2>&1 || EXITSTATUS=-1
+fi
+if [ -d $LIBDIR ]; then
+       rmdir $LIBDIR 2>&1 || EXITSTATUS=-1
+fi
+if [ -d $INCLUDEDIR ]; then
+       rmdir $INCLUDEDIR 2>&1 || EXITSTATUS=-1
+fi
+if [ "$PREFIX" = "/opt/libjpeg-turbo" -a "$LIBDIR" = "/opt/libjpeg-turbo/lib" ]; then
+       if [ -h $LIBDIR\32 ]; then
+               rm $LIBDIR\32 2>&1 || EXITSTATUS=-1
+       fi
+       if [ -h $LIBDIR\64 ]; then
+               rm $LIBDIR\64 2>&1 || EXITSTATUS=-1
+       fi
 fi
-if [ -d /opt/$PACKAGE/lib ]; then
-       rmdir /opt/$PACKAGE/lib 2>&1 || EXITSTATUS=-1
+if [ -d $MANDIR/man1 ]; then
+       rmdir $MANDIR/man1 2>&1 || EXITSTATUS=-1
 fi
-if [ -d /opt/$PACKAGE/include ]; then
-       rmdir /opt/$PACKAGE/include 2>&1 || EXITSTATUS=-1
+if [ -d $MANDIR ]; then
+       rmdir $MANDIR 2>&1 || EXITSTATUS=-1
 fi
-rm /opt/$PACKAGE/lib32 2>&1 || EXITSTATUS=-1
-rm /opt/$PACKAGE/lib64 2>&1 || EXITSTATUS=-1
-if [ -d /opt/$PACKAGE/man/man1 ]; then
-       rmdir /opt/$PACKAGE/man/man1 2>&1 || EXITSTATUS=-1
+if [ -d $DATADIR/classes ]; then
+       rmdir $DATADIR/classes 2>&1 || EXITSTATUS=-1
 fi
-if [ -d /opt/$PACKAGE/man ]; then
-       rmdir /opt/$PACKAGE/man 2>&1 || EXITSTATUS=-1
+if [ -d $DATADIR -a "$DATADIR" != "$PREFIX" ]; then
+       rmdir $DATADIR 2>&1 || EXITSTATUS=-1
 fi
-if [ -d /opt/$PACKAGE/classes ]; then
-       rmdir /opt/$PACKAGE/classes 2>&1 || EXITSTATUS=-1
+if [ "$PREFIX" = "/opt/libjpeg-turbo" -a -h "$PREFIX/doc" ]; then
+       rm $PREFIX/doc 2>&1 || EXITSTATUS=-1
 fi
-rmdir /opt/$PACKAGE 2>&1 || EXITSTATUS=-1
+rmdir $PREFIX 2>&1 || EXITSTATUS=-1
 rmdir /Library/Documentation/$PACKAGE 2>&1 || EXITSTATUS=-1
 
 if [ -d $RECEIPT ]; then
index 25ddbdf..cd3f268 100755 (executable)
@@ -24,8 +24,13 @@ if(WITH_SIMD)
   set_source_files_properties(${SIMD_OBJS} PROPERTIES GENERATED 1)
 endif()
 
-add_library(jpeg SHARED ${JPEG_SRCS} ${SIMD_OBJS}
-  ${CMAKE_SOURCE_DIR}/win/jpeg${DLL_VERSION}.def)
+if(WITH_MEM_SRCDST AND NOT WITH_JPEG8)
+  add_library(jpeg SHARED ${JPEG_SRCS} ${SIMD_OBJS}
+    ${CMAKE_SOURCE_DIR}/win/jpeg${DLL_VERSION}-memsrcdst.def)
+else()
+  add_library(jpeg SHARED ${JPEG_SRCS} ${SIMD_OBJS}
+    ${CMAKE_SOURCE_DIR}/win/jpeg${DLL_VERSION}.def)
+endif()
 set_target_properties(jpeg PROPERTIES SOVERSION ${DLL_VERSION}
   VERSION ${FULLVERSION})
 if(MSVC)
index 06bbae4..fc2ce99 100755 (executable)
@@ -43,16 +43,19 @@ foreach(file ${SIMD_BASENAMES})
   set(DEPFILE "")
   set(SIMD_SRC ${CMAKE_CURRENT_SOURCE_DIR}/${file}.asm)
   if(${file} MATCHES col)
-    set(DEPFILE ${SIMD_SRC})
+    set(DEPFILE ${file})
     string(REGEX REPLACE "col" "clr" DEPFILE ${DEPFILE})
+    set(DEPFILE ${CMAKE_CURRENT_SOURCE_DIR}/${DEPFILE}.asm)
   endif()
   if(${file} MATCHES mer)
-    set(DEPFILE ${SIMD_SRC})
+    set(DEPFILE ${file})
     string(REGEX REPLACE "mer" "mrg" DEPFILE ${DEPFILE})
+    set(DEPFILE ${CMAKE_CURRENT_SOURCE_DIR}/${DEPFILE}.asm)
   endif()
   if(${file} MATCHES gra)
-    set(DEPFILE ${SIMD_SRC})
+    set(DEPFILE ${file})
     string(REGEX REPLACE "gra" "gry" DEPFILE ${DEPFILE})
+    set(DEPFILE ${CMAKE_CURRENT_SOURCE_DIR}/${DEPFILE}.asm)
   endif()
   set(SIMD_OBJ ${OBJDIR}/${file}.obj)
   add_custom_command(OUTPUT ${SIMD_OBJ}
index c1dcba2..d40e96c 100644 (file)
@@ -171,9 +171,11 @@ LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
+LIBTOOL_CURRENT = @LIBTOOL_CURRENT@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MEM_SRCDST_FUNCTIONS = @MEM_SRCDST_FUNCTIONS@
 NAFLAGS = @NAFLAGS@
 NASM = @NASM@
 OBJEXT = @OBJEXT@
@@ -184,6 +186,7 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGNAME = @PKGNAME@
 RANLIB = @RANLIB@
 RPMARCH = @RPMARCH@
 RPM_CONFIG_ARGS = @RPM_CONFIG_ARGS@
@@ -195,6 +198,7 @@ SIMD_I386_FALSE = @SIMD_I386_FALSE@
 SIMD_I386_TRUE = @SIMD_I386_TRUE@
 SIMD_X86_64_FALSE = @SIMD_X86_64_FALSE@
 SIMD_X86_64_TRUE = @SIMD_X86_64_TRUE@
+SO_AGE = @SO_AGE@
 SO_MAJOR_VERSION = @SO_MAJOR_VERSION@
 SO_MINOR_VERSION = @SO_MINOR_VERSION@
 STRIP = @STRIP@
@@ -215,6 +219,8 @@ WITH_SIMD_FALSE = @WITH_SIMD_FALSE@
 WITH_SIMD_TRUE = @WITH_SIMD_TRUE@
 WITH_SSE_FLOAT_DCT_FALSE = @WITH_SSE_FLOAT_DCT_FALSE@
 WITH_SSE_FLOAT_DCT_TRUE = @WITH_SSE_FLOAT_DCT_TRUE@
+WITH_TURBOJPEG_FALSE = @WITH_TURBOJPEG_FALSE@
+WITH_TURBOJPEG_TRUE = @WITH_TURBOJPEG_TRUE@
 X86_64_FALSE = @X86_64_FALSE@
 X86_64_TRUE = @X86_64_TRUE@
 ac_ct_AR = @ac_ct_AR@
index 9b2e930..7d17c52 100644 (file)
@@ -2,7 +2,7 @@
 ; jdclrss2-64.asm - colorspace conversion (64-bit SSE2)
 ;
 ; Copyright 2009, 2012 Pierre Ossman <ossman@cendio.se> for Cendio AB
-; Copyright 2009 D. R. Commander
+; Copyright 2009, 2012 D. R. Commander
 ;
 ; Based on
 ; x86 SIMD extension for IJG JPEG library
@@ -288,7 +288,7 @@ EXTN(jsimd_ycc_rgb_convert_sse2):
        ; space.
        cmp     rcx, byte SIZEOF_MMWORD
        jb      short .column_st7
-       movq    MMWORD [rdi], xmmA
+       movq    XMM_MMWORD [rdi], xmmA
        add     rdi, byte SIZEOF_MMWORD
        sub     rcx, byte SIZEOF_MMWORD
        psrldq  xmmA, SIZEOF_MMWORD
@@ -297,7 +297,7 @@ EXTN(jsimd_ycc_rgb_convert_sse2):
        ; space.
        cmp     rcx, byte SIZEOF_DWORD
        jb      short .column_st3
-       movd    DWORD [rdi], xmmA
+       movd    XMM_DWORD [rdi], xmmA
        add     rdi, byte SIZEOF_DWORD
        sub     rcx, byte SIZEOF_DWORD
        psrldq  xmmA, SIZEOF_DWORD
@@ -407,7 +407,7 @@ EXTN(jsimd_ycc_rgb_convert_sse2):
        ; space.
        test    rcx, rcx
        jz      short .nextrow
-       movd    DWORD [rdi], xmmA
+       movd    XMM_DWORD [rdi], xmmA
 
 %endif ; RGB_PIXELSIZE ; ---------------
 
index d26a5bb..97754cb 100644 (file)
@@ -2,6 +2,7 @@
 ; jdclrss2.asm - colorspace conversion (SSE2)
 ;
 ; Copyright 2009, 2012 Pierre Ossman <ossman@cendio.se> for Cendio AB
+; Copyright 2012 D. R. Commander
 ;
 ; Based on
 ; x86 SIMD extension for IJG JPEG library
@@ -300,7 +301,7 @@ EXTN(jsimd_ycc_rgb_convert_sse2):
        ; space.
        cmp     ecx, byte SIZEOF_MMWORD
        jb      short .column_st7
-       movq    MMWORD [edi], xmmA
+       movq    XMM_MMWORD [edi], xmmA
        add     edi, byte SIZEOF_MMWORD
        sub     ecx, byte SIZEOF_MMWORD
        psrldq  xmmA, SIZEOF_MMWORD
@@ -309,7 +310,7 @@ EXTN(jsimd_ycc_rgb_convert_sse2):
        ; space.
        cmp     ecx, byte SIZEOF_DWORD
        jb      short .column_st3
-       movd    DWORD [edi], xmmA
+       movd    XMM_DWORD [edi], xmmA
        add     edi, byte SIZEOF_DWORD
        sub     ecx, byte SIZEOF_DWORD
        psrldq  xmmA, SIZEOF_DWORD
@@ -411,7 +412,7 @@ EXTN(jsimd_ycc_rgb_convert_sse2):
        ; space.
        cmp     ecx, byte SIZEOF_XMMWORD/8
        jb      short .column_st7
-       movq    MMWORD [edi], xmmA
+       movq    XMM_MMWORD [edi], xmmA
        add     edi, byte SIZEOF_XMMWORD/8*4
        sub     ecx, byte SIZEOF_XMMWORD/8
        psrldq  xmmA, SIZEOF_XMMWORD/8*4
@@ -420,7 +421,7 @@ EXTN(jsimd_ycc_rgb_convert_sse2):
        ; space.
        test    ecx, ecx
        jz      short .nextrow
-       movd    DWORD [edi], xmmA
+       movd    XMM_DWORD [edi], xmmA
 
 %endif ; RGB_PIXELSIZE ; ---------------
 
index 5d8fc46..ffbf6b2 100644 (file)
@@ -2,7 +2,7 @@
 ; jdmrgss2-64.asm - merged upsampling/color conversion (64-bit SSE2)
 ;
 ; Copyright 2009, 2012 Pierre Ossman <ossman@cendio.se> for Cendio AB
-; Copyright 2009 D. R. Commander
+; Copyright 2009, 2012 D. R. Commander
 ;
 ; Based on
 ; x86 SIMD extension for IJG JPEG library
@@ -292,7 +292,7 @@ EXTN(jsimd_h2v1_merged_upsample_sse2):
        ; space.
        cmp     rcx, byte SIZEOF_MMWORD
        jb      short .column_st7
-       movq    MMWORD [rdi], xmmA
+       movq    XMM_MMWORD [rdi], xmmA
        add     rdi, byte SIZEOF_MMWORD
        sub     rcx, byte SIZEOF_MMWORD
        psrldq  xmmA, SIZEOF_MMWORD
@@ -301,7 +301,7 @@ EXTN(jsimd_h2v1_merged_upsample_sse2):
        ; space.
        cmp     rcx, byte SIZEOF_DWORD
        jb      short .column_st3
-       movd    DWORD [rdi], xmmA
+       movd    XMM_DWORD [rdi], xmmA
        add     rdi, byte SIZEOF_DWORD
        sub     rcx, byte SIZEOF_DWORD
        psrldq  xmmA, SIZEOF_DWORD
@@ -405,7 +405,7 @@ EXTN(jsimd_h2v1_merged_upsample_sse2):
        ; space.
        cmp     rcx, byte SIZEOF_XMMWORD/8
        jb      short .column_st7
-       movq    MMWORD [rdi], xmmA
+       movq    XMM_MMWORD [rdi], xmmA
        add     rdi, byte SIZEOF_XMMWORD/8*4
        sub     rcx, byte SIZEOF_XMMWORD/8
        psrldq  xmmA, SIZEOF_XMMWORD/8*4
@@ -414,7 +414,7 @@ EXTN(jsimd_h2v1_merged_upsample_sse2):
        ; space.
        test    rcx, rcx
        jz      short .endcolumn
-       movd    DWORD [rdi], xmmA
+       movd    XMM_DWORD [rdi], xmmA
 
 %endif ; RGB_PIXELSIZE ; ---------------
 
index f190468..6494340 100644 (file)
@@ -2,6 +2,7 @@
 ; jdmrgss2.asm - merged upsampling/color conversion (SSE2)
 ;
 ; Copyright 2009, 2012 Pierre Ossman <ossman@cendio.se> for Cendio AB
+; Copyright 2012 D. R. Commander
 ;
 ; Based on
 ; x86 SIMD extension for IJG JPEG library
@@ -305,7 +306,7 @@ EXTN(jsimd_h2v1_merged_upsample_sse2):
        ; space.
        cmp     ecx, byte SIZEOF_MMWORD
        jb      short .column_st7
-       movq    MMWORD [edi], xmmA
+       movq    XMM_MMWORD [edi], xmmA
        add     edi, byte SIZEOF_MMWORD
        sub     ecx, byte SIZEOF_MMWORD
        psrldq  xmmA, SIZEOF_MMWORD
@@ -314,7 +315,7 @@ EXTN(jsimd_h2v1_merged_upsample_sse2):
        ; space.
        cmp     ecx, byte SIZEOF_DWORD
        jb      short .column_st3
-       movd    DWORD [edi], xmmA
+       movd    XMM_DWORD [edi], xmmA
        add     edi, byte SIZEOF_DWORD
        sub     ecx, byte SIZEOF_DWORD
        psrldq  xmmA, SIZEOF_DWORD
@@ -419,7 +420,7 @@ EXTN(jsimd_h2v1_merged_upsample_sse2):
        ; space.
        cmp     ecx, byte SIZEOF_XMMWORD/8
        jb      short .column_st7
-       movq    MMWORD [edi], xmmA
+       movq    XMM_MMWORD [edi], xmmA
        add     edi, byte SIZEOF_XMMWORD/8*4
        sub     ecx, byte SIZEOF_XMMWORD/8
        psrldq  xmmA, SIZEOF_XMMWORD/8*4
@@ -428,7 +429,7 @@ EXTN(jsimd_h2v1_merged_upsample_sse2):
        ; space.
        test    ecx, ecx
        jz      short .endcolumn
-       movd    DWORD [edi], xmmA
+       movd    XMM_DWORD [edi], xmmA
 
 %endif ; RGB_PIXELSIZE ; ---------------
 
index cae84df..bd717a4 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
  * Copyright 2009-2011 D. R. Commander
- * 
+ *
  * Based on the x86 SIMD extension for IJG JPEG library,
  * Copyright (C) 1999-2006, MIYASAKA Masaru.
  * For conditions of distribution and use, see copyright notice in jsimdext.inc
index 9962b8a..ac6c860 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * ARM NEON optimizations for libjpeg-turbo
+ * ARMv7 NEON optimizations for libjpeg-turbo
  *
  * Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies).
  * All rights reserved.
@@ -35,6 +35,7 @@
 
 #define RESPECT_STRICT_ALIGNMENT 1
 
+
 /*****************************************************************************/
 
 /* Supplementary macro for setting function attributes */
@@ -62,6 +63,7 @@ _\fname:
     vtrn.32 \x1, \x3
 .endm
 
+
 #define CENTERJSAMPLE 128
 
 /*****************************************************************************/
@@ -670,6 +672,7 @@ asm_function jsimd_idct_islow_neon
     .unreq          ROW7R
 .endfunc
 
+
 /*****************************************************************************/
 
 /*
@@ -894,6 +897,7 @@ asm_function jsimd_idct_ifast_neon
     .unreq          TMP4
 .endfunc
 
+
 /*****************************************************************************/
 
 /*
@@ -1108,6 +1112,7 @@ asm_function jsimd_idct_4x4_neon
 
 .purgem idct_helper
 
+
 /*****************************************************************************/
 
 /*
@@ -1262,6 +1267,7 @@ asm_function jsimd_idct_2x2_neon
 
 .purgem idct_helper
 
+
 /*****************************************************************************/
 
 /*
@@ -1561,6 +1567,7 @@ generate_jsimd_ycc_rgb_convert_neon extxrgb, 32, 1, 2, 3
 .purgem do_load
 .purgem do_store
 
+
 /*****************************************************************************/
 
 /*
@@ -1871,6 +1878,7 @@ generate_jsimd_rgb_ycc_convert_neon extxrgb, 32, 1, 2, 3
 .purgem do_load
 .purgem do_store
 
+
 /*****************************************************************************/
 
 /*
@@ -1934,6 +1942,7 @@ asm_function jsimd_convsamp_neon
     .unreq          TMP4
 .endfunc
 
+
 /*****************************************************************************/
 
 /*
@@ -2057,6 +2066,7 @@ asm_function jsimd_fdct_ifast_neon
     .unreq          TMP
 .endfunc
 
+
 /*****************************************************************************/
 
 /*
@@ -2158,6 +2168,7 @@ asm_function jsimd_quantize_neon
     .unreq          LOOP_COUNT
 .endfunc
 
+
 /*****************************************************************************/
 
 /*
index 6a9266b..12549e0 100644 (file)
@@ -1,7 +1,9 @@
 IJG JPEG LIBRARY:  SYSTEM ARCHITECTURE
 
 Copyright (C) 1991-2012, Thomas G. Lane, Guido Vollbeding.
-This file is part of the Independent JPEG Group's software.
+This file was part of the Independent JPEG Group's software.
+It was modified by The libjpeg-turbo Project to include only information
+relevant to libjpeg-turbo.
 For conditions of distribution and use, see the accompanying README file.
 
 
@@ -455,8 +457,8 @@ shown are:
   buffered by the coefficient controller have NOT been dequantized; we
   merge dequantization and inverse DCT into a single step for speed reasons.
   When scaled-down output is asked for, simplified DCT algorithms may be used
-  that emit only 1x1, 2x2, or 4x4 samples per DCT block, not the full 8x8.
-  Works on one DCT block at a time.
+  that emit fewer samples per DCT block, not the full 8x8.  Works on one DCT
+  block at a time.
 
 * Postprocessing controller: buffer controller for the color quantization
   input buffer, when quantization is in use.  (Without quantization, this
diff --git a/testimages/nightshot_iso_100.txt b/testimages/nightshot_iso_100.txt
new file mode 100644 (file)
index 0000000..9320886
--- /dev/null
@@ -0,0 +1,25 @@
+libjpeg-turbo note:  This image was extracted from the 8-bit nightshot_iso_100
+image.  The original can be downloaded at the link below.
+
+The New Image Compression Test Set - Jan 2008
+http://www.imagecompression.info/test_images
+
+The images historically used for compression research (lena, barbra, pepper etc...) have outlived their useful life and its about time they become a part of history only. They are too small, come from data sources too old and are available in only 8-bit precision.
+
+These images have been carefully selected to aid in image compression algorithm research and evaluation. These are photographic images chosen to come from a wide variety of sources and each one picked to stress different aspects of algorithms. Images are available in 8-bit, 16-bit and 16-bit linear variations, RGB and gray.
+
+Images are available without any prohibitive copyright restrictions.
+
+These images are (c) there respective owners. You are granted full redistribution and publication rights on these images provided:
+
+1. The origin of the pictures must not be misrepresented; you must not claim that you took the original pictures. If you use, publish or redistribute them, an acknowledgment would be appreciated but is not required.
+2. Altered versions must be plainly marked as such, and must not be misinterpreted as being the originals.
+3. No payment is required for distribution this material, it must be available freely under the conditions stated here. That is, it is prohibited to sell the material.
+4. This notice may not be removed or altered from any distribution.
+
+Acknowledgments: A lot of people contributed a lot of time and effort in making this test set possible. Thanks to everyone who voiced their opinion in any of the discussions online. Thanks to Axel Becker, Thomas Richter and Niels Fröhling for their extensive help in picking images, running all the various tests etc... Thanks to Pete Fraser, Tony Story, Wayne J. Cosshall, David Coffin, Bruce Lindbloom and raw.fotosite.pl for the images which make up this set.
+
+Sachin Garg [India]
+sachingarg@c10n.info
+
+www.sachingarg.com | www.c10n.info | www.imagecompression.info
diff --git a/testimages/testimg.bmp b/testimages/testimg.bmp
deleted file mode 100644 (file)
index 8603d15..0000000
Binary files a/testimages/testimg.bmp and /dev/null differ
diff --git a/testimages/testimgari.ppm b/testimages/testimgari.ppm
deleted file mode 100644 (file)
index d7b38f2..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-P6
-227 149
-255
-0/+0/+0/+10,21-32.52-63.83/83/83-83-:3-:3-:3+:3+72.72.61-61-61-61-72.72.50,50,50,50,50,50,50,50,4/+3.*3.*3.*2-)2-)2-)2-)1,(1,(1,(1,(1,(1,(1,(1,(.+$.+$/,%0-&1.'2/(2/(30)52+63,63,74-85.96/96/:70@:,A;-C=/F@2GA3IC5JC3JC3LE3LE3LC2LC2LD1ME2PE3PE3Q>/S@1c?/iE5\81C4\86H9\9cE4\9eG6´F7µG8¿E8ÁG:ÇG<ÈH=ÊG?ËH@êCKëDLëDKëDKíCFìBEò>Añ=@÷:>ö9=ò9>ò9>ä@?â>=Ó?;Ð<8µ@,´?+´?+´?+²?,²?,°@,°@,«@,ª?+¤A,£@+\9cB*\9bA)\97A(\96@'\91@-\90?,\91>,\91>,\90=+\90=+\90>)\90>)\93>*\93>*\93>*\93>*\94=)\95>*\96?+\96?+\93@8\92?7\99=0\9b?2«@.°E3¼C0½D1·?/¸@0¥H9£F7\7fK=s?1N;*E2!95495484373262/51.40-3/,63.52-52-52-41,41,41,30++0*+0*-/*-/*./*./*1-*1-*2-*1,)3)(2('5)):..D66J<<l@?wKJ\8dMK\91QO\9eVY«cf¤p\86¥q\87\8a\7f©\89~¨|\87½|\87½uy©]a\91YJsRClPKbMH_KHYSPaddl{{\83\8d\92\8e\98\9d\99¢¨\9c¡§\9b\9d¡\90\8e\92\81z{iefTXWEQP>TPaTPaTPa/.*/.*0/+10,21-21-52-52-72.72.72,72,92,92,92*92*72.61-61-50,50,61-61-72.61-61-61-61-61-61-61-61-3.*3.*3.*3.*2-)2-)2-)1,(2-)2-)2-)2-)2-)2-)2-)2-)/,%/,%0-&1.'2/(2/(30)30)52+63,63,74-85.96/96/96/@:,A;-C=/E?1F@2HB4IB2IB2JC1JC1KB1JA0KC0LD1OD2OD2Q>/S@1b>.gC3~@1\83E6\98A0\9aC2­?0®@1¹?2»A4ÂB7ÄD9ÈE=ÈE=ç@HèAIéBIêCJíCFíCFô@Có?Bø;?÷:>ó:?ó:?ä@?â>=Ó?;Ð<8´?+´?+´?+³>*²?,²?,¯?+¯?+ª?+ª?+¤A,£@+\9cB*\9a@(\97A(\96@'\90?,\90?,\91>,\91>,\90=+\90=+\90>)\8f=(\93>*\93>*\92=)\92=)\94=)\95>*\95>*\96?+\93@8\92?7\99=0\9c@3¬A/°E3½D1½D1¹A1¹A1¦I:¢E6}I;q=/N;*E2!:65:6595484373051.51.40-63.52-52-52-41,41,41,30+,1+,1+.0+.0+/0+/0+2.+2.+3.+2-*4*)3)(5))9--C55H::h<;rFE\89IG\8dMK\9aRU§_b l\82£o\85\88\89~¨{\86¼y\84ºpt¤Y]\8dVGpQBkLG^MH_MJ[PM^ZZbmmu\83\88\84\93\98\94\98\9e\92\99\9f\93\98\9c\8b\8d\91\80}~lijX]\JUTBUQbUQbUQb..,..,0/+0/+10,21-41,52-52-52-61+61+61+61+81)81)61-61-50,4/+4/+50,61-61-61-61-61-61-61-61-61-61-3.*3.*3.*2-)2-)2-)1,(1,(3.*3.*3.*3.*3.*3.*3.*3.*1.'1.'1.'2/(30)30)41*41*52+52+63,74-74-85.96/96/?9-@:.B<0D>2E?1F@2G?2H@3HA1HA1H?.H?.I@/JA0MA1MA1JA0LC2YB0\E3pC0tG4\89B0\8aC1\97<*\99>,¦<,ª@0²B4µE7¹H:ºI;Ü@CÝADáCDãEFëCCìDD÷@B÷@Bù:?ø9>ó<>ò;=âC?ß@<ËB8È?5±A-±A-°@,°@,°@,¯?+®?,®?,©@+¨?*¡A+ @*\99A)\98@(\95A)\95A)\90?,\90?,\90?,\8f>+\8f>+\8f>+\8f<*\8f<*\90>)\90>)\90>)\90>)\90>)\91?*\94?+\95@,\93A5\92@4\9b>/\9eA2±@0µD4ÁB3ÁB3¾D7¾D7¥K@ F;vJ=j>1I=-B6&=85<74;63:5294183062/51.63.52-32-32-21,21,21,10+,1+,1+,1+,1+.0+.0+0/+0/+3/,3/,5-+3+)4*)7-,=32A76\:0eC9{G:\81M@\8dPM\98[X\93hy\98m~\82\85|§x\82½s}¸il£SV\8dQCtM?pLAaPEeOJaMH_LKYZYgquv\84\88\89\85\8c\84\89\90\88\8a\90\82\83\89{wykfhZZ[KSTDYS]YS]YS]--+--+/.*0/+0/+10,41,41,41,41,50*50*50*50*70(70(50,4/+4/+3.*3.*4/+4/+50,50,50,50,50,50,50,50,50,3.*3.*2-)2-)2-)1,(1,(1,(4/+4/+4/+4/+4/+4/+4/+4/+2/(2/(30)30)41*41*52+52+52+52+63,63,74-85.85.96/=7+>8,@:.B<0C=/D>0E=0E=0E>.E>.F=,F=,G>-H?.K?/L@0LC2MD3YB0[D2nA.qD1\85>,\86?-\927%\938& 6&¥;+®>0³C5¸G9ºI;Û?BÜ@CàBCáCDêBBëCCõ>@õ>@ù:?ø9>ó<>ó<>âC?Þ?;ÊA7Å<2°@,°@,¯?+¯?+¯?+®>*­>+­>+¨?*§>)¡A+\9f?)\98@(\97?'\94@(\94@(\90?,\90?,\8f>+\8f>+\8f>+\8e=*\8f<*\8f<*\90>)\8f=(\8f=(\8f=(\8f=(\90>)\93>*\94?+\93A5\93A5\9c?0\9fB3²A1¶E5ÂC4ÂC4ÀF9ÀF9§MB F;uI<h</H<,B6&>96=85<74;63:5294173062/63.52-32-32-21,21,21,10+,1+,1+,1+,1+.0+.0+0/+0/+40-40-6.,4,*4*)6,+:0/=32W5+_=3t@3yE8\84GD\8dPM\8a_p\91fw|s\9e\80w¢t~¹mw²be\9cPS\8aQCtM?pLAaODdMH_ID[EDRLKY[_`imnszrw~vy\7fqtzlln`_aSWXHSTD[U_[U_[U_,,*,,*--+..,0/+0/+10,10,30+30+30+30+4/)4/)4/)4/)4/,3.+3.+2-*2-*3.+3.+4/,4/,4/,4/,4/,4/,4/,4/,4/,2-*2-*2-*2-*1,)1,)0+(0+(4/,4/,4/,4/,4/,4/,4/,4/,30)30)30)41*41*41*52+52+41*52+52+63,74-85.85.85.<5+=6,>8,@:.A;/A;/C;.C;.C;.C;.D;,D;,E<-G>/J>0K?1FI6FI6PH5QI6aE0cG2tA,uB-\82;'\83<(\90;'\95@,\9fB0¥H6­L;°O>ÎDAÏEBÖE@×FAäB?äB?ò<;ò<;ú9<ú9<ð><ï=;ÙF>ÕB:½D3¹@/­@+­@+­@,¬?+¬?+¬?+©>,©>,¤?+¤?+\9f@,\9e?+\97A*\95?(\92@*\91?)\8f>+\8f>+\8f>+\8f>+\8e=*\8e=*\8d<)\8d<)\8e=*\8e=*\8d<+\8d<+\8e=,\8e=,\8d>-\8e?.\94C2\93B1¢>/¦B3º@3½C6Å@7Å@7¹D;ºE<\9dOE\96H>jJ?]=2<=/78*@85?74?74=52:5194074/74/43.32-23-23-03,03,03,/2+,3,,3,,3,,3,-2,-2,/1,/1,12-23.40-2.+1-*1-*50-72/M7)R<.b>.gC3oD;wLCz[j\86gvwq\9f|v¤qz½js¶ab¥ST\97QE\83K?}PAjPAjKAcI?aEBWGDYILUMPY]ca`fdah`_f^Y_STZNSYKSYK_WT_WT_WT++),,*,,*--+/.*0/+0/+0/+2/*2/*2/*2/*3.(3.(3.(3.(3.+2-*1,)1,)1,)1,)2-*3.+2-*2-*2-*2-*2-*2-*2-*2-*2-*2-*2-*1,)1,)0+(0+(0+(3.+3.+3.+3.+3.+3.+3.+3.+30)30)41*41*41*41*41*41*41*41*52+63,63,74-85.85.;4*;4*=7+>8,?9-?9-@8+@8+B:-B:-C:+C:+D;,F=.I=/J>0FI6FI6OG4PH5_C.aE0r?*r?*\81:&\82;'\8e9%\92=)\9d@.¢E3«J9®M<ÍC@ÎDAÔC>ÕD?ãA>ãA>ñ;:ñ;:ù8;ù8;ï=;î<:×D<Ò?7ºA0µ<+¬?*¬?*¬?+¬?+«>*«>*¨=+¨=+£>*£>*\9e?+\9d>*\96@)\95?(\91?)\90>(\8f>+\8f>+\8f>+\8e=*\8e=*\8d<)\8d<)\8d<)\8d<)\8d<)\8c;*\8c;*\8d<+\8e=,\8d>-\8d>-\94C2\94C2£?0§C4»A4¾D7ÆA8Å@7·B9¹D;\9ePF\97I?jJ?\<1;<.78*@85?74>63=52:5194074/74/43.32-23-23-03,03,03,/2+,3,,3,,3,,3,-2,-2,/1,/1,01,12-51.3/,1-*1-*3.+50-J4&L6([7'`<,h=4pE<wXg\88ix{u£\80z¨t}Àlu¸gh«[\\9fWK\89MA\7fPAjM>gH>`H>`FCXFCX?BK<?HBHFFLJIPHJQIJPDKQEOUGSYK`XU`XU`XU*,+*,+,,*,,*--+..,0/+0/+/.*/.*1.)1.)1.)1.)2-)2-)1-*0,)0,)/+(/+(0,)0,)1-*/+(/+(/+(/+(/+(/+(/+(/+(1-*1-*0,)0,)/+(/+(/+(/+(1-*1-*1-*1-*1-*1-*1-*1-*30+30+30+30+30+30+30+30+41,41,41,52-63.74/74/85092*:3+;4,=6.=6,>7->5,>5,A9.A9.B8,C9-D:.F<0J>2K?3DE5EF6LE3MF4XC2YD3f?.f?.v=,v=,\829(\85<+\93=,\98B1\9fF4¢I7»F<¼G=ÆH<ÈJ>ÙD=ÚE>ì?;ì?;ò::ñ99ç>9ç>9ÍG;ÇA5­D.§>(¦A-¦A-¦?,¦?,¦?,¥>+¤?-¤?- ?,\9f>+\9b@-\99>+\94?+\93>*\8f>)\8f>)\8d>-\8d>-\8c=,\8c=,\8a=+\8a=+\8a=+\8a=+\8a=-\89<,\88<,\88<,\88<.\89=/\8a>0\8b?1\92D0\92D0¥?1©C5½A9ÀD<ÃB<ÂA;±JCµNG\98^S\92XMgWJXH;;F87B4?80>7/>71<5/94.83-63,63,34.23-14-14-.3,.3,-4,,3+,3,,3,,3,,3,,3,,3,-2,-2,.0+02-23.12-/0+./*0/+10,<1+=2,G5'M;-V=6aHAo^p\85t\86\83\80µ\86\83¸|\82ÎtzÆno¿cd´XR\9aHB\8aL?jI<gD=_E>`DBXDBX<CM8?I9CB=GFCNFEPHFRFGSGLVKPZOaZJaZJaZJ)+**,+++),,*--+..,/.*0/+.-).-)0-(0-(0-(0-(1,(1,(0,)0,)/+(/+(/+(/+(0,)0,).*'.*'.*'.*'.*'.*'.*'.*'1-*0,)0,)0,)/+(/+(/+(.*'0,)0,)0,)0,)0,)0,)0,)0,)30+30+30+2/*2/*2/*2/*2/*30+41,41,52-63.74/74/85092*:3+;4,<5-<5+=6,=4+=4+A9.A9.B8,C9-D:.F<0J>2K?3BC3CD4JC1KD2VA0WB1d=,d=,t;*t;*\807&\829(\8f9(\94>-\9bB0\9eE3¸C9¹D:ÃE9ÇI=ÙD=ÛF?îA=îA=ñ99ð88ç>9æ=8ÌF:Æ@4«B,¥<&¥@,¥@,¦?,¦?,¥>+¥>+¤?-£>, ?,\9f>+\9a?,\99>+\94?+\93>*\8f>)\8e=(\8d>-\8c=,\8c=,\8c=,\8a=+\8a=+\8a=+\89<*\89<,\89<,\88<,\87;+\88<.\89=/\8a>0\8a>0\92D0\93E1¥?1ªD6¾B:ÀD<ÃB<ÂA;·PI½VO¡g\\9baVqaTbREDOA@K=>7/>7/=60<5/94.83-63,52+34.23-14-14-.3,.3,-4,,3+-4--4--4--4--4--4-.3-.3--/*/1,23.12-/0+./*/.*0/+8-'8-'C1#I7)T;4aHAsbt\8bz\8c\8c\89¾\8e\8bÀ\82\88Ôy\7fËtuÅijº[U\9dHB\8aI<gH;fD=_D=_B@VCAW>EO>EOGQPLVUR]UT_WS_SR^RT^SV`U`YI`YI`YI+-,+-,+-,+-,+-,+-,,,*,,*/.*.-).-).-)/,'/,'/,'/,',+),+),+)-,*-,*-,*-,*-,*-,*-,*-,*-,*-,*-,*-,*-,*,+),+)-,*-,*.-+.-+/.,/.,/.,/.,/.,/.,.-+.-+.-+.-+/+(0,)1-*2.+3/,3/,2.+2.+2.+2.+2.+3/,3/,51.62/73070*81+92,;4.<5-<5-=4-=4->5,>5,?5,@6-A7-C9/G:1H;2G?4G?4K?3L@4T>3T>3]9-]9-m9,n:-}7+\80:.\8c:,\90>0\97>0\98?1¦B3¨D5²D5·I:ÉG:ÌJ=ÝD>ßF@æA=çB>ßF@ÜC=ÀH8¹A1 D-\9eB+ A- A-\9f@,\9e?+\9f>+\9f>+\9e?-\9e?-\9a=,\99<+\95>+\94=*\8f>+\8e=*\8c>*\8c>*\8a=+\89<*\89<*\89<*\87;+\87;+\85<+\85<+\86=.\86=.\85=/\85=/\84>2\86@4\87A5\88B6\90E2\91F3¦D7­K>¼E?ºC=¶G@»LE©_T°f[\94wg\91tdsugik]P`SCSFOK@IE:A?3;9-85,74+44*33)34,34,14-03,-2,,1+,1+,1+-2,-2,-2,-2,-2,-2,-2,-2,02-02-02-02-12-12-12-12-2+3708=52>63D=7XQKrn}\8a\86\95\8f\91Â\94\96Ç\8e\95Ý\83\8aÒvzÃim¶_c¢W[\9aNKjFCb=?V=?V<DQAIVHVWSab`qim~vt\86zo\81uiyleuh^l]SaRa[Ca[Cb\D,.-,.-,.-,.-,.-,.---+--+.-).-).-)-,(/,'/,'.+&.+&,+),+),+),+),+),+),+),+),+),+),+),+),+),+),+),+),+),+)-,*-,*-,*.-+.-+.-+/.,.-+.-+.-+.-+.-+.-+.-+/+(0,)1-*2.+2.+2.+2.+2.+2.+1-*1-*2.+2.+40-51.62/70*81+:3-;4.<5-<5-=4-=4->5,>5,?5,@6-A7-C9/F90G:1F>3G?4K?3K?3S=2S=2\8,\8,k7*l8+{5)~8,\8b9+\8e<.\96=/\97>0¤@1¥A2¯A2²D5ÄB5ÈF9ÚA;ÜC=å@<æA=ßF@ÛB<¿G7¸@0 D-\9eB+ A-\9f@,\9e?+\9d>*\9e=*\9e=*\9e?-\9e?-\99<+\99<+\94=*\94=*\8f>+\8e=*\8c>*\8b=)\89<*\89<*\89<*\88;)\87;+\87;+\84;*\84;*\85<-\85<-\84<.\85=/\84>2\85?3\87A5\88B6\93H5\93H5§E8­K>½F@¼E?¹JC¾OH¯eZ¶la\9b~n\98{kz|nprdWgZJZMOK@KG<EC7@>2=:196-44*11'23+12*03,/2+,1+,1+,1+,1+,1+,1+,1+,1+,1+,1+,1+,1+/1,/1,/1,/1,01,01,01,01,3,46/7;30=52G@:]VPvr\81\8c\88\97\8f\91Â\94\96Ç\8e\95Ý\84\8bÓ{\7fÈswÀmq°hl«a^}[XwSUlTVmU]j\dqftur\80\81u\86~\7f\90\88\83\95\89|\8e\82v\86yp\80sfteXfW^X@_YAa[C*./*./*./*./,.-,.-,.-,.-,,*,,*-,(-,(,+',+',+'+*&+*(+*(+*(+*(+*(+*(+*(+*(,+),+),+),+),+),+),+),+),+),+),+)-,*-,*-,*-,*.-+.-+.-+.-+.-+.-+.-+.-+.-+/+(0,)1-*1-*2.+2.+1-*1-*0,)0,)0,)0,)1-*3/,40-51.80-91.:2/;30<41<41=4/=4/=4-=4->3-?4.@6-B8/E80F91H;5H;5J;4K<5O:5O:5V72V72c60d71t5,w8/\868,\8a<0\93;/\95=1\9aA3\9aA3\9fB3¡D5®B5²F9ÃE9ÅG;ÑG=ÓI?ÏJAÌG>µJ:®C3\9bD0\98A-\9aB.\99A-\99A-\98@,\99>,\99>,\9a?-\9a?-\96=-\95<,\91>,\90=+\8c=,\8c=,\89>+\89>+\88=*\88=*\87<)\87<)\85<+\84;*\83;,\83;,\81;/\81;/\81=2\81=2\82?6\84A8\83C9\84D:\93K<\92J;¡G>¦LC±KF±KF¨XO®^U\9eyf¦\81n\90\92|\8d\8fy{\8cyp\81ncqbVdUMQ@JN=GI;CE7>@39;.35*/1&01)/0(/0*./)./*./*./*/0+/0+/0+/0+/0+/0+/0+/0+/0+01,01,01,01,01,01,01,01,4+<4+<320875DH:\`Ru{{\89\8f\8f\8d\94±\91\98µ\8d\95Ã\86\8e¼}\8b²|\8a±|\8d§{\8c¦|\8b\90v\85\8an\80\80l~~j\81ym\84|u\90\81\80\9b\8c\88¤\8e\8d©\93\8f§\91\86\9e\88\80\96\81x\8eyj{hXiVYU8[W:^Z=*./*./*./*./,.-,.-,.-,.-,,*,,*-,(,+',+',+'+*&+*&+*(+*(+*(+*(*)'*)'*)'*)',+),+),+),+),+),+),+),+),+),+),+),+),+),+),+),+)-,*-,*-,*.-+.-+.-+.-+.-+/+(/+(0,)1-*1-*0,)0,)/+(/+(/+(/+(/+(0,)1-*3/,3/,80-91.:2/;30<41<41<3.<3.=4-<3,=2,>3-?5,@6-C6.D7/F93F93H92I:3N94M83T50T50a4.c60r3*v7.\857+\89;/\93;/\94<0\99@2\99@2\9b>/\9d@1©=0­A4¾@4ÁC7ÎD:ÏE;ÌG>ÉD;³H8¬A1\99B.\97@,\99A-\98@,\97?+\96>*\98=+\98=+\99>,\99>,\95<,\95<,\90=+\8f<*\8c=,\8b<+\88=*\88=*\87<)\87<)\86;(\86;(\84;*\83:)\82:+\82:+\80:.\80:.\80<1\81=2\82?6\84A8\84D:\85E;\93K<\92J; F=¥KB°JE´NI¬\Sµe\¦\81\88u\98\9a\84\95\97\81\84\95\82y\8awlzk`n_UYHPTCKM?EG9@B5;=057,13(/0(./'-.(,-',-(-.)./*/0+./*./*./*./*./*./*./*./*/0+/0+/0+/0+/0+/0+/0+/0+5,=3*;0/-764GK=aeWy\7f\7f\8a\90\90\8b\92¯\8e\95²\8a\92À\85\8d»\81\8f\88\96½\8f º\93¤¾\97¦«\92¡¦\8c\9e\9e\89\9b\9b\82\99\91\7f\96\8e\81\9c\8d\88£\94\94°\9a\96²\9c\94¬\96\8b£\8d\85\9b\86|\92}j{hUfSVR5YU8\X;+/0+/0+/0+/0+/0+/0-/.-/.--+,,*,,*,,*,+',+',+',+'+++*********))))))((((((************************************************++++++,,,,,,---------.../+*/+*0,+0,+0,+/+*/+*.*)/+*/+*/+*/+*0,+1-,2.-3/.91/91/:20;31;30;30<20;1/<3.<3.=2.=2.=2,?4.B5/C60A83A83B94C:5E:6D95I81I81V80W91g7-k;1|:.\80>2\8b=0\8d?2\96?6\96?6\93@2\94A3\99B1\9cE4©E5«G7¶F:¸H<ºJ>¸H<«F:¥@4\97A2\95?0\94B-\93A,\94?+\93>*\94=,\94=,\94=,\95>-\92<-\92<-\8e=,\8e=,\8a=-\89<,\85<+\85<+\86;(\86;(\84;*\83:)\82:+\82:+\7f:+\7f:+~<0~<0}=3\7f?5\80A8\83D;\83G?\84H@\8fK@\8eJ?\9aGA\9fLF¤QKªWQ\9dl]¦uf\93\93w\99\99}\89¨\88\87¦\86\81\9d\84x\94{u\80ojudZfPS_IJVBBN:=F58A07;-48*01)/0(.-(,+&.*'/+(1++2,,0,)0,)0,)0,)0,)0,)0,)0,)/.*/.*/.*/.*/.*/.*/.*/.*7,:4)7..$66,BO1]jLv\84j\86\94z\8c\97\91\90\9b\95\8c\9a\9d\89\97\9a\87\9e\96\92©¡\99»¢ Â©\97¸£\96·¢\96º \96º \8f´\95\88­\8e\88­\8b\8d²\90\91µ\91\91µ\91\8f¬\8d\86£\84\83\9c\7fz\93vg{bPdKRS4TU6VW8+/0+/0+/0+/0+/0+/0-/.-/...,--+--+--+-,(-,(-,(-,(,,,,,,+++******)))((((((*********************************))))))))))))(((******+++,,,,,,---.......*)/+*/+*/+*/+*.*)-)(-)(/+*/+*/+*/+*0,+1-,3/.3/.:20:20;31;31;30;30;1/;1/;2-;2-<1-<1-<1+=2,@3-A4.?61?61@72A83C84C84G6/G6/S5-T6.d4*h8.z8,~<0\89;.\8b=0\95>5\94=4\92?1\93@2\97@/\99B1¥A1¦B2°@4²B6´D8³C7¨C7£>2\96@1\95?0\93A,\92@+\93>*\92=)\93<+\93<+\93<+\94=,\91;,\91;,\8e=,\8d<+\89<,\88;+\85<+\84;*\85:'\85:'\83:)\83:)\819*\819*~9*~9*~<0\7f=1~>4\80@6\82C:\85F=\85IA\87KC\8eJ?\8cH=\9aGA¡NH¨UO¯\V£rc®}n\97\97{\9d\9d\81\8bª\8a\87¦\86\82\9e\85{\97~z\85tp{jcoY\hRQ]IGS?BK:<E4;?19=/23+01)/.),+&-)&.*'1++2,,/+(/+(/+(/+(/+(/+(/+(/+(.-).-).-).-).-).-).-).-)5*83(6..$55+@M/ZgIs\81g\84\92x\8e\99\93\92\9d\97\8f\9d \8d\9b\9e\8c£\9b\9a±©¢Ä«ªÌ³¥Æ±¦Ç²¦Ê°£Ç­\99¾\9f\8d²\93\89®\8c\8d²\90\8d±\8d\8e²\8e\8dª\8b\83 \81\7f\98{v\8frcw^MaHPQ2QR3RS4+/2+/2+/0+/0+/0+/0-/.-/..0/.0/..,..,..,--+.-).-)------,,,+++******))))))******************************)))))))))((((((((()))******+++,,,---.......*).*)/+*/+*.*)-)(,(',('0,+0,+0,+0,+1-,2.-3/.40/:12:12;31;31;31;31;1/;1/;1/;1/;0,;0,;0,<1-?2,@3-96/:70983:94:94:94=82<71G4-H5.Y5)]9-o7(t<-\7f<+\81>-\90;4\90;4\8d?3\8e@4\8eB2\8fC3\94C0\94C0\9e>.¡A1¨B6©C7¢B6\9e>2\95?2\94>1\91@+\90?*\90=+\8f<*\91;*\91;*\91;,\92<-\8f<,\8f<,\8b<-\8a;,\87;+\87;+\84;*\84;*\83:'\83:'\829(\829(\819*\808)}9,}9,}=1~>2~?6\80A8\81E=\85IA\86KE\88MG\8cIA\8cIA\97IE¡SO¤]W­f`\9d\80\8by\8a¢\80\8f§\85\80°\8a\86\7f \83y\9a}\81\88vx\7fmfx^`rXXgPN]FHT@AM9>D6:@257,35*2/*/,'0(&1)'3)*4*+2*(2*(2*(2*(0+(0+(0+(0+(0,)0,)0,)0,)0,)0,)0,)0,)6)25(1.0\e46!;M\1dTf6n\82Q\80\94c\8c\9bz\91 \7f\8f¢\86\8d \84\8b«|\97·\88\9eË\88¥Ò\8f¥Ó¬¤Ò«£Ò¨\9dÌ¢\8f¾\90\81°\82\7f­~\83±\82\85¯\81\88²\84\88«\83} xz\94qp\8ag_sWJ^BLO2KN1JM0,03,03,01,01,01,01.0/.0//10/10//-//-//-..,/.*/.*......---,,,+++******)))))))))))))))))))))))))))******))))))((((((''''''))))))***+++,,,---.......*).*)/+*/+*.*)-)(,('+'&0,+0,+0,+0,+1-,3/.40/510:12;23;31;31;31;31;1/:0.;1/:0.;0,;0,;0,;0,>1+?2,96/96/872983983983<71<71C0)E2+U1%Z6*l4%q9*|9(~;*\8e92\8e92\8c>2\8d?3\8dA1\8dA1\91@-\90?,\9b;+\9e>.¥?3¦@4 @4\9e>2\95?2\94>1\90?*\90?*\90=+\8f<*\90:)\91;*\91;,\91;,\8f<,\8e;+\8b<-\8a;,\87;+\86:*\84;*\83:)\829&\829&\829(\829(\808)\808)}9,|8+~>2~>2\7f@7\81B9\82F>\86JB\88MG\8aOI\8cIA\8cIA\99KG¤VR¨a[±jd¢\85\90~\8d¥\83\90¨\86\81±\8b\86\7f \83z\9b~\83\8ax{\82pj|bew]_nWVeNO[GFR>AG9;A379.46+30+/,'0(&0(&3)*4*+1)'1)'1)'1)'/*'/*'/*'/*'/+(/+(/+(/+(/+(/+(/+(/+(5(15(1/1\1c35 8J\1aPb2k\7fN~\92a\88\97v\8d\9c{\8c\9f\83\8b\9e\82\87§x\93³\84\98Å\82\9eË\88\99Ç \99Ç \98Ç\9d\93Â\98\88·\89\7f\81¯\80\88\87\82¬~\85¯\81\86©\81z\9duv\90mk\85bZnRFZ>JM0IL/FI,-0'.1(.1(.1(01)01)01)01)33+33+63,52+52+41*30)2/(7/,6.+6.+5-*2-*1,)0,+/+*.,-.,---/--/+,0*+/()-()-/(//(//(//(/.)-.)-.*+.*+,+)-,*,-(,-(-.(-.(-.(-.(+-,+-,------/.,/.,2.+2.+1,&2-'5.&6/'8/&90';1(;1(;4*<5+<5+<5+=4-<3,<3,;2+;2-;2-;0,;0,;0.;0.<1/<1/F-&F-&;5);5)/:,/:,55-55-D*)C)(Q%&T()W.(^5/]@2aD6vB,xD.\85@0\87B2\94>1\93=0\939.\928-\8f<,\91>.\8eC0\90E2\8fD/\8eC.\8d?+\8c>*\9b82\9a71\8f=1\8e<0\82A/\81@.|B.{A-\83B0\83B0\87>/\86=.\87;-\86:,\84;,\83:+s;.zB5r?.m:)qA-qA-t<+yA0};-\81?1\88D9\8cH=\87K@\88LA\81PB\82QC\92JK\98PQ\85i[\8dqcq\89ix\90pu\9f{{¥\81\87¦\87\88§\88\8e§\8a\8d¦\89\81¦\87\81h\9ezd\9avb\8fdZ\87\X|VSwQZnRSgKQUDHL;D=5?80:..5))3'+3'+2%,2%,******,(),()0%+1&,2%,3&-4'04'03'13'1/*1/*1,+1,+1.*+0,-.-(/.);>+VYFnyW~\89g\8a\9dp\8b\9eq\89¤o\8c§r\87¨q\88©r\8e´{\98¾\85¡¿\8b\9f½\89\97¹\86\91³\80\89®{\85ªw\83©z\84ª{\83¦|\82¥{\80\9d~v\93tq\88nf}c[jWL[HJR=AI4;C..1(.1(.1(/2)01)12*12*12*44,44,63,63,63,52+41*30)7/,6.+6.+5-*2-*2-*0,+0,+.,-.,---/--/+,0*+/)*.()-.'..'..'..'.-(,-(,-)*-)*-,*-,*,-(-.)-.(-.(./)./),.-,.----.../.,/.,1-*1-*2-'3.(6/'70(90':1(<2)<2)<5+<5+=6,=6,>5.=4-<3,;2+;2-;2-;0,;0,;0.;0.<1/<1/F-&G.';5);5)/:,/:,55-44,D*)D*)Q%&T()V-'[2,Z=/]@2s?)uA+\83>.\86A1\93=0\93=0\94:/\939.\8d:*\8d:*\8a?,\8b@-\8cA,\8dB-\8fA-\8fA-\9a71\9a71\8f=1\8e<0\82A/\81@.|B.{A-\82A/\82A/\86=.\85<-\86:,\86:,\83:+\83:+r:-v>1o<+m:)p@,o?+q9(s;*~<.\82@2\89E:\8cH=\87K@\87K@\81PB\82QC\90HI\98PQ\87k]\90tfu\8dm|\94tx¢~~¨\84\88§\88\89¨\89\8f¨\8b\8e§\8a\83¨\89\83j |f\9cxe\92g^\8b`\\80ZX|V_sWZnRY]LPTCKD<E>6?338,,5)-4(,3&-2%,******,(),()1&,1&,3&-4'.4'04'03'13'1/*1/*1,+1,+12./2./-,',+&8;(TWDmxV\7f\8ah\84\97j\85\98k\84\9fj\87¢m\83¤m\83¤m\87­t\90¶}\9a¸\84\98\82\91³\80\8c®{\85ªw\83¨u\82¨y\82¨y\82¥{\81¤z\7f\9c}u\92sp\87mf}c[jWL[HFN9=E07?*/2)/2)03*03*12*23+23+23+55-55-74-85.74-63,63,52+81+70*50,4/+3.*2-)1-*0,)/.,/.,......--/,,.)*,)*,/)-/)-/)-/)-.*+.*+.*).*).-).-).-)/.*./)./)/0*/0*//////..,..,/.*/.*1.)1.)4/)4/)70(81);2)<3*>4*>4*>7->7-?6-?6-?6->5,=4-<3,;2-;2-;0,:/+:/-;0.<1/<1/B1)C2*Q*+Q*+X%.W$-N',M&+@.*?-)=0'>1(P.%T2)k.-m0/h:+j<-w;0z>3\89<6\89<6\8b;4\8a:3\86=4\86=4\82@2\82@2\85A4\86B5\8aB6\8bC7\8b?/\8b?/\88?.\87>-\87>-\86=,\88;+\88;+\8c:,\8b9+\88;+\87:*\7f<)\7f<)x>(x>(|>1z</s;,t<-u@0u@0v<.u;-\7f?3\82B6\89E<\8cH?\8aJ@\8aJ@\87MB\88NC\97GH\9fOP\93g\\9cpe\84\87l\8a\8dr~\9d{\83¢\80\85©\85\86ª\86\8f¨\8a\8f¨\8a\92¢\87\8c\9c\81\88\94|\84\90xc\98j^\93eZ\8a`X\88^Z\84^U\7fYQrUJkNB[E;T>5F6,=-)5+&2(%/'$.&9"(9"(6#'6#'4%*5&+2),3*-,,.,,.(..(..%/0%/0"00"004.04.0.+&,)$58'QTCkvX}\88j}\92i~\93j~\9aj\82\9en~ m}\9fl\7f¦q\86­x\8a¯y\89®x\85¬w\82©t\7f§s~¦r~¥v\7f¦w\7f¤{~£z}\9byt\92pp\87ke|`XjRJ\DFI8=@/7:)14+14+14+25,34,34,45-45-66.66.96/96/96/96/85.74-92,92,61-61-50,4/+2.+2.+0/-10.000/////1--/+,.*+-0*.0*.0*.0*./+,/+,/+*/+*/.*/.*/.*0/+/0*01+01+01+00000000.00.0/+0/+2/*2/*61+72,:3+;4,=4+>5,@6,@6,@9/@9/A8/A8/@7.?6->5.=4-<3.;2-;0,;0,;0.;0.<1/=20D3+D3+R+,R+,Y&/X%.O(-N',A/+A/+>1(>1(O-$R0'g*)i,+g9*i;,v:/z>3\88;5\89<6\8a:3\8a:3\88?6\88?6\84B4\84B4\86B5\86B5\89A5\89A5\8b?/\8a>.\88?.\87>-\86=,\86=,\88;+\88;+\8a8*\8a8*\869)\869)~;(~;(w='w='~@3v8+s;,u=.q<,s>.z@2z@2\81A5\84D8\8aF=\8bG>\89I?\8aJ@\88NC\8aPE\9bKL¡QR\92f[\98la~\81f\84\87ly\98v\7f\9e|\82¦\82\84¨\84\8e§\89\8e§\89\92¢\87\8d\9d\82\89\95}\85\91yf\9bma\96h`\90f_\8feb\8cf_\89c]~aWx[NgQF_I?P@4E5/;1)5+&0($.&9"(8!'6#'6#'3$)4%*1(+2),**,**,&,,&,,#-.#-. .. ../)+1+-.+&.+&7:)QTChsUw\82dy\8eez\8ffz\96f\80\9cl|\9ekz\9ciy k~¥p\81¦p\7f¤n}¤o|£n|¤p}¥q}¤u}¤u{ w{ wz\98vr\90nn\85ie|`XjRJ\DDG6<?.69(25,25,36-36-56.56.56.56.77/880;81;81;81;81:70:70<5/;4.94083/72.61-51.51.51.51.32032021/10.0/-/.,3*+3*+1++1++1++1++0,)0,)2.+2.+10+10+10+21,12*12*22022023.12-21,21,50*50*;4,;4,=4+>5,@6,A7-B8.C9/C;0C;0C;0C;0B90@7.?6->5,=4-<3,<3.;2-;2-<3.<3.=4/?61?61P-1P-1\&3[%2Q*/P).<5-<5-29)3:*D4'E5(Y.'Z/(b:2e=5r;6v?:\83;<\83;<\85;:\84:9\7f;8\80<9}A9\7fC;\82C<\81B;\85@9\84?8~D.~D.\84A.\83@-\89<,\88;+\8c9+\8b8*\8a7)\8a7)\859)\848(z=(z=(t@(s?'\846,|.$\808,\86>2t4(t4(zB5|D7{E9}G;\80J>\81K?\84K@\86MB\8aPE\8dSHqhKulO\7foV\84t[\87y_\8f\81g\8e\8er\95\95y\87\9f{\8a¢~\83©\82\85«\84\83©\82~¤}~\9cz{\99w\86\8dn\83\8ak\7f\88i\7f\88iz\89jx\87hr\82gn~ccoW[gOVWEJK9G=1?5)=,$:)!9%&9%&4&%4&%.)%.)%*,'*,'&,(&,()+()+(+)*+)*.(*.(*,$!2*'51&95*?D0TYEbqRm|]q\8abq\8abp\91bv\97hu\9bjs\99hq\9cgu kw¢lu js\9fju¡lx¤sz¦uz¤vy£ux\9dtx\9dtw\96to\8ell\85gc|^UlOG^AFB6>:.84(47.47.47.58/67/67/780780991991<92=:3=:3=:3=:3<92?82>71<73;62:5194084173084184165365354243121/21/5,-5,-3--3--3--3--2.+2.+3/,3/,21,21,21,32-23+23+33133134/45054/65094.94.=6.=6.?6-@7.C9/D:0E;1E;1E=2E=2E=2D<1C:1B90@7.?6-?6/>5.=4/=4/=4/=4/>50?61?61@72R/3R/3^(5^(5T-2T-2?80>7/5<,5<,F6)G7*Y.'Z/([3+]5-k4/p94~67\7f78\8176\8176|85}96y=5{?7~?8\7f@9\84?8\84?8~D.~D.\83@-\82?,\89<,\88;+\8b8*\8b8*\8a7)\8a7)\859)\859)z=(z=(t@(t@(\835+\835+\98PD¢ZN\83C7y9-\80H;\81I<|F:}G;\7fI=\80J>\84K@\87NC\8cRG\90VKtkNxoR\82rY\86v]\89{a\91\83i\90\90t\98\98|\85\9dy\87\9f{\82¨\81\84ª\83\83©\82\7f¥~\7f\9d{|\9ax\87\8eo\86\8dn\83\8cm\83\8cm\7f\8eo~\8dny\89nv\86knzbgs[cdRWXFSI=I?3E4,?.&>*+=)*7)(6('/*&/*&*,'*,'(.*(.*+-*+-*-+,-+,0*,0*,0(%:2/B>3IE:NS?]bNcrSixYk\84\j\83[i\8a[o\90ao\95dn\94cl\97bo\9aet\9fir\9dgp\9cgr\9eiw£ry¥ty£uv ru\9aqu\9aqt\93qm\8cjk\84fb{]UlOG^AFB6=9-73'58/58/58/690780891891891::2;;3>;4>;4?<5?<5?<5>;4?:4?:4>93>93=82<71<73;62:72;83;83:72:7285074/63.7/,7/,7/,7/,50,50,50,50,41,41,52+52+33+44,44,44,43/540650761:70;81=90=90?8.?8.A9.B:/D:.F<0H<.I=/G=3G=3G=3G=3E;1D:0A8/@7.@70@70?6/?6/>71>71?82?82=82>93>;4?<5@=6@=6C<2C<2F8/F8/H8+H8+F9(G:)D<'E=(a-"d0%q0*w60\8573\88:6\8b<8\8b<8\8bB;\89@9\81>5~;2\8290\83:1\8a;4\8c=6\84@5\83?4\86=4\85<3\84;2\83:1\80<1\80<1{=0{=0{=0{=0\7f;0\7f;0\8390\8390\98-'¥:4Íjeß|w©[Q\90B8\83OA\80L>mN:nO;iS<jT=qU@uYD\81\I\85`MbyKg~P\92rY\96v]Áb^ÄeaÕdhÙhlÊ{tÍ~w®\92\94~\9b\9f~\97\9bz\8b\9bw\88\98t\8f\8ep\8e\8do\89\90o\8a\91p\80\96r~\94pt\94or\92ml\8aff\84`cxYXmNW]CKQ7GB.@;'A2+@1*:1(8/&00&//%.0%-/$2/(2/(:+(:+(D%*D%*K"*K"*@8%LD1VQ;]XB]dEgnOgySi{Uh\83Vf\81Te\87Ul\8e\m\94_m\94_n\96aq\99dr\9eko\9bhm\99hp\9ckv\9fsx¡ux\9ewt\9ast\96st\96ss\92pl\8bii\84ca|[TnKF`=MD;E<3?6-6906906906908918919:29:2::2;;3>;4?<5@=6@=6@=6?<5A<6A<6@;5?:4>93>93=84=84<94<94<94<94;83:7296185091.91.91.91.72.72.72.72.52-52-52+52+44,44,44,55-540540761872<92=:3?;2@<3@9/@9/B:/C;0E;/F<0I=/J>0H>4H>4H>4G=3F<2D:0A8/@7.B92A81@70@70?82?82@93A:4=82>93>;4@=6A>7B?8E>4E>4G90G90I9,J:-H;*H;*F>)F>)i5*l8-{:4\83B<\92D@\97IE\9aKG\9bLH\9bRK\95LE\88E<\80=4\807.\818/\89:3\8c=6\84@5\83?4\86=4\85<3\84;2\83:1\80<1\7f;0{=0{=0{=0|>1\80<1\80<1\84:1\84:1\94)#«@:ã\80\97\92»mc\96H>\81M?zF8lM9mN:iS<jT=qU@vZE\82]J\87bOe|Nk\82T\96v]\99y`Áb^¾_[ÉX\ÊY]Ë|uÍ~w¯\93\96\80\9c \7f\99\9d|\8d\9dy\8a\9av\90\8fq\91\90r\8c\93r\8d\94s\82\98t\81\97sx\98sv\96qr\90lm\8bgk\80aavW`fLSY?NI5FA-E6/D5.>5,;2)33)22(02'/1&52+52+=.+=.+G(-G(-N%-N%-ME2YQ>c^HhcMfmNmtUj|Vk}Wj\85Xh\83Ve\87Ul\8e\n\95`p\97bq\99dt\9cgq\9djn\9agl\98go\9bju\9erw tv\9cuq\97pr\94qs\95rr\91ok\8ahi\84ca|[TnKGa>TKBKB9E<38;27:17:17:19:2:;3;<4<=5<<4<<4?<5@=6A>7B?8B?8C@9E@:E@:D?9D?9C>8C>8B=7B=7@<3@<3B;3A:2A:2A:2A:2A:2A81@70@70@70>7/>7/=6.=6.<71;60:7096/85.74-74-63,66.66.85.96/;7.=90@9/A:0B:/C;0F<0H>2K?1L@2L@0L@0MA5L@4K?3J>2G=3F<2E;1D:0B90A8/?8.?8.<8/=90=90>:1;4,LE=P?8J92Z;6T50U,&b93a0)d3,e1&a-"e,!l3(s9.u;0\8fG8\8eF7\9aG9\9fL>£E;\9b=3\9d=1¢B6¥M?§OA«UD­WF©M>\9b?0\9d9*¡=.\9858\9858\9045\8c01\8573\89;7zA6u<1nD4kA1r<0r<0\8c22\8c22\9f%0\9d#.ÏDAìa^ÄDAÔTQÝ|u´SL~I9\89TDcW=g[AbeFcfGhaDhaD}cJ\87mT¤YF·lYêbfßW[ú.Iò&Aÿ!Fÿ%Jÿ:Vÿ<XðUcýbpðuxñvyëz|î}\7fÏwuÐxvÉ|vÊ}w½\81\81\84\83u§yl¦xk¦oh\9fha\9bZV\8fNJ\8b??\8599\807>t+2m/2k-0S&#O"\1fM.)Q2-J3-H1+E1*F2+F.*C+'H/+O62VK+aV6da>gdAhpIu}Vr\84Zo\81Wi\85Ul\88Xn\8e\r\92`t\97au\98bw\9adx\9beq\96ms\98ot\96qr\94ot\93sy\98x{\98|y\96zy\93xs\8drl\86ii\83fg\82a`{ZSnKHc@RL@RL@QK?7:17:17:17:19:2;<4<=5=>6>>6>>6@=6A>7A>7B?8B?8C@9E@:E@:E@:D?9D?9C>8C>8C>8C?6B>5D=5D=5C<4B;3B;3B;3B92A81A81A81@91@91@91@91<71;60:7096/85.85.74-74-66.66.96/96/;7.=90A:0B;1C;0C;0F<0H>2K?1L@2L@0L@0L@4L@4K?3J>2G=3F<2E;1D:0B90B90@9/?8.=90>:1>:1?;2B;3B;3C2+F5.[<7`A<kB<tKEyHA|KD\80LA\7fK@\86MB\8dTI\91WL\90VK\8dE6\8cD5\96C5\99F8\9d?5\968.\999-\9d=1\9cD6\98@2\97A0\9bE4¢F7£G8­I:³O@¯LO¬IL\9eBC\959:\8a<8\8b=9{B7v=2i?/tJ:\82L@zD8\85++\88..³9DÉOZØMJÛPMÁA>À@=Åd]¸WPzE5\87RBocIfZ@[^?fiJslOpiL~dK\84jQ³hU¹n[ßW[ÓKOö*Eõ)Dÿ$Iÿ%Jù1Mù1MàESçLZÕZ]ÔY\Í\^Ð_aÅmkÆnlÀsmÂuo¸|r¹}s²\82\82\86\85xµ~w²{t´so±pl´hh³gg²ip¤[b\93UX\8dOR|OLyLI]>9? \eL5/H1+F2+J6/N62O73T;7ZA=[P0dY9eb?ifCltMz\82[x\8a`t\86\n\8aZn\8aZm\8d[o\8f]r\95_t\97at\97at\97ao\94ks\98ow\99tv\98s{\9az\80\9f\7f\82\9f\83\80\9d\81\80\9a\7fx\92wp\8amj\84gg\82a_zYSnKIdAVPDVPDUOC6906907:18;2:;3<=5>?7?@8@@8@@8B?8B?8C@9C@9C@9C@9EB;DA:DA:DA:EA8D@7D@7D@7HA7HA7H?6G>5F>3E=2D<1D<1C;0C;0C;0C;0C:1C:1B;1B;1<8/<8/<8/;7.96/85.85.74-96-96-96-:7.<8-=9.A;/B<0C;.D</I=-J>.L?.M@/M@/M@/M?2M?2L>3K=2I=1G;/E;1D:0C;0C;0?;0?;0?;0?;0?<3?<3YC8M7,{*0\90?EÄ?PÑL]ÙWa×U_\9bB:\9dD<\95L;\98O>¸KFÀSNßEOÛAK\9fD1\9dB/¤>/¤>/©9+¥5'¥7(©;,¬E2¢;(\9b\9d9"©<(­@,¶A0¹D3«.4´7=¿BHÄGM½LN·FH\96A:\883,{9+x6(~0&\813)©.3¸=Bá@RëJ\äG@Ò5.Î:6Ä0,ÂOHÑ^W\8cO=\94WEugJl^AeeCqqO\86mO\81hJ\97cM£oYþT]ùOXú@Nò8Fü3Fÿ6Iÿ4Jû0Fû6J÷2Fò2Gô4Iø2Iõ/Fü-Iÿ1Mÿ7Xÿ8Yÿ;\ÿ=^ÿDcÿFeüIgýJhøIh÷Hg÷EiöDhüClÿFoÿIsÿKuÿb\82ÿZzíWråOjÓXlÙ^r¬R[\81'0Z'$_,)Q>0Q>0:?+6;'4F.AS;YO,aW4d`=ieBouS\7f\85c}\8ckw\86ew\8diu\8bgr\8afr\8afv\8cfx\8ehz\8fhz\8fh\80\92x\86\98~\8b\9d\87\8d\9f\89\93¡\90\99§\96\9a¨\9b\97¥\98\92 \91\89\97\88y\8cxp\83of\7fa^wYSnKKfCUVFUVFUVF58/58/6907:1:;3<=5>?7@A9AA9AA9C@9C@9DA:DA:DA:DA:EB;EB;EB;EB;FB9FB9FB9FB9JC9IB8I@7H?6G?4E=2D<1D<1C;0C;0C;0C;0D;2D;2C<2C<2=90=90<8/<8/:7096/85.85.96-96-96-:7.<8->:/A;/B<0D</E=0I=-K?/M@/M@/M@/M@/M?2L>1K=2J<1H<0G;/D:0D:0D<1C;0@<1@<1@<1A=2@=4A>5P:/I3(\8a9?­\bÙTeÝXiÚXbÊHR\9291\93:2\8aA0\8eE4±D?»NIÙ?IÔ:D¤I6¢G4¨B3¨B3®>0¯?1°B3³E6¯H5¨A.¢>'¡=&¨;'¨;'«6%ª5$µ8>·:@¶9?µ8>³BD½LN±\U²]V\89G9|:,~0&\8c>4ÂGLÐUZâASÕ4FÙ<5Ì/(Í95Ê62»HAÌYR\9a]K\93VDj\?tfIttRuuS\81hJ\83jL¥q[¶\82l÷MVñGPö<Jõ;Iÿ;Nÿ>Qÿ8Nü1Gÿ?Sþ9Mö6Kõ5Jø2I÷1Hÿ1Mÿ6Rþ2Sÿ3Tû5Vü6Wö;Z÷<[ò?]ó@^óDcòCbò@dò@dø?hûBkÿEoÿGqùTtøSsñ[vìVq×\pàeyÈnwµ[dl96d1.K8*L9+=B.<A-4F.7I1TJ'^T1ea>okHx~\\88\8el\83\92q|\8bjx\8ejz\90ly\91mw\8fkw\8dgx\8eh\7f\94m\84\99r\92¤\8a\98ª\90\9f±\9b¢´\9e¨¶¥¬º©¬º­¨¶©\9e¬\9d\93¡\92\80\93\7fq\84pd}_\uWRmJLgDVWGVWGVWG47.58/58/7:19:2<=5>?7?@8AA9AA9C@9DA:DA:DA:DA:EB;FC<FC<FC:FC:GC:GC:IB8IB8KC8KC8JB5H@3H>2G=1F=.E<-D;,D;,D:.D:.C;.D</D<1D<1@9/@9/=90<8/<8/;7.:5/:5/97+97+;7,;7,>8,@:.C;.D</F=.G>/J?-K@.M@/M@/M@-M@-N>1N>1K=0J</H<0G;/D:.C9-B<0B<0@<0@<0?=1@>2??3@@4i0)p70¼DM×_hóFYê=P×6<Á &£5&¢4%\8e="\90?$¯>.ºI9Ú<;Õ76§C3§C3­?2¬>1´>4¹C9»G:¼H;ª?-©>,§<*¥:(¬7&°;*º:-»;.ÊG=ÊG=Õ;9Ð64Þ47ç=@èHHëKKÊA9ÐG?ÓPFÖSIàHEÙA>æ39ã06Ö6(Ù9+Í3)Ò8.º:1½=4®_P\9eO@uP6\85`F\8cgL\85`E SA±dRÞgaämgô?Fï:AÞ>@à@BÖKFØMHÖOK×PLêPRãIKï;Gî:F÷2D÷2Dÿ4Hÿ:Nú<Vù;Uù;Uú<Vû<[ý>]ü@aýAbþDkþDkúDmúDmøEoøEoöEqöEqÿDjÿ>dÿGjÿJmòIfóJgæ]qç^r»Zc\998A]("Z%\1fSB2\K;IM6?C,UH5dWDrkY\80yg\8a\8c~\98\9a\8c\91\9b\90\87\91\86\81\8e\84\88\95\8b\8e\9a\90\8b\97\8d\89\8f\85\8a\90\86\99\9b\90¥§\9c³³§ºº®¿¿·ÁÁ¹ÅÁÀÇÃÂÃÁľ¼¿±³°¤¦£\8b\97\8by\85yh|c^rYRmLNiHRZBRZBS[C47.47.47.58/891:;3;<4<=5??7@@8B?8C@9DA:EB;FC<FC<FC<GD=GD;GD;HD;IE<KD:KD:KC8KC8JB5IA4I?3H>2G>/G>/F=.F=.F<0E;/D</C;.C;0C;0A:0@9/>:1=90<8/<8/;60;60:8,:8,;7,<8-?9-A;/C;.D</G>/H?0K@.LA/M@/M@/M@-M@-N>1N>1K=0J</G;/F:.C9-C9-B<0A;/?;/?;/?=1@>2@@4@@4p70\86MFÌT]ÒZcé<Oá4GÓ28Æ%+£5&£5&\8e="\8e="©8(±@0Ñ32Î0/\9f;+ <,¦8+¦8+°:0·A7ºF9¹E8ª?-ª?-¦;)¡6$ª5$³>-ÄD7ÈH;»8.ÆC9ÞDBàFDê@Cç=@Ú::Ò22É@8ÕLDÛXN×TJ×?<Í52â/5é6<Ó3%Ü<.Ç-#Ñ7-¶6-´4+»l]ºk\\81\B\82]C}X=}X=©\J¿r`ÞgaÓ\V÷BIñ<CÞ>@Ü<>ÎC>ÑFAØQMáZVêPRãIKï;Gí9E÷2Dõ0Bü1Eÿ6Jø:Tø:Tø:Tù;Uû<[þ?^ÿCdÿEfø>eù?f÷Aj÷AjõBló@jï>jî=iÿFlý9_û?bÿJm÷NköMjä[oâYmÙx\81Á`i\86QKp;5M<,K:*DH1MQ:]P=reR\84}k\94\8d{\9b\9d\8f¥§\99\9d§\9c\93\9d\92\92\9f\95\9b¨\9e¤°¦£¯¥¡§\9d£©\9f´¶«ÁøÉɽÎÎÂÒÒÊÑÑÉÓÏÎÓÏÎÎÌÏÈÆɼ¾»¯±®\94 \94\7f\8b\7fk\7ff`t[UpORmLV^FV^FV^F47.47.47.47.67/7809:2:;3==5>>6A>7B?8DA:EB;FC<GD=GD=GD=GD;HE<IE<JF=LE;LE;LD7LD7MC7LB6NB4MA3MA1L@0JA0I@/I@1G>/E=0D</C;.C;.A:0A:0@91@91=90<8/<71;60:8,:8,;7+<8,?9-A;/C<,D=-H?.H?.K@.LA/M@-M@-O@-N?,N>1M=0L</K;.H:-G9,C9-C9-@:.@:.>:.?;/?=1@>2??3@@4\82('¥KJÂRQ²BA¹11º22¸4(·3'¢6\1c¥9\1f\98?\1d\95<\1a\93?\1d\96\9aA!\96=\1d\9c5,\9e7.¤5,£4+­81¶A:µC9²@6®B6­A5§;.£7*¯9/¹C9ÄC=Á@:À@#ÃC&Þ4%Ø.\1fõ\1d\1eû#$ÿ'+ÿ)-î)#ï*$ß3%à4&ß5&ß5&æ1&æ1&Ò7!Ò7!Í4&Ï6(¿90Â<3ÀbVØzn£fS\92UB\91J8 YGÙ\Xßb^ùISï?IøEIñ>BÙA<Ö>9ÄA7Ã@6ÕD?ßNIùDMô?Hÿ3Gÿ3Gþ3Fü1Dó7Eø<Jõ;Pô:Oö8Rö8Rû8Xþ;[ÿ<cÿ>eÿ?lÿ@mÿCqÿCqûEvúDuõEvôDuõKfïE`óId÷Mh÷MhÿUpý_x÷Yrñj{ñj{Ónv»V^\86B?s/,n=6\7fNGte`\8b|w\9f\95\93¬¢ ®®°µµ·°µ»©®´°·Áµ¼Æ¾ÀÌ¿ÁÍÄÁÌÈÅÐÖÌ×ÞÔßãØÔçÜØèÜÞæÚÜæÖàæÖàßÓÝÙÍ×ÉÄʼ·½ § \8a\91\8ar\84nfxb[tVXqS[jMZiLZiL47.36-36-36-56.67/780891;;3<<4@=6A>7C@9EB;GD=GD=GD=GD=HE<HE<JF=JF=MF<MF<ME8ME8ND8ND8PD6OC5OC3OC3MD3LC2KB3I@1G?2E=0D</D</B;1A:0A:2@91=90<8/<71<71:8,:8,;7+<8,?9-A;/C<,D=-H?.I@/LA/LA/M@-M@-O@-N?,N>1M=0L</K;.H:-G9,C9-B8,@:.@:.>:.>:.><0?=1??3@@4\9065¹_^ÉYX©98±))µ--±-!³/#¨<"­A'£J( G%\9aF$\99E#\9aA!\96=\1d\9f8/¢;2§8/¦7.¯:3¸C<¶D:±?5¨<0¨<0§;.©=0ºD:ÃMCÄC=¸71¹9\1cÁA$â8)á7(ý%&ý%&ÿ"&ÿ $ó.(ô/)ã7)ã7)á7(ß5&å0%å0%Ù>(Í2\1cØ?1Ï6(À:1Ä>5¤F:Ìnb­p]\96YF\9bTBµn\åhdÖYUí=GòBLî;?é6:Ô<7Ô<7À=3¹6,Â1,Ç61ô?Hð;Dÿ1Eÿ4Hÿ6Iÿ4Gö:Hú>LüBWûAVú<Vù;Uü9Yý:Zÿ:aÿ;bÿ?lÿ?lþ@nþ@n÷Ar÷AróCtóCtñGbúPkÿUpóIdé?ZûQlÿg\80ÿd}êctébsÕpxØs{ºvsªfc\8d\U\86UN\90\81\98\93»±¯Äº¸ÂÂÄÇÇÉÃÈοÄÊÅÌÖÆÍ×ËÍÙÏÑÝÚ×âàÝèêàëìâíïäàòçãóçéïãåïßéîÞèèÜæã×áÏÊн武\8f\96\8fv\88ri{e_xZ\uWbqTapSapS00.11/3315536727838938939:2:;3<>3>@5@B5BD7CE8DF9GI;FH:GH6GH6HJ5IK6LK6ML7MK<IG8ED@GFBJIQKJREDT@?OOF7LC4JA2KB3LD7KC6F>3B:/D=5B;3@93?82>95=84;63:52C84C84@85@85;:8<;9<<<<<<?@;?@;D@5EA6LA/K@.O?(O?(@B4?A3I:5G83N38N38J7;J7;>A:6920=+8E3>A&69\1eI9\1fXH.ÒaQºI9£8&¢7% ;'\9d8$\9d:#£@)\9e:#¡=&¬=)­>*³:)°7&²3"²3"\9f8'\9f8'\9f:(¢=+¦A-©D0ªC0¨A.¨=)©>*°;)³>,ÀB3ÄF7Á=0¶2%Ì5*Í6+Ê;+Ì=-Ð<.Ñ=/á6.á6.ñ.,ñ.,ô.+õ/,å8*ä7)Ó>(Ó>(Ü:%Õ3\1eÌ4\1fÏ7"Ä8'À4#Ä@3ÕQDÓHAÙNGñSR÷YXýHMð;@ù4=ÿ:CàDEÞBCÏD?É>9´>2±;/¨?,©@-ÀO?ÄSCÖI@ÒE<é<>ðCEÿ<Fü8BùFLøEKúDPüFRüATø=Pü>XÿD^ÿGkÿBfö=fó:cò>k÷CpùIxüL{ÿNzÿLxðUuíRrÜRiÜRiøWvÿf\85ÿX\81þ?hýQwþRx¿^oÐo\80\7fc_\90tp«\8f\81Á¥\97ÎĺßÕËÚÜÛÛÝÜàÚèâÜêíÕïîÖðöÖîúÚòôâî÷åñðîïñïð÷ôïöóîôðíòîëîèèéããåßáâÜÞÕÑÒÍÉʺº¸¤¤¢\8b\90\89{\80yr|qpzo~\85sy\80nv}k//-00.11/3315616727827829:2:;3;=2=?4?A4AC6BD7CE8FH:FH:GH6HI7HJ5JL7LK6ML7KI:KI:KJFQPLWV^YX`UTdQP`RI:MD5H?0G>/G?2H@3F>3C;0C<4A:2?82>71=84>95<74;63=2.>3/=52>63:97<;9<<<===?@;?@;D@5EA6LA/K@.O?(O?(=?1=?1H94H94N38L16F37E26<?89<55B08E3=@%=@%VF,gW=¼K;«:*\9d2  5# ;'\9d8$\9c9"¢?(\9f;$£?(®?+¯@,µ<+³:)¶7&¶7&¢;*¡:) ;)¢=+¥@,§B.¨A.§@-ª?+¦;'±<*¼G5ÅG8¾@1»7*»7*Í6+Í6+Ê;+Ì=-Ð<.Ñ=/á6.á6.ñ.,ñ.,ô.+ô.+ã6(ã6(Ñ<&Ñ<&Ý;&Ø6!Ñ9$Ô<'Ç;*À4#¿;.ËG:ÐE>ÕJCëMLðRQùDIð;@û6?ÿ=FàDEÞBCÎC>Ç<7³=1¯9-¦=*§>+µD4¿N>ÙLCÖI@é<>ì?Aÿ<Fÿ=G÷DJöCIúDPüFRýBUù>Qû=WÿB\ÿFjÿCgù@iø?h÷CpûGtûKzüL{ÿKwÿGsëPpîSsê`wícz÷VuðOnÿBkÿAjðDjì@fÂarÅduiMI\96zv±\95\87ͱ£ÞÔÊìâØçéèçéèëåóéãñùáûúâüÿâúÿåýÿíùÿðüúøùüúûüùôûøóúöó÷óðõïïñëëîèêìæèãßàÚÖ×ÇÇŲ²°\9b \99\8e\93\8c\86\90\85\86\90\85\8e\95\83\89\90~\86\8d{--+..,/0+12-23.4505606718919:2:<1<>3>@3@B5BD7BD7IG8IG8JI7JI7LI6MJ7NK:NK:KHANKDSRX_^dgh}lm\82il\8bfi\88`XmXPeNGWG@PD>JD>JB=C?:@@<=>:;;83:72=90>:1>:.=9-74+85,:7.<90=;/><0></></E?1E?1J>.K?/O?/N>.P=,P=,5?&6@';<,<=-@91>7/:51940@72C:5U31R0.m!%v*.¡/9°>H¨:) 2!\9d2 £8&¢<&\9e8"\9c8!¡=&¥;%¨>(²?,´A.¼=,»<+¿:+¿:+¯>.¬;+ª9)ª9)«:*­<,­<*­<*´<+¯7&»=.ÉK<ÌG8»6'½1$Ç;.Ô4(Õ5)Ô8+Õ9,Ù9+Ú:,æ3,æ3,ô.+ô.+ò/)ñ.(á6%ß4#Ï:"Î9!à7$Ý4!Ú9'Þ=+Ò<.Ë5'Å8.Í@6Æ;4Ê?8ØD@àLHèJGäFCçB@éDBÖF>ÔD<ÉC8Ã=2³;-¯7)©:)ª;*®6(¾F8×LE×LEã?@ä@AöAHýHOòAGòAG÷CLüHQþEUù@Pú>WþB[ÿEfÿDeýDmþEnþIvÿKxþM{ýLzÿ?rÿAtýIpÿKrûZyÿ`\7fúVqéE`øOlÿVsÐEZÑF[Í\81\85Ãw{[H:\91~p¶\8a\7fÛ¯¤òÚÐÿéß÷ññûõõöóþðíøûêýüëþÿêþÿíÿÿóüÿöÿüüúýýûÿýøÿü÷ÿúöýøôüóôúñòúïóùîòïæçæÝÞÓÏÌÀ¼¹¬¯¦¢¥\9c\9d£\97\9d£\97¢ª\9b\9c¤\95\99¡\92--+--+./*/0+01,23.34.45/7808919;0;=2=?2?A4@B5AC6HF7IG8JI7KJ8MJ7NK8OL;OL;KHASPI]\bnmsyz\8f\81\82\97\7f\82¡}\80\9f}u\8ask\80f_o[TdSMYMGSFAGB=CC?@?;<;83961;7.<8/<8,<8,:7.;8/<90>;2><0><0=;.=;.E?1E?1J>.K?/O?/N>.P=,P=,7A(7A(<=-<=-@91?80=84=84@72C:5S1/P.,q%)\7f37§5?­;E¦8'¤6%¥:(©>,¥?)\9f9#\9d9"¡=&¤:$¨>(²?,´A.½>-½>-Â=.Ã>/´C3°?/¬;+«:*«:*¬;+¬;)¬;)³;*µ=,ÀB3ÆH9Ä?0¹4%¿3&È</Õ5)Ö6*Ô8+Ö:-Ú:,Ú:,æ3,æ3,ô.+ô.+ñ.(ð-'ß4#Ý2!Ì7\1fË6\1eÚ1\1eÙ0\1d×6$Ü;)Ô>0Ð:,Ë>4ÑD:Á6/Á6/Í95ØD@èJGçIFå@>Ý86Ð@8Ï?7Å?4À:/²:,°8*«<+­>-«3%¹A3ÑF?ÔIBâ>?ä@AøCJÿKRï>Dï>DöBKüHQÿGWüCSû?XýAZþBcÿCdþEnÿIrÿMzÿN{þM{üKyÿ<oÿGzÿRyýIpïNmøWvûWrñMhòIfóJgË@Uè]rØ\8c\90UB4eRD¤xmФ\99îÖÌÿèÞùóóÿûûþûÿõòýýìÿýìÿÿìÿÿíÿÿóüÿôýûûùûûùÿýøÿü÷ÿúöýøôþõöýôõýòöýòöõìíëâãÙÕÒÈÄÁ¸»²²µ¬¯µ©°¶ªµ½®®¶§ª²£10+0/*0/*0/*0/*21,33+44,77/88099/;;1==3??5@@4AA5JD4KE5NG5PI7QJ8RK9QK?QK?NJKXTUcdxwx\8c\83\86¯\8c\8f¸\8b\92Æ\8b\92Æ\8c\8bÇ\83\82¾yv­nk¢ed\90[Z\86QPpJIiHGYCBT=<A87<76165086*75)2713828:/9;0>;*?<+B<$B<$I?&I?&J?+K@,JA2I@1I?5I?5S<6Q:4H92E6/<92;813=43=47=36<2J1*N5.~45\8dCD¬:B¨6>§<*¨=+©@+«B-¨?*¤;&¥;%¨>(ª7$­:'¸;)º=+Ã9,Ä:-Ê:/Ì<1Ä@4À<0¼8,º6*º6*»7+»7*º6)½5)È@4ÏA5Æ8,Ã/%Æ2(Í6+Í6+á0(â1)á3(â4)è3*è3*ï0(ï0(õ.)õ.)ð/&ï.%Þ4#Ü2!Ì7\1fÊ5\1d×0\1eÖ/\1dÕ2!Ù6%Ö8,×9-Ó?5ØD:ÔE=Î?7Å<2ÊA7ÑMAÕQEËI<¿=0Á=.Á=.¼=,º;*´9)´9)¶<-¸>/¸8-¼<1É>9ÎC>ØBCÜFGéJNðQUì?Cì?CòCJùJQýKYùGUøBXùCYøA_úCaûFiÿLoÿNwÿOxÿMwýJtÿErÿO|ÿRyüHoõJjþSsûWoòNfäK]áHZÛ\eÿ\93\9cÿµ¶ø\98\99\8fHBs,&«h`Õ\92\8aóÆÁÿÝØÿðîÿù÷ÿýÿøöûú÷ÿú÷ÿþ÷ÿþ÷ÿþúûÿûüüýøýþùÿûõÿúôÿùöÿøõÿö÷ÿõöÿóõþòôüòñòèçäÜÙ×ÏÌÍÊÁÊǾÉ˽Ê̾ÅÏǼƾ¶À¸54/43.21,10+10+10+33+44,66.66.88.::0<<2>>4??3@@4IC3KE5OH6QJ8SL:SL:RL@QK?OKL[WXij~~\7f\93\8b\8e·\96\99Â\97\9eÒ\98\9fÓ\99\98Ô\93\92Î\8e\8bÂ\87\84»\80\7f«wv¢ml\8cfe\85]\nUTfLKPCBG>=8:94:8,97+27127157,68-<9(?<+D>&E?'I?&I?&J?+K@,JA2I@1I?5I?5Q:4O82G81D5.96/85./90/906<217-F-&S:3\88>?\91GH©7?¢08§<*¨=+¨?*©@+¨?*¨?*ª@*¬B,ª7$­:'¸;)º=+Ã9,Ä:-Ê:/Ì<1ÅA5Â>2¿;/½9-¾:.¾:.½9,¼8+Á9-ÍE9ÏA5À2&Á-#Í9/Ó<1Ì5*â1)ã2*â4)ã5*è3*è3*ï0(ï0(õ.)õ.)ð/&ï.%Þ4#Ü2!Ì7\1fË6\1eÛ4"Ú3!Ö3"Ö3"Ó5)Õ7+Ñ=3Ó?5èYQáRJÒI?ËB8ÊF:ÍI=ÇE8¿=0½9*½9*º;*¸9(´9)¶;+¹?0¼B3ÁA6¾>3Æ;6ÌA<ÙCDÝGHçHLëLPí@Dì?CñBIùJQþLZüJXûE[üF\÷@^ùB`úEhÿJmÿMvÿOxÿNxþKuÿKxÿKxÿLsÿLsÿVvÿ\|ùUmèD\ñXjêQcèirÿ\92\9bñ\91\92æ\86\87°ic\9aSM®kcÐ\8d\85꽸ÿÚÕÿðîÿöôýûÿûùþüùÿüùÿÿøÿÿøÿþúûþúûûü÷ûü÷ÿûõÿûõÿûøÿú÷ÿøùÿõöýñóüðò÷íìðæååÝÚÞÖÓÙÖÍÜÙÐÜÞÐÞàÒÙãÛÎØÐÄÎÆ::288055-33+22*22*33)33)55+66,77-99/;;1==3>>4??5KB1MD3RG5UJ8VJ:WK;TJATJAPJT]Wakk\8d\81\81£\8d\94Ë\99 ×\9c¦í\9f©ð\9e£ô\9a\9fð\97\9bå\93\97á\91\95Õ\8c\90Ð\86\89¾\80\83¸xz¡np\97cc\7fVVrNM_HGYECPB@M<>M:<K;:@98><90=:1C>*D?+CA*CA*AB0BC1?E;>D:;DA;DAA;IC=KCANECP@GM@GM>HG=GFEH?;>5L9*]J;\82O>\82O>\89A2\85=.§<(¨=)©>*©>*¬?*®A,±>+°=*³6$¶9'Á7*Â8+Ê6*Ë7+Ò8.Ô:0Ï:3Í81Ì70Ì70Ï81Ï81Î7.Ì5,Ô<1Õ=2Ô7.Í0'Ñ3(Ù;0Û:0Õ4*è0&è0&ì0'í1(ó.(ó.(ö,(õ+'÷.'÷.'í3'ì2&Ü7$Ú5"Ï9!Î8 Ò:%Ñ9$Ï6$Î5#Ñ5(Ó7*Ñ7-Ñ7-ãNGêUNäZPÛQGÉI>ÃC8»C5·?1µ=$µ=$¶<%µ;$¸9&¹:'À</Ä@3ÉC:Å?6É@:ÐGAÓIGÒHFÓIG×MKèDEæBCêDHóMQúPYùOXøL\øL\õD^õD^÷EeûIiÿNrÿQuÿPwÿOvëZwéXuðWsô[wÿ^vþ\tôSeëJ\õZhñVdåOZó]háKWèR^ëP^êO]·hdÍ~zã©¥ÿÍÉÿêçÿîëû÷öÿüûöÿþõþý÷ýýöüüøú÷øú÷ùøóùøóÿúôÿûõÿûøÿûøÿööþòòûííøêêïáàêÜÛâÙÒâÙÒåßÓíçÛïîÜòñßéôðÛæâÏÚÖ==5;;388044,22*22*33)33)44*55+66,88.::0<<2>>4??5KB1MD3RG5UJ8WK;WK;TJATJAPJT]Wall\8e\83\83¥\8f\96Í\9d¤Û¢¬ó¦°÷ª¯ÿ¥ªû¢¦ð\9f£í\9f£ã\9c à\98\9bÐ\94\97Ì\91\93º\87\89°zz\96jj\86`_qWVhSQ^PN[KM\GIXDCI?>D>;2=:1A<(B=)CA*CA*AB0BC1?E;>D:;DA;DAGAOLFTSQ^\Zg\ci]dj[edZdc[^UORI_L=o\M\8dZI\84Q@\89A2\8aB3«@,«@,«@,«@,¯B-°C.°=*¬9&µ8&·:(Â8+Ã9,Ë7+Ì8,Ó9/Õ;1Î92Í81Í81Î92Ò;4Ò;4Ð90Î7.ÛC8Ñ9.Ï2)Ô7.Û=2Û=2Ú9/Ø7-è0&é1'í1(í1(ó.(ó.(ö,(õ+'÷.'÷.'í3'ì2&Ý8%Û6#Ð:"Ï9!Ï7"Ï7"Ï6$Î5#Ò6)Ô8+Ñ7-Î4*É4-âMFðf\ëaWÐPEÁA6µ=/²:,¶>%¶>%·=&¶<%¸9&¹:'À</Ã?2ÉC:ÈB9ÎE?ÕLFÕKIÏECÎDBÒHFéEFçCDêDHòLPûQZúPYúN^úN^÷F`öE_÷EeûIiÿNrÿQuÿRyÿRyéXuí\yù`|úa}ùWoðNfòQcûZlú_mÿftéS^ðZeëUaò\hìQ_êO]±b^ÀqmÔ\9a\96þÄÀÿäáÿéæøôóÿýüùÿÿùÿÿúÿÿùÿÿûýúúüùûúõûúõü÷ñþùóÿùöÿùöÿôôúîîöèèòääêÜÛçÙØâÙÒæÝÖîèÜøòæüûéÿÿíòýùãîêÔßÛ@>2@>2><0<:.:8,86*74+63*52)52)52)74+96-=:1@=4B?6I@/LC2RG5TI7VI8WJ9YLD[NFPHSXP[dd\88}}¡\89\93Ñ\96 Þ\9aªø¡±ÿ¨´þ¨´þª´ü©³û©²÷¦¯ô§¬î¥ªì\9f¡Þ\97\99Ö\8c\8dÅ~\7f·sp¥gd\99\Z\8cUS\85YP\7fYP\7fVOqMFhC?N=9H<<:??=<?4?B7?G<>F;9B?:C@=FKAJO=XuMh\85aq\8beu\8fzr\89\7fw\8e\8fh{\83\o\99S]\99S]ªPO«QP­I:¢>/\9e8"\9f9#©<(ª=)­>*¯@,´?-´?-¹<*¸;)½5'¾6(Ç5(É7*Ò5,Õ8/Ú7.Û8/Ø61Ú83Ú83Ù72Ù6/Ø5.Û81Ý:3çC:à<3Ù6-â?6ý[Pÿmbÿ]RãA6è0&ê2(ó0*ò/)ö)&ô'$ø(&ú*(ô/)ô/)è3(å0%Õ2#Ó0!Ñ6$Ô9'Å=%Æ>&Ê<&Ë='Ð:)Ð:)Ñ7+Ñ7+Ú@6Ð6,ÜGA÷b\äWPÍ@9Æ?9¹2,µ;#¶<$º<%º<%½:(¾;)Ã;-Å=/Æ=3ÌC9ÕPIÝXQÐQJ¿@9½@:ÈKEáGEàFDåKKëQQîRVëOSìLVîNX÷RcõPaôLeóKdúMkÿRpÿStÿQrïZwíXuõXsù\wÿ\tÿZrýXiüWhÿeqùYeý`kü_jëIVêHUüTeùQb´oh­haÉ\8f\8bì²®õÓÑÿçåøðíýõòóþú÷ÿþõÿÿòÿü÷ýùùÿûþú÷ùõòýúóþûôÿ÷ôüôñþôòþôòõçæçÙØäÖÓßÑÎá×ÍðæÜûôâþ÷åþüçÿÿìõþûçðíÚãàB@4A?3?=1><0<:.:8,85,74+52)52)52)74+96-<90?<3A>5H?.KB1QF4SH6UH7VI8XKCYLDRJUXP[bb\86zz\9e\86\90Î\93\9dÛ\98¨ö\9f¯ý©µÿª¶ÿ­·ÿ®¸ÿ®·ü­¶û¯´ö®³õ¨ªç¡£à\97\98Ð\8b\8cÄ\81~³ur§ig\99b`\92`W\86`W\86]VxVOqNJYFBQBB@AA?;>3@C8AI>?G<9B?<EBFOTQZ_Sn\8ba|\99t\84\9eu\85\9f\89\81\98\8c\84\9b\9bt\87\8fh{£]g¤^h°VU¨NM¨D5£?0¤>(¦@*¥8$¦9%¨9%©:&®9'®9'´7%´7%»3%¾6(É7*Î</Ù<3Ú=4ß<3Þ;2ß=8Þ<7Ý;6ß=8äA:çD=æC<äA:ä@7åA8â?6Û8/Ó1&×5*êH=þ\Qö>4í5+ì)#ì)#ù,)ý0-ü,*ø(&ö1+÷2,ì7,é4)Ù6'Õ2#Ð5#Ñ6$Ä<$Å=%É;%É;%Î8'Í7&Î4(Î4(Ó9/Ï5+Ò=7åPJãVOÚMFÉB<¶/)·=%·=%»=&º<%½:(½:(Á9+Â:,Æ=3ËB8ÓNGÜWPÑRKÂC<¾A;ÆICâHFáGEåKKìRRîRVëOSìLVíMWùTeùTeúRkúRkþQoÿSqÿRsÿRsæQnìWtú]xþa|ÿ\tüVnùTeøSdøXdôT`ú]hú]hñO\öTaÿWhòJ[«f_\9eYR¸~zߥ¡ëÉÇÿÞÜóëèýõòòýùöÿýôÿþòÿü÷ýùùÿûÿûøû÷ôüùòüùòþöóüôñÿõóþôò÷éèêÜÛå×ÔÞÐÍßÕËïåÛüõãÿøæþüçÿÿìõþûçðíÛäáEA5D@4C?3A=1?;/=9-;7,;7,73(73(73*84+:6-<8/?:4@;5E?1HB4NE4PG6SF5UH7WI>YK@UKSYOW_^~vu\95\81\8aÅ\90\99Ô\94¤ï\9c¬÷ª´ù«µú®¸ý°ºÿ²»ÿ²»ÿ³ºÿ²¹ÿ®²û¨¬õ ¢ì\96\98â\8d\8cØ\81\80ÌwtÁol¹j_£g\ bZ\93]U\8eSSwKKoCDV=>P86;?=BO?@O?@W:>`CGwRY\87bi§i\98±s¢¾w¡¼u\9fÉm\92Çk\90ÓZyÈOnÒ@UØF[ÚEKÍ8>º6)º6)±?%¯=#®;(®;(²:)³;*¸;)º=+À;,Á<-Å6(È9+Ô:0Ù?5á>5á>5â;3à91Û81Ø5.Ø3-Þ93èA9ìE=éB:ã<4â;2Û4+×5(Ù7*Ò2$Ë+\1dÒ6'åI:õK<íC4î3,ê/(ø**ú,,û*-ù(+ë+(í-*ã5.â4-Ù5+Ö2(Ô2'Ô2'Ê9&Ê9&Ì9'Î;)Ñ:)Ñ:)Ô8+Ô8+Ð4(Ø<0Ó:4Ô;5æNMïWVÙEEÄ00À;(À;(¿:'¿:'Á9)À8(À8*¿7)Ä>2Æ@4ÎL?×UHÏSGÃG;¾D7ÂH;ØKB×JAÛNGáTMãUSßQOßNQàORðXdó[gú[mú[müVnøRjúPküRmÿBhÿKqÿWvÿWvÿWnüSjúWhþ[l÷[höZgñdlïbjÜegãlnÕrmÃ`[\8deYxPD\96nfÀ\98\90Û¹·óÑÏðààÿòòôúöøþúóÿýòÿüøþüúÿþÿûýý÷ùùúòøùñú÷ðú÷ðÿ÷ôÿ÷ô÷îéíäßæÜÓÜÒÉÜÕÅìåÕü÷áÿûåÿýäÿÿæõüõéðéÞåÞHD8GC7FB6D@4B>2@<0?;0>:/:6+95*84+95,:6-<8/>93?:4D>0GA3LC2NE4RE4SF5UG<WI>VLTXNV[Zzpo\8f|\85À\8c\95Ð\91¡ì\99©ô¦°õ¨²÷«µú­·ü°¹þ°¹þ±¸ÿ±¸ÿ®²ûª®÷¤¦ð\9d\9fé\96\95á\8c\8b×\82\7fÌ|yÆwl°pe©g_\98aY\92XX|PPtFGY>?Q:8=?=BO?@TDEdGKqTX\88cj\95pw®p\9f³u¤¼u\9f¶o\99¿c\88¸\\81ÃJi¸?^Å3HÓAVÛFLÐ;A¿;.Ã?2¶D*­;!ª7$ª7$­5$®6%µ8&¸;)À;,Â=.ÐA3ÑB4Ù?5Ú@6ß<3Ü90Ü5-Ú3+Ò/(Ð-&Ó.(Ø3-à91â;3ß80Û4,Ü5,Ñ*!Ì*\1dØ6)áA3Ý=/Ð4%É-\1eíC4óI:ÿE>ø=6÷))ñ##ö%(ý,/î.+î.+á3,ß1*Ö2(Ô0&Ò0%Ò0%Ì;(Í<)Ð=+Ò?-×@/ØA0Û?2Û?2Ñ5)èL@ãJDÎ5/ßGFòZYÞJJÕAAÂ=*Á<)À;(¿:'Â:*Á9)À8*¿7)Á;/Â<0ÈF9ÐNAËOCÃG;½C6½C6ÓF=ÒE<ÖIBÝPIÞPNÛMKÚILÜKNíUaó[gþ_qÿ`rýWoôNfõKfùOjÿIoÿNtÿRqÿNmûRiÿXoÿbsÿgxÿfsýanñdlðckÞgiÝfhËhcÃ`[\88`TlD8\83[S®\86~̪¨èÆÄêÚÚÿððòøôöüøòÿüñÿûøþüûÿÿÿüþÿùûúûóùúòûøñüùòÿú÷ÿú÷ýôïöíèëáØßÕÌÜÕÅíæÖýøâÿýçÿýäÿþåóúóèïèàçàKH7JG6IF7GD5EB3C@1B>2A=1<8-<8-;7.:6-;60<71>93?:4A?2DB5JE2LG4PE1QF2VF6WG7XLLXLLXVlnl\82z\82³\8b\93Ä\90\9fà\98§è§­÷¨®øª°ú¬²ü®´þ®´þ¯³ý¯³ýª®ø¨¬ö£§ñ\9f£í\99\9dç\91\95ß\89\8d×\83\87Ñ\81\80Æxw½imª`d¡[a\91TZ\8aTQpLIh^CV^CVz<G\82DO©EMµQYÎRZÒV^ðHióKlêPhåKcÙHWÑ@OÌ6?Ä.7Ø7<äCHåGDÚ<9È@2ÎF8½K3³A)·<,·<,»<+½>-Ä?0ÇB3ÑC5ÓE7ÚC8ÙB7Û=2Ù;0Ú6-Ø4+Ù2)Ù2)Ó2(Õ4*Ù6-Û8/Ü8.Û7-Ü5,Ü5,Ò0#Ø6)Õ8)Ï2#Ê3 Ñ:'Ñ>*Ï<(Ô=,ßH7÷I@öH?ü46ó+-ô),ø-0ñ86î53Þ50Ú1,Õ0,Õ0,Ú.,Û/-è50è50å9/æ:0â<.â<.Û>/Û>/Ï7*ïWJöaZÐ;4Ï;9äPNÛFHäOQÏ<2Ë8.Ç7,Æ6+Ä:-Å;.À<-¾:+º;*»<+¿B0ÅH6ÆI7ÂE3½@.¼?-ÇG:ÆF9ÊJ?ÑQFÓRLÐOIÑMKÓOMæ[`ë`eüfrÿiuü]oïPbòLbøRhÿQrÿPqôUkñRhêakôkuøluógpüdqõ]jè`jïgqÐxvÁig\97m]\98n^rmYRM9kWL\91}r½\9e\9cßÀ¾ëÕ×ÿëí÷öôûúøöÿþõþýûüþþÿÿÿûÿÿ÷ÿùÿõ÷ýóùüóûþõÿÿøÿþ÷ÿùñþ÷ïñéÞäÜÑàÛÈïê×üúáÿþåþÿàþÿàõùëìðâæêÜNK:NK:LI:JG8HE6FC4EA5D@4@<1?;0=90<8/<71=82>93?:4B@3DB5JE2LG4PE1PE1UE5WG7WKKVJJVTjki\7fy\81²\8a\92Ã\8f\9eß\96¥æ¦¬ö§­÷©¯ù«±û¬²ü«±û­±û¬°ú¨¬ö¦ªô£§ñ¡¥ï\9e¢ì\9a\9eè\95\99ã\91\95ß\92\91×\89\88Î{\7f¼sw´nt¤io\9fkh\87da\80z_rv[n\8eP[\93U`·S[¾ZbÎRZËOWå=^æ>_ÝC[ÜBZÓBQÎ=LÌ6?È2;çFKèGLßA>Õ74Å=/ËC5¼J2¶D,ÀE5ÀE5ÄE4ÅF5ËF7ÍH9ÕG9ÖH:Õ>3Ó<1Õ7,Ó5*Ö2)×3*Û4+Ü5,Ù8.Ü;1ß<3ß<3Ü8.Ù5+Û4+Ü5,Ñ/"Ü:-Ú=.Î1"Å.\eÎ7$Ð=)Ì9%Ï8'Ñ:)å7.î@7ÿ=?ÿ<>þ36ö+.æ-+ã*(Ô+&Ô+&Õ0,Ú51ä86æ:8ì94ì94ç;1å9/Þ8*Ü6(Ó6'Ò5&Í5(çOBÿkdÛF?È42ÖB@Ó>@êUWÖC9Ð=3È8-Æ6+Ä:-Æ</Á=.À<-¹:)»<+½@.¿B0¿B0½@.»>,º=+ÃC6ÃC6ÈH=ÏODÒQKÐOIÑMKÓOMé^cíbgýgsÿnzÿcuôUgöPfüVlÿRsÿPqõVl÷Xnôkuüs}ôhqâV_ö^kö^kêblönxã\8b\89Õ}{¡wg\9fuermYRM9fRG\84pe²\93\91ݾ¼ëÕ×ýçé÷öôûúøöÿþõþýûüþþÿÿÿúÿÿ÷ÿûÿ÷øþôùüóýÿ÷ÿÿøÿþ÷ÿüôÿüôúòçíåÚéäÑôïÜþüãÿýäýþßÿÿáöúìðôæìðâQN=PM<NK:MJ9KH9IF7GC7FB6C?4B>3@<3>:1>93>93?:4@;5?A6BD9IF5JG6PE/PE/UF3WH5UJDSHBTQbkhyz\81«\8b\92¼\8f\9e×\95¤Ý¥¦ù¦§ú¨©üª«þ¬­ý¬­ý«®ûª­ú§«ô¥©ò¡¨ì §ë ¨é\9f§è\9c¥æ\9a£ä\95\9eß\90\99Ú\89\95Ñ\84\90Ì\81\8d½}\89¹\85\7f£\81{\9f\96i\80\92e|·Q_¸R`âENãFOø9@õ6=áA1áA1ÑK2ÑK2¿Q0»M,»H+¹F)áVCØM:Ü92Ø5.Û64Ý86Ø64Ó1/»<+»<+¾:+¾:+Ã7*Â6)Å3&Ä2%Î4(Î4(Ó2(Ó2(×3)Ø4*Ú6,Û7-Ü>3Û=2Û;/Ú:.Ú8-Ø6+×5(Õ3&Ô4&Ó3%Í4"Ï6$Î=(Ð?*Æ:!¾2\19Å:'Ã8%Ö/&ß8/ü:;ÿ?@ÿ8=ø16æ/1â+-Ô/-Õ0.Ü44á99é9<ê:=þ-2þ-2õ/.ô.-ä2(á/%Ó3#Ñ1!Å4#Ï>-økaâUKÆ84ÏA=Ê;=áRTæIDÞA<Ð92Ë4-Å8.Ç:0À>.¾<,·<*º?-»A,¹?*º;(º;(½<'¾=(¹?0¹?0¾D7ÆL?ÊPEÉODÊMGÌOIæabçbc÷gpÿpyÿhxö[köUgü[mñ`qñ`qÙknÜnqÝ\82\8b\86éwwÓaaûcrÿkzöatùdwï\95\97÷\9d\9f¹\99\8a¨\88y^pVBT:ZTFpj\§\8b\8aÛ¿¾ðÖÙûáäýô÷ÿøûúþÿøüÿüûÿÿþÿÿùÿÿõÿøÿ÷ôþóöüòûÿ÷ÿÿøüýõÿüóÿÿöÿûïôðäðîÙøöáþþâýýáüýÝÿÿáýþî÷øèõöæRO>QN=PM<NK:LI:JG8HD8HD8EA6C?4A=4@<3?:4?:4@;5@;5@B7BD9IF5JG6PE/QF0UF3WH5SHBRGASPajgxz\81«\8c\93½\8f\9e×\95¤Ý\9f ó¡¢õ¤¥ø¦§ú¨©ù©ªú©¬ù¨«ø¦ªó¤¨ñ §ë §ë¡©ê¢ªë¡ªë ©ê\97 á\96\9fà\94 Ü\92\9eÚ\91\9dÍ\8d\99É\96\90´\92\8c°\97j\81\95h\7f»Uc¸R`Ý@IÝ@Iõ6=õ6=ãC3áA1ÐJ1ÐJ1½O.¹K*¸E(¸E(àUBÔI6Ý:3â?8éDBæA?Û97Õ31ÅF5ÅF5ÇC4ÅA2É=0Å9,Å3&Ã1$Ê0$Ë1%Ò1'Õ4*Ø4*Ù5+Ù5+Ù5+áC8Û=2×7+×7+Û9.Ü:/Ø6)Ó1$Ø8*Ð0"Ê1\1fÐ7%Ë:%Å4\1fÆ:!ÐD+Ã8%Æ;(Û4+Ü5,ð./ô23ý6;ÿ;@ÿKMýFHêECæA?å==â::â25Þ.1ù(-ù(-ó-,ó-,å3)ä2(×7'Ö6&Ã2!¿.\1dñdZê]SÎ@<ÓEAÉ:<ÝNPîQLãFAÓ<5Ì5.Ä7-Æ9/¾<,½;+¸=+¼A/¼B-¸>)·8%·8%½<'¿>)²8)²8)¸>1ÁG:ÅK@ÄJ?ÅHBÈKEä_`ä_`óclþnwÿgwö[köUgü[móbsôctÚloÝorß\84\7fí\92\8dö\84\84ärrÿkzÿw\86õ`sçReé\8f\91ÿ¯±Ï¯ ±\91\82ZlRAS9WQCicU¡\85\84Û¿¾ñ×ÚøÞáþõøÿùüúþÿøüÿüûÿþýÿÿøÿÿôþøÿ÷òüñõûñùÿõýþöúûóþûòÿÿöÿÿóùõéöôßüúåÿÿãüüàüýÝÿÿáÿÿñüýíúûëXO@WN?VM>UL=TK<RI:QH9QH9LC4LC4JA2I@1H?0G>/G>/H?0CC9DD:IF5KH7QI2RJ3SK4SK4UNFTMEVUgji{y}­\8a\8e¾\8f\98Û\96\9f⪠÷©\9fö¥ þ¥ þ\9f¤ÿ¡¦ÿ\9f«ÿ ¬ÿ\9e­ò\9c«ð\9f©ç ªè©©ï««ñ¯¨ø®§÷\9e©û\99¤ö\95¡Û\93\9fÙ®¡½®¡½Ê~\8aµiuÕBLÕBLï7Cï7Cæ;Cæ;CÓDFÓDFâ;Cá:BÙEEÌ88ÊC?ÊC?¾/+ÚKGìFJéCGî;Aì9?ä;>ã:=Ö>;Ô<9ÌA:È=6ÈC:ÑLCÉK=»=/³8)¶;,º8*»9+Å5,Å5,Ð.)Ò0+Ü0.ß31èA1à9)Ý0 ß2"è7'ë:*à7$Ù0\1dÎ4\1cÍ3\eÇ5\1eÇ5\1eÉ3$Ê4%Ñ3(Ò4)Í/&Ï1(Í7)Î8*Ê9&Ê9&Ò7#Ó8$à2'ã5*ï31î20í,1ë*/é,3ë.5ö.1ó+.ë.*ì/+å7,ä6+Õ8%Ñ4!À/\1aÃ2\1dæYHè[JÊ<2ÝOEÄ3.ÙHCÝQP×KJÑC?Ê<8Ç7.Æ6-È9)Ê;+Ç<)Å:'¾:%½9$¹<(º=)µ>*´=)±9+´<.¸>/¹?0½?0½?0Â@2ÃA3ïk_ôpdèc\óng÷qnèb_ðjiútsÿjzÿeuéhlådhìddòjjølkølküxvÿ\81\7fñ]kùesÏjrÿ¤¬¡³\9b}\8fw]sLF\5MQ6lpU¥\95\88ȸ«êÕÒÿîëÿôôÿôôù÷øûùúúþÿüÿÿûÿÿúþÿçÿîáþèãúæéÿì÷ÿòøÿóýþðüýïÿüìÿûëÿúèÿøæýøâýøâûùàüúáúýöýÿùþÿúXO@XO@WN?VM>TK<SJ;RI:RI:NE6MD5LC4JA2I@1I@1I@1I@1DD:EE;JG6LI8RJ3SK4SK4SK4UNFUNFVUgji{x|¬\87\8b»\8c\95Ø\92\9bÞ¤\9añ¤\9añ \9bù¡\9cú\9d¢ÿ\9f¤ÿ\9eªþ ¬ÿ\9e­ò\9c«ð\9e¨æ\9d§å¤¤ê¤¤ê§ ð¦\9fï\9c§ù\9a¥÷\97£Ý\94 Úª\9d¹¤\97³¿s\7fª^jÕBLÕBLï7Cï7Cæ;Cæ;CÓDFÓDFá:BÞ7?×CCÎ::ÊC?Ç@<Á2.áRNèBFæ@Dì9?é6<à7:ß69Ò:7Ñ96ÐE>Ç<5Â=4ÌG>ËM?ÁC5¶;,´9*¹7)º8*Å5,Æ6-Ó1,Õ3.à42ä86å>.á:*á4$á4$å4$å4$Ý4!Ú1\1eÒ8 Ñ7\1fÉ7 Ê8!Ï9*Ï9*Ò4)Ð2'Ò4+Ó5,Ï9+Í7)Ç6#Æ5"Í2\1eÏ4 Ý/$Þ0%é-+é-+ë*/ë*/é,3ê-4ð(+ò*-ì/+ì/+á3(à2'Ô7$Ô7$Ñ@+º)\14ÒE4Í@/ÕG=çYOÔC>ÔC>âVUÞRQÙKGÑC?Í=4É90Ç8(Ç8(Ç<)Å:'¿;&¿;&»>*¼?+·@,¶?+±9+³;-·=.¸>/»=.¼>/Â@2ÄB4ìh\ònbæaZðkdõolça^ðjiûutÿm}ÿk{îmqãbfä\\ëccúnmÿvuúvtÿ{yìXfó_mÍhpÿ\9f§\9a¬\94t\86n]sLKa:SW<quZ¬\9c\8fÔÄ·ôßÜÿòïÿøøÿööúøùûùúùýþúþÿùýþøüýéÿðâÿéãúæèÿëõÿðöÿñýþðþÿñÿüìÿüìÿúèýöäøóÝ÷òÜ÷õÜúøßöùòùüõûþ÷YPAYPAXO@WN?VM>UL=TK<TK<PG8OF7NE6MD5LC4LC4LC4LC4GE9HF:MH5OJ7RJ3SK4VK5VK5VMDVMDYVglizx{¦\85\88³\88\91Ì\8e\97Ò\99\98Ú\99\98Ú\9a\99å\9c\9bç\9a\9fð\9d¢ó\9e§ò ©ô\9fªè\9d¨æ\9a¥Ý\98£Û\9b¡ß\9a Þ\9b\9bá\99\99ß\99\99×\9a\9aØ´\8d±\8a¿Óy\9fÉo\95ÔSgÄCW×BF×BFÜ@AÜ@Aß>Cß>Câ<Fâ<FÞ=B×6;ÑA@Ï?>ÇC>À<7Ã83åZUâ?Bâ?Bç:>ä7;Ø88Õ55Ê;3Ë<4ÒH>Å;1»7*ÅA4ÊL=ÅG8»>,µ8&¹5&»7(È6)Ê8+×4-Ú70æ95é<8Õ5)Ö6*Û4+Ü5,Ý5*Ý5*×<*Ø=+Á6!¿4\1fµ7!¶8"»9+»9+º4)·1&è<8ç;7Ü>2×9-É;'Æ8$Æ8 Ç9!Ð7%Î5#Ô0$Ô0$×0*Ø1+Õ2-Ô1,Ö/'Ú3+Ù9-Ø8,Î7$Ì5"Ë:%Ï>)ÑC/À2\1eçSEÏ;-Ü?:ßB=ëHIõRSêVTçSQãPIÜIBÖC9Ï<2È9)Å6&Á8&À7%º9&º9&¶=*·>+²?-°=+¬;-®=/±=.±=.µ=-·?/½B3ÀE6Ú\Pæh\âa[îmgôpnåa_êehñloæO^ò[jëmpèjmíbeñfiÿooÿuuúrtùqséN^ñVfÏdnÿ\94\9e\97¡\89nx`VoEMf<Y`?szY®£\91ÞÓÁþíåÿ÷ïÿý÷ÿûõùþ÷ùþ÷øÿúøÿú÷ÿùõÿ÷âÿçÚýßÚ÷ÛÝúÞêùâíüåöûçúÿëýúçþûèÿøæøñßñê×îçÔòëØ÷ðÝûøñýúóÿýöZQBYPAYPAXO@WN?VM>VM>UL=SJ;RI:QH9PG8OF7OF7PG8PG8IG;JH<NI6PK8SK4TL5VK5VK5ULCVMDYVgkhyux£\81\84¯\84\8dÈ\8b\94Ï\93\92Ô\94\93Õ\95\94à\97\96â\95\9aë\98\9dî\98¡ì\9a£î\9a¥ã\97¢à\94\9f×\91\9cÔ\93\99×\91\97Õ\92\92Ø\8f\8fÕ\84\84Â\86\86Ä£|±¢{°Ãi\8fº`\86ÌK_ÃBVØCGØCGÝABÝABà?Dà?Dã=Gã=Gà?DØ7<Ï?>ÓCBÅA<º61Ç<7æ[Vâ?Bâ?Bé<@æ9=Ù99×77Ì=5Î?7ÎD:Â8.¸4'¿;.ÄF7ÃE6»>,¶9'»7(¾:+Ë9,Í;.Ú70Ý:3ç:6ê=9Ô4(Õ5)Ú3*Ü5,Þ6+Þ6+×<*×<*Å:%Å:%¼>(¼>(½;-¾<.Â<1Ä>3îB>ì@<ßA5Ù;/Ê<(Ç9%Ç9!É;#Ó:(Ï6$Ò."Ò."×0*Ø1+Ó0+Ñ.)×0(Ø1)Õ5)Ô4(Ì5"Ì5"Ë:%Î=(Ê<(Ì>*ñ]OÜH:Ð3.Î1,ã@AùVWÿvtÿrpÿleó`YäQGÔA7Ä5%½.\1eÂ9'À7%º9&º9&µ<)¶=*±>,¯<*¬;-­<.°<-¯;,³;+¶>.¼A2ÀE6ËMAÞ`Tâa[ñpj÷sqä`^â]`ã^aÜETìUdêloêloògj÷loÿqqÿssùqsñikäIYêO_Îcm÷\8c\96\91\9b\83is[RkAPi?_fEv}\²§\95æÛÉÿóëÿ÷ïÿùóÿùóùþ÷ûÿùùÿû÷ÿùòüôîøð×úÜÎñÓÍêÎÎëÏÛêÓßî×ëðÜñöâöóàùöãûôâóìÚéâÏåÞËêãÐðéÖøõîú÷ðüùò\P@[O?[O?ZN>YM=YM=XL<XL<VJ:VJ:UI9TH8TH8TH8UI9UI9KG;LH<QJ8RK9WL6WL6WL6WL6TLAUMBYV_ifost\93~\7f\9e\83\87\8b\8f¾\8b\92¾\8c\93¿\8e\93Ë\90\95Í\91\96Ú\93\98Ü\94\99Ý\95\9aÞ\97\9dÙ\93\99Õ\8d\94È\89\90Ä\85\8cÃ\81\88¿}\83Áz\80¾\8aq\91\8br\92¾]\86¾]\86ïCké=eñ5Mð4LàECàECÑMAÑMAÞFEÞFEô9Jô9JÞEGÖ=?ÉB>ÏHD»A6¯5*ÇB;ÜWPÝCAÝCAâ?@à=>Õ@:Õ@:ÉG:ÊH;Æ</À6)»6%½8'¿>+¿>+½<'¼;&Ã:(Å<*Ñ;,Ò<-Þ7.ß8/æ81è:3é77æ44ç//è00ë20ê1/Þ1+Ù,&Í0)Ð3,É91Æ6.Ä00Æ22Ñ8;Ù@Cõ47ó25â7/Ý2*È7$Æ5"À:!Â<#È=&Å:#È5#Ê7%Ñ9+Ó;-Ñ;-Ï9+ÈA.Ä=*¿:'¾9&À<'Â>)Å='Ä<&Ï>-Ë:)Ú<1àB7Ù-+å97ã/2æ25Ó61Ø;6ÞD<åKCéQFëSHåVFäUEÈ@0Å=-»>,¹<*³@.³@.¯@/®?.¨=-©>.«=,ª<+«<+®?.µA2¹E6ÅLAÛbWàc]ípjóqsâ`bå_få_fúhuÿmzìpráegìadùnqÿuyÿvzýlsñ`gêDXíG[Ö^j÷\7f\8b\99\99\81ww_XvDZxFhwN|\8bb´°\95æâÇÿúçÿüéûþíûþíõÿñöÿòðÿïêýéáòßÛìÙÂëÁ»äº»Þ¶½à¸Æà½ÊäÁØçÊßîÑëïØïóÜ÷òßñìÙéàÑäÛÌéÝÑîâÖñçÞñçÞòèß[O?[O?ZN>ZN>YM=YM=YM=XL<XL<WK;VJ:VJ:VJ:VJ:WK;WK;MI=NJ>RK9TM;XM7XM7XM7XM7TLAUMBVS\c`ijk\8ast\93y}¬\82\86µ\83\8a\84\8b·\86\8bÃ\89\8eÆ\89\8eÒ\8b\90Ô\8b\90Ô\8c\91Õ\8e\94Ð\89\8fË\82\89½{\82¶u|³ov­io­ek©\83j\8a\82i\89µT}·V\7fê>få9aò6Nô8PáFDáFDÒNBÒNBßGFßGFõ:Kõ:KÞEGÙ@BÉB>ÏHD·=2®4)ÌG@ÑLEÚ@>Ø><Ý:;Ý:;ÖA;×B<ËI<ÊH;À6)Á7*¾9(½8'º9&º9&¼;&¾=(Ä;)Æ=+Ò<-Ó=.Ý6-Ý6-ã5.å70å33ã11æ..é11ð75ñ86æ93á4.Ï2+Ò5.Ë;3È80Æ22È44Ó:=ÛBEð/2ð/2à5-Ý2*É8%È7$Â<#Ä>%Ã8!Ä9"Ë8&Ï<*Ö>0ÙA3ÙC5ØB4ÏH5ÉB/À;(¾9&À<'Â>)Ä<&Â:$Ì;*Ê9(Í/$ãE:Ü0.ì@>ã/2Ü(+Ð3.Ò50Ò80Ó91Ñ9.Í5*Â3#¿0 ÌD4È@0º=+¶9'­:(­:(ª;*©:)¨=-©>.«=,«=,«<+¬=,²>/µA2ËRGßf[àc]èkeïmoåceïipônuÿmzÿp}îrtähjògjÿuxÿvzÿosúipí\cìFZêDXÓ[gïw\83\9d\9d\85\86\86nl\8aXm\8bYz\89`\8a\99p¸´\99àÜÁùòßþ÷äÿÿñþÿðóÿïïþëæùåÛîÚÑâÏÉÚÇ®×­ªÓ©¬Ï§°Ó«ºÔ±½×´ÊÙ¼ÑàÃáåÎæêÓñìÙðëØìãÔæÝÎçÛÏèÜÐåÛÒäÚÑâØÏZN>ZN>YM=YM=YM=XL<XL<XL<XL<WK;WK;VJ:VJ:WK;XL<XL<QI<RJ=TK:VM<XM7YN8YM7YM7WMAVL@VPR_Y[c`sjgzqp\8fzy\98x\81 z\83¢}\84²\80\87µ\85\86Æ\87\88È\89\88Ì\89\88Ì\88\87Ã\84\83¿\7f|±yv«to¥oj kc\9eh`\9b\92[`\90Y^ÁFXÈM_û9S÷5Oÿ2?ÿ6CíA=íA=ÙK?ÙK?áEFáEFô;Kô;KÕFBÕFBÃD;ÇH?°</­9,ÎPDÄF:Ñ<8Ì73Í2.Ð51Í@7ÑD;ÂI8¾E4À9&Á:'À;(¾9&¼:$¼:$¾:%¿;&Æ8$É;'Õ:(Ö;)ß5(ß5(å3)æ4*ñ&*ó(,ü)/ÿ-3ÿ.6ÿ/7ÿ17ÿ17ý4:ý4:ù4=ù4=ÿ2Cÿ3Dÿ/Gÿ/G÷(0ø)1ê20è0.Õ7,Ô6+Î;+Ï<,Ë3%Ï7)Ü8.à<2ä<3å=4ç<4è=5ÒM<ÍH7ÉA1Ã;+Â9'Â9'Æ9(Æ9(É1$Ñ9,â=7èC=ß//Ý--ë46ë46Ö5+×6,Ö8-Ø:/Ô</Ò:-Ë<.É:,ÒM>ÌG8½?1¶8*¬6(¬6(©8*©8*«;-¬<.­>-­>-«<+ª;*¬=,­>-ÀKAØcYÝc^ælgîpsçilôqyúw\7fòdpûmyðuxêorûntÿy\7fÿq|ÿdoüblðV`öF]ï?V×Uaîlxª \87\9e\94{z\9bdx\99b\82\95g\8d r­±\8eÈÌ©ÝàÃçêÍçö×âñÒÓîÍËæÅÁß»¸Ö²³Íª­Ç¤\98Ä\8f\96Â\8d\9aÅ\90\9fÊ\95©Ê\9b«Ì\9d¶Ï¥¼Õ«ÎÙ¹Ôß¿äãÎèçÒíáÕèÜÐåÔÍâÑÊÝÎÇÙÊÃÕÆ¿YM=YM=YM=XL<XL<XL<XL<XL<XL<WK;WK;WK;WK;WK;XL<YM=RJ=SK>UL;VM<YN8YN8ZN8YM7YOCWMATNPZTV[Xk`]pgf\85po\8epy\98r{\9av}«z\81¯\80\81Á\83\84Ä\85\84È\85\84È\7f~º|{·yv«ur§sn¤pk¡og¢ld\9f\87PU\86OTº?QÅJ\ü:Tù7Qÿ4Aÿ6CíA=íA=ÙK?ÙK?áEFáEFô;Kô;KÑB>ÔEAÁB9ÅF=®:-¯;.ÒTH¿A5Ë62Ä/+Ä)%È-)É<3ÎA8¾E4¹@/Â;(Ã<)À;(¿:'¾<&À>(À<'½9$Ä6"Æ8$Ó8&Õ:(ß5(ß5(å3)æ4*û04ÿ59ÿ6<ÿ4:ÿ+3ÿ&.û(.ý*0÷.4ó*0í(1ð+4û.?û.?ø":ð\1a2ò#+ô%-ç/-æ.,Ó5*Ñ3(Ê7'Ë8(Ï7)Õ=/ã?5ä@6å=4â:1ã80ã80ÓN=ÑL;ÏG7Ç?/À7%¾5#Ä7&É<+Í5(Ð8+çB<Ý82à00Ï\1f\1fî79é24Ó2(Ó2(Ñ3(Ñ3(Í5(Í5(Æ7)Å6(ßZK×RCÇI;½?1³=/²<.¯>0°?1«;-¬<.®?.­>-«<+ª;*ª;*ª;*°;1ÏZPÛa\êpkôvyëmpôqyõrzÿv\82ÿ|\88ø}\80énqôgmÿsyÿq|ÿitø^hîT^÷G^î>UÔR^égs®¤\8b©\9f\86\7f iz\9bd\82\95g\8a\9do¢¦\83´¸\95ÈË®ÕØ»È׸Áб¯Ê©¥À\9f\9cº\96\97µ\91\96°\8d\94®\8b\89µ\80\89µ\80\8fº\85\96Á\8c Á\92¡Â\93«Ä\9a±Ê Á̬ÈÓ³ÚÙÄáàËêÞÒäØÌßÎÇÙÈÁÑ»̽¶Æ·°ZM<ZM<ZM<ZM<ZM<ZM<ZM<ZM<WJ9XK:XK:XK:YL;YL;YL;ZM<XL>YM?ZM<ZM<[O9[O9[O9\P:YM=YM=VMHXOJXQX\U\`Zfb\hcg\82jn\89op\9crs\9fxv·\80~¿\88\82È\89\83É\89\8a\8e\87\90\93\92g\9f\85Z\92¡C; B:¹?:ÁGBÝ?>Ý?>ó=<üFEö=;õ<:í==î>>èBFéCGäCIãBHÈC<Ä?8·A5´>2­>-­>-ÁC7ÍOCÊ5/Ñ<6Î1,Î1,ÑD:Ê=3°7&¸?.¼5!À9%Ã<(Á:&À9%À9%Å:%Æ;&Î9%Ï:&×5&Ô2#Ú-\1fÞ1#ì6+ô>3ô90ó8/ø1*õ.'ü(%û'$ý%&ý%&ü%*ø!&ü ,ÿ'3ÿ%;ÿ!7ÿ\154ÿ\121ù)6ð -ã$+ç(/Ü./×)*Õ,)Ü30è21ê43õ34õ34÷/1ô,.ò*,ð(*Ø;2Ô7.Ô70îQJ¼"\1aÄ*"áD=Ê-&Ì-'Ü=7çD=ß<5Ö/)Ö/)á6/æ;4Ø@2Ô<.Ì6(É3%É7*Í;.È</Å9,êbVáYMÇC7º6*¼9/º7-²2'´4)³/#³/#±1$²2%°6'²8)±<+³>-°:.¹C7Ö\Wêpkðswôw{úx\82óq{ÿz\84þu\7fîwyîwyÿs{ÿs{ÿhwÿdsÿ^míL[øB[÷AZÐJUã]h©\9b\80¥\97|} fx\9ba~\94c\82\98g\94\9fu\9c§}\9d©\83\9b§\81\8d¦~\89¢z}¡sx\9cnv\9ckx\9em\7f¡o\82¤r\81¯q\85³u\8b¹{\8f½\7f\94½\83\96¿\85\9c¿\89\9dÀ\8a¦»\92ª¿\96¾Â©Ë϶ÝÓÇÝÓÇÛÈÄÒ¿»Ç¹¸¾°¯·©¨YL;YL;YL;YL;YL;YL;YL;YL;WJ9XK:XK:XK:YL;YL;YL;ZM<XL>YM?ZM<ZM<[O9[O9[O9\P:[O?[O?WNIXOJWPWZSZ\Vb^XdZ^yae\80gh\94kl\98rp±}{¼\85\7fÅ\86\80Æ\8d\81¿\8a\8c\86\94\99\96\86[\93\9d?7\99;3¯50¹?:Ù;:Ü>=ð:9õ?>õ<:ô;9í==î>>èBFèBFá@Fß>DÂ=6¿:3²<0°:.©:)«<+¿A5ÊL@ÚE?ØC=Ô72Ò50ÐC9ÎA7µ<+®5$¾7#Á:&Ä=)Ã<(Ã<(Ã<(Æ;&Æ;&Î9%Ì7#Ô2#Ö4%â5'ç:,ï9.ï9.ê/&ê/&ò+$ò+$ü(%þ*'ÿ*+ÿ,-þ',ú#(ý!-ÿ&2ÿ#9ÿ\1d3ÿ\110ÿ\ f.ð -û+8ò3:è)0×)*Ü./Û2/×.+ð:9ï98ö45ô23÷/1÷/1ù13û35Ò5,Ù<3Õ81âE>àF>Ë1)Ï2+À#\1cÓ4.Þ?9çD=à=6Ù2,Ø1+à5.â70Ò:,Ï7)Ë5'Ê4&Ê8+Í;.È</Æ:-ëcWàXLÅA5¸4(¾;1¿<2¸8-»;0º6*º6*·7*¶6)±7(±7(­8'­8'²<0¹C7ÓYTçmhíptõx|ý{\85÷u\7fÿz\84ÿv\80ðy{ðy{ÿs{ÿrzÿfuÿ`oþ]líL[øB[øB[ÔNYâ\g¡\93x\9b\8drt\97]q\94Zw\8d\{\91`\89\94j\8d\98n\8a\96p\86\92ln\87_m\86^f\8a\g\8b]j\90_p\96ex\9ah|\9el\80®p\84²t\89·y\8d»}\92»\81\93¼\82\98»\85\9a½\87\9d²\89\9f´\8b°´\9b»¿¦ÎĸÒȼÔÁ½Î»·Ãµ´¹«ª±£¢YL;YL;YL;YL;YL;YL;YL;YL;WJ9XK:XK:XK:YL;YL;YL;ZM<[K<\L=\L<\L<]N;]N;[O9\P:_RA^Q@\PB[OAYNHZOI\QO]RP\RjcYqe^\87jc\8col¥|y²\86\87\9b\84º\97\80¶£r\9f o\9c»n\98Át\9eÂc\8f°Q}Æ86À20µ6-»<3ÁF7ÅJ;ÙB9ÛD;õ;>õ;>û7Aü8BëBGè?DÏECËA?»=1¸:.¬;+«:*¨9(©:)¾>1ÉI<ÜA<Õ:5Ú64Ý97ÙE;áMCÊK:³4#À9&À9&Â;(Å>+É>+È=*Ë:)Ê9(Ò6'Î2#Ö.!Ý5(î<2ò@6ñ91ê2*Ö9&Ö9&Þ4#Ý3"ç/%ç/%ë.(ì/)ì/-è+)í(1ð+4ù&9ô!4ú\17\162í*8ò/=î6@ï7Aë:Dí<Fë6?ã.7ó/;ó/;ö-7ö-7ô-2õ.3ñ10ñ10Ö1-á<8Ú53à;9ÿkjåA@Ñ/-Ð.,Ù:6Þ?;ßB;Ù<5Ò8,Ð6*Ð7)Ï6(À9%¿8$¿7'Á9)Á<-Â=.Ä;1Ä;1ê`VÞTJÊ:2À0(Í81Ò=6Ò91Ô;3Ý:3Ý:3Ø;2Ö90Ê;-Æ7)»7(¹5&·;/¼@4ÏTMãhaëoqöz|ÿ\80\87ú{\82ÿy\82ýw\80ñz~ò{\7fÿs}ÿpzÿbsÿ\müYjíJ[÷?WùAY×QZÝW`\92\85e\89|\e\86Od\85Nm\83Rq\87V{\88\{\88\t\85[p\81W^{Ma~P^\86Re\8dYl\95]s\9cdz g}£j\83­n\86°q\88µt\8b¸w\8b¹x\8cºy\90º{\91»|\90±|\8e¯z\9a¨\85¢°\8d¹´¡Á¼©Ê¹²È·°±¬°¦¡¥\9c\97\9bYL;YL;YL;YL;YL;YL;YL;YL;WJ9XK:XK:XK:YL;YL;YL;ZM<[K<\L=\L<\L<]N;]N;[O9\P:^Q@]P?[OAZN@XMGYNHZOMZOMZPh^Tl`Y\82e^\87li¢yv¯\83\83\9a\83¹\9d\86¼°\7f¬­|©Åx¢Åx¢Åf\92³T\80×IGÔFDÇH?ÆG>ÅJ;ÅJ;ÙB9ÚC:õ;>ö<?ý9Cþ:DìCHè?DÍCAÈ><½?3¸:.¬;+«:*©:)ª;*½=0ÆF9Ö;6Ð50ß;9åA?ÛG=èTJØYH»<+Á:'¾7$¾7$Ã<)É>+È=*Ë:)Ë:)Ï3$Î2#Ù1$á9,ñ?5ñ?5í5-å-%×:'Ö9&ß5$Þ4#ç/%æ.$é,&é,&è+)æ)'ë&/ð+4ù&9ö#6ÿ\1d9ÿ <ü9Gé&4å-7ÿLVÿ^hÿOYó>Gò=Fì(4î*6õ,6ø/9ö/4ò+0è('ã#"Õ0,Ú51Õ0.æA?ÿqpøTSÞ<:èFDÛ<8Ú;7Ö92Ô70Ñ7+Ð6*Í4&É0"¼5!¼5!¾6&Á9)À;,¿:+Â9/Ä;1ãYOØNDÈ80Â2*Ò=6ØC<Ö=5×>6â?8ã@9ßB9Ý@7ÑB4Í>0Á=.¾:+¶:.¸<0ÊOHßd]ëoqø|~ÿ\83\8aü}\84üv\7fûu~ò{\7fó|\80ÿs}ÿoyÿ`qþ[l÷TeëHYô<T÷?WØR[ÖPY\7frRviIVw@XyBcyHi\7fNs\80Tu\82Vq\82Xo\80Vj\87Yn\8b]m\95at\9ch{¤l\7f¨p\83©p\84ªq\84®o\86°q\88µt\89¶u\88¶u\88¶u\8d·x\8e¸y\91²}\8c­x\93¡~\97¥\82®©\96ºµ¢Ç¶¯È·°°«¯¢\9d¡\96\91\95ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8YJ7ZK8ZK8ZK8[L9[L9[L9\M:]J;^K<]L:]L:]N;]N;]N9^O:\O<[N;[N;[N;^N>_O?_O@`PAdLZgO]bTngYsjd\90wq\9d\7fx¤~w£\9a|\9e¦\88ªÌ\87\9cÊ\85\9açr\85ál\7fèTjÙE[û?MþBPéMPâFIËH@ÈE=ÑC?ÔFBí@FîAGö>Hø@JæGKáBFÅF@¿@:ºB4µ=/«<+ª;*©:'©:'¾8-Æ@5æB@à<:î@?í?>Ü:5éGBåYLÖJ=ÆA0½8'º2"¿7'È;*È;*Í7)Î8*Ð0$Ô4(â5.è;4ð93í60ë.*ç*&ß0-à1.è00ê22ò16ô38ó4;ô5<ç-8ç-8æ0?é3Bï.Ií,Gø,Oÿ3Vî@Jã5?ëALÿ^iÿjwÿXeõDTóBRë5Dê4Cæ7>æ7>Ø=8Ô94Â9)½4$Ç4*Â/%Ì91î[Só^ZîYUØC?ÞIEÙD@Ñ<8Ë7-Ë7-Ì:+Ì:+È7$Å4!®<$­;#°;'´?+µ;,²8)»8.Â?5ÜMEÖG?Ñ4/Î1,ä;4è?8ç60ç60ó-.ô./í4/í4/á90ß7.Î:,Ì8*¼6*¼6*ÈIBÞ_Xênlù}{ÿ\86\88û\7f\81ùs|út}ð|\7fñ}\80ÿr\7fþmzÿ`sþ[nôQdìI\ó=T÷AXØW\ÎMRlgAe`:Vr?ZvCfzIk\7fNt\81Vw\84Yw\8a]y\8c_t\96dw\99gv¡i{¦n\7f«n\80¬o\84ªm\84ªm\88¬o\8a®q\8a²s\8b³t\86µo\87¶p\86¸s\88ºu\8e¶z\88°t\8e£x\92§|ª¬\94¹»£ÍÁµÑŹ¶ºÅ§«¶\99\9d¨ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8YJ7ZK8ZK8ZK8[L9[L9[L9\M:]J;^K<]L:]L:]N;]N;]N9^O:ZM:[N;[N;\O<_O?`P@`PA`PAcKYdLZ^PjbTnf`\8csm\99zs\9fyr\9e\91s\95£\85§Î\89\9eÌ\87\9cæq\84Ýh{äPf×CYó7Eû?MêNQâFIÉF>ÆC;ÑC?ÔFBì?Eí@Fõ=Gö>HäEIß@DÃD>¾?9¸@2²:,¨9(¨9(¨9&©:'½7,Ã=2ëGEåA?ê<;ä65Ö4/á?:é]Pôh[×RAÆA0½5%¿7'Ç:)Æ9(Ì6(Ï9+Ñ1%×7+æ92è;4ê3-æ/)é,(ë.*è96è96ï77ð88ö5:õ49ó4;ò3:í3>î4?í7Fî8Gò1Lð/Jþ2Uÿ;^å7AüNXÿ_jÿ]hÿUbúP]õDTê9Iõ?Ní7Fß07Ú+2Ì1,Í2-Â9)Á8(É6,Ã0&ÜIAüiaßJFäOKÏ:6Ð;7àKGÕ@<Ë7-Ë7-Í;,Í;,Ë:'É8%°>&­;#¯:&²=)²8)®4%»8.ÈE;ÕF>ÔE=Ó61Ò50å<5æ=6å4.å4.ñ+,ò,-ë2-ì3.â:1á90Ò>0Ñ=/½7+º4(ÂC<×XQåigø|zÿ\86\88ü\80\82ùs|ûu~ñ}\80ñ}\80ÿp}ûjwÿ^qýZmòObïL_õ?VøBYÛZ_ÊINc^8b]7YuB`|In\82Qs\87Vz\87\~\8b`\7f\92e\83\96i{\9dk}\9fmz¥m|§o~ªm\7f«n\83©l\83©l\87«n\89­p\88°q\88°q\84³m\84³m\84¶q\86¸s\8b³w\86®r\8e£x\95ª\7f±³\9bÂĬØÌÀÝÑÅ¿Ãέ±¼\9d¡¬ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8YJ7ZK8ZK8ZK8[L9[L9[L9\M:]J9^K:^K:^K:^M;^M;]N9^O:^O:^O:_P9`Q:aQ:aQ:aQ:`P9iKMjLNaO_eScfc\80tq\8e{w\92yu\90\94u\84¤\85\94Õ\83\87Õ\83\87ûlnôegÿMQò?Cÿ(Cÿ1Lú?Põ:KÚ?EÙ>DÔBEÓADÞBFÞBFá@FâAG×EFÓABÂA<¾=8´>0®8*¦9%¨;'¬;)®=+Ä:/Ê@5ä::â88æ/1ä-/Ý52ß74ãOCÿk_îiZ×RCÆ</Ã9,É:,Ç8*Í5*Ò:/Ö3*Ú7.ç83æ72é0-ç.+í0.ñ42ÿ-Fÿ,Eÿ)Dÿ'Bÿ#?ÿ\1f\1f\1d9ô'Eõ(Fò/Qó0Rò+Vò+Vÿ2cÿ>oçJSþajÿitôXcëJZíL\éDUØ3DäBOÙ7D¿10·)(£6"§:&\99F&\9aG'¸?,µ<)Ù[MÜ^PÊG=ÈE;¾71Ã<6àUNÑF?È:.Æ8,È;)Ç:(Ç9#É;%§A(£=$¥<'§>)©8(¦5%¼<3ÎNEÖE@×FAÜ73Ø3/í62ì51î-&ò1*ÿ(,ÿ(,û--û--ì5-ì5-Ý=1Ý=1Ç;.¿3&½=2ÏODßb^öyuÿ\87\87ÿ\83\83þx\81ÿy\82ó\7f\82ð|\7fþm|÷fuýZoùVkîK^îK^ñ>Tó@VÖX[ÁCFZX/_]4ZuBd\7fLv\87Z}\8ea\84\8fe\86\91g\86\99l\8a\9dp\84¦t\84¦t}¨p|§o}©j}©j\82©j\83ªk\88§l\89¨m\86­n\86­n\7f±j\80²k\81µk\84¸n\87´s\83°o\8d§x\95¯\80²¸\9cÂȬÕξÙÒ¶ÂÒ£¯¿\91\9d­YJ7YJ7YJ7YJ7YJ7YJ7YJ7YJ7YJ7ZK8ZK8ZK8[L9[L9[L9\M:]J9^K:^K:^K:^M;^M;]N9^O:`Q<`Q<aR;aR;aQ:`P9_O8_O8jLNkMObP`gUeif\83xu\92\7f{\96~z\95\98y\88¤\85\94Ò\80\84Ó\81\85ýnpûlnÿTXøEIÿ,Gÿ2Mú?Pö;LßDJàEK×EHÑ?BÜ@DÛ?CÞ=Cß>DÔBCÑ?@Á@;½<7´>0®8*§:&ª=)±@.´C1Ê@5ÐF;Ý33à66ã,.æ/1ã;8Ö.+Ê6*éUIÿzkã^OÍC6Ç=0Ê;-Ç8*Í5*Ó;0Ú7.Û8/ä50ã4/é0-ê1.ò53õ86ÿ";ÿ";ÿ!<ÿ!<ÿ\1e:ÿ\1c\1d\1c\1c\1e<é&Hì)Kì%Pï(Sÿ1bÿ@qÿený`iôXcîR]ñP`íL\ã>OÕ0AÝ;HÓ1>½/.¸*)¤7#§:&\96C#\95B"¯6#²9&ÓUG¹;-Â?5¹6,¹2,ÊC=ãXQÓHAÇ9-Ä6*Ä7%Â5#Ã5\1fÇ9#§A(¡;"£:%¥<'§6&¦5%À@7ÕULÙHCÚIDß:6Ø3/ê3/é2.î-&õ4-ÿ(,ÿ'+ø**÷))ç0(æ/'×7+×7+Ì@3¿3&¹9.ÈH=Ù\Xóvrÿ\88\88ÿ\86\86ÿ{\84ÿ|\85õ\81\84ð|\7fükzôcrùVköShèEXëH[î;Qï<RÒTWº<?SQ(\Z1To<a|Ix\89\\83\94g\8b\96l\8c\97m\8b\9eq\8f¢u\8a¬z\88ªx~©q{¦nz¦gz¦g\7f¦g\7f¦g\85¤i\87¦k\83ªk\84«l|®g~°i\80´j\82¶l\89¶u\85²q\8f©z\97±\82±·\9b¿Å©ÏȸÑʺ²¾Î\9f«»\8c\98¨[J6[J6[J6[J6[J6[J6[J6[J6\K7\K7\K7\K7\K7\K7\K7\K7[I;\J<ZM=ZM=XM;YN<ZR=\T?^S?^S?^Q@_RAcQCbPBbOA`M?nJLmIKbP^kYghl\89w{\98}\86­\82\8b²\8f\83§\97\8b¯À\86\9cÀ\86\9cæx{åwzúj_õeZëOZáEPà>IäBMíCNé?Jé;Dé;Dä;@â9>Ú<;Ù;:Ï?6Ì<3Ã;/¿7+ :$ªD.¬;)©8&Ã?3ÊF:Ò;4Î70Ú70Ú70Û7+Ú6*Û:&Ü;'Ù;"Õ7\1eß82öOIòZOÛC8Å8'Ë>-ÓB1Î=,Õ0*íHBå,1ï6;÷5@ð.9ÿARí(9û%'ÿ*,ÿ*,ö "ù%$þ*)ü*)ñ\1f\1eî"%ú.1ê",î&0î.=ã#2ÿXlç*>ÿ]hþ\gÿW`ýS\÷NQïFIÜA<Ó83ÄB2ÄB2°C.¥8#\974\1f\996!\9d9)\9e:*¨71ª93ÄDA¼<9À00Å55Ç31ÖB@ÛLFÙJDÑD:Æ9/Å2(Ç4*Ì4)Ë3(¸<0³7+²,!­'\1c¸* Å7-ÔA7ÙF<æODÜE:Û7.Ö2)é-+î20ÿ.1ÿ.1ò12ñ01ó/0ó/0ð0+ð0+ã7+â6*Ñ?0Â0!º@1·=.Ò_Xæslÿ\8f\8e÷\85\84û\86\8cú\85\8bÿr\84ÿfxÿ[tÿZsùWnñOfôEbê;Xë>Zé<XÆfj\988<IL/UX;Uw:e\87Jt\98[z\9eax d|¤h~§k\7f¨l~§k~§k|¦g{¥f|£d|£d~¢b\7f£cz¥m|§o~ªk\7f«l~®d~®d\80±b\82³d\86´k\87µl\89±u\8a²v\95´\8a¡À\96«Ä¤¬Å¥¡¯°\8b\99\9ay\87\88\K7\K7\K7\K7\K7\K7\K7\K7]L8]L8]L8]L8]L8]L8]L8]L8\J<]K=\O?\O?ZO=ZO=ZR=[S>^S?]R>]P?\O>`N@aOAcPBcPBnJLnJLdR`n\jlp\8dz~\9b\7f\88¯\84\8d´¡\95¹\9b\8f³µ{\91³y\8fâtwê|\7fÿpe÷g\ø\gìP[èFQëITõKVñGRí?Hê<Eã:?á8=Ù;:Ø:9Ï?6Ì<3Ã;/À8,¤>(¦@*©8&¬;)Ã?3Â>2Ì5.Ô=6Ö3,Ö3,Ø4(Ø4(Ø7#Ú9%Ú<#Ù;"Ü5/èA;æNCáI>Í@/Å8'Ê9(Ï>-Þ93ñLFè/4ð7<ø6Añ/:ÿ>Oë&7ø"$ù#%ý')ÿ)+þ*)û'&ú('ü*)ð$'ñ%(í%/ÿ9CÙ\19(ñ1@û>RÝ 4ÿhsÿ`kÿW`þT]÷NQêADØ=8×<7»9)ÃA1·J5«>)\952\1d\8e+\16\8d)\19\8e*\1a\9d,&­<6ÒROÉIFÄ44Å55Ð<:êVTÖGAÕF@ÎA7Å8.Å2(È5+Ï7,Ï7,¼@4¹=1¼6+¼6+Ä6,É;1ÔA7ÚG=áJ?ÙB7Ú6-×3*ê.,î20þ-0þ-0ò12ñ01ó/0ó/0ð0+ð0+ã7+â6*Ò@1Â0!¸>/¶<-Ñ^Wévoÿ\90\8f÷\85\84ù\84\8aø\83\89ÿo\81þewÿZsÿYrùWnòPgòC`ì=ZîA]ïB^·W[\9337HK.UX;Vx;e\87Jr\96Yw\9b^v\9eby¡e|¥i}¦j|¥i{¤hz¤ey£d{¢c{¢c}¡a}¡ax£kz¥m|¨i}©j|¬b|¬b~¯`\80±b\82°g\84²i\87¯s\85­q\8a©\7f\8e­\83\8f¨\88\8b¤\84u\83\84`noP^_\K7\K7\K7\K7\K7\K7\K7\K7]L8]L8]L8]L8]L8]L8]L8]L8]L8_N:`Q>`Q>[P>ZO=YPAZQBZRGZRGZOKZOK]OO_QQcSVeUXeTZgV\c]wmg\81ov­{\82¹\82\88Ò\86\8cÖ\9a\8eÖ\98\8cÔ¯\80®¯\80®Õ~\8eÜ\85\95í~uæwnþcgñVZìHOëGNöHQõGPòAIî=Eä7;ã6:Ø:7Ø:7Ê@5È>3½@.º=+ª?-¨=+ª9)µD4ÅI=¹=1º1'Ä;1Ë7-Ì8.Ó7*Ô8+Ø7%Ø7%Û9$Ý;&Ý4/Ü3.ÞB6êNBÛH8Ç4$É2!×@/å=4òJAê01ð67ù5?ö2<ÿBNô0<ë)*æ$%æ$$ô22ñ//ë))è('ó32ç+,õ9:â-2Þ).å5?ÿR\ê>JÿZfø_bïVYîMRîMRëEGß9;Ô95Ø=9À6,Å;1½A5·;/®5,ª1(¥*%\9f$\1f\9a%\1e¦1*ÈD@À<8½++Å33×A@ô^]Ð@8ÒB:ÐB8Ê<2Í9/Ò>4Ü?6Ý@7á=<Þ:9ä:;è>?è<<ä88æ>;ïGDâA9Ü;3Ù5,×3*æ0,ê40õ20ô1/ó12ò01õ/0õ/0ñ0+ñ0+ä6+ã5*ÓA2Ä2#´:+µ;,Í\Tëzrÿ\92\91ù\87\86ý\80\88ú}\85ÿn~øeuÿZrþXpÿOkúIeô?^ñ<[ãKbèPg\92HE~41JM0Y\?[z?h\87Lp\94Wt\98[s\9b_w\9fcy¢fz£gy£dx¢cw¡bw¡bx\9f`y a{\9fa{\9fay¢fz£gz§d{¨ey©]zª^|­\~¯^\84²g\87µj\8b±t\86¬o\85¥v\80 qx\92on\88eRa\@OJ2A<]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8\K7^M9_P=`Q>[P>ZO=XO@YPAXPE[SH_TPbWSgYYi[[l\_n^ap_esbhpj\84ys\8dw~µ\81\88¿\85\8bÕ\89\8fÙ\92\86Î\98\8cÔ¶\87µ°\81¯Ês\83Îw\87ë|sð\81xÿmqþcgøT[ñMTõGPòDMð?Gí<Dã6:â59×96Ø:7ËA6É?4¾A/»>,§<*ª?-¯>.¹H8ÍQEÅI=½4*¹0&Ë7-Í9/Ö:-Ù=0Û:(Ø7%Ù7"Ü:%Ý4/Ú1,Ü@4êNBàM=Ï<,Ï8'ÛD3ß7.êB9é/0í34õ1;ù5?ÿJVÿFRÿ=>ó12ä""ï--í++ó11ê*)î.-ô89Õ\19\1aç27à+0ç7AòBLÿVböJVÕ<?Ù@Cá@EÞ=Bß9;Ý79Õ:6Ó84Å;1Â8.·;/¾B6ÉPGÑXOÌQLÀE@®92°;4ÏKGÔPLãQQìZZèRQïYXÆ6.Í=5ÐB8Î@6Ò>4ÖB8ßB9ßB9ä@?à<;æ<=ëABê>>ä88ç?<õMJÛ:2Ø7/Ø4+Ø4+ç1-ê40ô1/ó0.ó12ò01õ/0õ/0ñ0+ñ0+ä6+ã5*ÔB3Æ4%°6'³9*ÇVNî}uÿ\92\91ú\88\87ü\7f\87ø{\83þk{öcsýWoùSkûJföEañ<[ó>]åMdéQh\7f52z0-OR5_bE_~Ci\88Mp\94Ws\97Zq\99]v\9ebx¡ex¡ev av au\9f`u\9f`w\9e_x\9f`{\9fa{\9fax¡ez£gz§dz§dx¨\y©]z«Z|­\\84²g\87µj\8c²u\88®q\85¥v}\9dns\8djg\81^Q`[BQL7FA]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]L0^M1_O6_O6ZN>YM=VOGWPHUPT\W[f_omfvog~og~pf\81qg\82im\86mq\8aov¤u|ªx\80É\7f\87Ð\85\89ä\88\8cç\98\8cÞ\98\8cÞ¢\84\94v¨ lx¤p|ºxh¿}möoi÷pjþhg÷a`úQTñHKï<@é6:æ68å57Ù:6Ù:6ËA4Ê@3»B/¸?,­7+µ?3¯;.°</ÄRGÐ^SÄNB³=1º:-º:-É:,ÐA3Ý=/×7)Ý3&à6)à1,ã4/á?4åC8áE6ÞB3ß?/à@0ß.&é80ï/.ï/.ï,0÷48ÿLTÿV^ÿ\^ýPRÜ/1Þ13Ú..óGGä88Û//×/.ç?>×45Ö34ÿehÛ?BÆ-0È/2¾('Ñ;:áACØ8:Ú14à7:Û89Ï,-É32Ð:9ÒFEÞRQî_c÷hløbmðZeÁB;ÅF?ç\YõjgÿonÿkjäJH×=;Ç4,Ð=5ÕE:ÓC8Õ>3Ô=2Ú91×6.û/;ö*6÷)6ø*7ó*4ò)3ó9:ÿHIÞ3,Ý2+Ø4*Ù5+â4+ä6-î3.î3.ö/2õ.1ø-0ø-0ô.+ô.+æ5+å4*Ô@2Ê6(¯4%³8)¿NFí|tÿ\91\90û\89\88ÿz\8aÿs\83÷jzðcsøTlñMeÿ<`ý9]ñ:Y÷@_ÊXbÆT^_8)c<-VY>ehMb\7fIl\89Sq\92Yt\95\s\99^x\9ecy¡cx bt\9e^t\9e^u\9d^u\9d^w\9e_x\9f`{\9fa| bx¢bz¤dz¨`z¨`y¨Zy¨Z{ªY|«Z\7f«^\83¯b\87®m\84«j\87¥s\83¡oz\95lp\8bbdueZk[QbR^O:^O:^O:^O:^O:^O:^O:^O:]N9]N9]N9]N9]N9]N9]N9]N9^M1_N2_O6^N5ZN>ZN>YRJ[TL^Y]gbftm}{t\84}u\8c{s\8azp\8byo\8apt\8dtx\91u|ªy\80®y\81Ê}\85Î\83\87â\87\8bæ\98\8cÞ\95\89Û \82´\9e\80²³\7f\8b®z\86¨fV\95SCÌE?ÕNHèRQìVU÷NQòILð=Aç48è8:ç79Û<8Û<8ÍC6ËA4¼C0¹@-°:.·A5ª6)¢.!¼J?Øf[ÙcWÊTH»;.µ5(Â3%Ë<.Û;-×7)Þ4'á7*Þ/*å61ß=2Ü:/Û?0áE6ãC3Ú:*á0(ç6.ò21î.-ì)-ó04ÿAIÿOWÿ]_ÿY[ã68ä79×++öJJä88Û//Û32Î&%Ê'(ùVWÚ>AÖ:=Ñ8;¹ #Á+*Õ?>ãCE×79Õ,/Ú14Ô12Ë()Ë54áKJðdcöjiôeiñbfö`k÷alÏPIÏPIç\YãXUæNMàHGÍ31Í31ÕB:ÞKCáQFÛK@ØA6Ó<1Ö5-Ó2*ú.:ù-9ø*7õ'4ò)3ø/9ù?@ÿHIÝ2+Ý2+Ù5+Ù5+â4+ä6-î3.ï4/ö/2õ.1ø-0ø-0ô.+ô.+æ5+å4*Ó?1Í9+®3$²7(¶E=êyqÿ\8e\8dü\8a\89ÿw\87üo\7fôgwîaqöRjíIaü8\û7[ò;ZùBaÆT^²@J^7(d=.X[@ehMb\7fIk\88Rq\92Yt\95\u\9b`x\9ecx bu\9d_r\9c\r\9c\s\9b\s\9b\u\9c]w\9e_z\9e`{\9fax¢bz¤dy§_y§_x§Yx§Yy¨W{ªY}©\\81­`\85¬k\84«j\89§u\88¦t\83\9eu{\96mu\86vn\7fogxh^O<^O<^O<^O<^O<^O<^O<^O<]N;]N;]N;]N;]N;]N;]N;]N;`O1aP2_P;^O:XOFZQH[V]_Zahf|qo\85yy\9f~~¤}{¬yw¨wt©wt©ox³s|·w\7f½z\82À\80\84Á\84\88Å\90\8eÀ\95\93Å\9d\93µ \96¸®\9d£¸§­É°\9cÀ§\93§\8bf\8anI\9fD/¡F1±C4¶H9ÖIBàSLîHHçAAê<=é;<ã;:ã;:Ø?7Ö=5É=0Æ:-º:1¾>5®5,©0'·K>ÎbUÐiZÎgXÁP@²A1¹3'À:.Ö8-Ô6+à2+ä6/à2+ã5.Þ8,Þ8,à>/åC4å>.Û4$é3(è2'ô20ñ/-î.-ò21ð67ù?@îOS÷X\åFJñRVÕ49èGLÚ:<ãCEÕ78Ì./Ì24âHJÏ9:Î89¶$%Ð>?à88ä<<ë=?æ8:à-3Ü)/ß28è;AêNRú^bÿmsÿjp÷_kòZf÷YhøZiòe^è[TìTQ×?<Ï0-Ó41Ò3/áB>âKBèQHèTJßKAÛ>5×:1Û60Û60ú*7ÿ0=ÿ/<ü*7û-7ÿ8BÿDEýABÞ3,Þ3,Ü5,Ü5,á3*ã5,î3,ð5.÷/2ö.1ù-0ù-0õ.+õ.+ç5+æ4*Ó=/Ò<.±3%´6(±<5étmý\89\89ý\89\89ÿp\83þgzïbrì_oøPjïGaÿ5\ÿ6]ìB_òHe¥[Z\8176ME.ME.WW=aaG`zJi\83Sr\8e[w\93`w\9a`{\9edw\9f`r\9a[o\99Wo\99Wp\99Wq\9aXr\9bYt\9d[w\9e_x\9f`w \y¢^y¤\y¤\v¥Uu¤Tw¦Ux§V}©\\81­`\86ªj\84¨h\86¤p\85£o\80\9amx\92ep\84hk\7fcey]_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<^O<cR4bQ3`Q<^O:YPG]TK_Zac^esq\87{y\8f\80\80¦\83\83©\7f}®zx©yv«zw¬t}¸x\81¼|\84Â\7f\87Å\85\89Æ\8a\8eË\97\95Ç\9c\9aÌ­£Å³©ËÁ°¶Æµ»Õ¼¨×¾ªÕ¹\94˯\8aÁfQ´YD°B3«=.ÎA:âUNøRRòLLì>?ê<=å=<ä<;Ù@8Ö=5Ê>1Æ:-»;2¾>5´;2·>5½QDÅYLÅ^OÍfWÔcS¿N>¾8,À:.Õ7,Ó5*ß1*ä6/ä6/á3,Ý7+ã=1åC4äB3á:*Û4$ê4)ä.#ñ/-ò0.ó32õ54è./ê01áBFõVZôUYÿosåDIéHMß?Aü\^ÿopÜ>?ÿ}\7fÿnpèRSÔ>?Ä23Ð>?óKKç??ê<>ðBDì9?â/5îAGÿ]cÿptÿlpúekô_eö^júbnü^möXgí`YÞQJáIFÐ85Ð1.Õ63Ð1-Ø95ÜE<áJAßKAÕA7Ò5,Ò5,Ü71ß:4ñ!.ý-:ÿ0=û)6ü.8ÿ:Dü@Aï34ß4-à5.Ý6-Ü5,á3*â4+î3,ñ6/÷/2ö.1ù-0ù-0õ.+õ.+ç5+æ4*Ò<.Ó=/±3%³5'¬70æqjû\87\87þ\8a\8aÿk~ùbuì_oê]møPjïGaÿ6]ÿ8_îDaôJg¢XWr('PH1KC,TT:[[A]wGg\81Qp\8cYv\92_w\9a`z\9dcu\9d^p\98Yl\96Tl\96Tn\97Uo\98Vp\99Wr\9bYu\9c]v\9d^v\9f[w \w¢Zw¢Zt£Ss¢Ru¤Sv¥Tx¤W|¨[\80¤d}¡a}\9bgy\97cr\8c_h\82U_sW\pTVjNYL;[N=^Q@^Q@]P?\O>]P?^Q@_RA\O>ZM<[N=^Q@`SB_RA^Q@cT?_P;\PD^RFWQUZTXb`vrp\86tw x{¤}\80·\7f\82¹{\7f¿uy¹or·lo´tuÑxyÕ\82\83Ä\8a\8bÌ\9b\98³¦£¾·±£¿¹«ÎÇ\9bÔÍ¡ÚÑ\9aÚÑ\9aÜÑ\99ÜÑ\99ØÍ\97ÑÆ\90ͪ\8c©\86h\9c`H¼\80hÔtf®N@ÖQLìgbéIIà@@â89ã9:ã99Þ44Ú51Ü73É83Ä3.ÅB:½:2»K?ÇWKµO@ËeVÏdTÅZJÆF9½=0Î4*Ò8.â5/á4.Þ1-Þ1-Þ7.ã<3à<0Ú6*Þ4%â8)æ.$ç/%ì/)î1+ë4.ë4.ã6/ã6/Ñ8:äKMóX\êOS×8=Õ6;øW_ÿ~\86ÿy\81ÿksÿdkÿgnÿfiõ\_ðZ\ö`bÿRWÿCHû8@ú7?ö2>ï+7ç1=ñ;G÷V^ÿ`hÿipýfmúclûdmþalú]híRMßD?Ù53Ö20Ù0-×.+×2.Ý84ÞD:ÜB8×?4Ô<1Ù80Ù80â62ã73î7;î7;ð69ñ7:ñ78ï56æ40ã1-Û4+Ü5,Ý7+Ý7+æ1(ç2)ò1,ô3.÷03ö/2ù.1ù.1ö/,ö/,ê5,é4+ÛC6Ð8+»9,±/"·<7ÒWRÿ\96\98ù}\7fÿh\80ÿc{õ]rëShõFcôEbÿ=bû9^ãUkÛMcqI=R*\1e7@%@I.MK4^\EWlAbwLo\89Yx\92bw\96]u\94[p\97Vp\97Vl\95Ql\95Qm\96Ro\98Tq\9aXr\9bYt\9b\u\9c]r\9cTs\9dUt Uu¡Vv¢Uu¡Tt Ss\9fRz¤Zy£Yy\9d]s\97Wm\8aTb\7fIWqBQk<<U-<U-<U-YL;[N=]P?^Q@]P?]P?]P?_RA`SB^Q@\O>]P?`SBaTC`SB^Q@fWBaR=\PDaUI`Z^f`dmk\81xv\8cvy¢z}¦}\80·z}´quµlp°lo´nq¶uvÒ{|Ø\89\8aË\95\96ש¦Á·´ÏÊĶÒ̾ÜÕ©àÙ­æݦåÜ¥åÚ¢ãØ ÜÑ\9bÔÉ\93Ú·\99¾\9b}³w_Ç\8bs×wiµUGßZUöqlöVVéIIæ<=ç=>é??å;;Ý84Û62Ï>9È72ÅB:¹6.°@4¼L@°J;Ã]NÚo_ÎcSÇG:¶6)È.$Ð6,à3-Û.(á40å84ä=4â;2Û7+Ù5)ß5&à6'í5+ì4*í0*ì/)ç0*ç0*à3,à3,Ñ8:×>@äIMòW[û\aû\aý\dÿ`hïOWëKSíPWû^eÿjmÿgjò\^éSUð16ì-2ð-5ò/7ì(4ä ,ß)5ì6BôS[ü[cüelýfmýfoüenù\gðS^áFAÙ>9Ù53Ú64ß63Û2/Ø3/Ú51Ú@6Ø>4Õ=2Ó;0Ù80Û:2ä84æ:6í6:ì59ï58ï58ð67î45å3/á/+Û4+Ü5,Ý7+Ý7+æ1(ç2)ñ0+ô3.÷03ö/2ù.1ù.1ö/,ö/,ê5,é4+ÙA4Õ=0½;.µ3&³83Ö[Vÿ\8f\91òvxÿbzý]uñYnìTiöGdòC`ý;`þ<aßQgÎ@VjB6T, 4=":C(HF/SQ:Rg<^sHj\84Tt\8e^u\94[s\92Ym\94Sm\94Si\92Nj\93Ok\94Pm\96Rn\97Up\99Wr\99Zs\9a[s\9dUs\9dUs\9fTs\9fTs\9fRr\9eQp\9cOo\9bNm\97Mj\94Jh\8cL_\83CXu?Li3D^/>X)=V.=V.>W/XK:[N=]P?^Q@]P?]P?^Q@`SB`SB_RA_RA`SBaTCaTC_RA]P?`US[PNXQX`Y`gczqm\84su\9ey{¤uz²x}µt|½ltµbi±`g¯gm·pvÀ\7f\87\83á\99\95Щ¥à¿ºÁÍÈÏÝØ®åà¶ëä\9eïè¢ñé¡îæ\9eéà§ãÚ¡×Ï¡ÌÄ\96²°\97 \9e\85\98\83n\9c\87r¥p`\8dXHº]VÏrkövsädaäJJÞDDê@Aé?@è8:ä46Ý>:Ø95ÒB:Æ6.¶8,»=1­<,·F6ÚiYÜk[ÜZLÅC5È1&Í6+Ú6-Ö2)Û64çB@éH@Þ=5Ô4(Ó3'Ü1'Û0&è3*ç2)å0)ä/(ß4,â7/Ý?4ßA6Â.*È40ÙCBìVUø]aö[_óS]ðPZæFPèHRîNXû[eÿmsÿmsóX^Û@Fð,0ò.2ù1;û3=ñ+8í'4ð8DÿJVñJRöOWõY]û_cÿdhÿae÷PWèAHß82Þ71ä73é<8í;9é75à5.ß4-Ù;0Ø:/Ö:.Õ9-Û7.Þ:1è94ê;6ß<7Þ;6á96â:7æ:6ä84Ý6.Ù2*Ø6+Ù7,Þ8*Ý7)ç0(è1)õ.)÷0+ó23ò12ö01ö01õ/,õ/,ê5,é4+Ù=1ßC7Å;1¾4*´0.ã_]ÿ\82\87òmrÿax÷YpüOmúMkþBeö:]é@_ïFe¾]d¡@GXE4P=,7@%7@%HC-KF0N^9ZjEg}Or\88Zr\8fWq\8eVk\90Mk\90Mg\91Ih\92Ji\92Lj\93Ml\95Qn\97So\97Xo\97Xt\9cVt\9cVr\9cTq\9bSn\9aOl\98Mj\95Mi\94Le\8cI`\87D\~BRt8Lh5D`-AX*>U'B\,C]-E_/WJ9YL;\O>]P?]P?]P?_RA`SB_RA_RA`SBaTCaTC`SB^Q@]P?YNL\QO_X_jcjqm\84xt\8bxz£{}¦v{³ty±jr³bj«\c«`g¯lr¼v|Æ\8b\87å\94\90ݵ±ìÊÅÌÕÐ×ãÞ´èã¹îç¡ðé£ðè ëã\9båÜ£ÜÓ\9aÌÄ\96¾¶\88¥£\8a\9a\98\7f\9a\85p\96\81l¢m]\99dT¿b[Ïrkÿ\85\82ôtqòXXåKKìBCê@Aì<>é9;Û<8Ú;7ØH@ÒB:»=1¸:.©8(¤3#»J:ÕdTëi[×UGÎ7,Ê3(Ø4+Ø4+Ø31òMKü[SíLDÙ9-Õ5)Þ3)Ý2(á,#á,#à+$á,%Û0(Þ3+Ø:/Ú<1Á-)Å1-Ï98ÙCBßDHßDHåEOëKUòR\öV`øXbû[eÿhnÿlròW]Ö;Aò.2ò.2ô,6ò*4ë%2í'4ö>JÿR^èAIç@HäHLïSWû\`ùZ^îGNÞ7>Þ71à93é<8îA=ò@>î<:å:3â70Ø:/Ø:/Ö:.Ö:.Ü8/Þ:1ç83é:5ß<7Þ;6á96â:7æ:6ä84Ý6.Ù2*Ù7,Ú8-Þ8*Ý7)ç0(è1)õ.)÷0+ó23ò12ö01ö01õ/,õ/,ê5,é4+Ø<0ãG;Å;1¾4*±-+êfdÿz\7fðkpÿbyõWnùLjùLjü@cò6Yç>]òIh¼[b\998?[H7^K:AJ/=F+LG1GB,GW2Sc>`vHl\82Tn\8bSo\8cTi\8eKh\8dJf\90Hf\90Hg\90Ji\92Lk\94Pl\95Qm\95Vn\96Wt\9cVs\9bUp\9aRm\97Oi\95Jf\92Gc\8eFb\8dE_\86CZ\81>Vx<Oq5Mi6Kg4Ne7Ne7Lf6Mg7Oi9SG7VJ:YM=[O?[O?\P@]QA_SC^RB^RB_SC_SC^RB^RB^RB^RBRK[^Wgjf\7ftp\89ut\9cxw\9fuz±v{²qyºiq²_g¯Zbª^f¯iqºu}Å|\84Ì\95\96Ö\9e\9fß®¯Ý»¼êËÊÚÒÑáÜÙÐßÜÓåßÇæàÈäÜÅÞÖ¿ÚξÐÄ´À³ª±¤\9b\96\99\90\8b\8e\85\8b\84z\84}s\91tl\92um§ne­tkä\89\84à\85\80ðupåjeîXWæPOêFEåA@ä92å:3áC:âD;Ë=3É;1ÃA4²0#­/ ÇI:ÜWHÓN?Ì=-É:*Ð7)Í4&Ó54ôVUÿkgø]YâE<Ù<3Þ:0Þ:0á3*à2)Þ1*Ü/(Ï1&Í/$¿1#¾0"Â:*¼4$½3(Ç=2ÕDA×FCÙBGØAFàFPìR\òXbñWa÷`gþgnïZ^×BFë97é75ì46ì46î3:õ:AþIRÿU^â7=Þ39ß58ê@CýILýILú9<î-0ç60ë:4ò;7ó<8ò;7ð95ç83ä50Þ;2Ý:1Ù;0Ø:/ß6/à70è51é62ã;8â:7æ95ç:6é:5ç83ß7.Û3*Ù7*Ú8+Ü9*Û8)æ1&æ1&ñ.(ó0*î53í42ó11ó11ó0,ó0,ê5,é4+Û:0ãB8È80À0(½12öjkÿpy÷gpø^vîTlÿ?eÿ>dÿ9`ü4[ÖNbßWk\93aZvD=WQ;_YCQO:KI4QI6JB/CQ0M[:ZlBgyOk\86Om\88Qi\8cHh\8bGe\8fEf\90Fg\91Ih\92Jj\93Ol\95Qm\95Vm\95Vr\9aTp\98Rm\95Oj\92Le\8eHb\8bE`\89E_\88DZ\81BV}>St=No8Pj:Qk;WnBYpDSp:Sp:Tq;PD4SG7WK;YM=YM=ZN>]QA^RB^RB_SC`TD_SC^RB^RBaUEcWG]Vfleuxt\8d~z\93zy¡yx sx¯sx¯iq²bj«[c«\d¬go¸u}Æ\80\88Ð\85\8dÕ\9a\9bÛ¢£ã±²à¼½ëÉÈØÎÍÝÖÓÊÙÖÍÝ׿ÜÖ¾ØйÒʳÏóƺª¶© §\9a\91\88\8b\82wzq{tjtmc\86ia\8cog\97^U\9aaXÈmhÔyt÷|wø}xÿnmúdcöRQìHGïD=é>7Ü>5àB9Ë=3ÑC9ÙWJÀ>1´6'¹;,Â=.Ä?0ÐA1ÔE5×>0Ð7)Ð21êLKú_[òWSáD;×:1Ü8.Ý9/æ8/æ8/å81ä70Ø:/Õ7,Ç9+Å7)°(\18¹1!É?4ÒH=ÔC@Ì;8Ì5:Ð9>Ó9CãISðV`óYcõ^eö_féTXÖAEí;9ï=;÷?AþFHÿKRÿOVÿT]ÿU^Þ39Ù.4Ú03ã9<ò>Aò>Aõ47ñ03è71ë:4ð95ì51é2.ê3/ã4/â3.à=4ß<3Û=2Ú<1á81á81è51è51ã;8â:7ç:6ç:6é:5ç83ß7.Û3*Ú8+Û9,Ý:+Û8)æ1&æ1&ñ.(ó0*î53í42ó11ó11ó0,ó0,ê5,é4+Ý<2Ü;1Ê:2À0(ÎBCûopújsóclìRjèNfþ:`ü8^ÿ8_ÿ;bÚRfÛSg\7fMFr@9VP:]WAUS>NL7OG4KC0?M,GU4Rd:_qGe\80Ij\85Ng\8aFg\8aFd\8eDd\8eDe\8fGg\91Ii\92Nj\93Ok\93Tl\94Uo\97Qm\95Oj\92Lg\8fIb\8bE`\89C^\87C^\87C[\82CX\7f@Vw@Rs<Uo?Vp@\sG^uIVs=Vs=Wt>NB2QE5TH8WK;XL<YM=[O?]QAaUEaUEbVF`TD_SCaUEfZJj^Nif\83tq\8eyy\9fyy\9fuwªuwªot´jo¯_g¯^f®_g°em¶pxÀ}\85Í\88\91Ö\8d\96Û\9a£Ä ©Êª²Ö²ºÞº¾ã¼ÀåÂÂèÃÃéÅ¿ãýáÁ¸×»²Ñº­Ç´§Á¦\98¯\97\89 \8a\85\8btouwnonefygc\82pl\84_W\8cg_\9b[Q«kaÖtkâ\80wý|vûztýieñ]YÿPJ÷F@å>6êC;Ö<2ÞD:ê\PÇ9-Ã;-¾6(¾6&Æ>.ÐC1ÐC1ÓB/ÔC0Ð79Ö=?ÚEAØC?Õ<6Ñ82Ø5.Û81å:2å:2â;3á:2×@5×@5ËF5ÌG6«/\15¸<"ÌK6ÎM8Ä>5·1(¿02É:<ÕDKßNUêW_î[cï^eëZaÝNRÏ@DÐ3*Ô7.à;7æA=ñCEóEGòAGî=Cä39á06é05ï6;þ37ú/3ÿ*/ÿ-2ë4.ï82ò72ë0+ç+)ê.,ä3-ã2,á=3á=3Þ=3Þ=3ä92ä92ë52ë52í57ì46ï34ð45ï64í42â4-Þ0)Û7+Ü8,Ý:+Ü9*ã3&ã3&ì0%î2'ì63ë52ð31ð31ò1,ò1,ê5,é4+à=4Õ2)Ð;5Ç2,çUXÿps÷alïYdâJaäLcÿ6`ÿ1[ÿ4aÿ;hÉVc¼IVV?/]F6SN8TO9\O>UH7LA/MB0;H*AN0J\4WiA^yBf\81Je\88Df\89Eb\8aAc\8bBc\8dEe\8fGf\8fKh\91Mi\91Rj\92Sl\93Pj\91Ng\8eKd\8bHa\8aH_\88F^\86G^\86G_\85J\\82G^|H\zF]wH^xIbwLdyNXu?Xu?Yv@L@0OC3SG7UI9WK;XL<[O?]QAcWGcWGcWGaUE`TDcWGi]MocSur\8fyv\93vv\9css\99qs¦su¨jo¯af¦Ya©]e­em¶lt½u}Å\7f\87Ï\8b\94Ù\93\9cá\9b¤Å ©Ê¦®Ò«³×°´Ù°´Ù³³Ù´´Úµ¯Ó³­Ñ°§Æª¡À«\9e¸¦\99³\99\8b¢\8b}\94}x~e`fkbcbYZlZVvd`zUM\8ae]\8cLB\98XNÀ^UÐneöuoÿ\80zÿwsÿmiÿZTÿOIìE=óLDÜB8ßE;æXL¹+\1f»3%½5'Æ>.ÎF6Ë>,À3!È7$ØG4ÝDFÒ9;È3/Ë62Ó:4Õ<6Ý:3à=6æ;3ã80Ý6.Ù2*Í6+Í6+Â=,Ã>-ÑU;ÄH.½<'½<'Â<3Á;2Ã46Â35ÝLSÞMTâOWçT\éX_çV]ÜMQÓDHÏ2)Ò5,Ú51Ú51à24á35â17á06ç6<æ5;ð7<ô;@þ37ø-1ÿ).ÿ/4ê3-ð93ó83ì1,è,*ë/-æ5/å4.à<2à<2ß>4ß>4æ;4æ;4í74í74ë35ë35î23ï34í42ë20à2+Ý/(Ü8,Ü8,Ý:+Ü9*ã3&ã3&ì0%î2'ì63ë52ð31ð31ò1,ò1,ê5,é4+á>5Ð-$Ô?9Ê5/ödgÿqtò\gçQ\àH_æNeÿ9cÿ1[ÿ4aÿ;hÁN[ª7DH1!]F6RM7NI3\O>VI8I>,NC18E'=J,EW/Rd<Zu>c~Gc\86Be\88D`\88?a\89@a\8bCc\8dEd\8dIf\8fKg\8fPg\8fPj\91Nh\8fLe\8cIc\8aG`\89G_\88F_\87H_\87H\\82G[\81F_}I^|H`zKa{Lf{Pg|Q[xB[xB\yC?C5BF8IF=KH?RH?TJA\L<_O?`R8`R8\T?^VA^ZWfb_jiwqp~uo\9bzt {w©zv¨op©gh¡`a¤]^¡_a®eg´qoÃ{yÍ\85\81Ø\8e\8aá\97\91ë\9c\96ð \9fÙ \9fÙ¤ Û¥¡Ü¥¡Ü¥¡Ü¤\9fÙ¤\9fÙ¤\9cÕ¢\9aÓ \99Í\9f\98Ì\9d\95Æ\96\8e¿\8b\83²\82z©mqtdhkc_\a]ZoXRnWQ\84RG\89WL\9cND¨ZP¸WN¼[RÔmdã|sî\86\90\87ðxwòzyça`ØRQØDBîZXÌ8.Æ2(Ä7&Ã6%À7$À7$Å8&É<*Ð=-Ò?/Ó7(×;,×@/Ó<+Í6%Ì5$Ù9+áA3à:.ß9-Ú8+Ø6)Ë:'Ë:'ÁA(ÃC*Ã:2Ç>6ÌC;ÏF>ÌC;Ä;3¹3*³-$Ã=4ÍG>×QHÝWNá[RßYPÕOFÊD;Í<!Ï>#Þ7'Þ7'ï+-í)+ø$3ù%4ÿ(?ÿ(?ÿ(@ÿ(@ÿ$Aÿ$Aÿ"Aÿ"Aÿ\1d7ÿ :ÿ&;ÿ%:ï+5ï+5ã77ç;;Û94Û94Ü;3Ý<4å:3ä92è62è62ì23ì23é62é62ã80á6.Ù7*×5(Ú;(Ú;(Û:&Û:&ß9#ß9#â7#â7#ì3.í4/ï4+ð5,í5)í5)ä9(ã8'Ú<0Õ7+Ò:7Ö>;ÿkyÿbpúRkñIbúKlé:[ü7bÿ=hçFgìKl\9aVWe!"83 ?:'HE2PM:LK6DC.0I+3L.EH\1dHK JR-U]8ZjEdtOc\7fNe\81Pa\86Cb\87Da\8a<c\8c>e\8dDg\8fFl\91Nm\92Oi\92Fg\90De\8dFc\8bDe\8aGd\89Fc\85Ha\83Fd\83Jb\81Hb\7fEb\7fEd\80Fd\80Fc\7fDa}BX}8[\80;^\83>;?1>B4FC:HE<OE<QG>ZJ:]M=_Q7_Q7\T?_WB_[Xgc`lkyqp~sm\99uo\9btp¢pl\9efg `a\9a\] \] ce²ik¸trÆ}{Ï\85\81Ø\8c\88ß\93\8dç\97\91ë\98\97Ñ\99\98Ò\9c\98Ó\9d\99Ô\9d\99Ô\9c\98Ó\9c\97Ñ\9b\96Ð\9d\95Î\9b\93Ì\9a\93Ç\99\92Æ\98\90Á\91\89º\86~­~v¥lpscgjb^[`\YnWQmVP\83QF\87UJ¡SI¬^TºYP¼[RÎg^Ùrißwnè\80\85\84ÿ\87\86útsìfeæRPíYWÇ3)Â.$Ä7&Ä7&À7$À7$Å8&Ç:(Î;+Ð=-Ô8)Ô8)Ò;*Ñ:)Ñ:)Ð9(×7)×7)à:.ß9-Û9,Ù7*Ì;(Ê9&½=$¼<#¾5-Á80Å<4È?7É@8Ç>6Â<3À:1»5,Ä>5ÏI@ÕOFØRIÕOFÉC:¾8/Ê9\1eÍ<!Þ7'ß8(ñ-/ð,.ü(7ý)8ÿ*Aÿ*Aÿ(@ÿ'?ÿ"?ÿ!>ÿ\1e=ÿ\1d<ÿ\e5ÿ\1d7ÿ$9ÿ%:ò.8ò.8å99ç;;Û94Û94Ü;3Ý<4å:3ä92è62è62ì23ì23é62é62ã80á6.Ù7*×5(Ù:'Ù:'Ú9%Ú9%Þ8"Þ8"á6"á6"ê1,ë2-í2)î3*ì4(ë3'â7&â7&Û=1Ò4(Î63íURÿesû]kðHaöNgôEfðAbø3^ý8cïNoâAb\82>?g#$<7$<7$=:'C@-CB-@?*/H*3L.@C\18MP%Zb=goJfvQhxSc\7fNe\81P`\85Ba\86C`\89;b\8b=e\8dDg\8fFk\90Ml\91Nj\93Gh\91Ee\8dFd\8cEf\8bHe\8aGd\86Ib\84Gd\83Jc\82Ib\7fEb\7fEd\80Fe\81Gc\7fDb~C\\81<_\84?b\87B4:,7=/??7BB:JA:MD=TH:WK=[P<[P<ZSC^WG`^ahfilm\81pq\85qn\99nk\96ig\98ca\92[\\95Z[\94Y\\9f\_¢gkµmq»wxÈ~\7fÏ\86\84×\8a\88Û\8e\8aÞ\90\8cà\91\91Í\91\91Í\93\91Ð\93\91Ð\92\8fÒ\91\8eÑ\91\8cÏ\91\8cÏ\92\8cÌ\91\8bË\92\8bÁ\92\8bÁ\92\8b·\8c\85±\82|¢zt\9a\81cky[ce\Wd[V_^L^]KxTD{WG®SN»`[ÓWWÓWWÝc`ãif×rhÞyoú\8b\84û\8c\85ÿ\84~û~x÷leìaZÂ6)¿3&Á:'À9&½;%¼:$Á8%Ã:'É:)Ê;*×9-Ó5)Í5'Ð8*Ñ>.Ñ>.Î6(Ç/!Ù9-Ø8,Õ7+Õ7+Î;+Ì9)À9%¾7#¾4)¿5*Á7,Ä:/Ç=2É?4ËA6ÌB7Å;0Ê@5ÎD9ÐF;ÑG<ÑG<Ê@5Á7,Ð5!Ó8$â4+ä6-ô-2ô-2ü)8ý*9û(;ú':ù%;ø$:ù!8ø 7û\1d\1c3ÿ\1d4ÿ\1e5ù%4ý)8ñ4;ó6=å;;ä::Û94Û94Ý:3Þ;4å:3ä92é62é62í34í34é54é54ã81á6/Ø6)×5(Ù9)Ù9)Ù:%Ù:%Û9$Û9$Þ7$Þ7$Ý5(Þ6)à6'á7(Þ9&Þ9&Ù:'Ø9&×?2Ê2%Ò8:ÿlnÿ[møQcî<\þLlý6]ÿ>eé;^ì>aÑ`t®=QQ+*R,+59*26'47"9<'@?#?>"<@\1f?C">H\16Wa/p\7fT}\8cat\89^i~S`~Ja\7fK_\84?`\85@`\89;c\8c>e\8dDg\8fFk\8fOk\8fOk\93Ji\91Hh\8dGg\8cFg\8cIf\8bHf\88Kd\86Ie\84Ic\82Gc\80Fc\80Fd\82Fe\83Gd\80Cc\7fB`\88Bb\8aDe\8dG06(39+;;3>>6G>7KB;RF8UI;XM9YN:XQA^WGa_bigjlm\81op\84ol\97jg\92`^\8fXV\87ST\8dWX\91[^¡ad§ko¹qu¿z{Ë\81\82Ò\87\85Ø\89\87Ú\8c\88Ü\8d\89Ý\8e\8eÊ\8e\8eÊ\8e\8cË\8e\8cË\8d\8aÍ\8b\88Ë\8c\87Ê\8c\87Ê\8c\86Æ\8b\85Å\8d\86¼\8e\87½\8e\87³\88\81­\7fy\9fwq\97\7faiwYad[Vd[V_^L]\JvRByUEªOJ¸]XÔXXÖZZàfcåkhØsißzpë|uë|uÿ\82|ÿ\87\81ÿ\80yõjcÉ=0Ä8+Â;(Á:'½;%½;%Á8%Â9&Ç8'È9(Ø:.Ô6*Í5'Ï7)Ð=-Ð=-Í5'Ç/!Ô4(Ô4(Ò4(Ó5)Í:*Í:*Ä=)Ã<(Ã9.Ã9.Ã9.Ã9.Ä:/Æ<1Ç=2È>3ÐF;ÐF;ÌB7Ç=2È>3ÌB7ËA6È>3Ð5!Ó8$ã5,å7.ô-2ô-2û(7ü)8ù&9ù&9ù%;ù%;ü$;ý%<ÿ#:ÿ#:ÿ\1f6ÿ\1f6ú&5þ*9ó6=ô7>ä::à66Û94Û94Ý:3Þ;4å:3ä92é62é62î45î45ê65ê65ã81á6/Ø6)×5(Ø8(Ø8(Ø9$Ø9$Ú8#Ú8#Ý6#Ý6#Ü4'Ü4'ß5&à6'Ý8%Ý8%Ù:'Ø9&Ó;.Ì4'äJLÿrtýVhïHZð>^øFfü5\ÿ9`ïAdôFiÂQe\96%9F \1fQ+*/3$15&8;&>A,A@$>=!=A CG&S]+r|J\8f\9es\98§|\82\97ll\81V^|H_}I^\83>a\86Ab\8b=f\8fAh\90Gj\92Il\90Pl\90Pl\94Kj\92Ih\8dGg\8cFg\8cIg\8cIg\89Lf\88Ke\84Id\83Hd\81Gd\81Gf\84Hf\84Hf\82Ed\80Cd\8cFf\8eHj\92L,4'/7*692:=6A>9DA<KD:NG=QK=QK=ROFYVM__iggqij\86kl\88ih\94ba\8dUW\8aOQ\84MQ\90UY\98^b«ei²mrÃrwÈ|\7fÐ\82\85Ö\86\87×\87\88Ø\89\88Ô\8a\89Õ\8a\8bË\8a\8bË\89\89Ï\88\88Î\87\84Ó\87\84Ó\87\82Ô\87\82Ô\8c\84Í\8a\82Ë\8c\84½\8d\85¾\8d\87«\87\81¥}z\8fur\87\8eU^\88OXfYPgZQSeKPbHhXAk[D E@±VQÛNVÞQYæ^bëcgÝmiåuqáuiÝqe÷|tþ\83{ÿ\87|òlaÈ@0À8(¿='¿='½=$½=$Â9&Â9&É8'É8'Û7-Ú6,Ð8*Ð8*Ç<)Ç<)Æ;(Å:'Ì9)Í:*Ñ8*Ð7)Í7(Í7(É<*Ë>,È<-È<-É;-É;-Ç9+Æ8*Æ7)Å6(Ï@2ÐA3Ï=0Ê8+Ë7+Ï;/Í9-É5)Ô-%Ø1)è00ë33ö-7ö-7ú+;ú+;ù/?ù/?ö0=÷1>ü0<ý1=ÿ/<ÿ/<û+9ù)7ò-7õ0:í9<ì8;Þ97Ù42Û94Û94Þ93ß:4æ95å84é54é54ñ35ò46í76ì65ã81á6/Ø6+×5*Ô8)Ô8)Ô9'Ô9'×8%×8%Ø7#Ø7#Ñ:%Ñ:%Ï=$Ð>%Ð@(Ð@(Í?+Í?+Î70Ô=6ÿ[eÿ`jÿLjò;Yÿ@jù6`ÿ5_þ-WØVnÛYq|KQX'-9/.<21-0)36/7A)9C+9=\18:>\19RI\1ebY.t\89N\8f¤i¦¾\8a¦¾\8a\8a¦uo\8bZ_\80G^\7fF]\85>`\88Ae\8e@i\92Dl\94Km\95Lo\93Sn\92Ro\95Ll\92Ih\8dGg\8cFg\8cIh\8dJi\8bNh\8aMd\86Jc\85Id\83Gd\83Gf\86Gg\87Hg\85Ee\83Cf\8eGi\91Jl\94M*2%-5(4707:3=:5@=8G@6JC9NH:NH:NKBVSJ]]geeoef\82ef\82a`\8c[Z\86PR\85MO\82PT\93[_\9eei²lp¹sxÉw|Í\7f\82Ó\83\86×\85\86Ö\85\86Ö\88\87Ó\89\88Ô\86\87Ç\85\86Æ\84\84Ê\83\83É\83\80Ï\83\80Ï\85\80Ò\85\80Ò\8d\85Î\8b\83Ì\8c\84½\8c\84½\8b\85©\84~¢yv\8bqn\83\8bR[\85LUfYPh[RTfLRdJiYBk[D E@²WRÜOWÞQYä\`éaeÛkgãsoç{oßsgö{sîskþxmã]RÃ;+½5%¿='¿='¾>%¿?&Ä;(Ä;(Ê9(Ê9(Ø4*Ú6,Ó;-Ð8*Å:'Ä9&Æ;(É>+Ï<,Ó@0ÚA3Ö=/Î8)Ê4%Æ9'Ê=+Æ:+Ç;,É;-É;-È:,Ç9+Æ7)Å6(Æ7)Ë<.Ñ?2Ñ?2Ó?3Ò>2Ë7+Ã/#Ò+#Ö/'è00ì44ù0:ù0:ý.>þ/?ú0@ú0@ö0=õ/<ù-9ù-9ü*7ü*7ÿ/=þ.<ö1;ö1;ê69é58Û64Ù42Û94Û94Þ93ß:4æ95å84é54é54ò46ó57î87í76ä92á6/Ø6+×5*Ó7(Ó7(Ó8&Ó8&Ö7$Ö7$×6"×6"Ï8#Ð9$Î<#Ï=$Ï?'Ï?'Í?+Í?+Î70ãLEÿfpøR\ÿHfñ:XÿBlõ2\ÿ6`ý,VÖTlÍKcf5;S"(C98<2125.5814>&1;#37\12?C\1ei`5\88\7fT\9b°uª¿\84µÍ\99®Æ\92\92®}w\93bd\85L`\81H]\85>a\89Bg\90Bl\95Go\97Np\98Oq\95Uo\93So\95Lk\91Hg\8cFf\8bEf\8bHh\8dJi\8bNi\8bNe\87Kc\85Id\83Ge\84Hg\87Hh\88Ih\86Fg\85Eh\90Ij\92Km\95N%0"(3%/4-16/664997?<7B?:HE<HE<HIDQRMY[h`bo_c\80]a~\]\8dWX\88RS\8cTU\8eZ\¦fh²nsÇsxÌy~Ù|\81Ü\80\84Ý\81\85Þ\82\84×\82\84×\83\85Ò\83\85Ò\83\87Ç\82\86Æ\81\83Í\80\82Ì\83\7fÓ\83\7fÓ\85\7fÕ\86\80Ö\8d\85Ð\8b\83Î\8b\84·\89\82µ\87\83\9a\7f{\92usxljo\81UR|PMeYIh\LZgKXeIe^Bg`D\8fPA¡bSÌXXÌXXâZ^æ^bç`dðimózoërgúulÝXOçYMÑC7Ä5$È9(Ã;%Ã;%Ä<&Å='Í:(Í:(Ô6*Ô6*Ò/&Õ2)Î:,Î:,Â=*À;(¿<(À=)Ç;*ÑE4àJ<ÝG9Ò<.Ê4&È6'Í;,Æ9'Æ9'È9(È9(Ê9(Ê9(Ë8(Ë8(Î6(Ò:,×>0Ø?1Ü@3Ü@3×9-Ï1%ß--ä22ð39ó6<ú2?ù1>ö0?ö0?í/9í/9ê17é06ë.2ë.2ï+/ï+/ó6<ô7=ï8<í6:ã77á55Ú72Ú72Ü94Ü94à85á96ç77æ66é56é56ó49ó49ï77î66ä84á51Õ7,Ó5*Ï9*Ï9*Í:(Í:(Ï9(Ï9(Ð9&Ð9&Æ:!Ç;"Ä>#Æ@%ÃA)ÄB*Ê>/Ê>/×79÷WYÿ[qþH^ÿ<bþ:`ÿ7eý4bì?[ðC_¤[b\88?F<;6:94A;?;59E24D137;$6:#3G\16J^-}\85I ¨l©Ç\87­Ë\8b®Í\94¤Ã\8a\8f°{x\99df\8aM]\81D\\84=`\88Ag\90Bm\96Hp\98Op\98On\95Tm\94Sn\94Kj\90Gf\8bEd\89Ce\8aGg\8cIh\8cNh\8cNe\87Jd\86Ic\86Fd\87Gf\89Eg\8aFf\8aDe\89Cg\92Jj\95Mm\98P#. &1#,1*.3,331553;83>;6FC:FC:FGBOPKWYf^`m\`}Z^{]^\8eZ[\8bWX\91\]\96df°qs½x}Ñ|\81Õ\7f\84ß\81\86á\83\87à\82\86ß\81\83Ö\7f\81Ô\80\82Ï\81\83Ð\84\88È\83\87Ç\82\84Î\81\83Í\84\80Ô\86\82Ö\88\82Ø\89\83Ù\8c\84Ï\8a\82Í\89\82µ\87\80³\84\80\97{w\8epnsgej\7fSP{OLeYIi]M[hLYfJg`DhaE\89J;\9b\MÅQQÆRRÜTXàX\â[_ëdhîujépeõpgÊE<ÐB6Á3'Ä5$ÒC2Ã;%Ã;%Å='Æ>(Î;)Î;)Õ7+Õ7+Ï,#Ñ.%Ë7)Î:,Ä?,Â=*½:&º7#¿3"ÏC2äN@äN@×A3Í7)Ê8)Ï=.È;)Ç:(Ç8'Å6%È7&É8'Ë8(Í:*Ò:,Ó;-Ò9+Ï6(Ô8+Ù=0Û=1×9-é77í;;÷:@÷:@û3@÷/<ò,;ð*9ì.8í/9ê17ë28ï26ð37ö26ö26ò5;ô7=ð9=í6:á55ß33Û83Þ;6Ü94Ü94à85á96ç77æ66é56é56ó49ô5:ï77î66ä84á51Õ7,Ó5*Î8)Î8)Ì9'Ì9'Î8'Î8'Ï8%Ï8%Ä8\1fÅ9 Â<!Ä>#Â@(Â@(È<-È<-Ü<>ÿ`bÿPfÿKaú6\ÿ>d÷.\ÿ9gè;WûNj\99PWm$+=<7CB=>8<=7;E24D139=&?C,DX'_sB\91\99]²º~­Ë\8bªÈ\88¤Ã\8a\9bº\81\8b¬wx\99de\89LY}@Z\82;_\87@f\8fAl\95Gp\98Op\98On\95Tl\93Rm\93Jj\90Gf\8bEd\89Ce\8aGg\8cIh\8cNh\8cNe\87Jd\86Ic\86Fd\87Gg\8aFh\8bGg\8bEf\8aDi\94Lk\96Nn\99Q(0!'/ (-&).'.0-1306729:5<>3?A6CF?ILEOR[UXaY[r\^uYX\84[Z\86]^\97de\9ekmºvxÅ~\7fÜ\83\84á\89\8bï\89\8bï\89\89é\85\85å\82\82Ø\7f\7fÕ\82\81Ï\83\82Ð\80\84Ã\80\84Ã\83\83É\83\83É\85\82Ï\86\83Ð\8a\84Î\8a\84Î\89\81½\88\80¼\88\81£\84}\9f\81z\82vowkg^c_Ve`Ld_Ke_Ie_If^Gg_Hj^Dk_EoO6zZA¦]N±hYÖVSÔTQôOVþY`øiaçXPÚA9Ï6.Ö5+Ú9/Ù<-×:+Ï8%Ð9&Ï:&Ï:&×7)×7)Þ3+ß4,Ê0$Ì2&È;*Ê=,ÃB-Á@+¾=(»:%Ã7&½1 êVHßK=Á/ Ï=.Ë>-Å8'È;)È;)Ç8'Æ7&È5%È5%Ë3%Ì4&Ò6)×;.Ý=1Ü<0Ú6,Ú6,ä=4ëD;ù@Eñ8=ñ2:ó4<õ3>ð.9è.9ì2=æ9=ã6:ß76à87è;7ê=9ð95î73ë=<ê<;ç;9å97à85ß74Ü73Ü73Ý84Þ95ä88æ::é9;é9;ì8;ì8;ô5:ô5:î87î87ä=7á:4Ò:/Ï7,Æ9(Æ9(Ã:(Ä;)Ã<)Ã<)Ä;)Ä;)¿9 Ä>%º<#³5\1c¹;%ÅG1Î>6Ã3+ÿZgÿVcÿGdü;Xò2Wñ1Vñ8aø?hÌgm«FLX=2M2'8D8:F:H46A-/T+/U,0?; IE*Qs7z\9c`\94¼s È\7f©È\8c\9d¼\80\97µ\7f\93±{\81\9enf\83SVw>Xy@]\81;b\86@h\8eAm\93Fl\94Kk\93Ji\92Pi\92Ph\8dGe\8aDa\86Aa\86Ad\89Ff\8bHf\8aJd\88Hg\8bKg\8bKg\8cIe\8aGc\8bDd\8cEh\90Gk\93Jm\9bPn\9cQp\9eS(0!(0!(-&).'-/,02/450783;=2=?4AD=GJCLOXSV_VXoY[rZY\85]\\88ab\9bjk¤rtÁ}\7fÌ\85\86ã\8a\8bè\8a\8cð\89\8bï\88\88è\84\84ä\80\80Ö}}Ó\80\7fÍ\81\80Î\82\86Å\83\87Æ\86\86Ì\88\88Î\89\86Ó\89\86Ó\8b\85Ï\8a\84Î\88\80¼\86\84}\9f~w\99{t|rkshd[b^Ud_Kd_Kd^Hd^Hf^Gf^Gj^Dk_E{[B{[B\9cSD¥\MÑQNÕURöQXýX_çXPÝNF×>6Ñ80Ø7-Ú9/Ø;,Ö9*Ï8%Ð9&Ï:&Ï:&×7)×7)Þ3+ß4,Ë1%Ì2&Æ9(É<+ÂA,Á@+¾=(»:%Ã7&È<+äPBÜH:Ç5&Ë9*Ç:)Â5$Ê=+É<*Ê;*É:)Ì9)Ë8(Î6(Î6(Ò6)Ô8+Ø8,Õ5)Ô0&Ö2(Þ7.ã<3úAFñ8=î/7î/7ñ/:ð.9ê0;í3>ã6:Þ15Ú21á98ñD@÷JFûD@õ>:ç98æ87ä86ã75à85à85Þ95Þ95Ý84Þ95å99æ::é9;é9;ì8;ì8;ó49ò38í76í76â;5à93Ñ9.Í5*Æ9(Æ9(Ã:(Ã:(Â;(Â;(Ã:(Ã:(¿9 Ä>%¸:!³5\1c¹;%¼>(É91ÑA9ÿZgÿQ^ÿ?\ø7Tõ5Z÷7\õ<eö=f¦AG\994:X=2Q6+4@44@4L8:Q=?U,0[26RN3ieJp\92V\8d¯s\9aÂy\9eÆ}\99¸|\99¸|\98\80\8cªtq\8e^WtDQr9Z{B\\80:b\86@h\8eAl\92Ek\93Jj\92Ih\91Oh\91Of\8bEc\88Ba\86Ab\87Be\8aGg\8cIg\8bKf\8aJh\8cLi\8dMh\8dJg\8cId\8cEf\8eGi\91Hm\95Lm\9bPn\9cQp\9eS-1",0!,/&,/&-/,/1.25,36-8<-:>/?C4EI:KMJQSPUUaWWc\Zr`^ved\8cpo\97yy¹\84\84Ä\8b\8bá\90\90æ\8f\8eì\8e\8dë\8a\8aä\84\84Þ\81~Í~{Ê\7f\80\7fÃ\85\87Â\86\88Ã\8a\8aÆ\8b\8bÇ\8d\8aÃ\8b\88Á\8b\84·\8a\83\8a\80£\85{\9e\81v\86zo\7fujfod`j^PfZLUeJUeJc^Hc^HqWFrXGsZDt[Ez`EtZ?\8aP8\95[CÏSIÖZPÿJOÿLQâ?:ß<7ß6/Þ5.â6,â6,Ý7)Û5'Ò7#Ó8$Ñ8&Ñ8&Ù5)Ù5)à2+á3,Ã7(Ã7(½:(À=+¿@-¿@-À;*¾9(Å3&ÛI<ÚF:Ô@4Ë=/Ä6(¿<*»8&Å:'Å:'Ç:(Ç:(Ê9(É8'Ì4&Ì4&Ö8,Ô6*×3)Ö2(Û3*Þ6-å:2ç<4ñ:>ì59é06ë28ì4<ì4<ä9?ç<BÕ:8ÝB@éPKóZUüZUôRMîC<ã81ß82ß82ß82ß82à93á:4ã:7ä;8ã77ä88æ89ç9:é9<é9<ë8<ë8<ï58î47æ66ç77Ý;6Ú83Ê:/Æ6+¾:+¾:+¸=+¸=+¶=*¶=*¶=*¶=*·:&½@,±:&®7#¶;,®3$Æ22æRRÿWiûJ\ñ;Tî8QäD\éIaÕPcÐK^fE6a@1ID.FA+8='49#D4%J:+G-\1eU;,aa=\84\84`\8a®q\97»~\8eÄy\8eÄy\94°}\9b·\84\99³\86\80\9am\uMHa9Nh8\vF_~;d\83@g\8d@k\91Di\93Ih\92Hc\90Kc\90Kd\88Bc\87Ac\86Bd\87Cg\8cIi\8eKj\8eNj\8eNh\8fLi\90Mg\90Jf\8fIe\8fEg\91Gk\96Gn\99Jr£Tr£Ts¤U04%04%/2)/2)/1.02/14+25,8<-:>/>B3CG8HJGMOLQQ]SS_WUm[Yqa`\88ml\94vv¶\82\82Â\89\89ß\8e\8eä\92\91ï\90\8fí\8c\8cæ\85\85ß\82\7fÎ~{Ê~}Á\7f\81\83¾\84\86Á\88\88Ä\89\89Å\8b\88Á\87\84½\85\82\84z\9d~t\97xm}peumb^i^Zh\NeYKUeJUeJc^Hc^HrXGsYHt[Eu\FrX=oU:\8bQ9\9a`HÔXNÕYOöAFò=BÖ3.Ø50Þ5.ß6/á5+á5+Ü6(Ü6(Ò7#Ó8$Ñ8&Ñ8&Ù5)Ù5)à2+á3,Ä8)Â6'»8&¼9'½>+¾?,Á<+¿:)Æ4'çUHÑ=1Ì8,ÏA3À2$¿<*¿<*Ã8%Ä9&Æ9'Ç:(Ê9(É8'Ì4&Ì4&Ó5)Ñ3'Õ1'Ù5+â:1ç?6ê?7é>6ê37ë48î5;î5;ê2:è08á6<å:@ñVTýb`ÿmhÿhcõSNãA<á6/ß4-Þ71Ý60Þ71Þ71ß82à93ã:7ä;8ã77ä88æ89ç9:é9<é9<ê7;ê7;ï58î47ç77ç77Ý;6Û94Ê:/Æ6+¼8)¼8)¶;)¶;)´;(´;(´;(´;(µ8$º=)¯8$®7#´9*¨-\1eÆ22÷ccÿQcøGYñ;Tð:SçG_êJbÒM`ËFYlK<cB3ID.HC-@E/:?)B2#@0!G-\1eY?0kkG\8f\8fk\8d±t\90´w\85»p\88¾s\9d¹\86\9d¹\86\8e¨{i\83VHa9>W/Jd4WqA^}:c\82?f\8c?j\90Ch\92Hf\90Fb\8fJa\8eIb\86@c\87Ad\87Cf\89Eh\8dJk\90Mm\91Qm\91Qi\90Mi\90Mh\91Kg\90Jg\91Gi\93Im\98Ip\9bLu¦Wv§Xv§X78&67%57,57,56056057*68+;?(<@)?C*DH/HJ<LN@POKRQMVVLZZP``hjjrtt\9a\80\80¦\87\85Æ\8d\8bÌ\94\91Þ\93\90Ý\90\8fÕ\89\88Î\85\81¼\80\80\80\7f\7fµ\81\81·\86\84µ\88\86·\89\85¨\85\81¤\83{\92\7fw\8e\7fu}yowtgam`Zl\MjZKkZHjYG^`J^`Je]Je]JoZIq\KzYH{ZI\86R=\86R=¦M;±XFØNCÔJ?å82á4.Ú1*Ý4-ã5.ã5.á3(à2'Ú7&Ü9(Ï9!Ð:"Í;$Í;$Ô9'Ô9'Û5)Ü6*¹?*µ;&²8#³9$½<)À?,É:,Æ7)Ñ7-õ[QÖ>3Ë3(ÊB2º2"°<%¶B+Á9)Â:*Ä;+Ä;+É:,É:,Î7,Î7,Ð2)Ð2)Õ0*Û60ç;7ê>:è;7ä73ç85ë<9î<<é77à35ã68ãEDëMLÿ{uÿrlïb[ÙLEÐ71Í4.Ü73å@<Þ:1Ý90ß80Þ7/â62â62ä65å76æ68æ68ç7:è8;è8;è8;è7=ç6<î79í68æ:8æ:8Ù?7Ö<4Æ>2Â:.´;*´;*­=)­=)ª=(ª=(©<'©<'§<(©>*¡:)¡:)©9.£3(Í>BúkoôM^ðIZåHYåHYÆY^ÄW\\9f_U\9aZPUU=NN6QE-OC+JC&F?"8G\1c;J\1fC[)Tl:s\83R\88\98g\90¢n\93¥q\8e²u\96º}¢´\8e\93¥\7fu\86fRcC?N1BQ4Oa7Xj@_{>d\80Cg\8c?k\90Cf\92Ee\91D`\8fG_\8eFb\85Ad\87Cf\89Eh\8bGi\8eKk\90Mk\92Qm\94Si\92Nj\93Oj\94Li\93Kh\94Ej\96Gn\9bJq\9eMt§Xt§Xs¦W<=+<=+;=2;=2;<6;<6;=0;=0>B+@D-BF-FJ1IK=MOAPOKRQMWWMZZP]]effnmm\93yy\9f\81\7fÀ\86\84Å\8e\8bØ\8e\8bØ\8c\8bÑ\87\86Ì\83\7fº|x³zv¨yu§xx®zz°\7f\80\81} }y\9c|t\8bxp\87tjroemm`Zi\VjZKk[Ll[Il[I_aK_aKf^Kg_Lq\Ks^M|[J}\K\94`K\8f[F§N<¨O=É?4Å;0Û.(Ý0*Þ5.ß6/ã5.á3,à2'ß1&Ú7&Û8'Ï9!Ð:"Í;$Í;$Ô9'Ô9'Û5)Ü6*º@+´:%¯5 °6!»:'À?,É:,Ç8*Ø>4õ[QâJ?Ð8-ÉA1»3#©5\1e²>'¿7'¿7'À7'À7'Å6(Ç8*Í6+Î7,Ú<3Ù;2Þ93á<6é=9é=9å84á40è96ê;8ì::é77ê=?úMOÿdcÿnmøicãTNÉ<5¾1*Ì3-Õ<6á<8à;7à<3ß;2à91ß80â62â62ä65ä65ç79ç79è8;è8;è8;è8;ç6<ç6<î79í68æ:8æ:8Ù?7×=5Æ>2Â:.²9(²9(¬<(«;'¨;&¨;&§:%§:%¦;'£8$ 9( 9(¤4)±A6àQUögkñJ[ðIZèK\åHYÂUZ¾QV\9c\R\99YOKK3LL4RF.J>&<5\18;4\17>M"Sb7p\88Vz\92`\87\97f\89\99h\89\9bg\8f¡m\8c°s\90´w\83\95om\7fYO`@;L,8G*AP3N`6Wi?`|?e\81Dg\8c?k\90Cf\92Ee\91D`\8fG_\8eFd\87Cf\89Ej\8dIk\8eJj\8fLk\90Mj\91Pl\93Rk\94Pl\95Ql\96Nk\95Mj\96Gm\99Jq\9eMt¡Py¬]y¬]x«\CB0CB0BB6BB6BB:BB:AD3@C2CG,DH-GJ+JM.MO7OQ9SQDUSF[]8[]8\]MbcShgwsr\82zy¥\80\7f«\84\83½\85\84¾\87\84»\84\81¸~|¤wu\9dsp\8fqn\8dom\9fqo¡tr\9aus\9bvs\88sp\85rlnoikmcYj`Vl\LjZJn\Ho]Iq\Iq\IqYMqYMj^Nj^NlaOmbP\81\L\82]M­YO¤PF¼;5º93Ë3(Ë3(Ó3#×7'à8/ß7.á5+à4*ß5&ß5&Õ9#Ô8"É<!Ê="Æ>$Æ>$Í<'Í<'Ô8)Õ9*µE/­='©4 ©4 º6'À<-Ï8/Í6-Ú72ðMHïUMÚ@8ÇC4À<-¡4\1d¬?(À;,¿:+¿7)¿7)Ä6*Ç9-Ñ:1Ó<3âC=áB<ä?;ã>:è<:è<:è88æ66å:3å:3ä84è<8ñLJÿ\Zûfb÷b^Æ?9¾71º4+À:1ÔA:ÚG@Þ<9Ö41à<3ß;2â92á81ä73å84è66é77ê69ê69ê7;ê7;è7=è7=æ7<æ7<ë78ê67â96ã:7Ö?8Ó<5Â>1¾:-­:'­:'¦;'¦;'¢<&¡;%\9f;$\9f;$\9a?,\927$\96=+\94;)\992)ºSJïhnæ_eìP^éM[ÕOXÑKT¤^R¢\P}nO|mNFN6CK3U<&N5\1fD6\13QC Iw6f\94Ss·lu¹n\84£gu\94X\87\8a]\91\94g\8b\94i\80\89^WdHGT8;E-8B*:D,?I1JX4XfBd|Bi\81Gh\8cBl\90Fg\93Fe\91D^\91F]\90Ef\89Ei\8cHm\90Lm\90Lk\90Mj\8fLi\90Mj\91No\98Rp\99So\9bPn\9aOm\9cLo\9eNs£Ow§S{®_z­^y¬]FE3FE3EE9FF:FF>FF>EH7DG6EI.FJ/IL-LO0NP8QS;USFVTGZ\7Z\7XYI\]Mbaqlk{sr\9eyx¤{z´}|¶\81\7f|³yw\9fqo\97mj\89if\85ec\95fd\96ig\8fjh\90kh}hezicef`bg]Se[QiYIk[Ko]Iq_Ks^Kr]JrZNrZNj^Nk_OmbPncQ\82]M\83^N¦RH\9cH>µ4.·60Î6+Ð8-×7'Ù9)Þ6-Ý5,ß3)à4*à6'à6'Õ9#Ò6 É<!Ê="Æ>$Æ>$Í<'Í<'Ô8)Õ9*µE/­='¨3\1f¨3\1fº6'À<-Ï8/Í6-Ò/*ã@;õ[SáG?ÊF7ÉE6£6\1f¯B+ÊE6ÉD5È@2Ç?1Í?3ÑC7ÛD;ÞG>ß@:Þ?9ß:6Ý84á53â64ç77é99è=6å:3â62ç;7ïJHñLJÓ>:»&"´-'¼5/Å?6ÉC:Ò?8Ò?8ß=:â@=ß;2ß;2á81â92å84æ95ê88ë99ê69ë7:ê7;ê7;è7=è7=æ7<å6;é56è45á85á85Õ>7Ò;4À</½9,­:'¬9&¦;'¥:&¡;% :$\9e:#\9e:#\9a?,\8e\97>,\93:(\96/&Æ_Vüu{ßX^ðTbèLZÏIRÊDM ZN£]Q\80qR\80qRMU=@H0L3\1dO6 \N+{mJx¦e\93Á\80}Ávy½r}\9c`f\85Iy|O\84\87Zt}RZc88E)0=!4>&<F.<F.9C+CQ-Vd@e}Cj\82Hi\8dCm\91Gg\93Fe\91D_\92G^\91Fh\8bGk\8eJo\92No\92Nk\90Mi\8eKg\8eKi\90Mr\9bUr\9bUr\9eSq\9dRp\9fOr¡Qw§SzªVt§Xs¦Wq¤URK;RK;RK;RK;RK;RK;RK;RK;UN>UN>VO?WP@YRBZSC[TD\UEb[IaZH`XMbZOf\Zlb`rgmvkqznx|pz\7fs}\80t~|qyujrmbhh]cbbZaaY__U]]S^ZO^ZO`ZLa[Me]Je]Jg\Fg\Fi]Ei]Ek]Cl^DedOjiTyUEsO?\99OD£YN­UG¯WI¦N8\9fG1¥<'¦=(Ä6,É;1â/2á.1Û7-Û7-Ü8.Ü8.Ú8-Ù7,×7+Ö6*Õ7+Õ7+Ô8+Ô8+Ò9+Ò9+Ò9+Ò9+¶=,¶=,®9'¦1\1f¨3!±<*¿=-½;+È5+É6,Ó;0ÛC8ÜJ=ØF9Å<*¹0\1eÝOEØJ@ÒE;ÒE;×G>ÙI@àA;Ý>8â43æ87ì:8ë97â94à72Ù<3Û>5ÐJ?ÊD9¿=0·5(°5%³8(»=.¿A2À;,Ä?0Ö=5Ù@8æ:6æ:6î66ï77å6;å6;ä79ä79â96â96â92â92Þ5.ß6/à70â92å95å95å97å97é;=ç9;Ý;9Ý;9ÐC<ÎA:»C5·?1¢=+¡<*\9a>)\98<'\94<(\92:&\919%\919%\87F2\81@,\89,$\8d0(ÀJJännámpÊVY­RO¬QN\99YO\98XN\92\P\94^R\99_T\9a`ULa 9N\r2I\ 3Md\1ev\92H\96²h »t »t\98°r\83\9b]k~QZm@WcKQ]EHNB<B6;<,@A1<@2:>0:B3:B3>O/RcCZv<f\82Hm\91Gn\92Hi\92Fi\92Fh\92Jg\91Ii\8fRk\91Tl\93Pl\93Pj\94Jj\94Jj\97Fl\99Hn\9eHn\9eHo¡Jq£Ls¥Pu§RvªXx¬Zw£hm\99^f\92WVO?VO?VO?VO?VO?VO?VO?VO?WP@WP@XQAYRB[TD\UE]VF]VFc\Jb[IaYNbZOdZXh^\lagodjpdnrfpthrthrqfnlaif[aaV\[[SYYQWWMUUKWSHXTI[UG\VHbZGc[HeZDf[Ei]Ej^Fl^Dm_EbaLjiT}YIyUE\9eTI¤ZO«SE­UG¤L6 H2§>)§>)Ä6,È:0â/2á.1Û7-Û7-Û7-Û7-Ú8-Ù7,×7+Ö6*Õ7+Õ7+Ô8+Ô8+Ò9+Ò9+Ò9+Ò9+·>-¶=,­8&¦1\1f§2 ¯:(¾<,½;+É6,Ç4*Ì4)Ò:/ÙG:àNAÛR@ÙP>×I?ÑC9Ë>4Ë>4Ï?6ÑA8Ù:4Ö71æ87ç98ê86é75â94â94Ü?6ÞA8ÇA6Ã=2º8+µ3&¯4$²7'º<-¾@1Å@1ÇB3×>6Ø?7å95å95î66ï77æ7<æ7<å8:å8:ã:7ã:7ã:3ã:3á81â92ã:3ã:3æ:6å95å97ä86æ8:æ8:Þ<:Þ<:ÏB;Ê=6¶>0±9+¡<* ;)\99=(\98<'\93;'\92:&\919%\908${:&|;'\8f2*\9a=5ÄNNÙccÑ]`¾JM©NKªOL\99YO\9aZP\94^R\95_S\98^S\98^SRg&Rg&\s-y\90J\96²h£¿u\97²k\86¡Zi\81C_w9Sf9H[.CO7=I18>239-:;+@A1<@2:>0:B39A2>O/QbB[w=g\83In\92Ho\93Ij\93Gj\93Gi\93Kh\92Jk\91Tl\92Um\94Ql\93Pj\94Jj\94Jj\97Fl\99Hm\9dGm\9dGn Iq£Lu§Rw©TvªXvªXi\95Z`\8cQX\84I[TD[TD[TD[TD[TD[TD[TD[TDZSCZSC[TD\UE]VF_XH_XH`YId^Fc]Ec\Ic\Id\Oe]Pf]Vg^Wh_Zi`[ja\ja\h_Xd[T`WN^ULXVJVTHSQDQOBQN?RO@TQ@VSB\WD]XE_XEaZGd^Hf`Jh`IiaJc`MjgT\7f[O\7f[OªWQ«XR¸GA¶E?½>5»<3»9+º8*½8)À;,Æ=-Ç>.Ù7*Ù7*Ú8+Ú8+Ù9+Ø8*Õ8)Ô7(Ô8)Ô8)Ô8)Ô8)Ò9)Ò9)Ò9)Ò9)¸@0¶>.©:&¡2\1e\9e4\1e¥;%³>*µ@,Ã>/¿:+Ä2%Æ4'Î</ØF9ÛN=ÝP?Ü75Ù42Ô2/Õ30Û96ß=:æ<<å;;î7;ì59ë35ê24ã75å97Ý>8Ü=7º:-·7*±6'®3$­5$°8'µ<+¸?.ÈD5ÉE6×@5×@5á:4à93ê65ì87ê69ê69é77é77æ93æ93å:2å:2â;2â;2á<6á<6ß<7Þ;6Ý98Ý98Ø:9Û=<ÔC>ÒA<ÂB7º:/¨:+¤6'\9c=)\9b<(\94=)\93<(\90;&\8f:%\8d8$\8d8$u8#t7"\889,\98I<¶SN»XS±RN©JF\9bQH\9dSJ\92]O\95`R\93bT\93bT\95_U\94^TfwC{\8cX\93¥q¤¶\82ª¾\89\9e²}y\8f^Xn=?Q)@R*AP3=L/:C24=,58/58/:;+@A1;?19=/9A29A2=N.QbB\x>i\85Kp\94Jq\95Kl\95Il\95Il\96Nj\94Lm\94Qn\95Ro\97Pm\95Nk\95Ij\94Hk\98Gm\9aIm\9dIm\9dIp\9fNt£Rx©Xx©Xt¤Xp T_\88NU~DNw=`YI`YI`YI`YI`YI`YI`YI`YI^WG^WG_XH`YIaZJb[Kb[Kc\Ld^Fd^Fe^Ke^Ke]Pe]Pd[Td[Tg^Yg^Yf]Xf]Xe\Ud[TcZQbYP[YMXVJTREPNAOL=OL=QN=RO>WR?XS@[TA^WDa[Ec]Gg_Hh`IdaNheR}YM\82^R±^X°]W·F@±@:½>5½>5¿=/½;-½8)¾9*Ä;+Ç>.Ø6)Ù7*Ù7*Ú8+Ø8*Ø8*Õ8)Õ8)Ô8)Ô8)Ô8)Ô8)Ò9)Ò9)Ò9)Ò9)¹A1¶>.©:&¢3\1f\9d3\1d¢8"°;'´?+À;,¿:+Æ4'Ç5(É7*Ì:-Ë>-Ë>-Û64Ù42Õ30×52Ü:7à>;ç==ç==í6:ê37é13é13ã75ã75Ö71Ó4.´4'³3&°5&¯4%®6%¯7&²9(³:)Ä@1ÆB3Ö?4ØA6â;5á:4ê65ë76ê69ê69é77é77æ93æ93å:2å:2à90à90ß:4ß:4Þ;6Ý:5Ü87Û76Ø:9Û=<ÓB=Î=8»;0³3(£5&¢4%\9a;'\9a;'\93<(\91:&\8f:%\8d8#\8c7#\8b6"|?*s6!\834'\95F9¯LG®KF©JF¬MI\9bQH\9cRI\91\N\93^P\92aS\93bT\96`V\96`V|\8dY\98©u¬¾\8a¦¸\84\8f£nr\86QLb1,B\11,>\161C\e8G*9H+9B16?.9<3:=49:*?@0:>08<.9A28@1<M-PaA^z@j\86Lq\95Ks\97Mn\97Ko\98Ln\98Pm\97Op\97Tp\97Tp\98Qn\96Ok\95Ik\95Il\99Hn\9bJn\9eJo\9fKs¢Qx§Vz«Zv§Vl\9cPd\94H[\84JR{AKt:b[Kb[Kb[Kb[Kb[Kb[Kb[Kb[KaZJb[Kb[Kc\Lc\Ld]Me^Ne^Nd^De_Ef`HgaIhbLgaKf_Lf_LibOhaNgaKgaKf`Hf`HgaGgaGa^M^[JXUDSP?OL;NK:LK9ML:ON:PO;PR=SU@VXCXZE[]H\^Ie_Qe_QqSH|^S±f`³hbÇIJÁCDÖ89Ö89Õ62Ò3/¾;)½:(­E(°H+Ô7&Õ8'Ö9(Ö9(Ö9(Ö9(Ô9'Ô9'Ò9'Ò9'Ò9'Ò9'Ñ:'Ñ:'Ñ:'Ñ:'»A2·=.§<(¡6"\957\1d\968\1e >%§E,±<(²=)Â8+Ä:-Ì8,Í9-Ò;0Ô=2ñ4;ï29æ37å26ß56ß56à35à35æ69å58ä68å79Þ<:Ú86É4.Ã.(­:(­:(«:(«:(©:&©:&¬9&¬9&·:(¼?-Í?3ÑC7ß>6ß>6æ:6æ:6î64î64í74í74ê93ê93æ;3æ;3Ý:1Þ;2Ú=6Û>7×?:Ö>9Ô>=Ó=<ÇD<ÇD<¿E:¸>3¦:-¡5(\989'\9a;)\92=)\91<(\8b='\8a<&\87:&\858$\857#\857#}C/o5!x3#\8eI9¡SG\9dOC\98PD\9fWK\91YJ\91YJ\8b[M\8c\N\8f]R\91_T\99`W\9aaX\82\8ef\98¤|\9b©\85\80\8ej\kNDS62?+$1\1d,8*.:,4<17?4<?6;>5;;199/89)>?/:>07;-8@17?0<M-O`@^z@k\87Mr\96Lt\98Np\99Mp\99Mo\99Qn\98Pp\9aPq\9bQp\9aNn\98Lm\98Im\98Io\9bLq\9dNq Pt£Sx§Y{ª\y§^p\9eUb\91IX\87?^\87MU~DNw=d]Md]Md]Md]Md]Md]Md]Md]Md]Md]Md]Me^Ne^Nf_Of_Of_Of`FgaGhbJhbJicMicMhaNhaNhaNhaNgaKf`Jf`HgaIhbHhbHc`O`]L[XGVSBQN=MJ9IH6HG5KJ6LK7KM8MO:PR=RT?SU@TVA]WI]WIjLAwYN¬a[±f`ÎPQÑSTÝ?@Ú<=Ø95Õ62Á>,¿<*­E(¬D'Ó6%Ô7&Õ8'Ö9(Ö9(Ö9(Ô9'Ô9'Ò9'Ò9'Ò9'Ò9'Ñ:'Ñ:'Ñ:'Ñ:'º@1¶<-§<(£8$\968\1e\946\1c\9c:!¥C*µ@,µ@,Ã9,À6)Æ2&É5)Ò;0ØA6ï29ð3:ê7;ë8<å;<ä:;æ9;å8:ã36ä47æ8:ç9;Þ<:×53Æ1+¿*$®;)®;)¬;)¬;)«<(©:&«8%ª7$±4"¶9'È:.Ì>2Ü;3Ý<4æ:6ç;7î64î64í74í74ê93ê93æ;3æ;3á>5á>5Ý@9Ý@9Ø@;×?:Ô>=Ó=<Ã@8À=5¶<1°6+¡5(\9f3&\989'\9a;)\90;'\90;'\8a<&\88:$\858$\847#\846"\835!v<(n4 }8(\94O?¦XL\9fQE\97OC\9cTH\93[L\92ZK\8b[M\8b[M\8d[P\90^S\98_V\9aaXq}Ux\84\n|XSa=8G*.= /<(0=)1=/1=/5=28@5>A8>A8;;177-78(=>.9=/7;-7?06>/;L,N_?^z@k\87Mr\96Lt\98Np\99Mq\9aNp\9aRo\99Qq\9bQq\9bQq\9bOo\99Mn\99Jo\9aKr\9eOu¡Rw¦Vx§Wz©[w¦Xq\9fVf\94K[\8aBU\84<_\88NW\80FPy?e^Ne^Ne^Ne^Ne^Ne^Ne^Ne^Ne^Ne^Nf_Of_Of_Og`Pg`Pg`PibOibOhaNhaNhaNhaNhaNhaNgaKgaKgaIf`HfaDgbEgbEgbEf`Jd^H`[E\WAUS>PN9KJ6IH4EH5FI6EI8GK:FM=GN>FO>GP?RNCUQFXO@_VG\81ZI\85^M²QJÂaZàHGÛCBá77Þ44Ì=/Ê;-°B'­?$Ð7%Ð7%Ð9&Ñ:'Ò;(Ò;(Ñ:'Ñ:'Ñ:'Ñ:'Ñ:'Ñ:'Ð;'Ð;'Ð;'Ð;'º>2¶:.¨=)¦;'\92\8d6\e\91:\1e\9aC'¯B-±D/¿;,¼8)Å.%Æ/&Ò5.Ù<5ê2:í5=ç>Aé@CÞDBÜB@ÔC@ÓB?Æ52É85É>9Ê?:¿@9¹:3«9.¨6+£>*£>*£@+£@+£@)¢?(£='¢<&ª7$¬9&º8*½;-Ë8.Ï<2Ú=6ÞA:ê93ê93è:3è:3æ;1æ;1à>3à>3ÝC9ÜB8ÓE;ÑC9ÉB<Æ?9À?:¿>9§?2¤</\9b:*\998(\929'\929'\8b=)\8a<(\86=*\86=*\83<(\82;'~:'}9&~7%}6$v3"x5$\85B2\97TD\9bYK\93QC\8dRD\94YK\8f[M\8f[M\8f[N\90\O\94[R\95\S\98[V\99\W`hAX`9IR3=F'4@,2>*4>55?64=86?:=B;AF?EG9BD6?>*;:&78(=>.8<.6:,6>/6>/:K+N_?^z@j\86Lr\96Lt\98Np\99Mq\9aNq\9bSp\9aRp\9dLp\9dLp\9dLn\9bJn\9bJp\9dLt Sx¤W~ª_~ª_x¦^o\9dUd\91N\\89F[\88E\\89Fb\89RY\80IRyBg`Pg`Pg`Pg`Pg`Pg`Pg`Pg`Pf_Of_Of_Of_Og`Pg`Pg`Pg`PkdQjcPibOg`Mf_Lf_Lf_Lf_LgaKgaKgaIgaIgbEgbEgbEfaDgaKf`Jc^H`[EZXCUS>ON:LK7DG4DG4CG6DH7BI9BI9BK:BK:MI>SODWN?VM>mF5mF5£B;¼[TäLKÝEDâ88ß55Î?1Ì=/°B'ª<!Ï6$Ð7%Ð9&Ñ:'Ò;(Ò;(Ñ:'Ñ:'Ñ:'Ñ:'Ñ:'Ñ:'Ð;'Ð;'Ð;'Ð;'¹=1¶:.©>*§<(\93<!\8c5\1a\909\1d\99B&¤7"«>)Á=.Â>/Í6-Î7.Ø;4ÞA:ò:Bô<DëBEé@CØ><Ð64Ã2/¿.+¾-*Â1.Â72Â72¶70²3,¨6+¨6+¡<(¢=)¢?*¢?*¢?(¢?(¤>(¤>(¬9&­:'·5'·5'Å2(Ë8.Ù<5ßB;ë:4ë:4é;4é;4ç<2ç<2á?4á?4ÜB8ÛA7ÑC9Î@6Ä=7À93¹83·61 8+\9c4'\954$\965%\929'\929'\89;'\868$\86=*\85<)\83<(\81:&~:'|8%}6$|5#v3"}:)\8bH8\95RB\92PB\8cJ<\8dRD\9a_Q\8dYK\8eZL\91]P\92^Q\96]T\95\S\96YT\95XSV^7EM&5>\1f8A";G3:F23=4-7./835>9@E>EJCGI;AC5>=);:&67'<=-8<.6:,6>/6>/:K+M^>]y?j\86Lq\95Kt\98Np\99Mq\9aNq\9bSp\9aRp\9dLp\9dLo\9cKn\9bJn\9bJq\9eMv¢Uz¦Y\82®c\7f«`v¤\h\96NZ\87DV\83@\\89Fc\90Mc\8aSY\80IRyBhaQhaQhaQhaQhaQhaQhaQhaQg`Pg`Pg`Pg`Pg`Pg`Pg`Pg`Ph_Zh_Zh_Xh_Xh_Vh_Vh`Sh`ShaOhaOhaOhaOhaNhaNhaNhaNg_Hf^Ge_Id^Ha\H\WCRQ=ML8GJ7DG4>E5=D4=F5>G6<G7;F6HJ<IK=?G0DL5XS6RM0\81J5ªs^Ýg]Ò\RåFCáB?â?:Ý:5Î:0Í9/Ç4$È5%Ê7'Ê7'Ë8(Ì9)Î;+Ð=-Ï<,Ï<,Ï<,Ï<,Ñ;,Ñ;,Ñ;,Ñ;,·2)º5,®=-©8(\978"\934\1e\957\1e\99;"°@,®>*¼4(½5)Í4,Õ<4âC=çHBäDFæFHÔFBÈ:6°:.°:.¦<.¡7)¡=. <-\9c<.\9a:,\90=-\90=-\88?,\88?,\95>+\95>+\95@+\96A,\97@,\98A-\9cA,\9cA, ;) ;)¨7'©8(µ7+¹;/Á=1Ã?3Ú=4Û>5ÝA5ßC7ÜD7ÚB5ÔB5ÓA4ÓI<ÐF9ÁC7º<0ª8.¦4* 3,\9f2+\90=-\8f<,\8b<+\89:)\86;(\86;(\81=*\81=*|;'{:&x9'x9'x9'x9'u6%t5$z, \8d?3\97OA\95M?\8cM>\91RC\91VH\8dRD\99ZQ\99ZQ\92SL\92SL\99ZU\96WR\93VQ\9ea\QZ-HQ$AK&AK&<I/5B(1<+3>-1<,EP@X_MU\JLP7CG.@A"<=\1e9:*=>.9=/9=/8@14<-8I)PaA`|Bk\87Mq\95Kr\96Ln\97Kp\99Mp\9aRp\9aRn\9eHo\9fIo\9fKo\9fKp\9fOs¢Rz¦[~ª_\82­fw¢[i\93Q_\89G\\86F`\8aJd\8eNg\91Qc\8aUZ\81LSzEhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQi`[i`[i`Yi`Yi`Wi`WiaTiaTibPibPibPibPibOibOibOibOh`Ig_Hf`Je_Ic^J^YETS?ON:HK8EH5?F6>E5=F5>G6<G7;F6CE7AC5>F/DL5NI,ID'\84M8¯xcÔ^TØbXñROæGDâ?:â?:ÕA7Í9/Í:*Î;+Ï<,Ï<,Î;+Í:*Í:*Í:*Î;+Î;+Î;+Í:*Ï9*Ï9*Ï9*Ï9*Å@7Å@7¶E5®=-\989#\923\1d\924\e\946\1d¥5!ª:&Ã;/ÌD8ÞE=ãJBéJDéJDà@BáACÏA=Ä62¯9-°:.§=/¤:,¢>/ <-\9c<.\9a:,\90=-\8f<,\87>+\87>+\91:'\92;(\91<'\92=(\94=)\95>*\99>)\99>)£>,¢=+©8(¨7'²4(µ7+»7+½9-Ó6-Õ8/Ø<0Û?3ÙA4ÚB5ÕC6ÔB5Ê@3Ç=0»=1µ7+¨6,¥3) 3, 3,\8f<,\8e;+\8a;*\89:)\86;(\85:'\81=*\81=*|;'{:&y:(x9'x9'w8&u6%t5$\802&\91C7\97OA\93K=\8aK<\8fPA\8fTF\8dRD\91RI\96WN\94UN\96WP\9b\W\95VQ\8fRM\97ZUT]0Zc6^hC[e@GT:6C)4?.<G6LWGWbR^eST[IIM4AE,?@!;<\1d89)<=-8<.9=/8@14<-9J*PaA`|Bl\88Nr\96Ls\97Mo\98Lp\99Mp\9aRp\9aRp Jo\9fIn\9eJn\9eJq Pu¤T|¨]~ª_{¦_o\9aSa\8bI\\86D_\89Ic\8dMd\8eNb\8cLb\89TY\80KRyDhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQi_^i_^i_]i_]i`Yi`YiaViaViaTiaTiaTiaTiaTiaTiaViaVjbMiaLh`Kh`Ke`La\HYVCTQ>KL:HI7CF5AD3?F6?F6>E5=D4=F17@+AF/FK4G>!MD'\89YB¨xa¶UEËjZñc_äVRéEFêFGëADà69Ç9+Ç9+È:,È:,È9+Ç8*Æ7)Å6(Ê8+Ê8+Ê8+Ê8+Ë7+Ë7+Ë7+Ë7+Á2.Â3/¶6-±1(¡0 \9f.\1e£/ ¦2#Á=1ÇC7ÙD=àKDéLGçJEåFBáB>ÒD@ÐB>ºD:±;1\9c?.\9eA0\94G3\93F2\8fF3\8dD1\89E2\86B/\80C0~A.xD.wC-\86:*\86:*\85<+\85<+\88=*\89>+\8a=+\8b>,\93@.\92?-\97;,\97;,\9d9*\9f;,¥;.¦</µ;0¶<1º>2¼@4ÀB4ÀB4¾C4¾C4°<-®:+¥;-¢8*\979-\968,\92:.\92:.\87>-\86=,\84=+\82;)\80;+\7f:*}<*~=+z;*z;*x:+w9*s8(r7'p7&p7&\89;1\94F<\92NA\8dI<\87I<\8cNA\92RH\91QG\93LF\99RL\98SN\9aUP\97^W\93ZS\87\S\93h_v\84S}\8bZ|\8c_iyLIY25E\1e;J)L[:crUapS[fHLW9CJ+>E&=@!:=\1e78(;<,7;-9=/9A25=.9J*O`@`|Bl\88Ns\97Mt\98Np\99Mp\99Mp\9aRp\9aRq£Ln Il\9dKn\9fMt£Uy¨Zz¨`z¨`o\99Wd\8eL[\84B[\84Bc\8cJh\91Od\8dK^\87Eb\87SY~JRwChaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQi_^i_^i_]i_]i`Yi`YiaViaViaTiaTiaTiaTiaTiaTiaViaVkcNjbMjbMjbMgbNd_K]ZGYVCNO=KL:FI8CF5?F6?F6=D4<C3>G29B-DI2DI2H?"^U8\95eN\96fO¡@0ºYIî`\î`\óOPíIJíCFç=@È:,Æ8*Å7)Å7)Ç8*É:,Ê;-Ê;-Ð>1Ð>1Ñ?2Ñ?2Ò>2Ò>2Ó?3Ó?3ÐA=ÑB>ÇG>ÅE<ºI9¼K;ÃO@ÇSD×SG×SGáLEàKDãFAáD?àA=Þ?;ÓEAÎ@<·A7¯9/\9c?.\9d@/\94G3\94G3\8eE2\8dD1\88D1\85A.~A.}@-vB,vB,\848(\848(\83:)\83:)\86;(\86;(\87:(\88;)\8c9'\8c9'\926'\937(\9b7(\9d9*£9,¥;.°6+±7,³7+´8,¶8*µ7)²7(±6'©5&¨4% 6(\9e4&\946*\946*\919-\919-\85<+\84;*\82;)\81:(~9)~9)|;)|;)z;*z;*x:+v8)r7'q6&p7&q8'\8fA7\95G=\8fK>\8bG:\86H;\8dOB\94TJ\95UK\96OI\9bTN\97RM\97RM\95\U\95\U\91f]¢wn\8b\99h\85\93br\82UYi<BR+>N'O^=crQdsVZiLNY;AL.>E&=D%=@!;>\1f78(:;+6:,8<.:B36>/9J*N_?_{Ak\87Mr\96Lt\98Np\99Mq\9aNq\9bSp\9aRp¢Km\9fHm\9eLr£Qy¨Z{ª\w¥]r Xa\8bI\\86D[\84B^\87Ee\8eLh\91Od\8dK_\88Fa\86RX}IQvBhaQhaQhaQhaQhaQhaQhaQhaQibRibRibRibRibRibRibRibRja\ja\jaXjaXjbUjbUjcQjcQjcPjcPjcQjcQjbUjbUjbWjbWldQkcPkbQkbQjcQhaOb]J_ZGURARO>LK9IH6EF4CD2AB2?@0<K.:I,SC,P@)r7)\94YK¶YQ\9a=5¢1)²A9×XRìmgõeeåUUåHOéLSÕK@ÐF;Ê@5È>3Í@6ÑD:ÔF<ÕG=ÚJAÚJAÚJAÛKBÝJBÞKCÞKCÞKCìRRëQQãTPàQMÚQKÚQKßRKáTMäIEãHDçCBåA@ãA>äB?àE@áFA×IGÏA?¶?7°91\9c@1\9c@1\8fF3\90G4\8bC4\8aB3\88@2\86>0\81=0\80</{=0{=0};-};-~<.~<.~<.\7f=/\7f=-\7f=-\7f:+\7f:+\83:+\84;,\88:-\89;.\8e<.\8f=/\94<0\94<0\98</\98</\9c;+\9c;+\9e:*\9d9)\9a9(\998'\929)\918(\8a;*\89:)\85<-\85<-\81<-\80;,\7f:+}8)|9){8(z8*z8*x9*y:+v;-t9+p6(o5'p8+r:-\8bI;\8cJ<\85L;\83J9\82M=\89TD\94UL\96WN\97PL\9bTP\95TP\95TP\8adY\88bWylY\86yfgvMZi@HY-AR&GZ-Wj=bxJg}OXjBK]5=L-7F':D,;E-;?08<-78(9:*59+8<.;C47?08I)L]=\x>i\85Kq\95Kt\98Np\99Mq\9aNq\9bSp\9aRm\9eLm\9eLp¡Pv§V|ªay§^p\9dZg\94QY\83C[\85E`\89Gc\8cJg\8eKg\8eKe\8dGd\8cF`\85RW|IPuBhaQhaQhaQhaQhaQhaQhaQhaQibRibRibRibRibRibRibRibRja\ja\jaXjaXjbUjbUjcQjcQjcPjcPjcQjcQjbUjbUjbWjbWldQkcPkbQkbQkdRibPe`Mc^KZWFVSBPO=LK9GH6EF4BC3@A1:I,;J-QA*SC,\81F8\9b`R®QI\8f2*®=5²A9ÒSMðqkÿssôddòU\öY`àVKÙODÑG<ÍC8ÑD:ÔG=ÖH>ÖH>ÙI@ÙI@ÚJAÚJAÝJBÞKCÞKCßLDáGGàFFÙJF×HDÓJDÒICÕHAÕHAÝB>ÞC?æBAçCBåC@äB?ÝB=Û@;ØJHÎ@>µ>6±:2\9eB3\9b?0\8cC0\8dD1\89A2\88@1\86>0\85=/\80</\80</|>1|>1~<.~<.~<.~<.\7f=/\7f=/\7f=-\7f=-\81<-\81<-\83:+\83:+\857*\857*\875'\875'\8f7+\908,\948+\959,\9b:*\9c;+ <, <,\998'\998'\929)\918(\89:)\889(\83:+\83:+\7f:+~9*}8)|7(z7'z7'y7)y7)u6'w8)u:,s8*o5'n4&q9,u=0\8dK=\8bI;\84K:\84K:\85P@\8bVF\94UL\95VM\94MI\9aSO\96UQ\9aYU\8cf[\81[PdWDgZGBQ(?N%>O#K\0^qDk~QcyKVl>M_7@R*6E&5D%<F.<F.:>/6:+89):;+59+8<.;C47?06G'HY9Ws9e\81Gn\92Hr\96Lp\99Mr\9bOr\9cTq\9bSl\9dKn\9fMs¤Sx©Xz¨_s¡Xg\94Q]\8aGX\82B\\86Fc\8cJf\8fMf\8dJe\8cIe\8dGf\8eH_\84QV{HOtAhaQhaQhaQhaQhaQhaQhaQhaQibRibRibRibRibRibRibRibRjcSjcSjcPjcPjdLjdLjdJjdJjdJjdJjdLjdLjcQjcQjbUjbUlcTkbSjaRkbSlcTkbShaQf_OaZH]VDVQ>QL9NI6KF3HC0FA.9H):I*c9)rH8³GG´HH¿2:½08ÉACÅ=?ÆLIÝc`íspêpmæadà[^ÚQIÔKCÎE=ÌC;ÏD=ÐE>ÐC<Í@9ÑB<ÒC=ÓB=ÔC>×C?ØD@ØD@ÙEAß>Cà?DÝCCßEEáIHáIHæFFåEEê@Cê@Cî@Bî@BåA@â>=Ø?9Õ<6ÛEFÏ9:¸93·82¥@4 ;/\91>0\91>0\8d;/\8c:.\8c70\8b6/\8a71\8a71\8783\8894{<3{<3{=2{=2y=2y=2y>0y>0{=0{=0|=.{<-|:,{9+z8(y7'};/~<0\82:,\83;-\8a;,\8c=.\92<+\93=,\8f9(\8f9(\8a;*\8a;*\82>+\81=*~=+}<*\808*\7f7)~6(}5'z4(z4(y5*y5*s3'u5)t8-r6+m5(m5(q<.vA3\87R@\83N<|O<\7fR?\84VF\86XH\8eTI\8eTI\93NI\97RM\8fVO\93ZS\7fjYoZIFP5AK0?N/JY:VhB_qKd{MbyKUm=E]-AV-5J!/?"3C&;F89D67;:598:;+;<,59+8<.;C46>/5F&EV6So5a}Ck\8fEq\95Ko\98Lr\9bOr\9cTq\9bSl No£Qr¥Xt§Zq Xi\98P_\8cKY\86E]\87G_\89Ib\8bId\8dKf\8eHe\8dGd\8cCc\8bB^\83PUzGNs@haQhaQhaQhaQhaQhaQhaQhaQjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdQkdQkeMkeMkeKkeKkeKkeKkeMkeMkdRkdRkcVkcVlcTkbSjaRkbSlcTlcTibRg`Pd]K_XFXS@SN;OJ7LG4ID1FA.:I*:I*f<,\81WGÀTTª>>¶)1ÒEMÆ>@Á9;¶<9ÁGDÖ\YàfcÝX[ËFIÒIAÎE=ËB:ÍD<ÑF?ÒG@ÐC<Ë>7ÑB<ÒC=ÓB=ÔC>×C?ØD@ÙEAÙEAß>Cß>CÝCCßEEßGFÞFEà@@Þ>>ê@Cé?Bê<>é;=â>=ã?>ÞE?ßF@×ABÌ67µ60¶71¥@4\9f:.\90=/\90=/\8b9-\8b9-\8b6/\8b6/\8a71\8a71\8894\8894{<3{<3{=2{=2y=2x<1x=/x=/w9,w9,y:+z;,|:,|:,|:*|:*};/|:.\808*\7f7)\845&\856'\8b5$\8b5$\8d7&\8d7&\889(\89:)\81=*\81=*~=+}<*\7f7)~6(}5'|4&y3'y3'x4)x4)q1%t4(s7,r6+m5(n6)r=/xC5\89TB\85P>~Q>\81TA\86XH\86XH\8cRG\8aPE\97RM\97RM\8aQJ\8dTMzeTlWFCM2>H-HW8ZiJgySewQXoAQh:Ld4H`08M$-B\19*:\1d1A$:E79D68<;7;:;<,;<,59+8<.;C46>/3D$CT4Pl2_{Aj\8eDp\94Jo\98Lr\9bOr\9cTr\9cTn¢Pq¥Ss¦Yp£Vk\9aRb\91I[\88GW\84Cb\8cL_\89I_\88Fa\8aHf\8eHg\8fIc\8bB^\86=^\83PTyFMr?h_Pi`Qi`Qi`QjaRjaRjaRkbSjaRjaRjaRjaRjaRjaRjaRjaRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdTn]Mq`PqdTqdTlcTi`QgaShbTebQebQa_JYWBVR9TP7OI/HB(NE(I@#dH2\88lV²zm¬tg³[W­UQ´DCµEDÃCDÆFGÎFFÑIIÔJHÕKIËEDËEDÐFCÑGDÓF?ÐC<ËE9ÌF:ÄE6ÅF7ÊE<ËF=ÖBBÖBBà<Eà<EÞBCÞBCßDBßDBàECàECáFBáFBáC@áC@áB>àA=ã?=ã?=ä?=ä?=ÌF=Å?6±;1¬6,\99=0\98</\86A2\84?0|A3|A3}?4|>3\84:1\84:1\8a71\8a71\85<-\84;,\83;,\83;,\82:+\82:+\80;,\80;,\7f:+\7f:+~:-~:-~:-~:-};/};/|8-|8-|8-|8-|:.|:.|:.|:.y9-y9-y9-y9-w9,w9,w9,v8+u9.t8-t8-s7,r6+q5*p6*p6*j2%o7*m5(k3&m8*j5'n9+~I;\80TI\80TI\87PI\87PI\91MJ\92NK\94OJ\95PK\8fTL\8dRJ~_K\81bNdcEVU7GY3M_9g\81T_yLWpFQj@Qf?Mb;HW8BQ28B)4>%38$5:&=>.@A1A?2?=00;-0;-39+5;-9=,;?.=B+>C,S_9coIn\87Pu\8eWp\95Ps\98Sq\9dPr\9eQv\9d^~¥f~¥fq\98Yc\8aK^\85F^\85F]\84E_\86Ga\88Id\8bLe\8cMe\8cMb\89J_\86G]\84E_\81OTvDKm;h_Pi`Qi`Qi`QjaRjaRjaRkbSjaRjaRjaRjaRjaRjaRjaRjaRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdTraQraQobRqdTpgXpgXlfXicUgdSkhWmkVjhShdKc_F[U;RL2SJ-H?"X<&lP:\8bSF\86NA\96>:\99A=ÀPOÀPOÊJKÊJKÎFFÎFFÐFDÐFDÖPOËEDÅ;8Æ<9ÐC<ÓF?ÉC7Ä>2ÅF7ÆG8ÊE<ÌG>×CCØDDâ>Gâ>GÞBCÞBCßDBßDBàECàECàEAáFBáC@áC@áB>àA=â><â><ä?=ä?=ÍG>ÈB9¶@6¯9/\99=0\96:-\84?0\82=.|A3|A3}?4|>3\84:1\84:1\8a71\8a71\84;,\84;,\83;,\83;,\82:+\82:+\80;,\7f:+\7f:+\7f:+~:-~:-~:-~:-};/};/|8-|8-|8-|8-{9-{9-|:.|:.z:.z:.y9-y9-x:-w9,w9,w9,t8-t8-s7,s7,r6+q5*p6*o5)j2%o7*m5(k3&l7)j5'n9+~I;\80TI\80TI\87PI\88QJ\92NK\93OL\95PK\96QL\89NF\8aOG|]I\80aMmlNkjLasMfxR[uHUoBMf<Ib8J_8H]6FU6BQ2;E,6@'5:&6;'<=-?@0@>1></1<.1<.4:,5;-9=,;?.<A*=B+P\6`lFj\83Lr\8bTn\93Nr\97Rr\9eQr\9eQw\9e_{¢cx\9f`k\92S`\87H]\84E]\84E\\83D_\86Ga\88Ic\8aKd\8bLd\8bLb\89J_\86G]\84E]\7fMQsAHj8g`PhaQhaQhaQibRibRibRjcSibRibRibRibRibRibRibRibRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdTrbSo_Pj^Pl`RmeXogZieYeaUecVom`zwh~{l\7fzgzubojVe`LMW<?I.=?'CE-NC/H=)V:,_C5d<0f>2qA5xH<\84NB\8dWK\96^Q\9abU´aY¬YQ±JE¯HCÅCAÉGEÓB?Ï>;Ó@9ÔA:ÓC;ÕE=ØD@ÙEAÜDCÜDCÜDCÜDCÝEDÝEDÛFBÜGCÜGCÜGCÛF@ÚE?ÛD=ÚC<ÚC<ÚC<ÜC=ÜC=ÓF=ÑD;¿C9·;1\9d;.\975(\84;,\84;,~@1~@1~?0}>/\83;/\83;/\888/\888/\83;,\83;,\83;,\82:+\82:+\82:+\7f:+\7f:+~:-~:-~:-~:-};/};/};/};/{8/{8/{8/{8/{8/{8/y9/y9/y;0y;0y;0x:/v:/v:/u9.u9.t8.s7-r8-q7,p6+p6+n5*n5*j1&o6+j4(i3'l6*i3'm7+}G;\87QG\87QG\8bPH\8cQI\91RK\92SL\90UM\91VN\85YN\87[PxaOv_MkkQqqWhwXfuVPdAJ^;DX5BV3DU5FW7ES9DR8?I1:D,6>)5=(9=,:>-;=/9;-3=42<36<26<29=.:>/<A*<A*LX4[gCe~Gn\87Pl\91Lr\97Rs\9fPt Qz¡bw\9e_n\95Vb\89J\\83D[\82C\\83DZ\81B_\86G`\87Hb\89Jc\8aKc\8aKa\88I^\85F]\84EX}JMr?Di6g`PhaQhaQhaQibRibRibRjcSibRibRibRibRibRibRibRibRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdTscTqaRl`Rk_QiaTkcVieYieYigZwuh\88\85v\90\8d~\95\90}\92\8dz\88\83o~ye[eJKU:DF.DF.LA-G<(T8*[?1Z2&Z2&_/#`0$g1%j4(p8+s;.\98E=¢OG¸QL¶OJÃA?ÃA?ÔC@ØGDÓ@9ÔA:ÔD<ÕE=ÙEAÙEAÝEDÝEDÜDCÜDCÝEDÝEDÛFBÛFBÛFBÛFBÛF@ÚE?ÛD=ÚC<ÚC<ÚC<ÛB<ÛB<ÒE<ÒE<ÃG=¼@6 >1\986)\85<-\85<-~@1~@1~?0}>/\83;/\83;/\888/\888/\83;,\83;,\82:+\82:+\82:+\819*\7f:+\7f:+~:-~:-~:-~:-};/};/};/};/{8/{8/{8/{8/{8/z7.x8.x8.y;0y;0y;0x:/v:/u9.u9.u9.s7-s7-q7,p6+p6+o5*m4)m4)j1&o6+j4(h2&k5)h2&k5){E9\86PF\87QG\8cQI\8dRJ\92SL\93TM\91VN\91VN\89]R\8a^Sv_MnWE``FggMYhIN]>CW4>R/:N+9M*>O/AR2ES9FT:BL4>H0:B-7?*9=,9=,9;-79+3=43=46<26<29=.:>/;@);@)HT0Wc?azCk\84Ml\91Lt\99Tu¡Rv¢Sz¡bq\98Yd\8bL[\82CY\80A[\82C\\83DZ\81B^\85F_\86Ga\88Ia\88Ia\88I_\86G]\84E\\83DW|ILq>Ch5g`PhaQhaQhaQibRibRibRjcSibRibRibRibRibRibRibRibRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdTrfXsgYph]ldYfbYie\qngzwp~}x\8d\8c\87\9f\9c\95§¤\9dª¦\9b¨¤\99¢\9c\90\9a\94\88x{hcfSMR>EJ6>J6;G3:G3=J6BQ<?N9;H66C16>/4<-7;-7;-M7)`J<\8aQJ\8fVO±GI´JLÏBHÏBHØ?AØ?AÚB?ÛC@ÚE?ÚE?ÚE?ÚE?ÛEDÛEDÚDCÚDCÚDCÚDCÙEAÙEA×G?ÖF>ÕF>ÔE=ÒE;ÒE;ÓF<ÓF<Ö?8ØA:ÊF:ÅA5ª@3¢8+\8e=,\8d<+\82?.\82?.~?.}>-\81<,\81<,\86:,\86:,\82:+\82:+\82:+\82:+\7f:+\7f:+~9*~9*~:-~:-};/};/};/};/};/};/z:0y9/y9/y9/w9.w9.v8-v8-v:/v:/v:/u9.t:.t:.s9-s9-q7,q7,p6+p6+n5*m4)l3(l3(g1%l6*h4'f2%i5(f2%i5(yE8\8fLD\90ME\8fPI\91RK\8bWL\8cXM\83[O\83[Os\Lt]Mc\I\UBUZDY^HLXB?K5:F28D05A-5A-8D0<H4@L8CO;@L8=I59E17C/5A-3?+2>*0<(3<72;65:35:38;09<1:?);@*FR.T`<^vBj\82Nn\93Nw\9cWw£Tw£Tx\9eak\91T]\83FW}@Y\7fB\\82E\\82E[\81D^\84G^\84G_\85H_\85H_\85H^\84G]\83F\\82EVzJKo?Bf6g`PhaQhaQhaQibRibRibRjcSibRibRibRibRibRibRibRibRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdTmaSpdVnf[kcXhd[qmd\83\80y\92\8f\88¤£\9e²±¬ÃÀ¹ÈžÈĹÄÀµ¿¹­¸²¦\9c\9f\8c\81\84qafRMR>?K7:F27D08E17F16E07D27D2;C4=E6BF8CG9F0"O9+r92~E>²HJÁWYØKQÎAGÛBDÜCEÜDAÝEBÛF@ÛF@ÚE?ÙD>ÛEDÛEDÚDCÚDCÚDCÙCBØD@ØD@×G?ÖF>ÔE=ÓD<ÒE;ÒE;ÒE;ÓF<Õ>7×@9ÊF:ÇC7®D7§=0\90?.\8d<+\82?.\82?.~?.}>-\81<,\81<,\86:,\86:,\82:+\82:+\82:+\819*\7f:+~9*~9*~9*~:-~:-};/};/};/};/};/};/z:0y9/y9/x8.w9.v8-u7,u7,u9.u9.t8-t8-s9-r8,r8,r8,p6+p6+p6+o5*m4)l3(l3(k2'g1%l6*h4'f2%h4'e1$h4'xD7\8fLD\91NF\90QJ\91RK\8bWL\8bWL\81YM\80XLs\LpYI_XEYR?OT>LQ;>J44@*1=)/;'.:&.:&0<(3?+7C/9E1=I5<H4<H4:F28D05A-2>*0<(0940943814927:/8;09>(:?)BN*Q]9\t@j\82No\94Ox\9dXw£Tv¢Sp\96Yc\89LW}@V|?Y\7fB[\81D[\81D[\81D]\83F]\83F^\84G^\84G]\83F\\82E\\82E[\81DUyIJn>Ae5f`PgaQgaQgaQhbRhbRhbRicShbRhbRhbRhbRhbRhbRhbRhbRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdThbVicWhd[kg^qpk\85\84\7f\9d\9d\9b¯¯­ÀÂÁÐÒÑààÞååãæâßáÝÚÛÖÒÔÏËÔ¸­½¡\96\98\85v}j[_ZFPK7>F/<D-=J6<I5=E6;C4<=5:;3;74:63;>3<?4O61U<7\89GH¤bcÄad¾[^ÉSSÉSSÓOKÒNJÝIEÛGCáD?àC>ÛEFÛEFÜCEÜCEÛCBÛCBÛCBÚBAÚEAÙD@ÕE=ÔD<ÒE<ÒE<ÐF<ÐF<Û>7Û>7ÐC9ÎA7·F8°?1\95>-\8f8'\85>,\85>,\80?-\7f>,\80=*\80=*\83<*\83<*\80;,\80;,\7f:+\7f:+~9*~9*}9,}9,};/};/};/};/{;1{;1{;1{;1w;1w;1v:0u9/t8.s7-r8-q7,q8-q8-q8-p7,n8,n8,m7+m7+o6-o6-l6,k5+j4*j4*h4)h4)f2'k7,f4)c1&e3(b0%e3(uC8\94KE\95LF\8eRJ\8fSK\81YM\80XLp]No\MdaP[XGNRAJN=AJ99B12:+08)25.25.06,/5+.6)/7*2:-4</9D4:E5<I7<I79H35D/1@+/>)-63-6316027158/7:19=,:>->I)MX8Zr@i\81Oo\94Qx\9dZu¡Vr\9eSi\8cT]\80HUx@WzB[~F[~F[~F]\80H_\82J_\82J_\82J^\81I^\81I]\80H]\80H]\80HSwKGk?>b6f`PgaQgaQgaQhbRhbRhbRicShbRhbRhbRhbRhbRhbRhbRhbRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdToi]mg[lh_tpg\84\83\9f\9a¼¼ºÎÎÌÍÏÎÞàßññïøøöúöóöòïðëçéäàêÎÃÜÀµ¿¬\9d¢\8f\80{vb`[GGO8AI2=J6=J6?G8>F7@A9>?7?;8>:79<1=@5L3.H/*r01\92PQÃ`cÍjmÌVVÌVVÖRNÕQMßKGÝIEãFAâE@ÛEFÛEFÜCEÜCEÛCBÛCBÚBAÚBAÙD@ÙD@ÕE=ÔD<ÑD;ÒE<ÐF<ÐF<ÞA:Ü?8ÐC9ÏB8¹H:±@2\94=,\8c5$\85>,\85>,\80?-\7f>,\80=*\80=*\83<*\83<*\80;,\7f:+\7f:+\7f:+~9*~9*}9,|8+};/};/};/};/{;1{;1{;1{;1w;1w;1v:0u9/t8.s7-q7,q7,p7,p7,p7,o6+m7+m7+l6*l6*o6-n5,l6,k5+j4*i3)h4)g3(f2'k7,e3(c1&e3(a/$e3(tB7\94KE\95LF\8eRJ\8fSK\81YM\7fWKo\MmZKWTCKH7?C2?C29B109(/7(5=.47047039/17-/7*/7*08+19,6A19D4<I7>K9:I46E02A,0?*+41,52/4.16047.7:19=,:>-;F&KV6Xp>h\80No\94Qw\9cYs\9fTn\9aOb\85MX{CRu=VyAZ}EY|DY|D[~F^\81I^\81I^\81I^\81I]\80H]\80H]\80H\\7fGPtHEi=<`4icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSibRjcSjcSjcSkdTkdTkdTleUleUleUleUleUkdTkdTkdTkdTee]ee]stn\91\92\8c­¯¬ÃÅÂ×ÛÜéíîñõöôøùûýüþÿÿÿÿýýüúúöó÷óðûàÍóØÅÜʲƴ\9c§ \83\8a\83fbcDGH)EH-CF+ID1ID1I:3D5.H32M87?><@?=D97D97bFC\89mj¾\95\8fÚ±«Ê\90\85·}r¼bY·]TÖRPÔPNåEGäDFØHHÛKK×EEÏ==×>@áHJáGGØ>>Ù??Ú@@ÙA>ÙA>ÕA=Ô@<ÑA9Ð@8àA;Ý>8ÏA7Í?5¹C7³=1\99=.\926'\87>-\87>-\81>-\80=,~=)~=)\7f<)\7f<)\7f:+~9*}9,}9,|8+|8+{9-z8,{9-{9-y9/y9/y9/z:0z:1z:1v=2v=2u<1s:/r9.q8-n8,m7+m7+m7+l8+l8+l8+l8+j9+j9+g3(k7,o;0n:/j6+g3(d2'e3(c1&h6+b2&]-!_/#^."a3&oA4\8bNI\8dPK\83RK\82QJu[Nw]P`ZJSM=>G4<E26C23@/2=/1<.39/39/77566457246116/05..6+.6+,8*0<.5D19H58J45G11C-.@*)2-)2--2,.3-25,58/8<+:>-5@"FQ3Vm?i\80Rq\95Xx\9c_q\9cWi\94OZ}GVyCSv@Sv@VyCY|FY|FX{E]\80J`\83M`\83M\\7fI[~H]\80J_\82L]\80JRpNEcA;Y7icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSibRjcSjcSjcSkdTkdTkdTleUleUleUleUleUleUleUleUkdTee]oog\85\86\80¤¥\9fÀ¿×ÙÖéíîöúûöúû÷ûüûýüýÿþÿþüÿþüÿüùÿûøÿíÚÿæÓîÜÄÜʲÁº\9d¨¡\84\82\83dijKMP5FI.FA.GB/K<5H92L76O:9<;9CB@RGE]RP\82fc¨\8c\89Ö­§ë¼ÿÑÆê°¥×}t¾d[ÖRP×SQæFHß?AÕEEÕEEÙGGÜJJÝDFÖ=?×==ÜBBØ>>Ù??Ø@=Ø@=ÕA=Ô@<ÑA9ÑA9ß@:Ý>8ÐB8Î@6ºD8´>2\9a>/\937(\87>-\87>-\81>-\80=,~=)~=)\7f<)\7f<)\7f:+~9*}9,}9,|8+|8+{9-z8,|:.|:.z:0z:0z:0z:0z:1z:1u<1t;0t;0r9.q8-p7,m7+l6*l6*l6*k7*k7*k7*k7*i8*i8*j6+l8-n:/n:/k7,h4)e3(d2'b0%d2'^."]-!b2&^."_1$n@3\84GB\8bNI\87VO\84SLpVIjPCOI9C=-8A.7@-3@/2?.2=/1<.4:04:077577557246116/16//7,/7,,8*/;-3B/7F37I36H23E/1C--61,50-2,-2,03*36-6:)8<+5@"FQ3Ul>j\81Sr\96Yx\9c_o\9aUe\90KX{EUxBRu?Ru?UxBWzDX{EWzDZ}G]\80J^\81K[~HZ}G\\7fI]\80JZ}GPnLCa?7U3gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSibRjcSjcSjcSkdTkdTkdTleUleUleUleUleUleUleUleUleUaedw{z\95\99\98²¶µÉÑÓáéëñùû÷ÿÿùÿÿùÿÿûÿüúÿûþÿùÿÿúÿÿøÿÿøøÿÞôûÚéóÐÜæÃÍÙ±ºÆ\9e\9bª\7f\84\93h^hCNX3CG,AE*HE4IF5I@7H?6E99UIIj`_\80vu\99\94\90¹´°ÓÑÅáßÓòæØÿõçÿâ×Û¯¤¾ea¤KGÄGKÔW[Ô[SÊQIÆGAÆGAÑGDÒHEÖDDÕCCÖ>=Ö>=×?>Ø@?ÖA=ÖA=Ô@<Ô@<Ù@:Ø?9ÎD:ÍC9»F=´?6\9c>2\968,\89=/\89=/\81>.\80=-~=+~=+~=+~=+~:-}9,}9,}9,{9-{9-{9-z8,{;1{;1{;1{;1z;2z;2y:1y:1q;1q;1o;0n:/m9.l8-i7,h6+i7,i7,h8,h8,h8,h8,h8,h8,k90k90j8/j8/j8/i7.d4*b2(b3)`1'[,"_0&a5*Y-"\0%pD9yRK~WPwZRoRJYMAOC7;=/46(/:*0;+0<.1=/4<14<17:169068368349338227027008-08--8*/:,2?.5B17F38G46G46G43=20://5+,2(-0%03(37(6:+5?&FP7WmGm\83]u\97dy\9bhk\94Z^\87MVvDTtBRr@Rr@TtBVvDVvDVvDWwE[{I\|JZzHZzH]}K[{IXxFOePAWB5K6gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSibRjcSjcSjcSkdTkdTkdTleUleUleUleUleUleUmfVmfVmfVgkj\83\87\86£§¦º¾½ÍÕ×åíïòúüôüþùÿÿùÿÿûÿüúÿûýþøýþøÿÿ÷ÿÿø÷þÝõüÛîøÕæðÍÝéÁÎÚ²³Â\97\9e­\82}\87bdnIMQ6DH-KH7LI8KB9G>5QEEk__\8b\81\80£\99\98µ°¬ËÆÂÝÛÏèæÚøìÞÿúìÿñæÿÙÎÿ¬¨æ\8d\89Ù\`º=AÈOGÌSKÍNHÆGAÎDAÕKHÙGGÐ>>Ô<;Õ=<Ö>=×?>ÖA=ÖA=ÕA=Ô@<×>8Ø?9ÏE;ÎD:»F=´?6\9d?3\979-\89=/\89=/\81>.\80=-~=+~=+~=+~=+~:-}9,}9,}9,{9-{9-{9-z8,|<2|<2{;1{;1z;2y:1y:1y:1o9/o9/m9.l8-k7,j6+h6+g5*i7,i7,h8,h8,h8,h8,h8,h8,l:1i7.g5,h6-j8/i7.d4*`0&c4*`1'].$`1'`4)V*\1f^2'yMB\81ZS|UNjME]@8H<0D8,9;-8:,-8(.9)/;-1=/4<14<169058/68368349338238127019.19.-8*.9+/<+2?.4C07F37H58I69C84>317-,2(,/$-0%15&37(3=$GQ8\rLs\89cz\9cix\9agd\8dSS|BRr@Qq?Pp>Pp>Qq?SsASsATtBUuCYyG[{IZzH[{I]}KYyGTtBH^I:P;-C.gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSibRjcSjcSjcSkdTkdTkdTleUkdTleUleUleUmfVmfVngWngWksu\85\8d\8f¢ª­·¿ÂËÕ×ãíïðüüòþþ÷ÿþ÷ÿþúÿùùÿøûÿñøüîøùé÷øèñÿçñÿçðýáëøÜéóÑÞèÆËÑ­·½\99\9c¢\80|\82`X^DGM3CL9CL9=H::E7a^W\82\7fxª£\9dÀ¹³Ê¿×ÏÌâáÜîíèõöîóôì÷íãüòèÿõìÿçÞߨ£¥ni M;¨UC¹\K¾aPÂSH·H=¾B:ÂF>Ê@=ËA>ÏA=ÐB>ÑB>ÒC?ÐC<ÐC<Ò?8ÔA:ËF?ÊE>·F>°?7\9b>6\97:2\89<2\89<2\81=0\80</~<.~<.~<.~<.~:-}9,|:.|:.{9-{9-y9/x8.|<2|<2z;2z;2y:1y:1x92x92k9.k9.j8-i7,i7,h6+f6*f6*f8+f8+f8+f8+d8+d8+d8+d8+j:0g7-e5+e5+h8.h8.c4*`1'a2(b3)\0%\0%\0%V*\1fa7+~THg]TZPGHA7>7-77+88,8<.9=/19,2:-4</4</7:/69.68-57,2:/2:/2:-2:-19,19,/:,/:,-8(-8(.9)0;+2?.5B18E4:G6;F57B14;+/6&.2$.2$04%15&09$HQ<avWx\8dnz\9aqs\93j[\82SIpANn=Nn=Oo>Oo>Oo>Oo>Pp?Qq@TtCXxGZzI[{J]}L]}LWwFOo>DQG6C9*7-gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSibRjcSjcSjcSkdTkdTkdTleUkdTleUleUmfVmfVngWohXohXgoqz\82\84\93\9b\9e¬´·ÃÍÏÛåçë÷÷òþþóþúõÿüùÿøùÿøúþð÷ûíõöæòóãïÿåïÿåðýáîûßîøÖåïÍÓÙµÀÆ¢¬²\90\8a\90nbhNLR8CL9EN;EPBGRD}zs\9d\9a\93Ľ·ÖÏÉÜÔÑäÜÙíìçø÷òîïçùúòÿýóÿûñÿïæÿëâÿÛÖÿÏÊÝ\8axµbP¥H7²UDÄUJµF;º>6ÇKCÊ@=ËA>ÏA=ÐB>ÑB>ÑB>ÏB;ÏB;Ó@9ÔA:ËF?ÈC<³B:­<4\9a=5\98;3\89<2\89<2\81=0\80</~<.~<.~<.~<.~:-}9,|:.|:.{9-{9-y9/x8.{;1{;1y:1y:1x90w8/w81w81j8-j8-j8-i7,i7,h6+g7+g7+f8+f8+f8+f8+d8+d8+d8+d8+h8.f6,e5+f6,g7-g7-f7-d5+a2(d5+^2'[/$`4)`4)g=1{QERH?G=4;4*;4*99-88,48*37)3;.3;.3;.3;.58-47,46+46+19.19.19,08+08+08+.9+.9+.9)-8(-8(.9)/<+2?.4A06C2:E48C28?/4;+37)15'04%/3$/8#JS>cxYv\8blr\92ig\87^QxIAh9Jj9Ll;Mm<Mm<Ll;Ll;Mm<Nn=TtCXxGZzI[{J]}L\|KSsBIi8:G=.;1#0&feSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSibRjcSjcSjcSkdTkdTkdTleUkdTkdTleUmfVngWohXohXpiYbkpluz\83\8e\92¡¬°½ÈÌÒÝáâððíûûòý÷óþøøÿõùÿöûÿîùýìøúåöøãøôëùõìýóçýóçÿñáúéÙêÕÀØîÀ¯\9b¡\90|tm[\UCMPESVKXc[bme\90\9b\8aªµ¤ÒÏÆãà×òââøèèÿðóÿô÷ÿüüÿùùôùòóøñõûíùÿñÿÿóÿÿóÿÞÃâª\8f´pY\9f[D­VC­VC¹MA¹MAÂG?ÂG?ÈE=ÉF>ÉD=ÉD=ÈC<ÇB;ÐC<ÑD=ÇF@ÂA;¯@9¨92\96<4\96<4\89<4\89<4\81=4\80<3~<0~<0~<0~<0};/|:.|:.|:.{9-{9-y9/x8.z:1z:1x90x90w81v70s7/s7/j8-j8-i9-h8,h8,h8,g9,f8+f8+f8+d8+d8+d8+d8+d8+d8+f5.g6/h70h70g80g80i:2k<4d8/i=4b6-`4+nC:vKBsH?tI@7>6180/7,4<16<228.14)25*58-47,46)46)35(35(46)46)-8(-8(-8(-8(-8(-8(-8(-8(.9).9)-8(-8(.9)/:*0;+1<,7C-7C-:A/9@.9=.59*15&.2#09&KTAbv[o\83hd\84_YyTGmD=c:If6Li9Nk;Nk;Li9Kh8Mj:Ol<UrBXuE[xH\yI^{K\yIQn>Eb24=:)2/!*'feSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSibRjcSjcSjcSkdTkdTkdTleUkdTkdTleUmfVngWohXpiYpiYgpuluz\80\8b\8f£®²ÁÌÐÓÞâàîîîüüòý÷óþø÷ÿôøÿõüÿïûÿîýÿêüþéû÷îýùðÿ÷ëÿøìÿ÷çÿñáòÝÈáÌ·Á°\9c¥\94\80{tbd]KVYN_bWkvn{\86~£®\9d·Â±ÙÖÍéæÝûëëÿññÿòõÿðóûõõûõõ÷üõûÿùøþðòøêöøêûýïÿêÏÿíÒÿÄ­Â~g§P=¬UB¾RF±E9ÂG?ÂG?ÉF>ÉF>ÉD=ÈC<ÇB;ÆA:ÑD=ÒE>ÇF@À?9¬=6¦70\95;3\95;3\89<4\89<4\81=4\80<3~<0~<0~<0~<0};/|:.|:.|:.{9-{9-y9/x8.z:1y90x90w8/v70u6/r6.r6.j8-j8-i9-i9-i9-h8,g9,g9,e7*e7*c7*c7*c7*c7*c7*c7*f5.i81k:3k:3h91i:2l=5pA9l@7pD;g;2g;2~SJ\8b`W~SJpE<5<42912:/5=24:0.4*25*8;025*25*13&13&13&24'46)57*,7',7',7',7',7'-8(-8(-8(.9).9)-8(-8(,7'-8(-8(-8(4@*6B,<C1=D2=A28<-26'.2#2;(LUB_sXg{`YyTNnIAg><b9Gd4Kh8Mj:Mj:Kh8Jg7Kh8Nk;TqAWtDYvF[xH]zJZwGMj:@]-096%.+\1e'$heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVfeSgfThdYhdYkd\kd\ldWmeXe`JjeOmlXmlXef`de_nqx~\81\88\86\90\91\94\9e\9fª²´ÀÈÊ×ÛÜèìíõõõøøøþýùÿþúþÿùýþøúýôøûò÷ýñøþò÷úñ÷úñ÷ùëøúìûýåõ÷ßãçÆÑÕ´·½\9b\95\9bylwY\gI_mVq\7fh\81\92\82\8d\9e\8e·¸³ËÌÇâãÞîïêôõðøùôùúõøùôþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúêÿÿëÿÿÿÿýîíëÓ¦ \93f`\9cD:¨PFÆMBÁH=ÇC7ÉE9ÌJ=ÍK>ÉK?ÇI=ÅH2ÅH2¹J6µF2 H4\9bC/\8aE5\89D4\7fD4~C3}B4{@2\80</\7f;.\839.\839.}:1}:1|90{8/x8.w7-v6,v6,u7,v8-v8-w9.t8-r6+p4)o3(h9/g8.g8.g8.f7-f7-g7-f6,f6,f6,h8.h8.i7.h6-f4+e3*h1,k4/l7/m80i9+j:,f?.hA0`D/gK6^L8r`Lun[\82{h\83\82pNM;3;.3;.2:-2:-19,19,19,19,08+/7*/7*/7*.6).6).6)-5(.5-.5-.5-.5-.5-.5-.5-.5-.5-.5--4,-4,-4,-4,.5-.5-/;12>45A77C97C56B43@/2?.2?+DQ=WeN\jSSaGGU;DR8FT:Hd>Ie?Jf>Ie=Hd;Ie<Kh<Mj>SoFWsJZvN\xP\wVVqPFaB7R3&.1$,/"*-heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVfeSgfThdYhdYkd\kd\ldWmeXidNlgQlkWlkWfgaklf{~\85\8f\92\99¦°±·ÁÂÍÕ×Þæèîòó÷ûüÿÿÿÿÿÿýüøþýùþÿùýþøúýôøûòöüðöüðöùðöùð÷ùë÷ùëøúâñóÛßãÂÌЯ³¹\97\91\97uhsUXcE^lUt\82k\89\9a\8a\98©\99¿À»ÒÓÎçèãòóî÷øóúûöûü÷úûöþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúèÿÿäþÿùøöýüúÿåß쿹Òzp§OE¿F;ÀG<ËG;ËG;ÅC6¿=0¾@4ÄF:ÄG1ÅH2»L8·H4 H4\9aB.\8bF6\8bF6\80E5\7fD4}B4{@2\80</\80</\839.\839.}:1}:1|90{8/x8.w7-w7-v6,u7,u7,v8-v8-s7,r6+p4)o3(h9/g8.g8.g8.f7-f7-g7-g7-c3)d4*e5+g7-i7.j8/j8/j8/l50l50m80m80k;-l<.hA0iB1dH3lP;dR>weQ}vc\8b\84q\84\83qLK92:-2:-2:-19,19,08+08+08+08+/7*/7*/7*.6).6).6)-5(-4,-4,-4,-4,-4,-4,-4,-4,.5-.5--4,,3+,3+-4,.5-.5-,8..:01=34@65A36B45B14A05B.BO;P^GQ_HHV<AO5BP6FT:Gc=Ie?Jf>Ie=Gc:Fb9Gd8He9QmDVrIZvN[wOZuTRmLA\=2M.&.1$,/"*-heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVfeSgfThdYhdYkd\kd\keWlfXkiRkiRikVikVileuxq\8e\91\98¨«²¼ÆÈÑÛÝéñóôüþûÿÿüÿÿÿÿýýýûýüøÿþúÿÿøýþöøûðõøíñ÷ëñ÷ëó÷éôøêõøåô÷äô÷ÜìïÔÛܽÈɪ®±\92\93\96wuyblpYt{k\89\90\80\9d§\9c¬¶«ÍÎÉÞßÚïðë÷øóûü÷ýþùþÿúüýøþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúõúýúÿÿþýûüûùÿûóÿøðôϿɤ\94\8cO<\94WD¤M:\9cE2¶H9Ê\MÎTG»A4ÇA5ÊD8ÄJ?¿E:ªB9¤<3\95@9\96A:\86A:\85@9}A9|@8z?7y>6y>6y>6w=2v<1u<1t;0t;0s:/p:.p:.o9-o9-n:-n:-m9,l8+k7*j6)l7/l7/j8/i7.i7.h6-h6-h6-e5+e5+e5+f6,f7-h9/i:0j;1i=4g;2f<0g=1g@/iB1fE2fE2bL5kU>fZDvjT\82\80k\91\8fz}\80mCF319,19,19,08+08+/7*/7*/7*08+/7*/7*/7*.6).6).6)-5(-4,-4,-4,-4,-4,-4,-4,-4,.5--4,,3+,3+,3+,3+-4,.5-)5+*6,,8./;12>24@46C27D37D2?L:ES<BP9;I08F-=K2DR9G_=Ia?Kc?Kc?Ha:F_8F_8F_8QjCWpI\tR]uSZqTOfI=T:,C)&.0$,."*,heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVfeSgfThdYhdYkd\kd\keWlfXkiRljSjlWlnYnqj\80\83|\9e¡¨º½ÄÂÌÎÚäæòúüøÿÿùýþùýþûûùùù÷þýùÿþúþÿ÷úûóô÷ìîñæèîâçíáíñãïóåñôáðóàðóØèëÐØÙºÇÈ©¯²\93\9e¡\82\8f\93|\90\94}\99 \90§®\9e³½²¼Æ»ÜÝØéêåö÷òûü÷üýøþÿúþÿúüýøþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúöûþûÿÿÿÿýòñïüëãÿøðÿõåÿìÜö¹¦º}j I6¥N;ÂTEºL=º@3¿E8Ä>2ÉC7ÄJ?¿E:©A8£;2\94?8\96A:\86A:\85@9~B:|@8z?7y>6y>6y>6w=2v<1u<1u<1t;0t;0q;/q;/p:.p:.n:-n:-m9,l8+k7*k7*l7/l7/j8/j8/i7.i7.h6-h6-k;1j:0h8.g7-e6,f7-g8.h9/k?6i=4f<0h>2iB1kD3fE2eD1aK4kU>i]GuiS\85\83n\90\8eyor_:=*08+08+08+08+/7*/7*/7*.6)08+/7*/7*/7*.6).6).6)-5(-4,-4,-4,-4,-4,-4,-4,-4,-4,,3+,3++2*+2*,3+,3+-4,)5+)5+)5++7--9-0<03@/5B15B09F4;I27E.2@'1?&7E,>L3BZ8E];H`<Ia=Ha:F_8F_8F_8PiBWpI^vT^vTXoRKbE7N4%<"%-/#+-!)+heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVgdSheThdYhdYkd\kd\keWlfXjhQkiRkmXoq\qvo\83\88\81 §­¼ÃÉÌÖØäîðùÿÿùÿÿøüýùýþþþüüüúÿÿúÿÿúüþó÷ùîîòäæêÜàç×ÞåÕæëÕéîØìðÙìðÙîîÔèèÎÚØ¿ËÉ°Á¼¨¸³\9f±®\9f¶³¤À½¶ÊÇÀÒÑÏÚÙ×èéäñòíúûöüýøüýøþÿúþÿúüýøþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿùüÿõø÷öôø÷õõÿø÷ÿúõÿôðÿïÿÿìãâÍ¿\9c\86\8ciS\94K8\9aQ>³P=²O<Á>6ÅB:ÃF@¿B<°?;©84\9d99\9e::\8f>=\8e=<\81@>\7f><tB;tB;nC:nC:p>5p>5p>5p>5o?5n>4n>4n>4l=3l=3i=2h<1g;0f:/f:/f:/q60q60o6/o6/m6/l5.i7.i7.j;1i:0f:/d8-a9-b:.c;/d<0_C5_C5_D3aF5aH2bI3^J2]I1ZN4bV<gcJrnU\80\85n\83\88qXaL1:%08+08+08+08+/7*/7*/7*.6)08+/7*/7*/7*.6).6).6)-5(,3+,3+,3+,3+,3+,3+,3+,3+,3++2*+2**1)*1)+2*+2*,3+*6,*6,)5+)5+*6*,8,/;-1=/0=,3@/5B03@.0=)/<(3A*7E.=O5@R8EX<I\@I\>J]?J]=K^>SfH[nPbtZasYYkUJ\F5F3$5"$-,"+* )(heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVgdSheThdYhdYkd\kd\keWlfXigPkiRlnYoq\pun\81\86\7f\9c£©·¾ÄÔÞàìöøùÿÿùÿÿ÷ûüûÿÿÿÿýüüúÿÿúÿþùúüñóõêéíßâæØÜãÓÛâÒãèÒæëÕéíÖèìÕëëÑççÍÜÚÁÐεÒ͹ÌdzÇĵÍÊ»ÕÒËÞÛÔçæäïîìòóîøùôýþùüýøüýøþÿúþÿúûü÷þÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿúýÿóöúù÷ÿÿý÷ÿúöÿùíþìîÿíðïÚÿÿìÿçÑɦ\90­dQ¢YFµR?®K8Â?7ÄA9ÁD>¿B<²A=­<8\9f;;\9d99\8f>=\8e=<\82A?\80?=uC<tB;oD;oD;p>5p>5p>5p>5o?5o?5o?5o?5n?5m>4j>3i=2h<1h<1h<1h<1q60q60p70o6/m6/m6/i7.i7.f7-f7-e9.e9.d<0e=1f>2g?3^B4aE7eJ9gL;dK5cJ4_K3_K3]Q7cW=lhOvrY\7f\84mv{dEN94=(19,19,19,08+08+/7*/7*/7*08+/7*/7*/7*.6).6).6)-5(,3+,3+,3+,3+,3+,3+,3+,3++2*+2**1)*1)*1)*1)+2*+2*+7-*6,)5+(4*)5)*6*+7)-9+,9(/<+2?-3@.3@,2?+2@)3A*4F,8J0>Q5BU9EX:GZ<J]=L_?ReG[nPbtZ_qWVhRFXB2C0!2\1f$-,"+* )(heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVgdSheTjcYjcYkd\kd\keWlfXkkSkkSinXjoYjqiy\80x\93\9c¡­¶»ÐÚÜèòôùÿÿöþÿõùúûÿÿþþü÷÷õÿÿøþþöøúíðòåèìÝãçØßæÔßæÔäëÌæíÎèìÑæêÏéçÐæäÍáÚÈ×оÚÐÄÙÏÃÝÒÎæÛ×íãäóéêùðóÿöùùúõýþùÿÿûýþùüýøÿÿûÿÿûüýøþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿúøÿúøÿÿýÿÿýîÿýçúöæÿúíÿÿôÿúæøìÿùçÿÿíñÍ·\9f{e\8bS:\9bcJ¯N;¯N;°L<°L<°I@«D;¢?9\9c93\95<8\94;7\86?9\84=7xB8wA7pD7pD7p>7p>7p>7p>7o>7o>7p?8p?8pA9o@8k?6j>5i=4i=4j>5j>5q60q60p70p70l7/l7/h9/g8.a9-a9-a=/b>0aA2aA2_B2_B2RG3ZO;bWAcXB_U:ZP5XQ5ZS7YX:ZY;jnSrv[x\82icmT0?(4C,2:-2:-2:-19,19,08+08+08+08+/7*/7*/7*.6).6).6)-5(,3+,3+,3+,3+,3+,3+,3+,3++2**1))0()0()0()0(*1)+2*+5-*4,*4+*4+*4++5,,6+,6+,7).9+2=-5@07B26A15@/4?.0?*4C.9H1=L5@P6DT:HX>K[ARbH[kQap[^mXSaPDRA1?0!/ &/,$-*"+(heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVgdSheTjcYjcYkd\kd\keWlfXmmUmmUhmWglVeldszr\8d\96\9b§°µÉÓÕáëíôüþóûýöúûüÿÿÿÿý÷÷õÿÿ÷ýýõ÷ùìïñäèìÝåéÚãêØåìÚæíÎèïÐèìÑåéÎçåÎåãÌáÚÈØÑ¿×ÍÁÜÒÆéÞÚøíéþôõÿõöþõøÿ÷úýþùÿÿûÿÿûþÿúýþùÿÿûÿÿûýþùþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿ÷õÿ÷õúúøúúøîÿýïÿþèÿüåÿùìþòóÿùÿûéúóáÿìÖÿáËâª\91ªrY³R?°O<°L<±M=³LC°I@¤A;\9d:4\95<8\94;7\86?9\84=7xB8wA7pD7pD7p>7p>7p>7p>7p?8p?8p?8p?8qB:pA9l@7k?6j>5j>5k?6k?6r71q60p70p70l7/l7/h9/h9/d<0e=1d@2d@2aA2`@1\?/[>.RG3]R>h]Gi^HbX=[Q6YR6]V:XW9XW9imRrv[t~eWaH$3\1c5D-3;.3;.2:-2:-19,19,19,19,08+/7*/7*/7*.6).6).6)-5(+2*+2*+2*+2*+2*+2*+2*+2**1)*1))0()0()0()0(*1)*1)(2*)3+)3**4++5,,6-,6+,6+,7).9+2=-6A18C39D47B15@/-<'0?*4C,7F/;K1?O5DT:HX>QaGYiO_nY[jUP^MAO>.<- .\1f(1.&/,$-*heVheVheVheVgdUgdUgdUgdUifWifWifWifWifWifWifWifWjdTkeUkdZkdZle]le]jgXkhYnpXkmUgoXjr[gsinzp\83\91\94\9cª­»ÄÉÏØÝçïòóûþúþÿûÿÿþÿúýþùÿÿøýýõøúìõ÷éò÷ãïôàêòÛçïØïöÔëòÐëîÑéìÏçåÐÞÜÇÜÔÉÜÔÉàÒÏæØÕðââùëëýñõÿõùÿøüÿúþþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúýÿ÷ýÿ÷ýÿüþÿýýþÿüýÿûüÿûüÿÿþÿþüÿÿøðÿùñÿüéÿûèÿõÙúïÓ²\84c\96hG\8bT6\93\>¢^G\9bW@\9aM;\9cO=\8eA1\8d@0\87?0\84<-z=+y<*u@.wB0r=7r=7s>8s>8u@:u@:r@9q?8r@9r@9q@9p?8p?8o>7n?7m>6j8/k90j:0k;1g=1g=1b>0b>0]@0\?/_H6_H6Q?+L:&I8$A0\1cQS;MO7HK0JM2Z[<fgHabCTU6UX9]`AntXy\7fcanT=J0,:#1?(3;.3;.3;.3;.2:-2:-2:-19,2:-19,19,08+08+/7*/7*/7*/6./6./6..5-.5-.5--4,-4,+2*+2*+2*+2**1)*1)*1)*1)+5-+5-*4,*4,*4++5,+5,,6-(2)*4+.8-2<17A6:D9=G<>H=5B04A/1>,/<*1?(7E.AO8HV?N\EUcL[hVXeSKWI:F8.:0(4*'0+&/*&/*heVheVheVheVgdUgdUgdUgdUifWifWifWifWifWifWifWifWjdTkeUkdZkdZle]le]jgXkhYlnVjlThpYks\htjp|r\86\94\97 ®±¾ÇÌÒÛàéñôôüÿúþÿûÿÿþÿúüýøÿÿøýýõùûíöøêóøäðõáéñÚæî×éðÎäëÉäçÊäçÊãáÌÜÚÅÜÔÉÞÖËæØÕìÞÛôææüîîÿó÷ÿöúÿøüÿúþþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúûþõüÿöüþûüþûüýÿûüÿúûÿùúÿÿþÿýûþÿùñÿúòÿýêÿüéÿ÷ÛýòÖÿäÃݯ\8e©rT\92[=\9bW@\9eZC¡TB\9fR@\90C3\8fB2\8aB3\89A2\80C1~A/vA/u@.t?9s>8t?9u@:t?9q<6p>7sA:q?8q?8o>7o>7n=6n=6m>6l=5m;2m;2m=3n>4j@4i?3eA3d@2dG7]@0]F4_H6O=)G5!G6"D3\1fIK3HJ2DG,BE*LM.Z[<abC_`AWZ;cfGrx\rx\UbH7D*.<%6D-5=05=05=04</4</4</3;.3;.4</4</3;.3;.2:-2:-2:-19,18007/07/07//6./6./6./6.,3+,3+,3++2*+2**1)*1))0((2*'1)'1)'1)'1((2))3*)3*+5,+5,,6+.8-2<17A6<F;?I>9F48E35B02?-1?(4B+:H1?M6JXAQ_HWdRUbPJVH;G90<2*6,)2-)2-(1,gdUgdUgdUgdUheVheVheVheVifWifWifWifWifWifWifWifWjdTkeUkdZkdZle]le]jgXkhYkmUikSgqYku]hukq~t\88\97\9a¤³¶ÀÉÎÔÝâêòõõýÿúþÿûÿÿþÿúüýøÿÿõüüòùüëöùèò÷áîóÝçï×ãëÓáçÅÜâÀÝÝÃÞÞÄàÚÌÝ×ÉßÖÑãÚÕíáãòæèøíñýòöÿö÷ÿ÷øÿúúÿûûþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúôÿúôÿúùýüùýüÿùþÿøýÿóüÿòûÿøþÿöüÿøöÿù÷þÿóþÿóôÿìïûçûïÕÿ÷ÝÿíÔ×ê¤\84k}]D\82V=\8daH\92^H\88T>}F1u>)s?*vB-yF1zG2o?5l<2n>4sC9rB8n>4pA7wH>k?4k?4j>3j>3i?3h>2h>2h>2cB3cB3cC4cC4`E4`E4[F3ZE2^M9SB.VK5^S=OI1B<$B>%EA(=G,?I.=F)8A$=B"KP0\_@fiJ^aBmpQuy^gkPHP84<$4=(=F17?27?27?26>16>15=05=05=06>16>16>16>15=05=05=05=03:23:23:2291291180180180/6..5-.5-,3++2**1)*1))0((/('.''.''.'(/()0)*1**1*/6/-4-+2++2+.5.4;4<C<@G@=K:=K::I66E22A*0?(2A*3B+CR;IXAP_LO^KGUF:H91>4+8.,6.+5-*4,gdUgdUgdUgdUheVheVheVheVifWifWifWifWifWifWifWifWjdTkeUkdZkdZle]le]jgXkhYkmUjlTgqYjt\fsio|r\87\96\99¤³¶¿ÈÍÓÜáéñôóûþùýþúþÿþÿúýþùþþôüüòùüë÷úéò÷áíòÜåíÕàèÐÛá¿ÕÛ¹ÖÖ¼××½ÜÖÈÞØÊäÛÖëâÝ÷ëíûïñÿôøÿ÷ûÿøùÿøùÿúúÿûûþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúôÿúôÿúúþýúþýÿùþÿùþÿôýÿóüÿöüÿõûÿøöÿúøÿÿôÿÿôöÿîóÿëÿþäÿ÷ÝÿíÔÿïÖÿíÔñѸ¹\8dt|P7|H2{G1~G2\81J5\81M8|H3q>)g4\1f{KAsC9qA7tD:qA7i9/f7-j;1i=2i=2i=2i=2h>2h>2h>2h>2bA2bA2bB3bB3_D3^C2YD1XC0XG3Q@,^S=qfPc]EOI1KG.NJ1:D)=G,>G*9B%;@ DI)UX9adEjmNuxYsw\Z^C=E-4<$7@+;D/8@37?27?27?26>16>16>16>17?27?27?27?27?27?27?27?26=56=55<45<44;34;34;34;329118007//6.-4,,3++2**1)*1*)0))0))0))0)*1*+2+,3,.5.,3,*1*)0),3,1817>7;B;>L;?M<?N;<K87F/2A*0?(/>';J3AP9GVCHWDBPA9G81>4,9/-7/,6.+5-fcTfcTgdUgdUheVheVifWifWifWifWifWifWifWifWifWifWjdTkeUkdZkdZle]le]jgXkhYjnUimTfrZgs[aqfiyn\81\95\96\9f³´¾ÇÌÑÚßèðóòúýøüýúþÿÿÿûþÿúÿÿôÿÿóüÿìúýêöûäïôÝåîÑàéÌÙܽÒÕ¶ÑѹÓÓ»ÚÓÉßØÎéàáòéêüóøÿöûÿúþÿüÿýþùüýøûþõüÿöþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúùþÿúÿÿýÿþýÿþÿþúþýùÿûõÿúôÿúôÿúôÿü÷ÿþùÿÿýÿÿýúþýùýüôîîÿùùÿþøÿüöÿùíÿõéñäÓÝпʸ¢¯\9d\87\8dw`oYBdI6dI6iL:lO=hG4dC0cB/gF3iJ6kL8kL8lM9_C._C._C._C.^C._D/_D/_D/XG3XG3XI4XI4TI3SH2OI1OI1KI0KI0beJ|\7fdntXSY=FO2DM09F*:G+>G*>G*@E%BG'LM.ST5wvXzy[nnTTT:@B,?A+>A.:=*7?27?27?27?26>16>16>15=06>16>16>17?27?27?27?27?28?78?77>67>66=56=56=56=54;34;33:229107//6..5--4,+2++2+*1**1**1**1*+1-,2.+1-+1-*0,+1--3//511733958I6;L9>P:=O9:L45G/1C)0B(3E-8J2=O9?Q;<M;5F4.>1*:-,6-,6-+5,fcTfcTfcTgdUheVifWifWifWifWifWifWifWifWifWifWifWjdTkeUkdZkdZle]le]jgXkhYjnUimTfrZfrZ_odgwl\81\95\96\9f³´ÁÊÏÓÜáéñôòúýøüýûÿÿÿÿûÿÿûÿÿôÿÿôÿÿïþÿîùþçò÷àæïÒàéÌÖÙºÏÒ³ÌÌ´Í͵ÕÎÄÞ×Íëâãöíîÿöûÿøýÿüÿÿýÿþÿúüýøüÿöüÿöþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúúÿÿúÿÿþÿÿþÿÿÿþúþýùÿüöÿûõþùóÿúôÿýøÿþùÿÿýþþüúþýùýüüööÿùùÿùóúóíþôèÿýñÿýìÿýìÿõßÿí×öàÉåϸҷ¤¸\9d\8a\9f\82p\8fr`{ZG}\ItS@dC0Y:&Z;']>*[<(`D/`D/aE0aE0`E0aF1aF1aF1\K7\K7[L7[L7WL6VK5RL4QK3MK2RP7ilQ}\80elrVSY=DM0>G*9F*9F*?H+BK.DI)BG'GH)LM.xwYsrTddJSS9IK5HJ4CF3:=*8@38@38@37?27?26>16>16>16>16>16>16>17?27?27?27?29@89@89@88?78?77>67>67>67>66=56=55<44;33:2291180-4--4-+2+*1*)0))0))/+)/+)/+*0,,2.-3/.40.40-3/-3/0A.5F3;M7=O9=O79K37I/5G-2D,5G/9K5;M7:K94E3.>1*:-,6-+5,*4+ebSfcTfcTgdUheVifWifWjgXifWifWifWifWifWifWifWifWjdTkeUkdZkdZle]le]jgXkhYimTimTfrZgs[_qehzn\83\97\98¤¸¹ÇÐ×Úãêíõøõýÿùýþûÿÿÿÿúþÿùÿÿóÿÿóýÿíüÿì÷ýãîôÚâëÎÛäÇÕÕ¹ÌÌ°ÇıÇıÏÈÂÚÓÍéàåöíòýöþÿøÿÿýÿÿýÿúÿøùþ÷÷ÿòøÿóþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿúÿÿúÿýþÿýþÿöÿööÿöñÿððÿïïÿíñÿï÷ÿöøÿ÷þüÿýûþÿ÷ÿÿ÷ÿüðÿÿôÿÿùÿÿùÿüûÿúùþõøïñôëþÿóþÿóÿÿïÿÿïÿýìú÷æ÷ðàóìÜöåËùèÎÝ̲¡\90vq`FbQ7^N4YI/ZJ0ZJ0ZL1ZL1[M2[M2YN2ZO3UQ8UQ8UQ8UQ8QQ7OO5LO4KN3JP4NT8]hJdoQQ^@BO1>K-9F(=J.<I-BK.FO2GL,EJ*ON0YX:qmPjfI`\CZV=VT?TR=LI8EB1:B5:B5:B59A49A48@38@38@36>16>17?27?28@38@38@39A49@89@89@89@88?78?78?77>68?78?78?77>67>66=56=56=538227105/.3-,1-+0,+0,+0,+0,,1--10-10.21-10,0/,0/':$-@*5I0:N5;O4:N39M18L04H-5I.8K5:M79L95H5.@0*<,,6+,6++5*ebSebSfcTgdUheVifWjgXjgXifWifWifWifWifWifWifWifWjdTkeUkdZkdZle]le]jgXkhYgkRhlSfrZht\`rfj|p\87\9b\9c¨¼½Î×Þßèïòúýøÿÿûÿÿûÿÿþÿùýþøùùíùùíøûè÷úçñ÷ÝéïÕÜåÈÔÝÀÒÒ¶Éɭ¿¬Â¿¬ÊýÕÎÈæÝâóêïýöþÿøÿþüÿÿýÿúÿøùþ÷÷ÿòùÿôþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿùÿÿùÿûüþûüþõÿõôÿôïÿîïÿîïÿíñÿï÷ÿöøÿ÷ýûþüúýÿöÿÿöÿÿøÿÿõÿÿöÿÿ÷ÿüûÿúùþúýôýÿ÷ôøéõùê÷øæö÷åùöåú÷æÿùéÿüìÿïÕÿúàìÛÁ\9f\8et`O5RA'XH.XH.[K1\L2[M2\N3\N3]O4[P4[P4SO6SO6SO6SO6OO5MM3JM2IL1IO3KQ5Q\>OZ<<I+9F(>K-=J,AN2AN2HQ4IR5IN.IN.ZY;jiKgcFa]@]Y@_[B][FXVAPM<LI8<D7;C6;C6;C6:B5:B5:B5:B57?27?28@38@39A49A4:B5:B5:A99@89@89@88?78?78?77>69@89@89@89@89@89@89@88?78=77<65:4271051/40.3/-2..3/-2.-10,0/,0/,0/,0/,0/#6 )<&1E,8L3:N3:N39M19M16J/7K09L6;N8:M:6I60B2+=--7,-7,,6+YgMYgM[hN]jP`jRblTfkUfkUehUdgTgfTfeSjdVjdVkeWlfXjgVjgVjfZjfZjf]ie\geVgeVdiSfkUdp\co[`qkq\82|\94§®µÈÏÒÛâàéðï÷ùôüþ÷ýùøþúüÿôûþóöùèøûêø÷ãñðÜñìØíèÔâÝÉÕмÛξ̿¯¾±¨¾±¨Ã¸¶ÍÂÀÛÒ×èßäùôûü÷þýüÿþýÿýþÿûüþùþúùþúýÿþýÿþýÿþýÿþþþüþþüþþüþþüÿÿûÿþúÿýúÿýúÿýøÿýøÿýøÿýøÿÿûÿþúüüúýýûýÿþþÿÿýÿþûýüþþüûûùÿúôÿý÷ÿüóÿùðÿøìÿúîÿúÿÿúÿÿþüÿþüþÿùþÿùüþýüþýýþÿýþÿþþþþþþþÿïýþîþýßþýßööÞüüääâÉ\8c\8aqUP3UP3SM-QK+UO/TN.SN.SN.PO0PO0PQ2QR3NM1ON2OO3OO3LP7JN5FO4DM2FP5DN3AJ+=F'@G%CJ(GM'FL&JY.HW,DP(AM%LV4ZdB_dFV[=ZZ@[[A^ZA]Y@]W=[U;YR6WP4JE/HC-DB-A?*?=.@>/>@3?A4:=2:=28@38@37B47B47D37D37B47B46A36A36A36A37B47B47B47B47B47B48C59D6;F8;F86B86B85B14A05>-2;*08+/7*.5./6/,8,,8,*=\1f-@"0J\e4N\1f8[#8[#9X/8W.:R::R:=P==P=9K1?Q7BW8CX9@X8>V63K1)A',6+)3('1&YgMYgM[hN]jP`jRblTfkUglVfiVehUhgUgfTkeWkeWlfXlfXjgVjgVjfZjfZjf]ie\geVgeVejTglVdp\fr^fwqy\8a\84\98«²¶ÉÐÐÙàßèïï÷ùõýÿøþúøþúûþóøûð÷úéöùèôóßìë×êåÑæáÍÛÖÂÏʶ̿¯Á´¤¸«¢»®¥Â·µÍÂÀÙÐÕæÝâùôûü÷þýüÿþýÿüýÿûüþùþúúÿûýÿþýÿþýÿþýÿþþþüþþüþþüþþüÿþúÿþúÿýúÿýúÿýøÿýøÿýøÿü÷ÿÿûþýùüüúýýûýÿþþÿÿýÿþûýüÿÿýþþüÿüöü÷ñôëâíäÛôèÜüðäÿúÿÿúÿÿþüÿþüþÿùþÿùüþýüþýýþÿýþÿþþþþþþþÿïýþîþýßþýßööÞüüäâàÇ\8a\88oSN1SN1RL,QK+UO/UO/SN.SN.PO0PO0PQ2PQ2NM1ON2OO3OO3LP7JN5FO4EN3FP5DN3AJ+>G(AH&EL*IO)JP*HW,IX-Q]5Xd<ZdBU_=SX:RW9VV<VV<YU<YU<ZT:ZT:ZS7ZS7PK5NI3IG2EC.B@1A?0>@3?A4:=2:=28@38@37B47B47D37D37B47B46A36A36A36A37B47B47B47B47B47B48C5:E7;F8<G9;G=;G=;H7:G6;D3:C28@37?26=66=62>21=11D&8K-?Y*F`1Nq9Mp8Ji@Ed;AYA;S;;N;9L9=O5CU;H]>J_@IaAE]=:R80H.+5*(2'%/$YgMYgM[hN]jPakSblTglVglVhkXgjWjiWihVlfXlfXmgYmgYjgVjgVjfZjfZie\ie\hfWgeVejTejTbnZgs_l}w\7f\90\8a\99¬³²ÅÌÍÖÝÝæíï÷ùöþÿøþúøþúøûðô÷ìòõäïòáêéÕáàÌÝØÄØÓ¿ÎɵÅÀ¬Á´¤¼¯\9f»®¥Âµ¬ËÀ¾×ÌÊâÙÞìãèúõüü÷þüûÿþýÿüýÿûüþùþúúÿûýÿþýÿþýÿþýÿþþþüþþüþþüþþüÿþúÿþúÿýúÿüùÿýøÿýøÿü÷ÿü÷ÿþúþýùüüúüüúýÿþþÿÿýÿþûýüÿÿýÿÿýÿý÷÷òìçÞÕÝÔËéÝÑøìàÿúÿÿúÿÿþüÿþüþÿùþÿùüþýüþýýþÿýþÿþþþþþþþÿïýþîþýßþýß÷÷ßüüäáßÆ\88\86mPK.RM0RL,RL,UO/UO/TO/SN.PO0PO0OP1OP1NM1ON2NN2OO3KO6JN5FO4FO4FP5DN3CL-BK,EL*IP.NT.RX2M]0Sc6frJu\81YnxUV`=KP2MR4QQ7QQ7QO6QO6VP6XR8[T8\U9WR<UP:OM8JH3FD5DB3?A4?A4;>3;>38@38@37B47B46C26C28C57B47B46A36A37B47B48C58C57B47B48C58C5:E7;F8<G9>J@>J@>K:>K:@I8?H7>F9=E8=D=;B;5A54@46I+BU7Mg8WqB]\80H[~FVuLLkBC[C9Q96I63F3<N4DV<LaBPeFPhHLdD@X>4L2/9.,6+)3(XfLYgM\iO]jPakScmUhmWhmWjmZilYkjXkjXmgYnhZnhZnhZkhWkhWjfZieYie\ie\hfWhfWdiSafP]iUeq]l}w~\8f\89\93¦­§ºÁÇÐ×Ùâéíõ÷õýÿ÷ýùõû÷óöëîñæèëÚâåÔÛÚÆÒѽÏʶÉݽ©»¶¢Ä·§Æ¹©Ë¾µÕÈ¿ßÔÒëàÞóêïùðõúõüýøÿüûÿýüÿûüþûüþúÿûûÿüýÿþýÿþýÿþýÿþþþüþþüþþüþþüÿþúÿþúÿüùÿüùÿýøÿü÷ÿü÷ÿü÷þýùýüøûûùüüúýÿþþÿÿýÿþûýüüüúþþüÿý÷øóíêáØáØÏîâÖþòæÿúÿÿúÿÿþüÿþüþÿùþÿùüþýüþýýþÿýþÿþþþþþþþÿïýþîþýßþýßùùáýýåáßÆ\87\85lOJ-RM0TN.UO/UO/UO/TO/TO/QP1PO0OP1NO0NM1ON2NN2NN2KO6KO6GP5GP5HR7FP5FO0HQ2KR0NU3U[5[a;csFq\81T\86\92j\8f\9bs\85\8fllvSZ_ARW9OO5MM3MK2LJ1QK1TN4YR6[T8YT>WR<QO:MK6IG8FD5AC6AC6;>3;>38@38@37B47B46C26C28C58C57B47B47B47B48C58C58C58C58C58C59D6:E7;F8<G9<H><H><I8=J9?H7?H7>F9=E8<C<:A:4@44@47J,DW9Pj;[uFX{CVyARqHGf=<T<1I1/B/-@-6H.@R8J_@PeFQiIMeE?W=3K10:/-7,+5*XfLYgM\iO^kQblTdnVhmWinXkn[jmZlkYkjXnhZnhZnhZoi[liXkhWjfZieYhd[hd[hfWigXejTafP\hTdp\l}w}\8e\88\8e¡¨\9e±¸ÃÌÓÕÞåêòôòúüôúöñ÷óîñæèëàáäÓÙÜËÒѽËʶÉݽ©¼·£¸³\9fʽ­ÑÄ´ÚÍÄä×Îîãáùîìþõúÿùþûöýýøÿüûÿüûÿûüþúûýúÿûûÿüýÿþýÿþýÿþýÿþþþüþþüþþüþþüþýùþýùÿüùÿüùÿü÷ÿü÷þûöþûöýüøüû÷úúøûûùüþýýÿþýÿþûýüüüúüüúÿûõûöðôëâíäÛöêÞÿõéÿúÿÿúÿÿþüÿþüþÿùþÿùüþýüþýýþÿýþÿþþþþþþþÿïýþîþýßþýßüüäÿÿçãáÈ\88\86mQL/TO2VP0WQ1UO/UO/UP0UP0QP1PO0NO0MN/ON2NM1MM1MM1JN5KO6HQ6HQ6KU:HR7IR3MV7QX6RY7Z`:djD~\8ea\92¢u\9e­\82\9a©~\94\9e{\88\92oryZY`AMP5KN3LJ3JH1MI0PL3TN4WQ7VQ;UP:PN9NL7JH9HF7DF9CE8<?4<?49A49A46A36A35B15B19D68C57B47B47B47B48C59D68C58C58C59D69D6;F8<G9=H:9E;:F<:G6;H7>G6=F5<D7<D78?87>73?34@47J,BU7Mg8VpAQt<Ps;MlCBa87O7,D,+>++>+0B(;M3G\=OdEPhHLdD>V<1I/+5*(2'%/$
\ No newline at end of file
diff --git a/testimages/testimgcrop.jpg b/testimages/testimgcrop.jpg
deleted file mode 100644 (file)
index 18fa0b1..0000000
Binary files a/testimages/testimgcrop.jpg and /dev/null differ
diff --git a/testimages/testimgflt-nosimd.jpg b/testimages/testimgflt-nosimd.jpg
deleted file mode 100644 (file)
index 462f39b..0000000
Binary files a/testimages/testimgflt-nosimd.jpg and /dev/null differ
diff --git a/testimages/testimgflt.jpg b/testimages/testimgflt.jpg
deleted file mode 100644 (file)
index 832f4cc..0000000
Binary files a/testimages/testimgflt.jpg and /dev/null differ
diff --git a/testimages/testimgflt.ppm b/testimages/testimgflt.ppm
deleted file mode 100644 (file)
index 78945b6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-P6
-227 149
-255
-0/-0/-10.21/40-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}E6\8bH8\99G9£F7¯G:¸G9¾E:ÅG;ÇG>ÊG?ËH@ÐE@çFLíCLëDKëEIîCIïBDñ>Bô=Aø;A÷:@ô:?ð<?é?@â@>×?<ËA7»=/µ@.µ@.´?-´?-²?,²?-¯@-­@,ªA,¦A-¢B,\9f@*\9bA)\98@*\96A,\94>-\92?/\92?/\91>.\91>,\90=+\92<+\92<+\94?+\94?+\94=*\94=*\94=*\95>+\96?,\96@/\96?6\95>5\97=2\9f?1©B3³D3¼D4¿D4¹?0µA2¬F8\9eH;\87H9oA2T8*C3&=5295495473271160050-50-72/72/72/61.61-50,50,41,//-.0-//-//-0/-0/-2.-2.-4+,4+,4*+3)*7(+=.1E69P:<jBC|IH\8dMM\95OO\9eVZªdnªo\83\9ft\90\94\87\7f®\80\86º~\88½sy­`a\91TKvQEiSJgOG^MH^TQbfdo|}\82\8d\91\90\99\9e\98£©\9f¢¨\9a\9e \93\8f\92\81{|lfgUXWEQNEUR[UQbUQb0/-0/-10.10.40-51.62/62/83/83/:3-:3-:3-:3-:3-:3-91.91.80-80-80-80-91.91.80-80-80-80-80-80-80-80-6.+6.+5-*5-*5-*4,)4,)4,)5-*5-*5-*5-*5-*5-*5-*3.*0+%0-&0-&1.'2/(30)41*41*63,63,74-74-85.96/:70:7.@9/A;/C=1E?3H@3IA4JB5JB5LC4LC4MA1MA1MA1NB2OC3QD4P>0U?1^A3jC4xD6\84E4\92E5\9cC3§C4¯A4µA4¼B7ÀD:ÄE<ÅF=ÍC@áEIçBIèCIêDHíDGïBDó@Cö?Cø;A÷:@ô:?ð<?é?@àA>Õ@<Ê@6¹>/µ@.´?-´?-´?-²?,°?-¯@-­@,©@+¦A-¡A+\9f@*\9bA)\98@*\96A,\94>-\92?/\91>.\91>.\91>,\90=+\92<+\92<+\94?+\93>*\94=*\94=*\94=*\95>+\96?,\96@/\94@5\95>5\98>3 >1«A3µD4½C4¿D5»A2·C6¬F8\9cI;\85G:l@3S9*B4)>63:6595484382271161.61.72/72/72/61.61-50,50,41,//-.0-//-//-0/-0/-2.-2.-3--5,-5+,3)*5)+<-0C47N8:d>=vEA\86JI\8fNL\9aTV¤aj¥l}\9dr\8e\91\86\80®\7f\85¹{\84»ou©[[\8dQHuOCiOFeOG_PH_RN_[Yfnot\83\87\88\94\99\95\99\9e\97\9a \94\99\9d\8f\8f\91\83~\7fojkY][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|C2\87B2\92A0\98<- :+§;.¯=2µ@6ºD:¿F=ÅD>ÙCEá@FãBGçBFêDFðCEôADø?Dú;@ù:?õ;@ð=@è@@ÜA=Ñ@;Æ@5·=.³@-³@-²?,²?-°?-¯>,­@,ª?-§@-¥@,¡A+\9dA,\9a?*\98@*\95@+\94>-\91>.\91>.\91>.\90=+\90=+\90=+\90=+\91>,\91>,\92<+\92<+\93=,\93=,\94?+\95?.\95A6\96?5\9a>3£>2¯A4¹C5¿D5ÁC5ÀD8¸F;®I=\99J=\81G;h@4Q:,B5,?74=77<66;5594183072/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@\86ID\90OM\98[`\9bfv\94m\88\8cw\9e\83}­}\82¹u~·fm¤TV\89MEvLAkMAeOFcQHcMH^NK\[[eqty\85\89\88\87\8c\86\8a\8f\88\8d\90\85\86\8a|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@0JA0LE3NE4UD4^D3iD2sB1~A/\86?-\8c9)\949'\9d9*£<-¬@3³E8¸H<ÁF>ÒDCÚACÞBCâDCçCDìBCó@C÷?Aú;@ù:?õ;@î>@åA@ÚB=Í@9Â@3µ=-°@,°@,°@,¯>,®?,®?,¬?+©@-¦?,£@+ @*\9c@+\98@*\96@)\94?*\91>,\91>.\91>.\90=-\90=+\90=+\8f<*\8f<*\90=+\90=+\8f<*\8f<*\92<+\91>,\94>-\92?-\95A6\96?5\9c>2¦@4²B6¼C8ÁC7ÂB7ÂF<¹I>¬L@\97K>|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;\82HD\89RU\8d_l\8bi\82\83s\98}y«x}µowµ`f¢QR\8bLEyL@pL@hPEgQFfLC^GBVMLZ^^fjnquyxy~xz\80vwzokoa`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,52-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/|?,\82;)\8b:)\93:*\9a=,£B2¬F8²J=»I?ÌGBÔDCØDBÜDAâBBéAAð=@ô<>ù:?ø:<ô<>í?>áB>ÓC:ÅA5¹?0²?-®?,®?,®?,­>-¬>-¬>-ª?-¨>.¤?- ?,\9e?+\9a?,\97?+\95>*\93>*\91>,\90?.\8f>-\8f>-\8f>-\8e=,\8e=,\8e=,\8e=,\8e=,\8e=,\8e=,\8f<,\8f>-\91>.\90?.\94B4\97A4\9d@1¨@3¶A7¿C9ÅB8ÄA7¾C;·H?¦LC\90J@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;yKK\80Ze\83g\80\7fp\97zxªu{·ks´_d¦TT\94OG\83LBwNAmNBhMAeJA`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\E3dC2lA0t?-{<+\82;)\8c;*\94=,\9c@1£F5ªJ:´J=ÄH@ÌEAÑFAÖE@ÞCAä@>ì>?ñ:<÷;<ô:;ð<=é@=ÜC=ÍC8¾@2±>,®?,«@,ª?+ª?+ª?-©>,©>,¨?,¥>-¢?, ?,\9b>,\97?+\95>*\93>)\91?*\8f>+\8f>-\8f>-\8f>-\8e=,\8e=,\8e=,\8d<+\8e=,\8b<+\8d<+\8b<+\8b<-\8c=,\8d>/\8e?0\94B4\97A2 @2¬B5¹C9ÂC:ÅB:ÂA;ºA9±I@£NG\8dNEoG=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?6mGFyYd\82k\85\80u\9f||²w|¼nu»dh¯[[¡RM\8fLB~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@3HE6GE6KE5QD4XC2_B2f?.n=,v=,|:*\859)\8c;*\93=.\9bB2¢F7¬F8¼G=ÂF>ÉF>ÐE>ÙD@âC?é??ð>>ò::ñ;:ì<<äA<ÖC;ÆD6µ@/ª=)ª?-©@-©@-¨?,¨>.¨>.§=-¥>-£=. ?.\9e?-\9a?-\96?,\93>*\91?*\8f>)\8f>+\8d>-\8d>-\8c=,\8c=.\8c=.\8b<-\8b<-\8b<-\8a=-\8a;,\89<,\8a</\8a=-\8b=0\8c?/\92C4\98B3¡A3®B6¼C:ÂC<ÄC=ÀC=¹FA²QJ¥XR\8fXQsRIWI>CC7<?6>93@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]j\83s\8d\89\80«\85\84¾~\83ÇtzÆmp½ce¯VS\9aLC\82K?qI<gG;cE>_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+2/*41,41,52-63.63.74/85085092,:3+;4,<5->5.>5.>5.>5,B8/B8.E8/E8/G:1I=1J>2I?3FB6FB6JB5OA4TA2\@2b>0j<-q<.w9*}8)\858(\8c:,\95=/\9bB4¤B5²F:ºE;ÁF>ÊG?ÔG@ÞFAçCAîB@í;;ë;;ç>;ßB;ÑD:¿D4¯@-¤>(¦A-¦A-¦A-¥@.¥@.¤?-¤?-¤>/¢>.\9f@.\9c?.\98?-\95>+\91?*\8f>)\8f>+\8d>-\8d>-\8d>-\8c=,\8c=.\8b<-\8b<-\8a=-\8a=-\88<.\88<.\88<.\88</\87>/\88>1\8b?1\91D4\96C3¢B4­C6ºC;ÁD>ÁD>»EA¹PL²[T¥e\\91f]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/-3/,8,,;,)C0*K70S<6^IHtbn\87z\94\90\8a\8c\8dÆ\84\88Ïz\80ÌrxÆik¶WW\9fID\84E=nG<dD<aC>^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>5H@5J@6P?5T>3X<1^90b6+m9.t8-|8+\839,\8d;/\93=0\98?1\9e>0§A3­A4µC8¾E:ÊG=ÔG>ÞE?åC@è@?êBAæDAÚE>ÈD8·B1ªA.¢B,¢A.¡@-¢?,¢>.¡=-¡=-¢>. ?/\9c<,\9a=,\98<-\94=,\93=,\90=+\8e=*\8c>*\8b<+\8b<+\8a=-\89<,\89<,\88;+\88:-\87;-\89=/\86</\86</\87=0\88>3\88@2\89A5\8bA4\91E5\97D4£E9±I>ºG@»D>»EA¸MG´ZR¯f_£qf\91sh~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\8b\85\9f\93\90»\94\96Ï\90\95Ù\83\89ÓtzÆjn·_b§Z[\94LItHBdA>]>>X?BUAIVLU\U`bbqnn}xv\86|r\7fulyoguh_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-\819-\899.\90<1\96<1\9b=1¢@3§A3­C6´D8¾E:ÉF<ÔE=ÛD=ßD@àE@ÞFAÔG>ÄF8²C2¥B-\9eB-\9fC.\9eB-\9f@.\9e?-\9e?-\9e?-\9e>.\9e>.\9a=,\99>,\96=-\94=,\90=+\8f>+\8c>*\8c=,\8b<+\8a=+\89<,\89<,\89<,\87;+\87;-\85<-\86</\85=/\85=1\83=1\84>2\86@6\87A7\88B6\93G9\98F8£G<¯J@¸IB¸GA·LF³TN±d\ªqf\9f~o\90\7fo\7f|mmseZfZNXMLNAKI=EC7@=4=:188.44,11)23-23-03,/2+/1,.0+.0+.0+/1.-2./1./1./1./1./1./1.02/02/11/11/11/11/11/2015+49-7<23?53H?:^VTxr|\8a\88\9e\93\93¹\94\97Ê\90\96Ô\84\8bÏy\81Âqy¸kt­hn\9e\_\80XZqSUjRWjT^hZgmfvvr\82\7ft\88\7f~\92\87\83\95\89~\8e\81w\87zr\80qfteZeT[ZE`Z@b\D,-/,-/,-/,-/,-/,.-------.-+.-+.-+-,*/+(.*'.*'.*',+),*+,*+,*++)*+)*+)*+)*-+,-+,-+,-+,-+,-+,-+,-+,,*+,*+-+,-+,-+,.,-.,-.,-.,-.,-.,-/-./-./-./-./.,0,+0,+1-,2.-2.-2.-2.-1-,1-,1-,1-,1-,2.-3/.40/51.80.91.:2/;30=31=4/=4/=4/?40?4.A4.A4.C60D71F93F93H;5J;6K<7N=6P;6S:5V72[6.c60k6.t5,}7/\879/\8d;0\94<0\96<1\9d?3 @4¢@3¨@3±C6ºD8ÅE:ÍD:ÕF@ÖG?ÔIBÌI?¾E:®C3¡B.\9cA.\9dB/\9cA.\9c?.\9b>-\9b>-\9b>-\9b>/\9b?0\98<-\96=-\94<.\93=.\8f>-\8c=,\8b<+\8a=+\89<*\89<*\89<,\87;+\87;-\85<-\84:-\83;-\84<0\82<0\82<2\82>3\83?4\85A8\87C:\88D9\94J=\97H; H>«JC²KF³LG²SM®`V­sg¦\81q\9d\8cz\91\8e{\82\89ws\80ocqbXcUNRDMN@HI;DD8@@49;.46+/1&01)01)/0*/0*./*./*//-//-//-.0-//-//-//-//-//-//-00.00.00.00.00.00.00.1/26+97+98/4;63HE>_^Yzz|\8b\8d\9a\90\94±\92\97¿\8f\95Ç\84\8eÃ}\89»{\89¶|\8b²}\8c«}\88\9aw\83\8fq~\87n}\82n~~p\83\7fy\8e\85\83\99\8d\8b¡\94\91¨\98\90¥\94\88\9d\8a\83\96\83|\8d{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/\8290\8a:/\90<1\94>1\99?4\9b?4\9b?2\9f?1¥A2®B5¸D7¿E:ÇG>ËH@ÊJAÃI>¶F:ªB5\9eA0\99@.\99A-\99A-\98?-\97>,\97>,\99>,\99=.\97>.\95<,\94=,\93=.\90=-\8e=,\8a=+\8a=-\89<,\88;)\88;)\87;+\87;+\84;,\84;,\83;-\80;,\81;/\80<1\80<1\81>5\83@7\83C:\87D<\88E<\94L@\96H<\9eG>§JC®LI®QL­]Vªj^§\80\8fy\9a\9a\82\8f\9b\83\86\95\80z\8bxm{jbm]SZJQUFKO@EI:@D6;=057,13(01)/0(./).-(.-).-)/.,0/-/.,/.,/.,/.,/.,..,/.,..,0/-//-0/-//-//-//-//-2-17,:6*83-1961HJ?bfX{\80z\8b\90\93\8d\93£\8f\96°\8c\95\83\90²\81\90¯\85\99²\8d¤¶\92¨³\93¨«\90¤£\8c \9e\87\9e\98\82\99\8f}\98\89\81\9c\8b\88£\90\94°\9a\98±\9b\94­\97\8b£\8d\85\9b\84~\91{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\86<1\8c>2\90>2\97@6\97?5\97?5\97?3\9c@3£C5«C6³E8ºE;½G=¾H>¹G=°D8¥@4\9b?0\97@/\97@-\97@-\96?.\95>-\94=,\95<,\96=/\96=/\95<.\93;-\92</\8e<.\8b<-\89<,\89<,\88<,\87;+\86:*\86:*\86:*\83:+\83:+\82:,\80:.\80:0\80<1\80=4\7f?6\82B9\83D=\87F@\88H?\91KA\92H=\9aG?£LE¨PL¨XQ©f]¦vh¢\8cw\9b\99\80\95¤\87\8c£\87\86\9d\83~\91}t\82qjue\eRV_LNUCEL:?F6<@27:/58-01)/0(.-(/,'/+(/+*1-,2.-1-,1-,1-,1-,1-,/.,1-,/.,2.-0/-2.-0/-0/-0/-0/-2-18,:5)51++66,GL8`hQz\83p\88\92\87\8d\97\96\8f\9a \8d\99¥\86\96£\87\9b¢\90ª©\9b¹± À³\98·¨\9a¶§\9b·¨\98·¥\91±\9c\89«\92\89«\90\90±\94\92³\96\95´\95\90­\8f\88¢\85\84\9b\81{\92xgzdTbIQT9VU9XW;,03,03,03,03./1./1./1./1....../.,.-+.-+.-+-,*-,*-+,-+,-+,,*++)**()*()*()+)*+)*+)*+)*+)*+)*+)*+)*,*+,*++)*+)*+)**()*()*(),*+,*+,*+-+,.,-.,-/-./-./+*/+*0,+0,+/+*/+*.*)-)(0,+0,+/+*0,+1-,2.-3/.40/:12:12;31<42=32<21<20;1/=20<1/>0->0-?1.@2/A4.?4.@51@72@93A:4B94C84F74H5/Q51X5/a6/l8-u9.\80</\86>0\8b=1\93?5\95>5\93?5\93?4\95B4\9aB4 C4¥D4¬B5°D8´E:±E;ªB7¡?4\9a>1\96>0\95?.\94?+\93=,\93=,\93<+\93<+\94<.\94<.\93;-\92<-\8f<.\8d;-\8a;,\89<,\87;+\87;+\86:*\86:*\859)\83:)\83:+\819*\7f9-\7f9-\80<1\7f<3~>5\80A8\82C<\85F?\88IB\8aIC\8eJA\90G>\97HC\9fNJ§VR§`Z©pe¤\83r\9c\94}\96¡\83\8f¨\8a\88§\88\83 \84~\96~y\88up{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\gGu\82d\86\93y\8e\9b\8a\91\9e\94\90\9f\9a\8b\9e\98\8d¥\97\97´\9e¢Å¥©Î­¥É­¦Ê°§Ë±¤È¬\97¾\9f\8b³\91\88°\8d\8d²\90\8e²\8e\90²\8f\8d¬\8a\84¡\82\80\99{w\8erdx]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-?1.?1.>3/=60;60;83<94=:5>93@72C60G4.O4+Y4+d5+n8,x:-\7f;.\85;.\8f<4\91<5\90>3\8f@3\90A2\93B1\97A2\99@0 >1¦@4ªB7ªB9¥@6\9f>5\97=2\95?2\92?-\92?-\91>,\90=+\91;*\91;*\92<-\92<-\91;.\91;.\8e;-\8d;-\8a;.\88:-\86:,\84;,\859)\859)\83:)\829(\829*\819*~8,~8,\80<1\80=4\80@7\81B9\84E>\85IA\88KF\8cMF\8cIA\8eH@\98JF¡SO¨]X©hb©{n¤\8ey\99\9c\81\92§\86\89¬\8b\82ª\88\80¡\84\7f\99\80~\8bwx\81njxadr[ZhQQ]IITCCL;>D6<?467/44,30+0+'1()1()2)*4+,2)*2)*2)*2)*2)*0**0**0**1++1++0,+0,+0,+0,+0,+1+-6)25)-4-%46!AH&Wc;q\80W\82\92m\8d\9c}\90 \86\90¢\8c\8b¡\8a\8d¨\89\95¸\8e È\94¤Ð\9d©Ó«¨Ò®§Ñ­¡Ë¥\93½\97\85¯\87\82¬\84\87°\86\88®\85\8c±\88\8b«\86\81\9f{{\94tq\88k_sWM]BIO3JM0KK/./1,01./1./1.0/.0/.0////00.00.00.0/-0/-0/+/.,1-,2.-1-,1-,0,+/+,,*++)*+)*+)*+)*+)*+)*+)*+)*+),+)*+),+)*-(,*(),())'()'((&'*()+)*,*+,+)-+,.-+/.,/.,-,*-,*/+*/+*.*)-)(,(',('1-,2-*2-*2-*3.+4/,50-61.;31;31<42<42=31<20;1/;1/<1/<1/=/.=/.=/,>0-?1.=2.=4-=6.;819919:29:2;81?6/C2+J1,T2)^3*g7+o9-u=.z</\87=4\8b=3\8b?2\8c@2\8e@3\8f@1\92?1\95=/\98</\9c>2¢B6¡C7\9eB7\99?4\96>2\94>1\94>/\93=.\90=-\8f<,\8e=,\8c=,\8c=.\8d>/\8e<.\8e<.\8b</\8a;.\89;.\88:-\86:,\84;,\82:+\82:+\80;+~;*~;+|:*}9,|:.\80>2\81>5\80@6\82C:\83G=\85JB\87NE\8bOG\8cIC\8eID\93PJ\98\T\9dh`\9dui\9e\87u\9e\98\80\94¡\85\8fª\89\89¬\8b\83¨\87\80¡\84~\9b\7fz\90yt\88oj~cby]\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|Q\81\90g\89\99t\8d\9ez\8d¡~\88¡z\8a§{\91\82\9bÄ\88\9fË\90\9fÉ\99\9eÇ\9d\9dÆ\9a\98Á\95\8c·\8a\82­\80\85®\82\8cµ\89\84«\7f\89®\85\89©\82~\9cxv\8fol\83fZnSJZ?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-19.47.83-?-)F*'L)'S*&Z/(`5,d<0k@0yA2\7f@/\86A2\8bB3\8f@3\93=0\93;/\928-\93;/\93=.\94A1\95B2\94C2\92A0\91>.\91;,\97;0\97:2\92;1\8c=0\88?0\84?/\82?.\83>.\88@1\88?0\8a>1\8a<0\89;/\88:.\86:-\83;-{9+~@3w<.q7)w>-w>-v;-}?2{;/\82@4\87E9\89I?\88LA\86MB\84PC\87NE\91KI\97SP\94bY\91pa\8a}j\87\89q\89\96z\8a\9f\80\8d¤\87\8d¦\89\8e§\8a\8d§\8c\87¤\88~\9f\82u\9a{o\97ui\8dib\84_[zXZsUZnSWeNPWEJK=C?6@93;0.6**3')3'+3'+0'*++-)+***,*(),'+.(,1(-2'-3(.3(.3(02(00)00)0/*1/*0/)-1++0-(//#<?*V\@pzX\7f\8bg\8d\9cu\8b\9ds\8c¡v\8c¦w\8a¨v\89ªu\8e´{\99¿\86\9fÁ\8f\9d¾\8f\96º\8a\8f³\83\88®}\85«|\83ª{\85ª~\83¨}\83¦~\80\9e|y\94ur\89mh|cYkUMZFIQ<CH4?B//0*01+01+01+12,12,21,32-43.43.74/74/63.52-50,50,7/,7/,6.,6.,3.+2-*0,+0,+.,-/-./-0--/-,1+*/)*.)(-.)//(//(//(//)-/)-.*+.*+/+*/+*.-).-)./*./*./)./*.....0....../.,/.,1-*3.+5-*5.(7.)8/(:/);0*<2)=3*>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=1pA1x@/\80A0\88@2\8f?4\91=3\93:2\93;1\8d9.\8b</\8b>.\8c@0\8dA1\8dA1\8eA/\91?1\95;2\95;2\90<2\8b=0\86>0\83@/\81?/\82?.\85@1\86>/\89=0\88<.\87;.\84;,\82:,\80;,x8,x<1s9-n9+s>.s>.r8*u:,}=1\83A5\89E:\8bI=\89K@\86NA\84PC\87NE\91JH\97SR\92f]\8cwf\83\87p\7f\93w\80\9f\7f\84¦\85\88§\88\8d§\8a\90§\8b\90§\8d\8a¤\89\81\9f\83w\9c}o\98ve\92i`\8b`Y\82ZY{X\wXZnSSaJNUCFH;C@7<737/-3*+2)*1(+.(*+++)*,+),+),-(,/)-2(02(03(02(02(10)1/*1-*1-*3-*12-12.-0,)--%8:,SXBox]\80\8bi\87\96o\86\99l\86\9en\88£p\86¤p\84¥p\8a­w\93\80\99¹\87\96\84\93³\81\8d¯|\86«x\82¨w\82¨y\83¨|\83¦|\82¤\7f\7f\9d{x\92uq\88nh{eYjWMZHEL<@D5;=/12,12,12,12,23-23-43.43.54/54/85085085074/72.61-80-80-7/,6.+4/,3.+1-,1-,1-./-.0.1/-0--/,,.+*/+)./(/1'//)-/)-/)-/)-.*+.*+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\81=4\87<6\8c<5\8d:4\8d:4\8a<2\87=2\86>2\85?3\86A2\89A3\8cB5\8fC5\8e?2\8f=/\8c>1\8a>.\87>/\85>,\86=.\88<,\89;.\89<,\88:-\86:*\83;,\7f<)~=+{<+}=1z<1v:/u;/x@1x@1v<.v;-\7f?5\82B8\89F=\8bH?\89JA\87KA\87NC\8aNF\91JH\98TQ\96f\\90ve\87\85n\81\91t\7f\9d{\81¥\81\85¨\87\88ª\89\8dª\8b\90©\8c\8e¥\89\88\9f\83\81\9a}y\98xi\96ma\92e\\8ba\\86`]\82`[|]UrVPhPFYEBP?:D93:2.3,*/)*,)**(.((1&*1&*1&*0'*1(+2).1+//*.-+.,+0+,0)-0(-0(-1)-01/23/./+(**"57*PUAmu]|\8ai\80\90k~\93j\7f\99j\83\9fn\80 n~ m\80¥q\87¬x\8d¯|\8b­z\88ªw\84©u\81§t\7f§u\7f¦w\7f¦y\7f¤y\80¢}}\9byw\91tp\87mh|cYkUMZHDH9=?299-23-23-34.34.34.45/54/54/650761961:72:72961940940:2/91.91.80-50-4/,3/.3/.3/03/01/01/20.1..0--/-+.0)02).0*.0*.0*.0*,/+,/+*1-,1-,0/+0/+10+10+01+01,11/1111/010.10.2.+3.+3.*92,92,;2+<3*>4+@6-@6-A7.B8/A8/B90A8/A81?6/>5.>5.=2.=2.<1/;0.;0.<1/=20=2.B3.E2.L..R+0V'/U&.P'/I).C/.<1+;2)?2)H1)R/)_.*d/)i9/k;/u<3}<6\85;8\89;9\8a;7\88:6\89>8\86@8\86B9\85B9\85C7\86B7\87A7\89A5\88@1\88A/\87@.\87@.\87>-\88<,\88;+\89:+\8a8*\889*\87:*\83:)\7f<){=(x>(x>*\82>1{7.z7.z<1v;-w=/|A3{@2\80B7\83E:\86H=\88J?\87KA\87MB\88OD\8aQH\8eSK\90\Q\8eh[\8btb\85\7fg\80\8bm~\96v\7f\9e|\83§\83\84ª\85\87ª\89\8bª\8a\8b¦\87\87 \82\83\9a~}\98yq\95oi\94if\8fgf\8ceg\8bgd\86e_~_Zw[PhPK^JBP?8D62:/.4*,/(+*%2&&5%(4%(2&(1'(/)+/+,.,-+++*+-*+-(,-(,/',/',/*+-.*+1++0+'.+"88,PUAiqYv\83e{\8chy\8fh|\96i\7f\9cl}\9fmy\9ekz m\7f¥r\82§t\80¥q}¤o}£p}¥s~¥v~¥x}¤x|¡x}\9fzz\99wu\90qn\87je|bXlSN[GDF9?=1:8,45/45/45/560560560761761872872;83<94<94<94<73<73<41<41;30;3083072/61.61.5106216213123121/00./1-.2,04+.4+.4+.2,.2,,2,,2,,3/.3/,3/,3/,21,21,32-32.22022032032051051.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=:\82<:\86<;\87;;\86::\81:6\81>8\81A8\81B9\83C:\83C:\85@9\84@7\82C2\82C1\83B0\84?/\86=.\88<.\89:-\8b9-\897+\878+\859+\82:+~=+x>*v?*x>*\819-|/'\828/\84>4w4+s5*}A6}C7\7fE:\80G<\82I>\83J?\84KB\86MD\87QG\85WJ}`N{iQ\80pY\81u]\82|b\83\86i\86\93u\88\9d|\83£~\81§\80\82ª\85\82¬\86\81©\84\7f¥\80{\9e}z\99wz\92pz\90lx\8dlw\8cku\8dmr\89lm\84gk\7fd`rX[iRR[HHL=@@4;7,70&5*$6('5''3''1'&.)&+*(++)+-*',('+*)+*)+***,+),+),-)*,#$2*'50*86*BC5UZFfpWn}^t\88eq\8abu\90ex\98iv\9ajs\99ht\9aiw\9fkz¢nx lw\9fkx ny£q{¥u{¥w|£wy\9euz\9cww\96ts\8eom\86hd{_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/331542540841850940:5/=60>7/@7.A9.C9/D: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}77\8287\8377\8266~75}:4}<6}>5\80?9\83@8\86?9\85A8\80B3\80C1\81B1\83@0\85=/\87;.\88:.\879-\859,\839,\82:,\7f<,|=,y>,x?,|=,\875*\8b2,¡LE¨XQ\8bA8|90\82F;\80K=yH:zJ<{M>|N?}OB\81QE\87UJ\82_LrkOosR|uX\86v\\8fyb\98\7fi\9f\8b\94z\96\96z\8f\9d|\8b£\7f\88¨\81\85§\82\80¤~{\9fy~\99v\83\91p\85\8eo\83\8ep\80\8fp\7f\90p{\8epw\8cms\87kj~bfv\_hSV[GOM>GA3@6*=0';,'9+(6+'3+(/,',-'+.').().(+-(-,*/+*3)*4(*7'*7'(3($<3,E>4IG:QR@]bKgqVjyZn\82]k\84\l\89]p\91bq\95eo\95do\97er\9afu\9fmr\9cjq\9bit\9enx¢rz¤vy¢vy\9fvv\9atw\99vu\94ro\8dkj\85fc|^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/54/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-z63\8398\89;9\8b;:\8b=;\8bA>\87@:\82=6\7f<3\7f:3\82<4\88=7\89@7\83A5\81B3\82@2\83?2\83=1\84<0\81;/\80</~<.|=.{=.|>/|>/}>/\7f=/\869/\901+£;8ÎkfÛ~y­ZT\8cC<\88LA\7fN@tJ<qM=pQ?qR@tS@zWD\82[J~eOmsOo{U\84y[\98u_©oc¶mf¾qk½wo»\82\8c\97~\9e\9f\80\96¡\81\8d¡~\85\9dy\85\99v\88\91r\8b\90r\88\91r\84\93r\80\96r|\96sx\93pt\92pm\8bii\84edx\]kQV^GMP;ED0B;+@3+?2,;0*70*30)00(./'./)/0*2/*6,+:*+>(+C&+E$+C&(F5-LC4VP@[XE`bLgmQiwVj{Wl\82[g\82Wf\86Wl\8e\o\94an\94an\96br\9afs\9dko\9bjo\99ir\9cnv\9fsy¢xx\9ewu\9bvs\97su\97vs\92rn\8bli\84cb{[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\89@9\95D@\9bHD\9fJG\9fLF QJ\99LD\8eD;\85;0\847-\857-\8c91\8d=4\88>5\87>7\86=6\85<5\85<5\81=4}=3z>3x@3vA3x@3z>3\7f<3\83:3\8873\9242\98(&³=;í{zþ\95\92Åhc\96G@\89K@xH:nM<jQ=fT>hV>lX@t[E\7f`L\80hPysQ\84wU\9et\´l^É__ÓV\ÙQ[×T\äouÙzxÌ\86\8f\95\80«\95\92x\9f\8fv\9c\8ar\9c\8at\99\8du\95\8fu\91\91u\8b\92s\86\91s\82\91r|\8bny\86ju{amoWgbN_TBUE5R</O4-M1-I0,D/*>/(9/&7.'6/'81):/)=.+A,+F)+H(+K'+H)'TB4YQ<d^HgeLilOnuVm{Xl~Xk\84Zg\84Vg\87Vm\8f]p\95bq\96br\99du\9dit\9blo\99ko\96jr\99mw\9dvy\9fxw\9ayt\96us\94uu\94us\90qo\8aki\84ea|[TmMM]BMN@KB9F=69:49:49:49:49:4:;5=<7=<7=<7=<7@=8@=8A>9B?:D?;D?;E@<E@<E@:D?9D?9C>8E>8D=7B;5B;5B;5B;5B:7B;5A:4A:4A83A83A83@72@64>71>71>71<71<71;60:5/96/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=0\8aJ>\8fG;\97I?\9fKA\9fF>\9b>7\9b>7\9eD;¦ND¤PE¨VJ«YK¥OB\99A5\97;0\9b>6\9398\9198\8c65\8652\8684\84?8|@6r>1rB4oA2q=0v:0\8272\8c43\92-1\9a',ÈHIèbaÅEDÍWUáyv«VO\86F<\84VFmR=i[AibFjeHj`En^D|dL\8djT\92bL²m]ÑnhÛX]à;Lç-Eò+Hõ0Lö@YìI\ä[eånrâ{|Û\80\83\7fØ\89\82Ã\7f\81\84\86\88\8a\8b\8cx\9a\80o\99~m\98xi\93oa\8dbY\84UM{IBxA>u:<i.2d04a03P&'G%#L0-M51G4.E2,D1-F1.F.,F*)K--Q6/YH4`W:f_BgdEkoNu|Zu\84]o\81Yl\83Wl\87Zp\8d]r\92as\95bu\97dw\99fv\9bhq\95is\98os\97qq\95os\95tw\99xz\98|y\96zx\95ys\8drm\87jk\84fi\82dazZTmMO_DNO?SK@PG>9:49:49:49:4:;5;<6>=8?>9>=8>=8A>9A>9B?:C@;D?;D?;FA=E@<E@:E@:D?9D?9E>8E>8E>8E>8E>8D=5C<6C<4D;4C:1B92B92B92B92B94A83@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?6K>5I<3H;2E;2E;2C:1B90@91@91@91@91A:4B92D93J71L/+V.,j76u99{;;\85EC\83D?\84H@\85I?\86H=\8eJA\99NH¡PL¢OG\93D7\94B4\9aB6\9fC8 >3\9c7-\9c7-\9f=0£C5\9b?0\99@0 E3¤G6§F6®H:¶NE´LM¯HL¥@D\999;\9198\8d>:\83@8x>3o>0zI;\85LA\84?8\84,+\92).³9DÒLWÜKNßMMÊ>=À@?Ð`\³YQ\84@5\82TDyaIe[@_^@ihIslOvgJ~dK\96cN¼dXÖ_[æUZëANò,Eþ%Dÿ&Hÿ'Iÿ.Nù3Nò<RðIZëP^åQ]ãS]àXbÛbiÕflÔjnÒmqÏqrÍutÉxwÇywÊ||ÉyzÈvxÇqtÆkrÅfnÅakÃ_kÅ`n³S_¥KW\9aGQ\8dDK\86EIm69H\1c\eT1-M0*H1+J6/K81K:2O>6UE8[O5cZ9gaAifEnrOz\82]z\89bt\86^r\89_p\89_p\8b`q\8e`u\92dw\94dw\94dw\94fs\92ix\96rz\97xy\96x~\98}\83\9d\84\85\9d\87\83\9b\85\81\99\83z\92zr\89om\84hh\81d`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@0P@1O?0P?5M?4L>3K=2I<3H;2E;1D:0C:1C:1A:0A:0?;2@<3@<3D;4UD<T3.j23\8eAG­LWÃUbË]fÆ_c\9bB>\97I?\96LA\9cNB¬RJ¾URÌOSÄLK¥@4\9dB0 @0¥?1¥;.£7+¤8+§=/«E6¡>+\987$\9d:'¥>-¬A/²C2¶D:§02¯:B¹DL½LRºMR­KL\96A>\8271{8/v6,x2*\841-\9c37¹=GÕGWèM[âFIÏ53Ð:9½31ÈNKÆc]\94J?\8c[J}cLj_CgdEtoO\7fpQ\81hJ\8dhN°hYäbbõQZôDQö7Iý1Jÿ2Nÿ/Mÿ+Iÿ2Oü0K÷1Jõ5Lò4Mð2Kó3Ló7Pò@XïC[îF]íIaëNcêQeèUhèVkåSjäRiãOiäNiçNlëPoòSsóVuþh\85ña|å[uÕUlÍYlÉdr¨R]r-2^&'Y0,W:4Q?5B:-:8)>B1LN9VO3aV6e_?heDquT\7f\86e~\8ciw\88dx\8ciu\8ber\8bdr\8bcv\8cey\8fhz\90iz\90j\80\95v\84\9b~\8a\9e\85\8d \8a\92£\90\97¨\96\98©\99\96¦\99\91¢\92\87\98\86z\8dyp\83mg~b^wYTmMPcGSXDXUDYVG7827828939:4;<6=>8@?:A@;BA<BA<DA<DA<DA<DA<E@<E@<GB<GB<GB<FA;FA;FB9HA9HA9LC<KB9JA8I@7H>5G=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;0D</F<0F=.J>0K?/M@0M@0O?/O?0O?2O>4L>3K=2J<3G:1E;1D:0D;2D;2B;1@<1@<3A=4B>5G=4S81[*&\89:?¾T`ÙTeæTgãUcËJO\9f30\96:/\91>0\99A3®F=ÅIGÕBHÍ>@±B7§F5©B3¬@3¯?3°>3³B4´D6²G5©B/£<)¤;(©<(«:(®6&­3(¶97º9=½7>¼7<¿<BÆJLÄTS¾XS\99?7\8c4*\89,%\9d61ÃHKÜOWâAQÛ3@Þ:9Í.*Ó84È74ÆE@È]U©WK\90WFwW@veI~pS\7fpQ\84fJ\90dK©o[ÕuiîSWüDP÷;Jø9Iþ=Nÿ@Qÿ:Nù4Hÿ?Sþ9Mû4Ký3Ký1Jÿ/Iÿ0Nÿ6Sÿ3Tý4Vý6Wú7Wø9Zø=\÷>^õ@aøCfö@fõ?eõ?gø?hüCmÿErÿIsÿOuÿQuþUvòSqçTnåaxÖfv·Wb}15j0/Y2+P8,G>/>A.;D/?G/PK._T8g`CokN||`\88\8er\87\91v}\8bqz\8dq|\8fs|\8fsz\8doz\8am}\8co\83\92u\88\97z\95£\8a\9c©\95£®\9d¦±¡¬´§±¹®°·°«µ­¡«¢\95¡\95\83\91\82s\84qh|c]tXSlNPdHRZCWYDYZH671671782893:;5<=7?>9@?:BA<BA<DA<DA<EB=EB=FA=FA=FC<FC<GB<HC=HD;HD;JC;JC9LC:KB9KA8J@6J=4I=1H<0G;/E;/E;/E;/E;1E;1E;1D;2D;2@9/@9/@91?80<71;60;60:5/;7.;7.;7.<8-?8.A;/C;0D</G=1G>/K?1M@0M@0NA0O?/O?0O?2N>1N=3J<1I;0G;/D:0D:0D<1D<1B;1@<1A=2A?3B?6J<3\5.w32­LSÛ]iæM_å?S×6E·&+¨1+\9d7(\92:&\97<)¬@3ÃD=Ô>?Í;;±?5¨B4ª@2­?2²@5¸C9¼H;»J<¬>/ª?/¨=+¦;)ª9)°:,·;/¼<1ÊFAÎDAÐ>?Ð79Ö7<ÞBEâLNÝROÄC>ÆKCÍTLÔSMÙKJÛ?Bà5>á27Û4.Ú7.Ð1+Ï:4¿84³@9µ[P\96UC{N9\82bI\86kP\84`F\91ZE­fTËrdçmhêEKò:Dê9Cç<DçBHçFKèGMêFMôJSóAMó8Iö5Hù2Gý/Fÿ2Lÿ8Rÿ9Vÿ9Xÿ:Xý:Zþ;]ÿ=_ÿ@bÿAeÿCiþDkþDmüCmüCoüCoüBqþCpÿGpÿ@hÿGmÿMpòIhéOkå[rÙcs½Yc\8e?D`&$Q+"V@3VO=IL7@D-RJ3eYCujV\80{g\8e\8dy\98\9c\8b\94\9d\8c\87\94\83\82\8e\80\89\97\88\8f\9b\8d\8c\99\88\87\92\82\8a\93\82\97\9e\8e¤¨\99²¶§¸¼®¿Á¶ÀÁ¹ÂýÅÆÁÃÃþ¾¾°µ±¢©¢\8d\97\8cy\87vi{e\sYTmORfJQ[BUZCW\F560560671782893:;5=<7>=8@?:@?:C@;DA<EB=EB=GB>GB>GD=GD=HC=ID>IE<IE<KD:LE;LC:KC8LB8KA5L@4K?3J>2I=1G=1G=1F<0F<0E;1E;1D;2C:1A:0A:0@91@91=82<71;60;60;7.;7.;7,<8-?9-A;/D</E=0H?0J>0L?/M@0NA0NA0O?/O?/O?0N>1M<2L;1I;0G;/F90C9/C;0B<0B;1@<1@>2A?3B?6N;4m84\97FEÄY_ÛWbßCQÞ8FÔ3;½++­1'¡8%\98:!\979 ¤;&¶>.Ã:2¾71§7,¢:-¥9-§7,¯:1¸B8ºE;·E:®>2­?0§<,¤6'ª6)¶>0ÃD;ÊG=¾8-Î@6áD?ìBBô=Aó9>ë27Þ.0Û75âGBèSLåNGÜ=9Ù10ã/2ê67Ù1(Þ</Í,"Ð71¾3,°7/Ég\¸l\\8eWC\87ZC\83V?\89R=©\LÎlaágbäTTðEKñ=Fä;@Ù=>ÒA>ÒGDÝOMëWWíNSïDMò9Gö5Fø1Fø.Dû1Gþ7Nþ8Sý8Tý8Vþ9Wÿ;\ÿ>aÿAeÿCkþ;eý<hý>jý?mú>nø>oô=mö:jÿHrÿ;aÿ?dÿKnÿKn÷NmïUoãZnèr\82Ä`j\97HKt:8\6-P9+PC2UM:^QAreU\88|n\95\8d\82\9f\9d\91¦§\9f §\9f\94\9d\98\95\9e\9b\9e§¤¦¯¬¦¬¨¢§£¦¨£µ´°ÂÁ¼ÌÉÀÑÎÅÕÐÌÕÐÍÔÎÎÕÏÑÑËÏËÆÊ¿½À°²¯\98\9f\98\80\8c~m~k`t[WnRVjNS`FV`EX`H560560560560671893:94;:5=<7>=8A>9C@;DA<FC>HC?HC?GD=HE>ID>ID>JF=JF=MF<MF<ME:LD9MC9MC7NB6MA3N@3MA3JA2JA2I@1H?0G=1F<0D<1C;0C:1C:1A:2@91?82?82<71<71<8/<8-<8-<8-@:.A;/D</E=0H?0K?1M@0NA0P@0P@0O@-O?/O=/O=1M=0L</H:/F:.E8/C9/B:/A;/A:0?;0?=1@>2@@4P91r1/¨JKÀRU»>D½06Â03Á//º1)©1!£9#\9c=!\99;\1f\9b< ¡=#¥;%¤6%\9e6) 8-¢6,¥4,­81·@:¸C<²@6±B7­A4¨</¦8+¯:0¼C8ÃD=Å@7Ã>-Ï>-Ù5+á*&í"%ú%+ÿ*1ÿ.4í)*ç.+á3,ß4,à3,ã2,é0-ç2+Ú2%Ö6&Ð2&Ï7,Å6.½>7È`UÒ\7fq¦eS\8fVB\8aM:£WIÈf[ßd_çRTèCIõFMí@Dß??Ô@<É@8Æ?9ÑFAãMLïJPô@Kù9Hý7Hü5Hø3E÷6Gú;Mú8Pü7Rû6Rý6Uÿ6Xÿ9]ÿ;aÿ<gÿ>kÿ?mÿ@qÿBtÿBuþBuüBtùBpÿFmúAaþEeÿKjþKkÿVtÿ_zõ]tòj~æp~Ónv¯]a\83CAg6/hB7sUJye\\8c}v£\96\90­£¡²®«¶¶¶²¶¹¨°³°·½¶½Å½ÁÊÀÃÊÄÃËÉÆÍÕÎÖÝ×ÛâÚØçÝÛéÝÝæÚÜåØßä×ààÔÞÙÏØÊÅ˺ºº¢§£\88\92\87t\82qexb\sW[oS[jM\iK]gL561561561560561671872983<;6=<7@=8B?:DA<FC<GD=HE>HE>HE>HE<JF=JF;KG;KG;NH:MG;MG;ME:MD;MD;MD=NC?NC=MC7MD5KB3JA2H>2G=1E=2D;2C:1C:3A:2@93@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-\87<7Ä\[ÊZY®86«.*±0*®.%­2#¬9&¬B*ªF,¦D'£A&£A&¢<#\9f9# 9*£;0¦:0¦7.­<4¶C<·E;°@5«=0¨</©;.¬<0»E9ÆLAÅE<¼8,¿6$Í:(Ý;.æ3,ñ+*ù(+ý&+û%'ø**õ.+ï2,ë4,è3*å3)ä2(à3%à:*Ñ2\1fÜ?0Î6)Ç7,Â?5³A6Ñl`¿gY¥RB¨OAËcZçhbæRRêAFóBJë>Dà:<Ö<<Í@9Á>4¶8,¹6.Ä94âHHé@Eð:Fö:Hú:Iø8G÷;Iû?NþAUÿ?Vþ<Tþ9Tÿ8Uÿ9Zÿ:^ÿ;cÿ>iÿ>lÿ>oÿ>pþ?rú@rø@t÷Aq÷CjÿMmÿSs÷JhìAaýTsÿg\85ÿe\82÷]wï_xèg{Üp}Æqx§gg\8d^X{ZQ\97~wª\99\92¾°­Ä¼ºÆÂÃÈÇÌÇÇÏÃÃÏËÊØÌÊØÑÊÚ×ÎßßÔäæÛéêàëíãëïåæòèæôèèðäæîáèíàéêÝçäØâÑÊÑÁ¿Â««©\91\96\8fz\86xl{hbu_`rXbpVboScmT21/320431651875984984984;:5<;6==5??7AA9CC9EE;EE;HH@HH>HH<JH;KJ8LK7ML8NK8NK:JF:GD;JFCNIMNIPGDOD?ENE>LC4J@4KA5MC9LB8F=4B90E<5C:5@93?74@85?75<74<42C:5B94A96>95>96>:7?;8@<9B?:D@7G@6J@4L@0O@-O@+L?,G@.F?/I;0K81M53L76J88F;9B?:6904</9D4:A/69$?=(bC1¼j^¹JA¦7,¥5)§7+¥5'¥7&¨=+£8$¥<&ª@*­@)¬=)¬9&®6%«6%¤6'¡7)¢8*¦<.ª@2¬B4¬B2¬A1©>,«=,­<,³=/½C4ÄF8À>1º2&Ç9+Ì8*Ð8+Ö8-Û7-â5.é3/î1-ñ.,ô.-ó0,ñ1,ê5*ã7)Ý:)Û:(Ü9&Ô3\1fÐ3 Ï8'Æ7'¾6(ÂB5ÏSIÈMEÏSKá\Wî]ZðPRí>Cò9?÷?GêAFßCDÕAAÈ?9»<3±;/°</²<0ÊKBÔKCÜFEá>?ë<A÷?Gý?Iù;GþDQüCQþDRÿDUý@Vü<Uÿ<ZÿBdÿFkÿAjú;gõ:gö<mùCsýIyÿKzÿMyÿMtøPsðOpçMiêMjüYxÿg\88ÿ_\83õGl÷Vwè_yÃ^n½{\7f\87a^\8fxp§\91\84»§\9cÑÄ»ÝÖÐÝÜÚÜÛàÞÜçâÛëæ×ìëØîñÙñöÝó÷âó÷çôõëôôîòùôñùôðùñïöíîóèìîãééÞäæÝâÖÐÔÍÉÊ»º¸£¥ \8b\90\89y\83xr}op{k}\86sx\81lv}k0./1/0320542653762873872:94;:5==5??7AA7CC9DD8EE;HH>HH>HH<JH9KJ6LK6MM5NM8KJ8KI=KJEPPRWU`YXjVTjRO`OIKMD?H?:F=8G>9H?: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)^B4\80L>®QB«;- 2#¡6&£:'\9e7$\9e9%£>*¡;%§<(®?+³@-¶=,·9*¹7)µ7)ª9)¥:*¥:*¥;+¨>.«A1«B/«@.®?,«:(±<+¿E6ÆH9Á?1¼8+À6)Ë7+Ï7,Ð9.Ñ;-Ô</Ø:.à8/ç4-î1-ô.+ô.+ñ0+ê4)á7(×:'Õ:$Þ<'Ù6#Õ8%Ô=*Ì;*Á5&Ä:/ÏF<ÑF?ÚIFéOMóPQôGIð;@õ:AøCHåBEÚDCÒBAÅ>8·;1®:-ª<-«=.¶E5ÆL?ÔNEÜGCã?>ï?Bú?Fý?IøCJ÷CLúDPÿFTýBSù>Sü>XÿBaÿGiÿCiü?iù@jùBpüFvþJzÿK{ÿJzÿHtõKpñQsõ\zù_{úWvüNqýEkúDlïEiÚKgÈ_p±nukLI\90~t°\96\89̲¥äÓÉìãÜëçæêéîêçòíâóöãùûáúÿâýÿçÿÿìÿÿñýÿöþÿùûþú÷ýúõü÷ôúõòøïðôëîñèíïæëæÝàÜÖØÊÆÅ´³¯\9e¡\9a\8e\93\8c\89\8f\85\87\8f\82\8f\95\87\89\90\80\86\8c~/.,0/-10.21/43/540762761:94::2<<4>>6@@6BB8CC9DD:IF=IG;JH;LI8MJ7NL7NL7OL9KI:NKBTRS_^fihxmm\85lk\8akh\83`YiYQ\OGRH@KH>GG=EE<A@:<C:;?:7<74<73=82>93>:1=9083-94.;60<92=:3>;4?<5@<3E>4G?4I?3L@0O?0P?/P?-L?,<;&:=(?<+A;-B71A62>42;30=84B;5H94N2.Y,)l/.\87;=¡FE£;0¢2$\9f1 ¤9'¥<)\9e7$\9e8"¢<&¤;&ª=)±A-¶A/¹>.»<-¾:-¾</²<.¬<.©9+©9+«<+­>-­>-­<,²?-°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Í>8ÙEAåKIêJJéCCì?AëCCÞCAÕD?ÍB=Â=4¶:.®8*«:*¬;+¬8)ÀD8ÔNEÝIEâ?@ê=A÷BIÿHPôAGô@IùCOýGTþEUú@Uû?XþA_ÿEgÿCiÿCkÿFpÿIwÿK{ÿL|ÿJzÿFxÿHwÿKtûOuÿZ|ÿa\80ýUvñCdûIkÿTvÜ?\ÍI`Ø{\85¸||aC;\8f|n®\8e\81Õ³§óÛÑûìåúòðù÷ú÷ôýôìûúëÿÿêÿÿìÿÿîÿÿóÿÿ÷ÿÿûÿÿýüÿþûÿýùÿúøÿøöÿõöýóôûðôùðóðçêåßáÓÏξ½¹­®¨¢¥\9e\9d£\99\9d£\97£«\9e\9e¦\97\9b£\96/.,/.,0/-10,21-32.54/650880991;;3==5??5AA7BB8CC9HE<JF;KH9MJ9PK8OM8QL8OL;LJ>QPL^]bmlzzz\92\81\82¡\80\82¨\80\80¦{u\97rk\8ae_{YSmTLdMEZG@PB<HD?F@;?<87;63;60<8/=9.;8/:70991;;3>;2?=1@<1?;/A;-F?/H?.K?/M@/O?0O?/P>0L?/@=*?>,@=.?;/?;2>93=:5:94<94D95M51V-+j)-\8618\9e9A¬>A¦7.¥7(¥:(ª?-¨?, 9&¡8#¤;&¥:&«<)³>,¹@/½>/Á=0Å=1Ä>2½?3¶=2²9.®8*¯9+°:,²:,³9*¶;,¹;-ÄB4ËE9È>3¾1'À2(Í9/Ö5+Ø4*Ú6-Û7-Þ7.á6,æ3,ì1*ó0,ô.+ô/)ï0(ä2&Û4$Ò6 Ð5\1f×2\1eÚ0\1fÚ4$Ü<.Ö=/Ð9.Í=2ÒD:Ä5-Å60Ê;5ØD@âMIåKIÞC?Ö=8Ó@9ÎA8Ç>4¾</µ:+°8*¯9+±;-¬4&½?3ÑH@ØGBßA@æ@DôGMýNUð?Eð?EöBMþHUþHWüBWú@XüA^ÿAcÿCfÿFmÿIrÿMyÿO|ÿL{ÿIyÿDvÿN~ÿR}þKrøMoÿVuÿUu÷MjðFcïKfÒ>Vádtþ\9f§Ó\8f\8ed92lJ>¥ynÐ¥\9cõÔËÿéãÿôòÿýÿÿüÿùóÿüïÿÿïÿÿðÿÿòÿÿôÿÿ÷ÿÿûýÿüûÿýúÿüøÿúøÿù÷ÿö÷ÿõöÿôøþó÷öëïìãäÚÕÒÉÆÁº¹´³´¬±´©°¶ª¶¾³°¸­¬´©10,10,0/+0/+10,21,43.54/77/880991;;3==3??5AA7DA8IE:LF:NH:PJ:RK9RM:SL:QK=OJDVTUfdqwx\8d\87\87©\8d\90¹\8f\93Ã\8f\90Æ\8e\8bÀ\87\83¶{w©pm\9aid\8d_[~UPnNJaKGXEBM?=B;7895296/85,85,671783891;;1></?<+B=*C<)G?,J?+K@,LA/M@0M?2L@4K>5L?6K>5F<3B92=82:946;46=57<5>:1H4-Y2-w78\94?D¦>E©8:ª;0ª<+«@.¬A/©@-¥<)¦;'«>*§8$­:'µ<+¼=.Á<-Å;.Ê<0Ê=3Å?6¾>3º:/·7,·7,¸8+º8+¹7*»7+ÇA5ÍC8Æ9/Á1&Æ3)Ë7-Ï5+Û4+ß3)á4-â6,ã5,ç5+ì1*ð/*õ/,ö/*ò/)ì0'â2#Ù4!Ð5\1fÏ4\1eÖ1\1eÙ/\1eØ2"Ø6)×9-Ô:0Ö?6ØE=ÖF>Í@7É<5Ë@9ÖKDÙNGÒE>Å;1Å=1Â<0À</º;,·9*´:+¶<-¹?0µ9-¿<2É@:ÒC?ÛCBãDHíJOöOVì?Eí>CòBLûIUÿJYýFXúCYûC]û@_ûBbÿEjÿJsÿNzÿO|ÿLyþIvÿJwÿT\81ÿT}ýJqùImÿStÿVtøNiëD^äF]êXkÿ\96¢ÿµ¼ó\9d\9e\8eHFk.)¦kcÍ\96\8fóÈÁÿãÞÿñðÿüýÿýÿü÷þþöÿÿöÿÿøÿÿøÿÿúÿÿüÿÿýýÿýúÿüøÿûøÿùøÿø÷ÿöøÿõ÷ÿôøÿôøýñóóéêäÜÚÖÑÍÍÊÃÉÉ¿ÊÊÀÊÍÂÉÐȾȿ¸Â¹65143.32.10+10+21,32-43.66.77/880::2<<2>>4@@6B@4JD8ME8OH8RK;TK:TM;SL<RKAQLIYV]li|\7f~\9d\8c\8f¸\96\99Ì\99\9eØ\9a\9eÞ\99\98Ú\94\91Ô\8c\8aÉ\86\85¿\81~µxv§nk\96fe\87]ZwVTiMKYDAJ><?;:8;74762555457664872<:.?<+C>*F@*G?*H@+IA,IB0IA4HB6HA9G@:K=<I;;C9:=77875384/83.916=574+C1']80~C=\96GC\9e>?\9d40§;/ª<+ª?-ª?-©>,©>*¬?+°?-«8%²9(¹:+¿9-Ã9,È:.Í:0Ï<2Ë>5Æ;4Â91Á8.Á8.Â9/Â8.Ã6,Å7-ÑC9Ð@7Ã0&Ã,#Ð7/Ö<4Ó2*à3,ä1*ç2+è3*ê3+í2+ð/*ó-*ö/*õ.)ò/)ì1(á4$Ú5"Ñ6 Ð5\1fØ7#Ù3#Ö3$Õ3&Õ5)Ô8,Ô<1Ö?6ìYQáRJÓHAÌC;ÊE<ÌI?ÈE;À>1¼:*¼;(¼:*¹:)·:(¸:+¼>0¿A3ÁA6Á<3Æ=7ÏA=×EEÝGHäIMëLPèBFê@CðCIùKTþNYüJZüF\üF]øA]ùBaýEiÿJpÿNwÿOzÿNxÿLvÿQ{ÿRyþOvýOrÿVwÿ]{ÿSoîD^úTlîQd÷dtÿ\92\9eÿ\8b\95ô\83\89Ç`d§MMµjgÎ\8f\8aXÿÞÙÿïîÿúùÿüþýûÿýúÿþûÿÿûÿÿûÿÿüÿÿûýÿûûÿûøÿûøÿüùÿûúÿûúÿøúÿöøÿó÷ýñóùíïòææçÝÛßØÒÛ×ÎÝÛÏàÞÒßáÖÜãÛÏØÓÅÎÉ<94;8185052+41*41*52+63,74-85.96/;81=:1?<3A>5C?4JB7MC7PG8SJ;WK;UL=UK?SJCSJK]Wcnl\82\82\82¦\91\95Å\9a Ú\9f¦ê¢©ñ¡¥ï\9e ë\99\9bå\95\98Ý\94\95Ö\90\91Ê\89\89½\82\83±zy¡rq\91fc~XVkPN\IGRFCLCBJ??K==G;:@;9:<94?;/C=-E@,F@*FA+EB/EC4CC7BC;AC>@ACB<FD>LCANEEOCHNAIL>HI=HDCHAA=2L:.gF7\83OA\8dI<\8e?2\948)¥>/©>,«>*¬?+­@,¯@-°?-²=+±8'¶8)½9*Ã9,È8-Ì8.Ò:/Ô;3Ï:4Í:3Ë81Ë81Ì92Í:2Ì70Ë6/Ó<5Õ>5Ò91Ì2(Î4*Ø;2Ú<3×3*ä1*é1)ì1*î2)ð1)ò/)ô-(ö,(÷-)õ.)ñ0)ê2(â5'Ù6%Ó7!Ï7 Ô9%Õ8%Ó6%Ñ4%Ò4(Ó7+Ò8.Ð7/ãNGèXPçZSÚQIÌG>ÄD9¿@7¹>/¹<*¹<&¹<(¹:'¸9(º;*À>0ÃA4ÉD;Æ@7É@:ÑFCÕIHÖHGØGJßIKæFHèBDíDIõLSüQZûO]ûL]ûK`öD^÷DaùFfýIlÿNuÿOxÿOxÿPy÷UzóUvôTvüYxÿ]{ÿZwûQkòI`ýWköUgêM^ö^mâKZæTaåTa×XaÁefÈ\83~嫧ÿÔÑÿëèÿóòÿøùÿþÿûüÿûüÿûüÿüûÿüúýýùúý÷÷ü÷ôÿú÷ÿûøÿüûÿûúÿøøÿóóýîñúëîðáäéÝÝäÙÕâÙÒæßÕëçÛñíáññåìóìÛæâÎÙÕ@=6=:3:7074-52+52+52+63,74-74-96/;81=:1?<3@=4B>3JB7MC7RF8VJ:WK;XL<WK?TICSJM^Xfpm\88\82\84«\91\97Ë\9c¤ã£­õ§°ýª±ÿ¦¬ú¡§ó ¤î\9f£ê\9d¡á\99\9bÖ\95\96Ì\92\92Ä\89\88´yy\9fji\8b`]|XUpRPhOMeNJcKG^FBS@=H?:>?:6@<1A>/C@/CB0BC3BD7?D=>D@<ED;BJ>CVCIaLRhU\n\br`dobbjd`afXWaJDlG>\83SE\95XF\93J7\91@+\99>+¨A.®@/®A-¯@-°A.´A/²=+°7&µ7(¼8+Â8+È8-Í6-Ñ7/Õ8/Ø;4Ò72Ð72Ð72Ñ82Ô94Ô94Ò72Ó6/ÞA:Õ8/Ñ3*Ö8/Ü>5Þ=5Ú91Ü5-ç2+ë0)ï0(ñ0)ô/)÷-)÷,(÷,(÷-)ô/)ð1)ê4)á5'Ú7&Ô7$Ð8#Î7"Ï8%Î7$Ï6&Ð7)Ò9+Ñ7+Î4*Ë4+ãNGód\ë`YÕOFÄA7º;2µ9-¸>)¸>'¹<&¹;%º9&½9*À</Ä>2ÊD9ÊA9ÎE?ÕKHÓLIÎGDÍEEÖHGãIIæCDèEHòMSøSZùR\÷O^úOaôH^õG`øGdûIiÿNrÿQxÿRyÿTzðUuïZxù^}ý^|ùUpõMgùOiÿYnÿ[mÿctðM^øUfôO`üUgõL_äR_À^_»vq×\9c\98úÉÅÿåãÿíëÿôôÿÿýüÿÿûÿÿûÿÿûÿÿýýýýüúþùöýøõÿøõÿùöÿúùÿúùÿööüððøéìôææëÝÝèÚÙäÙÓèÞÕðèÝùóåÿúìþþòôúöâìëÓÝÜB>5A=4@<3>:1<8/:6-84+73*62)62)73*84+;60>93A<6E>6I@7MC7RF8UI9WJ:XK;ZLA[NHTIMXR`gd\81|~§\8d\92Ê\97 ã\9eªö¥°ÿª³ÿ«²ÿ¬´ÿ¬²üª±ùª¯ó¨¬ì©«è\9f¡Ú\99\9aÒ\8d\8dÁ\81\7f±tr¡he\92]Z\87XR~XQ{YQxVOpMH_C?M?:@?;:B?8>>4@B5BE:?D=<B>:CB>FH?LUEWoQf\83ar\8eis\8etv\8d\81x\8d\84o\80\80^l\8a[c\92WY\9eWU¦VM¦M?\9f@.\9c9$ :$¨=)¬=*®?,±@.³@-´?-¶=,¹;,º6'¾6(Ä6*Ë7-Ñ7-Ö8/Ú91Ú83×84Ø95Ù:6Ø93Ø61Ø61Ú83Ý:3æC<à=6Ú70ã@7þ[Rÿlcÿ]Tç?6ä2(í2)ñ2*ô/)ô*&õ(%ø(&ø+(÷-+ó0,í2+ã1'Ú0#Ô1"Ô4$Ó:(Ì;&Ê<(Í<)Ï<*Ò:,Ò9+Ò8,Ñ7-Ú@8Ï81ÜGAôc^åXQËB<Å@;·4*·:&¶<$¹<&º<&½:(¿:+Ä<0Æ>2Ç>4ÌC;ÙPJßXRÔOJÃ?:À?:ÏHDÞHGâGEæJKïPTñRWïNVíKXñL\ùRføOf÷Ke÷JfüMlÿQsÿRvýRvôWvîXuõXuû[wÿ\xÿZsÿWnÿVkÿbuýVgÿ\mÿ[lñFXôDXÿQeîVeÆfgªieÊ\8f\8b網øÒÏÿëçýïîüø÷ùýüùÿÿùÿÿúÿþüþýÿþüÿûøþöôþùõÿû÷ÿùöÿöôÿööÿõõöèèæØØãÕÔÞÐÍáÖÐñçÞüôçþøèÿüéÿÿóúÿùèñðØáàC?6B>3A=4?;2=90;7.:6-95,73*73*73*84+:5/=82@;5D=5H?6LB6OF7TH8VI8WJ9YK>ZMEUJNWQ_eb\7fy{¤\8a\8fÉ\94\9dâ\9b¦õ¢¯þ«´ÿ¬µÿ®¶ÿ¯·ÿ°·ÿ¯¶ü¯´ø¯²õ©ªë¢£ã\98\98Ø\8c\8aÉ\80\7f»uq®jf¡d_\99`W\8e`V\8a]T\7fVPtMIbFCTBAIAAC<<:AB=FEACD?A?@DBEOMRWVdch\86qu\9a\7f\87}\9f\92}\9c |\98¥p\8a¤`u¬Yi¶VaºQU¸HF°@4¬;)¬<&­='¨8$¨7%«8&®9(±9(²9(µ7(¸6(»3%Â4(Ê7-Ó:2Ù<3Þ=5ß<5ß<5á>9ß<7ß<7á>9åB=èC=çB<æA;å@:æB9ä@7Ü8/Ô1(Ø6+ëI>ÿ[Oñ@6î6,ê+#î)#ø-)ÿ/-þ,+ö((ú0.õ4/ï61ç6.Þ3)Ö2&Ô2%Ï6&Ë:'È;'Ê<(Í:(Ï9*Ð7)Ñ5)Ð4(Ó9/Ï5-Ô=6åPJåTQÛLHÍB?·1(¼;(»=&½<'¾;'¾9(À8(Â:,Ä:/È>4ËB8ÕOFÜWPÒRIÃD=¿C;ÌHCÛLHßJFåMLëSRíTWëPVéNVìOZ÷VføUhùSiúRkþQmÿSqÿStÿRuòMmøUtÿ\zÿ_{ÿ\vÿUoûRiûReüUf÷RbÿZhÿZhóN^øScþYißS^¶`_\97^W¶\81}Ù©¥îÈÅýáÞùééýøõúüùùÿÿøÿÿ÷ÿýúþýÿÿýÿûûÿ÷õýøôþùõþùõþöóÿ÷öÿõõöêêêÜÛäÖÓÝÐÊßÕÌïåÛüõåÿùçÿýéÿÿïúÿøèñîÛáßEA6EA5C?4A=2?;0=9.<8-;7,84+84+84+84+:5/=82?:4A=4F?5JB7ND8RF6TG6WG7WJ:XKBWKKXP]b^ysu\9c\85\8aÂ\90\99Ü\98¤ð\9f¬úª³þ¬¶þ¯·ÿ±¹ÿ³ºÿ´»ÿµ¹ÿµ¹ÿ¯²ù¬¬ô££ë\99\97à\8e\8dÓ\83\80Çxu¼sm³k`¤i]\9bcZ\91]W\85VRwNKhEDV@@L85<A<@KABL@BQ>BZEJpW]\82cs\97s\97¤{§®\7f«²{£¸v\9cÀp\93Âc\83ÀTnÂG\ÐK\ÑHPÄ<<º5.¸9*µ<'°<%°;'°;)²:)´;*·<,»<-À<-Ä<.Ä6*Ë8.Ó<1Ù?5ßA8á>7à<3ß:4Ü71Ù4.Ø3-Þ93æA;ìE?éB<ä=5ã<4Û4,Ø4+Û7-Ô2'Ì, Ö6*éG:õK>ò@6ï4-ð-)ö,*ú,,ü,,ø*,ð*)ì/+è2.ã5.Ü4+Ø1(Õ1'Ñ3'Í7(Ë:)Í:(Ð:)Ò;*Ó:*Ô8+Ô8,Ñ4+Ö<4Õ:5Õ<7åONíYWÙEEÂ3/À;,¿<(À;*¿:)Á9)À8(À8*À8,Æ=3ÇA6ÏJAØUKÒRGÆG>ÀD:ÇG>ÖKDØICÝLIäSPåSTâPSâMSåNWòXdöZhý[pþZrýUnûQlýPlÿQpýGmÿPvÿZ}ÿ[{ÿVrýTkþWkÿ\mûYhøZhûamö`kí]gïfnìfmÉ\_ ]W{OF\98mfÁ\98\94ݺ¶ðÔÑôàßÿõôùù÷ùÿýùÿÿ÷ÿýúþýÿÿÿÿýÿÿøùüùôüùòüùôýøôÿùöÿøöùîìïäâåÚÖÛÐÊÜÒÈîäØýöäÿûèÿýçÿÿíúýôêðìÞãßIE9HD8FB6D@4B>3@<1?;0>:/:6-95,95,95,:5/<71>93@;5C?6HA7LD7OF5RE4UF3UH7VJ>XMKXNW^Zqpp\96\80\86º\8c\96Ô\95¡é\9d©õ§±ù©±ù¬´ý°·ÿ±·ÿ²¹ÿ´¸ÿ´¸ÿ¯±ü«­ø¥§ò\9f\9eê\97\96â\8c\8b×\82\81Í}yÅum¶pgªf`\9e_Z\90YX\84QQuGGcA>Q=5DH8BT=C`@EnCJ\80OU\96]dªgx½k\8fÉn\9aËo\98Éi\8fÈ`\83ÉWxÆIgÄ;UÆ2HÙAPàEMÑ;<Æ71Ä?0½@,±:$­6"­5$®5$³5&¶7(¼8+Ã;-Ç;.Ó@6×@7Ú@6Ü?6Þ=5Þ93Ý6.Û4,Ó.(Ò-'Ó.(Ø3-á:4ã<4á81Ü5-Ü5-Ð,"Í)\1fÙ7,âB6Ü?0Ð4%Ë.\1féF7óI<ýH?ü<7ô-*ñ#%õ')û/2ñ-.ë/.ä2.Þ3,Ú1*×0*Ö/)Ó0'Ó7*Ò9+Ö:+Ø<-Ú>/Û?0Ü@3Ü@3Ò6*æLBåJEÎ50ßGFóZ\ßIKÕA?È</Ä;+Ã:*Ã:*Â:*Â:*Á9+¾9*Â<0Â>2ÈF9ÏOBÎPDÆH<¿C7ÁC7ÎH?ÑF?ÕJEÛPKÝROÙMLÚKMÝLQëX`ó[güaqÿauûXmõOgõMgÿNkÿOuÿRyÿUwÿTqüTmý[pÿcuÿjxÿguúboõamídlãflÙhjÎghµfa\8d^TeG<\7f^U©\88\81Í«©æÈÆïÚÙÿóóùøöùýüøÿÿ÷ÿÿûÿÿÿþÿÿüÿÿùúþûöûûóûúõþûöÿýùÿûøþôòøíéêßÙÞÔËÝÓÉíæÖÿøåÿþèÿÿæÿÿëøúïêïèãæßNH:MG9LF8JD6HB6F@4D=3C<2?80>7/=6.=6.=60>71@93?:4C>8EA8KC8NE6QD3RE2VG4VH;ZMGVMR[Whlk\8b~\82±\8a\93Î\92\9fã\9a¦î¦®÷©¯ù«±ý¯³ý°³ÿ°´þ°³ÿ¯³ý«®û¨«ø¤§ô ¢ï\9a\9cé\93\95â\8a\8cÙ\86\85Ñ\83\7fÉ{u»mk¬de\9e_a\92Y[\84RQsNHbWFY_CQmBL\81EO\98LV¬U]¼[dÊZhÙRpâRußTuÙPlÒJbÍBWÇ8JÅ.?Ô8EãCKåFJØ>>Í>6ÌF:ÃH6¶?+·>-¸=-º<-½>/Ã?0ÊB4ÐD7ÕE:ÙE9ÚB7Û>5Ù;2Ù6-Ù5,Ú3+Ù2*Õ0*×4-Û7.Ý90ß80Þ7/Ý6.Ü5,Ö/&Ù5+×7+Ï2#Î2#Ò9)Õ>-Ô;)Ø<-çC7øJAýD?ù64õ*-ö*-ö.1÷67í55â30Ú1,×0*×/,Ù0-Ù0+ã81ä91â:1â;2à<0ß=0Ü?0Ú>1Ñ7+ïWLøaZÓ;6Ñ;:æPQÜFHæPQÏ<4Ê:/Æ8,Å9,Ä:-Ä<.Ã;-À;,¾:-¾<.ÃA3ÇH9ÇI;ÂD6¾@2¼>0ÉF<ÊE<ÎIBÕPI×RMÕNKÓKK×LOéZ`ð^hüfrÿhxü]qóPeóMeýNkÿVzÿTxÿRrøTmö]qûhxûjw÷erüetó_mì`kêkrßruÃjfªd\\9ela}fVXH9kXJ\94|r½ \9cÞÂÁîÖÖþîïûõõûûûûÿÿùÿÿýþÿÿþÿÿûÿÿúýÿþùûþõûüöÿþùÿÿúÿþúÿûõÿ÷òñèáäÜÑáÙÌðé×ÿúäÿÿæÿþåÿÿê÷ùëíðçèéáQK=PJ<OI;MG9KE9IC7G@6G@6B;3A:2@91?80?82?82A:4@;5B?8EB9KE9MF6PE3RE2UF3UH7YLCUKLZScii\85|\81«\89\93È\93\9eÞ\9a¤ë¦¬ø©¬û¬­ý­°ÿ®±ÿ®±þ­°ý­°ý©¬ù§ª÷¤¨ò¢¦ð\9f£í\9b\9fé\95\99ã\91\95Þ\92\92Ú\89\89Ï|\80Àsx²ou©mp\9dig\8ej_}y_x\82Wj\8eP_¢N[»S^ÍT]ÖPWÛHRå@Qè?RäCRÜDPÖCKÏ@DÊ9<É46äJLçIJáAAÕ74Î95ÎA8ÈD8¾>1ÃE6ÃE6ÅF7ÉE8ÎF8ÑG:×G<ÚG=Ö>3Õ;1Ö8/Õ4,Ö3*Ø4+Û4,Ú6-Û81Þ;4à=4à<3Ý90Ü5-Ü5,Û7-Ò.$Ý;0Ú=.Í1"Æ-\1dÎ7&Ò=)Í:&Î8'Ô8)â:/ó=9ÿ@@ÿ<>þ37ó,/ê,.á+*Ø*)Ô+(×/,Þ44ä88é99ï75ð74î73è71ã7-Ü6*×5(Ñ5&Í5(çPEÿmcÛHAÈ42×CCÓ>BêVVÙA<Ò>4Ë8.Æ6+Æ:-Æ</Ã>/Á=.»9+»<-¾?0ÀA2¿A2½@.¼=.»<-ÄD7ÄD9ÈH?ÐPGÓRLÐOIÒNLÕONç_cîagûitÿnzÿduõVjõQiÿUoÿWvÿVtúXpñ^pônyöw\80íksÞXañ`mñ`mìboïs}ì\88\8aÌ\81|ªth\99yjskXON:_VG\83qg¯\96\92ÜÀ¿ïÕØüéëþôõýûüýþÿúþÿþýÿÿýÿÿûÿÿùþÿÿûùÿõúýöÿÿúÿÿúÿÿøÿý÷ÿþöùðçíåÚéáÔôïÜÿûåÿþåÿÿãÿÿèùúêòôçîðåSM=RL<QK=OI;MG9KE7JD8IC7E>4D=3B;3A:2@93A:4A96@;7A@;CC;IE9MG7OG2RF0UF1UH5WK?RHFXR^jg\82}\81§\89\93Ä\92\9eÚ\98¢ç¤§ö¦§ú«©ü«¬þ¬­ÿ­®þ¬®û¬®û¨¬ö¦ªô¤¨ñ£§ð¡¨î §í\9d¤è\9b¢æ\97\9eâ\92\9aÛ\8b\93Ò\86\8fÊ\83\8dÂ\84\88·\83\81¨\88y\9a\8fm\88\9acz©Xi»Q_ÏMYàIRèAIê=Aé=;ã>8ÝC9ÖH:ÎI8ÅF3ÂC0Å@1äTIàG?Ú;7Ø64Ø88Ø:;Ñ98È74À:/¾<.¿;.À:.Â8+Ã7*Æ4'Æ2&Î4*Ð3*Ñ3(Ô3)Ö3*Ù5,Ü5-Ü8/Þ=3Ý<2Û:0Û8/Û7-Ú6,Ø4*×3)Õ3&Ó3%Ð4%Ï6&Ò=)Ñ>*Ê9$À2\1cÈ:&Ê4%Õ1'ç51ú<<ÿ=@ÿ7=÷37ê-1á-.Ù--×/.Ü43ã9:é;=ð9=ö26ø03ô01í1/ä1*Þ2(Õ1%Ï3$É1$Ñ=1új_äTLÈ95Ð@?Ë:=äRSäJHÜC=Ñ:3É6.Æ8.Å;0Â<0¿=/º;*¼?-½@.¼?-º;*º;(½;+¾<,¼>0¼>2ÀD8ÈLBÌPHÊNFÌLIÐNLç`dìaføhrÿo{ÿhx÷Zk÷UjþZrÿYsû]tîaræjtë}\80ñ\87\89èwyÚ_dñgtþm|óeuëlwö\91\95ì¢\9fÄ\94\8a¢\8d|hjUHQ<WUFth\¤\8c\88Û¿¾òÕÙùãæÿóöÿúüþþÿüýÿþûÿÿüÿÿúÿÿøýÿÿûùÿõ÷ýóýÿ÷ÿÿøÿýöÿý÷ÿÿöÿùïõïáòìÜúõáÿýçÿýäÿþâÿÿçýþìùúì÷÷ëVO?TN>SK>PJ<OG:LF8LD7JD8H@5F@4E<3B;1B92A:2C:3A<6C@9DD:JF:MG7OG2QF0TH2UH5UI=QGEWQ]jh\80~\82¨\8c\94Å\93\9dØ\99¢ç\9f ò£ ÷¦£ú§§ý¨ªÿ©«þ©¬ý§­û¥«õ£ªò£§î¢§ë¤©í¦©î¥¨í£§î\98 è\94¡å\94\9fß\94\9f×\95\9bÍ\9a\95¾ \8c¯ª\83 ¥e\7f´]pÂQcÐIWÜBNå>Fë<Aì<<ê?8ãA4ÜE4ÔI4ÊI3ÂF.¿B,Â?-âSEÞD<Ý97æ>>êDFå@DÙ8=Î65ÍB;ÈD8ÉC8ÇA5Æ>2Ã9,Â6)Â2'Æ2(Ë3(Î4*Ó5,Ø5.Ù4.Û4.Û4,äB7Ý=1Ù7,Ú6,ß9-ß9-Û5)Õ1%Ø8(Í2 Ê1!Ï9(Î8'Ç4"Ê7%ÔC0È7&Î8*×6,Þ5.æ3/î53ö:9û?>ÿLKúHFòBBì>=ê<=ç7:å26æ,1ô+1ø)/ô,.ï/.è1+à4*Ù5)Ó7(Æ0!À.\1fôdYë]SÏ@:ÔDCË;;ßMMêRQàHEÓ;6É6/Æ8.Æ9/Ã;-¾:+½;+Á@-ÀA.»<)·8%¸9&½<)¾?.µ7)³7+¸>1ÁG:ÅK@ÅIAÆJBËJEåa_æ^`ñdjþnwþkuó]iðXeø]mú^sõbtèdoãlrì~\7fù\8d\8bö\86\85éqsøryÿy\86õaqàXfö\88\91ÿ´´Ð®¢ \9b\87]jPDR9QT?jbU\9c\89\82ÚÀ¿òØÙöàãÿô÷ÿúýÿþÿýüÿþüÿÿýÿÿûÿþùýûÿúôÿòòþòùÿôüÿöûýòÿýôÿÿôÿÿóûõç÷ñáþùåÿýçþüãþýáÿÿêÿÿñüþóüüòXO@WP@WN?UN>TK<RK;RI:PH;MC7KC6KA5H@3H>2G?2H>2F@4FB9GE9JG8NI6RJ5UJ4UJ4VK9XNDUMKZTbkh\83{~§\89\8fÃ\91\99×\98\9f磤ö¥¢ù¢¢ü¡¢ü¡¥ÿ¢¨ÿ£«ÿ¤­ü¡ªõ¡©ñ¡¨ì¥¨íª©ï­©ó±©ö¬©ø ©ø\97§ò\92¡â\96\9fÖ¦£Î¶\9e¾¹\85\9c¸gz¿L]ÑERß>Mç;Gç<Dæ=Bà@@à@@â>?ß<=ÝEBÉ:4ÊD9ÊF:º1)ÛJEçIHéCEê=Aè;?æ<?á=>Ú<=Ô<;ÏB;Ç>6ÊD;ÑMAÍK>¿=0¸6)¼8+¿7+Ã6,È5-Ë2*Ñ/*Ô/+Û2/Þ5.çA5ß9+Ù1$Ý3&å9+ç;-ß8&Õ2\1fÏ2\1fÌ4\1fÊ5!Ç4"Ç4"Ê4%Í5'Ï5)Ê0&Í3)Ñ5)Ò6*Ò4(Õ3&×3'Ü4)à2)æ3.ë52ë33é/2ç-2è-4í.5ö-3ö+/ï+,ì/-ê5.ã9,Ù7(Ð4%Ã-\1cÄ3"çXHéYNË;3ßNIÅ41ÚHHáOPÜJJÔC@Ì;6È80Æ8,Ç9+È<+Å<*Â;(¾9&¼;(»<)º=)º=+·<,´8,µ;0¹=1»?3»?3¾@4À@5ÄA7ïjaõpiêc_ômjûqqìadôgmÿpyÿlzûhxðdoébiëdjîlnîqoîqoûy{ÿ}\85ùZlücwßbpû¬¯¶ª\9a}\91u]rQJY:LR8snZ¥\95\88Ë·°íÕÓÿîðÿö÷ÿ÷ûýøüüüþÿÿÿÿþÿÿþÿûÿþðÿôåþéæûêïÿîøÿöüÿôþÿóÿþñÿýñÿûîÿúêÿùæÿùãÿùáÿùáüúåÿÿõþÿûÿÿûYPAXO@XO@VM>UL=TK<SJ;RI:NE6MD5LC4KB3JA2JA2JA2IA4GC8HD9LF8OH6RJ5SK4VK7TK:XNDULMYUckh\83{}¦\86\8cÀ\8d\95Ó\96\9aá\9f\9eì \9eò\9e\9eô\9e\9fù\9d¢ý\9f¦ÿ ªÿ¡¬û ¬ô «í\9f§è¢¥è¥¤ê©£í« î¤\9fï §÷\9a¦ð\9c¡á£\9cб\98À¿\8dªÂq\84ÄTbÑCOâ<Fì8Aï7?ê:=å<?Ü@AÛACà<CÚ9?ÚADË;;ÌB?Ê@=Á31åOPæCFè?Dê;Bç8?â8;Û89Õ:8Ï;7ÔE?Æ=5Å<4ÌG>ÌLAÁC5¸:,·9+¹7*¿7+Æ6-Ë4-Ñ2.Ø3/á53ä84ä>2á;-Þ6)ß5&á5'á5'Ú5"Ó4\1fÑ9$Ë9"Ç9%Ç:&É<+Ë<,Ì8,Î4*Ó4.Ö5-Ó7+Ï7)Ë5&Ç4"Ë4!Ï4"Ø2$Þ2&ã0+æ.,æ,-æ,/æ-2è.3ì+.í,-ì0.è2.à4*Û5'Õ8'Ò9'Õ?.»*\19ÖD5Ð>1ÙF>ëVPÚB?ØBAçUVâRRÜKHÔC>Í=5É9.È9+Ç8(È;)Ä;(¿:'½<)½>+º?-¹@/¶>.²:,´;0·=0¸>1º?0½?1ÁB3ÅC5ëi\òmdçb[ðkfõolèbañklütxÿq~ÿo|öirí]fêY`ñbf÷qpþzxûvwÿx~ùRdþ[pä]nö¦©©¦\93j\8ckZtON_;RY:us\©\9d\8dÖĸöáÜÿõñÿúúÿúûÿûüüüüüþýûÿþúþÿõÿúíÿóáÿéáýæéÿëóÿñøÿòýÿòÿÿñÿýïÿýíÿúéÿöåûóàúòÝüôßü÷äûûóüüúÿÿý\PB[OA[OAYM?XL>WK=VJ<VJ<SG9RF8QE7OC5OC5OC5OC5MC7JC9JF;MG9PI7SK6VK5VK7TK:WMCVNLZWbki\81y{¡\85\89¹\8b\91Ë\91\96Ö\98\98Þ\99\99ã\98\99é\9a\9dî\9b ô\9d£÷\9f§ø ©ô ªï\9d¨è\9c¤ã\9c¢à\9e\9fà\9e\9dá\9d\99ã\9b\99â\96\9bß\9a\9aÚ¤\95б\8cÀ¿\82¬Çr\93ÉYqÇBS×ALß>Dã=?å==å<?ã=?á>Aá>Cà<C×8=Õ?AÎ@?ÊC?Ã<8Ä96éWWàBCä>Bè;?ã9<Ü68Ö66Ñ96Ì;6ÕHAÄ;1¾5+ÅA5ÍK>ÆH:»=/·8)º6)¿7)Ç7,Ï6.×50Þ71æ95é=9×3*×5*Ú6*Ü6*Ý5*Ý7)Ú:*×>,Å4!¿4\1f¹4!¹6"¼8)½8)½3(À-%ã@;å>8Þ=3Õ<.Î8)È7$È7"Ì7#Ò7%Õ3$×/&Ù.'Û.*Ý/.Û//Ü./Û,)ß0+à5-Ü5,Õ3&Ð4%Ð9&Ñ>*ÔA/Â1 çSEÒ;0ÚA;ÞC?èJIðTUíUTçSQãOMÝJCÖC;Ï<2Ê8+Å6&Ä7&À7%¼7&¹:'¹<*·>-µ=,²=,°:,±;/´<.µ=/·=.¹?0¾C4ÃE7Ü\Qêg]äaYðlgöpoçabìfgójqàR^ï^kõhqòemñ`gõfjùqqþxwútuÿnuóJ]øRhä[mñ\9c¡£\9c\8aa\80`UoHOd=W`Aww]­¥\92áÑÂÿîæÿøñÿüøÿþúþÿúûÿüûÿýûÿýùÿûóÿöèÿîÜþãÚøÞáùáéüæïüèöýëýþìýúéÿúêÿøçúñàôèØòçÕöëÙøñáþúñýüøÿÿû\PB\PB[OAZN@YM?YM?XL>XL>UI;TH:SG9RF8RF8RF8RF8PF:LE;KG<OI;RK9TL7WL6WL8WK;VLBUMK\V`jh~yy\9b\82\85²\8a\8dÂ\8f\94Î\93\95Ò\95\94Ö\95\95Û\96\98ã\98\9bè\98\9eì\9a¢í\9b£ë\9c¥è\98¢ß\96\9fÚ\95\9bÕ\94\98Õ\93\97Ö\92\93Ö\91\90Ò\85\84½\91\83¶¥}±·s¢Èf\8fÓW{ÕGaÔ<KÞAJàBCÞCAàB?áAAä?Cç>Eç=Fã?FÖ:>Ñ?@ÐDCÆA<º61Å>:êZYÝABã@Cæ=@ã:=Û89Ó97Ð<8ÎA8ÏE;Â:.»2(À</ÇE7ÄE6½>/¸9(½8)Â9)Ë8.Ò:/Ù80à91è;7ë>8Ø1+Ù2*Ü3,Ý5,à5-ß7.Û9.Ö=/É7(Æ:)Á<+¾<,¿;.Á;0Å<6Î95ëC@í@<ä@7Ú<1Ï9*É8%È:&É;%Ï<(Ð7'Ï1%Ñ1%Ô1(Ö3,Ô1,Ñ/*Ó2*Ó5,Ó7+Ð7)Í5'Ê7%Ë:'Ì>*Ì;(Ï<,ô^PàF<Ò3/Ò.,æ@@ûWXÿusÿroÿjgö^YçPGÕA5Ç5(½.\1eÄ8'À8(»8&¸;)·<,µ=-²=,°<-¯;.­<.°</°<-±;-¶>.¼B3ÀF7ËMAß`Wâa[ôpløstæ_cä]aæ]dÖHTçYeógrôgoöelükpþsvþvvûpsûenñDXôKbåXkë\92\96 \95\83_zYQlCSh?\gEy|_°ª\94çÜÊÿõèÿùðÿûñþþôýÿ÷ûÿúùÿúöÿøòüóêûëÚøÞÎóÒÊëÌÏìÎ×îÒàðÖéóÛò÷áöõáûöãüõãõìÛíáÑéÝÍíáÑñèÙüõíü÷ñþùó\PB\PB[OA[OAZN@YM?YM?YM?WK=VJ<UI;UI;TH:UI;UI;SI=OG<OI=QI<SL:UM8XM7YL9XL<UKAUKI\U]hexut\93|~¥\85\87·\8c\8fÂ\8e\90Ã\8f\90È\90\92Ï\90\94Ô\92\95Ü\93\97à\94\98ß\95\9aÞ\95\9dÜ\92\9bÖ\8c\95Î\87\90Ç\85\8bÅ\81\87Ã}\83Á~\7f¸}t\9f\8ep\94¨g\8fÁ\\84ÖNvâAcè:Uê9KæAGàECÜGAÛGCßEEæAGî<Jí=JæBI×>@Ð@?ÐIEÀ?9³2,ÈC<àUPÜDCáACã?@á>?Ú?=Ô@<ÑD;ÏF<Ç=2À8*½5)½9*¿=-¿=-½;+½<)Â:*Ç;*Ï;/Õ;/Û8/à8/ç83é:5æ95ä52ä20æ21ç32æ40Ý2+Ô0'Ë1'Ë7-È:0Ä7.Á4-Ã40Ì:;Ý?@ë8;í76ä71Ø5,Ì4&Æ5"Ä7#Å:%Ë=)Ë8&Ì4&Î5'Ô8,Ô:0Ó9/Ð8-Ð>1Ê;-Å8'Ä7%Æ9'Ç<)Ç<)Ç:(Í>-Í:*Ø>2áC:Ô/-ä::ß13ß56×53Ö;6ÞC>åKCêQIêSHèTHäUGË?0Ä?.¾<,¸=-·>-´?.°?/®>0¬<.¬<.¬<.¬=,­<,±=.·A3ºD6ÆLAÝcXàc]ïolôrrå`cå`eç`g÷kvûoz÷kví`hð_fýlqÿy|ÿy|úmsø^jóAWôC]èUhæ\87\8d£\93\83g\7f]YtI^uIhwP\81\88f³²\96èâÌÿúéÿýíÿþïýÿòûÿôøÿôôÿñíûêäòáØî×Åèǻ伺޺¿Þ¼ÇàÀÍâÃØæÌãëÓìîØóðÝ÷òßóêÙìàÒèÚÍêÜÏïáÖòèßñèáòéâ[OA[OA[OAZN@ZN@YM?YM?YM?XL>XL>WK=VJ<VJ<WK=WK=XL>QI>QI>SK>UL;XM9XM7YL9YL;WK?ULGYSWe^nnj\83ut\96~}¥\84\85±\86\89´\87\89¹\8a\8bÁ\8b\8dÈ\8d\8eÏ\8e\8eÔ\8f\8fÕ\8f\90Ó\90\94Ó\8b\90Ê\83\8aÁ{\82¸u|²ov­io«lj\9c\80l\88\93cy®YvËPoãBdð7Vö4L÷8Hï@EåFBÝJCÛJEáGGèCJò=Nð>LäCI×CCÌA>ÎIDº;4°4,ÉI@ÕLFØBAÚ?=Û;;Ú<;Ø@=ÔE?ÍG<ËG:À8*Á8(À8*¾9(¼9'»8&½:(À;(Ä;)Ê=,Ò<.×;.Ü8.á6.ä6/è50é32è./é,0î02õ47õ77î45æ21Ú.*×4/Õ62Ñ32Ï/1Ò/4Û6=ê:Dí06î02æ3/Ü3,Ñ5)Ê7'È9(É<(Æ8$É6$Î6(Ó:,Ú>2ÝA5ÝA5ØA6ÓG8ÉA1Â;(À9&Ã<)Æ=*Å<*Å8&Ì:+Í7)Í0'æC<Û2/ï?Aã/2Ú*,Õ1/Ò5.Õ81Ö90Ò8.Ì5*Æ2&À1#ÎE5ÆA2¼=.µ:*±9)¯9+«:,ª:,«;/«=0¬>/¬<.«<+­<,²>/µA2ÉSGàg^ßd_èkiînoæchðjqõoxúq{üs}ömuîbködnÿrzÿx~ÿquúipøWfùAYô@[êQfá~\83¬\97\86y\8fkm\88]o\89Zy\8a`\8d\97r¶·\98ßÞÂùôÞüúåÿÿïûÿïõÿïïÿëçúäÜïÙÐãÍÅÞÁ°Ö­¨Ó¦ªÐ§°Ó«¶Ô®¼Ö±ÇÚºÒßÁàæÌèêÔòíÚóêÙîâÔìÛÑêÙÏìÛÓéÚÓæÙÑä×Ï[N>[N>[N>[N>ZM=ZM=ZM=ZM=YL<YL<XK;XK;XK;YL<YL<YM?SI?TJ>UL=XL<YN:ZM:ZM:ZM<YM?VKEXOR_Wbd_sjf\81so\90yy\9d|~¤~\80©\81\82²\83\84¼\86\86Æ\88\87Ë\89\88Ì\89\88Ê\88\88È\83\83¿|}µvw­pq§kl¤fg l`\8e\82`q\95V^³N^ÒJ^ì@X÷6Kþ3Fþ9Có?BéD@áHBÞICâFIéBJò=Nï>NÝAEÔFDÈA=ÉHB´:/±7,ÎOFÉB<Î=8Ð64Ï10Ð51Ó>8ÑD;ÈF9ÃD5À8(Ã:(Â:*¿:'½8%¾9&¿:'Á:&Ä9&Ë:)Ó:,Ù9+Ý7+á5+ä3+ê3-ë*+ñ*-ø-3ü/4ÿ17ÿ37ÿ38ý58ù8;õ8<ò9>ò9Aô9D÷7Fû6Hþ5Eó*4ô-2í12ã4/Ù6-Ð8*Î;+Î=,Ë5&Ñ8*Ù;/ß=2â>4ä=4å>5ßA6ÙJ<ÏG7ÉA1Ä<,Â9)Â9'Æ8*È9)É2'Ó9/á@8ëD>Þ0/à..ë46è66Ø3-Õ7.×90×:1Õ;1Ò;0Í:0É;/ÖL?ÌF:¿@1´9*°6)¬6(«7*©8*¬;-­=/®>0­=/«<+«<+­<.±=0ÀKAÚdZÞc^èkiðosêinõrzüv\7fîfp÷oyùryöjsþlvÿw\7fÿu|ùhoùcn÷RbþB[÷<YêKaÝt{µ\9a\89\8d\9ez}\98k{\97f\82\95h\91\9du¬²\8eËÌ­ààÄéìÑîöÞåóÙÙíÑÏæÉÅÞÀ¼Õ·´Ë®ªÈ¤\9aÁ\94\96Â\8f\99Ã\93¡È\99§Ë\9d¬Ë¡µÎ§ÁÒ°ÎÙ»ÙÝÄåãÎìåÕïáÖëÚÒçÒÍãÐÊàÏÈÚÌÃÕǾ[N>ZM=ZM=ZM=ZM=ZM=YL<YL<ZM=YL<YL<XK;XK;YL<ZM=ZL?VJ>VJ>XL>YN<ZM<ZM:ZM:ZM<[OAWMDWML\RZ^Xfb]qjf\7fsp\8dwv\96xx\9c|{§\81\84\7f¿\85\82Å\88\82È\89\84Ç\82}¿\7fy·zu­xq§un¤sj¡pg za\8b\84QZ\99HE³EHÓHOîBNø:Fþ6Aþ9@õ==îA=æD?ãEBäCHèAKî=Më?MØ?BÑGDÅA<ÃG?²9.³:/ÑUKÃ>5É83Ç/,Å*&È/*Í:3ÍC9ÃC6¼>/À;*Ä;)Ã<)Á:'Â;(Ã<)Â;'Ã8%Ä5$Ê7%Ô8)Ù7*Ý5*á3*å3)ê2*õ33ÿ58ÿ8<ÿ4:ÿ-2ÿ(-ÿ(-þ+1ü-3ö)0ò&1÷)6ÿ,?ÿ*Aü 9ó\1a/ö"0ó(.í,1æ0/Ú1,Ô3+Ñ5)Ð6*Ô6+Ý90æ=6ë>7ë:4è71è50â92ßH=×K<ÓE7Ë=/Ä6(Â3%È6)Ï8-Î4*Ô6-æC<à93à21Ò  ì89å63Õ1(Ò4)Ò4)Ï5)Î6+Ê6*È5+Å7+ãYNØRFÊH;¾@2·;/µ;.µ<1µ<1¯9-±;/±=0±=.¯;,­9*­9,®:-±<2ÐYQÜb]ìppôvyîmrõq|ör}ÿz\83ÿ\7f\89ÿy\80ôhq÷epÿq|ÿu\7fÿktø^jöOaÿA^÷8WéG^Ûntº\9d\8b\99©\84\82\9en}\99f\80\96g\8d\9cq¡©\82´º\96ÈÍ­ÕܽÌÙ»ÁÔ´²Ì©§Â\9f\9e¼\98\9a\90\96²\8c\90±\86\89³\81\86µ~\8d¹\84\95À\8b\9cÂ\8f\9fÄ\91¨Å\99²È¡¾ÎªÉÒµÚÙÄæßÍêÞÒéÖÏáÌÉÛÆÃÔÁ»Î½µÈ·°ZM=ZM=ZM=ZM=ZM=ZM=ZM=ZM=XK;XK;XK;YL<YL<ZM=ZM=ZM=ZL?ZL?ZM=[N=]M=^O<\O<\O>YM=YLCWLHXNOZPX]Ub`Yia\rjf\81ok\8esp\9bvq§{u³\83\8a\83É\8a\83Ç\88\7fÀ\8a\88\83\86\8d\87\86\\84\90HL¤B9¶A:ÍC@Þ@?è:;ô<>ÿDE÷><ó=<ì>=ê@AëBIêCMëANãALÐ>>Å@9¾?6·>3°</²<0ÀD8ÒMDÇ61Ô;6Í2.Ì3.ÖC;È>3µ6'»>,»6%Á:'Ã<)Â;(À9%Â9&Æ;(Ç:(Ë:'Ð9(Ö6(Ø2$Ú."à/%ì7.õ=5õ82÷40÷0-ø**û&(û%'û%'û%'û&*÷!)ø".ÿ'7ÿ(>ÿ!;ÿ\18\171ÿ'8ï#,æ#+ã+-Ý--Ô+(Ò-)Ü41â62è64î66ò65ò12ï./î,,å/,Ü92Ñ:1Ò91ìSK¼#\eÄ+#ßF>È.&Í.(Þ<7èE@â:7Ø/*Ú.*â51å<7ß>4Õ<.Ï5)Ë3&Ì5*Í;.Ë;0Å8.ìbXàZOÈC:¹6,º:/¸8-±3'´6*°0%°2&®2&¯4%°6'²:*´<.³=1°:0ºC;Ö\Wìppñsvöx|ûy\83õq|ÿ|\84ýw\80út}üs{ÿr~ÿr}ÿmxÿgsü`nôI\ÿ>\ÿ>[äAVÔek´\95\80\92¡z\83\9dm}\99f~\94c\87\97j\94\9fw\9e¦\81 ¨\83\9c¨\84\92£\7f\8a£|\80\9fvz\9aqy\9ao|\9dr\81 v\83¤u\82­w\83³y\8b¸\7f\91¼\84\93¾\86\97¾\87\9c¾\8c¢½\90§¼\93¯½\9a¾Â§Ï̹ßÓÇãÒÊÜÇÄÔ¿¼Ìº¶Á²«¹ª¥ZM=ZM=ZM=ZM=ZM=ZM=ZM=ZM=XK;XK;XK;YL<YL<ZM=ZM=ZM=ZL?ZM=\L=]M=]N;^O<\O<\O>]P@[OC[NFYNJZPQ\SX_U^_Wfd\tib\83ng\91qj\9dxp¬\80\87\80Ä\8a\81Ä\8f\81¿\90\8d\8c\97q¤¡u¨\9aj\9e\99W{\9d=Aª5+±5+Â<3Ó@8Ý>8è?:óA=õ=;õ;<ô;@ñ>Bî@IèAIâ@KÚAFÇ<9¼<3¶<1±;/«:,®:+½A5ÐJAÚG@ÜA=Ô63Ð51Õ@9ÍC8»9+²5#½8'Â;(Ä=*Ä=*Ä;(Æ;(Ç:(Ê9(Ï9(Ï6&Ô2#Ú2%ã5*ê8.ï80ð91ç1&ç/%ê.%ï,&ö+'û+)þ,+ÿ-.ü*-ú%+ú$.ÿ'7ÿ$;ÿ\1c7ÿ\14\13\1e0ö.9õ3<å*1Û(,Ü.0Þ02Û+.ñ:>ô7=÷4:ö26ö/4ø03ù25ô87Û2-Ú;5×82äE?äE?Î/+Ñ2.Á"\1eÔ51á?:èE@à=8Ø3-Ù2,Ý60Ý:1Ô:.Ï9*É5'Ç5(È9+Ê<0Ê<2Æ9/ícYáXNÉ@8º4+Â91Ã:0¿6,Â9/¿5+¾4*½4*»5)¸6)µ5(²7(°6)´;0»B9ÓYTèljïqtöx|þ|\84øv\80þ|\84üy\81ùv~þu\7fÿs\7fÿp}ÿkwüdqý_nöI]ÿ>\ÿ>\éCYÓeh®\8ew\89\98oz\95bu\92\x\8e]\7f\90c\8a\95k\8d\98p\8b\95p\85\94mp\87]l\89]h\89\g\8d^l\90`q\95ey\9biz\9fk\81¬t\84±v\8a·|\8d»}\90¼\7f\93¼\82\96½\86\9b»\89\9bµ\86¡³\8b­¶\97¾½¨ÏÆ·ØÇ¿ÖÁ¼Ï¼¸Æ·´»­ª²¤£\L<\L<\L<\L<\L<\L<\L<\L<ZJ:ZJ:ZJ:[K;[K;\L<\L<\L<\L=\L=]K=]M=]N;^O<^O<\O<_RA]QA\PD[NFZOK[PN]QS]RZ_SgcXvh]\85kb\91sk¤\7f\86\89\97\85¿\99\80·\9b\9ep\9e®u¢ºv¥µi\98°Rt¸<D¾5-º4+À<0ËC7ÓE9ÛC8ä?9ñ=<÷:>ù:Aö=Eï@GæAHÙ@EÏ@BÀ;6¸90±9+­9*©8(­9*»?3ÏF<ÙD>×96Ù74Ú;7ÜC=ÝOEÎH<µ3#¾9(Á:'Ä;)Æ=+É=,È<+É:)Ì9)Ï8'Ï2#Ó/#ß4*î=3ô?6ñ91é4+à4&Þ4%â2%å/$ë,$î+%ñ+(ò+(ó+-ð(+ò&/ø(5þ%8ü\1c\16\183ô%7ò0;ó5?ò9Að;Dð<Eé5>ä,6ð2<ó/;ö.9ö-7õ.3õ.1ó/1í42Û/+â=9Ú64ß;9ÿmjåCAÑ/-Î/,Ù:7ß@<àA;Û<6Õ7.Ö5-Õ4*Ò6*È6'Ã6%Â6'Ä8)Å;.Æ<1Æ<1Å;1ë`YáTMÉ<3¿0(Ë;3Ñ>6Î;3Ò=6Ø=8×<7Ô=6Ï<2É;1Â:.»7*¶6)¹;/¼@6ÏTMãgeíorøz~ÿ\81\88û|\83û|\83ûy\81ûx\80ÿw\81ÿs\81ÿn}ÿgvû`pü[mõG^ÿ<Zÿ>\ìFZÎ`a\9e~ev\85Zi\84Qh\85Om\83Rt\85X{\88]}\88^x\84\q\82X`zM_\7fPa\85Ue\8dYn\95`u\9cg} j~£m\83¬r\84²t\88¶x\8b¹y\8b¹y\8d¹z\91º~\94º\81\93±\7f\95¬\80\9b©\86©­\92ºµ¢Ç¹®Ë¸²È¶´¸¬¬ª¡¢ \97\9a[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\OG\OI]OO^P_bTmdY{i^\89pg\9c|t­\85\88\99\85¸¥\85´¯\80ª¸z¡Æx\9fÑu\9cÊd\8cÆMlÜFRßA@ÕA=ÏE;ÌH;ÍG;ÓE9ÞA:î@Aõ<Aú=Dø?GðAHâAFÒ@AÆ?<¿?6¶<1¯9+«:*ª9)®8*¼>0ÎD:Õ<7Õ31à;9åA?áD?èSLßUJ¿:+Á9)¾7$À7%Ä;)É=,Ê=,Ë9*Î8)Î5'Ò2$Ù3'å9/ñ>7õ>6ð5.ä/&à6)Þ6)à4*ã1'ç.)ê-)ì*(ì**ê),è',ë'1ò*7ö';÷!9ü\1f>û%Aû6Hä(6ç/;ÿP[ÿ`lÿP\ò<Ió9Gè)8í*8ñ-9ô0:ñ27ê01á+*×(%Ø0-Ú72Ô2/åC@ÿspõVSÝ>;åGDÛ=:Ú<9Õ:5Ò80Ñ7-Ð6*Í4&Æ3#¾5#¹6$»8&¿;,À</¿9-À:/Å<2åXQÜMGÊ70Ç0)×<7ÞA:Ú;5ß<5ç>9é=9æ?9á@8Ù?5Ï<2È:.Á9-»9,»=1ËNHàc_ìnoú|\7fÿ\84\88ý~\85øy\80øy\80üy\81ÿx\82ÿt\82ÿn}ýetù^n÷VhóE\ý8Vÿ<ZîH\ÇYZ\8alRcrG\tB\yCdzIl}Pt\81Vv\83Xs\82Yo\81Wm\87Zl\8e\o\95bu\9dh{¤l\81¨o\84ªq\85«p\85­q\85±t\88´u\89·v\89·v\89·v\8b¸w\8f¹z\91´|\8f«{\92¤|\9b¤\85­«\96¾²¤È·¯Ç¸µ´«®¡\9e¥\97\92\99[K;[K;[K;[K;[K;[K;[K;[K;ZJ:ZJ:ZJ:[K;[K;\L<\L<\L<]L<^K<^K<^M=^M;_N<^O<^O<^O<^N>^N>\O?^NA]OB^PE^OJbNYbQdcTqdZ}le\91xr¢\7f\83\94}§¬\86«Â\89©Î\82\9eÚw\94ál\89ÛXwÚD_óBTúDPïJPáIHÐE>ËE<ÐF<ÙD>èBBð@Cõ@GõBHíDGßCDÏA=Â?7¿@7µ=/®:+«:*ª9)®8*»;.Ì?6áFAâ=;îBBëAAÞ;6ãJBæXLÕK>È@2¿7'¼3#Á8(È<-É:*Ë7)Ð8+Î0%×3)à8/é;4í:5í60ë0+å,'ã0,ã1-ç10ì31ó25ö37÷48÷6;ì-5ê,6í.=ñ0Có-Fõ(Fý+Nÿ3Rô9Lå3?ð@Mÿ_lÿkyÿWfõCSõ>Pî3Dí3Aí3>é6<ã99Û83Î4*Ç/$Ë2*Ç.(Ð72òYTö\ZòXVÛA?âHFÜB@Ô<7Î70Í6-Ï8-Ï9+Ê7'Â5#¹8#³9$µ:(¸=-¹;,¶6)¼7.Æ=5ÛNGÙEAÎ50Ð1-á>9ç@:ã81ç51ë20î21ë52ç83á:2Ø:/Ð9.È:.¾6*º8+ÈIBÜ_Yënlû}\80ÿ\85\89ý\7f\83õv}öw~üy\81ÿx\82ÿs\83ÿk}ýdvù^pôSeôF]ý8Vþ=ZïL]ÀTRz_BWh<Yq?[vCfyKn~Qt\81Vx\85Zy\88_w\8cay\95ex\9ahz m|§q\81ªr\84«r\85«p\86©o\87­r\88°t\89³t\88µt\87µt\85·r\89¸t\8b¸w\90¶{\8e¬x\8e£x\99¤\82­­\95À¹§ÎÀµÒÄÁ¼¹À¨ª¶\9c\9c¨ZJ:ZJ:ZJ:ZJ:ZJ:ZJ:ZJ:ZJ:ZJ:ZJ:ZJ:[K;[K;\L<\L<]L<^K<^K<^K<_L=^M;_N<^O<^O<]N;]N;^O<_O?_O?`P@aQAbPFbNPcN]_Pe`Usga\85to\97{t\9d}q\97\8fv\96®\83\9fÌ\8b¡Û\82\96ær\85ëduéPdé;Rù3Lÿ<QûERéDKÕ?@Î@>ÑC?ÖEBãEFèBDîAEíCFçDEÚEAËB:¿?4»?3±;-©8(¨9(ª9)°8*¼:-Ê;3èIEé??ë=>å78Ú2/ÞA:îZPôh[ÚPCÉA3¾5%Â6'Ç9+È9+Ë7+Ò8,Ñ0&Ú6-æ;4é;4ê40è/,ê-+ë--ó49õ3;ø3=ü3=ÿ1>þ0=ý1=ù1>õ0Aò1Bô4Kõ5Nõ0Nö-Oÿ1Xÿ>_æ3HùO\ÿanÿ_nÿWfûP`ôDXé8JóAQê:GÝ2:Ò/2Ê2-Â8-½;+¼:*Ä:/À2(ÙJBúkcÝLGáPKÏ;9Ï;9àLJÔ@<Ê70Ê7-Î</Í<+Ë:)Ä;(´;&­:%¯<)³>-±9)¯3'º:/ÊD;ÖGAØC=Ô72×2.ç;7ì:6è2.í2-ò,-ô,,ò./ï31è71â:1Ú<1Ò>2Â6)º4)ÅB:×XRçjhú|}ÿ\86\89þ\80\84õv}÷x\7fýz\82ÿx\82ÿq\81ÿi{ûbtø]oòQc÷I`ÿ:Xý?[ðO_ºQNqX:Sf8]uEa|In\81Sv\86Y{\88]~\8b`\81\90g\82\97l\80\9cl}\9fm|¤o}¨p\80©o\82ªn\83©l\85©l\88«q\88®q\88°r\86³r\84³o\83µp\85·r\89¸t\8bµv\89¬t\8e¥w\9a¨\84°´\99ÈïØ̾ÛÒÍÂÂÌ«±Á\9b¡±ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8[L9[L9\M:\M:]L:^K<`J<^K<_L=^M;_N<^O<^O<^O:_P;`O;aP>aP>aP>aP<bOAeMMdMW`O_aUmgb\80uq\92|v\98\80s\91\8fu\8e­\80\94Î\86\94ß~\87îqyùclúP[ú;Mÿ*Fÿ2Qÿ<Sñ<Mà<E×@EÕCDÔBCÜCEàBCäADâBDÞDBÔC>É@8¾>3¸>1¯9+¨7'©:)­<*´<,Á=1Ï?7ß=:å99ã03â/2à42Û94æMEülaòh[ÙQCÆ</Æ:-È:.É7*Í6+Õ8/Õ4,Þ7/æ93è62é1/è/,î1/õ15ÿ2Cÿ0Eÿ-Fÿ*Bÿ%@ÿ#=ü :ö :÷'Aõ+Eõ.Mõ/Pó+Pô)Tÿ2`ÿAhóCXÿ`mÿhuøVeíKZñL\ëBUÚ2Cë@PÝ7CÉ-1º((±.$«8&¥?&¨@'¸?.¼:,ÝYMá]QÌF=ÍD>Á63É;7äUQÕF@É91Ç7,É:,È9(È9(Ä=)±?'¦<&¨;&¬=*«7(¬3(¼=4ÓLFÖGAÝE@Û96Ü30é73ì51ë0+ô1-ý,/ÿ+-ú./ô1/í4/æ81ß;1Ø>2É9.½3(À;2ÏNHáa^÷yzÿ\88\8aÿ\83\87ùz\81û|\83ÿ{\86ÿx\84ÿn~þew÷^põZlëL`õIaü9Wû=YîM]²JGhQ1Qd6\tDf~Nu\88[\7f\8ec\84\90h\86\92j\88\97n\89\9es\88¤t\84¦t\7f§r}¨p\7f¨n\81©m\83©l\85©l\85¨n\87«n\85­o\85¯o\81°l\80²k\82¶n\85·r\87³t\87­t\8d§w\9c¬\85²¹\9aÈƯ×νÙÒÌ»¿Ê¤¬¿\92\9a­[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\cWkjf\7fuv\94}|\9c\81x\97\91z\96«\81\95Æ\84\92Ú}\85ðuzýklÿY[ýDLþ/Iÿ5Rÿ<Uó<Né?LãCKÝBHÖ=@ÛACÜ@AÞ@AÛA?ØC?ÐA9Ç>4½=0µ?1¬;+©8(­<,´?.»@1ÊA7ØC=Ù74á85Þ..â30æ:6Ó0'Ñ5)ëUGÿwjë[PÑC7Ê<0Ë;0É7*Í6+Ô:0Ú70ß82å63ç32ê01í12ô36ý4<þ%6ÿ#9ÿ"9ÿ"9ÿ!8ÿ\1f\1d\1e\e\1f9ð%Bï(Gî&Jñ'Mÿ3\ÿEhÿbuÿ`l÷WcñQ]òP]ïMZâ@MÔ2=Ú=DÌ79»/.®/(¦5'¢;(\9b?&\9c>%ª9'²8+ÑUI»;2Ä?8¾41½2/ÎC@åWSÕHAÈ91Ä6*Å6(Ä5%Æ5$Ã:(±<(§:&¨7%­9*¬4&¯1%Â?5ÛRJÙIAáHBÞ;6Þ2.ê41í1/ï-+ü22þ,/ý+.ù+-ó++í-*æ1*ß4,Ö8,Ñ=1¿2(¼7.ÈIBÙ\Xówwÿ\89\8bÿ\87\8aû\80\85þ\7f\86ÿ}\88ÿv\84ÿj|þ_s÷XlöTiêD\õD^õ6Uñ:VàLZ¥HC^K-Mc5Uo?b}Jt\8c\\80\96g\87\98l\88\9bn\8a r\8b¥v\8c¬z\86«w\81ªr~§m|¥i}¥g\81¥g\82¦i\82¥k\82¨m\83«m\82¬l\7f®h~°i\81³j\84¶o\89¶s\89¯r\8e¬x\99°\84­»\98¿Å©ËʵËͶ½Å\9eªº\8b\97§]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[lnk\86w{\9e\80\85­\89\88²\8f\83©¥\87©¾\88 Ð\82\92ây~ðsqújbÿa^ùJWñ>Që:Lî?NïCQê@Kæ<Gå>Fá<Bß<?Ú<=Ö<:Ï>9Ê=4Á;0¸:,§6&¯A0­<,¬6(¿A5ÌF=Ì=5Ð72Ú85Ü71Þ5.Þ6-Þ8*Ý<*Ù:'Ó6%Ù;0ðSLòZOÙE9Ç8*Í>.ÔB3Ò:-Ô3+ðGBá//î5:ó6=î,7ÿBMñ'3ú&2ÿ)2ÿ(2ù\1d'ý"*ÿ'/þ'/ð\1d\1e)ù+7ê .ì&7ñ-Aç#;ÿXrç-Dÿ]lÿ_iþZcùU\õPWëHMÝ?@Î95Ë>7ÄA7·?1¦7&\992!\996#\9a;'\9f<)§8-®7/ÂE?¿;7½31Ä64Å54ÔDCÛLHÚKEÑD;È:0Ä4)Ç5(Ë4)Å5*¼</³9,­/#«(\1e³-$Ã9/ÒC;ØH?äPFßE=Ú70Ý0*ç0,ò21ù13ý14÷/1ö01ö01ó0.ò0.í2-æ5-Ý9/Õ=0¾2%À>1¹=3Ö_Yésqÿ\8f\8fû\84\86û\87\8aÿ\84\8cÿx\88ÿh}ÿ_wÿ[uÿUoøLføEcñ:Yô;[æ?YÛ]i\8b@;VF-L^6YuBg\86Mw\96]}\9cc\7f\9dg\80¡j\83¦n\82¨o\80§n\7f¦m~¥l}¥i|¤h}£f\7f£e\7f£f~¤k\7f¦m\81«l\7f¬k~­g\7f®f\81±g\83³i\87µm\8b´r\8d°v\8e®|\99´\89§½\99±Á¤²Á®¦²°\8d\98\9ez\85\8b]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`NDbPFcOHeNHiMJgNQdR^g_tnn\90y~¨\80\87»\87\8aÁ\9e\95Ê£\8b»«\7f£¹x\90Óy\83ê|{ôvjöi`ø]aóOZìFRòHSøIVõEPï?Jë;Eä9?à:<Ú::Õ=8Î?7Ç>4À</·<,«<+ª?-©8(²:,ÁA6Å<4Ç61Ô<7Ò50Ö5-×5*Ø4(Ú7&Û:&Û;%Ú9'Ý6.æA;ëMDáI<Ð>/Ç8(Ê8)Ó;.Þ;4öJFä01ð6;ö6Añ.<ÿ@Nï'4ó$,÷%(û),ý+,ü*+ø((ö((÷+,ï$'í%(ë&-ý;DÙ\e'ð4CüARØ&6ÿjuÿbjþZaüW]ôOSåBC×<8Ñ>6¾8,¿D5¹H6©>,\99/\1f\90)\1a\8f(\19\92(\e\9e-%°:6ÑTPÎHGÃ54Æ45Ñ==ëWU×FAÖG?ÐA9Ç9/Æ3)Ê6,Ð7/Î70Ç=3Â91Â5.Ã2-É4.Ñ83Ø?9ÞE=äJ@ÞA8Ú6-Ý0*ç0,ò21û03û03ô02ó12ô01ó/0ó0.î1-ç4-ß9-×=1¿3$¾</·=2Ó^Wévsÿ\90\90ù\85\88ø\85\8aÿ\82\8aÿt\85ÿf|ÿ\vÿXtÿQoþIhü@aó:Zñ?_áI`ÁS\{?7RF.M_9ZvCe\87Ks\95Yx\9c_w\9db{¡f}¥i}¦j|¥i|¥i|¤h{£e{¡d{¡d}¡c~¢e|£j}¦l}©l}ªi|«e}­c\7f¯c\82±c\85°h\87²k\88¯p\88«s\8b«|\90¬\84\90ª\87\8c¢\8bx\87\80dppR^^]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8^K:_N>aP@`P@]P?\O>[O?[RC[QE[QG\OG\OI_PMcQOfTTgUUgUUgV\h]nli\86sv£|\83º\82\8aË\8a\8dÔ\98\91× \8aʪ\82´¹}\9fÏ\80\93ä\84\86î\7fvósjüfh÷S\íGQðFOöHR÷EQòAKî=Eä7=à7:Ù99Ô<7Í@7ÅA4¾?0¶>-­>-ª<+«:,¸B6ÇH?À;2»0)Ê:2Í6/Ð6.Õ7,Ø8,Ù7(Ù8&Ü9&à:*Ý4-Û4.âA9éOCÞH:È5%È2#Ù@2â>5õHDè13ò5;ù7@ø4@ÿESø2?ð)0ë#&ì$'ù13õ-/î&&ì&%õ12ë)*ö8:è+1â)1ë3=ÿR^ï=Kÿ\iþ^fñV\îOTðMRêEIÝ:;Õ74Ô?9À6,À>1¼B5³=1¬7-¥3)¡,#\9c\9a%\1e©/*ÇECÂ::¼,,È35×ABô^]Ñ@;ÒC;ÐA9Ë=3Ì9/Ô=4Ú@8Û@;Û@<Ø=;Ý>;ãA?ä>>à::ã?=ëIDàB9Ý<4Ù5,Ý2+ç1-ð31õ12ø02ô02ô02ô01ó/0ó0.î1-ç4-ß9-Ø>2À4%º8+µ;0Ð[Tízwÿ\93\92û\87\8aú\83\89ý~\89ÿr\82ÿdyÿ[tÿTqÿNmÿFgû=_ô=\îEbßTg¢BFp<1QI2Pb<]xEf\87Nr\93Zu\98^t\9a_x\9ec{£g|¤hy¢fy¢fy¡cx by\9fby a| bz cz¢f{¤h{§h{¨e{©a{©`}«`\7f®`\87²j\8aµn\8b²s\89¬t\86¦w\82\9euy\93no\86lSeYAPM2A>^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^glaildqok\82rt\9ay~µ\7f\86Ê\85\8cÚ\8c\8eá\8e\87×\9f\8bÓ­\8aij\80©½y\8eÌ{\81Þ\81\82wÿsrÿcgùU\ôMTõGPôCMò>Gï<Bå6;à88Û97Ô<7Í@6ÅA4¼A1·?.«:*­>-±=0¼F:ÌRGÇH?º5.º1)È91Í81Ó;0Ù=1Û;-Ù6'Ü6&à8+à5-Û2+à=4ìNBãK=Ò:,Ñ8*àB6ß7.ð>:é/0ð16÷4<ü8BÿNZÿLUý>Eò38â$&í/1ê,,ð22è**ë/.ò::Ñ\1a\1cæ37Ý,2è9@ðENÿXcòNWØ=CÚADáBFá>AÞ9=Ü89Ø88Ó97É83Â91½:2ÀA:ÍNHÖVSÐNNÃC@²72¶95ÏKIÙMLãQRïYZêRQñYVÉ51Î>6ÒB9Ð@7Ó?5ÙB9àC<â@=é?@ç8=ì9=ò?Cï:?è58ì>=öMJÞ93Û60Ú3+Þ3,å4.ì30ò21ô01ô02ö/2ö01õ/0õ/.ð0-é4-à8-Ù?3Â6'·5(³9.ËVOï|yÿ\93\92ü\88\8bý\81\89þz\87ýo\7fücwÿXqÿOlÿFhÿ@cù:\ô?^éKdØZh\8543f<.VP8WgCa{Kj\89Ps\92Yt\95\u\98^w\9dby¡ez¢fw dv aw\9fav\9e`x\9f`x\9f`{\9faz cz¢fz£gz§fz§bz¨`z¨]|«]~­_\86²g\8b´n\8c³t\8a­s\86¦u\80\9dqt\8eii\80dQcUDSL8G@^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}pq\86rw\97v}«z\82Á\7f\87Ò\84\8aà\8b\8cæ\93\8dã\9d\8cÚ \84¿\9eu\9f l\82¬nq¼vlÒviòsmÿllÿgiþ^`ûRWõFMï<Bê7=æ5;á78Ý98Ö=7ÎA7ÆB5½B0¸@/­7)´@3¯:0°;1ÈRHÕ\QÉMC»;0¾90Á7-Ì9/Ö>3Û=1Ú6*Ü4'â6*à3,â70ä=5åE9âF9ÞB3ÞA2â>2Û0&ê72ì0/ï.1ñ.4ú7?ÿPXÿ]dÿZ_ÿOSá.1ã03à,-÷EEè66Ü,,Û-.ë>@Ü25Ù37ÿbhà<CË*2Ê-4Á&*Õ;=á@EÛ6:Ù37ß9=Ü7;Í/0Ì43Í;;ÕGFÞRSì`cõilôekê^aÄ@>ÆE@å^[øhgÿopÿjjåKK×=;É40Ñ>7×D<ÖC;Õ>5Õ<4Ø:1Ü41î5;ñ-9ð,6ò.8ï,4ë,3ó9<þJKß3/Ü3.Ú3+Ü3,ã5.ê40ï4/ò21ô02ö/2÷/1ö.0õ/.ð0-ê3-â7-Ù?3Æ8*´2%²8-ÃNGï|yÿ\92\91ÿ\88\8cÿ\7f\89ÿw\85úl|øatûTnýHgÿ>bÿ:_ú6\óAaàNcÂW_p/+_?0[W>^lIe}Mk\89St\92\u\96_v\99_x\9ecy¡cx bu\9f`u\9f`u\9d_v\9e_w\9e_x\9f`{\9faz¡bz¢d{¥e|¦d|§`y§^y¨Z{ª\}¬^\80¬a\85¯g\87®m\87ªp\85¥s\83 r{\95nr\8ajexe[k^RbU_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N:^L4_N4`N8^O:[N>YOEZSMZTT_Zahbprm\81zu\8c{u\91{q\93zp\93vp\92ps\92rx\9at}¨w\81¶z\83Ä~\86Ï\84\89Ú\8b\8cÞ\96\8fÜ\99\8aÍ\9b\85¶¢\83£ª\84\91«~y\9fl[\9aQ>¼MBÔQIâWRëWUñSRñKMí>Cå4:é9<æ9;à;9Ø=8Ó@8ÊB6ÀA0º?/³9,ºA6«5+£.$¾I?Ùg\ÙdZËUI¸<2¸6)À3)Î:0Ù;0Ú6,Þ3)ä6-ß1*ä71ã;2Ý9/Þ>0ãF5äB3Þ8*ß1(é4-ð31ï-.í*.ô17ÿEJÿV[ÿ]bÿ\aâ9<ã9<Õ+,ôJKâ89×//Û57Ì()Ì'+øXZÝ>BÖ:>Ñ6:º\1f#Ä(+Ü<>æAEÝ49Ù,2Þ17Ù05Í(.Ò37äKNöaeûhnùcl÷`iú`løbkÖLLÕNJê\ZêVTçMMãHFÏ42Î3/ÙA<àKDäOHßJCÙ@8×:3×6.Ü.-õ1;û-:ø*7õ'4õ)4ø0:ÿ>CÿJJà1.Þ3,Ü3,Ý5,á4-ç4/ì3.ð3/ô02÷/2ù.1ø-0ö..ñ/-ë2-â7-Ù=1É;-³1$±7,ºC=ìyvÿ\8d\8dÿ\88\8dÿ|\88ÿq\81öhxö_rùRlùDcÿ9^ÿ6]ù7\ðFcÑN^¢IKe5+VD0[Y@^lIe|Nk\88Rt\91[w\95_x\99`{\9edz cv\9e`s\9b]r\9c\s\9b\t\9c]v\9d^w\9e_{\9faz¡by¡bz¤b|§b{¦_x¦[x§Yz©Y{ªZ~ª_\83­e\85¬k\87©m\89§s\89¥u\84\9ds|\94ru\89pn\7flfwe_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<_N:aP6aP6aO9^O<[OA[RK\VV_Zakgvso\86}z\97\82\81|¥}w£{u¥xv§sy©s}°x\81¸{\84¿~\86Ä\84\89É\8d\8eÎ\94\93Í\9a\93Ç \95½«\9bµ¼¦²É­©Å¦\94ª\88m\9cfJ\9cE2¯A4¶@4ÂB9×IEèNNîJKì?Cë=?é;=ä<;ß=:Ø?7Ð@5È>1Á=0½:0¼@6¯4,§1'»I?ÑcVÖh[ÕeWÃOBº>2º4)Ç7,Ö90Ù5,ß2+ç60â0,ã4/â7/Þ7.à>1åC4ä>0Þ4%æ4*é0+ð3/ð..ï-.ò14ó78öBEöMRüY^éFKöQWØ37ëFJÝ8<æAEÚ7:Î.0Ñ05äHKÒ7;Ð7:¹#%Õ;=Û8;å;>ë<Aç6<â-6Ý)2á1;ç<DðLSý]eÿksÿjsú`jöZgùXh÷[fôddèZVèWTØ@=Ï10Ô44Ó33áC@ãJEéRKêSLáJAÙ?7Ø93Û81ã33ó.7ÿ0>ÿ0>ú*7ü.:ÿ;EÿCHûABã1/ß4-Ý4-Ý5,â4-æ3,í4/ñ40ô02÷/2ù.1ø-0ö..ñ/-ë2-ã7-Ø:/Í>0µ1%±7,²;5ésqÿ\8a\8aÿ\87\8dÿv\86þi}óató[p÷PjúCbÿ8`ÿ8aù;_ìLf¿O[~86]=0NF1VX@ZeEcxMj\85Rr\8e[v\94^y\9aa{\9edx\9eas\9b]p\98Yp\99Wq\9aXq\9aXt\9b\u\9c]y\9d_x\9f`x¡_y¢^z¥^y¤\x¤Yx¤Wy¥V{§X\7f©_\82¬d\84«h\86¨l\87¥o\86¢q\80\9amx\91jq\85ik\7fdbv]_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<_N:cQ9cQ9aP<]P@ZPG\TR_Zaa_mtr\8ayx\98\81\80¨\83\81°}}¯yy¯yu°wwµw|¾x\80Á}\85Ä\82\88Ä\85\8aÁ\8d\8f¿\97\96¾ \9d¼¬§»¶¬µ¾³±È¸«Ð¾¦ÖÁ¢Ñ»\96Ь\88¯oT®\G¤G5¨>0ÂG?àWQïWVñNOé@Cê=?æ<=â=;ß=:×=5Ñ:1É90Á80À=5¹:3·>5ÁOEÇXMÇ]OÑeXÓcUÂL>¼:-Å8.Ò91×4-ß2,ç60æ40á2-à5.ã<3çC7æC4â:-ß3%ê5,æ.&ð0-ï/,ð31ñ54ç-.â24çBF÷X]öW\ÿouåDJëHMà<Cþ[`ÿouÞ=Bÿ}\82ÿmqêQTÔ>@Æ02Ö:=òHKî9>ð7?ø=Fò7Bè-8ô>Jÿ]gÿmwÿjrÿcn÷]gú^kÿaoÿ]nùYeò\]ãPIâJGÕ74Ò/0Ù54Ò0.Ø95ßD?ãJDâIAÙ@8Ó6/Ö4/Ü71é77ê'/ü0<þ2=÷+6ù0:ÿ>Eý?Aì44â3.à5.Þ6-ß4,á3*è3,ï4/ô41ö01÷/2ù.1ø-0ø..ò/-ë2-ã7-×9.Ñ?2¶0%²6,¯50çonÿ\87\88ÿ\86\8eÿp\82ücxñ\pôXn÷OiûBbÿ9aÿ<döAbäRg°QWd/'WD3GG/RT<U^?btLi\81Qq\8b[v\92_z\98b|\9ddx\9c_r\99Zn\97Un\97Un\97Uo\98Vr\99Zt\9b\w\9b]w\9e]w\9e[x¡[y£[w£Xv¢Wv¢Uw£Ty¥Xz¤Z~¦_\81¦c\7f¡d~\9cf{\97fr\8c]i\82X`vRZoPRgH\L<^N>`P@`P@_O?_O?_O?aQAbRB_O?]M=]M=aQAcSCbRB`Q>dS?aP>]P@^QI[QPZSZeapsq\89yx\9az|¥~\80±\80\81¹}\7fºxz·rs´lo¶twÈv{Ì\80\83Ê\8b\8dÆ\96\97䤾²°»¼¹´ËƳÓÌ°ÙϬÛϧÜÏ£ÝУÙË\9cÙÂ\98Ѩ\88¸\80g ^HËzgÖtg½H?×QN÷ccéKLå?Aâ89ä::â:9Ü75Ù61Ö;6Ë81À5.ÇB;¹=3¿I?ÆXK¹OAÎdVÑcTÌXIÅG9Ä:/Í6-Ø7/á6/ã4/ß0-ß2,à70ä=4à<0Ý7)ß5(å7,ä/$ê/&ì/)î1-î20ë40è51â64×79æJNõY]íNS×8=×6<ùX`ÿ~\84ÿ~\86ÿouÿgoÿipÿflõ\añX[ûZ_ÿUZÿDKü8Bû7A÷3?î+9ì0>ñ=HÿS_ÿ`iÿgrÿepþbmÿcnÿ`oý]gíSSßF@Ö85Ö41×11×/.Ø31Û94áD=ÜB:Ù?7Ö<4×90Û81à93æ66ñ7<ó4;õ3;ö4<÷6;ò59ë33ã1/Þ3,Þ5.ß7.à5+ä3+é2,ï2,õ20÷12ø03ú/2ù.1ù//ó0.ì3.å7.à?5Ì8,¿6,¯/&¸;7ÒXWÿ\98\9aþ{\83ÿm\80ÿe|ø\rðPhôGeüCeÿ;bù9^õNlÓRd\89=?Q-!C;&CG.KM5Z`DZjEcxMq\88Zx\92bx\96`t\95\r\96Yq\98Yl\95Sm\96Rn\97So\98Tr\99Xt\9bZu\9c]u\9c[t\9bXt\9dWv Xw¡Wv¢Wv¢Uu¡Tt S{¥[{£]z\9e^u\97[m\8bUb~MXrCSj>AW0?U/<R,[K;^N>`P@`P@`P@_O?`P@aQAcSC`P@_O?`P@bRBcSCbRB`P@fVG_QF\OG^TSaZad`omk\83vw\96wy¢{}®}\7f¸x|¹quµkp´lo¶nq¾uvÐ|~Õ\89\89Ó\98\98Ψ§Ç¸¶ÁÉźÓαÛתâÛ¥çÞ¥æÝ¢äÛ¤âØ£ÛÑ ÔÇ\9bÓ¼\9a»\9c\80©|eÅ\8bwÊ}m´VJÒa[örpìZ[çKLã?@ç=>ë>@ç;;â66Û64Ö=8É83Ê?8¹6.¸>3½K@¶H;È]MÝo`Ô`QÆH:½5)Å1'Ô6-Ü5-Û0)â51å95ä=7à<3Ü8.Û5)ß4*ã5*ì7.í5+í2+ë0+ç0,ã2,á4.Ý52Ö87Ø>@äJLóW[ú^bü\dþ]eÿaiôS[ïNVñQYÿ_gÿjqÿflõZ`óNTí4:ñ,5ô*6÷-9ñ'5å!-æ'6í7CþPZÿZdÿblÿdmÿenÿcmý[hõQZåEEÞ<7Û64Þ63ß55Ü30Ú2/Û62à>9Û>7Ø;4×:3Û81ß82å95ç:6ê7:ë7:í6:ï79ï79ì65å31ß2,Ü3,Ý6-ß7,â6,å2+ê2*ò1,õ20÷12÷03ú/2ù.1÷//ó0.ì3.å7.ß<3Ô=2Â8.¶1*·74ØZ[ÿ\90\93ûs}ÿfzÿ^vùWo÷OiùFfû?bü<aôAaåOh¹KVx;8L2#<:#<B(EG/OS8VdA`rJn\83Xu\8f_v\93]t\93Xq\93Vp\94Tk\92Ok\94Pl\95Qm\96Rp\97Vr\99Xs\9a[s\9aYu\9cYu\9dWu\9fWu\9fWt\9eTr\9eQq\9dRp\9cQn\98Pl\94Nh\8cLb\81FXu?Ni6F]/@W+@W-@W-AX.YL<[N>^QA^QA^QA^QA_RB`SCaTD`SC_RB`SCaTDaTD`SC^PCbUM\QM[QRcYbkdtqm\84vu\95z|¥y{¬y~¶x|»nsµei°`g¯jn¸ruÆ}}×\87\84Ý\97\94Û©§Ø»¹ÏËÊÈÜØ¿åá´éäªíè¦ðé¥íå¤çá§âÛ§×Ï¡ËÃ\9c¸¯\90©\9b\81\9b\83\83p§o`\9cRGº]UÝmi÷uuï__äJLå@DëADì>@è8:â66ß=:Ô;6ÔA:Â70·7,·>3®=/¶F8Ûj\ßi[Ù[MÊB6Å2(Ñ4+Ù6-Ù2,Þ52éA>ìGCà=6Õ2)Õ1'Ú2'Þ0%æ4*è1)ç.)æ/)ã2,â7/á=4àB9Æ-(Ê43ÜDCðVXú^b÷ZaóS[ñQ[èFQêHSïOYü\fÿmvÿntôY_ã>Dé.5ô-4û2<ü2>õ+9í'4ö6EÿKW÷ISõPWøW_þ^fÿckÿ`i÷RYéBIÞ97Þ71ã75é<8ë;;æ95á51Ý60Ý:3Ù;2×90×90Ü71á83ç:6é<8ã99ã99æ87è88è88æ74á40Û2+Ú6-Û7-Þ8,â6,ç2)ë0)ó0,÷1.õ12õ13ø02÷/1÷//ò0.î3.ç6.Ý90ÜD9Ç80»4.µ/.ä_bÿ\83\88ølwþbxþWsúPmþLlÿCfö:]ó;_ìIfÔSg\9dDJl;4O>,=<':?(ED/FH0Q\<YkEg|Qr\89[t\8fZq\90Um\8fRk\8fOi\90Mi\91Ki\92Lk\94Pm\96Tn\97Up\97Xq\98Wu\9cYu\9dWt\9cUr\9cTp\9aRm\97Mk\95Mj\94Le\8dGa\88E[\7fAUt;Li3E`-AX*>U'B\/E_2Ic6WJ:ZM=\O?^QA^QA^QA_RBaTD`SC`SC`SCaTDaTD`SC_RB\PDZOMZQVbXcjcsqm\86vu\95xz£z|­w|´sy·mr´bi¯]d¬ag±lr¾x{Ê\89\89ß\95\91夡䶵áÇÄÙÕÑÎáÝÄçä¹ëæ¯îê­îè¬éâ«ãÛªÚÓ©Ë¡»¶\99¥¥\8d\9b\99\84\93\88v\98\81q\99rc\9bbW³i`Ïrmû\8b\89õutê[]æLNèCGí@Dì<?é;<ß:8Û<8ÞE?ÓC;Ã:0º:/°6)§1#¿I;ÛaRêk\ÛSEÉ:,Ì4'Ô6+×4-Ù42ñMKþZXíKFÚ91Ö3*Û4+Þ2(ß.&á,%á,%Þ-%Ü1)Ú6,Ù;0×?4Â/'Ä4,Î:6ÙCBßFHàEIäGNêMVñQ]öVbøXbù\eÿgpÿmuôYaÞ;@ê17ñ.4ò-6ò*4ë%2ì(4û=IÿS_í?IèAIêGLôQVÿY`ÿX]ôGMä68á53ä73ê;8ò@>ô@?ï=;æ95à72Ý82Ú91Ù80Ù80Ü71ã73è96é:7â:7à;9ã:7æ:8ç:6å84à5.Ú3+Ú6,Û7-Þ8,â6,ç2)ë0)ò/)ö0-ô22ô23÷12ö01ö0/ò0.î3.ç6.Ü8/àF<É91¾3.¶,,îfjÿy\80øgtÿbyýTqþKkÿGjÿ>cò6Yë=^ãQhÄXe\88BBgC7[N;GF1AC-JH3EE-LU6Sc>btLl\83Up\8bXn\8dRk\8dPi\8eKg\8fIh\90Jh\91Kj\93Mk\94Pm\96To\96Wp\97Vt\9bXs\9bUq\99So\97Pj\93Mg\90Je\8eHd\8dG`\87D]\81AWy=Rq8Mi6Lf6Ne7Of8Lf7Oi9Sm>UH8WJ:[N>\O?\O?]P@_RBaTD_RB`SCaTDaTD`SC_RB_RB^QIVMR_Xhnf{tp\89xt\97xw¡xz«y{´sy·jr³`g­[c«_g°jr»v|Æ\80\84Î\93\95à\9e\9e䭮绽æËÉßÔÓØÝÛÎáßÆåá¾æâ¼äß¹à׶ÚеÎƱ¾µ¦­§\9b\98\9a\8c\8c\8e\80\89\85y\8a|q\91vk\9bsi¨meºoiæ\89\84î\81~ósrñedñWYðMNîDEì@@ã:7à;7äB=ÞE?Ì<3Æ=3ÄB5¯1#®0"ÇI;ÜXKÖN@Ì=/Î8*Ñ7+Ñ3*Ö42õUUÿkhú]XãD>Ü;3ß;2ã80â4-ã2,â1+Ý0)Ô0'Í/$Æ/$Â0#Å9,À4'Á3)Ë:5×CAÛEGÛBGÚ@HßCNëOZòVaòVaú^iÿgoóYaáBGê:<í57ï28ï28ò2=÷9CÿHSÿV_ä6?Ý4;ß6;ëADùJOüIMô;Aé13è51ë95ð=9ò<9ó;9ð:7é73â70ß;2Ü;1Û:0Ü90ß82ä73è64é75æ:8ä;8æ:8è:9è;7æ95á6/Ü3,Û7-Ü8.ß9-á7*å3)é1)ñ0)ô1-ó32ñ33ô22ô01ô1/ò0.î3.ç6.Þ7/àC:Ê70À1-À13økqÿqzúftû]túPmÿCfÿ=dÿ9cõ8^æEdÙZm«V[wE>dJ=aYFTO;KI4PI6GE.FO2L\8ZlFf|Nm\85Sm\8aRl\8cMh\8dJf\8eHg\8fHg\91Ii\92Lj\93Ol\95Sn\95Vo\96Ut\99Vs\98Un\95Rj\92Lf\8fKc\8cHa\8aF_\88FZ\81BX|?St;Pn8Ok:Rl=Wn@ZqCUo?Vq>WqARE5UH8XK;ZM=[N>\O?^QA`SC`SCaTDaTDaTD`SC`SCbUEaVP^Vcje|yu\90}y\9azy¡xy©vy°sw´jr³cj°[c«]e®hp¹v~Ç\81\87Ñ\88\8cÓ\99\9dÝ£¥à¯³ã»¿åÆÇãÏÎÞÔÓØ×ÖÑÙ×ËÙÖÇ×ÑÅÒÉÀÌþŹ¹´¨¬£\9a\9d\8a\8b\86x{tyvqule\7fle\8dog\8ea[\9d`[ÀsmØyuð\7f{ü|yÿrpýccöSTðHGïC?ê>:á<6àA;Ñ:1ÓC:ÝTJÂ>2¸6)½9,Â=.È?/ÏB1×C5Ö@1Ñ7-Ð2/êLMú_]òWSßD?Ù:4Û81à70æ93ç92ç92â:1Ú9/Ñ9,Ê8+Å9*°(\18¸3"È@2ÓI>ÒD@Ë;:Ì7;Ï:@Ñ7AâHRíV_ðYbõ^g÷`iêU[ÜAEå@>ì?;ó@CûGJÿLTÿQYÿT]ÿV^á4:Ú/5Ü/3ç7:ô=Aø;?÷48ó12í42ï95ð86í42ë20ê20ç40á4.ã<4à=4ß<3Þ;2á83ä73è43è43è88ç98è88ë99ë97é75â5/Þ3,Û7-Ü8,Ý:+ß7*ã2(ç0(ï0(ò1,ñ42ð43ó32ó11ó1/ñ1.ì3.ç6.à91Ù<3Ì71Á0-Ñ@CÿnuýkuùbqðRiõHfÿ;aÿ4^ÿ6bû>däNiÊ\i\8bGFjF:]L<]VCXQ>RJ7OG4ID.DJ.GU2Sc>^sHg\7fMj\87Oj\8aKg\8cGg\8cFf\8eGf\90Hg\90Ji\92Nk\94Rm\94Um\94Uq\95Up\95Rj\91Ng\8eKc\8cH`\89E_\88F^\86G\\82E[~DWxAVr?Uo@YpB]rG^uG[sCYtAXs@NB2QE5UI9WK;XL<ZN>\P@^RBaUEbVFbVFaUE_SCaUEfZJh]Yngwup\8e|x\99{y wx¦vw­pu¯jo¯ah¬^f®_g°em¶pxÀ}\85Í\89\90Ø\8f\97Ø\99 Ö¡¨Öª±Û´¹ßº¿ßÀÁÝÃÃÛÇÆØÆÃÔÅÁÐÁ»É¼³Ä»°Áµ¨¼¦\98¯\96\8b\9c\88\85\8cqqqtpopfewhe\86nj\84_Y\95d_\9bZT¹f`Ùsnðzvÿ{wÿwsÿhfüZWþRNõHBæ=6çD=Ø;4ÛG=ê\RÅ;0Ä<0¼6*¾6(Ç>.ÑD3ÔB3ÔA1×A3Ò86Ø>>ÝCCÜB@Ö=7Õ81Ø7/Þ7/å:3æ93å:3â;3Û>5ÕA5ÑE8ÌG6®-\18¼;%ÍJ8ÑL=Æ=5º/*À00Ê9>×AJáKTëU`ðZeð]eìYaßLRÔ>@Ï4/Ø7/à;9ê@@òCHõDJñBIî?Fâ5;ß26ã36ï8<õ79ø14û/2ü14ï20ð95ð74ì0.è,*ç0,æ3.à3,ä=5à=4à=4à<3ã:5æ95ê65ì65ì57ì57í57î68î66ë54ä2.Þ1+Þ7.Ý9-Ý:+ß7*á4&æ1&í1(ñ1,ð42î53ñ42ò21ó1/ñ1.ì3.ç6.â;3Ò4+Ò:5Æ20èVYÿpxùcnòZiçI`óFdÿ8bÿ/]ÿ5bÿBhÜLe±PYj5/^G7XK:UN;[P>VI8M@0JC0@F,AO.K[6Xj@bxGf\81Jh\88If\8bFe\8aDc\8bBc\8dEe\8eHg\90Lh\91Oi\91Rk\92Sn\92Rl\90Ph\8fNd\8bJa\8aH_\88F_\87H_\87H_\85H_\82H]~G]yF]wH`wKcxOczN]uC[vAZu@JC3MF6QH9TK<WK=YM?\O?^QAdWFeXGdXHbVF_UIaWMg^Ulcfwr\89yu\9axv\9ets\9frr¤tu­lp¯bg©Za©_e¯fl¸ms¿v|È\81\87Ó\8f\93Ý\97\9cÞ\9b¡Õ §Ó©­Ú®³Ý±´Ý²´Û´´Ú¶´Ûµ±Ö³­Ñ®§É«¡Äª\9eÂ¥\99½\99\8b¯\88~\99|x\86dbgiefcYZj[X{c_yVP\92c]\8aNF¢UM½`XÖkcñwrÿ\7fzÿzwÿnjþa\÷TOéGBîOIÝB=ÞG@êWOº,"¾1'¾4'Ç>.ÑE6Ë>-Á2"Ê7'ÛE7ÞE?Ó97Ì3.Í50Ô;5×=5Ý<4á=4ä;4ä92Þ5.×4+Ï5)Ê8+Å<,Â?-ÔS>ÈG2½<)¾:-Ã=2Ä;5Â74Â43ÜKNÞMRáPUåTYèY]åVXÜMOÓD@É5+Ñ7+Ù80Ý52â24å26æ18æ.6ì4>ì3;ó5?û9Bý4>ú+5ÿ(3ÿ/9ø-3ù57ù59ð./ë*+é0.è51â5/ã<4à=4à=4á=4ä;6ç:6ë76î66ì46ë35ì25í34í55ê41ã1-Û0(Þ8,Ý:+Ý:+Þ8(à4&ã3$é3&ì4*î50î52ð42ð3/ò2/ï2,ì4,ç6.ä=4Í/&×>9Ì35ùbgÿoy÷[iðNcêC]ùFfÿ:eÿ0]ÿ6aöGhÉJ]\93CFR,#VI8SL:OH6[O?UI9F?-HF1>B'@J(IU1Sd:_rEe}Ig\84Je\88Hc\88Ca\89Bb\8aCc\8dEe\8eHf\8fMh\8fPi\90Ql\90Pk\90Mf\8dJc\8aIa\88G`\87F`\87H`\86I^\81G^\7fF_}G`|Ia{Kd{Mf|Nf~N]xC]z@^{CCA5FD8JF;PG>RH>WI>]M>_O?`Q>aR?`SB_VGbYRgb_ojnso~wq\93zt |y¨yw©pp¦gg£`a¢\_¤`b­fhµopÀyzÌ\84\82Ö\8d\8bß\96\92ç\9c\99æ \9eÝ¡¡×££Ù¤¤Ú¦£Ø¥¢×¥¡Ô¤ Ó¥\9eÑ£\9dÍ¢\9aÉ¢\99È\9f\96Ã\99\8d»\8e\82°\83|\9ern}igld^`fZZkYUrWP}WN\8cWO\95RI¨ZPµXPÁZSØkdìyrù\82|ÿ\8b\86ùuqÿusí_]ßPLÙEAïZTÌ71Å2*Ä6*Ã7(À7'Ã7&Æ9(Ê;+Ð<.Õ?1Ò8.Ö<2×?4Ó;0Í5(Í3'Ø:/â@5à90á90Þ7.×7+Ï7)É:*Æ?,ÄA/Â=.Æ@4ËE:ÍG<ÌC;Å<4»2,¶+&Ç<7ÐEBÙOLàVSãYVáXRØOIÐC:Ì;*Ó:(Ü8,â5.è./ì*2ð(3ô'6ú->ú+?û*?ý)?ÿ(?ÿ&?ÿ$<ÿ$<ÿ$8ÿ'9ÿ+<þ,9ó+5í.5è45ç;9Ý84Ý:3Þ;4à;5ã:5æ95é73ë54ë35ì46ë54é54ç53â5/Ý5,Û5)Ü8,Û9*Ü9(Þ9&ß8&â7%ã6%æ4&ì5-í4/ð50ñ4.ñ5,í5+ê5*å7,à90Ø7/Õ:6Û?BÿmwÿbsûSjõIcÿKjö7Yÿ6_ÿ<gø>cçNj¯IV]#!D, ?:'HE4PM<PI9EB1>C/?G/BH&EK%KS.S]8[kDavKd~Nd\83Jb\86F`\88Ba\89@c\8bBe\8dFh\90Jl\90Pm\91Ql\91Li\8eHg\8cGf\8bHf\8aJe\89Ic\85Ha\83Gd\83Jd\81Ib\7fGc~Gd\7fJd\7fHe~Ga}C[{<\\7f=_\82B=?4?A6FC<JE?PE?TG>[K>]M=`O;`Q<^SA^VIc[Xhcinlyso\86tp\95vp\9etp¢pm¢gf\9faa\9f]^¡\\¤ed°kjºtrÅ}{Ï\86\82Ù\8d\89à\94\8eæ\98\93å\9b\96Ù\9c\98Õ\9d\99Ö\9e\9a×\9e\98Ö\9d\97Õ\9c\96Ô\9b\95Ñ\9e\96Ñ\9c\94Í\9c\93Ê\9b\92Ç\9a\90Ä\93\89»\88\7f®\82x\9dtk|mdif]^f[YiZSoWM{UJ\8aVK\9aVK°\RºYRÁXRÓfaàqjãvoí~wý\87\85ÿ\87\85÷usîgdãUSëZUÇ2,Â/%Å7)Ã7&À7%Á8&Ä8'È;*Ï;-Ó=/Õ9,Õ9,Ó:,Ò:,Ñ9+Ñ9+Ô8+Ø8,ß;1à90Ü8.Ö8,Ï9*È9(Á:&¾9&¾6*Á80Æ=5É@8ÊA9È?7Å<4Â91¿4-Ç>6ÑH@ØOGÚQI×NFÌC;Ã7*Ë8&Ó8$Ý7)å4,í//ô+3ù)7ý(:ÿ+@ÿ*Aÿ)Aÿ&Aÿ#@ÿ!<ÿ\1e=ÿ\1d:ÿ\1f:ÿ 9ÿ%;ÿ);÷-9ð19ê7:å;;Ü94Ü:5Þ;4à;5ã:5æ95é73ë54ë35ì46ë54è64ä71ß6/Ü5,Ù5)Û9*Û9*Ü9(Ü9&Þ9&ß8%á8%ã6%ç5+ê3+ë4,ë5*ë5*ê6(ä7)á7*ß;1Õ4,Ó54óTYÿesÿ[põGbÿIhÿAdÿ;`ý3[ù;aòMmÍLb\898?S*$A5'69(;<,B@1DA0@?-=B.>G,=C\1dKP'\b<eoJhvRezQd~Od\82La\83Fa\86Aa\89@c\8c@g\8dDi\8eHk\90Ml\91Nl\91Kj\90Gh\8dHf\8bFg\8aJf\89If\85Jd\83Hf\83Kd\81Id\7fHd\80Fe\81Ge\81Gf\7fEb~A]\80>_\84?b\87B69.:<1??7DA:KB;OE<VH=YL<^O<\O<\SB^WMc]]helom{sq\89so\94qk\99jf\98c`\95\[\94ZZ\98\] \_¦hjµno¿wxÊ\7f\80Ò\86\84Ø\8a\88Ü\8f\8bà\91\8eÝ\93\90Ó\93\91Ð\93\91Ð\93\91Ð\94\8fÑ\93\8eÐ\93\8cÏ\92\8bÎ\95\8cÍ\93\8bÇ\94\8bÄ\94\8bÀ\93\8b¾\8c\84³\83\80r\95|ewu^fi[[d[Vd[RfXKrVH\84TH¢YP½`YÉ\YÏYWÛcbákißokãvqû\8a\84ÿ\8a\86ÿ\85\81ÿ}y÷nhîaXÄ4+À2&Ä8)Á:'À9&À9%Â9&Å:'Ì:+Ð:,Ö:-Ó5)Î5'Ð8*Ô>/Ô>/Î6(Ë/"Ú:.Ú8-Ù7,Ö8,Ð:+É:)Â9&¾7$½5)À6,Â8.Ä:0Ç=3Ê@6ËA7ÌB8Ç:1Ê@6ÏE;ÐF<ÒH>ÑG=Ê@6Å7+Ì6%Ö6&ß7,ç4/ñ03ö-5û+9ÿ*<ü';ü'=û%=ù#;û!:ú\1e\1c\e6ÿ\1e8ÿ\1f6ÿ$8ý*;÷2<ñ6=ë8;ä::Ü94Ü:5Þ;4à;5å95ç85é75ë54í36î47í55ê65å61á6/Ü5,Ø4(Ú8)Ù9)Ú9'Û8%Ý8%Þ7$à7$á6%á5'â4)ã5*ã6(ã6(á7(Þ6)Û7+Ý<2Ð1+Ø88ÿkrÿ]nþPiñ<[ÿHlÿ7]ÿ>eù5[î>bæVqª?Qa#(L/);7+07'37&9<)@=*A<(@>)BB&?F\1dXa4s~T\80\8cdw\87`h\7fSa}La\80G`\83C`\85?a\89@c\8c@h\8eEj\8fJk\90Ml\91Nn\93Mk\91Hh\8dHg\8cGh\8bKh\8bKh\87Lg\86Ke\84Kd\83Jc\80Fd\81Gf\82Hf\82Ge\81Fb\80Bc\86De\8aEh\8dH25*58-;<4A>7G@:KB;RE<VJ<XL<YM=YQD^WOc^bigron\80ro\8crm\95jg\94`^\8fWW\8bTU\8eWX\98\_¢ac­ln»rsÃ{|Î\82\83Õ\88\86Ù\8a\88Û\8c\88Ü\8d\8a×\8f\8eÒ\8f\8dÎ\8f\8cÏ\8e\8bÎ\8f\89Ï\8e\88Ð\8e\86Ï\8d\85Î\8f\85Ê\8e\85Æ\8f\85Á\90\87¼\8f\87\89\82¬\80x\9d\7fo\8c\80_p|Y`lXYd[T^_Q_\IjWF}SE\9eUL¾\YÐY[ÙX\äcgçkkáplåxsì}vízsþ\83~ÿ\86\81ÿ\81{õkaÉ<2Ä8)Â;(¿:'¿;&¾:%Á:&Å:'È9)Î8*Ø:.Ô6*Î5'Î8)Ñ>.Ñ>.Ë8(Ç/!Ò6)Ó5)Ò4(Ò6)Ñ9+Í<+È=*Ä;)Ä:-Ä:/Æ90Æ9/Ç:1È;1É<3Ë=3ÓD<ÓE;ÐA9Ë=3Ë<4ÏA7Ï@8Î;1Î5'Ù5)â5.ë31ò/5÷+6ù)7ü):ù&9÷&;÷&;ø'<û&<ý%:ÿ$:ÿ#:ÿ"7þ#7ú%7ù,;÷5>ò9?è8:à87Ü94Ü:5Þ;4à;5å95ç85é75ë54î47î47î66ê65æ72á6/Ü5,×5*Ø8*Ø8(Ø8(Ù8&Ú7&Ü7$Ý6$Ý6$Û5%Ü6(Ý7'Ü9(Ü9(Û:(Ù9)×:+×:1Ð3.ëHKÿoyÿVjøD_ø<_ÿAgÿ3\ÿ8bø>cèMlÅOe\800=J\1d C1-11'.6'4=,=B.B@+B<$E>$HE$U\0p~M\8f\9fr\97¨|\83\98mj\84W_{J]~E_\83Ca\86@b\8aAf\8fCk\90Jl\91Lm\92Om\92Oo\94Nl\92Ii\8eIh\8dHi\8cLi\8cLj\89Ni\88Mf\85Ld\83Jd\81Ge\82Hg\83Hh\84If\82Gd\82Dg\8aHi\8eIl\91L-3'36+891<;6B=9G@:MD=QG=SI=SK>UNDZUQa^eigumk\81lk\8ajh\90b`\8fXV\88PP\86QQ\8dXY\9a`cªfj´orÁuxÉ|\7fÐ\82\85Ö\86\87Ù\87\88Ø\8a\89Ù\8b\8aÖ\8b\8cÏ\8b\8aÌ\8a\89Í\89\87Ð\89\85Ñ\88\84Ñ\8a\83Ñ\89\82Ð\8c\84Ï\8b\84È\8d\85Á\8d\86º\8d\86°\87\81¥~w\96\7fm\85\84Yj\80SZnVTc\RZaOZ_HeZDxUB\92LD¸TRÐSWÛRYå^dèejãklæuqäunâoh÷~vÿ\82{ÿ\87~ôl`É?2Á8(À;(¿='¿='À<'Â;'Å:'Ç8(Í7)Ø:/Ø7-Ò8,Ï9+Ì:+É:*È9)É7(Ï9+Ñ7+Ò8,Ñ7+Ï7*Ì8*Ë<,Ë>-Ê<0É=0Ê<2É;/È:0Ç9-Å7-Å5*Ð@7Ð@5Í=4É9.Ë80Î;1Í:2Ì5,Ð/%Ù0)ä20ì25ô/8ù-9û+;ü,<ü-?û.?ü/@ü/@þ/Aÿ/?ÿ-?ÿ.@ÿ)9ü)8÷+7õ0:ñ6=í8=ã77Ü43Ü94Ü:5Þ;6â:7å95ç85ê65ì44ñ48ñ48ï56í76æ72á6/Ú6,×5*Ø8*Ö9(Ö9(Ø9&Ø9&Ù8&Ú7&Ù8&Õ8%Õ:&Ö;'Õ=(Ô=(Ô=*Ô=,Ô<.Ñ7/Ú;8ÿ^eÿaqÿPi÷<[ÿAiÿ4_ÿ4`û1YôKlÛYq\95>NZ%-C),:2/-0)08+7@/<A+<<"A<\1eUH(`[5{\85S\90£lª¾\8b¨¾\8d\8e¥wo\8b[a\7fK^\7fF`\84Dc\88Be\8dDj\93Go\94Np\95Po\93So\93So\94Nl\92Ii\8eIg\8cGi\8cLi\8cLi\8bOh\8aNg\86Ke\84Id\83He\84Ig\85Ih\86Hg\85Ge\85Di\8eIi\91Kl\94N+1%.4*470893>:7B=:HA;KD<NH<NG=OJDWSR_^ffeugg\7fgf\86ba\89[Y\8aQQ\85NO\87RS\93[^£ei³lo¾uwÊz|Ñ\7f\81Ö\83\85Ø\86\87Ù\86\87×\88\87Õ\89\89Ó\87\88Ë\86\87È\86\85Ë\85\83Î\85\80Ð\85\80Ò\87\7fÒ\87\80Ð\8d\85Ò\8c\85Ë\8d\85Á\8c\85¸\8b\85«\84\7f\9d{v\8d|jz\84Vc\81PVnUQd^P[eMXbIb^EsXC\8fOE´WRÐUZÚSZç\cèagågjèpoìyræqh÷|tósjþxmæ\QÄ;+¾5#Â;'Á=(Á=(Ã<(Ä;(Ç:(Ë9*Ï7*Ö5+Ø7-Ô:.Î:,Ç:)Ä8'Æ:)Ê=,Ï=.Ö@2ÙA4Ö>1Î8*È4&Ê8)Ë<,É:,È:,É;/É;-Ê:/È9+È5+Ç5(Ê6,Ï;/Ò>4Ó?3Ö?6Õ>3Î7.É,#Ò+%Ü-*ç02ð39ö1;ú0<ý0?ý0?ù0@÷1@÷1@ö0=÷/<÷-9ù+8ú*7ü0<ù/;ô0:ñ4;í6;æ69ß55Ù42Ü94Ý:5ß:6â:7å95ç85ê65ì44ò59ò59ð67í76æ74ß6/Ú6-Ö6*Õ7+Ô8)Ô8)Ô9'Õ8'Õ8%×7'Ô9%Ð9$Î<%Ï=&Ï?'Î@(Î@*Ð?.Ò;0Ñ61ëHIÿfrÿOdÿHfû7[ÿAmý/]ÿ7aò4XãPj¼Ufm19E(*E697325406906=-3;#38\18CC\1dja:\85\81T\9f®w©Á\87µÎ\97¯Ç\93\92®}v\94be\86Q`\82F`\85Bc\88Bg\8fFm\96Jr\98Or\97Rq\95Up\94To\94Nl\91Kh\8dHf\8bFh\8bKi\8cLi\8bNi\8bOg\86Kf\85Je\84If\85Ih\88Ii\89Hi\87Gf\86Cj\8fJk\93Mn\96P(0#+1'/4-350764<85@=8C>8IE<HE<KHCRPQ[[eabtbb|``\82_^\88ZX\8aTT\8aTT\90\] gi³psÄvxÍ{\7fØ~\82Û\83\84Þ\84\86Ý\84\85Ø\83\84Ö\85\84Ô\86\85Ñ\83\86Ë\82\85È\83\83Ë\82\81Í\83\80Ñ\85\80Ô\88\80Õ\88\80Ó\8d\85Ò\8b\84È\8b\83¾\8b\83²\89\82¤\81|\93wp\80veo~U[|PQnUNf_O]eMZdIaaGq]E\89TF­]TÈZ[ÔVZâ[aæ]déaeîllõzsírj÷xoÞYPå[PÒD8Ã5'Ç:)Å:'Ä<&Å='È=(Ê;*Í:*Ð8*Ô6*Ó0'Ô3)Ò8,Í;,Ç;*Â;(À;(Ã<)È;*ÕC4áK=ÞH:Ó=/Ê4&É5'Í;,È9)È9)È9+È9)Ê8+Ê8)Ë7+Ë7)Í6+Ò<.×?4Ø@3Ú@6ÛA5×:1Ò1)Ü0.å14î49õ6>ù4>ù1>ú0@ø/?ò.<ï/<í/9í07ï-5ï,2ò+2ñ*1õ2:ó4;ò5;ì59å57á55Þ65Ü75Ü86Ý97ß:6ã:7æ87é77ê67ì46ô5:ô5:ñ7:î87æ74à70Ú6-Ô6*Ó7*Ñ8*Ð8*Ð9(Ð9(Ð9&Ñ8(Ð9&Ë9"È:"È>$Ç?%È@(È@*Ì=-Ï;1×96üU\ÿ^qÿGcÿ?aÿ:aÿ7gþ3`û9^íFbÅNa\89@IS12A64@:<:46?56>7179+4="9C\1eSZ.\82\82P¢§q±Å\8a¯Ë\8e°Ì\92¦Ã\8d\92®}{\99eg\88Q_\81E^\83@c\89@i\8fDo\95Js\99Ps\98Sq\95Uo\93Sn\93Nk\90Jg\8cGe\8aEg\8aJh\8bKi\8bNi\8bNf\88Kd\86Id\86Ie\88Hg\8aJh\8bIi\89Hf\89Ej\92Ll\96No\99Q&.!(0%-2+13.331764:95=<7GD=DD<GFBOOQZZd_ap_az\\~`_\89\Z\8cYX\91\\\9agg­qsÀz|Ñ\7f\80Ü\81\84á\82\85ä\85\86ã\84\85á\83\83Û\81\82Õ\83\82Ò\83\82Î\84\87Ì\83\86É\84\84Ì\83\82Î\85\82Ó\87\82Ö\8a\82×\8c\83Ô\8d\85Ð\8c\83Ä\8b\82·\8a\82«\86\80\9c\7fx\88snuqbevWUtSLjVKf_MbfO_eIcbFp^FzQ?\9d[M·ZSÅSR×VZâW\êY`òce÷rmðme÷qhÑD;ÔA7Å1%È4&ÔC2Ç9%Ç:&É;'Í<)Ð:+Ó:,Ø8,Ù7,Ï,#Î0%Î6)Ë<,Ç@-Á>*¾;'¼7$À4#ÑB2ãOAäN@ØB4Ë7)Ë7)Ð>/Ê;+É:*Ç8(Æ7'È6'Ê6(Î8*Ð8+Ó;.Õ;/Õ9-Ò6*Õ7,Ú<1Ý<2Ü71è88ñ8=÷:Aû9Bú4Aõ/<ò,;ï,:í/;ê19ê38ë48í57ñ56ô36ó57ð37ï6;í9<é69â45Ý33ß76à;9Ý86Þ97á96ã:7æ87é77ê67ì46ô5:ô5:ñ7:ì89æ95ß82Ø7/Ó7+Ð8+Í:*Í9+Ì;*Í:*Í:(Í:*Ì;(Å9"Â:"Ã=$Â>%Ã?(Æ?+Ê<.Ð92ß<?ÿ\fÿQhÿIfÿ9]ÿ=hù.]ý<hé;\å\p¦LV^..G83BC><89?48E26C41=:)>E&FU*bs?\90\9ba­½\7f±Ë\8c«É\8b¦Ã\8b\9dº\84\8e¬z{\99ef\87PZ|@^\81?a\87>h\8eCo\95Jr\98Or\97Rp\94Tn\92Rn\93Nj\8fIf\8bFd\89Df\89Ih\8bKi\8bNi\8bNf\88Ke\87Jd\87Ge\88Fg\8aHh\8bGh\8bGe\8aDk\93Lm\97Op\9aR(0#'/$(-&).(.0-3317839:4==5?@8DE@JLKORYVXeZ\s]^}YX\82[Y\8b^]\96ee£nn¶wxÈ\7f\81Ø\84\85â\8c\8cî\8c\8cð\8a\8aì\86\87ä\82\82Ü\80\80Ö\82\80Ó\83\82Î\80\83È\81\84Ç\83\83Ë\84\84Î\86\83Ð\88\83Ó\8b\84Ò\8c\84Ï\8a\80Å\8a\80¼\89\80¯\87}\9f\80x\8dwozkegf]Xm[Qm[Mi\Lf^Kd_IeaHhaGo_FoP;\85UA¥]O¿aYÑYXÝQTîS[ø\`ùheæYPÔD<Î70Ñ7/×:1Ö=/Ô;+Ï9(Í:&Ï9(Ñ:)Ô8)Ø8*Ü5,Ü5,Ð/%Í3)Ì8,Ê>/Å@/Á@-¾=*¼9'Â9)¾0"éWJßK?Ã/#Ñ=1Î</Ç8(Ê;+É:)È9(Ç8'È7&É6&Ë5&Ì4&Ð7)×;.Ü>2Ü<0Ù7,Ú8-â>4ìC<õBEò9?ð2<ö4?ö2@ñ-;í-:í2=ì7>æ5;ä68å78ë99ð:9ñ78ï77ò;=î<<ê::æ87á85ß74Ü75Ü75Þ97á98ã99æ::é9;ì9<í9<ï8<ô7;ó6:ð8:í9:ç;9à;5×90Ï7,Ê8+È9)Ç9+Æ:)Ç:)Ç:(È;*Ç<)Á9#Ä='¾:#¶4\1e¼9%ÉD3Ï?6Ê1,ÿ^eÿVgÿIbÿ<\ø1X÷0Yû6cõBiçYo¬FQo33N3,B?6>C<@78@-1L/3K2.A9&DJ(Zn=~\9a_\9e¸w¨Å\82«É\8b\9f¾\82\98\80\94²~\82 nf\84RXvBY{?]\80>c\87Ai\8fDn\94Im\95Ll\94Nk\92Ol\91Ni\8eIf\8aDc\86Bc\86Bf\89Ih\8bKf\8aLd\88Jg\8bMh\8cNg\8bKf\8bHe\8aEf\8bEj\8fIk\93Jq\9bQr\9eSt U*0$)/#).').(-/,130561782;<4>?7AD=HJGOPTSUaXYkZ\u\Z\7f^]\89db\94kj¤utº\7f\87\87ß\8b\8cé\8d\8dï\8c\8cð\89\89ë\85\84â\80\80Ø\80\80\7fÏ\81\81Ë\85\86É\86\87È\87\88Ë\89\88Î\8b\88Ï\8c\86Î\8d\86Ì\8e\85È\8a\80¼\89\7f±\86\82x\91{s\80tknlb`e]Re`Me^Kf^Kf^Kh]Ij^Hk_Gn^Ew_G\7f[C\92YF­ZLÇVPÞRSõQXÿX_ðUSãLEÙ>9Õ60Ù6/Ü90Û9,Ö9(Ó8&Ñ8&Ñ8(Ô8)×7)Ü6*ß4,Ý5,Î0'É5)È9+Æ=-ÄA/Á@-¿<*¾9(Ä8)Ë<.äREÜH<È4(Ë9,È:,Â4&Ê=,Ë<+Ê;*Ê;*Ë:)Ì9)Î8)Ï6(Ó7*Ö8,Ù7,×3)Õ1'Ø1(Þ7.ç<5øDGñ8>í/9ï/:ð0=î.;ë1<ë6?ä5:Ü36Ø22ß:8îEBøIFøDCó?>é:7ç98å97â96á85à85á98á98à87â88å99ç9:é9;ì9<í9<î7;ó6:ò59î68ê88ä;8Ü:5Ò8.Ë7+Æ8*Ã:*Â:*À;*À;*Á<)Á<+Á<)½9$Á?)»:%³5\1f¹:'Á;/Ê:2Ø<=ÿ^gÿPdÿA[ù8Wö6[õ;`ô>dãIe«?L\83?>_:2G;/:>08>2F<:R>=N0.S8/VK5ciEx\8f[\8d°p\9dÂ}¡Æ\81\9a¹}\9a¹\80\9a\83\8d©xr\8e^YuETp=\{B_\7f@b\86@i\8dCm\93Hl\94Kk\93Li\90Mi\90Mg\8cGe\89Cc\86Bc\86Dg\8aJi\8cLh\8cNg\8bMi\8dOi\8dMi\8eKh\8dHg\8cFf\8eEl\92Im\95Lp\9cQo\9dRt U-1#-1#,/&,.)//-11/34/45-9;0<>1@B7EHAKMLQRWVVbVWi\Yt^]\7ffd\8cpn zx·\85\83Î\8d\8bß\90\90ê\90\8eï\8e\8cí\8a\89ç\87\84ß\81\7fÓ\7f\7f\80\7fÅ\86\85Ç\88\88Æ\8a\8aÊ\8c\8aÉ\8c\8aÉ\8c\88Å\8c\84¿\8b\82·\89\80­\86\80v\8f{p\80ujpndbi_Vc]M_aL_aKc^Jg\Jl[In\Ho]Gq]EwaIxX?\87S=£VDÇXOãUSøOTþMSâ><Þ<7Ý84Þ71á6/á6.Ý7+Ú7(Ô7&Ó8$Ó8&Õ8'Ø6)Ý5*à3,Ý5,Ë3(Ä6(Â9)Á<+Â?-Â?-Á<+À8(Ã5'ÛI<ÚF:ÕA5Î</Ä6(Ä;+¾6&Æ:)Ç:)Ç:)É:*Ê8)Ë7)Ì6(Í3'Õ9-Õ7,Ö3*×3*Ú3+ß6/å:3é<8ð<=í49ë07ì18î3<í4<ë7@ê=CÝ7;áAAìNKøYUýZUúQLïB>å84â62à72à72à72á85â96ä;8ä;8á77ä88æ8:è8;ë8<ë8<ë8<ì8;ï58î47ì57ç77â:7Ù:4Ï8/Ç7,Â8+¿:+½;+»<+»<+»<)»<+»<)¸9&½@*³9$±6$¶;+µ0'Ã40ìPTÿ[iÿJ`õ:Uð7Vñ@]ïHfçHdÍNa\8289e?6R@2DA09=,57)>6+L:0E-#R=,g]B\81\88_\92«t\97»{\96Áz\96¿{\94³x\9c¸\85\9a´\85\80\9am\uKHb5Nh8[xB_}?c\83@h\8cDl\92Gj\92Ih\92Jg\90Lf\8fKd\89Dd\87Cc\86De\88Fh\8bKk\8eNk\8fOj\8eNi\90Oi\90Oi\90Mg\8fIg\8fHh\92Hl\94Ko\99Ms¡Vs£Wv¤Y24&04&01)01+12-23.34.46+9;-;>-?A3DF9IJDMONRQWSS]XVd\Zoda~nl\94zw¬\84\82Ã\8c\89Ö\91\8fã\94\91ê\93\90ë\8e\8bâ\89\85Ù\82\7fÌ\7f\7f|¿\80~¿\84\82Á\86\85Á\89\88Â\8d\8aÃ\8b\88¿\89\85¸\87\7f®\85\85{\9d\80v\8eyn~rgmmaak^Vi[Pc\J]`K]aJc^Jh[JmZKqZJtZIv[FsWAxR;\8aQ=ªYFÍ[PãTPðFIñ>AÛ2/Ü5/á51ã60ã5.á5+à6)Û8)Ö7$Ó8$Ñ8&Ô9'Ø6)Ü6*à3,Ú6-È6)¿7'¼7&½:(¿>+Â?-Ã;+Ä8)Æ4'éUIÓ<1Ì8,ÑB4¾5%À=+À=+À8(Ä8'Å9(Ç:)È9)Ë7)Ì6(Í3'Ò6*Ô3)Õ2)Û4,â92é>7ì?9ì=:è45ì59ï6;î5;ê2:å28ä7=â<@óUVübbÿmjÿidóVQäA<ß63Ý4/ß61Þ71Þ71ß82á85â96å97æ:8å78æ89è8;é9<ë8<ë8<ë8<ì7<î5:î68ê67å97ß<7Ö<4Ì9/Å9,¾9*º;*¶;)µ<)µ<+´=)³;*³<(³:'·@,­8&­8'³;-«+"Ã54ý`gÿTdúG\ð<Uë=XçG_áOdÒO_´SZvGAXH9KD2FE1BE0=?*:8#;3\1e?3\1dPG*nkH\8a\93f\95¬t\91´t\8e·s\91ºx\9e»\85¡¸\8a\90§}l\82[K_:AW0Lc7Wr?_{@d\83@i\8aCk\91Fi\91Hg\91Gd\8fHe\8eJb\87Bc\86Bd\87Eg\8aHj\8dMl\8fOm\91Qn\92Rj\91Pj\91Nj\92Lh\92Jg\91Gi\93Gm\97Kp\9cOv¥Wv¦Zx¨\78(68*66,56.56056067/68+;>-=@-@C.DG4IK>MNFQPNRRRVUSYX]a_lki\81us\9b\80\88\86Ç\8c\8aÓ\95\92á\94\91â\90\8dÜ\8b\87Ó\84\81Ä\81\7f\7f\81\84\81º\87\84¹\89\85·\8a\84²\86\7f¨\81z\9b\80x\90\7fs\87znzrfjm_^j[Ti[PjZKfZJb_Lb_Le^Li\Kn[Lr[Kw\K{ZG~UA\86R=\9bRA¶VFÎRHÚG@â88å33Ý1-ß3/â5/ã5.á3,ß3)Ý5(Ü9(Ó8$Ð9$Ï:&Ñ:'Õ8)Ù7*Ý5,Ø7-Æ:+»9)µ6%·8'½;+Â=.Ç;.Ç7,Ð90õ\TÖ=5É5+ÏA5¸3$·:(¼?+¿:)Ã:*Æ:+È:,Ê;-Ì:-Ï8-Ñ7-Ð3*Ò1)Ö1+Þ71å<7ê>:è;7æ74é75ï;<ð<?ê69ä15ä5:èBFíMOÿxwÿqnñ`[ÝJCÑ83Ñ2.Ü73ç?<à93à93à72à72â62ã73å76å76æ68ç79ê7;ë8<ë8>ë8>è7=ê7;î7;î79ê7:ä::ß=:Ö=7Ë;2Ã;/º8*µ:*³;*¯<)¯<*¬<(¬;)¬;)ª;(¬=*¦8'§9*ª8-¬/)Ë@CÿhrôM^óH[íDYåH[ÙO^ÉT]·TW\9cXUdM?OL9LG4JE1FD-?B'=D#>H#KV.\g<x\81T\8b\99f\91¤m\8d©n\8f²r\97¹}\9f\88\92§\80u\86dRcC?P0BS1Oa9Vl=b{Be\82Bi\8aCj\90Ei\92Fe\91Fb\90Hc\8eGb\87Bf\86Cg\8aHi\8cJk\8eNm\90Pn\92Ro\93Sj\91Nk\92Oj\93Mi\93Ki\93Ij\96In\9aKr\9eOv¥Wv§Xw¨Y?=.=>.==1==3==5;<4;=2;=/?B/@D-CG.FJ3KL:NOAQQIRRHYWJZZN_^\gerqn\89{y¡\83\80·\87\85Ä\8f\8cÑ\8f\8cÓ\8d\8aÏ\8a\85Ç\83\7fº~y¯zw¦yv¥{v¬|y®\80\83\83\7fx\97|t\8bzr\81vksrffm_\j\Sk[NlZLl[Kk[Ki]Mg^Mi]Mj]Mn]Ms^My\L\81ZI\93`O\9bVG§N@¸J=Å@7Ï6.Ø1+Þ1+á51á6/â5.â4-à2)Þ4'Ü6&Ú;(Ñ9$Í;$Ì;&Î;'Ñ:)Ö9*Ù7,Ó9-Â=,µ:(°5#²5#»9)Ä<.É;/Ë7-Ù?7ø[TãIAÎ:0Ì@3¸6&¬3 µ<)¼9'¿7'À7'Ã7(Å7)É7*Î7,Ñ7-Ù<3Û:2Þ93å<7ê>:ê=9ç85ã41è96ë<9ì::è8:ì>@øPPÿbcÿppùheâTPÊ=6À1+É40Ö;7ß=:à;7â;5á:4â94á83ã73ä73å55æ66é69é69ê7;ë8<ë8>ê7=è7=é6:ï8<ì89è8:ã;:Ý>:Ó>7É<2À</¶8)²:)®;)ª;(©<(¨;'¥:&¥:(¥<) 9( ;) 9*¢6*µ>8ÛTXûepîK\ïI]éJ\ÛM[ÉQZ´VV ZR\8a`RPI7HM9NI5H@+;5\e67\17>O%Lf6l\8aTw\94\\84\9be\89\9ad\8d\9bf\90£k\94­t\98°|\83\95mn}\Q`C<J09F,AP1O_;Wj=czDe\82Bj\8bDk\91Fi\92Fe\91Fa\8fFc\8eGc\88Ci\89Fj\8dKl\8fMl\8fOl\8fOm\91Qn\92Rm\94Qm\95Om\96Pl\96Lk\97Jm\99Jr\9fNs¢Q{¬]{¬]z«\DA0DB3DB6CC9CC;CC;BB6BC3DF0EH-GJ-JM2ON9RQ?TREUSD\ZC\\D\]Oaaaihxrq\90{z¦\81\86\82¿\88\83Ã\88\84Á\84\81º\7f{®ys¡to\97om\95pl\9ern¡vp\9ewr\9awr\92to\85skzrinmb`l_Wj\Qk[Lm\Lo\Mo\Kq[Mq[No\Nm]Nl_Om`Os`Oz_N\86ZM\9f_S¤PE®B8º;2Æ6-Î1(Ö2)Ý5,â70á6/á4-à3,à4*Ý5(Ø7%Ô9%Ï:"Ê="É=$Ê>'Í<)Ò;*Õ9,Ï;-¿@-°;'¬5!®3!º8(Ä<.Ê:/Î5-Ø93ðNIñTMÙB9ÌB5¾?.¦1\1d³<(¾<,Á9+Á7*Â6)Å7+É9.Ï;1Ô;3áD=ãA<ä?;ç>;é=;é;:è88ç85ç85æ95æ74é;:ôJJÿ\[ÿdcøc_Ì=9Á82½4.Ã81ÕA=ÞE@ß=;Ù42â;5â;3â94â94ä84å84ç77é77ê69ë7:ë6;ë8<ë8>è7=è7=é6:ë7:é69æ89à;9Û>9Ñ>6Æ<1¾<.³8)®;)ª;(¦;'¤;(£:'¡:'\9f:&¡>+\956$\9c=+\9a9)\9a2'ÃPKíkmî\fìP^éJ\ßHWÍKS¹RS¤[R\92cQ\80jUJM8DL7JB/H9$B7\eFH#Up=g\93V~³o\82³q\83¥h}\92Y\83\8dY\8e\96c\89\97d|\8c_XfCGT89E-6B*:D,=J0JX7Wh>e|Fh\82Cl\8bEl\90Fh\92Fc\91Fa\91Ga\8fGf\8bFl\8cIm\90Nn\91Ol\8fOk\8eNk\8fOm\91Qp\97Tq\99Sp\99Sp\9aPo\9bNq\9dNt£Rw¦U|­^z­^y¬]IC3JD6IE9IE:IG;IG;HF9HG5IH3JJ2LL2NN4RP;TQ>XRDYTA]Y>[Z>\YH^[Tdahnk~xs\93}x \81\83\85\7f­\83|¦}w\9dun\8foi\85kg\82ie\88jf\8bmh\88mi\82mh|lfrkbgj`^g]Th\Nh[Kk\In]Kq_Kq_Kp]Lp]Np]Op]Ns]Ow]N~]N\87\L\92XL¡UH¤F<«9/º7-Ê7/Ó6-Ú6-Þ6-ß6/ß4-ß4,ß4,ß7,Ý7)Ø6'Ñ6$Ï:$Ì<$Ê<&Ë='Î;)Ñ;*Ó:,Î<-¾A/¯<'¨3!¬3 ¶9'Á=.É;/Ì8.Ì2*àA;ø[TàI@ÐD7ÊF7«2\1f¹>,ÊF7ÌB5Ê@3Ë?2Í?3ÔA7ÜE<ãF?â@;â=9ã:7â64ã54ä65å97å<9ä?9à=6Ü:5ß@:êMHêQLÓ@9¸)#¸-&¾5-É>7Ñ@;Ö>9Ú;8ã;;ç==â96â96â96ä86å95ç:6é99ê::ê88ê88ë8;ë8;é9<è8;ç7:ç7:é6:æ68â88Þ:8Ö=8Ì=5Â<1¹;-®9(ª;*¦;)¢;( ;'\9e;(\9e;(\9a;'\98?-\8c5"\99=.\988*\97/&Í\X÷y|ßX_æXdÚQ[ÊKR¹LO©VP\9d_T\90gU\80nVPW8?J*<;\1cC=\eUQ+lvD\83¢f\94Á~\87¼v\86¸s|\9ean\82Mu~Q\82\87^u}V[b@;D)4<%5=(=D2<E29C+CP2Ue>g{Hi\83Fl\8bGm\91Gj\93Gf\92Gb\90Gc\8eGh\8dJl\8fMo\92Pn\93Pl\8fMi\8eKj\8fJj\92Ls\9bTs\9dUs\9dSr\9eQr\9eOs¢Rw¦Uz«Zv¦Zu¥[s£YRK;RK;RJ=RJ=RJ=RJ=RJ=RK;UN<VO=WP>XQ?YR@[TD\UE\UEb[Hb[IaYLbYRe][kaiqftuj{zn\84|p\88\7fs\8b\7fs\89|p\84uj{mbre]jc`k`_g_\c_Z^^ZY^YUaZRbZOe[Og[Ki\Kk\Ik\Gm]Fm]Fj^HicMqfTqZJuOB\8bWJ\9c\P£YL¬ZL¥N=¦E4§<,±7(Â8-Ñ80Ü41Ý1-ß6/Þ7.Þ7.Þ7.Þ7.Û7+Ø6)×7)Õ8)Ô8)Ò9)Ò9)Ò9+Ò9+Ô8+Í;,½;+¶>-®9(©1 «2!·9*À</Ã9.È5+Î5-Ô:0ÛC8ÝK>ÔH9Â=,·2#ÝPFØJ@ÓE;ÔD;ÚG?ÞG@àC>à<:à74æ87ì::ì::ç77â64à93Ü=7ÙF>ÏB9Ä:/¼4(·1&¹5)¿;/Ã?3Ã:0Ê=4Ò?7Ú?:â=;ç;9ì89í9:ç7:å8:å8:å99å97å97å95å95à40á51ä65å76æ89ç9:ç9:æ8:ë;>æ9;ß99Ü=:ÖA=ÍB;ÁA6·?1©:)£<+ =*\9b<(\99:&\969'\958&\909&\90A0\8b<-\87/#\91/&¼LJämoçloÍVZ½LNµNOªQM¢UO\9bXO\97]R\95aT\8ajSWZ/:M\167F\ fTa)~\8eP\9b°o\9f¼y\9c½x\92µs~\9dah\80L\mCYdBT]BHP9?D0:=,@C2<@1:>0<C3:C0AN2Rd>]sBg\83Hp\8fKo\93Kl\92Gj\92Ii\93Kg\90Jl\90Pm\91So\93Sl\93Pm\92Mk\93Jm\96Jm\98Iq\9cLq\9eMr\9fNr¡Pt£Rv§UyªYzª^y¦cm\99Zb\8eOWN?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\M\81SF\9aVM«VO°RH·QE¯H9¬C0¬=,±9)¾8,Ë80Õ62Ù40Ý6.Ü8.Ü8.Ü8.Û7-Ú8-Ù7,×7+×7+Õ7+Õ7+Õ7+Ô8+Ô8+Ô8+Î:,¾<.¶>.®9(¦1 §2 ²:)¹>.¾<.Æ:-Ç4*Ë4)Ò;0ÜE:áOBßQCÝOCÛF?Ø@;Ó<5Ò;4Ö=7Ú=8Ü86Ý33ç77ë78î79ë78ç77å97â=9ÛB:ÊA7¿?4¸:,±6'¯5&²8)¸=-¿@1ÅA4Í@6×@7ß=8ã:7é77ï56ð69é6:ç6<ç7:æ89æ87å95å95ã:5â92ã:3ã:5ä;6ä;8ä;8å99å99ä:;ã;;ß<=Ù?=ÐA;Ä?6·=2¬;-¥;+ =*\9c=+\97<)\96;(\92:&\918&\8c9'\809'\808)\895*\9d<5¿QP×eeÑ^a·MM¬NL¤TM\9dYP\98\Q\97^S\97^S\98_V\8cfQ`_/Sg*^r3z\90O\99¯n¥¾|\99²p\88 bj\82HauBTe;JX7FP7?H59?158-:</AB4=?4:=2=A3:C0@M3Rd>^tEg\83Hq\90Mp\94Ln\92Hk\94Hk\93Lh\91Kk\92Qn\92Tm\94Sm\94Qk\93Lk\94Hl\97Hm\98Hp\9dJp\9dJp Ls¢Qu¦Tx©Xx©Xx¨^m\97Xb\8bQY\82H]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_P\88XN¢\T±VQ²IE¸E@¹@7¸>1·;/¸8+¼8+Ã9,É;/Ñ:/Ù8.Û7-Û7-Û9.Ú8-Ù7,Ù7,×7+×7+Õ7+Õ7+Ô8+Ô8+Ô8+Ò9+Í;,À>0¶>.¬9'£2 £3\1fª:&³>,¹>.Ä?0Ä8+Å2(È4*Ð<0ØF9ÜM?âNDÙ:6Ø43Ô20Ö42Û97á=<æ<<é;<í9<î5:ë27ê37è58å99á<:Ù@:¾8-µ:+±6'®4%­5%°8(µ<+»=.ÈD5ÏC6ÖB8Ü=7â94è64í55ï79ê69é69é69ç77ç77æ95å95å:3ã:3ä;4ä;6ã<6ã;8â:9á99Þ88Ý9:Ü<<Ú@>ÓB=È?9¹:1­7+¤6'¡;,\9d<+\99<+\94;)\93:(\909&\8f8%\8a9&z6#y6%\889, F=¹SOÀWT¸PO«IF¢MH\9cSL\99YP\97^S\97aW\97aW\98_V\8bePsrFz\8dV\93¦n¤¹\80«À\87\9e³{|\90[[o<?R$AS+AP/?L2:C06<.69058/9;.@A3=?49<1=A39B/@M3Qc=`vGi\85Js\92Or\96Np\94Jm\96Jm\95Nk\94Nn\95To\96Uo\96Sn\96Pl\94Kl\95Il\97Hn\99Ip\9dLp\9dLp\9fNu¤Sx©Xyª[u¦Wq X_\89JV\7fEOx>aXIaXIaXIaXIaXIaXIaXIaXI_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\8a[Q©b\¸[V¶FD¹<:Ã<8Æ;6Ä:0Â8-½8)¼:*¾?.Ç?/Ó9-Ù7,Ú8-Ù9-Ú8-Ø8,Ø8,Õ7+Õ7+Ô8+Ô8+Ô8+Ô8+Ô8+Ò9+Í;,Á?1·?/­:(¢3 \9d3\1d¢8"¬=)µ@.¼?-¿:+Ã7*Å5*Ë7+Î:.Î</Ó:2Þ65à24Û12Ý34à88å;<ê=?ì<>î7<ì38é06æ25å58á77Ú65Î61·5(¯7'®6&¬7&¬7&®9(²:)µ:*ÃA1ÊB4ÔA7Ü?8â;5æ95ë76î87í68ë78ë78ê86ê86è94ç:4æ;4â92á:2ß:4à;7Þ:8Ü:8Û97Ù99Ö<:Õ@<ÒC=ÊA;»;2¯6+¤6'\9e7(\9c;*\98;)\94;)\92;(\8f:&\8d8$\8c7#\879%\80=*v5#\815'\99E:ªPH¬MG©LG¦QL\9dPJ\98UL\94ZO\94^R\95aV\95aV\97aW\8dgT\89\85_\99©x­½\8e¦¸\88\90¡ts\86YN`8/A\e->\1c3B%:F.=F3;A3:=2:=4<=599-?@2<>39<1<@29B/?L2Pb<awHj\86Kt\93Ps\97Or\96Lo\98Lo\97Pm\97Op\97Tq\98Up\98Ro\97Pm\96Jm\96Hn\99Jp\9bKq\9eMr\9fNt£Sy¨X{¬]w§[m\9dSe\92M[\85FS|BNw=cZKcZKcZKcZKcZKcZKcZKcZKcZKcZKd[Ld[Le\Mf]Nf]Nf]Lf^Gg_Hh`IiaLiaNi`Oh_Pg^Oj`Ti`Qi`Qh_Nh_Nh`Mh`MhaNd^N`ZL[UGVPBPM>NK:NK:NK:PM<RO>TQ@VS@XWC[ZF]\H^]Kb`Qf^QmWJ\86[R¬ic¾c`ÁMMÈBCÐ;=Ô89Ó84Ì70Á9+º=)µC+¼B+Î;+×7)Ø8*×:+Ù9+Ö9*Ö9*Ô8)Ô8)Ô8)Ô8)Ò9)Ò9)Ò9)Ò9)Í;,Á?1¶>0«:(¡6"\9a4\1e\9b7 £=&¯B-³;*º;,Â:,Ç9-Ë8.Î:0Ð<0Ù:4é9<ì4<æ39ã28â38á48â38â25é6<é49ç4:ç7:ã9<Û76Ð21À0(´6(­:(­:(«:(«:(«:(¬9&¯7&¸:+Á;/Î>3Ø?7à=8ä;8è96ì87î66î66î66í74ê84è:3ç:3ä<3á:2ß;2ß<5Ü=7Û=:Ù><×=;Ô>=Î@<ÉB<ÅB:¹=5­7-£5(\9e7(\9a:*\96;)\93<)\91;*\8d:(\8a9&\898%\887$\838%\83@-u4"{3%\93G:¤QI¡NF\9eNG¡WN\98UL\92XL\90ZN\8d\N\8f]R\94`U\97aW\8fhW\8d\89f\98¥z\9d©\81\80\8ej]kHDS42@&$2\19-:&0;*5=.9?3<?4=?4:;3::099->?1;=28;0;?18A.>K1Pb<bxIk\87Lu\94Qt\98Ps\97Mq\9aNq\99Ro\99Qr\9aSr\9aSr\9aQp\99Mm\97Km\98Ip\9bLs\9eOt Qv¢Sx§Y{©^z¨_q\9fVc\91IY\86C]\86JV\7fGQzBe\Me\Me\Me\Me\Me\Me\Me\Me\Mf]Nf]Nf]Ng^Og^Oh_Ph_Ng_Jh`IiaLjbMjbOjbOjaPjaPjaPiaNh`Mh`Kh`Kh`IiaJjbKf_Mb]J^XHXRBSM=MJ9KH7IH6KJ8LK9LM;NO=PQ?QTASVESVE[YL^VIcQEzXN¡ha¶eaÄVUÖQRÙ@Cß:>Ü87Ô70Ç;.¼?+±C*µA(Ê;*Ô7(Õ8)Õ9*Ö9*Õ9*Õ9*Ô8)Ô8)Ò9)Ò9)Ò9)Ò9)Ò9)Ò9)Í;,Á?1µ=/«<)¢9$\996\1f\955\1d\9b;"§A*²B.¹@/¿;,Ã7*Å2(Ë4+Ò;0ß=8ê5:î3<ë6=é8>ç:>ä;>ã:=â9<ß58á7:â9>á=>Û=>Ñ96Ã2/¶0'¯9+«>*«>*©>*ª=)©<(©:'«8%¯6%¹7)Å;0Ð=3Ù<5ß<7ä;8é:7î87ï75ï75î85ë:4é;4ç<4ä=4â>5à?7ÞA:ÚA;ÙA>ÕA?Ñ@=ÍB?Á@:»@8³=3ª8-¡5(\9b5'\988(\95<*\91<(\8d<)\8a<(\88:&\869'\847%\836$\7f6%}:)t3!~9*\97OA£YN\9cRG\95OE\98VJ\95YN\90[M\8eZM\8c[M\8e\Q\93_T\99`W\91gW~xXy\83^r|ZU`B;E,/;%0;*0<.3=24<16<2<?6@A9?A6<<077+89+>?1:<17:/:>07@-=J0Oa;bxIk\87Lu\94Qu\99Qt\98Nq\9aNr\9aSp\9aRs\9bRs\9cPr\9bOp\99Kn\99Jp\9bLs\9eOv¡Ry¥X{§Zz¨]x¦]q\9fWg\94O]\8aEV\83B_\88NX\81IR{Cg^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<HO?JN?PQCXRF[OCiRD\83YM\96VL°SLÔZYÛIJâ?Bá99Ú72Ï;1Â?-´B*³<$É:)Ó7(Ô8)Ó:*Õ9*Ó:*Ó:*Ó:*Ò9)Ñ:)Ñ:)Ñ:)Ñ:)Ñ:)Ñ:)Í;,Á=0µ=/¬=,£<)\98\904\e\959 ¡A)­C-¶A/¿=/À6+Â/%Ç0'Ð6.Þ:8è59î6>ì;Aê@CæAEàBCÜ@AÙ??Í12Ð66Ó:<Ñ=;É;9¾71µ4.­4)ª<-¥>+¥>+¥@,¥>+¤>(¦;'©:'ª7%²7'»7*Å8.Ì70Ô:2Þ<7æ?9ë97ì95ì95ë:4é;4è;4å=4â>4àB7ÝC9ÚC<ÕB;ÏA=Ê?<Ç=;¿>9±<3©:/¢8+\9c6(\987'\948)\91:)\8d:(\8b=)\89<*\87<)\83:'\829(\807&\7f6%}6$x3#x5%\85B2\98UE\9dWK\94PC\90PD\95ZL\93YM\90ZN\90\Q\90\Q\92[T\95\U\98[V\8ebUkbEV`=JS4=G,6?*2=,4>35?66=68?8=B;CF=EG<CD6@>/;9*78*=>0:<17:/:>06?,=J0N`:awHk\87Lu\94Qu\99Qt\98Nr\9bOr\9aSp\9aPq\9bOr\9dNq\9cMp\9bLo\9aKr\9dNu¡Ty¥X\7f«`~©az¥]q\9cUf\91L_\89G]\87E^\88Ib\89PY\80ISzCh_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Pi`Qi`QmdUlcTjaRi`Qh_Pg^Og^Mh`MiaNiaLiaLiaLiaJh`IhaGh`IgaKf_Le^KaZG\WDUR?PM<ML:EF4DG4DH7DH7BI9BK:BK:CJ:IK>SQDSPAXL<eK:tE5\95H>ÂYSÙROàDEà::Ü75Õ;3Ê>/º=)µ8"É:)Ï8'Ð9(Ñ:)Ò;*Ò;*Ò;*Ò;*Ñ:)Ñ:)Ñ:)Ñ:)Ñ:)Ñ:)Ñ:)Í;,Á;0¶:.­<,§>+\999#\8f3\1a\937\1e\9f?'¢9#¯<)À>0Æ<1Ì8.Ð7/Ù<5ã?=ì=Bî?DéCEâDCØ@?Ê;7À50»1.¹/,¼51¾:6»<6³:2ª8.¤8,¡:+¡=-\9f>+ ?,¡@-¡@-¡A+£>*¦=*©;*­:(²7(¹5)¿5+É90Ö?8àC<å<7è;5è;5ç<4å<5ä=4á>5Þ@5ÜD9ØD:ÒC;ÊA9Ä?:¼;6¸85°93¢7-\998(\955'\936'\91:)\8f<*\8b:)\858&\88=*\85<+\83<*\80<)~:'|8%{6&{6&y1#\808*\8cG8\96SC\92PB\8bL=\90RE\99_S\91WL\92YN\94[R\96]T\96]V\97\V\96YT\8c^QaX;EM(6@\1e8A&>G2<E43=2-7.1817>6BE<GJ?HI;BC1?>*;:&78(=>09;069.:>06?,<I/N`:awHj\86Ku\94Qt\98Pt\98Nr\9bOr\9aSp\9aPq\9cMq\9cLq\9cLp\9bKp\9bLs\9eOw£V{§\\82­e\80«dx£\j\95P]\87EY\83A^\88He\8fPc\8aQZ\81JSzCi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi_Sj`Wj`Wj`Wj`Wj`Vj`Vj`TjaRjaRjaPjaPjbOjbOjbOjbMjbMg_Jg_Jf^Ie_Ib]IZXCSP=ML:HI7EH7AE6@D5?E7?G8?G8>F7GK=IK=AE4KJ6\Q;aE/\83J9Àj]Üg`ãUSäFEåA@àA=Õ>5É=0Æ=-Æ4%Ë5&Ì6'Í7(Í7(Î8)Ñ;,Ó=.Ò<-Ò<-Ò<-Ò<-Ñ;,Ñ;,Ñ;,Î<-»2(¶7.±;/¨:)\9a7"\945\1f\957\1e\9c9"¬A-±<+º6)Á4*Í6/×<7âC?éGDèDEèEHÝCCÉ:6»61´80®8.©4+«9/©9.¤8. 8-\9b9,\96:+\93<+\92<+\96=+\98=*\99>+\9a?,\9b@-\9dA, A-£@-¢;*¥:(«7(°6)¶6+¾8-Ä;1Ì<3Ú=6à=6â?8âA7âA9ÞB6Ú@6×@5ØH=ÒE;ÇA8»;2²5/ª3-¦1*\9f2+\999-\92;*\919+\8d:*\8b:)\88;)\87;+\85<+\809'~9)|9(|9(|9({8'y6&x3$w- \8bA4\97OC\93MA\8eL@\91QE\93UJ\8eRG\98\R\98\R\91UM\90TL\97ZU\95XS\94WT\93gZ]T5IQ*AK(BK,>H/7@+2=-4?14<1HPCZ^PW[JMO:DF.AA'==%:;)>?1;=2:=2;?14=*;H.Pb<cyJl\88Mu\94Qs\97Or\96Lp\99Mr\9aSq\9bQq\9eMq\9eKr\9fNr\9fNs\9fPv¢U{§\\7fªb\82­fx£^j\93O`\89G^\87Ea\89Jf\8ePh\90Td\89S[\80LTyEi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi_Sj_Yj_[j_[j_Yj_Yj`Wj`Vj`Tj`TjaRjaRjaRjaRjaRjaPjaPh`Mh`Kg_Jg_Jd]J^YEUR?ON:IJ:EH7BD6@D5?E7>F7>F7=E6@F8>E5>F1HL5MI0U?'\7fQ:¼sbËcXà_ZëUTçGGâ@>àA>Ø?9Î:0Í9+Í<+Ï=.Ï>-Ï;-Î;+Í9+Í:*Î:,Ð:+Ð:,Ð:+Ð:,Ð:+Ð:,Í;.É?5ÅB:¼B7®=/ 7$\961\1d\961\1d\9b2\1d¦5#²7(Ã;/ÑA8ÞE?æIDéJFêKHÞCAÛEDÐB>¼<3¯9/©=0¥?1\9f=0\9f?1\9c>2\97>0\94>/\8f>-\8a>.\87@.\88?,\8e=*\91;*\92<+\93=,\94?+\96?,\97>,\99>,\9f@.¡=-¤:,¨8,¬8+±8-¶:0¼9/Ê<2Ð<2Ó?5ÕA7×C9ÖC9ÔD9ÑE8ÊB6ÃA4¹=3°:0©6/¢5.\9f4,\997,\91;.\8e=,\8a;,\88;+\86:*\84;*\83<*\81<,~;*|;){9)y:)x9(w8'u6'w4$\804'\90D7\98NC\91K?\8cJ>\8fQD\92TI\90RG\93SJ\98XO\96UO\97VP\9c]X\94WR\8eSO\8acT]W5Xc9_jBZfBIT66C)4@*<H4OXGYbQ_fTW\FJN7BE*??#<<"9:(=>0:<19<1<@25>+;H.Pb<dzKl\88Mu\94Qt\98Pr\96Lq\9aNr\9aSq\9bQs Or\9fLp\9dLq\9eMt Qx¤W|§_\7fªc{¦ao\9aUc\8cJ]\86D`\88Ie\8dNe\8dNc\8bOd\89S[\80LTyEi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi_Uj_[j^^j^^j_]j_Yj`Wj`Vj`Tj`Tj`Tj`Tj`Tj`Tj`Tj`Vj`TlaOk`LiaNiaNf_La\HYVCSR>MK<HI9DF8AE6AE6?F6>D6<D5=F57@-@H1IK3F?%W?'\87ZC·s`¶VJÙbZðebìTSæFHëGHæCDØ:7Ë7-É:*É:,É:*Ë9,Ê8)È6)È6'Ê8+Ë7)Ë7+Ë7)Ë7+Ì8*Ì8,Ë8.Â3-¾5/¶6-­3(¡0"\9e/\1e 1 §3$¼A2ÇC7ÖG?áLFçLGéJFåFBßD@×CAÏDAÁ@:±;1¤</¡A1\9cE4\98E3\93D3\91D4\8fB2\8aA0\85A.\82A/~A.\7f@.\86:*\8b9+\8b:)\8a;*\8b<+\8d<+\8e=*\8f<*\96?.\96=-\9b;+\9d9* 8+¥9-¨:-®9/¸:.¾90Á;0Ä>3Å?3ÅA4ÃA3ÁA4¶;,²:,ª8-£7+\9e6+\997,\987.\93;/\8b</\88<,\87;-\84;,\82:+\80;+\80;+\7f<,};+z;*z;,w9*v8)u7(t6)v4&\88;1\94F<\96NB\8eJ=\88H<\8dOB\91SH\92RI\92OI\99TO\99SQ\98WS\9a]Z\93YU\8d[T\8dl[\81}X~\89^\80\8balxRLX46D#=J.LZ@eqYeoW]eMPU>EI0?C(=@#:<$89';<.8:/9<1=A36?,<I/Pb<dzKm\89Nv\95Rt\98Ps\97Mq\9aNr\9aSp\9aPu¢Qp Ln\9dLp\9fOu¤Vy§\}¨`|§`p\99Uf\8fM\\84E\\84Ee\8cMi\90Qf\8dN`\86Ic\88RZ\7fLSxEi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QjaRjaRjaRjaRjaRjaRjaRj`Vk`\k__k`^k`\k`ZkaXkaWkaUkaUkaUkaUkaUkaWkaWkaXkaWnbRmbPjbOjbOhaNe^K_ZGYVERO>MK<GH:DF8CE7BD6@D5<C3<H49B-FJ3LF0O:%qL9\9acOª^N¡A5ÆSLçc_ð^^íSUëJOéDJáAAÌ91Ç9-Å7+Å7+È8-Ê:/Ë;0Í:0Ñ>4Ñ>4Ò>4Ò>4Ó?5Ó?5Ó?5Ó>7Ó?;ÑB>ËD>ÆF=ÂF<ÃI>ÇM@ÎPDÙSJÝPGâMGäIEäGBâC?àA=ÛB=ÕFBÉD?º?7«=0\9f>.\9aC0\95G3\94I6\8dF4\8cE3\88C3\85B1\80A/}@.zA.|?-\82:,\868,\859+\86:,\86:,\87;-\87;+\88;+\89:+\8b:)\8e8)\908*\959,\99;/\9d=/¢<0ª:/­8.¯9/°:.°:.°:,¯9+®8*¨7)¥7(\9e6)\9b6*\957+\928-\909/\8e<0\88<.\85<-\84;,\819*\7f:*~9*}:*};+|:,z;,y;,w9*s8*q6(r7)u5)\8cD8\92H=\91K?\8aH:\87I<\8bOD\93TK\97TL\96QL\9bTP\97QO\94SO\96\X\90_X\90h^\97~j\94\94p\85\92fu\82WYh?CR+?O*P`<crQetU\iKNX=CL1?E+>B)=A(;='78(:;-79.9<1=A37@-<I/Oa;bxIl\88Mv\95Ru\99Qt\98Nr\9bOr\9aSo\9bPq Oo\9eMo\9eMs¢Rz¨]|ªay¤]t\9fZc\8cJ^\87E[\83D_\87Hg\8eOj\91Pf\8dL`\87Hb\87QY~KRwDi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QjaRjaRjaRjaRjaRjaRjaRj`Tk`Zk`\k`ZkaXkaWkaUkbSkbSkbSkbSkbSkaUkaWkaWkaXkaWocUnbRkbQkbQkbQhaOd]M`ZJXRBRO>NK<IG8GE6DE5BC3>B1=I1?G/LG1S>+g=-\95ZL­_S\9c>4\9e3+¶?9ØXUóigödeëRUæJNèNPÚIDÓF<Í@6Ë>4Î@6ÒD:ÕG=×G>ÚJAÚJAÝJBÝJBÞKCÞKCßJCàKEëSRèTTãSRÜROØSLØSLÛTNàUNàLHáIFãEBâC@äB@âC@ãDAàFDÙJFÊE@¹>7¬=2¡?2\98B1\92E3\90G4\8cE3\88C3\87B3\83@0\81?/~?0z?/|>/\80:.\839.\839.\839.\83;-\83;-\83;-\83;-\819*\83:+\859+\87:*\89:+\8d;-\8f<.\93;/\9a:.\9e9-\9f9- :,¡9,¢8+¢8*¢8*\9f8)\9c8)\988(\948)\8f9*\8c:,\89:-\87;-\84:-\82:,\819+\808*}8)}7+|8+{9+z8,y9-x:-v8+q5*o5)q7+t9+\8cH;\8dI<\89I=\84I;\85K?\8cRF\93WM\98XO\98QM\9cUQ\97SP\93VQ\92`Y\88bW\83g[\86zdnrQZi@JY0AR(IZ0Wi?dvNj|VXiEL[:?L.:D)<D,>C-<A-:=,89+:;-68-8;0>B47@-;H.L^8_uFi\85Jt\93Pt\98Pt\98Nr\9bOs\9bTp\9cQn\9dMm\9eLp¡Pw¨Y|ªaz¨`r\9dXi\93QZ\83A\\84Ea\88Ie\8cMg\8eMg\8eKf\8dJd\8bLc\86PY{IRtBi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkaUlbYlbYlbYlbVlbVlcRlcRldQldQldQlcRlcTlbVlbXlbXlbXocUnbRkbQlcRlcRkbQg`Pd]M^WGYSCSM?MJ;KH9GE6EB3?B/;H.?H-OC-a=-\83E:«XR´NJ\9e,+²:9¹=;ÓSRòpnþvvñefëX^ð^_ãUQÚPFÔG@ÐC:ÑD=ÔG>ÖGAÖG?ÙHCÚJBÜHDÝJCÞJFÞKDàKGàKGâHHáGIÜHHÙGGÖHD×HDØGDÛEDàBAäABæBAèBBçCBäB@ßA>ÛA?ÛJGÊC?¹<6®>3¢@3\98A0\90A0\8dD3\8aA2\88@1\87?1\85=/\82<0\80</\7f=1\7f=1\81;1\81;1\83:3\81;1\81;1\80</\80<1\7f=/\80</\80=-\81<-\80;,\82:,\819*\828+\837)\8c:.\8f8.\919-\94:/\97;.\9a=.\9e</\9f>.\999)\969(\93:*\90:+\8a;,\87;+\84;,\82:+\82:,\819+\7f7)~6({5){5){5)z6)x6*x8,w9,s8*p4)o5)r:-v<0\8bM@\89K<\84J<\82M=\85QC\8bVH\92XM\97WN\93NI\99TO\97VR\96]V\90e\{^PfVF`^GEO->N)?O(J\2_rEk~QexKXj@M_7@Q-6E&7D*=F1=D4:>07;-8:,:;-68-8;0>B47@-9F,I[5[qBe\81Fr\91Ns\97Ot\98Nr\9bOs\9bTp\9cQm\9cLo Os¤Ux¨\z¨`s [i\93Q`\8aHY\81B^\86Ge\8cMg\8eMf\8dJe\8dGe\8dGf\8dLa\84NXzHQsAi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkbSlbXlbVlbVlcRlcRldOldOldMldMldMldOldQlcRlcTlbVlbVocUnbTkbSlcTmdUlcTi`Qf_Ob[K^WGXQARL<OI9JG6IC3AC.:G+@F*U@+xG9£PL´HH¶8<º39ÈAEÄ?@ÊJIßb`ñqpðnnçbeâZZÛQNÕLDÏD?ÍB;ÏD?ÐE>ÐB>Í@9ÒC?ÒC=ÔC@ÕD?×CAØD@ÙECÚDCÝADÝADÞDFÝGHßIHàJIâHHåGHçACêADìBEìBEçAAâ@>Û=:Õ=:ÚFFÉ=<¹83°;2¦@4\98?1\90>0\8eA1\8a</\8a<0\89;1\88:0\8781\8691\85:4\84;4\81;3\80<3\81:4\80<3\7f<3}=1}=3|<0|<0|=.|=.{<-|:,{9)z8*{7*\82:.\839.\879-\899.\8d9.\91;.\95<.\96=-\929)\91:)\8d:*\8a;*\87;+\83<*\80;+~;*\808*\808,~6*}5)|4(z4(z4*y5*u2)v6,v8-r6+o3)o5*s:/x@3\8bQC\86N?\81N=\82Q@\85VF\89XI\8eUJ\91RI\92OI\97TN\93TO\91\V\8afZn[JPK7EK1AN0KZ9WgC`rJgyOdzLVl>G]/AV-7H$1@!6B*=F5<D98=67:39;.;<.68-9<1?C57@-7D*FX2Vl=a}Bo\8eKq\95Ms\97Mr\9bOt\9cUq\9dRo\9ePq¢Qu¦Wv¦Zs¡Yj\97Rb\8cJ[\85E^\86H`\88Ic\8aKe\8cKf\8dJf\8eHf\8bFe\89I`\83MWyGPr@i`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkbSlbVlcTlcTlcRldQldOldOldMldMldOldOldQlcRlcTlcTlcTnbTmaSmaSmaSmdUlcTjaRg`Pd]M_YIZSCTN>PK8MH5ID1DC.@F*DD([B,\88TG¯\X«>A¬/3ÎINÆ?EÀ;>»;<ÄFGØZ[ãefÛY[ÌGHÑJGÐEBÍB?ÐB>ÔFBÔFBÐB>É>7ÏD=ÏD=ÒD@ÔEAÖEBÙECÚDEÝDFÞ?Cß@DÞBEßEEáGGàFFàBCá>?èBDé@Cè>Aç=>ä>>ãA?áC@ßECÖBBÅ98¶50°;4¦?6\9a>3\8f=/\8d?2\88</\87:0\87:0\8781\8781\8781\8894\88;5\8292\80:2\80:2\7f;2~<0~<0|<0|<0x8,y9-z:.z:.{<-{<-z;,z;,};/\7f9/\807.\817,\846*\855*\867*\867(\8a8*\889*\88;+\85<-\84<-\80=,~<,};+}9,}7-|6,y5*z4*x4)x4)x5,r2(u5+v8-r6+n4)n5*t;0xB6\8aUG\84PB\80O@\84SD\88WI\8cVJ\8cRG\8dNG\95TN\94UN\8bRK\84XM\7fdSeZDGK2=J,IX9ZkIhyUcxQYnESh=Nc8J_4:L&0?\1e,9\1d5>)=C5<B8:<79<5;=2;=079.9<1?C58?-8B)EU1Uh;azCn\8aMr\93Nr\96Nr\9aQs\9dSq\9dRr Uu£Xv¤[t¢Zo\9aUf\90N^\88H[\83Dd\8cNa\89K`\87Hb\89Hf\8dJg\8eKe\8aEa\85E`\83MWyGPr@i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbQkbQkbQkbQlcRlcRlcRlcRlcTlcTlcTnbTk]Pp`QtdWrdWnbVj`Th`ShbTgaSebQc]M[VCVQ=SN8NH2GA)KG,I?$bI3\91gW¶xm»le¸YW¹OO¶BE½BEÂDGÈFHÍHKÐJKÒLMÓKKÏEEÐDEÓEDÖFEÕFBÒC=ÏD=ÏF<ÈD8ÉE9ÊE<ÌE?ÒD@×CCÚADÛ?CáBFâBDáCDàDEàDEáFDãEDäDDãCCäB@ä@?ã?>ã?>â@=â@=ÞC?ÓB?Å>:¶93ª70\9f:0\97=2\8e>3\86>2\83?2\81?3\81=2\81;3\8493\8783\8881\8992\85;0\84<.\84<.\83;-\81;/\80:.\80:.\80:.~:-~:-~:-~:-};/};/};/};/}90}90~80~8.\807.\807.\807.~8,\808,~8,}9,|8-{9-z8,x8,x8,x8.x8.w7-u7,v6,t6+s5*q5+m1'r6,n4)m3(o6+m4)q8-\7fI=\85SH\85SJ\86RG\88RH\8bPH\90QJ\94QK\95RL\93TM\8dTK\89[N\82cQo_HYU:MV7O_;j~YbxQYoHUjCRg@Mb;IY5CR17D&4>#2:#6;'<>0@B5@@6<>358-39-4:.7:/9=/;?.=B,<E(S_;arFn\86Rs\91Ur\95Qr\9aSs\9dSr\9dUu\9eZ~§e~§ep\98Yb\8aK^\86G^\86H^\84G`\86Ib\88Kd\8aMf\8dNe\8cMc\8aK`\87H^\84G_\82LTvDKm;i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTnbTrbSqaRrbUrdWrfZogZmeXjdVgcWkhYmjYjgThcOc^H[U=RL4PJ0H>%Q?)kP=\7fXG\84NB\88E=\93D?±WV¸TT»QQÀPOÀNMÁMMÂLJÃKJÐTTÈHGÂ=>Ä=:ÐB@ÓEAÏB;Ç>4ÊD9ÉE9ËF=ÍG>ÔFBØDDÜAEÝAEáBFáCDáCDâDEâDCáFDáFDáFDàEAßD@àB?ßA>àA=àA=àA=ÞC?ÔE?ÈC<º>6¬:0 90\94:/\8a<0\82<0\80A2~@3~>4\7f<3\83:3\8691\8881\8990\87;.\85<-\84;,\84;,\83;-\82:,\82:,\82:,\7f9-\7f9-\7f9-\7f9-~:/~:/~:/~:/}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>\84RI\85SL\88QJ\8bPJ\90QL\94PM\95QN\94SO\8aOG\85SH\80[K{ePsiPhkLfqQgxT^tMXnGPf?La:K_:K\:GV7CP4;E,8@)6;'7:)<=/?@2>>2;=04:03;05;16<0:</<?.>A,>D*Q[9^mDk\81Rp\8cRp\93Sq\99Rs\9dSs\9eVx\9f^|¢ex\9eak\91T`\86I]\83F]\83F\\82E`\86Ia\87Jc\89Le\8bNd\8aMb\88K`\86I^\84I]\7fLRtBIk9i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTnbTqdTo_Pm]Pm_RqeYog\ldYhbVfbWqma{xi~{j\80zjzubpiVe`JTT<FF.C>(MB.S@/U8(]7*l=3n70u91~;5\87@:\92IB\9bPJ¥XP­ZR»^YºSN·GE¼B?ÈDBÑFCÓD@Ï@:ÐA;ÐC<ÒE>ÔG@ÖGCÚFFÛEFÞDFßCDßCDßCDßCDàDEßEEßECßECÞE@ÞE@ÜD?ÛC>ÜC=ÜC=ÜC=ÛC>ÖE@ÎE?ÃB<³>5¢:1\948-\889,\83;-\82@2\7f@1~>2\7f=1\83:1\8691\8881\8990\87;.\84;,\84;,\84;,\82:,\82:,\82:,\82:,\7f9-\7f9-~:/~:/~:/~:/~:/~:/}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=\87PI\87PI\8bPJ\8eQL\91RM\92SN\94UP\91VP\8cWO\87[P~^OtbNoiQorUlwYfwUQeBK_:EY6DU3EV6GV9GT8ER8?I0<D-9>*7;*:<.<>0;=/9;.6<25=26<26<0:</<>0=@-=C)MW5Zi@f|Ml\88Nn\91Qq\99Ru\9fUt\9fWz¡`w\9d`n\94Wc\89L\\82E\\82E\\82EZ\80C_\85Ha\87Jb\88Kd\8aMc\89La\87J_\85H]\83H[}JPr@Gi7i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTnbTrdWoaTm_Rk_SkaWlcZle[jf]jf]xti\88\84x\91\8d\81\95\8f\81\92\8c~\89\82r}zg`cNOT>DG2FE1HC0F=,L<,VC4P9+R6*V4*Y5)\6+a9/e=1m=1\8aKB\9cRI®UO¶NK¼FDÆABÒDCØFFÔ@>ÕA?ÖB>ÖE@ÙECÚFDÛEDÝEDÞDDßCDßCDÞDDÞDDÝEDÝEBÝEBÛFBÚE?ÙD>ØE>×D<×D<ÙD=ØE>ÔD<ÒE>ÉF>ºA8§;1\988,\8c9+\85<-\83@0\7f@1~?0\7f=/\83:1\84:/\879/\88:.\84:-\84;,\84;,\83:+\82:,\82:,\819+\7f:+\7f9-\7f9-~:/~:/~:/~:/~:/~:/}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*|F<\8aOG\8cOJ\8dPK\8fRM\90SN\91VP\90WP\8cZQ\89]R\85aUy_PiZGd_IdhO\fKN]@EU8AQ4=M0<K.?M3CQ7FR:GS;BL4>G2:A/9=,9=.9=.8<-7;-7=36=56;46<2:<1;=/<?,<A*JS4Ve>bxIj\86Ln\91Qs\9bTw¡Wx¢Z{¢ar\98[e\8bN\\82EZ\80C\\82E\\82EZ\80C_\85H`\86Ia\87Jb\88Ka\87J`\86I^\84G]\83HY{HNp>Eg5haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTrfXth\sg[mcYjaXle]snhzwp\81~w\90\8d\86 \9d\94¨¥\9c«§\9c¨¤\99£\9d\91\99\96\87z{kcfSOR?GJ7EH5BE2BE2EH5KL<JH9GD5D>0A9,A7+@6*F4(S5*qB8\8cPH\9fPK¯IG¿GIÌEIÓBEÖ@BÙ@BÚBAÛCBÚEAÚEAÜDAÜDAÞDDÞDFÞDFÞDFÞDDÝEDÝEDÛFBÚFB×FAÖF>ÔE=ÔE=ÓF=ÔE=ÕF>ÔA:ÓC;ÎE=ÁB9®>3\9e9-\91;.\8a</\84?0\81?/\80>.\80=-\81;/\84:-\86:-\87;.\84:-\83;-\82:,\82:,\82:,\819+\7f9-\7f9-\7f9/~:/~:/~:/}:1}:1}:1}:1|90z:0|90y9/y9/x8.x8.v8-y;0y;0x:/v:/v:/u9.u9.t:.r8-q6.q6.p5-o4,n3+n3+m4+j1(m7-j4*h2(j4*f2'j6+}D;\8dNG\8fNH\90QJ\90TL\90UO\8eWP\8aYR\83[Q{YMv\OkZJ]UBYXDY^HOYA?K3:H/7E.4B+5A+8D.=I3CL7EN9BK6?H5<E2:A/8?/7>.5<,4:,5<45<56;56;49;0:</;>-;@)GP1Ra:`vGi\85Ko\92Ru\9dVy£Yy£[x\9f`n\91W`\83IZ}C[~D^\81G^\81G]\80F`\83Ia\84Jb\85Kb\85Ka\84J`\83I_\82H^\81IW|ILp@Bf6haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTkaUndZpf\lcZkd\rmg\84\81|\91\90\8c§£ µ±®ÄÁ¼ÉÆÁÉľÅÀºÀ¹±¹²¨¤\9c\8f\88\82rfcTPQ?FI8>E3;D1:F28E38E38C2:B3<B4@C8CE:GE9>4(P:/e?6\80EA¡PO¿X[ÊQVÊCIÕFJ×EFÚFFÛEDÝEBÞDBÝD?ÞCAÞDDÞDFÞDFÞDFÜDCÜDCÜDCÚDCÙEA×FAÕF@ÓF=ÒE<ÐF<ÑG=ÔE=Ô?8Õ@9ÐC:ÆC9¶A7¥=0\96=/\8c=.\86>/\82?/\81>.\80=-\81<-\83;-\84:-\85;.\82:,\82:,\82:,\82:,\819+\7f:+\7f9-~8,~:/~:/~:/~:/}:1}:1}:1}:1z:0z:0y9/y9/x8.v8-v8-t8-w9.u9.u9.t:.t8-s9-r8,r8-q6.q6.p5-o4,n3+m4+l3*j4*h2(l6,i3)f2'h4)e1&i5*{B9\8eMG\92MH\91PJ\8fTL\8dVO\87XN\81YO|\Qs\Nk[L`WFVSBPSBJQ?@I64@,3<+2;*09(09(2;*5>-9B1<E4?H7?H5>G4:F2:C25@/3>-1<,3:33954954928919;.;>-;@*CL/O^7]sDi\84Mp\93Sw\9fYy£Yw¡Yq\98Yf\89OZ}CX{A\\7fE]\80F]\80F^\81G`\83I`\83I`\83I`\83I`\83I_\82H^\81G]\80JV{HJn@Ae7haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlbVj`VjaXkdZkg^upj\88\85\80\9f\9e\9a°°®ÃÂÀÓÒÐâáßçæäçãàâßÚÜ×ÓØÏÈμ²¸¥\97\97\87zym]_YIKL:@E1;D/>J6=H7=F5;C4;>5:;3983880==3C<2N71a84\88HH¯]_Å`dÊWZÍQSÓNO×MKÛKJÞHGáFDãDAâBBßCDÞDFÞDFÝCEÝCEÜBDÜBBÛCBÚDCØD@ÕD?ÓF?ÒE<ÐF<ÐG=ÔE=Ù@:Ù@:ÑB:ÈC:¼C:¬@4\99;/\8c9+\89=/\83>.\81>-\80=,\81<,\83;,\83;,\84<-\82:,\82:,\82:,\819+\7f9-\7f9-~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)zA8\90MG\92MH\91PJ\8eUL\88XN\81YOxZOr\Nk^N^WGRPAKN=CJ:9B12:+08)17+17-06,/5+/5)08+2:+4<-9D4;F5=H7<I7;F56C13@,1>-.800621622717829;0:<.:?)?H+KY5[qCh\83Lq\93Vw\9e[w¡Ys\9cVg\8dP^\81IUx@WzB[~F[~F[~F]\80H_\82J_\82J_\82J_\82J^\81I^\81I]\80H]\80JUvGJk@@a6haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlbVpg^ng_lgatqj\87\84\7f¡ \9c¼¼ºÍÏÎÏÏÏàààòòòúøùû÷ö÷óðñìéîãßèÐÆÝÁµÁ«\9d¢\91\81}ub^\GKM7CH2AI2AI4@G5BD7AA7B=9C97?:69<5>?7B71J.+d66\8fQR³giÆnmÀ\\ÇZWÐVS×QNÜLKâHHæCDåBCßCFÝDFÝDFÝCEÝCEÜBDÜBBÜBBÜDCÙCB×C?ÓD>ÒE>ÐF<ÐF<ÔE=ÜC=ÛA9ÒB:ÊD;¿E:°A6\9c:-\8b5&\8a</\85=.\82=-\80=,\81<,\81<,\83<*\84<-\82:,\82:,\82:,\7f:+\7f9-~8,}9.}9.~:/~:/}:1}:1}:1}:1}:1{;1y:1w;1x90u9/t8.s9.r8-q7,r8-q8-p7,n8,p7,m7+o6+o6+o6-o6-n5,m4+m4+j4*i3)h4)f2'k7,h4)c1&e3(b0%e3(xB8\8eMG\92OI\8eRJ\8aUM\84XOzZOq[Mi]MZTDIJ:?C4>D69A208+/7*6<247058157247025.06,08-19,6A3:E5=J9>K9<I76E22A,1>-,6..400511606718:/:<.:?+<E*IW4YoAg\82Mp\92Vv\9d\u\9eXp\99U`\86IX{CSv>WzB[~FY|DY|D\\7fG_\82J_\82J^\81I^\81I^\81I]\80H]\80H]\7fLStGHh??]7icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSjcSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUldWibZgd]vsn\93\92\8e¯¯­ÄÆÅÚÜÛêîïóôöö÷ùüüþÿÿÿÿÿýÿûúü÷ôýòì÷áÔòØÇàʵƶ\9fª \87\88\84ibbFEH-DH/CG0FE1GD5F<3C60F42H:9>=9>?:B:7I75cGF\92jjÅ\93\92è­©Ò\8b\87ÇtnÀ]XÆSPÕONßJLçFKéFKßEGßIKÚDFÔ;>Ø>@áGIàDGÖ:=Ú@@Ú@@ÙA@ÖB>ÔC>ÑB<ÐA;ÑA9ÞC>ÛA9Ó@9É@8¾B8°@5\9f:.\908*\8c=0\87>/\83>.\81>-\80=,\7f<+\81=*\81<,\7f:+\7f9-\7f9-~8,~8.|8-|8-|8-{8/|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>6\8cOJ\8fPK\88QJ\81RJ}YMx^QhXITN>DE5>E5:C25@04</3;04:04:068378366446135005./6..6+.9+2=-6C2:G6:I68G44C.1?.*4+,2.-2..3-45/79.:</:?+6>&DR1WlCh\82Rs\94]w\9e_r\9bWk\94R[~DXyDTu@Tu@WxCZ{F[|GZ{F^\7fJb\83Nb\83N^\7fJ\}H_\80K`\81L^~MTsJFd@<W4icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUldYgd]onj\86\85\83¤¤¢ÁÃÂÖÚÛêîï÷ûü÷ûþøüÿüýÿþþþÿÿýÿþúÿüùÿúóÿðàûëÔíßÅ×ͲÀ»\9d¤£\84\82\83cgjKLQ3GJ/EC.GB/H>2I:3L95K<9?:7BA?MHE]RPyjg£\8e\8bβ®èÅ¿ÿ×Ñ벩Í\82|Àc^ÊVVØRSßHMÚADÖDEÕEEØHHÜJKÛEFÕ<>Ö<>ÛACÙ??Ù??ÙA@×A@ÖB>ÓB=ÒA<Ó@9ÜA<Û@;Ó@9ËB:¿C;±A6 ;1\928-\8c=0\87>/\83>.\81>-\80=,\7f<+\81<,\81<,\7f:+\7f9-\7f9-~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>5\81JE\87RL\87XR~XOrVKdRDRI:>?/:A16A05@03>04<14<15;17:379477577557246116//6./7,.9+1<.4A08E49H58G44E24B1.8/.5..3--2+23+46+8:-9=,7?(DQ3WlEh\82Ut\95`w\9dbp\98Yg\8fPY|DWxCTu@Tu@VwBYzEYzEYzE[|G_\80K`\81L\}H[|G^\7fJ^\7fJ^{MSnKF_A9R4icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUneVneVlfZed_y{x\97\99\98²¶·ÍÑÒäéìôùüúÿÿûÿÿüÿÿýþÿþþþÿþüÿÿûÿÿúÿÿôþüçúùÝïðÑáåÄÒØ´½Å  ¨\83\87\91l`gEQX7EH-DC.JD4LD7KA8I>:C;9SJKia_\81wv\9c\92\90¾³¯ÙÎÈêÜÓþèÝÿóéÿäÛð©£ÃecµBEÇDIÚRVÛUTÑMKÊDAÍCAÔFE×EFØDDÙCDÖ=?×>@Ø@?Ö@?ÖB@ÓB?ÓB=ÔA:Ù@:Ù@:ÒB:ËE<ÀD<²B7¡<2\939.\8e<0\89=0\83>/\81>.\7f=-~<,\80=-\80=-\7f9-\7f9-~:/}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<}PJ\81VP~YQpTI^J?OC7?<-46(2;*0;+1<.2=/4<15;17:17:379479668357257227007/08-.9+0;-2?.5B17E48G48G49F54>33:2/4-,2(/0(13(57*6:)6>'ER6YmJk\84Zw\97fw\9cfl\93Z_\87KWxCWuCTr@Tr@VtBXvDYwEYwEZxF]{I_}K]{I]{I_}K^|JZwKPgJAW@3I2icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUneVneVneVneVmg[jkf\83\87\88£§¨¹¾ÁÐÕØåíïóûýõýÿûÿÿûÿÿüÿÿüþûýþùþýøÿþ÷ÿÿóøýæôýÞî÷ØæòÎÝéÃÎÚ´¶Á\99¡«\86\80\87efmLMR4FH0HJ5KI:HD9D@7OGDj`_\8b\81\80¤\9a\99·¯¬ËÆÂÞÛÔêæÝúñèÿûñÿ÷íÿÝÕû¶±å\8f\8eÊcd°@?ÃPKÉTMÉPHÃF@ÈGBÔMJÖKHÐ@?Ò>>Ó??Õ?>ÕA?ÕA?ÓB?ÓB=ÓB=Ö>9Õ@:ÒC=ÌE?ÀE>²A9¢=5\95;2\8e<1\89=0\83>/\81>.\7f=/~<,\80=-\80=-\7f9-\7f9-~:/}9.}9.|8-{8/{8/~;2~;2|<3|<3{;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'd4*a2(].$a2(b3)Y* a2(yNE\81\VvWRiNGWC:I<3@:.:;-8<.08)/:*3;.4</6<25;169069079468368349238139/19.19..9+/:,0=,2?.5B17E4;H6<I89C87?428.-3'.0%/1$24&48'4<'ER8]pPr\8bd{\9anw\9cif\8dXU|ESsATr@Sq?Sq?Tr@UsAVtBVtBWuC[yG]{I\zH^|J_}K\zHWrIJ^E<M;.?-gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUneVneVofWofWng]qqo\87\8c\8f¤©¬·¿ÂÍÕØãíïòüþôþÿøÿÿûÿÿûÿüýÿúüýõúüñøøìöøêöÿèóÿäðýáîùÙéôÒÞèÅÊÒ­¶¾\99\9d£\81}\82bY]BGL5FK7FJ9CG9AC8c^X\85}z«¡\9fÁ·µÌÂÁ×ÏÍæáÝñîéú÷ðüõëÿñèÿòéÿôìÿåß騤·hc¦LAµPDÁYNÇ[QÆQH¿D=ÂA<ËDAË@=Î@>Ð@?ÑA@ÒC?ÑC?ÑC?ÒC=Ó?;ÒA<ÐE@ÉE@½C>¯@9 >5\95=3\8e<1\89<2\83=1\81=0\7f=1~<.\7f=/\7f=/~:/~:/~:/}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:/68-47.6904923812:/2:/2:/19.19,.9+.9+/:,0;-3>.6C2:E5<G7=E8:B55;/06(02%/1$13%15$2:%GS;buWw\8fk|\9brq\95g\\82QJp=Oo>Qn>Qn>Qn>Qn>Qn>Sp@Sp@WtD[xH]zJ]zJ_|L_|LZwGRlECU?6D7(6)gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUneVneVofWpgXpgXng]lnmz\82\85\93\9a «µ·ÄÎÐÜæèí÷ùôþÿõþýöÿüúÿúûÿùûþóøúíõöèñôãôýêôýèôüåóùßòöÛéìÍØ×¹ÅÄ¥±°\92\8f\8eregOMP;GK:FM=GOBKQG{{s\9f\9a\94ž¸ØÎÌßÓÓçÛÛóëéü÷ôðïêüüôÿÿöÿýôÿùïÿóêÿçÞÿ×ËØ\93\83¸eS£J:´TF½WIµF;·@8ÈKEÇC>ÊC?ÌB?ÎC@ÎC>ÎC>ÍD>ÍB=ÐA;ÒC?ÎDAÅD?¸A=ª=8\9e;5\95<4\8e;3\89<2\83=3\81=2\7f=1~<0\7f=1\7f=/~:/~:/~:/}9.|90{8/{8/{8/|<3{;2{;2z:1y:3x92w81u91n70l7/l7/j8/i7.i7.h6-g7-g7-g7-f7-f7-f7-f7-f7-f7-h70h6/g5.g5.g6/h70g6/f5.a2*e6.^2)\0'`4+a5,i=4uSJXG@E>6<5/95,;8/8:/57,36+69.5;/7:/69.69.58-57,36+28,19,19.19,19.19,19,19,.9+.9+.9+/:,0;+3>.6A17B2<D5:C28?/5;-57*24'13%04%18&HT>ex\u\8dmt\92lf\89_RwKBh9Kk<Nk;Pm=Pm=Nk;Nk;Ol<Qn>VsCZwG]zJ^{K_|L_|LVsCNg@<J9/:2$.&gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUneVneVofWpgXqhYoh^hikmtz\85\8c\94£¬±¿ÈÍÓÞâåðòðüüòüûõþùøÿ÷úÿöüÿòúýìøùçö÷çööê÷÷ëú÷èüöæýõâ÷ìÖçØÃÕƯÀ±\9a\9e\93}un[ZWFPQCSVK[bZeld\95\98\8d²²¨ÕÎÆèÝÙóããúêëÿñôÿ÷ùÿþûþýùùúôøùñüüðÿÿóÿÿñÿûêÿæÑñª\94¼o[©VD®RCµPD»LA¿JAÂG?ÆE?ÉE@ÊE@ÊE>ÉD=ÈC<ÉB<ÑC?ÐE@ÌEAÂC=³=9¦;5\9c;5\95<6\8c<3\87=4\85<5\81=4\7f<3~<0\7f=1\7f=1~:/~:/~:/}9.|90{8/{8/{8/{;2{;2y:3x92w81v70v70s7/n70j8/j8/j8/j8/h8.h8.h8.g7-f7-f7-f7-d8-d8-d8-f7-g6/h70i81i81h70i81j;3l=5g80k<4b6-a5,oC:xLCtI@nMDC9056.45/8918;247.14+25,58-58-57,46+46+46+46)37)/7(-8(.9+.9).9+.9)08)08)19*08)08+08+08+19,3;.4<-9B1:C0;B0:A1:<.68*24&/3$29'IU?cu[m\84gf\84bWyTInE?d8Hg;Li;Nk=Nk=Li;Li;Mj<Ol>UrDYvH[xJ]zL^{M\yKQn@G_;6B4+4/#)%gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSjcSjbUlbVlbVmcWmdUmdUmdUleUmfVngWogZnh\oh^mjekormtz\83\8a\90¥®³ÃÌÑÕßáæîñôüþôýú÷ýùùþ÷úÿôüÿòüÿñüÿîýþðûøïþúñÿùïÿúíÿùéÿòßïàËÝηÁ²\9b¢\97\81|ubb_NXZL]cWmwn|\86}¦¬¢¾ÀµÚÕÏîäâüîîÿôôÿô÷þôõþøøûúøûýøüÿúøÿõôüñ÷ýñÿÿñÿùèÿôãÿÌ»½\7fp\9bQD©SFµSH²C:ÀJ@ÄH@ÇG>ÉF>ÈE=ÇD<ÆC;ÆC;ÍG>ÌG>ÇG>¼C;­>5\9f:2\97:3\91>6\8a=5\86=4\83=5\81=4\80<3\7f;0\81;1\81;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=2zVJ\86dZyWMbLA>: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?09B1<E4=D4;A38<.26'-4$2;*JVBcr[h|a]vXOmKFfAAa:Hd;Kh<Nk?Nk?Kh<Jg9Li=Nk=TqEWtHZwK[xL]zNZvMNjAC[;2>4*00!''heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdVjdVjdXldYlcZmeZmeXmfVg`NjeRnkXol]he\feasqr\81\82\86\8a\8f\93\96\9e¡«³¶ÃÈËØÝàêîïö÷ùùûúüþýþþüÿÿúýþöúýòùüñúýòûþóùúòúúòùùíüúëþüçù÷ÞéåÊÕÔ¶º¹\9b\98\98|psX_dMbkXr}l\84\90\82\91\9b\90´¹²ËÌÇãâÞòîë÷óòû÷öýùøüø÷ÿþüþþüþþüýÿúýÿúýÿúýÿúýÿúúü÷ÿÿúÿûöÿêåا £`X\9bD=µNE¿MCÂF<ÄD9ÊE<ÎI@ÎKAËH@ÇG<ÆG8ÃH8½J8³H8¦E5\9aB4\91B5\8bC5\86B5\84B6\82@4\82>3\82<2\84:1\8691\8691\7f91~: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\\8axj\8c\7foRJ=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=Je<Je:Lg>Oj?UpGYtK\vO]wP]wRWqNHb?;O6&1+&+.$),heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVidQjhSmjWjk[gg_lll~\7f\84\90\93\9a¨¯µ¸ÂÄÑÖÙâçêòóõûüþÿþÿÿþÿþýûÿþúÿÿúþÿùûüôøûòöüò÷ýó÷úñøúïøúí÷úéùûåòõÚßâÃÌЯ´¸\97\91\96vkqUYaI_kUt\81o\8c\98\8a\9d§\9c¿Á¼ÓÓÑççåóóñ÷÷õûûùüüúûûùþþüþþüþþüþþüþþüþþüþþüûÿþõÿÿõÿÿþÿÿÿûúÿíêð¿ºÂ~u\9fKA¯M@¹K>ÂL@ÅK>ÃE9¼=4¾?6ÃE9ÄF7ÃJ7½L:³J7¦F6\99C4\91C6\8dE7\85C7\82B8\81A7\81>5\82<4\83:3\8691\8493~92}:2z:1z:1y90x8/v7.v7.u6-v7.t8.t8.t8.r6,o5*m4+l7/i81j81h70i70h70g6/g6/e3,e3,g5.h6/j81j81j81j81k60l71k90k;1k;/j>1j@0hC1gH6kP=gRAufS\81ue\8b\86s\86\83rKL<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@AO6BP7FV;Jb@Jd?Ke@Ke>Ic<Hc:Id;Je<SnEXrK\vQ]wT[tTTmOC\>6I5&1-',0$)-heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVmhUkiTmjWjk[kkcwww\91\92\97§¬²¿ÆÌÒÜÞìñô÷üÿþÿÿþÿÿÿþÿÿþÿþýûÿþúÿÿúýþøúûóõøïñ÷ëñ÷ëô÷ìõùëöøêõøåõ÷áîîÔÛÛ¿ÉÊ«°±\92\93\96yuy`kpZt{i\88\90\81\9f§\9c®µ­ÍÏÊÞÞÜïïíøøöûûùþþüþþüýýûþþüþþüþþüþþüþþüþþüþþüýÿþûÿÿûÿÿþþþÿûùÿúôÿ÷íýÑÆØ\9e\90\94L=¥RB©L;§@1·G;ÏYMÏUJ¼@4ÃC6ÆH:ÃK=¹I;ªB7\9d?5\97@7\93D=\89@9\84A9\81A8\7f?6~>5}=4\7f<4}=4z;4x<4w;3w;3u:2t91t91t91r90r90r90r90o9/n8.l6,k5+l7/j81l71j81k60i70i70h6/g5.g5.f5.g6/h70i81k:3k:3l;4j;3i:0h<1k?2jC4iD2fE2gJ8lVAjYGujV\86\7fm\91\8e{\80\7fmDG658-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\80\82\81\9e¡¦¹¾ÄÄËÑÛåçõúýûÿÿüýÿüýÿþüýüûùÿþüÿÿûÿþùûüôõöîîñæéïãçíßíñâðôåñôãñôßòñÜêêÐØؼÇÇ«²±\95¡¡\89\91\93}\90\93\80\9c\9e\91ª­¢¶»´ÀÅ¿ÜÜÚééçööôûûùýýûÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþþûûýÿþÿÿþÿ÷òïüóìÿüóÿûíÿôäìñ¹\81p\95P@¢O?¸XJ·M?µE9ÀG<ÁA6ÈE;ÅI?½G=¯@9¡;6\9a=8\96A>\8d?;\87@<\81@:}@;z?9y@9x?8x?8v=4v=4v=4u<3s=3r<2r<2q;1o;0o;0o;0n:/k9.j8-j8-i7.m82n72m61l71l71k60i70i70l:3j92h70f7/f7/f7/h91f:1j?6f>4e=1f>2hC3iE5fG3cG2cJ6hV@i\IskV\85\82o\8d\8fzor_9=,28,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@26B46C2:G5<I78E12?+2@)8F/>N4DX<E]=K`AJb@K`?G_;H^:F^:SiEXpN`uV^uXZnSLcI9M4):(%.+%*.$)-heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVlgTkiTnmYop`svm\83\87\86¤§¬¿ÄÊÎÕÛæðòûÿÿûÿÿûüþýþÿÿþÿþýûÿÿýÿÿûþýø÷øðïðèçêßàæÚÞåÕçëÚêïÛíðÛìðÙîîÖèèÐÚØ¿Ìʱ½§·µ ±®\9d¶´§Á¾µÉÈÃÒÓÎÙÙ×èèæòòðúúøüüúýýûÿÿýÿÿýüüúþþüþþüþþüþþüþþüþþüþþüÿþüÿüÿÿüÿÿûúüû÷ýÿùþÿøþÿôÿÿíÿþìøßËÅ\9c\8a\9dbP\96J:¥L<´P@¼L>¿@7ÆC;ÅF?¿D=±>;¦:7\9e:8\99>=\91=;\8a?<\84@=}@=xA<tB;rC;rC;q?6s>6s>6r=5r=5r=5p>5o=4n>4m=3l<2k;1j;1i:0i:0j:0n72p62p62m61m61l71i70i70l;4k:3h91e90e90e90e:1d<2fB6cA5cC4dD5dG5dI6bI3_I2^L6eV?jbMrmW\84\83o\84\87r[`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[pQcvZ`tYYkSJ]G6G4&4%$-*$),"'*heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZlfVjgTkjUlnYorasvm\80\86\84\9f¤¨¸¿ÇÖßäí÷ùûÿÿûÿÿûüÿþÿÿÿþÿþýûÿÿûÿÿúüüôóõêëíâãçÙÝãÕÜãÑãèÒçìÕéíÖêìÔëëÓèæÏßÚÄÓθÓκÌƶËøÐÉÁ×ÒÎàÛØêæåðïíóòðùù÷ýýûýýûýýûÿÿýþþüüüúþþüþþüþþüþþüþþüþþüþþüÿýüÿûüÿøùÿþýþÿýùÿýôÿøïÿõ÷ÿöð÷çÿÿíÿîÛͧ\94¤kX¢[GªWE­L;¹D:ÀD<ÀE>¼E?´A>ª=:¢:9\9a;9\95=<\8d?=\85?=}@;wB<rC;oD;oD;p?8q?6q?6q?6q?6p>5o?5o?5o@6n?5m>4k<2h<1h<1h<1l<2o83q62p62p62m61l71j81i81h70g80e90e:1d<2e?4f@5dB6^B4aG8cL:dM;cM8`K6]K3]M4]Q9bX?mhRss[\80\83nv{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:GW<H[?M]BM`DUeJ\oSdtZ`rZXgRFWD4B1$2%$-*$),"'*heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdVjdVjcYkdZlc\md[lfZlfVliVlkVkmXjn]lrhy\7f}\95\9d ®·¾ÒÛàêóøûÿÿùþÿùúþþÿÿÿþÿúù÷ÿÿûþýøùùññóèéëÞãçØßæÖàèÓäéÒçíÓèìÓçéÑèèÐçåÎàÛÇ×оÚÓÃÙÑÆÞÔËæÝØîäãóéêúñôÿùûúù÷þþüÿÿýýýûýýûÿÿýÿÿýüüúþþüþþüþþüþþüþþüþþüþþüÿýüÿùøÿúùÿþýüÿý÷ÿþîÿùñÿÿòÿýõÿúóùëÿýíÿúèôλ«wb\8fQ:©[G²N>¸J=¹I>¸I@´G@¯D>¥=:\9c:7\96=9\8f>:\88?9\80A:xA:tD:pF:pE<p?8q?8q?8q?8q?8q?8p?8p?8qB:pA9n?7l=5i=4j>5j>5n=6o83r73p62p62n72l71j81i81d8/d90c;1d>3d@4cA5cA5_C5ZE4_N<gVBhWCcS<^O8[O5\R7]V<]Y>nlUtv^|\81kcmU2>(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\8e\98\9a¨±¸ÊÓØãìñøýÿ÷üÿúûÿþÿÿÿþÿúùõÿÿúýýõøøîðòåéëÝåéØãêØåíÖæìÒéíÒêíÒèèÎèæÏèãÏáÚÈØÐÃØÎÄÝÒÌéÞÚøíëÿôöÿõùÿõûÿùüÿýþÿÿýÿÿýþþüþþüÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüÿþúÿýûÿýûýüúùýüøÿÿõÿÿóÿÿíýúóÿûûÿúÿÿôÿöæÿóßÿãÍ×­\95©oY¨WD®Q@¬O>¯OA±OB­K@¤C<\99<5\95>7\8f?6\88?8\81A7{B7uD6qE8qE8p?8q?8s>8q?8q?8q?8q?8p?8sB;qB:p?8m>6l=5j>5m>6o>7o83q73o83m82m82i81h91f:1f;2d>3d@4bB5`C5]A3\@2WB1TG4[S>f^Gi^HbX?ZS9ZS7\W:ZV;XW;kmUsw^u}fUaI&2\1c8D03;.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?-5B09F2<I5@N7FT=JX?R`I[hTanZ\iWQ^MBN@/;/",#+1-(.,&,,heVheVheVheVheVheVheVheVifWifWifWifWifWifWifWifWkeWkeWkdZle[md]ne\mg[mgWqn[kmWknYkr`jrgpyv\87\91\93\9fª°»ÄÉÐÙÞêïóöûþüýÿþÿÿÿþÿþýùÿÿúþþöúúðöøëôöèðôãêñßçïØðöÚíòÔëîÑììÒèæÑáÜÉÝÕÈÞÔÊáÔÎèÚÙòääúëîþòôÿ÷ûÿùÿÿüÿÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿþúÿþúþþüýÿþûÿÿúÿÿúÿÿûÿÿþÿÿÿÿýÿûõÿûñÿüìÿûåÿóÛÿêѺ\82i¦bK\97O9\9fT?¨ZF£RA\9eK; M?\8e<0\8b=0\86>2\7f=/x=/t?/sB3tD6r=5r=7t=8s>8u@:u@:t?9q?8sA:q@9r@9q@9p?8n?7o>7o>7k92m82l:3l;4l;4h<3g<3c=2c?3^>1dG9cG9T=-N9(M8'@1\1eWQ;PN7KI0OK2]Y>ieJeaDVU7XX<]`CosZz\80fdlU>J2-9#2>*4</5;14:04:04:039/39/39/39/39/39/28.17-17-06,06,16016005/05//4./4./4./4.,1+,1+,1+,1+,1+,1++0*+0*.5.-4--4-,3,-4--4,.5-.5-+2*-4,07/5=29A6=E8?G<?J<7B25@/3>-1=)2>*9E/BN8IU?O[GVbN]hWYdTLWI<F;/9.)3*)/+(.*'-+heVheVheVheVheVheVheVheVifWifWifWifWifWifWifWifWkeWkeWkdZle[md]ne\mg[khWonZjlVknYkr`jtiq|x\89\94\96£®´¾ÇÌÒÛàëðô÷üÿýþÿþÿÿÿþüþýùÿÿúþþôûûï÷ùëô÷æðõáêòÝèíÖêïÑæëËäçÊææÌãáÌßÙÉÞÔÊßÔÎçÙØíßßöçêûïóÿôøÿ÷ûÿúþÿüÿÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüûÿúûÿúýÿüýþÿþýÿÿüÿÿüÿÿûÿÿüÿÿüÿÿûùÿüõÿþñÿÿíÿûåÿòÙÿëÑà±\97§u\\91[C\96ZB\9aYC\9aVC\99R@\8eG5\8bF6\88E4\83D3|C2wB0s@/o>/u@8t?9u>9u@:t?9o=6p>7sA:q?8p?8p?8o>7o>7m>6n=6m>6k<4l=5m>6k?6j?6gA6eA5bB5dG9[A2^G7^I8N=+F7$G8%?7"LL4GK2DG,BE*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++0*+0*+0**1**1*)0))0))0)*1*+2*,3+.5--4,.5-07/4;39A6?F>BJ?;F8:E57B14?.3?+6B.<H2@L6LXDS_KYdTWbRKUJ=G<1;2+5,+2+*0,)/+heVheVheVheVheVheVheVheVifWifWifWifWifWifWifWifWkeWkeWlcZmd[md]ne\mg[khWmlXimVjoYktaiuiq}y\8a\98\99¥²¸¿ÊÐÔÝâíòö÷üÿüýÿýÿþÿþüþýøÿÿ÷ýýóúûí÷úéô÷äïôÞçïØåëÑâçÉÞáÂÝÝÁÞÞÆÞÛÈÝ×ËàÕÏäÙ×îââóçëúîòÿôøÿ÷ûÿùüÿúýÿýýÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüøÿüøÿüûÿþþþþÿüÿÿúÿÿùÿÿøÿÿùÿÿúÿÿúúÿýøÿÿöÿÿóýÿïÿúæÿóÛÿøàÿìÓ㿧¬\82j\87YB\85Q;\92[F\97]I\8dS?\7fF2u>)r>)s@+tD0vE4q?4n<3q<4tB9sA8o?5qA7xH>n>4m>4m>4m>4l=3j>3l=3j>3g?5gA6gA6gC7eC7cC6`C5^D5bK;UB1ZI7`S@RG3C;&E=(FA+AE,BH.AE*<@%?B%LO2_`AijK``DnqTvzagmSJO94<%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=B<AH@@K=>K:<I78E34A-2?+3A*5C,DQ=KXDQ^MQ^MHTH<H<2>4.8/-4--4-,3,gdUgdUheVheVheVheVifWifWifWifWifWifWifWifWifWifWkeWkeWlcZmd[md]mf\mg[jiWkmXimVjoYjs`hthm|w\88\98\98¦³¹¿ÊÐÓÜãëðööûÿüýÿýÿþÿÿýÿþùþþöýýñúûí÷úçô÷âîóÜåíÕâèÎÛàÀ×Ú»ÖÖ¼Ù×ÂÝ×ÇÞ×ÍåÛÙìààøìðûðöÿõûÿùþÿúýÿûûÿûûÿýüÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüøÿþøÿþûÿþþþþÿüþÿúÿÿùÿÿøþÿúýÿùüÿùùÿýúÿÿøÿÿøûÿõüþðÿÿíÿüéÿñßÿðÝÿïÚñÒ½´\90zyS>sI3uH3vI4zM8~O;yL7nA.e7'{M@sD:qB8sD:oC8g;0d8-g=1i?3i?3i?3g?3f>2f>2f>2e?2b@4bB5`C5_C5_C5[D4YD3WD3XI6OB/\T?oiSc^HMK4IG0IK3>D*?H-@F*<B&<A#EJ,XY:deFmmQxx\tv^[_F@C.6;%8@+<C19?39?59?58>48>47=37=37=38>48>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>'<I5BO;HUCIVEDPB;G;2>4.:0,6..5.-4-gdUgdUgdUheVheVifWifWifWifWifWifWifWifWifWifWifWkeWldWlcZmd[md]mf\mg[jiWkmXinWiqZgs_drejyt\85\95\95£²·½ÈÎÒÛâêïõôùýûüÿýÿþÿÿýÿÿúÿÿøÿÿóþÿñûþë÷úåðõÞæîÖâèÌÙÜ¿ÕÕ¹ÒйÔѾÚÔÈàÙÑêàßôéíþóùÿ÷üÿûÿÿýÿÿþÿÿþüÿþúÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþúÿÿúÿÿûÿÿþþþÿýþÿüüÿûüÿûúÿúøÿù÷ÿú÷ÿýøÿÿûÿÿûýÿúýþùùôîÿþöÿýôÿüóÿûîÿ÷çûæÕéÒÀÏ´¡¶\9a\85\94uawVClI6mH6rM;uP>mF7iB3gB2jE5nI9nJ:oK;oK;eA1cB1cB1cB1cB1cB1bC1`C3]F6\G6\G6ZG6ZG6WH5TG4RG3PH3NH2fdM~~frrZVX@JL4GM3<E*<F+?H+AG+AF(CH*MN/TU6xw[{z^nnVUU=CB.?A,>A.:>-;>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-.210513763:3;G9=L9@O<@O:<K67F/4C,2A*6E.:I4@O<BP??M>8F71?2-9-,6--4,,3+fcTfcTgdUheVheVifWjgXjgXifWifWifWifWifWifWifWifWldWldWlcZmd[md]mf\mg[jiWkmXinWiqZgs_bpcgxr\82\94\94£²·ÀËÑÔÝäëðöõúþûüÿýÿþÿÿýÿÿúÿÿøÿÿôÿÿóÿÿïúýèò÷àçðÕâèÌ×Ú½ÑѵÍË´Î˺ÖÏÅÞ×Ñìâã÷îóÿöþÿúÿÿýÿÿþÿÿÿýþÿúþÿùþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýþÿýþÿýÿþýÿüþÿúþÿùÿÿ÷ýýóýýõþýøþýùÿþüþþþÿýÿÿþÿþùÿÿüÿÿûüûöóÿøòÿýôÿþñÿþíÿúéÿóà÷äÓçÒ¿Ôº©º\9f\8e\9f\84s\8frb|]K}^LtUCaD2W:(Y<*[>,X=*`E2`E2`E2_F2`G3`G3`G3]H3\K7\M:\M:YL9XM9UM8RL6QL6NL5QQ9ikS|\80gmqXSY?FL2>G,<F+<F+?H+DJ.EJ,DG*HI*LM.xw[tsWfdMTR;LI6KJ6FE3<=-<?49?59?59?58>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:?N7<K49H18G05D-8G0<K6>M:<J97E61?2-9-+5,-4,,3+fcTfcTgdUheVheVifWjgXjgXifWifWifWifWifWifWifWifWldWldWlcZmd[md]mf\mg[jiWjlWhmVhrZfs_cqdhys\85\97\97¥·»ÇÒØÚãêðõûøýÿüýÿýÿþÿÿýÿþùÿÿõÿÿòÿÿðüÿìøûæïôÝâëÐÝãÇÕÕ¹Î̳ÉÄ°ÊÄ´ÐÉ¿ÚÒÏéàãöíòÿ÷ÿÿúÿÿýÿÿþÿÿÿýýÿúüÿøüÿøýÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþÿüÿÿüÿþýÿýÿþúÿúøÿùøÿõøÿóøÿóøÿõüÿøýÿúÿýþÿüÿÿüÿÿûÿý÷ÿÿúÿÿüÿÿýÿÿþÿþýûûûóúøìÿÿñÿÿïÿÿíÿþíÿýíÿöçÿîàýêÛúãÑÿæÐãÊ´¥\8fxt^GeO8bL5\H0^J2\J2\J2]K3]K3^L4^L4\M6YN8WO:XP;VP:UO9SN8PN7NN6MO7PT;`fLfoTU^CEO4AK0<F+?I.?I.CL/HN2HM/FI,OP1YX:qmRjfKa\F[V@YTATQ>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=O7<N4:L2:L25G/7I1:L6<M:;L:6G70@3-;.,6--4,,3+cdRcdRdeSefTgeVhfWigXigXhfWifWifWifWifWifWifWkeWkeWkeWldYle[md]mf\kg[jiWikVhmWhrZgt`dqgj{u\89\9b\9dª¼ÀÍØÞàçíôùÿúÿÿûÿÿýÿüþÿúþþöúúîúûíúûéøúåóöáêî×ßãÊÙÜÁÓѸÌDZž¬Æ¾±ÌüÖÎËæÝàôêòþ÷ÿÿúÿÿþÿÿÿÿþþþýÿúüÿúüÿúýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿþüÿþüÿýþÿüÿÿüÿÿýÿýÿþûÿüøÿù÷ÿ÷÷ÿõøÿöùÿöüÿøÿÿûÿþýÿüÿÿûÿÿúÿÿúÿÿûÿÿüÿÿþÿþýÿûýüüþûþÿúùúòúüñýûïþúîÿùìÿûìÿýïÿýìÿðÛÿûâìÜÃ\9e\8eu`P7RB)XH/XH.[M3[M3ZN4ZN4[O5[O5\P6[Q8UO7TO9TO9QO8PN7NN6KM5IM4JN5LR8S\APY<@I,;F(AL.?J,DM0EN1JQ2MR4JM0LL0YY=kjNhdIb^E^ZA_ZD`[GZUAQO:KJ8AB4@B5@B5>A6>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\1e)=!2F+8L1;O6;M5;M5;M58J29K3;M5<N6<N87H51B0.<--7,.5--4,]eN^fO_gP`hQdiUfiVgjWijXfgUhgUheVheVjdVkeWkeYlfXlfXkhYmg[kg\mf^jf[ieYgeVghVfkUenYbo]dqhs\83\80\96¨¬¸ÇÎÒÛââéïò÷û÷üÿøüûüþùüÿöüþñ÷øêùúêø÷åòñÝîíÙëêÖàßÊ×Ò¾×ϼËÀ®½´¥½³©Â·±ÌÂÁÛÒ×êàèúóûüöÿþûÿÿþÿþýÿüýÿüþýüþýþþþþþþþþþþþþþþþþþþÿþüÿþüÿþüÿþüþýùþýùÿüùÿýúÿþûÿþûÿþÿÿýþÿüýÿýþÿÿÿþÿýýÿüûýøÿÿûüý÷ÿýøÿþúÿýøÿúöÿ÷ôÿùùÿúÿÿüÿÿýÿÿÿÿÿÿÿýÿüýÿþüþýþÿÿÿÿÿÿþüÿþùÿþóÿþîÿýêÿýæúôÜÿúàçàÆ\8f\88lUN2WN1TK.SJ+WN1WN1UN1UN1TO2TO2TN4SO4QM2RN5QO6PP6MO7KO6HM6GL5JP6FO4AJ-=F'>H&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:<D9=D<>E=8B:8B:7A88@56>14</39/271.40/51-7/-9-.;)0@&6G'7M';V+:W+;U0;T4;R8=P:>O<>P::L6@R8EW=FY=DX=@T;5H2+<),6+,3++2*ZgM[hN\hP]iQbjSckTfkWhkXghVghVifWifWkeWlfXmeZmgYmgYkhYkg[kg\jf]jf[hfZefVhiWglVfo\erajwnz\8a\89\9c«²ºÈÑÐÙàáéìò÷ûøþþùþúúÿøûþóùýïøùë÷øæõôâíìØéæÓåâÏÜ×ÄÒ˹ʿ­Á´¤¹­¡¼¯¦Á¶²ËÁÀÛÐÖæßæûóþý÷ÿþûÿÿþÿþýÿüýÿüýÿüýÿþþþþþþþþþþþþþþþþþþÿþüÿþüÿþüÿþüÿýúÿüùÿüùÿýúÿýùÿþúÿþýÿýüÿüýÿýþÿþÿÿþÿÿýþýûüÿþýÿþûÿüúÿøóøíçòåÝöèßûðêÿúýÿüÿÿýþÿÿýÿÿûýÿüýÿþüýÿýþÿýþÿÿýÿÿþüÿþõÿÿîÿþèÿÿäúöÝýûâäàÇ\8b\87lRM0SN0QK+QK+UO/UO/TO1TO1SO2SO2QP4QP4QM2PO3PN5NQ6MO7JP6HM6EM5HQ6EN1BK.?I'BI(FM+JP,KQ-NR/PT1VZ7^bA_bCY\?TW<TT<VV>WU>XV=YW>YW>XW;VU9XT9QK3OI3LG4ID1DA2B@3A?3>@5<=59?59?59A67B48C57D37D3:B79A69A68@58@59A69A6:B7:B7:B7:B7:B7;C8<D9=E:<F;=G?<H><F;;F6<D5:B39?38=67>74>63=40>-3C)9M*BY/Ga1Op;Ln;Li=Fa>BY?<R=<M;:K8=O9DV<K^BM`BL`DH\@:Q71D.+5*+2*)0(ZgM[hN\hP^jRbjSdlUglXilYijXijXkhYkhYlfXmgYnf[nhZmgYkhYkg[jf[jf]ieZhfZfgWhiWejTdmZgtco|s\7f\8f\8e\9d¬³¶ÄÍÍÖÝÞæéñöúøþþúþýùþøøûòôøêóôæðñßêé×áàÌÜÙÆ×ÔÁÐ˸ÇÀ®¿³£½° ¼°¤Ã¶®ËÀ¼ÕËÊãØÞëäëüôÿý÷ÿþûÿÿþÿþýÿüýÿüýÿýÿþþþþþþþþþþþþþþþþþþþÿþüÿþüÿþüÿþüÿýúÿýúÿüùÿüùÿüøÿüøÿýüÿüûÿûüÿüýÿþÿÿþÿÿýþþüýÿþýÿþûÿýûüóîêßÙâÕÍëÝÔ÷ìæÿúýÿüÿÿýþÿÿýÿÿûýÿüýÿþüýÿýþÿýþÿÿþÿÿÿýÿþõÿþíÿýçÿþãû÷ÞþüããßÆ\89\85jPK.QL.QK+QK+TN.UO/TO1UP2TP3SO2QP4PO3QM2ON2PN5MP5MO7JP6IN7GO7HQ6FO2CL/CM+FM,JQ/OU1SY5QY2W_8jpJy\7f[qvVY^@KO4MP5QQ9QQ9RP9SQ8TR9UT8YU:ZV;XR:VP:RM:NI6HE6DB5B@4?A6<=59?5:@69A67B47B47D37D3:B7:B79A69A69A69A6:B7:B7:B7:B7:B7:B7;C8<D9>F;<F;?IA>J@?I>>I9?G8>F7>D8=B;>E>9C;6@74B19I/BV3Pg=XrB^\7fJ[}JXuIMhECZ@9O:6G54E2<N8EW=NaESfHSgKNbF@W=6I3/9./6.-4,ZgM[hN\hP^jRblTemVhmYinZklZklZlj[liZnhZnhZog\oi[liZkhYjfZjf[ie\ieZhfZfgWfgUbgQajWerao|s~\8e\8d\96¥¬«¹ÂÇÐ×Úáçîó÷öüüøüûõúôóöíîòäéêÜãäÒÜÛÉÓÒ¾Î˸ÉƳþ«½¶¤Ã·§Ç¹¬ÍÁµÖÉÁßÔÐèÞÝóèîøñøýõÿþøÿÿüÿþýÿýüÿüýÿüþýýÿþþþþþþþþþþþþþþþþþþþÿþüÿþüþýûÿþüÿýúÿýúÿýúÿüùÿû÷ÿû÷ÿýüÿüûþúûÿûüÿýþÿþÿÿýþþüýÿüûÿþûÿýûýôïíâÜæÙÑðâÙüñëÿúýÿüÿÿýþÿÿýÿÿûýÿúýÿþüýÿýþÿýþÿÿþÿÿÿýÿþõÿþíÿüæÿüáþùãÿþçäßÉ\8a\86mPJ0RM0SL/SM-TN.UO/UP2UP2TP3SO2PO3ON2PL1NM1OM4LO4LN6JP6JO8HP8JS8GP3GP3IS1MT3OV4V\8\d=grHt\81U\87\92h\90\9bs\85\8flnuTZaBRV;LN6NN6MM5NL5OM6RP7WS:YU<ZT>XR<TO<QL9KH9GE8EC7@B7=>6:@6:@69A67B47B46C26C2;C8:B79A69A69A69A6:B7;C8;C8:B7:B7;C8;C8=E:>F;=G<=G?<H>>H=>I9?G8>F7>D8=B;=D=9C;6@74B19I/DX5Ri?[uEZ{FWyFTqEIdA=T:2H3/@.->+6H2@R8L_CReGSgKOcG@W=6I31;007/-4,YgMZhN\hP^jRblTemVinZjo[mn\lm[mk\mj[nhZnhZoi]oi[liZkhYjfZieZie\ieZig[ghXghVchRajWerao|s{\8b\8a\90\9f¦¢°¹ÁËÔÔÝäéñôòúüôúøñöðíðçèìÞâãÕÚÛÉÒÑ¿ÌɶÉıþ«¿¸¦¼³¢Ê¾®ÓŸÜÐÄæÙÑíâàöìíÿôúÿùÿÿ÷ÿÿúÿÿüÿþýÿýüÿûüþüþýþÿÿþþþþþþþþþþþþþþþþþþÿþüÿþüþýûþýûÿýúÿýúÿýúÿüùÿúöþùõÿýüÿûúýùúþúûþüýÿýþÿþÿÿýþÿüûÿýúÿüúÿøó÷ìæòåÝøêáÿôîÿúýÿüÿÿýþÿÿýÿÿûýÿúýÿþüýÿüýÿýþÿÿþÿÿÿýÿþõÿýìÿûãþúßÿüæÿÿéçâÌ\8c\88oRL2TO2TM0UN1TN.UO/VQ3VQ3UQ4SO2ON2NM1PL1NM1NL3KN3LN6KQ7KP9JR:LU:IR5JS6OY7SZ9T[9]c?fnG\82\92c\92¦s\9f±\81\9bª\7f\92¡z\88\94pr{\\bFLP7KM5LK6LJ5LJ5PK5TN8VP:WQ;VP:SN;QL9LI:IG:GE9CE:=>6:@6:@69A67B47B46C26C2;C8;C8:B79A69A6:B7;C8;C8;C8;C8;C8;C8<D9=E:>F;=G<=G?<H>=G<=H8>F7=E6=C7=B;:A:7A95?64B19I/BV3Ne;Uo?Tu@RtAPmAE`=9P6-C.+<*+<)1C-<N4H[?PcERfJNbF@W=5H2,6++2*'.&
\ No newline at end of file
diff --git a/testimages/testimgfst.jpg b/testimages/testimgfst.jpg
deleted file mode 100644 (file)
index a586047..0000000
Binary files a/testimages/testimgfst.jpg and /dev/null differ
diff --git a/testimages/testimgfst.ppm b/testimages/testimgfst.ppm
deleted file mode 100644 (file)
index e158bd1..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-P6
-227 149
-255
-0/+0/+0/+10,21-32.52-63.83/83/83-83-:3-:3-:3+:3+72.72.61-61-61-61-72.72.50,50,50,50,50,50,50,50,4/+3.*3.*3.*2-)2-)2-)2-)1,(1,(1,(1,(1,(1,(1,(1,(.+$.+$/,%0-&1.'2/(2/(30)52+63,63,74-85.96/96/:7.@:.A;-C=/F@2GA3IC5JC3JC3LE3LE3LC2LC2LD1ME2PE3QD3P?/V?/`@1mC3}E6\8aG7\98G6¢E4¯H9¶F8¾F8ÂF:ÆH<ÈH=ÊG?ÐE@åFKëDLëDKëEIíBHîACñ>Bó<@õ;>ô:=ó9>î;>è>?ß@=Ö>;Ê@6»=.´?+´?+´?+²?,²?,°@,¯@,­@,©@+¥@,¡A+\9dA*\99A)\98@(\95A)\92@+\90?,\91>,\91>,\90=+\90=+\90>)\90>)\93>*\93>*\93>*\93>*\94=)\95>*\96?+\95?.\94@5\93?5\97=2\9e>0¨A0³D1¹D2½D1·?/³B2ªF7\9cI;\86H9mB2T9(C3&<5/95484373262/51.40-3/,63.52-52-52-41,41,41,10+-/*+0*-/*-/*./*./*1-*1-*2-*1,)3)(2('5)):..D66O:9iAB|IH\8bNM\94PO\9eVY©ck¨o\80\9ct\8e\92\85\7f«\7f\86º|\88¼rz«^a\8eTKvOEhRIfMH^KH[SQ_ddn{|\81\8d\91\90\98\9d\97¢¨\9e¡§\99\9d¡\92\8e\92\81z{iefTXWEQNETQZTPaTPa/.*/.*0/+10,21-21-52-52-72.72.72,72,92,92,92*92*72.61-61-50,50,61-61-72.61-61-61-61-61-61-61-61-3.*3.*3.*3.*2-)2-)2-)1,(2-)2-)2-)2-)2-)2-)2-)2-)/,%/,%0-&1.'2/(2/(30)30)52+63,63,74-85.96/96/96-@:.A;-C=/E?1F@2HB4IB2IB2JC3JC1KB1JA0KC0LD1OD2PC2O?/U@/]@0iB1wD3\84E4\91D4\9bB2¦B2¬A1³B4ºB4¾D7ÁE9ÅF=ÊC=ßEGçBHèCIêDHìCFïBDó@Cõ>Bö<?÷:>ó:?ï<?ç??Þ@=Ô?;É@6¸=-³@+´?+²?*²?,°@,¯?+®?+¬?+©@+¥@,¡A+\9dA*\98@(\97A(\95A)\91?*\90?,\91>,\91>,\90=+\90=+\90>)\8f=(\93>*\93>*\92=)\92=)\93>)\95>*\95>*\95?.\94@5\93?5\97=2\9f?1«A1³D1¼D3½D3º@1´C5«G8\9aH:\82G9j@0S9*A3&=60:6595484373051.51.40-63.52-52-52-41,41,41,10+.0+,1+.0+.0+/0+/0+0/+2.+3.+2-*3+)3)(5))9--A55M87d>=vEA\86KG\8eMK\99SS£`g¢l|\9ar\8c\8f\85\7f­~\85¹y\84ºmt¨Z\\8cPIuNDiNEdMH_NI_PM^ZZfmns\83\87\88\93\98\92\98\9d\96\99\9f\93\98\9c\8d\8d\91\80|\7fnijX]\JURIURYUQ`UQ`..,..,0/+0/+10,21-41,52-52-52-61+61+61+61+81)81)61-61-50,4/+4/+50,61-61-61-61-61-61-61-61-61-61-3.*3.*3.*2-)2-)2-)1,(1,(3.*3.*3.*3.*3.*3.*3.*3.*1.'1.'1.'2/(30)30)41*41*52+52+63,74-74-85.96/96-?8.@:.B<0D>2E?1F@2G?2HA1HA1HA1H?.H?.I@/JA0MA1MA1L@0QA1YB2bC1nC2{C2\87B2\91@/\97<*\9f;+¦<,®>0³B4¸D7¼F:ÄD;×CCß@DâAFæCFéCEïBDôADø@Bø;?÷:>ô<>ï==æA?ÜA<Ð@8ÅA5¶>-±A-²?,°@,°@,¯?+¯>,­@,ª?+¦@*£@+\9f@*\9bA)\98@(\96@)\95@+\91?*\90?,\90?,\8f>+\8f>+\8f>+\8f<*\8f<*\90>)\90>)\90>)\90>)\90>)\93>*\94?+\95?.\94A3\93?4\98?1¡@0­B2·D2¾C3ÀB3¾D5¸G9«I<\99J=\80F:fA1P:,B6*?82<74;63:5294183062/51.63.52-32-32-21,21,21,01+.0+,1+,1+,1+.0+/0+0/+0/+3/,4/,5-+3+)4*)7-,=32G53[:5k@9{F>\85JB\8fOM\97[]\99gs\92o\87\89x\9c\81~«{\82¸s~¶fm£TV\89MEvLAkKAcOFaOJaLI\LKYZZdqux\84\89\85\85\8c\85\89\91\86\8a\90\82\85\89zwykfiXZ[KSSIYTZYS_YS_--+--+/.*0/+0/+10,41,41,41,41,50*50*50*50*70(70*50,4/+4/+3.*3.*4/+4/+50,50,50,50,50,50,50,50,50,3.*3.*2-)2-)2-)1,(1,(1,(4/+4/+4/+4/+4/+4/+4/+4/+2/(2/(30)30)41*41*52+52+52+52+63,63,74-85.85.96-=6,>8,@:.B<0C=/D>0E=0E=0E>.E>.F=.F=,G>-H?.K?/JA0KD2MD3UD2]D0gD1rC/|A/\86?-\8b:'\918&\9a9(¢=+ª@0°E5¶H9¿F;ÒDBÚACÝCCáCBçCBìBBò@@ö>@ø;?÷:>ô<>í?>åA?ÙB;ËA7¿?2³>,¯@,¯?+®?+¯?+­>*­>+¬?+¨?*¥?)£@+\9e?)\9a@(\96@'\94@(\92@*\90?*\90?,\8f>+\8f>+\8f>+\8e=*\8f<*\8f<*\90>)\8f=(\8f=(\8f=(\8f<*\90>)\91>,\92?-\93A3\96@3\9b?0¤@1°B3»C5ÁC5ÁC5ÀF9¹I=¬L@\97K>{G:`@3L:,?7*@93=85<74;63:5294173062/63.32-32-32-21,12,21,01+,1+,1+,1+,1+.0+.0+/0+0/+21-40-4/,4,*3+)5-+91/A2/R7.b<1pB5yE:\82IB\88RR\8b`j\89i\80\82r\97|y¨w~µmw²_e\9fQR\8aLEyL@pL@fODdOFcID[FCVLLX[^cimnsyuw~vy\7futzlkoa_aSVXJSSI[WX[V\\U\,,*,,*--+..,0/+0/+10,10,30+30+30+30+4/)4/)4/)4/)4/+3.+3.+2-*2-*3.+3.+4/,4/,4/,4/,4/,4/,4/,4/,4/,2-*2-*2-*2-*1,)1,)0+(0+(4/,4/,4/,4/,4/,4/,4/,4/+30)30)30)41*41*41*52+52+41*52+52+63,74-85.85.85,<5+=6,>8,@:.A;/A;/C;.C;.C;.C<,D;,D;,E<-G>/J>0I@1JG6JG4PH5WF2`E2jD/tA.|?,\82;'\88:&\91:'\99>+¡B0ªF6°J;ºJ>ÊFAÓCBØDBÜDAâC@è@?ï==ó;;ø:<÷;<ó=<ë?=àC>ÓC:Ä@3¹@/¯?+­@+®?,¬?+­>+¬?+«=,©>,¥>+¤?+ ?,\9c@+\98@*\95?(\94?*\91?)\8f>)\8f>+\8f>+\8f>+\8e=*\8e=*\8d<)\8d<)\8e=*\8e=*\8d<)\8d<)\8e=,\8e=*\8f>-\90?.\94C2\96@1\9d@1¨A2´C5½C6ÂB7ÂB7¼C:´H>¥KB\90J@tE;Y?2E9+:6*>93?74?74=52:5194074/74/43.32-32-23-12,03,12,/2+-2,,3,,3,,3,-2,/1,/1,01,12-32.40-3.+2-*2-*50-;0,M7,W:,c=0l@3rC9xKH\7fZb\81h~~o\96yw©tz¶js´\d£SU\92MG\83KAvNAmNBfKAcGA]EBWFEUILUMPU]ca`g`ah``f\Y_SVZLUYKVXM\YT]WW_VW++),,*,,*--+/.*0/+0/+0/+2/*2/*2/*2/*3.(3.(3.(3.*3.+2-*1,)1,)1,)1,)2-*3.+2-*2-*2-*2-*2-*2-*2-*2-*2-*2-*2-*1,)1,)0+(0+(0+(3.+3.+3.+3.+3.+3.+3.+3.+30+30)41*41*41*41*41*41*41*41*52+63,63,74-85.85.;4,;4*=6,>8,?9-?9-@8-@8+B:-B:-C9-C:+D;,F=.I=/G@0IH6IH6MH5SF3[D2dC0lA.s?*{<*\82;'\89;'\92=)\9aA/¡F3ªK9²K<ÃH@ÌE?ÐE@ÕE=ÝD?äA<ë=<ñ;:ö:;ô:;ð<;ç@:ÚC<ËC7»@0±>+¬?*ª?+ª?+ª?+©>*©>*¨=+§>+£>*¢?*\9e?+\9b?*\97?)\94?*\91?)\8f>)\8f>+\8f>+\8f>+\8e=*\8e=*\8b=)\8d<)\8b=)\8d<)\8b<+\8a;*\8a;*\8b<+\8c=,\8d>/\8d>-\92C2\97A0 @0«A3¸B6¿C7ÃC:ÁB9¸A9¯H?¡OD\8cNCoG=S@2@:.77+>93?74>63=52:5194074/74/43.23-23-14-03,03,03,-2+,3,,3,,3,,3,-2,-2,/1,/1,01,12-32.10,1-*1-*2.+8/*F5+M5)V9+`<.e?6jGCwYc\81k\82\7ft\9c{{¯w|¼luºbi¯[\\9fRM\8fLC|MAoK?eH>aF?^FB[EDV?AN;@FBGJDMHIPIJQIIQFJRENVIUXM^ZQ`YQ`YS*,+*,+,,*,,*--+..,0/+0/+/.*/.*1.)1.)1.)1.)2-)2-)1-*0,)0,)/+(/+(0,)0,)1-*/+(/+(/+(/+(/+(/+(/+(/+(1-*1-*0,)0,)/+(/+(/+(/+(1-*1-*1-*1-*1-*1-*1-*1-*30+30+30+30+30+30+30+30+41,41,41,52-63.74/74/85.92*:3+;4,=6,=6,>7->5,>6+A9.A9,B8,C9-D:.F<0J>2H@3FD5GF4KF3PE3VC2]B/e@.l=+u=,|;)\829(\89:)\93=,\99B/¡F4ªF7¹G<ÁE;ÇG>ÏF<ØE>àC<é@=ï=;ò::ð:9ë<9ã@9ÖC;ÅC5´A.¨>(©@+§@-¨?,¨?,¨?,¥>+¥>-¤?-¢?,\9f>+\9c?-\99>+\95>*\93>*\90>)\8f>)\8f>+\8d>-\8c=,\8c=,\8b<+\8a=+\8b<+\8a=+\8b<+\89<,\89<,\89<,\89<,\8a=-\8b=0\8c?/\92C2\97A0¡A1¬B5¹C9ÀD:ÃB<¿C;¸G?¯QI£YP\8eZOpRGVH;BB6<?4<90>71>71<5/94.83-63,63,43.23-23-14-03,.3,.3,,3+,3,,3,,3,,3,,3,,3,-2,-2,.0+12-23.12-0/+/.*0/+4/+>1+C1'K3'S9,Y<4cGDs]i\83s\8d\87\80ª\83\84¼~\83Çs{Äkq»ce¯VS\9aIC\81K?oI=eF<aE>]EAZDCU>BN8?E:BD=HDDMHFPGGQFHRGLVKUXM^ZNaYLaYN)+**,+++),,*--+..,/.,0/+.-).-)0-(0-(0-(0-(1,(0-(0,)0,)/+(/+(/+(/+(0,)0,).*'.*'.*'.*'.*'.*'.*'.*'1-*0,)0,)0,)/+(/+(/+(.*'0,)0,)0,)0,)0,)0,)0,)0,)3/,30+30+2/*2/*2/*2/*2/*30+41,41,52-63.74/74/85092,:3+;4,<5-<5-=6,=4+=4+A8/A9.B8.C9-D:.F<0J>2I?3EB3FC4JC3NB2SB2Z@1`?0g<,p<.u:*|9)\848(\8c;*\94>-\9aC2£C3±G:·E:¿F;ÈH=ÒH>ÝF?çD?íA=ë<9ê;8ç>9ÞA:ÏE:¿D4®A,¢>'¥@,¤A,¥@,¥@,¤?+¤?+¤?-¢?, ?,\9e?-\9a?,\97?+\94?+\91?*\8f>)\8c>*\8d>-\8c=,\8c=,\8b>,\8a=+\8a=+\8a=+\88=*\89<,\88<,\88<,\85<-\86=.\87>/\88>1\8a>0\91D2\96C1¡A3­C6ºC;¿D=ÀC=ºE>·PI°\R¤f[\90fZu_R[UGGM?BJ=;8/>7/=6.:5/94.74-63,33+34.23-14-14-.3,.3,-4,,3+-4--4--4--4--4--4-.3-.3--/*/1,23.12-/0+./*/.*2.+7-+:,)B1)J6-Q=6]IHscn\85{\94\8d\8aµ\8a\8cÅ\84\89Íy\7fËqwÃhl¶WW\9fHD\81E=lE=bD=_B?\B@V@CT>DP=FKGQRKWSQ^US`VR`SR^RS_SY_Q]ZI`YG`YG+-,+-,+-,+-,+-,+-*,,*,,*/.*.-).-).-)/,'/,'/,'/,'.*',+),+)-,*-,*-,*-,*-,*-,*-,*-,*-,*-,*-,*-,*-,*,+),+)-,*-,*.-+.-+/.,/.,/.,/.,/.,/.,.-+.-+.-+.-)/+(0,)1-*2.+3/,3/,2.+2.+2.+2.+2.+3/,3/,51.62/74/70*81+92,;4,<5-<5-=4-=4+>5,>5,?5,@6,A7-C9/G:1F<2G?4G?2I?3M?2R>3W=0[9-a7)k:,r8*{9+\839,\8a;,\91>.\96>0\9b>/¦B3¬B4³C5¾F8ÉG:ÓF<ÝD>åC>è@=éA>åC>ÙD=ÈD7¶C1§A+¡A+¡A+¡@- ?,\9f>+¡>+\9f>+\9f>-\9e?-\9c=+\99<+\96=+\94=*\90=+\8e=*\8e=*\8c>*\8b<+\89<*\89<*\89<*\88;+\87;+\87;+\85<+\88<.\86=.\86=.\85=/\86>0\88@2\89A5\8aB4\90D4\95D1£F7±I>¹F?ºC=ºE>¸ME´ZQ­g]¡qc\90tf}qcik]T_QGRDLLBIE:B>3;8/85,74+63*33)34,34,14-03,-2,,1+,1+,1+-2,-2,-2,-2,-2,-2,-2,-2,02-02-02-02-12-12-12-21/4+.:/3A32B5/H;5ZNNwmx\8a\85\9c\92\91»\93\96Í\90\95×\83\89ÓtzÄgn´^c¥Z[\94LJrFCb@=Z=?V?BUAITJU[Sabapmn}vu\85{p\80uiylguh^l]W`O]\Ha[Eb\F,.-,.-,.-,.-,.-,.---+--+.-+.-).-)-,(/,'/,'.+&.*',+),+),+),+),+),+),+),+),+),+),+),+),+),+),+),+),+),+)-,*-,*-,*.-+.-+.-+/.,.-+.-+.-+.-+.-+.-+.-+/+(0,)1-*2.+2.+2.+2.+2.+2.+1-*1-*2.+2.+40-51.62/7/,81+:3-;4.<5/<5-=4-=4->5.>5,?5,@6-A7.C9/F90G:1G=3H>4K>5L>3Q=4T<2Y8/]7,g8.m7+w7-\808,\88:-\8f<.\95=1\99=0¡A3¥A2ªC4²D5½E7ÈF9ÒE<ÙD=ÞC>ßD?ÞG@ÓF=ÁF7±C2£C-\9dB-\9eB-\9dA,\9c@+\9b?*\9d>*\9d>,\9e?-\9c?-\99<+\98=+\94=*\93>*\8f>+\8c>*\8c>*\8a=)\89<*\89<*\89<*\87<)\87;+\85<+\84;*\84;,\85<-\84<.\84<.\83=1\84>2\84@3\86B7\88C4\91H9\95F5¡H:¯J@¸IB·HA¶KE²TL¯eZ¨se\9e}l\8f\7fo}{llteZfXMYKKM@JH<EC7>>2=:177-44*11'23+12*03,/2+.0+,1+.0+,1+.0+,1+.0+,1+.0+,1+.0+.0+/1,/1,/1,/1,01,01,01,10.3,48.6<23>42G@:[VSvsz\8a\88\9d\90\93\93\97Ç\90\96Ò\84\8cÍx\82Àpz·jsªgo\9d\_~XZqQViQXhT^hYfleuuq\81~s\87~}\91\85\81\96\87|\8e\80u\87wp\81qdueZfRZYD_Y?a[C*./*./*./*./,.-,.-,.-,.+,,*,,*-,(-,(,+',+',+'+*&+*(+*(+*(+*(+*(+*(+*(+*(,+),+),+),+),+),+),+),+),+),+),+)-,*-,*-,*-,*.-+.-+.-+.-+.-+.-+.-+.-+.-+/+(0,)1-*1-*2.+2.+1-*1-*0,)0,)0,)0,)1-*3/,40-51.80-91.:2/;30<41<5/=4/=4-=4-=4->3-?5,@6-B8/E80F91H;3H;3I<4M<4N;4R94U82[6.b70h6-r6,{7,\859,\8d;/\92</\96=/\9c@3\9d@1¡A3§A3°B5¹C7ÄD9ÌC9ÔE=ÖG?ÓI?ËH>¼F8­C3\9fC.\99A-\9cA.\9b@-\9b@-\9a?,\9a=+\9a=,\9b>-\9a?-\98<-\95<,\93=,\90=+\8e=,\8c=,\8a=+\89>+\88=*\88=*\87<)\87<)\87;+\84;*\84;,\83;,\83;-\81;/\82<0\81=2\83?4\84B6\85B9\87C6\93K=\96I9 H<«JA²KD±KF±TM­_U¬rd¦\81o\9d\8cx\8f\8ez\81\8awr\80ocqbWcUKRBKM?GI;CE7??39;.35*/1&01)/0(/0*./)./*-/*./*.0+/0+.0+/0+.0+/0+.0+/0+/0+01,01,01,01,01,01,01,1/04,76,78/2;62HE>]^Vxy{\89\8d\98\8e\94®\8f\97¼\8d\95Ä\84\8eÁ}\89¹{\8aµ|\8c°|\8b¨|\89\9aw\84\8dq~\86n}\80l~~n\83~x\8d\84\82\9a\8d\8a¢\92\8f¨\95\8f¦\92\87\9c\89\80\95\82z\8dzj{i\hRWW?\X;_[@*./*./*./*./,.-,.-,.-,.-,,*,,*-,(,+',+',+'+*&+*&+*(+*(+*(+*(*)'*)'*)'*)',+),+),+),+),+),+),+),+),+),+),+),+),+),+),+),+)-,*-,*-,*.-+.-+.-+.-+.-+/+*/+(0,)1-*1-*0,)0,)/+(/+(/+(/+(/+(0,)1-*3/,3/,80.91.:2/;30<41<41<3.<3.=4/<3,=2,>3-?4.@6-C6.D7/F93F93G:4I:3L:6M83P72T50]6/c7.l5.v8-\7f9/\89;/\8f=1\93=0\98@4\99@2\98?1\9d@1¤@1­A4·C6¾D7ÇG<ÊG=ÉI>ÂH=¶F8¨B3\9cA/\97@-\98A-\97@,\96?+\96>*\96=+\96=+\99>,\97>,\95<,\94=,\90=+\8e=*\8c=,\8a=+\88=*\88=*\87<)\87<)\86;(\84;(\84;*\82;)\82:+\80;,\80:.\7f;.\80<1\80>2\82?6\82B8\84D:\85E;\91K?\95I<\9cH>¥KC«LF¬RJ«]S©k^§\81\8ex\9a\9a\82\8e\9a\82\84\96\80x\8bwlzian]R[HNUCJN?DH9?C5:>057,13(/0(./'-.(,-',-(.-)/.*0/+/.*./*/.*./*/.*./*/.*./*/0+/0+/0+/0+/0+/0+/0+0./5-85+63-/961HJ=aeWy\80x\88\91\90\8c\94¡\8c\96¯\8a\95³\83\90°\80\91­\85\99±\8c£³\90©°\93¨©\8f£¡\8b \9b\87\9e\96\80\9a\8d}\98\89\80\9d\8b\87¤\8e\93±\99\96²\99\93­\94\8b£\8b\84\9c\84|\92{i|fXfOSV;XW9]Y<+/0+/0+/0+/0+/0+/0-/.-/.--+,,*,,*,,*,+',+',+',+'++)*********))))))((((((************************************************++++++,,,,,,---------/.,/+*/+*0,+0,+0,+/+*/+*.*)/+*/+*/+*/+*0,+1-,2.-3/,91/91/:20;31;30;30<20;2-<3.<3.=2.=2,=2,?4.B5/C60B73B73C84D93G96G83J71M60V80]7.g6/q8-z:0\84<0\8b=0\90>2\96?5\96?5\95?2\97?1\9c@1¢B2«D5²D5¹E8¼F:¾H<¹G<¯E8£B2\99@0\95?.\96A-\95@,\94?+\94=*\94=,\94=,\95<,\95>-\93;-\92<-\8f<,\8e=,\8b<-\89<,\87;+\85<+\86;(\86;(\84;*\83:)\83:+\82:+\819+\7f:+\7f;.~<0\7f<3\7f?5\81A8\83D;\85F=\86G>\8fK@\91I=\98H? KD§PI¨XQ§g[¤vf¡\8du\99\99}\94£\86\8b¤\87\84\9c\82|\92}s\82ojudZfRU^ILUBDM:>E59@07;-47,01)/0(.-(,+&,+'/+(0,+1-,0,).-)0,).-)0,).-)0,).-)/.*/.*/.*/.*/.*/.*/.*1-.7-85)31,)66*GL8_iQw\83m\86\92\84\8b\97\93\8d\9a \8b\99¤\86\97¡\87\9c¡\8f©¨\99¹® À±\98·¨\97¶¦\98·¥\98¸£\90²\9a\89«\92\89«\90\8e±\93\92³\94\92³\94\8f¬\8e\88¢\85\83\9b\81{\92xg{bTbIPT9TU6XW9+/0+/0+/0+/0+/0+/0-/.-/...,--+--+--+-,(-,(-,(-,(,,,,,,+++******)))((((((*********************************))))))))))))(((******+++,,,,,,---.......*)/+*/+*/+*/+*.*)-)(-)(/+*/+*/+*/+*0,+1-,3/.3/.:20:20;31;31;30;30;1/;1/;2-;2-<1-<1-<1+=2,@3-?4.?61>71?82@93B94B94D71G6/O6/V5,^6,i7,t:.~<.\85=/\8b=0\93?5\92>4\92>3\93@2\94A1\99B1\9fD2¤C2ªC4¯C6³E8¯E8©C7 @2\98?1\95?0\93@.\92@+\93>*\92=)\93<+\93<+\93<+\93=,\91;,\8f<,\8e=,\8b<+\89<,\87;+\85<+\84;*\85:'\85:'\83:)\83:)\819*\819*~9*}9,~<0}=1~>4\7fA6\82C:\83G=\85IA\89JC\8dJA\8dG=\97HC\9fOH¦UQ¦`X¦qc¢\83o\9b\95{\94¡\83\8e©\88\85¦\87\81\9f\83~\96~x\87tp|hcoY[iRP]IGS?@K:<E49?19=/24)01)/.).+&-)&/*'1++2,,0+(/+(0+(/+(/+(/+(/+(/+(0,).-).-).-).-).-).-)1+-6*44)11,&56&CL/ZhEs\82a\84\92x\8d\9c\89\8f\9f\94\8f\9e\97\8a\9e\95\8a¥\96\95µ\9e¡Æ¥§Ï¬¢É¬¥É¯¤Ë®¡È©\97¿\9d\8b³\90\87¯\8a\8d³\8e\8c²\8b\8e²\8c\8c«\89\83¡\7f~\99zv\8frcw\P`ELR6QR3QR3+/2+/2+/0+/0+/0+/0-/.-/..0/.0/..,..,..,--+.-).-)------,,,+++******))))))******************************)))))))))((((((((()))******+++,,,---.......*).*)/+*/+*.*)-)(,(',('0,+0,+0,+0,+1-,2.-3/.40/:12:12;31;31;31;31;1/;1/;1/;1/;0,;0,;0,<1-?2,>3-<5/;60;83<94<94=82?82@5/G4-N3*W5+b6+m8*x:+\7f<,\85<-\8f=2\90<2\8e>3\8f@3\90A2\91B1\95B0\99@.\9e>.¥?1©A4©C7£A4\9c>2\96>2\94>/\92?-\90?*\90=+\8f<*\91;*\91;*\91;,\92<-\91;,\8f<,\8d;-\8a;,\88;+\87;+\84;*\84;*\83:'\83:'\829(\829(\819*\808)~9*}9,\7f=1~>2\7f?5\80A8\83D=\85IA\87JE\89ME\8aJA\8eH@\95JE¡TN§\W©i`§|l£\8ey\97\9c~\8f§\85\87­\88\80©\87\83~\98}}\8avw\80miw`brXXgPO]FHT@CL;>D6<@257,34,0/*/,'.)&1)'2)*3*+2*(0+(2*(0+(0+(0+(0+(/+(0,)0,)0,)0,)0,)0,)0,)1++6)25)-1-"46 ?I&Ud9o\80T\80\92j\8b\9c|\8e \86\8f¡\8b\8a¡\87\8b©\87\94·\8d\9eÉ\94¢Ñ\9b¦Óª¥Ñ­¤Ð¬\9eˤ\90½\94\82¯\84\81¬\81\85°\83\85®\82\8a±\85\88«\83\7f\9fzy\94sp\89i_sWM]BIO3JM0IL/,01,0/,0/,0/,0/.0/.0-.0-/1.00./0+/0+0/+/.*/.*/.*/.,/.,.-+-,*,+)+)*+)*)))))))))))))))))))))))+)))+),+)**(+*())'(((((&''''))))))***++),,*--+..,..,,+),+)-,*/+*.*)-)(,('+'&0,)0,)0,)1,)2-*4/,50-61.:20;31;30;30;30;30;1/:0.;1/:0.;0,;0,;0,;0,>0-=2,=4-<5-:70991891891991>7/@1*I0)R1(\4*f6*o:,t<-z<-\86>2\89=0\8b?2\8c@2\8eA1\8f@1\91@/\93=,\96=-\9c?0\9fB3 C4\9dA4\99@2\95?0\92?/\93=,\93=,\90=-\8e=,\8d<+\8c=,\8c=,\8c=,\8c=.\8b<-\8a=-\89<,\87;+\86:*\84;*\83:)\81:(\7f:*\7f:*~;*}:)|:*|:,y:+~>2~>2\80@6\81B9\82F<\85JB\87NE\8aOG\8aIC\8dHC\92OI\98\T\9ch]\9cuf\9d\88u\9d\99\80\93¢\85\8cª\88\88­\8b\81©\87\83}\9a~y\8fxs\87ng~baz\ZqUTfLM\EFR>@I8=A379.55-4/+0+(0(&1'(3)*3*+/)).*'.*).*)/))/))/))/))0**0**0**0**/+*/+*/+*0*,4)/4*+2.#35\1f<F#Q`7l}Q\7f\90f\87\99s\8a\9ey\8b¡}\88¡z\87§x\90µ\7f\9aÃ\87\9dÊ\8f\9cÈ\97\9cÇ\9c\9bÆ\99\96Á\94\8b\88\81¬~\83®\80\8aµ\87\82¬~\87®\82\86©\81|\9cwu\90ol\84dZnSIY>DM2EI0CG.-/*.1*.1*.1*/2+01+01+01+23-32-43.32-52-41,30+2/*50,4/,4/,3.+1-*0,+0,+-,*.,-.,---/--/+,.*+-()-))+.)/.)-.)/.)-.)-,*-.*+,*+,+)-,*,,*,-(-.)-.)-.)-.),,*,,,---.,-/.,/.,2.+2.+1,(2-)3.(6/)70(81):1*:1*;4,<5-<5-<5-=4/<3.<3.;2-;2-;2-;0,;0,;0.;0.<1/>0-A0)?1(;4*57*28,19.36-83-?-)E)&K($R)%Y.'`5,d<0k@0x@/\7f@.\85@0\8aA2\8f@1\91>0\91;.\919+\92:,\93=.\93@0\94C2\93B/\92A.\8f>+\8f<,\95;0\96:/\92</\8c=.\87>-\83?,\82?,\81>+\85@0\87?0\87>/\88<.\87;-\86:,\84;,\82:+z8*~@1w<,q8'w>-w>-u<+{@0{<-\81?3\87E9\89I?\87K@\86MB\83OB\87NE\90LI\94SO\94bY\91pa\89}g\86\89n\87\96y\87\9f\7f\8b¤\86\8b¦\87\8d§\8a\8a§\89\85£\87|\9f\81t\99zn\96tg\8dh`\84^Y{XYtSZnRVfLNWDIK=A?3=829/-4*)3')3'+2&*0'****',((*))))*()-)*.(*1(+2).2).2(02(00)0/*0/*0/*./)-1++0-(/0";>)S\?nyW|\8bd\8b\9bt\89\9es\8b¢t\8b§v\89§s\87ªr\8e´{\97¾\85\9cÁ\8d\9a¿\8c\95¹\89\8e´\83\88®}\83«y\82©z\83ª}\82§{\82¥}\7f\9fzv\93tp\89lf}aYkUMZFHQ<CH4>C/.1(.1(.1(/2)01)12*12*12*44,44,63,63,63,52+41*30)7/,6.+6.+5-*2-*2-*0,+0,+.,-.,---/--/+,0*+/)*.)(--(..'..'..(,-(,-)*-)*-)(-,*-,*,-(-.)-.(-.(./)./*,.+,.----..,/.,/.*1-*1.)2-'3.(6/'70(90':1(<2);2)=4+<5+=6,=6,>5.=4-<3,;2+;2-;2-;0,;0,;0.;0.<1/>0-B/(C1'?2)<3*95,95,83-:1,?-)C+'G)'N+'T/)Y4,_:1d=.o@.w@,\7f@/\88@2\8e?2\91=2\92;1\91:0\8c:,\8a;,\8a>.\89@/\8aA.\8bB/\8eA/\91?1\93;/\94:1\90<1\8a>0\84?/\81@.\7f@.\80?-\83@/\84?/\86=.\85<-\84;,\83;,\82:+\7f<,w7+x<1r:+n9)s>,r=+q9(t;*|=.\82@2\88F:\89I=\87K@\85M@\83OB\87NE\8fIG\94SQ\92f]\8cwf\82\86m~\93t\7f\9e~\82¥\84\88§\87\8a§\89\8f¨\8b\8e§\8a\88¥\87\7f \83t\9b|m\99vd\93i^\8b`X\82ZX|VYwUXoRRaJMVCDH:@@6:724/,1++2)*/)+-)****)+*))))))+),-(,/)-0*.2(00)00)0/*1/*1-*1,+1,+02-12.-/+(,,$8:,SXBnwZ}\8bg\85\95n\83\99k\86\9el\86¢o\85£o\82¥m\87¬v\90µ\7f\98¹\84\96·\82\91³\80\8a¯{\85ªw\82¨u\82¨y\82§{\82¥{\81¤|~\9d{w\92so\88kh|cYkUMZHDM<=D4:>//2)/2)03*03*12*23+23+23+55-55-74-85.74-63,63,52+81+70*50,4/+3.*2-)1-*0,)/.,/.,......--/,,.)*,**,.)-/)-/)-/)-.)-.*+.*+.*).-+.-).-)/.*./)./)/0*/0+//-///..,..,/.,/.*1-*1.)4/)4/)70(81);2)<3*>4*=5*?6->7-?6-?6-?6->5,=4-<3,;2-;2-;0,:/+:/-;0.<1/>0-@1*D1*G/+J.+K+,J*-G*,C++A.*=.'@/(C/&M/'W0)b3-e5+i9+n:,v<.\7f=1\87=4\8b;4\8d:2\8a:1\89<2\87=2\84?0\83@0\86A2\87B3\8bA4\8eB4\8d>1\8d>/\8b>.\87>-\86?-\83?,\84=+\85<+\88<,\87;+\87;+\86:*\82;)\7f<){=(z=*|>/z</u:,u;-w?0w?0u=.v;-~@3\82B6\88E<\89I?\89K@\87K@\86MB\88ME\91JH\95TP\96f\\90ve\87\85l\81\92r\7f\9d{\80¤\80\85©\85\86©\88\8bª\8a\8e©\8a\8c¥\87\86\9f\82\80\99|x\97wg\96l_\93eZ\8a`Z\87^[\83^Y|[SqUPhPFYE@Q?8D60:/,3+)0)(-))+(.((0'(/&'/&'.(*/)+0*,0,--+.,,.+,.)-0)-0(-0&.0(-01/23/..*'**"57)PU?luZ{\89f\7f\91k}\94h\7f\99j\81\9fm\7f\9fm} j\80¥q\87¬v\8a¯y\89®x\86«w\82©t\80¦s~¦r~¥v\7f¦y\7f¤y\7f¢z|\9byv\91ro\88kg{bXjRMZFBI9<@18:,14+14+14+25,34,34,45-45-66.66.96/96/96/96/85.74-92,92,61-61-50,4/+2.+2.+0/-10.1/0//////---,,.+++/*.0*,0*.0*,/+,/+*/+*/+*/.*/.*/.*0/+/0*01+01+01+00.00.00.01,0/+0/*2/*2/(61+73*:3+;4*=4+>5,@6,@6,A8/@9/A8/A8/@7.?6->5.=4-<3.;2-;0,;0,;0.;0.<1/=2.A4.E2,L.,R+.U(/U&.P'-H*,A/+;2):3)<2&G1&R0'^/)b0)g8.j:.t;0|=4\83<6\89;7\89:5\88;5\88?8\85A8\84B6\82B6\85C7\86B7\87A7\89A5\88@1\87@.\87@.\86?-\85>,\86=,\87;+\88;+\889*\889*\869)\83:)~;({=(v>'w=)\81?1z6+x8,y;.u:,v<.z@2z@2~C5\83E:\86H=\87I>\86J?\86L@\87NC\89PE\8cSJ\8d[P\8eiY\8at_\83\7ff\7f\8al~\96t\7f\9fz\82¦\82\83©\84\87«\87\88ª\87\89¦\87\86¡\82\81\9a||\97xp\96oh\93hd\8efd\8dee\8bfc\87c]~_Zw[OgOH^I?P>6D30;-,4)).'*+%1'&3%%1%'0&'/&'.((.*),,,)+*'+*'+,&,,&,,$-,&+.'+,.*+1,)/*&.+"79+PUAhrWt\83b{\8dgy\90fz\95h\7f\9cl|\9elx\9diy k~¥p\80§r~¥n}¤o{£o|¤p}¥s}¤u}¤w{ u|\9fwy\98vr\90nm\86he|`WkPM[DBF7<=/78*25,25,36-36-56.56.56.56.77/880;81;81;81;81:70:70<5/;4.94083/72.61-51.51.51.32.32032021/10.0.//.,1+-3*+1+-1++1++1++0,+0,)2.+2.+10+10+10+21,12*12,22022022012-21-21,41,50*;4.;4,=4->5,@6-A7-B8.C9/C;0C;0C;0C;0B90@7.?6->5,=4-<3,<3.;2-;2-<3.<3.=4/@51E3/L0/S,1X)1W(2R)/I,.A2-:6+66*97(B4'L1&V0'[.(d90h<3q<4z=8\82<:\85;:\86;8\84:7\81:6\80=7\80@7\81B9\83C:\82B9\85A8\84@5\81B0\81C.\83B.\83@-\85>,\87;+\88;+\889*\897)\878)\859)\7f;({=(x>(t@(v=)\808*{.$\808,\83?2v4(s5(|@5}C7}E8\7fF;\82I>\83J?\82L@\84NB\87QE\85WH|aLyiP~pV\80v[\80|a\83\86i\85\93r\87\9dy\82¢}\81§\80\80ª\82\80­\84\80ª\84\7fy\9fzz\99wz\92py\8fkw\8diu\8dit\8cjr\8ajm\84gk\7fd_qWYhQO[GFM;?A3:8+40%4+$5'&5'&2&&0(&.)&+*&+,'*,)',(',('+*)+*)+****+),-)**%"0+'50*86*@C2RZCcpTl}[t\88cq\8a`s\90bv\97hv\9ajs\99fs\9bgw\9fjy¡lu jt\9fjv¡ly£q{¥uz¤t{¢ux\9dry\9ctw\96tp\8ell\85gd{^UlOL[DBD6=;/86*47.47.47.58/67/67/780780991991<92=:3=:3=:3=:3<92=82>71<73;62:5194084173084184165165154243/21/40-3--5-+3--3.+3--3.+2.+2.+3/,30+21,21,21,32-23+23-34/34/34/45/54/85.94.95,=6.=6,?6-@8-C9/D:0E;1E;1F<2E=2E=2D<1C:1B90@7.?6-?6/>5.=4/=4/=4/=4/>50?61?61C52I43O13S.5S/3O/2J20C60<8-;9,<9*A8)H6(P2'V1([3)b3+k4/t72}75\8176\8266\8174~73}:4|;5}>5\7f?6\82?7\85>8\84@5\80C1~D0\80A/\81@.\83>.\85<-\86:,\879,\859+\83:+\80;+~=+z=*x>*v?*{<*\844)\892)\9fLD¦XN\89@7{9-\82F;\7fJ<yH:xJ;zL=yN>}O@\80RC\85UG\81^JrkNosP{vX\85w\\8dy`\96\80h\9e\8a\94z\95\96w\8e\9cy\8b£\7f\88¨\81\84©\80\7f¥|z y|\9av\81\90o\84\8dn\82\8dm\7f\8em~\8foz\8fnv\8blq\88ki}aeuZ\hPS[DLM;EB1?7*:0&:-'9+(5*&2+%.+$+,&*-&(-&).(+-(-,(/+(2)*3)*6'*6((1(#:3)D>2HF7OR=[cKdqShyWm\83\i\84Yj\8a[m\91ap\94dn\94an\96bo\9aet\9fjr\9dhp\9cgr\9ekw£ry¤vy£ux\9fsu\9aqv\98st\93qn\8cjj\85fb{]UlOL\BAC5=9.:3)58/58/58/690780891891891::2;;3>;4>;4?<5?<5?<5>;4?:4?:4>93>93=82<71<73;62:72;83;83:72:6385073063.50-7/,7/-7/,50-50,50,50,41,41,52-52+33+44,44,43.43/540651761:72;81=82=90?80?8.A8/B:/D:0F<0H<0G=1G=3G=3G=3G=3E;1D:0A8/@7.@70@70?6/?6/>71>71?82?82?82@93B94D95G96H96H94G:2C90C9/C9-E9+F9)G:)J9)Q7(Z0$d/'m2,w60\8285\86;8\8a<:\88=8\8bB<\86A:\81>6~;2\7f;2\81;3\87<6\88?6\83A3\80A2\80A2\81?1\81=0\81;/\80</\80</~<.{=.{=.y>.{=.{=.|=.\839,\8f1)¡;6ÌkeÙ\7fwªZQ\8cC:\88LA~M>tJ:qN;oP<nR=sT@zWD\81\I}eMmsMnzR\84y[\96v_§o`³mc»pj»wn»\83\8c\96}\9d\9e\7f\94¢\7f\8b¡{\84\9ey\84\9av\88\92p\89\90o\86\91o\84\94p\80\96r{\95ru\93or\91ok\8ahh\83bax[[kPT^ELP9DC/@:*>4+=2,:1*51(2/&./'-0',/&/0*2/*6,*9+*=)+A&+D%+A'(C5,KD4VQ>[YD^bIenQhxTg|Ui\82Xe\82Tf\86Wj\8f\n\93`m\94_n\96ao\9aes\9eio\9bhm\99fp\9ckv rx¡ux\9eut\9ass\97qt\96ss\92pm\8bii\84ca|[TmML\AGH8D=3@7.6906906906908918919:29:2::2;;3>;4?<5@=6@=6@=6?<5A<6A<6@;5?:4>93>93=84=84<94<92<94<92<73:70:5194.91.92,91.92,91.72,72.72.61-52-52+52+44,44,44,55-54/54/761880<92=:1?;2@<1@9/@:.B:/C;.E;/F=.I=/J>0H>2H>4H>4G=3F<2D:0A8/@7.B92A81@70?80?82?82@93A:4=82>93A:4C<4E<5G=4J;4L;3K7.M7,N6*O8*O8(O8(O:'T7'f6(q5*}:1\89@9\93D?\99IB\9dJD\9cLE\9fPI\96LA\8cD8\84<0\836,\857+\8c:/\8d=4\88>5\86=4\86=6\83=3\82<4\80<1}=3y>0w?2u@0u@2y?1}=3\81;1\8783\8f4/\95(#°=8ì|zý\96\91Ãia\95H>\88J=wH8mL9gQ:eU<fV=lX@t\D|`J\7fgMxrN\83vS\9ds[´l^Ç_\ÒUY×QZÖS[ãpsØyuË\85\8f\94\95\92x\9e\90u\9b\89q\9b\8br\98\8cr\95\90s\8e\91t\89\92s\84\92q\81\90q{\8clw\86gs|amoWgbL^S?UF3O<.L3,M1-H1+B/(=.'9/&6/%5.$81)90)=.)@-)D*+G)+J'+G)'RB3YQ:d^FfeIglLkuSk{Vi~Uk\85Xg\84Tf\86Ul\8e[o\94`p\97br\99dt\9chr\9cjo\99im\97ip\9alw\9dty\9fvw\9bwr\96rr\94su\94tr\91ql\8ahi\84ca|[TnKK^BMN>KB9F=48;27:17:17:19:2:;3;<4<=5<<4<<4?<5@=6A>7B?8B?8C@9E@:E@:D?9D?9C>8C>8B=7B=7@;5@<3@;5?;2A:4?;2A:4A:2@93@70@72?80>71>7/=60;60<71;60:7096/85.74-74-63,66.66.85.96/;60=90@91A:0B90C;0F<2H>2K?3L@2L@2L@2MA5L@4K?3J>2G=3F<2E;1D:0B90A8/?8.?8.>7/=90=90>:1;4,MD=K@:J92S?8R70N/*^;5Z3,^6.^3*[/$\0#e7*k=0q=0\88J=\8cG8\95I<\9eLA\9eG>\98>5\9a=5\9dC:¤MC¤QC¨VHªXJ¥OB\98@2\97;.\9b?4\9295\8f:7\8c65\8540\8573\83?6|@6r>0rB4n@0o>0v:/\8182\8941\90-0\98')ÇGFçc_ÂECËXUàzu«WM\85E9\84VFmR=g[AhcFhdGhaDm_DzdL\8bkR\90bJ²n[ÑnhÚY]à;Kæ,Cð+Gò0Kö@WêIYä[eãorâ|zÚ\81\83\89\81Á~u¼\82\84\87\88\8a\8b\8bw\97\81l\98\7fk\95xh\93oa\8cbV\83TJzH?w@=t9;g/2d02_11N&$G&!J1,K70G4.D3,D1+E2,F.,D*)J.-O6/XI4`W:e`BeeCioKs}Xs\83\m\82Wj\84Wk\88Xn\8e]q\93`t\96cs\98bu\9adv\9bhq\96jr\99ms\98oq\96mr\94qw\99vz\99zx\97xw\94vq\8epj\87ii\84eg\82a`{ZSnKM`DNO?QK?OI=7:17:17:17:19:2;<4<=5=>6>>6>>6@=6A>7A>7B?8B?8C@9E@:E@:E@:D?9D?9C>8C>8C?6C?6B>5D=5D=5C<4B;1B;3B;1B92A8/A81A81@91@91@91@91<71;60:7096/85.85.74-74-66.66.96/96-;7.=9.A:0B<0C;0C;.F<0H?0K?1L@0L@0L@0L@2L@4K?3J>2I<3F<2E;1D:0B90B90@9/?8.=90>:1>:1A:2C:1I81J.*U-+i65t88{;;\84DB\81D?\83H@\84J?\84H=\8dJA\98OF\9fPK\9fOF\91C6\91B3\98B3\9dD6\9f?3\997,\9c7+\9e</ C4\9b@.\99@.\9fD2£F5§F6®H9µMB²LJ­IK¤@B\9889\9197\8c=8\82?6v>1n=.yH9\84L?\84@7\82-*\91*-²:CÒLUÚLKÞOKÈ>;À@=Ï`Y³YP\84@3\82UBx`Hc\?]^?hiIrmOugJ}eK\93cMºdWÕ_[äUYè@Mò,Cü&Bÿ%Gÿ&Hÿ-Kø2Kð=RîIYèP\ãQ[âR\ßWaÛbiÕflÓimÑmoÍqrÊtsÈwtÆxtÇ|yÈzxÆvwÆqtÅjoÅflÄ`jÃ_iÄ_m³S_¥KU\99HO\8dEI\84FIk87F\1d\19T1-K0)H1)I7-J91K:2M?6SF6[O5cZ9fb?ggCnrMx\82]z\89br\87^o\89\n\89\o\8c^q\8e^s\93bu\95cu\95cu\95fr\92iv\96qz\98vy\96w~\98{\83\9d\82\84\9e\85\83\9b\83\81\99\81y\91yq\89ok\84gg\82c_zYSnKNaCPS@TQBRNB6906907:18;2:;3<=5>?7?@8@@8@@8B?8B?8C@9C@9C@9C@9EB;DA:DA:DA:EA8D@7D@7D@7HA9HA7H?6G>5F=4E=2D;2D<1C:1C;0C:1C:1C:1C:1B;1B;1<8/<8/<8/;7.96/85.85.74-96-96-96-:7.<8/=9.A:0B<0C;0D</G>/J>.L?/M@/M@/M@0M?2M?2L>3J>2I=1G;/E;1D:0C;0C;0A:0?;0?;0?;0?<3B;1UD<R3.i33\8d@F¬KTÂT_Ë^dÅ^a\9aB>\96H>\94L>\9aNAªQI½TPÊORÄLK£A4\9bB0\9eA0£?0¥;-¢6)¢8*¤=.«F4 =*\987$\9c9$¤=*«@.²C2¶D9¥11®9?¹DJ¼KO¸NP­KJ\96A<\807.y9-u7*w3(\841+\9c45¸<DÓGTåMYáGGÏ61Î:6½30ÇMHÆd[\94J=\8b[G}cJi`AedEspO~qQ\80iJ\8chN°hYâbaóRZóCPõ6Hý2Hÿ1Kÿ/Lÿ+Hÿ1Lû/Hõ1Iô4Kò5Kï2Hò2Kó7Oò@XïC[íE\ìI^ëNcéReçTgçUhãThâSgâPgâNhçNjëQmòSsóVuýg\84ña|ã[sÔVkË[kÉdr¥RZr-0\&&W0+V;2O?2A;-89)=A0KO8VO2`X4e_=ffBptQ|\86c~\8civ\87cw\8dgs\8cer\8bdq\8cct\8dev\8few\90fw\90h}\95s\83\9a}\88\9f\83\8a¡\87\90£\8d\96©\95\97ª\97\95¦\96\90¡\8f\86\99\86y\8cxn\85kf\7fb^wWSnKOdESXBWVDXVG58/58/6907:1:;3<=5>?7@A9AA9AA9C@9C@9DA:DA:DA:DA:EB;EB;EB;EB;FB9FB9FB9FB7JC9IB8I@7H@5G?4E=2D<1D</C;0C;0C;0C;0D<1D;2C<2C<2?80=90<8/<8/:7096/85.85.96-96-96-:8,<8->:.A;/B<.D</F=.I=-K?/M@/M@/M@/M@/M@0L>1K=2J<1H<0G;/D:0D:0D<1B<0@<1@<1@<1@>2@=4F<3Q9/Z+%\87;=½U^ÙUcæUfâT`ÊIN\9f30\96:/\90?.\97A0­F=ÄJEÔAGË?@±B7¥F4¨B3«A3®>0¯?1±A3³E6±H5¨A.£='¤;&¨;'ª9'«6%­3(¶97º9=¼7<»6;¾=AÄIKÄTR¾XS\99?6\8a3)\86,#\9d61ÂGIÜOWàBPÙ3=Ý98Í.(Ñ82Ç82ÅD>Ç\R¦WH\8fXDvV=veG{pP\7fpQ\82gJ\8edK©o[ÒthìSVûCOö<Iø9Hþ=Nÿ@Qþ;L÷4Eÿ?Sþ9Mú5Iü2Hü0Iþ.Hÿ/Kÿ5Rÿ2Qý4Tû6Tú7Wø9X÷<[õ>]ô?^öCcõAdó?dó?fø?hûBlÿEpÿHqÿOuÿQrþUvòSqæSmãbvÖftµXb|15g0-W2*N8+E>,=@+8D.>F.PK.]T5f_BnjMy|_\87\8dq\84\91u|\8apy\8cpz\8er{\8fsy\8eox\8bm{\8cl\81\92r\87\96y\95£\8a\9b©\92¢¯\9d¥²¡ªµ§®¸­®¸¯ª´«\9f«\9f\94 \92\81\92\80q\84pe|b\uWRmLPeFPZBUXCWZE47.58/58/7:19:2<=5>?7?@8AA9AA9C@9DA:DA:DA:DA:EB;FC<FC<FC:FC:GC:GC:IB8IB8KB9KC8JB7H@3H>2G=1F<0E<-D:.D:.D:.D:.C;.D<1D<1C=1@9/@9/=90<8/<8/;7.:5/:5/96-97+;7,;7,>7-@:.C;0D</F<0G>/J>.K@.M@/M@/M@-M@/N>/N>1K=0J</H<0G;/D:.C9-C;0B<0@<0@<0?=1@>2A?3I<3\5.u40¬LPÚ^håM\ã@QÖ6B¶%(¨1)\9b7'\92:&\96;&ª@2ÁE;Ô>?Ë;:°>3§C3ª@2¬>1±?4¸C9»G:¹I;ª?-¨?,¦=*¥:(©8&°;*·<-º<0ÊG?ÎDAÏ==Ï68Ô8;ÝADàLLÝROÃD=ÆKCÌSJÓTMÙKIÛ?Bà5=à16Ú3-Ù8.Ï2)Î92¾71³A7´\N\95TBxN6\80bF\85jM\84aE\8f[C­fRÊqcämgèEJï:Cè9@æ=BæCHæEJçFKêGLòKSñALò9Gö5Fø1Fý/Fÿ2Jÿ8Rÿ9Uþ9Uþ9Uý:Xý<[ý>_ý?aýAdÿCiþDküClüCmüCmüCoüCoýBmÿGpÿAfÿGmÿMpñJhèNhå\pØbr»Zc\8b?A^'$O*!TA2TO;IL7?C,QK3cXBskV\7fzf\8b\8dx\97\9c\88\93\9c\8b\86\93\82\81\8f~\88\96\85\8d\9b\8a\8b\98\87\86\91\81\89\92\81\96\9d\8d¢©\97±µ¦¸¼­½Àµ¿Â¹ÂýÄÅÀÁÃÀ¼¾»¯´®¡¨ \8b\97\8bx\86uh{e\sWSlLPhHN[AUZCW\E47.47.47.58/891:;3;<4<=5??7@@8B?8C@9DA:EB;FC<FC<FC<GD=GD;GD;HD;IE<KD:KD:KC8KC8JB5IA4I?3H?0G>/G>/F=.F=.F<0E;/D</C;.C;0C;0A:0@9/>:1=90<8/<8/;60;7.:7.:8,;7,<8-?9-A;/C;.D=-G>/H?.K@.LA/M@/M@/M@-M@/N>/N>1K=0J</H:/F:.C9-B:-C;0A;/?;/?;/?=1@>2@@4L;1k92\95FBÃY]ÚW_ÝCOÜ8CÒ38¼+(¬0$ 7"\95\959 ¢<&´?.Ã:0¾8/§7+¡;-¤8,§7+¯:1¶A7ºE;·F8¬>/ª?/¦;+£5$©5&µ=/ÃE9ÊH;¼8+Î@6ßD?ëAAñ=@ñ8=ê37Ü./Û75áFAçRKåNGÜ=9Ø0/â/2ê65Ø0'Ý;.Ê,!Ï8/½3)¯6-Çg[¶m\\8dVA\87[B\82V=\89S;©\JÍk^ÞgaãUTïFKî=Câ<>Ø>>ÒA>ÑFAÝOKêVVíNRíDKð:Gõ4E÷2Dø/Bû2Eþ7Lþ8Qý8Tû9Tü:Uÿ:[ÿ=`ÿ@dÿChþ;eý<hý>jü>lú?l÷=ló<lõ:gÿGqþ:`þ>cÿLnþLlõNjïUoâYmçq\7fÁ`i\95IKq:5[5*O8*OB1UM:\P@qeU\85|m\93\8d\81\9c\9c\90¤§\9e\9f¦\9e\93\9d\95\93\9e\98\9c§¡¤¯©¤­¨¡¦¢¥§¢´µ°ÂÁ¼ËÈ¿ÐÍÄÔÑÊÓÐËÔÎÎÔÎÐÐËÏÈÆɽ½½¯±®\97\9e\96\7f\8b}l}j^uYVoQTlLRaDU_DV`E47.47.47.47.67/7809:2:;3==5>>6A>7B?8DA:EB;FC<GD=GD=GD=GD;HE<IE<JF=LE;LE;LD9LD7MC7LB6NB4MA3MA3L@0JA0I@/I@1G>/E=0D</C;.C;0A:0A:0@91@91=90<8/<71;7.:7.:8,;7+<8,?9-A;/C;.D=-H?0H?.K@.LA/M@-M@-O@-N>.N>/M=0L</I;.H:-F:,C9-B:-A9.@:.>:.?;/?=1@>2??3N:1p1,¦KJ¿RUº=A¼/5Á/2¿0,¸2'©1 £9!\9c=!\96;\1c\99;\1f\9f="¥;#£6"\9d6'\9f7,¢6,¤4)«81¶A8·B9±A5°B5­A4§;.¥7(®:-»B7ÃD;ÃA4Â=*Ì>*Ù5)à)#ì""ù$(ÿ*/ÿ.1ì)'æ-(à2)ß4*à4*ã2*ç0*æ1*Ú3#Õ5%Ð2&Î6+Ä7.»?5Æ`TÐ~p¦eS\8fVB\88N:¡XGÇeZÞc^åSTçDIôGKëABÝ?<Ñ@;È?7Ä?6ÑF?âLKîIMó?Hø8Gü6Gû5Fø3Dö6Eú;Kú9Nù7Qû6Rû6Rþ7Xÿ9]ÿ;aÿ=eÿ>jÿ?mÿAoÿBqÿBuþBtüBtùBpÿElúAaýFeÿJiýLiÿVqÿ^yò]sñj{åo}Ònv­]^\83D?f5.gA6qUIwe[\8a}u \95\8f«¤\9e¯®ª´¶µ±µ¶§¯±°¸»µ¼Â½ÂÈ¿ÂÇÃÂÈÈÆËÓÎÔÜÖØáÙÖæÝØçÝÜåÛÜä×ÞãØàÞÔÜÖÏÖÉÄʹ¹¹¡¦ \88\92\87t\83pey`\sWYqQYiL[hJ[hJ47036/36/36/56067/780891;;3<<4>>6??7C@9CC9GD=EE=GD=GD;HE<HF:IG;JF:KG;MG9LF8LF8ME:MD;MD;LC<LC<LC:MD5LC2KB3I@1G?2E=0D</D<1B;1A:0A:2@91=90<71<71<71;7.;7,;7,<8-=9.?;0B;1C=1F@2H@3JA2JA0LA/M@-O@-N?,L?/J>0L</K:0J9/I80E8/A8/>:/=;/;;/:<.<=/=>0A?0S9,\85<5Â\XÇZW­73ª-)°1*­/#¬3"ª:$«A'ªG*¤E'¡B$¢@#¡>!\9e8!\9f9*£;0¤:-¦7,¬<1µE:µE9¯A4¨</¨</©;,¬<.ºD8ÆLAÃD;»7+½6"Ì;&Ü:+æ4*ñ+(ø((ü&(ù$&ø**õ.)î2)ê4)æ4(ä2&ã1%à3%à;(Ð1\1eÛ>-Î6)Æ8,À@5±A5Ïm`¾hY¥RB¦N@ÊdXåhbæRRé@EóBJê=Aß;:Ô<9Ë@9À=3¶8,¹6,Ã81âHHè?Dï:Cö;Fù;G÷9Eö;Fú>LþBSÿ?Tü<Sü:Tÿ8Uÿ9Xÿ:^ÿ:bÿ>hÿ>lÿ>lÿ?ný>qú@rø@r÷AqöBiþLlÿTsôJgêA^ûTpÿh\83ÿe\7fö\vî^uægxÛq}Åpu§ge\8c]W{ZQ\96\7f\98\91¼±«Ã»¸ÃÁÂÆÇËÄÇÎÀÃÌÊÊÖÌÊØÑËÙÕÏÝÝÕâãÛæèáéìãèîäãñçåòèçîäåíàçìßæèÝåâØàÐÉÐÀ¾Á©«¨\8f\96\8ey\85wkzgbv]`rXbpVboS`mQ01,12-34/5616727828938939:2:;3<>3>@5AA7BD7DD:DF;HH>GG=GH:GH8HI7KJ6LK6NL7NK8JG8GE9IFAMIJNIOGDMD?CNE<LC4JA2KB3LD7KC6F>3B:/D=3B;3@93?82>93=84;62:51B94B94@93>93=:5>:7=<8=<7@@8B?6D@5H@3JA0L?,N?*L@*G@-E?/I;0J70K61K63J88D:8@?:4:01<.9D39B/58#?=(bC/¼j\¶J>¥7*¤6)¦8)£5$¤6%¨=)¡8"¤;%¨?)¬?(¬>'¬9$«6"ª7$¢7'\9f8) 9*£<-©?/¬B2¬B2ª@0¨=+«=,­<*³>-½C4ÄF8À>1·1%Æ8*Ë7)Ð8*Õ9,Û7-á6.è3,í0,ñ.,ó-*ò/+ï2,ê5*ã7)Ü9(Ú;(Û:&Ó4\1fÏ2\1fÍ7&Æ7'»6'ÀB4ÎTGÇNCÎSKß[Ví^ZîPQë>Bñ8>ö?Dé@CÞCAÓB?Æ?9º;2±;/¯;,±;-ÉK?ÔKCÛFBà=>é<@÷?Gü>Hø:DýCNûCOüCQÿDUý@Vû;Tÿ<ZÿCbÿFkÿAhù<fô9dô=køBrüHxÿKzÿNyþNtöQsïPnåLhçMgûXuÿf\85ÿ_\83òGiöWwæ`yÂ]k¼z~\87a^\8fyn§\91\84»§\9cÐúÛÖÐÛÛÙÛÜàÝÜäâÜêåØìê×íñÙïôÝñ÷âñõèòôêòóíïùôñøóïöñîôîîñèéìãæèßäãÝáÕÐÔËÉʺº¸£¥ \8a\91\89x\83uq}oo|j}\86sw\80kt}h//-00.11/3315616727827829:2:;3;=2=?4?A4AC6BD7CE8FH=GG;GH:HI7HJ5LK6LL4MM5KJ6KI<KKCPPPWU`XWgUSiRO`NHJLC<G>7F=6F?7G@8E>6B;3C<6?:4?82<71=82>95<73;60<3.=4/=60<73<94<;7=<8>=9@?:B?8D@5H@3L@0L?,O>*L@*A?*@?+D</H:1J73G53D45>64>=97<59?3?A3C<,I9)\B3\7fL;­QBª;*\9f\9f6#¡:'\9d8$\9d9"£?(\9f;$¦=(­@+²?,´<+´9)¶7&³8(¨9(£9)£9)£<+¨?,ªA.ªA.ª?+¬?+ª9'±<*¿F5ÅG8Á?1»7*¿5(Ë7+Î6)Í9+Ï;-Ò<.×;.Þ7.æ3,í0,ñ.*ô.+ð1)è3(ß8(Õ:&Ó;$Ü<&Ø6!Ô7$Ó<)Ë:)À4%Â:,ÌF:ÐE>ØICçOLñQQòHIï<@ô:?÷BGåBCÚEAÐB>Ã>7·;1®:-©;*ª<+µD4ÅK>ÔNCÚG@â@>î>Aú?Fý@GøCJöCIúENüFRüCSù>Sû=VÿB^ÿFhÿCiú@gö@iøCnûGtüKyÿKzÿKzþItóKoñRrô[w÷^zúWvûMnûEkùEjíEhÙJfÆ_p°nrjKF\8f\7f\96\89̲¥ãÓÆìãÚéèäèéëéæïêâñõâøûáúÿãûÿçýÿíýÿòüÿ÷üýùøýùöüùôû÷ôøôñöððòììïéëíçéäÞàÚÖÕÈÇŲ³®\9d \99\8e\94\8a\88\90\85\88\90\83\8d\96\85\89\90~\86\8d}--+..,/0+12-23.4505606718919:2:<1<>3>@3@B5BD7BD7GG;IG;JH;JI7KJ6MK6NL7NK8KI:NKBTSQ_^dihxll\84kl\8aii\83^ZiYQ\OHPHAIE>EE?CC=?@::A;;>:7<73;60=82>:1>:1=9.84+95,;7.<90=:1>;2>;2><0C?4E?3G?2K?/M@0N>.O>,L?,:<$9>'=<*A;-A8/?6/<41940<94@;5G:4L3.W+(k/.\86<= GC£;0 2!\9d2 ¢9&¢<&\9d9"\9c8!¡=&¤;%¨>(¯@,µ@.¹>,»<+¾:+»<-±>,«<+©:)¨:)ª;*¬=,¬=*¬=*±>,­8&¸?.ÉK<ÊH8»6'º2$È:.Î6)Ò6)Ò9+Ó:,Ö:-Û9,â6,è3,ð0-ô.+ò/+í1(å3'Û6#Ó8"Ð8!Û9$Ú5!Ú9'Ú?-Ò<-È6)Å9,ËA6Æ;4Ì?8ØD@äJHéJGéCCì@@ëCBÜC>ÔD<ÌA:Â=4µ9-­7)©:)ª;*«7(ÀD8ÔNEÛJEà@@è>AöAHÿGOôAGòAG÷CLýGSþEUù@Rú>VþA]ÿEeÿDgþDküFoþItÿKxþM{ÿJzÿFwÿGvÿJsúOsÿZzÿa\80ýVtïEbùJkýTsÚ@ZÊI]Ø{\85·{{_B:\8f|n¯\8f\82Õ³§óÛÏúìã÷òîøöù÷ôýóëúùêýÿêÿÿëÿÿîÿÿôÿÿøÿÿüþÿýüÿýúÿýøÿû÷þùöýôõûòóúñôùðóïæçäÞÞÓÏξ½¹¬¯¨ ¦\9c\9d£\99\9c¤\97£«\9c\9d¦\95\9a¢\93--+-.)./*/0+01,23-34.45/7808919;0;=2=?2?A4@B5BB6HF:JF:KH9LI8MJ7NL7OM8OL;KI=QPK]\amlzyy\91\80\81 \7f\81§}\7f¥yu\96qj\89d^zYTkQLbKGXD@N@=HA>E=;>986952:70<8/<8-;9-88.991::0>;2><0></>;,>;*E?/F?-H?.K@.M@0N>.N>.K@.?=(<>)>=+></=;/<90::29:4::2C:3J50T,*g)*\8315\9d9Aª=@¤8,¢7%¥:(¨?,§>)\9f9#\9e8"¤;&¤:$«<(²?,¸?.½>-À<-Ä<.Â>1»@1³=/¯9+®8*®8*¯:)¯:)±9)´;*¹;,ÁB3ÊF9Æ>0¼2%À2&Í9-Ó5*Ø4*Ø6+Ú8+Ü8,ß7,æ3,ê2*ñ0+ô/)ñ.(ì0'ã1#Ù4!Ð5\1fÍ5\1eÕ3\1e×0\1eØ5$Û;+Ö=/Ð:,Í=2ÒD:Ã6-Ã6/Ê;5ØD@âMGäKFÞC>Õ<6Ð@7ËA6Å?4¾</´9*°8*®:+°<-«3%½?3ÎH?ØGBÜA?ä@AóFLüMRî?Dï>DôCKüHSþHUúCUú@WüA\þCbýDfþFlÿJrÿMxÿN{ÿLyÿIwÿEtÿO|ÿR}ýJq÷LnÿVuÿVs÷MhðFaîLdÐ>Sádrþ\9f¥Ñ\90\8ed92kI=¤znÐ¥\9cõÔËÿéãþóïÿüþÿûÿøòþúïÿýïÿÿïÿÿòÿÿõÿÿøþÿúúÿûøÿþùÿýøÿû÷þùõÿö÷þõöþó÷þôõöìíëãáÚÕÒÈÅÀ¹º²²µª±´©°¶ª¶¾±¯·ª«³¦10,0/*0/*0/*0/*21,32-44,77/88099/;;1==3??5@@4AA5HD8KE9MG9OI9PK8QL8QL9OL=NKBVTUeeowx\8d\84\87¨\8c\8f¸\8e\92Â\8e\91Ä\8c\8c¾\86\82´zw¦ol\97fd\8b\[{SPmLJ`IFWDBM=<A97876285.86*55+56.581891::.=;.?<+A<(B<&G?*G?*J?+K@.L@0K?1K?1K?3L@4H>4E;2@91<928915<45<47=3<:.F3,W2,u87\92@B¥=D¦89§;/¨=+ª?+«B-¨?*¤;&¤;%¨>(§8$­:'µ<)º=+¿;,Ã;-È</È>3Ä@4½=0¹9,·7*·7*¸8+¸8+·8)¹7)Æ@4ËC5Å9,¿1%Å2(Ê8+Ï5)Ú3*ß3)ß4*à6)ã5*æ4*ê2*ï0(ò/)ô/)ñ.(ë1%â2#Ù4!Ð5\1fÌ4\1dÔ1\1eÖ/\1dÕ2!Ø6'Ö9*Ô:.Ó?5ÕE<ÔE=Í@7È;2ËA7ÕKAÙOEÐF<Ä:/Ä<0Â=.¾<.º;,´9)³9*µ=-¸>/µ9-¼<1È?9ÑB>ØBAàDEìINõOSê@Cí>CòCJúISýKWûFWùBVúBZùA]úCbýEiÿKqÿNwÿOzÿMwþItÿJwÿS~ÿT}üIpùImÿStÿVq÷OhéE]ãG\çYiÿ\96¡ÿµºò\9e\9c\8dHCi.&¦kcÌ\97\8fñÉÁÿâÝÿòîÿüûÿýÿùöýý÷ÿÿ÷ÿÿ÷ÿÿøÿÿúÿÿûþÿüüÿýúÿüøÿûõÿú÷ÿùöÿ÷øÿö÷ÿôöþôõüòóñéçäÜÚÕÐÌÍÊÃÈȾÉ˾ÉÍ¿ÈÐŽǾ·Á¸54/43.21,10+10+11)33+44,66.66.88.::0<<2>>4??3B@4IC7LD7OH8QJ8TL9SL:SL<QK?PKGYW\kjz}~\9c\8b\8e·\93\99Ë\97\9d×\98\9eÜ\97\98Ø\92\92Ò\8c\8aÉ\85\84½~~²uv¤lk\93ee\87[[wUShKJXCBJ==?:9787376246526556177/;9,?<+C>*E?'G?(G?(H@+HA/HB2GA5G@6G@8H=;H::C98=85664173.91.:05=275)A1$Z8.~C=\94FB\9d><\9d40¦<.¨=+¨?*©@+¨?*©>*¬?*¯@,ª7$±8'¸;)¾:+Ã9,Ç9-Ì9/Ì<1É?4Å<2Â9/À7-Á8.Á9-À8,À6+Ä7-ÑC7Ð@5Ã0&Ã,#Ï8-Ô<1Ñ3(ß3)ä2(å3)è3*é2*ì1*ï0(ñ.(õ.)ô/)ð/&ë1%à3#×4!Ð5\1fÍ5\1e×6"×4!Õ4"Ô4$Ó6'Ô8,Ô<1Ó?5ëXPáRJÓI?ËB8ÊF:ÌJ=ÅE8½>/¼:*º;(º;(·:(¶9'¶;+º?/¿A3ÁA6Á<3Å<6Î@<ÖDDÜHHãJLëLPèBFê@CðCIøJSýMXûKXùFYúG]õA\÷C`úEfþJmÿNuÿOxÿNvüKuÿQ{ÿRyþPuüNqÿVwÿ]{þTníE\÷TiîQb÷erÿ\92\9cÿ\8b\93ò\84\87Ç`c¦LK´keÌ\90\88ÿÞØÿðìÿùøÿûýüúÿüûÿýúÿÿûÿÿûÿÿûýÿûûÿûøÿü÷ÿüöÿüöÿüùÿûøÿùøÿö÷þòôýññøììðæäæÜÚÞ×ÑÚÖÍÜÚÎÝÞÐÝáÓÛâÚÎØÐÄÍÈ::288055-33+22*22*33+33)55+66,77-99/;;1==3>>4A?3IC7MC7PG8SJ9VK9UL;TK<SJAQKK[Xalm\82\7f\82¥\90\94Ä\99\9fÙ\9e¦ç ¨ð ¤î\9c é\98\9bâ\94\97Ú\93\94Ô\8e\90É\87\89¼\81\84¯xz pq\90cc}XVkNM[IGREDLBAI>>H:=D;:?:97<92>:.C>+D?)E@*E@*DA.DC1CC7AB:@C<@BA?<EA>ICALBELBGM?IK=IG=HBCI?@<0K9+fF7\82N@\8cJ<\8e?2\937(£>,¨=)©>*©>*ª@*®A,®?+°=*°7$¶9'½9*Â8+Æ8*Ê8+Ð9.Ò;2Î;3Ê:1É90É90Ì91Ì91Ë80É6,Ñ=3Ô=2Ñ9.Ë1'Î4*Ø<0Ù;0×3)ã2(ç1&é1'ì1(ï0(ñ.(ó.(ó,'÷.'ô/'ð1'é3&à5$Ø5"Ò7!Î8 Ô9%Ô7$Ñ6$Ð5#Ñ5&Ó7+Ñ7-Ï8/ãNGçWNæYPÚQGÌG>ÃC8½A5¸?.¶<'¶<%¶<%·:&·:&¹:)½>/ÃA4ÈC:Å?6É@:ÑFAÔIFÕGFÖHGÞJJåEGçACìCHõLSûPYúNZúK\úJ^öD\öC`øEeûIkÿNrÿPwÿPwýQwöVxñVvôUuûXwÿ\xÿ[uúRiñJ^ýWkõTdéM[õ]jßKYæTaåTaÖYaÀfeÇ\84~嫧ÿÓÎÿìèÿóñÿøöÿýþúûýøüÿûüÿúûýûûûûúøû÷ôûøóÿûõÿüöÿüùÿüùÿø÷ÿóóüîîùëëïááèÝÛâÙÔáÚÒåÞÔëçÛïíÞïñãëòëÚåßÍØÔ==5;;188044*22*22(33)33)44*55+66,88.::0<<2>>4A?3JB7MD5RF8UI9WL:WK;VJ<SJAQKM[Wemm\87\81\83ª\90\96Ê\9b£â¢¬ô¦¯ü©°þ¤«ù ¦ò\9d¤ì\9e£ç\9c ß\96\9bÕ\94\97Ì\90\92Â\87\89²yy\9fji\89^^zWToRPfOMcMKaIG\DAR@=F<:;=:3?;/@=,BA-@B-AB2@D5?E;=D=;DA:CH=DTBH^LSfU\n\bp_cnabgd`afXUaJBiG=\83SE\94WE\92K7\90?*\98=(§B.«@,«@,­@,°A-²B.°=*¯7&µ8&»7(Â8+Æ8,Ë7+Ï7,Ó9/Õ;1Ñ80Ï81Ð71Ñ82Ó:4Ó:2Ò80Ð6,ÜB8Ô7.Ï2)Õ7,Û=2Ý<2Ú9/Ü5,ä2(ë0'í1(ð/(ó.(ô-(ö,(õ+'÷.'ô/'î2'è4&à6%Ø7#Ó8$Ï8#Í8"Í8"Î7$Í6#Ð7'Ò9+Ñ7+Í5*Ë4+âMFód\ëaWÔNEÃ@6¹;/´9*¶=(·=%·=&¸;%¸9&»:'À<-Ä>2ÉC8ÈB9ÌE?ÓLFÓLHÍFCÌEBÕGEâHHæCDèEHñLPøSZøQ[÷O\ùN`ôH^ôF_õFcùJiþOpÿQuÿSwÿUyîUsíZv÷^zü]yùUpóMeøPgÿZlÿ[mÿcsïM\÷UdóN^üUgôK^äR_À^_»vq×\9c\96ùÊÄÿåàÿíêþôòÿÿýûÿþúÿÿøÿÿúÿþûýúûûùýùöüùôýøòÿúôÿú÷ÿú÷ÿöõûïï÷ééóåäêÜÛçÙÖãØÒæÝÔïçÜøòäýúéýÿñóúóàëçÒÝÙ@=4@>2>;2<:.:7.85,74+63*52)52)52)74+96-=:1@=4C?4H@5LC4RF8TH8VI8VJ:YM?YOFRILUQ_ee\81z}¦\8c\93Ê\96\9fâ\9d©õ£°ÿ¨´ÿª³þ«³üª²úª±÷§¯ð§¬ì¦ªç\9f¡Ú\98\99Ï\8c\8e¿\7f\80°sr\9ehe\90]Z\85VT|XQzXRvVOnMH_C?M=;@=<8@@8=?2?C5BF8?E;;B;:C@>FH>KTDVlQf\81`q\8bht\8csu\8c\7fx\8a\81o\7f\7f_j\89Zb\92WY\9cWR¥UL¤L>\9f@.\9c9"\9f9"§<(ª=)¬?*¯@,±A-´?-¶=*¸;)º6'¾6(Ä6(É7*Ï7,Õ8/×9.Ú91Ö71×:3Ø93×82Ö71Õ7.Ú91Ü;3åD<Þ=3Ø7-á@6ü[Qÿmbÿ]Rç?4ä2(ì1(ñ2*ò/)ô*&ó($ö)&÷,(õ.)ò/)ì1(ã1%Ø1!Ò1\1fÒ5$Ñ:'Ë:%Ê<&Ì;&Î;'Ð:)Ñ9+Ñ7+Ñ7-ÙA6Î7.ÜG@ôd\äWPÊA9Å@9µ5(·:&¶<$¹=%º<&¼;(¾;)Á<-Å=1Æ=3ÊD;ÖOIÝXQÓOJÀ?9À?:ÏHDÞHGáFDæJKîPQðQVîMUíKVñLZøQcöOcõKeôJeúMkÿQrÿStüStòWvîXuóYuû[uÿ\uÿYpÿWlýVhÿbsýWeÿ]kÿ[jñFVñDWÿQeîVcÆfgªicÉ\90\89嶰öÓÏÿêæúïëúöóøüûùÿÿøÿÿ÷ÿýùþúþþüÿûøûöòýúóÿúôÿøõþöóÿ÷õÿöôöèçæØ×ãÕÔÞÐÍàÖÍïçÜüõåýøåÿüéÿÿñúÿøçðíØáÞB@4A?3?=1><0<:.:8,85,74+52)52)52)74+96-<90?<3B>5G?4KA5OF7SG7UH7VI8XL>WMDTKLWQ]eb}wz£\89\90Ç\92\9cá\9a§õ¡®ý©µÿª¶þ­·ÿ®¸ÿ®·ü­¶û­´ø®³õ¦ªê¡¢â\96\98Õ\8b\8bÇ\7f~¸sr¬gf\9fc^\96_V\8b`V\88]T\7fUOqMIbEBSBAI@BA<=8AB<EF@CD>??=CABNLQWWcbg\84pt\97\7f\86}\9c\91|\9b\9e|\97¤p\87£_t«Xh¶VaºRS¶ID°@4¬;)«;#¬>%¦7#§8%©9%¬9&®9'±8'´7%·5%»3%Á5(É7*Ñ:/Ù<3Û=4ß<3Þ;2à=6Þ<7Ý;6à=6äA:çD=çB<åA8ä@7åA8â?6Û9.Ó1&×5*éI=ÿ[Oñ@6í5+ê+#ì)#ø-)ý0-ü,*ö)&÷0-ó3.í6.ä6+Ü4'Ô2#Ó3%Ï6$È:$È<%É;%Ë:%Î8'Î7&Î5'Î4(Ó9/Ï5+Ô=6åPJåTOÛLFÌA<¶0%¼;(º<%»=&¼;&½:(¾9(Á9+Â:,Æ>2ÉC8ÓNEÛXPÒRIÀD<¾B:ËGBÛLFÞIEäLKëSRìSUéPSéNTëNWöUd÷TeùSiúRküRmÿSqÿSqþSsòMm÷Tsÿ[yÿ_{ÿ[týUlúSgúSeûVf÷R`ý[hý[hñO\öTcýXhßS^¶a^\96]Tµ\80zÖ©£ìÉÅúáÝøéæûöóùûøøÿþøÿÿöÿýùþúþþüÿüûýøõüùôýúóýøôþöóÿøõÿöôõêèéÛØäÖÓÛÐÊÞÔÊîæÙüõãÿúæÿýèÿÿïùþ÷çðëÙâßEA5D@4C?3A=1?;/=9-;7,;7,73(73(73*84+:6-<8/?:4@<3E>4IA6NE6RF6SF5UH7WJ:XKBVLKVPZa_wsu\9c\84\89À\8f\98Û\96¤ï\9e«ù¨´ü«µü®¸ÿ°ºÿ²»ÿ²»ÿ³ºÿ´¸ÿ®²ù©¬ñ £è\98\98Þ\8d\8dÓ\82\81Çwv¼rm°i`¡g]\99cZ\91]W\85TRwLLfCDV??I76;A=>JB@L@@N>?ZFHoV\\80ds\96r\96£z¦­~¨±z¡·u\9b½p\92Áb\80ÀTnÁG\ÎKYÐIPÄ=:¹6,¶9'µ=%°<#®;&®;(°;)³;*µ<)º=+¾<,Á<-Ã7(È9+Ò;0Ù?5Þ@5á>5à<3Þ:1Û81Ø5.×4-Þ93æA;êF=éB:ã<4â;3Ù5+×5*Ù7*Ò2$Ë+\1dÓ6'éG:õK>ò@4ì4,î-(ö,*ú,,û++ö*)ï)(ë.*è3,á5+Û5)Ö2&Ô2'Ð4%Ë8&È:&Ë:'Î;)Ð:)Ñ:)Ò9+Ô8+Ð4(Ö<2Ó:4Ó;6äOKìXV×EEÀ3,À;,¿<(¾;'¿:'¿:)À8(À8*¿7)Ä>2Æ@5ÏK?ÕUJÑSGÃG=¿C9ÆF;ÖKDØIAÝLGãROåSSáOPâMQãNTòXdöZhú[mýZoüVnùQkúPkÿPoüHkÿQtÿ[{ÿ[xÿWqüTküVjþ[lúYh÷Ygú`ló`jë^fîgnêgmÉ]] ]U{OD\98md¿\98\91ÛºµïÓÐòàÞýõóùù÷ùÿû÷ÿþöÿýúþýÿÿÿÿüþþøøúùôúúòûøñýøòÿùöÿ÷õøïêîãßåÚÔÛÑÈÜÒÆìåÕýöãÿüæÿþçÿÿì÷ýóéðéÝãßHD8GC7FB6D@4B>2@<0?;0>:/:6+95*84+95,:6-<8/>93?:4B>5GA5KC6NE4QF4SF3UH7VJ>WMKVOW^[pmp\93\7f\85¹\8b\95Ó\94 è\9b©ô¦°ø¨²÷¬´ü®·ü°¸ÿ°¸ÿ±¸ÿ±¸ÿ®²ûª®÷¤¦ð\9d\9fé\94\96á\8c\8b×\81\80Ì|zÅtm³mf©e_\9b^[\90VW\83PPrFF`A>Q<6BF9@S<B_?DlCG\7fNR\95^d©fw½k\8fÈm\98Ëo\98Èh\8dÈ`\83ÈVwÆJfÄ<TÆ3FØ@OÞDLÑ;<Å8/Ã@.»A*°9!«6"«6$®5$°5%µ8&»9)À;,Å;.ÐA3Ô@4Ø@5Ü?6Þ=3Ý90Ü5-Ø4+Ò/(Ð-&Ó.(Ø4+à91â;3ß80Û4+Ü5,Ï+!Ì*\1d×7)ßB3Ú>/Ð4%É.\1cçE6óI<úH>ù<6ó,)ð$%ô&(ù//ï-+é0-ã2,Ý2+Ø1)Ô0'Ó/&Ò0%Ó7*Ò9)Ô;+Ö=-Ú>/Û?0Û?2Û?2Ñ5)æLBãJBÍ50ßGDðZYÞJJÓB?Ç;.Ã<)Â:*Á9)Â:*Á9)À8*½8)Á;/Á=0ÈF8ÎNAÍOAÃH9¾C4ÀB4ÎH=ÏF<ÔIBÚQIÜQNÙNK×KLÛLPêW_ò\güaoÿ`rúXmôNfôLeüMjÿOrÿRvÿVuÿToûUkü[mÿesÿiwÿfsúbnôblìeláfi×ijËge´g_\8d_ReH:~^S©\88\7fÊ«¦äÈÅíÙØýòðø÷õøýù÷ÿýöÿüúþýÿþÿÿýÿÿúúûúõúûóúúòýúóÿüøÿüöýöð÷îçêà×ÝÕÊÜÔÇëæÓýøäÿÿæÿþåþÿê÷ûíéðèàåÞKH9JG8IF7GD5EB3C@1B>2A=1<8-<8-;7.:6-;60<71>93?:4B>5EA6JD6MF4PE1RF0TG4UH8XMGVMRYVgkl\8b}\81°\88\92Í\91\9eâ\99¥í¦®÷§¯÷ª°ú¬³û®´þ®´þ¯³ý¯³ýª®ø¨¬ö£§ñ\9f£í\99\9dç\92\94ß\8a\8c×\86\86Ð\81\80Æyv¹llªbe\9c]a\91WZ\83RQqNI`WFY_CQmBL\7fFM\96MT¬U]»ZaÉYgÙRpâRußTsÙPjÒJ`ËBTÆ8HÂ.<Ô8EãCKãGJÖ>;Ë>5ËG8ÂH3¶?)¶=,¶=,º=+½>-Â@0ÇB3ÎE5ÓE7×E8ÙB7Ø>2Ù;0Ù6-Ø4+Ù2)×3)Ô1(Õ4*Ù6-Û8/Ü8/Û7-Ü5,Ü5,Ó/%Ø6)×7)Ï2#Í2 Ñ:'Ô=*Ò;(Õ<*æD7öJ@üE?ù64õ*-õ),ö.0ö65í53â3.Ú1,×0*Õ0*Ø/*Ù0+ã80á90â:/â<0à=.ß=.Û>/Ú>1Ð6*ïWLøaXÐ;5Ð;7äPNÛGGäPNÍ=4È:,Æ8,Ä8+Ä:-Ä<.Á<-¾:+¼:*»<+ÀA0ÅG8ÆH9ÂD5½?0¼>/ÉG:ÈF9ÍH?ÓPFÖQLÓNIÒLKÕMOçZ`ï]güfrÿgwü]oñOdòLbýOjÿVwÿSuÿSp÷Skõ\nùhuûkuöfpùeqñ_jë_héjqÜrtÁie©e\\9cl^~gUYI9kXJ\94|r¼\9f\9bÝÁÀëÖÕýííûõõûûùùÿýøþþüýÿÿþÿÿüÿÿùüþÿùúýôùüóýþöÿÿøÿþøÿúôÿøððçÞãÛÎàÙÉîéÕÿúäÿÿæÿÿãýÿçõùêëñåæéÞNK:NK:LI:JG8HE6FC4EA5D@4@<1?;0=90<8/<71=82>93?:4B?8DB6HE6MF4NF1PE/UF1UH7YLCTKLXTbhi\85|\81«\88\92Ç\92\9dÝ\97¤ê¥­ö§­ù«®û«±ý®±þ­±û­±û¬°ú¨¬ö¦ªô£§ð¡¥î\9e¢ë\9a\9eç\95\99â\91\95Ü\8f\92×\86\89Ìz\80¾rx²mt¨ko\9cig\8ci^|x_u\80Wi\8eP_¡PYºR[ÍT]ÕOVÛHRå@Qç@QáCQÜENÔCHÎ?AÉ99È44ãIIçIJßA@Ó84Ì92ÎA7ÇC6½?0ÂD5ÂD5ÄE4ÇE5ËF7ÐF9ÕG9×H:Õ>3Ô<1Ô8,Õ4*Õ2)×3*Û4+Ú6,Ú7.Ü;1ß<3ß<3Ü8.Ù5+Ù5+Ú6,Ñ/"Û;-Ú=.Í1"Å.\eÍ8$Ð=)Ì9%Ì9'Ò9)à:.ñ>7ÿ@?ÿ<>ü46ñ-/é++ß+*×*&Ó+(×/,Ü41ä88è88ï75ð74í81è7/â6*Ü6(Ö4'Ñ5&Í5'æODÿlbÚG@Æ50ÔBBÑ?@êVV×B<Ñ=3Ê7-Æ6+Æ:-Å=/Â=.¿=-¹:)º=+½@.¿B0¿B0½@.»>,º=+ÂD5ÂD6ÇI=ÎPDÑRIÏPIÏNIÓOMç_aíbgúhrÿnzÿeuôUgôQfþUlÿXuÿWsúXoñ^nómvõv}ëmqÜY_ïbkïamëblîrzë\87\89Ì\81|¨tg\96ygsmWON:_VG\83qg®\95\91Û¿¾íÕÕûèêþôõüúûüýÿùýþýýÿÿýÿÿûÿÿùþÿÿûùÿõøþôýÿ÷ÿÿøÿÿøÿþõÿþôøñçìæØèâÒòðÛþüåÿÿãþÿàþÿæøûèðôåîðãQN=PM<NK:MJ9KH9IF7GC7FB6C?4B>3@<3>:1>93>93?:4?<5@@8CC9IE9LF6NF1PE/UF/UH5WK?QIFUR[hh\80}\81§\88\92Ã\91\9dÙ\97¡æ¢¨ô¥¨ù¨©û©¬ý¬­ý«®û«®ûª®ø§«õ¥©ò¡¨î §í §ë\9f¦ê\9d¤è\9b¢æ\96\9eß\91\99Ú\8a\94Ñ\85\90È\82\8c¿\81\88´\82\80§\87z\98\8dm\85\98cw¦XhºR]ÏMWßHQç@Hé<@è<:ã?6ÜD7ÕH7ÌI5ÅG1ÂD.Ä?.âTHßH?Ø;6Õ63×85Ö;9Ñ96Æ71¾:-»<+½;+¾:+À8*Â6)Ã4&Ä2%Í5(Î4(Ñ3(Ó2(Ö4)Ø4*Ú6,Ú8-Þ=3Û=2Û;/Ú:.Ú8-Ø6+×5(Õ3&Õ3&Ó3%Ï4"Ï6$Ñ<(Ð?*Ç9!¿1\eÇ9%Ê4%Ó1&ä6/ù;;ÿ>@ÿ8;õ26ê./ß--Ù-+×/.Ü43â88è:<ï8:ô23÷12ò0.í2-ä2(Ý1%Õ2#Î2#È2#Ï=.új_ãTLÇ82Ð@?Ë;;ãQQâJEÛB<Ð92È5-Æ8.Å;0Á=.¾<,¹<*º?-»A,»>*¹<(º;(»<)¼=*º?/º?0¿C7ÇK?ËOEÊNFÌMGÎNKæabéae÷gpÿnzÿix÷ZköUgýZoþZrù]rëapäkré}}ï\87\86æxw×_aðhrünzñerêlwö\91\95ì¢\9fÃ\95\88¡\8cyhlUHR:WVDth\¢\8d\88Ù¿¾ðÖ×÷ãåÿôöÿúüþþÿûüÿýüÿÿýÿÿúÿÿøýþÿû÷ÿô÷ýóüÿöÿÿøýýõÿýôÿÿôþúïóðáïìÙøößÿýäýýáýþßÿÿåýÿê÷úéö÷éTN>SM=RL<PJ:NH:LF8JD6JD8GA5E?3C<2B;1A:2A:2B;3@<3AA9CC9HF9LF6NF1QF0SG/UH5SI=PHETQZgh}}\81§\8b\93Ä\92\9c×\98¡æ\9e¡ð¡¢õ¤¤ú¦¦ü§©ü¨ªý§¬ý¦¬ø¤ªô¢©ï §ë¢§é£¨ê¤©ë¥¨í¡¨î\96 å\93 ä\92 Ý\93\9eÖ\94\9cË\98\96¾\9e\8d¯¨\84 £e|³\mÂRbÏITÛAKã>Dê;@ë;;ê?7â@1ÚE1ÓH1ÉI0ÂF,¾B*Â?+áSEÜC;Ü:7ã==éCEåABÙ9;Ì65ËB8ÇE7ÇC6Æ@4Æ>2Ã9,Á5(À2$Å3&É2'Í3)Ó5*×4+Ù5,Ù5,Ù5,äB7Ý=1Ø6)Ù5)Ü8,Ý9-Ù6'Ó1"Ø8(Í2 Ê1\1fÎ9%Ì9%Å4\1fÉ8#ÑC/Å6%Ë8(Õ7+Ü5,å4.í53ô;9ù@>ÿLKúHFðBAë?=é;<ç7:ä15å+0ó+.ö*-ó-,ï/,è1)à4(Ù6'Ó8&Æ0\1f½.\1dòdVê]SÎA:ÓEAÉ;9ßMMèSOßGBÑ<6É6/Å7-Æ9/Â:,¾;)½<)¿@-¾A-º=)·8%·8%»<)¼?+³8(²8)¸>1ÁG:ÅK>ÅI?ÅI?ÊKDä`\å_^ðehþouýjtó]iðXeø]k÷^póbqçeoàloë\7f\8e\8aó\86\83èrr÷qxÿ{\84ôaqÞWeô\89\91þ´³Ï¯¢\9d\9b\84]lOCS8QT?jbU\9b\88\81ØÀ¾ðØØõßáÿô÷ÿúýÿýÿüûÿýüÿÿþÿÿúÿýøüùÿúòÿññýñöÿóúÿöùüñýýóÿÿôÿÿóùöç÷òßüúåÿþåýüàþýßÿÿçÿÿñûýðüüðWP@VO?UN>TM=SL<QJ:PI9PH;KC6KC6IA4H@3G?2F>1F>1F@4EB9DD8HF7MH5PJ4RJ3UJ4SK8VNCRMJXU`hh\80z}¦\88\8eÂ\90\98Ö\97\9e䣤ô¤¡ø¢¢ú¡¢ü ¤ÿ¡§ÿ¢ªÿ¡¬û¡«ó ©î ¨é¤§êª©í­ªñ¯¨õª©÷\9e©ø\95§ñ\92¡â\95\9fÔ¥£Ë³\9e½¶\85\9b¶hx¼LZÐDOÞ>Jå;Dæ;Aã=?ß??Þ@=á=>ß=;ÜD?É:2ÊD9ÉE9º1'ÚKCåJFèDCè>Aè;?å;>à<=Ú<;Ò=9ÎA:Å?4ÈD8ÑMAÌJ=¾<.¸6(¼8+¼6*À6)Ç4*Ë2*Î/)Ó0)Ù2,Ü5-åA5Ý:+Ù2"Ý3$ã9(æ<+Ý8%Ó2\1eÎ3\1dÊ4\1cÇ5\1eÆ5 Ç4"È5%Ì6'Î6(É1$Ì2&Ï5)Ð7)Ñ5(Ô4&×3'Û3&à2)å4.ë52ë33è.1æ,1ç,3ì-4õ.3ó+-î,*ë0+è6,â8+Ø7%Ð5#Ã.\1aÁ3\1fæYHèZLÊ<2ÝNFÃ4.ØIEàPOÚKGÒC?Ë<6Æ7/Å7+Ç9+È<+Å<*À;(½:&»:%º;(º=)·=(µ<)²8)´<.¸>/¹?0»@1½?1À@3Ã@6îkaôohéb^ômjúppë`côhkÿqwÿmxùhuîemèchêehímlîqoîqmúxxÿ}\83÷[iûdwÝcpø¬®³«\98z\91t[sQIZ8LR8pnY£\95\88ɶ¯êÕÒÿîíÿö÷ÿ÷øüøùûûýýþÿþÿÿþýÿùÿýíÿóåþéäûéíÿíøÿöûÿôýÿòÿýðÿýîÿûëÿúèÿøåþøâýùàýùàûúåþþôþÿúÿÿúXO@XO@WN?VM>TK<SJ;RI:RI:NE6MD5LC4JA2I@1I@1I@1H@3FD8GE9JG8NI6QK5SK4SK4SK8VNCSNKXU`hh\82z|£\85\8b¿\8d\95Ó\93\9aÞ\9f\9eê\9f\9dð\9d\9dó\9b\9fø\9d¢ý\9e¥ý\9f©þ¡¬û\9f«ó\9fªì\9f§æ¡¥å¥¤è¨¢ê¨ í£ ï\9e§ö\99§î\99¡ß¢\9bα\98¿½\8c©Âq\84ÂTaÑDMá=Dê9?í8=é;=ã=?ÜA?ÛAAÝ<AÚ9?ÚACË;:ÌB?Ç@<À2.äPNäDFè?Dé:?æ7<à7:Û89Ó97Î:6ÒE>Æ=5Ã=4ËI<ÌL?ÁC5¶;,¶8)¹7)¼6*Ä6,É5+Ð3,Ö3.Þ52â92â>2Þ;,Ý6&ß5&á6%à6%Ú5"Ó4\1fÏ9!Ê: Å9"Å:%É<*Ê;+Ë7+Ì4)Ò4+Ó5,Ñ7+Í7(È5#Ç4 Ê3 Ï4 Ø2$Ý1%ã0)æ/+æ,-å-/æ-2ç.3é+-ë--é0-å2+à4(Û5'Ô7$Ð9$Ò?+¸*\16ÓD3Î?1ØE;êWO×B>ÖB@åUTàRPÚKGÒC=Í=4É9.Ç8*Æ9(Ç<)Ã:'¿;&½<'¼=*º?-·@,´?-¯9+±;-¶>0¸>/¹>/¼>/ÀA2ÂC4ëi\ñndåbZðkfõolça`ðjiütxÿq{ÿoyöirë^déZ^îbcöpmûzuøvtÿw{øSdüZoâ]nõ¦©§¦\92i\8ckZtON`:PY:ttZ§\9e\8dÔÄ·óàÚÿóïÿúùÿùøþúùûûùúþýùÿýùýüóÿ÷êÿòàÿèàüåèÿêòÿð÷ÿñüÿñÿÿðÿýìÿüìÿúèþõäùòßøòÜúôÞú÷äúúòûü÷þþüYPAYPAXO@WN?VM>UL=TK<TK<PG8OF7NE6MD5LC4LC4LC4KC6HD8HF9KH7OJ6QK5SK4VK5TL9VNASNKZWbii\81y{¡\84\88¸\8a\90Ê\90\95Õ\96\99Ü\98\98à\98\9aç\97\9cí\99 ñ\9b£ô\9e§ö ©ô\9f©î\9d¨æ\9b£á\9b¡Ý\9c ß\9e\9dá\9d\9aá\9a\98á\93\9aÞ\99\9aÚ¢\95Í®\8c¾¾\81ªÆq\90ÆYpÆCQÕBLß>Cã=?å==å<?â>?á>Aß>Cà=BÖ7;Õ?@Î@>ÉB>Á<7Ã83éXUßABä>Bå;>â8;Û78Ô65Î93Ë<4ÔG>Ä;1¼6+ÄB4ËL=ÅG8»=.µ8&¸6&¼7(Å7+Í6+Ô6-Û60å95æ=6Ö4)×5(Ù5)Ü6*Ü6(Ú7(Ú;(Õ>)Ã5\1f½5\1d¸6 ¸7"¼9'¼8)¼4(¾.#á?:â=7Ü>3Ô;-Ì9'È7"È7"Ì7!Ò7%Ô2#Ö0$Ù.&Û.*Û/-Û/-Ú.,Ú-)Þ1+Þ6-Ú6*Ô4$Ï4"Ï8%Ð=)ÓB/À2\1eæUDÏ;/Ù@8ÝB=èJIïUSëUTåTQáPKÚJBÖC;Ï<2È9+Ä7&Ã7&¿8%»8$¸9&¹<(·>+³>,°=+®:+°<-²<.²=,µ=-¸>/½B3ÂD6Û[Pçg\âbYðlgôplåa_êefòkoàS\î^hõhqòekñ`eôegùroýyuøtrÿnuòI\øRhãZlî\9c ¡\9c\88`\7f]UoHPe>Va?ux[«¤\91ßÒÂþíåÿ÷ðÿüøÿýùýþøûÿúûÿýùÿýùÿûñÿöæÿíÛýâÙ÷Ýßùàèûåîûçõüêüÿìüûéÿûèÿøæùðßòê×ïçÔóëØöðàüùðýü÷ÿþúZQBYPAYPAXO@WN?VM>VM>UL=SJ;RI:QH9PG8OF7OF7PG8OH8JF:KG;NH8QJ7SK6TL5VK5TL9VL@UMJZW`jh}xx\9a\81\84±\87\8dÁ\8d\93Í\90\95Ï\93\94Ô\93\96Ù\94\98á\95\9bç\97\9fê\99¡ê\9b£ë\9b¤å\98¢ß\95\9e×\92\9bÔ\93\99Õ\92\96Õ\92\93Ö\8f\90Ð\85\84½\90\84¶£}®¶t¢Çf\8fÐWxÓGaÔ<KÜAGßABÝB@ßA>à@@ã>Bæ=Dæ=Dâ?DÔ:<Ð>>ÏEBÆA<º61Ä=7éZVÜBBâ?Bæ=@á;=Ù99Ó97Í=5ËA7ÎD:Á9-¹3'¿;,ÅF7ÃF4¼=,·8%»7(Á9)É:,Ð:,Ù80à91æ:6é>7Ø1)×3*Ú3+Ý5,Þ6-Ý7+Ú:,Õ<,Ç8'Ã:'¿<*¾<,½;-¿;/Â<3Í:3ëC@í@:ã?6Ø</Í:(Ç9%Æ:#É;#Ï<(Î7$Î1"Ð0$Ô1(Õ2+Ò1)Î0'Ñ3(Ò4)Ð7)Î6(Ë5$È7"É;%Ì>(Ê<(Î=,ó]OßG<Ñ2,Ñ/,å??ùVWÿtrÿrnÿkeô_XåQGÔB5Ä5%¼/\1eÄ8'¿8%»8&·:(µ<)µ=,±>,­<,¬;-¬<.®=-¯;,±<+´?.»A2¿E6ÉMAÞ_Váb[ñpkõsqä_`â]`ä]cÕIRæYbógpôgmöelúkoûssüvuùqsúdmðCWóJaåXkë\92\96\9d\95\82\zXQlCRi?ZhDw|\®ª\91æÛÉÿôçÿøïÿûñýýóüÿöùÿøùÿúöÿøñýóéûëØùÞÍòÑÊëÌÎëÍ×îÒÝïÕèòÚñöàóõàùöãûôâôëÚêáÐèÜÌíáÑñèÙüõíü÷ñþùó\P@[O?[O?ZN>YM=YM=XL<XL<VJ:VJ:UI9TH8TH8TH8UI9SJ;MG;LI:PJ:RK8UM8WL6WL6UM:UK?TMG[V\hevtt\90|~¥\83\87\89\8fÁ\8d\90Ã\8e\91Æ\90\92Í\90\94Ô\92\95Ú\93\97Þ\94\98ß\93\9aÞ\95\9dÜ\91\9aÕ\8b\94Ë\87\91Æ\83\8cÃ\81\87Á}\83Á~\7f·}t\9f\8ep\94¦h\8f¿]\84ÕNváAcæ:Tè9HæAGàECÜGAÛHAßECæAEî<Hí=HãBGÔ>?Î@>ÎID¿?6²3*ÇB;àUPÚEAàBAâ?@à=>Ù>:ÔA:ÎD:ÌF;Å=1¿7)»6'¼9'¿=-½>+½<)¼;&À;*Ç;*Î<-Ó;-Û8/à8/å82ç:4æ95ã62á2/ä2.ç40ã5.Û3*Ò/&Ë1'É7*Ç:0Â8.À3,Â40Ë;:Û@>é9;ì63ã60×5*Ë5$Ä6"Ã8!Å:#É=&É8#Ê4#Í6%Ò9+Ô:.Ó9-Ï9+Ï=.È;*Å8'Ã8%Å:'Å='Ç<'Ç:&Í>-Ì9)×=1àB9Ô/+ã99ß12ß56Ô52Ö;6ÝD>äKCèQHèTHçUFãVEÉ@0Ã>-¾<,·<*¶>-³@.°?-®?.ª<-«=.¬=,«<+¬;+¯>.¶@2ºD6ÅLAÜbWàd\ïpjóqqâ`bå`eæ_föjuûoxöjsë`eð_fýlqÿyyÿzzúnq÷]iò@VôC]èUhä\88\8d£\94\81f\80]YtI\vGgxN\81\88f²±\95çáËÿúçÿüìÿþïüÿñûÿô÷ÿôôÿñëüêãñàØî×Åèǻ伹߸½ßºÅà¿ËãÃØæÌáëÒëïØòñÜ÷òßóêÙëßÏçÙÌêÜÏîâÖñçÞñèáòéâ[O?[O?ZN>ZN>YM=YM=YM=XL<XL<WK;VJ:VJ:VJ:VJ:WK;UL=OI;PJ<RK;UM:XM9XM7XM7XM9UL=TMEXTUc_mmk\81st\93{}¤\83\86±\86\89´\86\8a·\89\8b¾\8b\8dÆ\8c\8dÎ\8c\8fÒ\8c\8fÔ\8d\90Ó\8e\94Ò\89\8fÉ\82\89¿{\82¶u|²ov­io©lj\9b\80l\88\93cy­ZtÉPoâCcï6Uö4L÷8Gí@BäEAÜIAÚJBßGDçBHñ<Kï=KâCGÔBBËA>ÍID¸<2®4)ÉI@ÔKEÖB>Ø><Ú<;Ú<;Ø@;ÓD<ÌH<ÊH:¿7)À8(¾9(½8'»8&º9$¼;&À;(Ä;)É<*Ð=-×;,Û7-Þ6+ã5.ç60è21ç//é-.í//ó55ó76í53ä2.×.)Ö3.Õ62Ñ30Î.0Ò/4Û6=é<Bí06î02å2.Ú3*Ð4'È7$Æ9%Ç<%Ä7#È7$Í7&Ò;*Ù=0Ü@3ÝA5ØB4ÒF5ÉB/À;(¾9&À;(Ä=)Ä;(Å8&Ì;*Í7(Ì0$æC<Ú1.í?>â/2Ù)+Ô1,Ò5.Ô70Ó9/Ñ9.Ì5*Ä2#¾1 ÍD4ÆA2»<+´9)®9(­:(«:*©:)ª<-«=.«=,«=,«<+¬=,°?/µA2ÉSGßf]ßd]èkgînoåbgíjpônuùpzüs}ömuîcjöelÿsxÿx|ÿquúipõWeø@Xó?ZèPeá~\83«\96\83x\8ehm\88[n\8aYx\8b^\8c\98p³·\96ÞÝÁøóÝûùäÿÿíûÿïõÿïîÿëåûäÚñ×ÐãÍÅÞÁ°Ö­¨Ó¦¨Ñ¥®Ó¨µÕ®¼Ö±ÇÚºÑàÁàæÌçéÓïíØñêØîâÔéÛÐêÙÏëÚÒèÛÒäÚÐä×ÏZN>ZN>YM=YM=YM=XL<XL<XL<XL<WK;WK;VJ:VJ:WK;XL<VM>QI<RJ=SL<VN;XM9YN8YM7XM9WN?ULCVPP^Y`c`qig\7fqp\90yy\9d|\7f¢}\81§\81\82²\83\84º\86\86Ä\88\87É\89\88Ì\88\89Ê\86\88Å\82\84½{~³ux«pq§kl¢ef\9ela\8c\81`q\95V^°N[ÑJ[ì@V÷6Ký2Eþ9Cò>?èC=ßHAÜIBàFFçBHñ<Kî>KÝADÔFBÇB;ÇH?³:/°7,ÎPDÈC:Î=8Î63Í2.Ï61Ñ>7ÏE;ÆG8ÂC4¾9(Á:'À;(¾9&¼9%¼:$½;%Á:&Ä9&Ë:'Ò;*×:)Ü6*ß5(ä3+è3,è**î*,õ-0û03ÿ26ÿ47ÿ47ü58ø7:õ8<ñ8=ñ8>ó8C÷7Fú5Gû5Dó*4ó,1ë20á4.Ø5,Ð8*Î;+Î=*È5%Ï7)Ø:.Þ>2á=3â>4â>4ßA6ØK:ÍH7ÉA1Ã<)Á:'Â9'Å9(Ç8(Æ2$Ò8,à?7êC=Ý1/Ý--é56æ66Ø3-Õ7.Ö8/×;/Õ;/Ñ;-Í;.È:,ÔL>ËG8¾?0´9*®6&«7(©8*¨8*«;-¬<.­>-­>-«<+ª;*¬=,®=-ÀL?ÙcYÝd\çlgîpqéhlôqwüv\7fígp÷oyøqxójqþmtÿw\7fÿu|ùhoùclõSbþB[ô<XéLaÜuy´\9b\87\8c\9ex}\99i{\97d\80\96g\8f\9es¬²\8eÊË«ßßÃçêÏíöÛäóÖÙíÑÍæÈÄßÀ»Öµ³Ì®ªÈ¤\98Â\94\93Â\8e\98Ä\91¡É\97§Ë\9d¬Ë\9fµÎ¦¾Ò­ÎÙ¹×ÝÁäãÎìåÓíáÓëÚÐæÓÌãÐÉÝÏÆØÌÀÕǾYM=YM=YM=XL<XL<XL<XL<XL<XL<WK;WK;WK;WK;WK;XL<YM=SJ;TK<UL;XM;YN:YN8ZN8YL9[O?WMCVNKZTX\Yd`]pig}pp\8avw\95xx\9c|{§~~²\82\81½\85\83Ä\86\83È\86\83Æ\7f}¼~zµyv«vr¥un¢sj\9fpg\9eza\89\84QZ\98IE²FFÒGNíCNø:Fþ6@þ:>õ==íA=æD?áFBäDFçBIî>Kë?KÕ?@ÐGAÂB9ÂH=¯9-°:.ÐTHÃ>5Ç82Æ.)Ã*%Æ.)Ë;3ËB8ÁC4¼?-¿<*Ã<)À;(¿:'¿;&Á=(À<'À8"Ä6"É6$Ñ8&Ø8(Ý5(à4(å3)é2*õ31þ68ÿ9:ÿ58ÿ-1ý(,ý(,ý*0û,2õ*0ò&/ö(4ÿ,=ÿ*?ü 9ó\1a/õ!/ð'-ë-/ã/.Ú1,Ó2(Ð4(Ï5)Ó5*Ü:/æ>5ê=6é;4è71ç60á90ÝI=ÖJ;ÒF7Ë=/Ã5'Á4#Å6(Í9+Í5*Ó6-æC<ß82Þ20Ï\1f\1fë99ã62Ô1(Ñ3(Ð4(Î4(Í5(Ê6(Æ7)Ã7(áYKÖREÊH;½?1¶</´<.²<0³=1¯9-¯;,±=.°<-¬;+«:*«:*«:*°</ÐZPÛbZêpmówwëmqóqyõrzýz\82ÿ\7f\88ÿy\80òiq÷eoÿpyÿt|ÿltø^höO`ÿB\ö9UéG\Ùosº\9e\89\98¨\83\82\9em|\9ad\7f\97e\8b\9co ¨\81³¹\95Ç̬ÑÛ¹ËÙ¸ÀÔ±±Ë¨¤Â\9c\9d»\95\98\90\96²\8c\90±\86\89´\7f\86µ~\8bº\83\95À\8a\9bÃ\8f\9eÃ\90¨Å\97°É\9f¾Î©ÉÒ³ØÚÂäßÌèßÐçÖÎàÍÇÚÇÁÓº˽´Å·®ZM<ZM<ZM<ZM<ZM<ZM<ZM<ZM<WJ9XK:XK:XK:YL;YL;YL;YM=XL>YM?YM=ZM<[N;[O9[O9\O<YM=WMAVMFWNOXQX[Ua^Zi_\ohe\80ml\8ero\9atr¤zv³\82}¿\88\82È\8a\83Ç\87\89\7f»\87\83\86\8c\87\86\\82\90HL¢B6´A:ÊC?Ý?>è:;ô<<ÿDCö=;ñ=<ì>=ê@AèBFéBJê@KãBJÏ?>Ã@8»?5´>2®=-°<-¾D7ÑLCÆ7/Ó;6Ì1-Ë2,ÓC:Ç?3³5&»>,¹6"À9%Ã<(Á:&À9%À9%Ã;%Æ;&Ë:'Ð9&Ô7&Õ2#Ø.\1fÞ1#ë6+ô>3ô71õ4/÷0+÷,(ù'&ú&%û%'û%'û&*õ"(ø",ÿ'5ÿ(;ÿ"9ÿ\18\18/ÿ'8ï#,ä#(ã+-Ü,,Ó*'Ò-)Ü5/á51ç51î64ñ54ò21ï/.í-,ä.*Û:2Ð9.Ð90êSJº#\1aÂ+ ÞE=È.$Ë.'Ü>5çD=à;5Ö/)Ù-)â51ä;4Ü>3Õ<.Í5(É3%Ê6*Í;.É;/Å9,êbVßYMÇC7¹7*º:/·9-±3'³5)¯1%¯1#®3$®4%¯7'¯:)±<+²>/°:.¹C9Ö]Uêpmðtvõw{úx\80óq{þ|\84ûx\80÷tzût{ÿs}ÿr}ÿmxþhsü`mòJ[ÿ>Yü>Zã@UÓdj´\95\80\92¡z\81\9dj{\99c}\95c\85\96i\93 u\9e¦\7f\9e¨\83\99§\83\92£\7f\89¢{\80\9fux\9cpw\9boy\9do\7f s\80¥r\82­u\83³w\89¹}\8f¼\81\92½\85\97¾\87\9c¾\8b ½\8d¦»\92®¼\99½Ã§Î͸ÝÔÅàÒÉÜÇÂÓ¾»Ê»´¿²ª¸«£YL;YL;YL;YL;YL;YL;YL;YL;WJ9XK:XK:XK:YL;YL;YL;ZM<YL<ZM=ZM<ZM<[N;[O9[O9\O<[P>[OAXNEXOJYPQ\SX]V]^Xda\sgb\82lg\8fnj\9cuo«\7f\86\7fÃ\89\80Ã\8d\81¿\8f\8d\8bm\9f\97q¤ t§\9aj\9c\98Vz\9d=A§5*°6)Á=1Ð@7Ü?6ç>7ò@<ô<:ó;;ò;?ð=Aí@FèAHá@HØAFÅ;8¼<3´;0¯;.ª9)®:+¼B5ÎJ>×G?ÛB=Ô72Ð50ÔA9ÌB7¹:+±4"»8$Á:&Ä=)Ã<(Ã<(Ä;(Æ;&È:&Î8'Î5#Ó3#Ù3%á5'é9,î9.ï9.å0%æ0%ê.#î,#ô+$ø+&ý+*ÿ-.ú),÷$*ù#-ÿ&4ÿ%9ÿ\1d5ÿ\13\14\1e.ö.9ô2;ä+1Ú'+Ü.0Þ01Û+-ð9;ó6:õ47õ13ö/2÷/1ø23ó76Ú1,Ú<3Ö71ãD>âE>Í0)Ï2-Á"\1cÓ4.Þ?9æD?à=6Ö3,Ö2)Ý6.Ü90Ò:,Ì9)È6'Ç5&È9+Ê<0È</Ä:/ìbWàXLÈ?5¹3(À:/Á;0¼6+Á8.¾4*¾4)½5)º4(·5'´6'±6&¯7'´<.»B7ÓZRçmjíqsõx|û|\83÷u\7fþ|\84úx\80ùv|üu|ÿs~ÿp{ÿjuüdpû_lôI\ÿ=Yÿ>[éCYÒdg­\8dv\88\97nx\94at\92\v\8e\}\91`\88\95i\8c\99n\8a\96n\83\93lp\87]k\88\h\89\f\8c[j\90_p\96cv\9bhy i\81­r\82²t\87·y\8d»}\8f½\7f\91½\80\95¼\83\9a½\87\9a´\85¡³\8b¬·\97¼¾¦ÍÆ´ÕǼÔÁ»Î»·Ä¶³¸­©°¥£YL;YL;YL;YL;YL;YL;YL;YL;WJ9XK:XK:XK:YL;YL;YL;ZM<YL<\L=\L<\L<]N;]N;[O9\O<_RA]QA\PDYOEYNJYOM[QP[QY\SfbYvf^\85jb\91pk£}w³\86\88\97\85¿\98\80´\9a\9ep\9e­t¡ºw£´h\96°Rt¸<D»5,¹5)¿;.ÈC4ÒD8ÚB7ä?9ð><õ;>÷:@õ<Bï@Gå@FÙ@CÎ@?¿:3¶:.¯9+«:*¨9(¬8)»@1ÍG<×D=Õ:5×84Ù<7ÛD;ÝOCÍI:³4#¾9&À9&Â;(Å>+Ç>+È=*É:)Ê9&Ï8'Ï2#Ó0!ß5(ë=2ò@6ð91è3*Þ4%Þ4%á1"å/"é-$í,%ð*'ñ+(ò,+î'*ò&/÷'4ü%7û\1d\17\171ó$6ñ/:ñ6?ð8@ï;Dí<Dé6<â-4ï29ò09ó.7õ.5ô-2õ.1ó/0ì31Û/+à=8Ù53ß;9ÿliäB?Ñ/-Î/+Ù:6Þ?9àA;Ú<3Õ7.Ó5*Ó5*Ï6(Å6%Â7$Â6%Â9)Ä:-Ä<.Å;0Å;1ê`VÞTJÈ;2¿0(É:2Ï?6Î;3Ñ=3Ö=5×=5Ô=4Ï<2É;/Á9+»7(µ7(·;/»A6ÏTMãhcëooöy}ÿ\80\87ú{\82û|\83ûy\81ûx\80þw~ÿt\7fÿn{þfsú_mù[jôG[ÿ;Wÿ>YìFZÍ_`\9d\7fev\85Zh\84Qf\84Nl\84Rs\87Vy\89\{\88]u\84[o\81W`zM_\7fP`\84Te\8dYl\94_t\9bdz\9fi|£j\81­p\83±q\87µu\8a¸x\8b¹y\8cºz\8eº}\92¹\80\92°|\94«}\9a¨\84¨¬\91¹´ Å¹«Ê¹±È¶´¶¬«§¡¡\9d\97\99YL;YL;YL;YL;YL;YL;YL;YL;WJ9XK:XK:XK:YL;YL;YL;\L<[K<\L<\L<\L<]N;]N;[O9\P:^Q>]P?[O?ZN@ZMD[NF\OIZNN^P_`TldY{f^\87oh\9bzu­\83\85\98\84·¤\84³¯\80ª·y Æy\9dÐt\99Êd\8bÆNjÙEQÝB@ÓC;ÍD:ËG:ÌF:ÓE9ÜB:ì@>ô=Aù<C÷>FïBFâBDÒ@@Æ?;¾>5µ;.®:+«:*©:)­9*¼>0ÌC9Ô=6Ó40ß;9åA?ßE=çTJÞVH¾:+¿:)¾7$¾7$Ä;)É=,É<*Ë:)Î8)Í4&Ñ1#Ø2&ä8,ð?5ó>5í5-ã.%ß5(Ü6(ß3'ã1'æ.&é,(ë+(ë+*ê)*è',ê&0ò*7õ';ö"9ú ;ú$>û6Gâ(5å/;ÿP[ÿ`lÿO[ñ=Hñ9Eè*6í+6ð.7ó19ð16é/0á+(Ö)#Õ0*Ø61Ó1.äB?ÿspõVSÜ=:åGDÚ<9Ù<7Ô:2Ò8.Ð8-Ï7*Ì4&Ä3"¼5!¹6"»8&¾:+¿;,¾:-À:/Ä;1ãYOÚMDÊ70Å0)Õ<6ÜB:Ù<5Þ;4æ=8ç>7ä@7à?5Ø>2Ï=0Ç;,¿:+¹9,º<0ËOGßd_ëooø|~ÿ\84\88ü}\84÷x\7f÷x\7fúx\80ÿx\82ÿt\7fÿmzýerù^löUeòEYý8Tþ<WíG[ÅYY\8alRbsGZuB[xBbzHk\7fNq\81Ts\82Wq\82Vl\81Vk\86Yk\8d[n\94at\9cg{¤l\7f¨n\82©p\83«o\84®o\84°q\88µt\88¶u\86·u\86·u\8a¸w\8e¸y\90³{\8f«z\91£{\9a£\84««\93¼³¢Å·®Å·´±«­ \9e£\95\92\99ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8YJ7ZK8ZK8ZK8[L9[L9[L9\M:\K;]L<]L<]L:]N;]N;]N9^O:\O<[N;[N=[N=\O?]OB]OB^OJ`OYbQdaTncY{je\8eur¡~x¨\81\94}§«\85ªÂ\89©Î\82\9eÙv\92Þl\86ÚYuÙE]òCTùEPïJNÞHGÏF>ÊD;ÏE;ÙD>çCBïACô?DõBHëEGÞDBÍB=Â?7¼@4µ=/¬;+ª;*©:'­8'º:-Ë>5àE@à<:ëB?éA>Ü:5ãJBæXLÓK=È@0½8'º2"À7%Ç;*É:*Ë7)Ï7)Í1$Õ3(ß7.é;2í:3í60ê/*ä+&á0*à1,ç1.ë20ò12õ26ö37ö5:ë,4ê,6ì-<ð/@ó-Dô)Fü+Kÿ4Qó8Iä2>ïAKÿ`jÿkwÿWdôDQô?Ní4Bì4@ì4>ç6<â88Ú72Í3)Æ/$Ê3*Å.%Ï81ñZSö]XñWUÛA?àHEÛC@Ó;6Í6/Í6+Í9-Í9+É6&Â5#¶8"±8#³:%¸=+¶;+µ7)»9,Ä>5ÙOE×G?Í6/Î1,ß>6åA8á81å61ê1/ë2/ë51æ81à90Ø:/Î:,Ç;,¼6*º8+ÈI@Ü_Yênlù}}ÿ\86\88û~\82óv|öw~úx\80ÿx\82ÿs\80ÿl{üdsù^nñRdóE\ý8Tþ=XîK\¾URz_BVg:Wr?[vCdzIl~Nr\82Uu\84Yx\89]w\8d_w\94du\9agx k{¦n\7f«p\82«o\83«o\84ªm\85­o\87¯q\87´s\87µt\84¶q\85·r\86¸s\8b¸w\8e¶z\8c­x\8d¤v\96¤\80ª­\92¾¹¥ÍÁµÏÄÀ»¹¾¨«´\99\9b§ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8YJ7ZK8ZK8ZK8[L9[L9[L9\M:]J;^K<]L:]L:^M;]N;]N9^O:ZM:[N;[N;\O<_P=`Q>`P@`OEbNPbNZ_Pc_Upga\85qo\96yt\9c|r\97\8du\95­\82\9dÊ\8b Ú\81\93ãs\83êctçPcè=Pø4Jÿ;PûERèCJÔ@@Ë@=ÏD?ÖE@âDCèBDîAEíCFåEEÙD@ÊA9¿?4¹?2°:,©8(¨9(¨9&­8'»9,É:2çJEè@?ê<;ã75Ø3/ÞA:íZPôh[ÙQAÆA0½5%À7'Ç9+Ç8(Ê6(Ð8+Ï1&Ù5+å:2é;4é3/ç.)è-(ë.,ò46õ49ø3<û2<ý1<þ0=ü0<ù1>ô/@ò1Bó3Hô4Mõ0Nô-Nþ2Wÿ=^å2EøNYÿakÿ_kþVcùQ`òFVç8Gñ@Pè9FÛ29Ð02È3-Â8-½;+º;(Â:,¿3&ØKAùjbÛLFáPKÌ;6Í<7ßKGÔA:Ê7/Ê8+Í;,Í<+Ë:'Ã:'´<$«;%¬<&±>+¯:)®4%¹9.ÉD;ÔG@×D=Ñ61Ö3.å<7ê<5æ3.ì1,ñ+*ó++ñ/-ì3.è7/à90Ø</Ñ=/Â6)º4)ÃC:×XQæieø|zÿ\86\86ü\80\82ôw{öy\7fûy\81ÿx\82ÿq~ÿixúbqø]mïPbõI_ý;Vý?YðO_¹RMoX8Re7\tBa|Il\82Qt\85Xz\87\|\8b`\80\91e\80\97i~\9bk{ l|¤o|¨m~ªm\81«l\82ªl\83©l\85«n\86®p\87±q\85²o\84³o\82´m\84¶o\86¸s\8a´u\87­t\8b¥u\98¨\81¯¶\97ÅîÖ;ÚÑÌÁÁÉ«±¿\9a ®ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8YJ7ZK8ZK8ZK8[L9[L9[L9\M:]J9^K:^K:]L:^M;^M;]N9^O:^O:^O:_P;`Q<aP<aP<aP<`N@cNKcNU`P]^Ujgc~rq\91zw\96}s\8e\8ev\8c­\81\92Ì\86\91ß~\87îqyøbk÷PZ÷;Jþ)Eÿ2Nÿ;Rñ<MÞ=EÕ@DÓCCÓAAÜCEàBCáAAáCBÜD?ÒC;Æ@5¾>1·=0­9*§8%©:'«<)³;+À</Î>5ß=:ä88ã11ß//Þ52Û94åNCûm_ñgZ×RCÅ=/Ã:*È:,É7*Ì5*Ó9-Õ4*Û7.å:3è71è1-ç.+ì0.õ13ÿ3Aÿ0Bÿ-Cÿ*Aÿ&>ÿ":ü 9ö 8÷'Aô*Dõ.Kõ/Pó+Pô)Tÿ2`ÿBhñDWÿ_jÿhr÷WcìJYðK[êCTØ1Bè@OÛ7BÇ,0¸('¯/$«8%¥?&¨@'·@,¹:)ÜZLà\PÌF=ÌC;À71Æ;6âUNÔE=È:0Ç8*É:*È9(Ç9%Ä='°>&¦<$¦<&ª=)©8&«3%»<3ÑLCÔG@ÚE?Ø95Ú3-ç83ë51ê/(ó0,ü,,ý+,ú.-ô1-í5-æ8/Þ<1×?2É9.¼4(¿<2ÎOFßb\öywÿ\87\87ÿ\83\85ø{\7fù|\82ý{\83ÿw\81ÿn~ýdvö]oôYkëL^ôH^û9Tú<VëM[±KFfR1Oe4\tBf~Lu\88Z}\8ea\83\90e\85\92g\87\98l\87\9ep\87¤t\82§s\7f§r|¨m}©l\7f©j\81©k\83ªk\85©l\84ªm\85­n\82¯l\81°l\80²k\81µm\84¸p\87´s\86®r\8c¨w\9a¬\84²¹\9aÇÅ®ÖͼØÑË»¿Ê¤¬¿\92\9a­YJ7YJ7YJ7YJ7YJ7YJ7YJ7YJ7YJ7ZK8ZK8ZK8[L9[L9[L9]L:\K9^K:]L<]L:^M;]N;]N;\P:^R<`Q<aR=aR=aP<`O;_N:`M>gNIgNRbQ[`Whig\7fuv\94{|\9b\7fy\95\8f{\94©\82\95Æ\84\90Ú}\85ïtwýklýYZûCKü1Gÿ4Qÿ<Tó<Nç?LãCKÝBFÖ=?ÛACÛ?@Û@>ÛA?ÖC<ÏB9Å?4¼>0´>0«:*¨9&«<)³@.»@1ÉA5×B;Ø63à74Þ/,á2/ä;4Ó0'Î5'éUGÿwié[OÐB6Ê<.Ê;-É7*Ê6*Ô:.Ù8.Þ7/ã62æ21é/0ì01ò46û4;ý&6ÿ"6ÿ"9ÿ#7ÿ 5ÿ\1e\1e\1f\e\1e8ï$Aï(Gí%Ið(Mý3[ÿFhÿbsý`iôW`ðPZðP\îLYá?LÒ2<Ù>DË68º0-®/&¥6%¡=&\9b?&\9c>$¨9&²8)ÑUIº:/Ã>7»4.»2,ÍB=ãXQÕH?Æ9/Ä6*Ä7&Ã4#Å4!Â;'±<(¦9$§8%ª9'¬4$­1%Â?5ÛRJØIAßHAÝ;6Û2-ç40ì1,î-(ù2/ü,,ü*-ø*,ó,)ë.(ã1'Ü4)Õ7+Ð>1½3&»9,ÇH?Ø]Vñwtÿ\89\88ÿ\86\88û\80\85ý\80\86ÿ}\85ÿv\81ÿj|þ_s÷XlõShêDZôC]õ7Sñ;TßMZ¢H@\L+Lb3To<a|Gt\8cZ\80\96e\86\99k\87\9al\88 p\89¥t\8b«y\85¬w\80©q{§l|¦g|¦f\7f¦g\7f¦g\80¦i\81©k\81«l\80­l~­g~°g\80´j\83µl\88·q\88°q\8b¬w\99°\84¬º\97¿Å©ËʵÊÌÁ´½Ä\9eªº\8b\97§[J6[J6[J6[J6[J6[J6[J6[J6\K7\K7\K7\K7\K7\K7\K7\K9[J:\K;\L=ZM<YL;YN:\Q=^S?^S?_R?^Q>aR?cRBbQAbO@bL?iMIfLMdPYf[lkk\85v{\9b\80\85«\87\89°\8e\84§¢\87¦¼\88\9fÎ\82\8fây~ðsoùkaÿ`\öKTð=Pé:Ië?MíCPç@Jä=Eã>Dá<BÜ<>Ú<;Õ=:Ï?7È>3À</¶;+§6$­B.«<)«8&½B3ÊF:Ì>4Ï60Ù72Û60Ý6.Ü6*Ü9*Ü;)×;%Ó6%Ù;0ïRIñZO×E8Æ7)Ì=-ÓA2Ò:-Ô3)ðGBà..î5:ò5;î,5ÿALï'2ù&/ÿ(0ÿ'1ù\1e&û"*ÿ&.þ'.ð\1d\1f)÷+6é!.ì&7ñ-Aä":ÿWqç-Dÿ^lþ^hü[cùU\óPUéHMÚ>?Í84É>7ÄB5·?/¥8$\992\1f\977!\9a;'\9c;(§9,®7/ÂE?¿;7¼2/Ä64Ä51ÓD@ÛLFØKBÑD:Ç9-Ã3(Ç5(É5'Ä6(º<-±9)­/!©)\1c²,!Á9-ÐC9×G>ãPFÝD<Ù80Û0)å/+ñ10ù11û11÷/1õ/0õ/0ó0.ð0+ë3+ä6+Û9,Ô>0¾2#¾?0·=0Õ^Vèrnÿ\8e\8cø\84\84û\87\8aÿ\84\8cÿx\85ÿhzÿ_wÿ[uþTnøLf÷Dað9Wó:Yå?WÚ\g\8a?9UG,L^4Xu?g\86Kw\96]}\9cc|\9df\80¡j\82¥m\81§n\7f¦m~§m|¥i{¥f{£e|£d|£d}¤e}¥i~§m~ªk\7f¬k~­g~®d~±d\82²f\86´k\89´o\8a°u\8e®|\98³\88§½\99±Á¤²Á®¤³°\8b\98\9ew\84\8a\K7\K7\K7\K7\K7\K7\K7\K7]L8]L8]L8]L8]L8]L8]L8]L:\K;]L<^N>\O>ZO=ZO=ZR?[S@\TA]QA\P@\NA_ND`OEbPFcOHgNJfMPcS]f^sno\8ev}§}\87¸\85\8b¿\9c\95É¡\8b¹ª~¡¸w\8dÓy\82ê}zôvjõh^ø]aðNYëEQïHRöJVôFPí?Hê=Cã:?Þ:;Ù;:Ô<7Î@6Ç?3¿=/¶=,©<(©>*¨9&¯:)¿A3Ã=2Æ7/Ô=6Ò5.Õ4*×5*×5&Ø7%Ú9%Û;%Ú9%Ü5,æA;éLCàJ<Ð>/Æ7&Ê9(Ó;-Ü;1õIEä01ð6;õ6>ð.9ÿ?Mî&1ó$*ö%(ú(+ü,,û++õ''ö((÷+*î#&ì%(ê%,ý;DÙ\e'î4Bû@Q×%5ÿjuÿcjü[aûX]óNRåBC×<8Ñ>6½7+¾C3¹I5©>*\970\1d\8f*\18\8e(\19\92(\e\9c-$°;4ÐSOÌHDÁ54Æ44Ð<:êVT×FAÕF>ÏA7Æ8.Å2(É5+Ï7,Ì8.Æ<2Â91Á4+Ã3+È3,Ï81×@7ÞE=âJ?Ý@7Ù6-Ü1*æ0,ñ10ø00ú00ô02ò01ó/0ó0.ñ/-í2+ç5+Þ8,Ö>0¾2#¼=.µ=/Ó^Uévqÿ\91\8d÷\85\85÷\84\87ý\81\89ÿu\83ÿfyÿ\vÿXtÿQnýIfû?`ó:Zñ@]áI^ÀR[{?7RF.L^6Yv@e\87Jr\96Yu\9b^w\9dby¡e|¥i}¦j|¥i{¤hz¤ey£d{¢c{¢c}¡a{¢cz£gz¦k|¨i}ªg|«c|¬`~¯`\80±b\82°e\86±j\87¯p\86¬s\89ª{\8e­\84\8f©\86\8c£\89v\87\7faooO]]\K7\K7\K7\K7\K7\K7\K7\K7]L8]L8]L8]L8]L8]L8]L8]L8]L:_N<`Q>^Q@[P>ZO=YP?ZQB[RC[QEZPG\OI]OL`QNeSSgUUgUUfW\f^mkh\83rw¡y\82¹\81\8aË\88\8dÑ\96\91Ô\9f\8bÈ©\82±¹}\9fÏ\81\91ä\84\86í~uñriúegõT\íGQïENöHRöFPòAKí>Eâ7=Þ8:Ø:9Ò=7Ì?5Ä@3½@.¶>-­>+¨=+©:)·C4ÅI=¾</º1'È:0Ë7-Ð6,Ó7+Õ8)Ø6'Ø7#Ú:$Ý:)Ü5,Ù4.ßA6çOBÛG9Ç4$È2#Ø?1á?4õHBç10ò59ø6?÷3?ÿDPø3=ï(-ê$%ë#%÷10ô.-í'&ë%$ô01ê()õ79å+0à(0é4=ÿR^î<Jÿ[fý]eñVZîOTîMRèEHÜ9:Õ74Ó>8À6,À>1¼B3²>/©8*¥3(\9f-#\9b&\1f\9a%\1e§0*ÅEBÁ;8»-,Å33ÖB@ó_]Ð?:ÑB:ÐB8Ê<2Ì9/Ô=4Ú@6ÛA9Û@;Ø=9Ý>;ãA?â><Þ:8ã@;ëIDàB9Ü;3Ø5,Ú1*ä1,î20õ20ö0/ó12ò01ó/0ó0.ñ/-í2+ç5+Þ8,×?1À4%¸9*´<.Î\Rëztÿ\93\8fù\87\87ù\82\86û~\86þr\7fÿewÿ[tÿTqÿNlÿFeú<^ó<[îEbßTg¡AEp<1QJ0Pb:]xCf\88Lp\94Wr\98[t\9a_w\9fcy¢fz£gy£dx¢cw¡bw¡bx\9f`y a{\9fay az¢fz£gz§f{¨cy©_zª^|­^~¯`\84²g\89´m\8a²s\86¬s\84¦t\80\9fux\92mo\86lRdX@OL2A>]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8\L5^N7`O;`Q>\O>ZN>XO@XPEXOFZSM^TSaWXeY]gZak[ek^glaikeonl\82rt\9aw~´~\87Ê\84\8bÙ\8b\8eß\8c\87×\9c\8bÑ«\8aÁ³\81§¼x\8dËz\80Ü\82\81vþrqÿcföU[óLSóHPóDKò>Gí<Bä5:ß77Ø96Ò=6ËA6ÄB4¼A/µ@.«:(­>-¯>.»G8ËSEÅI=¹6,·1&Æ9/Ì9/Ò<.Ù=0Ú:*Ø7%Ù6#Þ8(Ý5,Ù2*ß>4êNAãK=Ñ;*Ð7'ßB3Ý6-î@9è0.ï13õ3;û7AÿNXÿKTý>Cð45á%$ë/.é-,î21æ*)è/-ñ99Ñ\1a\1cå26Ü-2æ9?ïFMÿX`ñMT×<@ÚACÞBEÞ>@Þ:;Ü89Ø96Ò94É91Á80¼9/ÀA8ËOGÕVPÐNLÃC@²72´92ÍLGØNKâRQîZXèRQïZVÈ5.Í=4ÑA8Ï?4Ò>4ØA8ÝC9â@;è>>ç9;ì9=ñ>Bî;>è58ë=<öMHÝ82Ù6-Ø4+Û3*â4-ë40ð3/ò0.ó12ó/1õ/0õ/.ò/-î1+é4+ß7,Ù@2Â6'´5&²:,ÈVLî}wÿ\93\8fû\87\88ü\81\86üz\84ûo|ûbtþXpÿOlÿFfÿ@bø9[ó>]éKd×Zh\8432e;-UO5VhBa|Ii\88Mq\93Ws\97Zr\98]v\9eby¡ex¢cv av au\9f`v\9e`w\9e_x\9f`{\9fay ay¡cz¤ez§dz§bx¨^yª[z«Z|­\\84³e\89´l\8b´r\8a­s\85¥s\7f\9cps\8dfh\7fbPbTCRK7F?]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9^N7\L3]M3_O6^O:[N=WN?WODWPHVQN]WYg`hnfsphwpgxrfzqh{ol}oq\86rw\97u|ªy\81À\7f\87Ò\84\8aÞ\8a\8cã\93\8eâ\9a\8c× \84¿\9bu\9e\9fl\7f¬nq¼vlÑuhñrlÿljÿgiþ^`úQVõFKï<Bé6:æ69á77Û96Ô=6Í@6ÅC3¼A/·?.¬8)´@3¯;.°</ÆREÓ]QÇMB¹;/¼:-À8,É:,Õ?1Û>/Ø6'Ú4&à6)ß2+á6/â>5âD8áE8ÜC3Ý@1á?0Û0&é61ê1.ï./ð-1ù6<ÿPXÿ\bÿZ^ÿORá.1â/2Þ,,öDDç55Û++Û-,ê>>Û33×34ÿcfÞ=BÊ+0Ê.2À')Ô::àBCÚ7:Ø24ß9;Ü89Í/.Ë30Í<9ÒGDÝSQëaaõilôeké^aÂA<ÅF?ã^Y÷igÿppÿkjãKJÖ>;Ç4-Î>5ÕE<ÓC8Ó?5Õ=2×:1Û30î5:ð,6ð,6ñ-7ï,4ë,3ò:<ýKIÞ2.Ú3+Ø4+Û4+á4-ç4-ì3.ñ1.ô02õ.1ö.0ö..ô.-ð0+é4+ß7,Ø?1Æ8*´2$±9+ÀNDí|vÿ\92\8eþ\87\89ÿ\7f\89þv\84øk{øatûUmýIfÿ=aÿ:_ø6YñB_ÝNbÁV^p/)\?-YW>]mHe}Mk\8aQq\92Ys\96\s\99^w\9fcy¡cx bt\9e_t\9e^u\9d^u\9d^w\9e_x\9f`{\9faz¡by¡bz¤dz§bz¨`y§\y¨Z{ªZ|«[\7f«^\83®f\86¯k\86ªm\85¦q\83 rz\95lq\89idwcZj]QaT^O:^O:^O:^O:^O:^O:^O:^O:]N9]N9]N9]N9]N9]N9]N9]N7^M3_N2_O6]N9ZN>XNBYRLYSS^Y_ebmrn\7fyt\8b{u\91yr\91wp\91tp\91ps\92py\9at}¨v\80µy\82Ã}\85Î\83\88Ù\8a\8bÛ\93\8fÙ\97\8bË\99\86´ \83¡©\83\8e«~y\9ekZ\9aQ>ºNAÓPHáVQëWUðRQðJLí?Aå58è8:å99Þ:8Ø=8ÑA6ÈC4ÀA0º?/³9,¹@5«5)¢.!¼J?×g[ÖeWÉUH·=0µ5(¾4'Í;.Ø</Ø6)Ü4)â6,Þ0)ä70â;2Ü:-Ü?0âE4ãC3Þ8*ß1&é4-ï2.î.-ì*+ó25ÿEJÿUZÿ^`ÿ[^á8;á8;Ô,,òJJâ89×//Ú44Ì('Ê'(öXYÚ>AÔ:<Ð7:¸\1f!Ä()Û;;æAEÝ47Ö,/Û14Ù03Ì'+Ñ34ãJLôbcùhköciõ_hù_k÷ajÔMJÓNGç\YçVSæNMáGEÎ31Í4/ÖA:ÞKCãPFÝJ@ØA6Õ;1Ô6-Ú.,ô19ú,9ø*7õ'3ô(3÷07ü>@ÿJIß0+Û2+Û4+Û4+á5+æ5-ì3.ð3/ô01ö.1ø-0ø..õ--ñ0+ê3+á6,Ù=0É;-³1#±7*¹D;êysÿ\8f\8bÿ\88\8aÿ{\87þp\80õgwõ^qøRjùEbÿ9^ÿ7]ù7ZïGaÏO^¡HJd4(VD.ZZ@^lIe|Nk\88Rs\91[t\95\w\9a`x\9ecx bu\9d^r\9c\r\9c\s\9b\s\9b\u\9c]w\9e_z\9e`y ay¡bz¤b{¦_y§^x¦[x§Wy¨W{ªY}©\\82¬b\85¬i\86ªl\87¨q\88¥u\83\9es|\94pu\89pm~kevd^O<^O<^O<^O<^O<^O<^O<^O<]N;]N;]N;]N;]N;]N;]N;]N7`O5aP4`P7\O<YPAZQJ\VV_Zaiguqo\84|y\96\7f~ ~|£zw¢xu¢uv¤rx¨r~°w\81¶z\83¼}\85Ã\83\88È\8a\8eÍ\92\93Ì\97\93Å \96»«\9c³»¦¯É­©Ä¥\93ª\88l\99fI\9cE1¬A1¶@4ÂB9ÖIBèNLíIHê@Aê<=è<<ã;:ß=:×@7ÏA5Æ>0À</º:/»?5®5,¦1'ºJ>ÎbUÓgZÓeVÃO@¸>/¸4'Æ8,Ó9-×5*Þ3+ä6/à2+â5.ß7.Ü8,à>1åC4â?0Ý3$å5(è0(ï2.ï--í-,ñ01ò67öBEöMPûX[éFIôQT×47éFIÜ89äABÚ78Î.0Ï12âHJÑ8:Í78·"$Ô;=Û89ã;;é<@ç6<à-3Ý*0á29ç<BïLQú^bÿlqÿipù_iôZf÷Ygö\fócbè[TçVS×?<Ì1/Ò41Ñ30ÞC>âKDæRHèTJßKAØ@5×:1Ù80á32ó.7ÿ0=ÿ/<ú*7û-9ÿ:BÿBEúBBà1,Ü3,Ü5,Ý5,à4*å4,ì4,ñ40ô01ö.1ø-0ø..õ--ñ0+ê3+á6,×;.Í>0µ1$±7*²;3çtoý\8a\87ÿ\86\8aÿv\83üi{òarò[n÷PjùBaÿ8^ÿ8_ù;_êLe¾NZ~86]=.LF.UX=ZeCcyKh\84Qr\8e[v\94^w\9a`y\9fdw\9far\9a[o\99Yo\99Wp\99Wq\9aXr\9bYt\9d[w\9e_x\9f`w ^x£^y¤]y¥Zv¥Wu¤Tw¦Ux§V}©\\82¬b\84«h\84¨j\84¥n\85£q\7f\9amx\91ip\84hj~cbv]_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<^O:bR9aQ7`Q<[O?ZPG\TR_Za`^lsq\87yx\97\80\80¦\81\82®}}¯xx®wv¯vx³t|»w\80Á{\85Â\7f\88Á\85\8aÁ\8c\90¿\95\97¾\9d\9d¹«§¸´­´¾³¯Æ¹©Ð¾¦ÕÁ Ñ»\94Ь\88¯oS®\F¤G5¨>0ÁG<ßVPïWTðNLè@@ç==æ<<â=;Ý>:Ö=5Ï;1Ç9/Á80À=5¶:2·>5ÀPDÅYLÅ^OÏeWÒdUÂL>º:-Ã9,Ð9.Ö3*Ý2+ä6/ä6/à3,Þ6-ã=1æB6åB3á:*Þ2$é4)å-#í0*ï/,ï20ð42æ.,â22æBCôX[óWZÿosãDHèGLÞ=BûZ_ÿptÝ>Bÿ}\80ÿnpêQSÓ=>Å02Õ;=òHKí:>ï8=÷>Dò7@ç.6ô?Hÿ]gÿltÿjrþck÷]eù]hþ`nþ]löYbò\]âOHáIFÒ73Ð1.×52Ò0-Ø93ÞD<áJAáJA×@7Ò5,Õ4,Ü71æ74è&.ù0:þ2=÷+4ù08ÿ>Bý?Aë52à3-Þ6-Ý6-Ý5*á3*å2+ì4,ô41ö01ö.1ø-0ø..õ--ò/+ë3+â6,×9-Î?1µ1$±5)¯6.çplý\87\85ÿ\87\8bÿo\7fücwñ\oòYm÷OiûBbÿ9_ÿ<aõ@aäRg°QWd/'VE1FF,QU:T_?btJg\81Qq\8b[v\92_x\99bz\9eav\9d^p\99Wm\96Tl\96Tn\97Uo\98Vp\99Wr\9bYu\9c]v\9d\v\9f[w Zw¢Zw£Xt£Us¢Ru¤Tv¥Ux¤W}§]~¥b~ c}\9bez\96cr\8c]h\81W`vRZoPRgHYL;[N=^Q@^Q@]P?\O>]P?^Q@_RA\O>ZM<[N=^Q@`SB_RA`Q>cT?_P;]P@\RHZPNZSZd`orp\86wx\97y{¢~\80°\80\81·}\7fºwy¶qr²lo´rxÆv|Ê\7f\84È\88\8dÅ\95\98Á¤¤¼±°¸¼¹²ÊŲÑÌ®×ϪØϤÛТÜРÙË\9aØÁ\95Ѩ\88\80f ^FÊyfÕtd¼G>ÖQLöb`èJIã?>á99â:9à;9Ú64Ø61Õ:5É91¿6.ÅB:¸<2¾I?ÄXK¶O@ÌeVÏdTÉXHÃH9Ã;/Ê6,×6,ß6/á4.Þ1+Ý2+ß7.ã=1à<0Ú7(Ü5%ã7)ä/$ç/%ì/)î1+î3.ë40ç4/â62Ö66åKMóX\ëOS×8=Õ6;øW]ÿ~\84ÿ~\83ÿpuÿhlÿimÿgjó]_ïY[ú[_ÿVZÿCJú8@ú6@ö2>ì,7ë0;ð<GýS\ÿ`hÿhpÿemýalÿbmÿ`lü\dìRRÞE?Õ74Õ30Ö1/Ô/+×2.Û94àC<ÛC8×?4Ô<1×90Ú70ß82ä73ï6;ò5;ó49ö5:ô5:ñ56ê22ã1-Þ3,Ü5,Ý6-à5+ã2*è1)ï2,ô20÷12÷/2ù.1ù//ö..ó0,ì4,ã7-Þ@4Ë9,¼6*®0$·<5ÒXUÿ\98\97þ{\81ÿl\7fÿd{ö]rðPhôGcûBbÿ;bù9^ôMkÒQc\89==P,\1eB:%BH.IM4W`AZjCaxJo\89Yw\93`w\95_s\95Yp\97Xo\98Vl\95Sl\95Qm\96Ro\98Tq\9aXr\9bYt\9b\u\9c[r\9bUs\9dUt\9fWu¡Vv¢Uu¡Tt Ss\9fRz¤Xy£[w\9e[t\96Yl\8bRb~KWqBQk>?X0=V/:S,YL;[N=]P?^Q@]P?]P?]P?_RA`SB^Q@\O>]P?`SBaTC`SB^Q@dWF_QD\OF^TR`Z^c_mmk\81uv\95vy¢y}­}\80·x|¹quµkp²lo´mq»uwÎ{}Ò\87\8aÑ\96\98˧¦Å¸·¿ÇŸÒÏ°ÚÖ©àÛ¤äÞ¤ãÝ¡äÛ¢âÙ¢ÛÑ\9eÔÇ\9aÒ»\99»\9c\80¦|cÄ\8bwÉ}m³UIÑ`XõqmìZZæJKâ>?æ>>é?@å;;à66Û64Õ<7È72Ê?8·7.¶=2¼L>´H;Æ\LÚo_ÒaQÄI:º4(Ã0&Ó5,Ü5-Ú/(à40â94ä=5à<2Û7-Ù5)Ý5(â5'ë6+ì4*ì1*é1)æ1*ã2*à3,Ú5/Ó86×>@ãJLòW[ù]aû\aü\dÿ`hòRZíMUïRYü_fÿjpÿgjóZ]ñNSì38ð+2ó+5õ-7ï'4ä ,å&5ì6BûPYþZcÿcjÿemÿemÿblüZeõQXäEBÜ=7Ù53Ý52ß63Û2/Ú2/Ù6/Ý?6Ø>4Ö<2Ô:0Ù80Ý82â94ç:6è88é69ë78í68î87ê65å3/Þ1+Ü4+Ü5,Ý7+à5+ã2(é1)ð0+õ20õ12ö/2÷/1÷//ö..ó0,ì4,ä6-Þ>2Ò>2Â8-µ2(¶71Ø[Yÿ\8f\90úszþeyÿ]uøVnöOiùFdù@`ú<`óAaäNg¹KVx;6K1 ;9":C(EG/OS8Vd@^sHl\83Ut\8f\v\93]q\93Wo\93Um\94Qi\92Nj\93Ok\94Pm\96Rn\97Up\99Wr\99Zs\9aYs\9cVs\9dUt\9eVs\9fTs\9fTr\9eQp\9cOo\9bPm\97Mk\93Mh\8cL`\82EWv=Lh5D^.>X)=V,>W-?X.XK:[N=]P?^Q@]P?]P?^Q@`SB`SB_RA_RA`SBaTCaTC_RA]P@bUL[PL[QP`Y`jdrqm\84vu\95y{¤w{«x}´v|¸ns³di­`g­im¶ruÄ|~Õ\85\85Û\96\95Ù§¨Ø»¹ÏËÊÆÙ×¾äá´èã©íè¦îé¥ëæ¤çá¥áÚ¤×Ï ËÃ\9c¶°\90§\9b\81\99\83\83m§o^\9bQDº]UÜlh÷usî`^äJJäABéAAë??è8:â66ß=:Ó;6ÒB:Á80·7,·?1­<.¶G6ÙjYÞj[Ù[MÇA5Å2(Ï5+Ù6-Ø1+Ý52çB>êG@ß<3Õ3(Õ1%Ú2'Ü0$æ4*è1)æ/)ä/(ã2,â7/á=4ßA8Å-(É32ÙCBîUWø]a÷[_óS[ðPZçGQèHRîNXú]dÿmsÿntóX^â=Cè/4ò-4ù1;ü3=ó+8ì(4ô5DÿJVôIRôPW÷X]û_cÿdiÿ`föQXèBFÝ86Ü71á85è<8ê=9æ95à40Ü5-Û:0×;/Ö:.Õ9-Ú7.à91æ;4é<8ã:7â96ä86æ87ç:6å84à5.Ú1*Ù5+Ú6,Þ8,à6)ä2(ë0)ñ0)ö0-ô22ó12ö01ö0/õ/.ò1,ì4,ä6-Ü:/ÚC8Æ9/º4+´0,á__ÿ\84\86÷ktþbwýVpúPmýKküCeô;]ñ<_éIeÓRd\9cCGk<4O>,==%9?%EE-FI.Q\:YkCg}Oq\89Yr\8fYp\8fTl\8fOi\90Mg\90Jh\91Ki\92Lj\93Ml\95Qn\97Uo\97Xo\98Vt\9bXs\9dUr\9cTq\9bQn\9aOl\98Mj\96Ki\94Ld\8dG`\87D[\7fARt8Ki3D`-?Y)>U'B\-D^/Ic4WJ9YL;\O>]P?]P?]P?_RA`SB_RA_RA`SBaTCaTC`SB^Q@\PDYNLZQV_X`gcrqm\84ut\94xz¡z|­v{²syµjr³bi­\c«`g¯lr¼v|È\88\8aÝ\94\93㣣㵴àÆÅ×ÓÒÎßÝÄçä¹éæ¯íé¬ìè«çâªâܪÙÒ¨ËÃ\9fºµ\97¤¤\8c\99\98\83\93\88t\97\80n\98qb\9bcV²h_Ïrkú\8a\86ôtqê\[åKKçDEê@Aì<?è:;ß:8Ú;5ÝF?ÒB:À:/¸:.¯5(§1#¾H:ÚbRéj[ÛSEÉ:,Ë3&Ô6+×4-×31ñMKüZUëMD×9.Ö4)Û4+Ý2(Þ-%ß-#Þ+$Þ-%Û0(Ù5+Ø:/Ö>3Á.&Ã3+Î:6ØDBÜFGÞEHãFMéLUîQZóV_õXaø[dÿhpÿnsòY^Ý:?é26ð/2ñ.4ð+4ê&0ë)4ø=HÿS^ë@HæAGçFKòQVÿZ^ÿW\óFLã68á53ã81ê;8ñ?;ò@>î<8æ93à70Û8/Ø:/×9.×9.Û8/á81æ93è;5â:7ß:6á96ã:5æ:6ä92Þ5.Ù2)Ú6,Ú8+Ü9*à6)ä2(ë0)ò/)ô1-ó32ò12ô01ö0/õ/.ò1,ì4,ä6-Ú8-ßG<È8/¾3,´-*ìfgÿy}öirÿcxüTnýJjÿHjþ>cò6Yè=]áQhÂXb\87A?eC7YN:GG/AC+JH1DD*KU3Sc>btJk\83So\8aUn\8dRj\8dMh\8dHg\8fHf\90Hg\90Ji\92Lk\94Pl\95Qm\95Vn\97Ut\9bXs\9bUp\9aRm\97Oj\94Lf\91Ic\8eFc\8cF_\86CZ\81@Vx<Qp7Mi6Lf6Ne7Ne7Ke5Ni6Sm=SG7VJ:YM=[O?[O?\P@]QA_SC^RB^RB_SC_SC^RB^RB^RB\RHULQ^Xfkgxtp\89xt\95xw\9fxzªv{²syµiq²`g«Zbª^f®iqºu}Å}\84Ì\92\96à\9e\9e䭮滽äÉÊßÓÒ×ÚÛÍàÞÅäá¾æâ¼äß¹ÞضØѵÎƯ¾µ¤­§\99\97\99\8b\8c\8e\80\89\86w\89{n\90uj\9arh¨me¹nhä\89\84í\80}ñtpðdcðXWïLMîDEë??â96à;5áB<ÝF=Ë=3Ã=2ÃA4¯1#«0!ÇI:ÚXJÕM?Ë=/Ì8*Ð6*Ï2)Ô51õVSÿjgú]XâE<Ü;1Þ:0á9.á3*â1)ß1*Û0(Ó/&Í/$Å.#¿0"Å9,½3&¿2(Ê;3ÕDAÙEEÛBGÚ@HßDLëOZñU`ñW_ù_gþgnñZ_àAEè:;ì65í36í38ð3:õ:CÿHRÿV^â7=Û59Ü6:é@CøKMüIMó<@ç02ç51é;4ï<8ò<8ñ;8í:6ç83â70ß;2Ü;1Ù;0Ú9/Ü8/â70å61æ72ä;8â:7å95ç:6è;7æ93ß6/Ú3*Ú6,Ú8+Ü9*Þ6)ã3&è0&ð/(ò1,ñ42ð22ó11ô1/ó0.ñ1,ì4,ä6-Ü8.ÝC9É6.¾1*½10öknÿrxùgrû^sùOlþBeÿ>dÿ9`ô8[æFbØ[kªUZvD=bK;_YCQO:KI4PI6FD-FO0L\8ZlDe{Mm\85Ql\89Ok\8bJg\8cGf\8eGf\90Fg\91Ih\91Kj\93Ol\95Qm\95Vm\96Tr\99Vp\98Rm\95Oi\92Le\8eHb\8bE`\89C_\88DZ\81@V}>St;Pn8Ok8Qk;Wn@YpBUp=Ur<Vr?PD4SG7WK;YM=YM=ZN>]QA^RB^RB_SC`TD_SC^RB^RBaUEaVP^Vaje{xt\8f}y\9azy¡wx¦ux­rx´iq°bi­[c«\d¬go¸u}Å\80\88Ð\86\8dÑ\97\9cÜ ¥Ý¯³ã»¿åÄÈáÌÎÛÒÓ×Ö×ÑÙ×ËÙÖÇÖÐÄÐÉ¿Ìüù·³©ª£\9a\9b\89\8a\85wzsvvnulc\7fle\8dog\8ebY\9b`X¿rlÖyrï\7f{û{xÿqoýccõRSïGFïC?ç>7ß<5ßB9Ï;1ÑC9ÝUIÁ=0·5'¼:*Â=.Æ>.ÏB1ÖE4Õ?0Ï7*Î3/èMKú_]òWSßE=Ø:1Û8/ß8/ä91å9/å81à90Ú9/Ñ9,È9+Â9)°)\16·2!È@2ÒH=ÒE>Ë;:É78Ï:>Ï8AßHQìU^ðYbô]döagéTZÚACã?=ë?;ñAAúHHÿMRÿQVÿU[ÿW^Þ39Ù/2Ú03æ8:ô=Aø;?õ47ñ01ì51ì94ð95ì51ê1.é3/å3/á4.ã<4ß<3Ý<2Ü;1à91ã81ç51ç51ç98æ87è96ê86ë95ç83â5.Û3*Û7+Û9,Ý:+Þ6)ã3&ç1&ï0(ñ1,ð42í42ò21ó1/ò0.ñ1,ì4,æ5-à90Ø;2Ì70À/*ÐBAþosükröbnïQhõHfý;`ÿ5^ÿ5_û?bãMfÊ\g\8bGFiE9\M:\WAWR>QJ7OG4ID.DJ.FV2Sc<]sEg\7fKi\86Li\89Hf\8bEe\8dFd\8eDe\8fGg\91Ii\92Nj\93Ok\93Tl\95So\96Sm\95Oj\92Lg\8fIb\8bE`\89E^\87C^\87E[\82CZ~AVw@Tr>Tp?VpA\sG^uGYtAWt>Vs=NB2QE5TH8WK;XL<YM=[O?]QAaUEaUEbVF`TD_SCaUEfZJg^Ymfvtq\8czy\99yy\9fvw¥uwªpu¯jo¯`g«^f®_g¯em¶pxÀ}\85Í\88\90Ø\8d\97Õ\97¡Ô\9f§Õ©²Û²ºß¹¿ß½ÁÜÂÄÛÄÅ×ÅÂÓÄÀÏÁ»É»µÃ¸¯À´©º¥\99­\94\8c\9b\88\86\8bqqqrqmnfcwhc\86oi\82`W\94c\\9b[R¶f]Ösmízuÿ{wÿvrÿheûYVýQMôG@å>6æE=Ö<2ÚF<ê\PÄ:-Á<-¼7(¾6(Ç>.ÏC2ÑB1ÓB1ÕA3Ð83Ö>=ÜDAÚB=Õ<6Ô70×6.Ü8/ã;2å:2ã:3ß;2Û>5ÕA5ÐD5ÌG4®-\17»:$ÍJ6ÐK<Æ=3º/*¿10Ê9<ÕBJßLTëU^íZbï\dëZ_ÞMRÓ>@Î3.×6.à;7è@=ðCEóEGñBGì?Câ59ß26ã36î7;õ79õ13ú.1ú24î3.ï82ð72é0+ç+)ç0,å2-à3,ã<3à>3Þ=3ß<3â92å82é62ë52ê67ë46ì44í55î64ë52â4-Ü1)Ý7+Ü8,Ý:+ß7*á4&æ1&ë1%î2)î52ì42ð31ò2/ò0.ñ1,ì4,æ5-â;2Ñ3*Ò;4Æ2.çUVÿqvöckðZfåI_òEcÿ9`ÿ0[ÿ4aÿBhÛMc°OVj5/]F6WL8TO9YQ>TI7LA/ID.@F*@O.K[6Uk=`xDe\82Hg\87Fe\8aDb\8aCc\8bBc\8dEe\8fGf\8fKh\91Mi\91Rj\93Ql\93Pj\91Ng\8eKd\8bHa\8aF_\88F^\87E^\86G_\85H^\81G\}F\zF\xG^xIaxLczLZuBYv@Yv@IB2LE5QH9SJ;WK=XL>[O?]R@dWFcXFcXF_VE^UFaWMf]Ticewr\88yu\98wu\9csr\9err¤ru¬ko®af¨Za§^d®fl¸ms¿v|È\80\86Ð\8c\92Ü\96\9bÝ\9a¡Õ\9f¨Ó¦­×­²Ü¯´Ü°´Ú±³Ù´´Ú²°Õ²®Ñ­§É¨¡Ã¨\9eÀ£\99»\96\8b­\87\7f\97{x\83cadhdebZXi[Xzc]wVM\8fcZ\89MC¡TJº`WÖkcïxrÿ\80zÿzwÿniý`[õSNæGAìOHÜB:ÝF=éVL¹+\1f¾2%¾5%Æ>.ÏF4Ê?,Á2!È7$ÙE7ÝF?Ò:5Ê2-Í6/Ó:2Ö<2Ü;3á=4ä<3á90Ý6-Õ4*Ï5)È9)Å<*Â?+ÔS>ÇF1½<)¾:+Â<1Ã:4Á63À43ÛLNÜMOàOTåTWçX\åVXÙMNÓD@É5+Ð6*Ø7-Ü5/à21ä14å05æ.6ì4<ì3;ñ6?ú8Aü3=ú+5ÿ)3ÿ07÷,0ø46ø46ð./ë*+é0.ç40â5/â;3ß<3ß>4à=4ä;4ç:4ê84í74ë33ë33ì23í42ì42ç4/à2+Ù1&Þ8,Ü9*Ý:+Þ8(à4&ã3$è2%ë3)í60ì51ï31ð3/ñ1,ï3*ë4,ä6+ã<3Ì.%×>8Ì43ùceÿoxö\hîOaèD\øEeÿ;cÿ1[ÿ6aöGhÈK[\93CFR,!VI8RM9NI5YQ>SK8F?-GG/=D%?K'GU1Rd:]sDc~Ie\84He\88Fb\87Ba\89Bb\8aAc\8dEd\8dGf\8fKg\90Nh\8fNj\91Nh\90Je\8dGc\8aGa\88E`\87F`\87H`\87H^\81G]\80F_}G_{H`{Ha{Ke}Mf~L[x@[z?\{BAB4FD7JF;NG=RH>VJ>ZM=]P=`Q<^R<^S?]VDaZPgb_nimrp~vq\91zu\9e{x¥yw¨pp¦gg£`a¡[^£_a«dg´opÀyzÌ\84\82Õ\8d\8bß\95\93ç\9b\98å\9f\9fÝ\9f Ö¢¢Ø££Ù££×¥¢×£¡Ó¤ Ó¤\9dТ\9cÌ \9aÈ \98Ç\9d\96Â\97\8e¹\8c\83®\83|\9dpn{hfic_^e[YkYUqVO|VM\89WL\92RH¨ZP³YP¿ZRØkdêyq÷\82{ÿ\8a\85÷vqývsë`]ßPLØD@ïZTË80Ã3(Ä6(Â6%À7%À7$Ä9&Ê;*Ï>-Ô>/Ð8+Õ;/×?2Ó;.Í5'Í4&×9-â@5à:.ß9-Û7+Õ7+Ï7)È;)Å>*ÄA-À<-Å?3ÊD9ÍG<ÌC;Ä;3»2,µ,&Å<6ÏF@ÙOLßVPãYVáXR×NHÍC9Ì;(Ó;&Ú8)á5+ç/-ë*/ð(2ò(6ù,=ù+?ú+?û*?ý(>ÿ&>ÿ$<ÿ$:ÿ$8ÿ(9ÿ+:û+8ó+5ë.4ç55ä;8Ý82Û:2Ü;3Þ;4ã:3å82è62é62ë33ë33ë54é62ç51â5.Ý5,Ø4(Û9*Û:(Û:(Ü9&ß8%â7%ã6%æ4&ê5,ì5/ï4-ð5,ð4+í5)è6*ã7)Þ:.Ö8/Õ:5Ú>?ÿlvÿbqúThôH`ÿKhõ6Xÿ5\ÿ=dö>båOh®JT]#!C-\1f=:'GF2ON:OJ7DC/=B.>G,BH$EL#HR-R^8ZkAawId\7fLd\83Ja\85E`\88Aa\89@c\8c@e\8dDg\8fHj\91Nk\92Oi\91Jg\8fFe\8dFc\8bEc\8aGd\88Hb\86H`\84Fb\83Jb\81Ha\80Gb\7fGd\7fHd\7fHc~Ga}C[{<\\7f=_\82B;?1>B4DD:IE<NE>QG=XJ=[N=_P;]Q9\T?^WG`[Uecfmkxqo\85so\94sp\9dtq om\9fgf\9f``\9c\]\9eZ]¢ce°ik¸trÅ}{Ï\85\81Ö\8c\88ß\93\8då\97\92ä\98\95Ø\99\98Ò\9c\98Ó\9d\99Ö\9d\99Ö\9c\98Õ\9c\96Ò\9b\95Ñ\9d\95Ð\9b\93Ì\9a\93É\99\92Æ\98\90Á\91\89¸\86\7f«\7fx\9askzlcfe][d[VhYRmWLzVJ\89UH\9aVK¯]RºYRÀYRÑf^Ýpiávnë~wú\87\84ÿ\87\84övsífcâTRëZUÆ3+¿0"Ä6(Ã7&À7$À7$Ä9&Ç:(Í<+Ò<-Ò9)Ô8)Ó:*Ñ:)Ñ:)Ð9(Ô8)×7)Ý;.Ý9-Û9,Ö9*Ï9(Ç:&Á:$½:&¾6*Á8.Å<4È?5É@8Ç>4Ä;3À:/½4,Ä>3ÑH@ÕODÚQIÕODËB:Á7*É8#Ñ9"Û8'å4*í0.ó*0ù)6ý(:ÿ+?ÿ+Aÿ(@ÿ'?ÿ#=ÿ!<ÿ\1f;ÿ\1e9ÿ\1e9ÿ!9ÿ%:þ);õ-8ï29ç79å;;Ü94Û94Ü;3Þ;4ã:3å82æ72é62ë33ë33ë52è62ä71ß7.Ú6*×5(Ù9)Ù:'Ú9%Ú9%Ý8$Þ8"à7"á6$å4*é4+ê4)ë5*ë5(ç5'ã6&ß8(Þ</Ò4+Ó52óTXÿesÿZmõG`ÿIgÿ@bÿ:^ý3Yù;_ñNkËL_\889>R+$@4&69&9<)@A/DA.@?+:B+>G*=D\eJQ%Zb;dpJfvOezQd~Od\82La\83Fa\86A`\89=b\8b=e\8dDg\8fHk\90Kl\91Lj\92Ih\90Ge\8dFd\8cEf\8bHe\8aGd\86Ib\84Gd\83Hc\82Ib\7fEb\7fEd\80Fe\81Fc\7fDa\7fA]\80>_\84?b\87B4:,9=/??5DA8IB:ND;TH<WK;\O<[P<[RA]WKb^[gfknm{pp\88qo\94nk\98jg\96ca\93\[\94ZZ\96[\\9d\_¤hj´mp½wxÈ~\7fÑ\86\84×\8a\88Ü\8e\8aß\90\8dÜ\91\90Ò\91\91Í\93\92Î\93\91Ð\92\90Ñ\91\8fÐ\91\8cÎ\91\8cÌ\92\8cÊ\91\8bÇ\92\8aÃ\92\8b¿\92\8a»\8c\85±\82{¥~s\93zevs^cf[Yc\Tb\PeYIrWF\83SE¢YP»aYÉ\YÏYWÚd`ÞkfÜohâwoú\8b\84ÿ\89\85ÿ\85\80ÿ|wömgîaXÃ5+¿3$Â9)À9&¾:%½9$Á8%Å:'É:)Í:*Ô;-Ò6)Î5'Ð8*Ó=.Ó=.Î6(Ê.!Ù9-Ø8,×7+Ô8+Ð:+É:)Á8%¾7$½5'¿5*Á7-Ä:/Ç=3É?4ËA7ËC7Å;1ÉA5ÎD:ÏG;ÑG=ÐH<Ê@6Ä6(Ì6%Ô7$Þ6)ç4-ð/0õ,4ú*7ý*;û(;ú':ú%;ù$:ù!8ù\1f\1d\e3ÿ\1f6ÿ 6þ$5ú*8÷2<ð7=é9;ã;:Ü94Û94Ý:3ß:4ã:3å82è62ë52ì44ì44ë54è62ä71ß7.Ù5)×5(Ù9)Ù:'Ù:%Ú9%Û9$Ý8$Þ7$à6%ß5&á5)â5'ã6(â7&á7&Ý7'Ù7(Û=1Î1(Ö87ÿkqÿ]kýQgð=ZÿIjÿ7[ÿ=d÷5Zí?`äVp©@O_#%J/(:7(07%19$9<'@>)?=&>>&?B#?F\1cW`1s~T}\8ccv\88^h\7fSa}La\80G`\83C`\85?`\89=c\8c>e\8dDg\8fHk\90Mk\90Mk\93Li\91Hh\8dGg\8cFg\8cIf\8bHf\88Kd\86Ie\84Ic\82Gc\80Fc\80Fd\82Fe\83Gd\80Eb\80Bb\87Db\8aDe\8dG06(39-:;3>>6D?9KB;PF<SJ;VM<WN=XQA[WLa_`hgolm\7foo\8bom\94ih\94`^\8fVV\8aST\8cVX\95[^¡`d«ko¹qtÁz{Ë\81\82Ò\87\85Ø\89\87Ú\8c\89Ú\8d\8a×\8e\8dÏ\8e\8eÌ\8d\8dÍ\8e\8bÎ\8d\8aÏ\8b\88Ï\8c\86Î\8c\86Ì\8c\85É\8b\85Å\8d\85À\8e\87»\8e\86µ\88\81ª\7fy\9d~p\8a\80_pyY^jXVc\R]^N^[HjXD}SC\9eUL½\VÐZZÙYZâdeåkhßpiäwpé|uì{sý\84|ÿ\87\80ÿ\81{õkaÇ=2Â9)Â;(¿;&½;%¾:%À9%Ä9&Æ9'Ë8(×;.Ô6*Î5'Î8)Ð=-Ï>-Ê7'Æ0!Ñ5(Ñ5(Ò4(Ð7)Ï9*Ì;*Ç<)Ä;)Ã9,Ã9,Ã9.Ã9,Æ9/È</É<2Ê>1ÒE;ÒF9ÎA7É=0Ê=3ÎB5Í@6Ì=/Î5%×5&â6,ë40ñ.2õ,4ø*7ú*:÷&9÷&9÷&9÷&9ù&9û&:þ%:ÿ$8ÿ"7ý"6ú&5ù-9ö4=ð9>ç9:ß76Ü94Û94Ý:3ß:4ã:3å82è62ë52î45î45ì65é75ä71ß6/Ù5+×5(Ø8*Ö9(Ø9&Ø9$Ù8$Ú8#Ü7#Ü7$Ù6%Ù6%Ú7&Û8'Û8%Ù:'×:'Õ9*Ö:.Ð3,éIKÿoyÿVh÷E_ö=]ÿAfÿ3[ÿ8_÷?cçMiÅPc\7f/:G\1d\1f@1*02%,7&4=*=B,@@(@<!C>!HE"T\-o}J\8f\9fp\96©|\82\98ji\83T_{H]~E^\83@a\86@b\8b?f\8fAh\90Gj\92Kl\91Nl\91Nl\94Mj\92Ih\8dGg\8cFg\8cIg\8cIg\89Lf\88Ke\84Id\83Hd\81Gd\82Ff\84Hf\84Ff\82Ec\81Af\8bFf\8eHj\92L,4'06*690;<6A>9E@:KD:OG<RJ=QK=SOCYVO`_dggsjk\80kl\8aih\90b`\8fVV\88OP\86OQ\8cUY\98_b§ei²or¿rxÆ|\7fÐ\82\85Ö\86\87×\87\88Ø\89\88Ö\8a\8aÔ\8a\8bÌ\8a\8bË\89\8aË\89\88Î\87\85Ð\87\84Ñ\87\83Ð\89\82Ï\8c\84Í\8a\83Æ\8c\84À\8d\86º\8d\86°\87\81£}x\96\7fm\83\83Yg\80SXmUQc]QZbMW_GbZCxUB\92LB·TOÏTVÚSWå^bæfgákiåvoãtkàpeö}uÿ\82yÿ\87~ôl`È@2À8(À;(¿='¾<&¾<$Á:&Ä9&Ç8'Ì6'×9-Ø8,Ñ8*Ï9*É:)È;)Ç:(Ç8'Î8)Ð8*Ñ8*Ð7)Í7(Ë8(É<*Ê>-È<-È<-È</È<-Ç9-Æ8*Å7+Ä6(Î@4ÏA3Í=2È9+Ê7-Î</Ì9/Ë4)Ð/%Ù1(ä2.ì23ó.5ö-7ú,9ú+;û.?û.?ù/?ú0>ý.>ÿ/=ÿ.=ÿ.=ý)8û(7÷+7õ0:ñ7<ë8;á77Ù42Ü94Û94Ý:3á:4å95æ74è64ë54î45ñ56î66ê65ä71ß6/Ù5+Ö6(Õ8)Ô9'Õ8'Õ8%×8%Ø7#Ø7#Ø7#Õ8%Ô9%Ó;&Ó=%Ô=(Ó>(Ò=)Ò<-Ð6,Ù;8ÿ^dÿanÿOhô;ZÿBgþ5_ÿ5^ú0VóLjÚZq\95?LY&+B**83/+1'.9+5A-:B*9<!?<\1dRG'_Z2{\85Q\90£l©½\8a¦¾\8c\8b¥uo\8bZa\7fI^\80D_\84A`\88?e\8eBi\92Dl\94Km\95No\94Qn\93Po\94Nl\92Ih\8dGg\8cFg\8cIh\8dJi\8bNh\8aMd\86Jc\85Id\83Gd\83Gf\85Ig\87Hg\85Gd\84Ch\8dHi\91Jl\94M*2%-5(2707:3;:5@=8EA8HD9NH<LH<NKBTSO]^cceteg~ef\85a`\88YZ\8aPR\85LO\86RS\93[^£ei²jp¼sxÉw|Î\7f\81Ô\83\85Ø\85\86Ø\85\86Ö\88\87Õ\89\89Ó\86\87Ê\85\86Ç\84\84Ê\83\83Ë\83\80Ï\83\80Ñ\85\80Ò\85\80Ð\8d\85Ò\8b\84È\8c\84À\8c\85¸\8b\85«\84\7f\9dyv\8b{kx\81V`~PSnUPd^PZdLVcI_]DrWB\8dOB´WPÎVXÚSYä\`èaeäfgèqmëyoãqfö{sòriþxmå]QÄ;+½6#À<'À<'¿=%Á=&Ä;(Ç:(Ê9(Î6(Ö6*Ø8,Ô;-Í:*Æ9'Â9&Ä;(É>+Ì=,Ó@0ÙA3Õ=/Î8)È5%Ç8'Ê=,Ç:)Ç;*É;-É<+È:,È9)Æ7)Ç5&È6)Í;,Ò>2Ò>0Õ>3Ô>0Í6+Ç-!Ð+%Ú-)ç10ï26ö1:ù/;ü/>û1?ù0@÷1>õ1=ô0:ö.9÷.8ù+7ù+7û/:ø.:ô0:ð3:ì59å78Ý54Ø42Ü94Ü94Þ93á:4å95æ74è64ë54ñ56ò67ï77ë76å82ß6/Ù5,Ö6*Ó7*Ñ8(Ñ8(Ñ8&Ó8&Ô7$Ö7$Ó8$Ï8#Í;$Í=#Ì>&Í?'Í?)Í?+Ð<.Ð50êGHÿgpÿPbÿHeù7ZÿAjú/Zÿ7_ð4UáQjºUem19E(*C7754034/39/4=*2:"18\17AC\1ch`9\84\82R\9f®w¨À\86µÎ\97¬Ç\92\92®{v\94`d\85N_\83E]\85?a\89@g\90Dl\95Go\97Np\98Qq\96So\94Qo\94Nk\91Hg\8cFf\8bEf\8bHh\8dJi\8bNi\8bNe\87Kc\85Hd\83Ge\85Fg\87Hh\88Gg\87Fd\87Cj\8fIi\93Km\95N%0"*2%/4-36/672:95?<7B?8IE<HE<IHCQQQ[[c`asac|]`\81\^\87WW\89RS\89SU\90\] fh²psÂsxÊz~Õ|\82Ú\80\84Û\81\86Ú\82\84×\82\85Ö\83\85Ò\83\85Ï\83\86É\82\85È\81\84Ë\82\82Ì\83\80Ñ\83\7fÓ\85\80Ô\86\81Ó\8d\85Ò\8b\84È\8b\83¾\89\83±\87\81£\7f|\91uq\7fufm}VYzQOlVKd_L]eMZdI``Dp\C\87TC¬\QÇ[YÓUXáZ^æ^bç`díkkózrërgöwnÝXOäZOÐD7Ã6%Æ;(Ã:'Â;%Ã<&Å='Ê<(Í:(Ð8*Ó7*Ñ0&Ô3)Ñ9,Í;,Å<*Â;(À;(Ã<)Ç;*ÓD4ÞJ<ÝG9Ò<.È4&È6'Ë<,Æ9(Æ9'È9)È9(È9)Ê9(Ê8)Ë8(Í7)Ñ;,Ö>1×?1Ú@4ÚA3Ö:.Ñ0&Û/+ä22í57ô5<ø3=ù1>ø0=ö0?ð.9î.9í/9ì/6ì-4ï,2ñ*1ñ*1õ2:ó4;ò5;ì59ä46à44Û62Û83Ü94Ü94Þ95â96æ87æ66è66ë46ò59ò59ð67ë76å84ß6/Ø5,Ó5)Ñ8*Ð9(Ï9(Ï9(Ð9(Ð9&Ñ8&Ð9$É9!Ç;"Ç=#Ç?%Ç?'È@*Ë>-Ï;/×96ûT[ÿ^nÿH`ÿ?aÿ:aÿ7dý4`û9^êFaÃN`\88?FQ12@64@::956>64;607:)3<!7C\1dQZ-\80\82P §q°Ä\87®Ê\8d¯Ì\92¤Â\8c\91¯{x\99bg\88O]\81C\\84>`\88?g\90Dm\96Hp\98Op\98Qn\95Rm\94Qn\93Mj\90Gf\8bEd\89Ce\8aGg\8cIh\8cNh\8cNe\87Jd\86Ic\85Hd\87Gf\89Gg\8aFf\89Ed\89Ci\91Jj\95Mn\98P#. (0#,2(.3,241553984<;6FC<DD<FGANPOWZa^`o^`wZ]~]_\88ZZ\8cWX\90[]\9aff¬qsÀz|Ï|\80Ù\80\84ß\81\86â\83\87â\82\86ß\81\83Ø\7f\82Ó\80\81Ñ\81\83Í\84\87Ê\83\86É\82\85Ì\83\83Í\84\81Ð\86\83Ô\88\83Õ\8b\84Ô\8c\84Ï\8c\83Ä\89\82\88\81ª\84\80\99|x\87pnsnbbuXTrTJiWIe`LaeL^dHcbFn^DzQ=\9d[K´ZRÄTR×WXâWZéX]ïcdõqlîncöpgÐC:ÑA6Ä2%Ç4$ÔC0Ç9%Æ9%È;'Ê<(Î;)Ò9)Õ7+×7+Î-#Í1%Í7)Ë<,Æ?,Á>*½:&»6#½4"ÐC2âN@äN@×A3Ë7)Ê8)Í>.È;)Ç:(Ç8'Å6%È7&Ê7'Ë8(Ï9*Ò:,Ô;-Ò9+Ñ5(Õ7+Ú<0Ý=1Û7.ç85ð9;õ;@ø9Aø4@õ/<ñ-;ì,9ê/8é19é27ê37ì46î45ò46ò46î47ï6;ì8;é69â45Ý33Ü73Þ;6Ü94Ý84à85â96æ87æ66é56ë46ò59ó6:ð67ë76å84Þ71×6,Ð6*Î8*Ì9)Ë:)Ë:'Ë:)Ë:'Ì9'Ë:%Ä8!Â: Â<!Â>%Â@(Å>*È<-Í81Þ;>ÿ]fÿRfÿIeþ8\ÿ>hø-Zý=fç=Zã\m£LT]--F93BC><87>56C34A4.<;)<E&EV*`s<\8d\9b`­½\7f°Ê\8bªÈ\8a¤Ã\88\9b¹\83\8b¬wx\99df\87NY}?\\81<_\87>f\8fCl\95Gp\98Op\98Qn\95Rl\93Pm\92Lj\90Gf\8bEd\89De\8aGg\8cIh\8cLh\8cNe\87Jd\87Gc\86Fd\87Eg\8aFg\8cFg\8bEe\8aDj\94Lk\96Nn\99Q(0!'/"(.$).'.0-2206729:4==5?@8DE?IKHORWUWdY[p\]{YX\80YZ\8a]^\94ce¢mmµvwÇ~\80×\81\84á\89\8cë\89\8cí\89\89é\85\86â\82\82Ú\7f\80Ó\82\81Ñ\83\83Í\80\83Æ\80\84Ä\83\83É\83\83Ë\85\82Ï\86\83Ð\88\84Ñ\8a\84Î\87\80Ã\88\80»\87\80¬\84}\9e\80y\8bupwjfee^Vl\Ok[Kh]Ke_Ib`IcaHf`Fm_DlP8\84V?¥]O¿aWÐYUÛQQíRX÷\`øieæYPÔD;Î7.Ñ7-×;/Ö=/Ó<+Î8'Í:&Í:&Ï:&Ò9)×7)Ù5+Ú6,Í/$Ë3&Ë9*É=,Å@-Á@+¾=(¼9%Á8&¾1 éWHßK=Â. Ï=.Ì=-Å8'È;)È;)Ç8'Æ7&Ç6%È5%Ê4%Ì4&Ð7)×;.Û=1Ü<0Ù7,Ù7,â>4ìC<õCCñ8=ð3:ó4<õ3>ð.9ë-9ì2=ê7=ä5:ã57ä67é99î:9ð86î64ï;<ë;;é99æ87á85ß74Ü73Ü73Ý84Þ95â88æ::è:;é9;ì8;î7;ó6:ó6:ï77ì87ç;7ß:4Õ8/Ï7*É7(Ç8(Æ9(Æ;(Æ:)Æ;(Ç:(Æ;(À8 Â>%½;!µ5\1c»:$ÉD1Í?3É0+ÿ^eÿVfÿIbþ;[ø2Võ1Yú7aóCgåZoªFNm32K2+@@6>C<>96>./J03J2.@9&BI'Xn=}\9b_\9b¸v§Ä\81ªÈ\88\9d¼\80\97¶}\93±{\81\9fmd\84RVw@Xz=]\80<a\87>h\8eCm\93Fl\94Kk\93Li\92Nj\91Nh\8dHe\8aDa\86Aa\86Ad\89Ff\8bHf\8aJd\88Hg\8bKg\8bKg\8bKe\8aGe\8aEd\8cEj\8fIk\93Jo\9bPo\9dRr U)/!)/!(.$).'-/*02/450782;=2=?4AD;GIDLPSSV_WXjY[t[Z|]\\86bb\94jk¤ttº}\7fÌ\86\86Þ\8a\8bè\8c\8cì\8b\8bí\88\88è\85\84á\80\80Ö\7f\80\7fÍ\81\81É\84\85Æ\83\87Æ\86\87È\89\88Ì\89\88Î\8a\87Î\8b\85Ë\8b\85Å\88\80»\87\7f°\84\80x\8f{s~tkljc]d^Rd_Ld_Kd^He]Hh]Gh^Ei_Fm_Dt_D~Z@\91XD«YKÇVNÜRPõRWþX\îUPãLEØ>6Õ7.Ù6-Û9.Ú:,Ö9(Ð7%Ð9&Ð9&Ñ8&Õ8)Ù5)Ü4+Ü5,Í1%È4&Æ9(Å>+Ã@,Á@+¾=(½8%Á8&Ê;+ãQBÜH:Ç5&É:*Æ:)Á5$Ê=+É<*Ê;*É:)Ë:)Ë8(Í7(Ï6(Ò6)Õ7+Ø8,Ö4)Ô0&Ø1(Þ7.æ;4÷CDñ8=í07í07ï/:í/9é1;é5>ã6:Û25Ø22ß:8îEB÷JF÷EAñ?;ç:6å97ä86á85à85à85à85à85ß74à85å99ç9:é9;é9;ë8;î7;ð69ï58í76è96ã:5Ü;3Ò8.Ê6*Æ8*Ã:(Â:*À;(À;*¿<(À;*À;(¼:$À@'¸:#²6\1e¸;'¿;,È91×==ÿ]fÿPcþ@Zù8Wõ7Yô;]ó?dãIeª?I\83?>];2E;/8>07?2E<7Q>:N0.Q9/VK5bjCv\8eZ\8c°p\9cÁ{ Å\7f\97ºz\99¸\7f\98\80\8cªxr\8e^WtDSq=\{@^~=b\86>h\8eCl\92Ek\93Ji\93Kh\91Mh\91Mf\8bFc\88Ba\86Ab\87Be\8aGg\8cIg\8bKf\8aJh\8cLi\8eKh\8dJe\8dGd\8cEf\8eEi\91Hl\96Lo\9bPo\9dRq\9fT-1",0",/&,/(-/*/1,25.36-8<.:>0?C5EH?KMJQRVUUaUVh\Yt^]}ed\8cnn yy·\83\83Ë\8b\8cÞ\90\90ê\8f\8eì\8e\8dë\8a\89æ\84\84Ü\80~Ñ~{Ê\7f\7f\80Ã\85\86Æ\86\88Å\8a\8aÈ\8b\8bÉ\8b\89È\8b\87Ä\89\84¾\8a\83·\88\7f¬\85\7fu\8ezo\7ftimne`h^Tb\L]`K]aJc^Hg\HkZFm[En\Fo^DwbGxY=\85S:¢UCÆWLàUP÷NQýOQâ><Ü=7Û81Ý6.ß7.ß7,Ý7+Ø6'Ó6%Ñ9$Ñ8&Ó8&×7)Û5)Þ3+Ü5,Ê4&Ä6(À8(À=+Á@-Á@-¿<*À8(Â4&ÛI<ÚF:ÓA4Ì=/Ã7(Â:*¾7$Å:'Å:'Ç:(È9(Ê9(Ê7'Ë5&Í4&Õ9,Ô6*Ö4)Ö2(Ú3*Þ6-ã;2è;5ï;<í49é06ì18í4<ì4<è7?ç<BÛ78à@@ìNK÷XTýZUøQKîC<ä71à72à72à72ß82à93á:4â:7ä;8á77ä88å99ç9:é9<é9<ë8<ì8;î68í57é56æ87á96Ø93Ï8/Æ6+Â8+¾;)½;+º=)¹<*¹<(¹<*¹<(·:$»A*²9$¯6!¶;+³1$Ã4.ëORÿZfÿJ]õ;Sï7Sñ@\ïHdæIdÍN_\8178d>3Q?1DA06=+48'>6+K9/E-!R=*e^A\7f\88]\91ªs\95¼{\95Ày\95Ày\91³w\9b·\84\98´\83\7f\9am\uKGb5Mi8[x@_}?c\84?h\8cBk\91Dj\92Ih\92Je\90If\8fKc\88Cc\87Ac\86Bd\87Cg\8cIi\8eKj\8eNj\8eNh\8fLi\90Mh\8fLf\8fIe\8fGg\91Gk\95Im\99Lr¡Ss¤Uu¦W13%04%/2'/2)/1,02-14+25*8<-:>->B1CG8HKBMOLQRVSS]XVd[Ynbb~mm\93ww«\82\82Â\8b\8bÕ\90\8eá\94\91ê\90\90è\8e\8bâ\87\85Ø\82\7fÌ\7f\7f|¿\7f\7f½\82\82¾\85\86¿\88\89Â\8a\89Â\8b\88½\88\84\85\7f­\83\84z\9c\7fu\8dxm}qflmb`k^Ui[Nb[I]aJ]aJc^Hg\HmZIqZHr\Gu]ErX?wR8\89S;ªYDÍ\NâSMïEFñ>AÚ1.Ù4.Þ5.á6.á5+à6)Ý5(Ù8&Ó6#Ñ9$Ñ8&Ñ8&×7)Ù5)Þ3+Ù7,È6'½8'»8&»:'½>+À?,Á<+Ä8)Æ4'èTHÑ=1Ë9,ÏA3½4$¿<*¿<*À9&Ä9&Å9(Ç:(È9)É8'Ë5'Í4&Ò6*Ó3'Ô1(Û4+â92ç?6ê?8ê=7ç55é58í6:í6;è38ã28á6<á<@ñVTûc`ÿmhÿhcòUPãA<Þ71Ý4/Þ71Ý60Þ71Þ71ß82á83ã:7æ:8ã77å78æ89ç9:é9<é9<ê7;ë6;î5:ì57é77å97Þ;6Ö<4Ì9/Â8+¼8)¹:)¶;)´=)³<(±<(³<(³<(±:&´?+¬9&«8%²:,«+"Â42û`fþTaøG[ï<Rë=VçH^áObÑN^³RYsG>WG7JC0ED/AD/;?(97";3\1e>2\1aOF)kkE\88\94f\95¬t\91´t\8c·r\8f¹w\9cº\84\9e¸\89\90§}k\81ZJ`:@V/Lc7Wr=_{@b\83>g\8bAj\90Ch\92Fe\91Fb\90Hc\8eGa\86Ac\87Ad\87Cf\89Eh\8dJk\90Mm\91Qk\92Qi\90Mi\90Mh\91Kg\91Ig\91Gi\93Gm\98Io\9bLu¤Vu¦Ww¨Y78(58'57*56.56056057,68*;>+<?*?C,DG4HJ<LMEOOMQQQVUSYY[``lhh\80tt\9a~~°\87\85Æ\8c\8aÓ\94\91à\92\91á\90\8dÚ\89\87Ð\83\80Ã\80\7f\7f\7f\7fµ\81\81·\84\84¸\88\86·\87\84¯\85\81¦\81z\9b\7fw\8f}t\87yozrfjm_\j\ShZMjZJf[Ia_Ja_Jd]Jh[Hl[Iq\Iu\Hz[G|V?\85S<\9aS?´WEÍSFÚG?â96â30Ü0,Ý4-â5/â5.á3*ß3'Ü6(Û:(Ò7#Ð:"Ï:$Ð9$Ô9'×7'Û5)Ö8,Ã:(¸9&´7#µ8$»<)Á>,Å<,Æ7)Ï8-ô\QÖ>3È4(ÍA2¸3"¶9%¼?+¿:)Ã:(Ä;+Æ:)É:,Ë9*Î7,Ï7*Ï2)Ò1'Ô1*Ý6.å<7ê?8è;7ä73ç85í;;ï;<é69â25ã68çCDëMLÿyuÿqlñ`[ÝJCÐ71Ð3,Û83ç@:Þ93Ý90ß80Þ7/à72â62ã75å76å78æ68ç7:è8;è8;è8;è7=é6:î7;ë78è88ä;8Þ<7Õ<4Ê<2À:.¸9*´;*°;)¯<)¬<(«<(«;'ª;'ª;'«>*¤9'¦8'ª8-ª/(Ê@@ÿgoôN\óHZíDWäGZØN]ÈS[¶SV\99XRcN=NM8JH3HF/FD+?B%=D#>H#KV.\g<v\82R\8a\98e\8f¤l\8d©n\8f²r\97¹}\9d·\87\91¦}s\87bPdA>O/AR0Mb9Vl;_{Ac\82?i\8bAj\90Cg\91Ee\91Fa\8fGb\8dFa\86Ad\87Cf\89Eh\8bGi\8eKk\90Mk\92Qm\94Sj\91Nj\93Oj\93Mi\93Kh\94Gj\96Gn\9aKo\9eNu¦Ws¦Wt§X<=+<=-<<0;=2;<4;<4;=0;>->A,@D+BF-FJ1IL9MOAPPHRRHWXJZZN^^\ffpnn\86yx \83\80µ\86\84Ã\8f\8cÑ\8e\8dÓ\8c\8bÏ\88\86Å\83\80¹|z¬zw¦yv¥zxªzz®\7f\81\81} ~z\95|t\89yq\80tjrpfem`Zj\QjZKl[Kl[Ik\Ih]Kf^Kh]Kj]Lm]Mq^Mx]L\80[I\91aM\99VE¦O>µJ:ÅA5Î7.×0(Ý0)à5.á6.â5.á3*à2'Ý3$Ü6&Ù:'Ð8!Í;"Ì<$Í;$Ñ:'Ô9'Ø6)Ò:,À=)³:%®5 °6!¹:'Â=,È:,Ê6*Ø>4÷ZQãI?Í9-Ì@1·6#«4\1e´='»:'¿7'À7'À7'Ä6(É7*Ë7+Ï7,Ù<3Û:2Ý:3ã<6ç>9é=9å84á40ç:6ê;8ê::æ87ê>>õOOÿccÿpmùhcâUNÇ<5¿0*É4.Ö;6ß=:à;7à;5ß;2à91à70â62ã62ä65å55ç79ç79è8;è8;è8;è8;ç6<ç7:ì8;ê88ç98ã;8Ü=7Ó?5É<2¿;.³8(¯:(¬<(ª;'¨;&¦<&¥;%¤;&£='\9f:&\9f:(\9f9*¡5)µ>8ÚTUúdmíKZîIZèI[ÛMYÇRX´VT\9fYQ\88aPOH5FN7KI2F@(;6\1948\15=N"Kg6j\8bTv\95\\83\9ab\88\9bc\8a\9bd\8f¢j\93¬r\97°y\83\95kn}\P_@<K.8G*AP1O_:Wj<b{Be\82Bi\8aCj\90Cg\91Ec\91F`\90F`\8eFa\89Cf\89Ej\8dIk\8eJj\8fLk\90Mj\91Pl\93Pk\94Pl\95Ol\96Nj\96Kj\96Im\99Jq\9eMr¡Pz«Zx«\x«\CB0AB2BC5BB8BB:BB8AC5@C0CG0DH-GJ-JM2MO7OQ<SQDUSD[[CY[C\]Oaa_hguqq\8dzy£~~²\84\83¿\85\83Â\85\84À\84\81¸}{¬wt\9fsn\96om\94om\9cqo tq\9eus\9aur\8fsp\83qkwoimlb`j`Wj\QjZKm\Jo\Ko]Iq\KpZLn[Mm]Nk^MlaOq`Nz_N\85[K\9e`Q¤PE­B8·;1Ä6,Ì2(Ô2'Ü4)à8/á6.á4-à4*à4(Ý6&Ø7%Ó8"Î9!Ê="É=$É=$Í<'Ð;'Ô8)Ï<,¿@-°;'©4 ¬3 ·8'Ã;-Ê:/Î5-×82íNHñTMÖB8ËA4½>-¦1\1d±<(¼=,¿:+¿7)À6)Ä6*È8-Ï;1Ô;3áD=ãA<ã@;å=:æ=:è<:ç98å84æ95æ93å84è<:ôJJÿ\[ÿdböb^Ë=9À71¼3+Ã81ÒB:ÝF?Ü=9×4/à;5ß;2á:2á81ã73å84æ66é77é69é69ê7;ê7;è7=è7=æ7<ç7:ë7:é77å76à;7Ú=8Ð=5Æ<1½;-±8'­:'©:'¦;'¤;&£:% :$\9f;$\9e=*\936$\99<*\999)\993'ÁPJìjlí[eëO\èLZÝIWÍKS·SQ¤\P\90cP~jRIM6CK4HB,E9!@7\18DI!Tp=g\93V}²n\81³n\82¥e|\91V\81\8eX\8d\97b\88\96a{\8b\WeAGT89F,6C)8E+=J.JX5Wh<d{Ef\83Cj\8bDk\91Fh\92Fc\91F`\90F`\8eEc\8bEi\8cHm\90Lm\90Lk\90Mj\8fLi\90Mj\91No\98Tp\99So\9aRn\9aOo\9bNo\9eNs¢Qw¦U|­\y¬]x«\GD3GD5GE8HF:HF:HF:FG9EF4FH2GI1KK1NN4PP8SR>VSDWTA[Z>[Z>ZYE^[Rdbgmj{vs\90|x\9d~{¦\80\84\82}¦|v\9ato\8dnj\85jf\81hd\85gf\88kh\87lj\82khyifoiceha[f]Tg[MgZIk\In]Ip_Kq_Kp^Jo\Mo\No\Mp]Nu^N|]K\86[K\91WI\9fVG¢F9ª:/·7,È8/Ñ7-Ø6+Ý6-Ý6-Ý5,Þ3)ß4*Þ6)Ý7)×8%Ñ6"Î9#Ì<$Ê<&Ê<&Í<'Ð:)Ò9)Î=,¾A-¯<'¨3\1fª3\1f¶9'À<-È</Ë7-Ì2*ßB;õ[SÝI?ÐD7ÈF6«2\1f·>+ÉE6ÌB5É?2Ê>1Í?3ÔA7ÛD;àF>á?:â=9á96à74á53â64å97å<9â?8Þ=5Û94Þ?9èMHèQJÐ@8¶)"¶-%¾5-È>4Ï@8Õ=8Ù<7á<:æ>;á96á:4á83ä84ä84æ95è96é99é77ê88è8:è8:è8;ç9;æ8:å79è58å55á77Ý97Ö=7Ì>4Á;0·<-­:(¨;'¥<'¢;( ;'\9e;&\9d:%\9a;'\97@,\8a5!\97>.\969*\96/&Í\Xöx{ßX_äXaÙQ[ÈKQ¶LN¨UO\9b`R\8ehS\80oUOV5?J(<<\1aB>\19TR)jvD\82¡e\93Â~\87¼t\85·p{\9d`k\82Js\7fO\81\88\t|SXb=;D'2<#4=(<E0<E09C*CQ0Uf<e|Hg\83Fk\8cGl\92Gh\92Fe\91Db\90Ga\8fFe\8cIj\8fLo\92Nn\93Nk\90Kg\8fIg\8fIh\92Jr\9cTq\9dRr\9eQo\9eNp\9fOr¡Pw¦UyªYu¥Yr¥Zr¢XQK;QK;QK=QK=QK=QK=QK=QK;TO<TO<UP=VQ>XS@YSCZTD[UEa\H`[G_YKaZPe][icgogtsj{wn\83yp\85|s\88}t\87yp\81rjyjboe]hb_h`_e^]b][\]YX^YU^ZQa[Od]Me]Jg\Hh\Fi]Gk\El\Ej^FicMqfTpYIsO?\8aVI\9c\P£YL©ZK¥N=¤E3¦;+°8(À8,Ï8/Ù40Û2-Ý6.Ý6-Þ7.Þ7.Û7+Ù7*×7)Ô7(Ô8)Ò9)Ñ:)Ñ:)Ñ:)Ñ9+Ò9+Í;,º;*µ=,®9'¦1\1fª2!µ:*À<-Â8+È5+Ì5,Ó;0ÚC8ÜJ=ÔH9Â=,¶1 ÜPCØJ@ÓE;ÔD;ÙF>ÞG@ÝC;ß=8ß63æ87ê;8é:7å84à72à93Ü=7×G>ÍC8Ä:/»3'·1%¹5(¾<.Ã?2À:.Ç=2Ò?7Ú@8à=8æ:8ê88ì89å78ä79ä88ä88ä86ä84ä84ä84à40á51â62ä84å97å97å99æ89é;<æ::ß99Û<9Õ@:ÌB8À@5µ?1¨:)¢;(\9f<'\9a;'\97;&\959$\948#\909%\8fB.\89<*\85/"\90/&ºMHânnälnÌUY¼KM´MNªQM¡TN\9bXO\96^Q\95aS\89iPVY,9L\146E\fQ`%{\8dO\99¯n\9e»x\9c½x\91´p~\9e_h\80LZm@WeAT]@HP8>C/9>*>C/<@18?/:C28D.?N1Rd>\t@f\82Eo\90Km\93Hi\92Fh\92Fg\92Jg\90Ji\90Ok\92Qn\93Pl\94Nk\93Lj\94Jk\95Il\98Ip\9dLn\9dLp Lq£Ns¥Pu¦Tx©Wzª^w¦bl\9aZb\8eOVO?VO?VO?VO?VO?VO?VO?VO?WP@WP@XQAYRB[TD\UE]VF]VFc\Jb[IaZJbZOd[Th^\lbcodhpekrgmtiotioqfllaef[_`XV]ZSYYOWWMWUIWSHXTH[UG\VFaZHc[Hc[Ff[Eh]Gi_Fj^FhaGbbJngTv\K~SC\99WKªXM®RG¶QE­G8¬C0«<)±9(½9,É90Ô72×4/Û7.Û7-Û7-Ú8-Ú8-Ø8,×7+Ô6*Õ7+Õ7+Ô8+Ô8+Ò9+Ò9+Ò9+Í;,½;+µ=,­8&¥2\1f¦3 ¯:(¹>,½;+Å9,Å5*É5)Ñ:/ÚF:ÞOAÝQ@ÜN@ÛG=×@9Ò;4Ò;4Ô=6Ø=8Û94Ü41ç77ë78í68ê65æ74â94á<6ÛB:ÉA5¾@2·9+°5&®5$±8'·>-¾@1Ä@1Ì@3Ö?6Ü=7ã:5é75î66ï79é6:æ8:æ8:å99å97ã:5ã:3ã:3á81â92ã:3ã:3ä;6ã:7ã:7â88ã9:à::Þ<:Ø?:ÐA;Ä?6·=0¬;+¢;*\9d<)\99=(\97<'\93;'\91:&\919%\8b:%\7f8$~:'\895*\9b=5½QNÕedÏ^`·MM«MK£SL\9cXO\97[P\96]R\95_S\97^S\8beN_^.Rf']r1y\8fN\97°l£¾{\97²o\86 _i\81G_v@Sf9IY5CP6?H58>059+9;-?B1=?28>0;A37C/?M3Od=]uCf\84Fp\91Ln\94Il\92Gj\93Gi\93Kh\91Kk\92Ql\93Tm\94Ql\94Nj\94Jj\94Hj\96Gl\99Hm\9dIm\9dGn Iq£Nu§Rw¨VvªXx¨^j\96W_\8bPV\82G[TD[TD[TD[TD[TD[TD[TD[TDZSCZSC[TD\UE]VF_XH_XH`YGd]Jc]Gc\Ic\Ld\Oe\Sf]Xg][h^\i_^j`_j`^h^\d[V`WR]VNYULVTHSQEQOBQMARO@TQBXRB\WD^WD_XEbZEe]Hg_Hj_IhbJbaLmfSx^O\86XK \S¯VP±JC¶E=·A7¸>1¶;,¸9*¼8+Â:,É;/Î:.Ö8,Ù7*Ú8+Ú8+Ú8+Ø8*×7)Ô7(Õ8)Ô8)Ô8)Ô8)Ò9)Ò9)Ò9)Í;,½>-´?.¬9&¡2\1e¡2\1e©9%³>*¹>,Ã>/Ä8+Â3%Ç3'Î</ÖG9ÛN=àNAØ93Ø42Ò3/Ó40Ù:6à<:å=<è:;ì8;í57ë35é24ç55å97á<8Ø?7¾8,³9*°6'¬4$­5$°8'µ<+»=.ÈD5ÍC6ÕA5Ü>5á:4å63ì65ï79ê69é69é69ç77æ95å:3å:3ã;2ã;2â;3ã<4á<6à;7ß:6Þ97Ý98Ü87Û=<Ú@>ÒA<È?7¹;/­7+¢7' ;)\9b<(\97<)\93<(\91:&\8f:%\8e7$\88:&z6!x5"\879,\9eF<¶SN¾VS¶PN©JF¢MH\9cSJ\98ZO\97_R\95aT\95aT\95_U\89eOrqEz\8dU\93¦n£¸\7fª¿\86\9c´zy\90XXo9?R$@R(AQ-=L/8D.4=,39-58-9;-?B1<>17=/:@27C/>L2Od=^vDh\86Hr\93Np\96Kn\94Il\95Il\96Nj\93Mm\94Qn\95Ro\97Qm\95Nk\95Kj\94Hk\97Hm\9aIm\9dIm\9dIp Lt£Rx©Wx©Xt¥Vp\9fW]\89JU~DNw=`YI`YI`YI`YI`YI`YI`YI`YI^WG^WG_XH`YIaZJb[Kb[Kc\Jd^Hd^Fe_Ie^Ke^Le]Pd\Qd[Rg^Ug^Uf]Tf]Te]Rd\Qc[Na[M\XLXVITREPN?OL=OL=QN=RO>UR?XS@ZUA]XD`[Gb]Gf`JfaKcbNkdRt]O\87[P§b[µZU¶FD¹<8Á<7Å:3Ä:0Â8-½8)¼;(½>+Ä?,Ñ9+Ø8*Ù7*Ù9+Ø8*Ö9*Õ8)Ô8)Ô8)Ô8)Ô8)Ò9)Ò9)Ò9)Ò9)Í<+¾?.´?.ª:&¡4\1f\9c3\1d¢8"¬>'´?+»>,¿:+Â6'Å6(É7*Ì:-Ì=-Ò:/Ý54Þ22Ú00Û32Þ97ä<;é==ë;=ë7:ê37é05æ23å57á85Ù53Î70¶4'®6&¬7&«6%«8%¬9&±9(³:)ÃA1ÉA3ÓA4Ú@6à;5ä84ê65í76ì57ê67ê67é75ç83æ93å:2ã;2à90Þ:1Þ;4Þ;6Ý;6Ú;7Ù:7×98Õ;9Ô@<ÒC=ÇA8º<0¬6*£5&\9d6%\9a;'\97<)\93<(\90;&\8d;%\8b9$\8a8#\858$\80=*v5!\7f6'\97E9©OGªMF¦KF¥PI\9bQH\97UI\93[N\92^P\92aS\95aT\96`V\8bfS\88\86_\98¨w­½\8e¦¸\88\90¡tr\85WN`6.@\18,=\192A"8F,:F09B17=/9<1;=29:,>A0;=06<.:@26B.=K1Nc<`xFi\87Is\94Or\98Mp\96Ko\98Ln\98Pm\97Op\98Rp\98Rp\98Qn\96Mk\95Ik\96Gl\98In\9bJn\9dLo\9eMs¢Qx§Wz«Zv§Xl\9cPd\93KZ\84ER{AMv<b[Kb[Kb[Kb[Kb[Kb[Kb[Kb[KaZJb[Kb[Kc\Lc\Ld]Me^Ne^Ld^Fe_Gf`HgaKhaNg`Mf_Mf_OibRhaQg`Ng`Nf_Lf_LgaKfaMa^M^[LXUFSP?OL;NK:LK9ML:ON:PO;RQ=UT@XWCZYD]\G^]IbaOf_OlVH\85[Oªja½d^¿MLÇABÏ;;Ó97Ñ83Ë6/Á9+¹<(´B*»C*Ì;(Õ8'Ø8(Ö9(Ö9(Ö9(Õ8'Ô9'Ô9'Ò9'Ò9'Ò9'Ò9'Ñ:'Ñ:'Ë<+Á?/´?.ª;( 7"\995\1d\997\1e¢<%¬B,±<(¸;)Á9+Ç9-Ë9,Í9-Ð<0Ø;2è8:ë49æ37â46á46ß56à35á35è59è38ç48æ68ã9:Û75Ï1.À0(´6(­:(«:(«:(©:&©:&¬9&­8&·:(À<-Í?3×@7ß>6ã<6è96ë76í76í76í76ë84ê84è:3ç:3ä<3Þ:1Þ;2Ý<4Û>7Ù>9×>9×=;Ó=<Î@<ÉB<ÅB:¹=3¬8+£5(\9c6'\9a;)\96;(\91<(\8e<'\8c;&\88:$\868$\876#\838#\82A-r3!x3#\93G9¢RG NC\9cND VK\96VJ\92XJ\8eZL\8d\N\8f]R\93_T\97aW\8egV\8d\89f\96¥z\9bª\81\7f\8fh\lHDS22A$$2\19,:#.;'2=-7?0:@4;>3:<199-89+=@/;=05;-9?15A-=K1Mb;`xFj\88Jt\95Ps\99Nr\98Mp\99Mo\99Qn\98Pp\9aRq\9bQp\9aPn\98Lm\97Km\98Io\9bLq\9dNq Pt£Sx§W{ª\y§\p\9eUb\92HX\87A]\87HU~DPy?d]Md]Md]Md]Md]Md]Md]Md]Md]Md]Md]Me^Ne^Nf_Of_Of_Mf`JgaIhbJhbLicMicMhaNhaNhaNhbLgaKf`Hf`HgaGhbHhbJe`L`]J[XEVS@QN;MJ9IH6HG5KJ6JL7KM8LO<OR?QTARUBSVCXYI]WIbPBzXL g^µe^ÃUTÖQRÙ@BÝ:;Û76Ô70Ç;.»>*°D(³A&É;'Ó8&Ô9'Õ:(Õ:(Õ:(Ô9'Ò9'Ò9'Ò9'Ò9'Ñ:'Ñ:'Ñ:'Ñ:'Ë<+À>.³>-ª;( :$\977\1e\946\1c\99;!¦B*±C,¸?,¿;,Â6)Å3&Ë4)Ò;0ß=8è59í4:ë6;è:<å;<ã;;á;;à::ß58à67â9<à<=Û=<Ð85Ã2-µ/&¯:)ª=)ª=)¨=)¨=)¦<&§:%¨8$­5$·8'Ä<.Ï<2×=5Ý<4ã<6è;7ë84í74í74ë83ê93ç:3æ;3ã<3á>5Þ@7ÛA9ÙB;ÖA;Ô@<Ñ@=ÌA<Á@:º@5³=3©9- 6(\9a6&\969'\95<*\90;'\8d<'\8a<(\87:&\849$\838#\836$\7f6#{:&q2 |9(\94O?£YL\9cRE\95OC\98VH\94ZL\90[M\8c[M\8c[M\8d[P\92^S\98_V\8egV}wWx\84^p|XSa@9F*.<#/<(0=,1=/2<15=29?5>A8?A6;;/78*78(<?.:</5;-8>04@,<J0La:`xFj\88Jt\95Ps\99Nr\98Mq\9aNp\9aRo\99Qq\9bQq\9bOq\9bOo\9aKn\99Jo\9aKr\9eOu¡Rw¦Vx§Yz©[w¥Zq\9fVf\94L[\8aBV\83@_\88LW\80FR{Ae^Ne^Ne^Ne^Ne^Ne^Ne^Ne^Ne^Ne^Nf_Of_Of_Og`Pg`Pg`NibOicMhbLhaNhaNhaNhaNhaNgaKgaKgaKf`Hf`FgbEgbEgaGf`Jc^J`[G\WCUS>PM:KJ6IH4FG5FI6FI6GK:HL;IM<GN<JN?NPBUQEXO@hRD\81ZK\96VJ¯RKÓYVÛIIà@@Þ88Ù72Î;1Á@-±B'±>#È;'Ð7%Ñ8&Ò9'Ó:(Ó:(Ò9'Ñ:'Ñ:'Ñ:'Ñ:'Ñ:'Ñ:'Ð;'Ð;'Ë<+¿=/´<.«<)£='\97\8f5\e\939\1e @'­C-¶A/¼=,À6)Â/%Æ/&Ð6.Ý:5ç48í5=ì;Aé@CäABßA@Û@>Ù?=Ì22Ï53Ò:9Ð<:Ç<7½81´5,«5)§<*¤=*¥>+¤@)¤@)¤>(¥<'§:%ª7$°7&º8*Â8+Ë8.Ó:2Û<6ã>8è94ê93ê93è:3ç:3æ;1ã<3à>3àB7ÜB8×C9ÒB9ÎA:È?9Ä=9¿>8°;2§;.¡7*\9c6(\977'\949'\90;'\8c;(\89<(\88=(\84;(\83:'\809%\7f8$\7f6%}6$v3"w6$\85B2\97TD\9cXK\94PC\90PD\94YK\92ZM\8f[M\8f[N\90\O\92\R\95\S\97\V\8dcUkbCV`;IS1<G)4@(2>*4?15?44>56@8<C;AG=DG<BD6=>.;:(78(<?.9;.4:,7=/4@,;I/La:`xFi\87It\95Ps\99Nr\98Mq\9aNq\9bSp\9aPp\9cOp\9cMp\9cMn\9bJn\9bJp\9cMt Qx¤W~ª]~ª_x¦]o\9dUd\91L\\89D[\88C\\89H`\89MY\80IRyBg`Pg`Pg`Pg`Pg`Pg`Pg`Pg`Pf_Of_Of_Of_Og`Pg`Pg`Pg`PkdTjcSibRg`Nf_Mf_Mf_Mf_Lg`MgaKgaKgaIgaGgaGgaGf`FgaIf`Jd^H`[E\WCUS>ON:JL7EF4DG4CG6BI7BI9AJ9BK:CJ:HL>PQCRPAXM;dK7sD4\95I<ÁXR×QNÞDBÞ:9Û75Ô;3Ê>/¸>)´7!È:&Ï8%Ð9(Ð;'Ò;*Ñ<(Ñ:)Ð;'Ñ:)Ð;'Ñ:)Ð;'Ð:)Ð;'Ð:)Ë<+¿;.µ;.­<*¤>(\98:!\8e4\1a\928\1e\9e@&¡8"¯<)¾?.Æ</Ê7-Ï6.Ø;4â><ë>@î?DéCEâDCÕ@<É:4¿4/¸1+·0*º50½94º;4°91¨8-£9, :+\9e=*\9e?+ ?,\9f@* @* @*¢?*¤>(¨;'­:(²7(·5'¿5*È:0Ó>7ßB;ä=5ç<4ç<4å=4ä=4â>4à@4ÝA5ÛC8ÖC9ÑC9ÊA7Ã>7¼;5¶93¯:1¢7-\987'\925&\927%\91:)\8e;)\89;'\849&\86=*\84=)\81=(\7f;(}:'{8%{7$z5%w2"~9)\8cG8\95RB\92PB\8aK<\8fQD\99_Q\90XK\8fZL\92\P\95\Q\96]T\96[S\96YT\8a^QaX9EM&5?\1c7B$=G/:F23>0-7,/905?6@F<EK?GI;AD1>=);:&67%;>-9;.4:,7=/4@,;I/K`9_wEi\87Is\94Os\99Nr\98Mq\9aNq\9bSp\9aPp\9cMp\9dLo\9cKn\9bJn\9bJq\9dNv¢Uz¦[\82®c\7fªbv¤\h\95PZ\87DV\83@\\89Fe\8fOc\8aQY\80IRyBhaQhaQhaQhaQhaQhaQhaQhaQg`Pg`Pg`Pg`Pg`Pg`Pg`Pg_Rh`Uh_Vh_Vh`Uh`Uh`Sh`ShaQhaOhaNhaNhaNhbLhbLhbLhbLg_He_Ge_Ic^Ha\HZXCRQ=KM8HI7DG4@D3=D4>E5>G6>F7=E6EL<HL;AF2JI4[Q8aE/\81J6½j\Üg^àUPâGEãA>ß@:Õ>5É=0Æ=-Æ5$Ê4#Ì6'Ê7%Í7(Ì9'Ð:+Ð=+Ñ;,Ï<*Ñ;,Ñ;*Ñ;,Ñ;*Ñ;,Ì=-º2&¶8,°<-¥:(\9a7"\915\1c\937\1e\9c9"¬B,±<*¸6(À3)Ê6,Õ<4áD=çHDçCDæFHÛCBÉ:6º5.´8.®8.¦4)©9-§8-£9,\9e8*\9a8+\96:+\91;*\91;*\96=+\96>*\99>+\98@*\9a?*\9b@+\9dA, @* ;'¤9'¨7'®6&µ7)½9-Ä;1Ë;2Ú=4Þ=3à?5âA7àB7ÛA5Ø@3Ô@4×H:ÐF9Æ@5»;0°5-©2*¤1*\9e3)\999-\92;*\90:+\8c9'\889(\87:(\84;(\83<*~:'|9&z9%z9'z9'z9'w6$w4$w- \8a@3\97OA\93N?\8eL>\91RC\93UH\8dRD\97[P\97[Q\90TL\90TL\97ZU\94WR\93VQ\93hX\S2HP'AK&@K)>H-5A+1<+3>.1<.EPBX^PU\JLO:CG.@@&<<$9:(<?.:</7=/9?12>*9G-Nc<bzHj\88Js\94Oq\97Lp\96Kp\99Mp\9aRp\9aPp\9dLo\9fKo\9fKo\9eMp\9fNs¢Rz¦Y~ª_\82­ew¢[i\94O_\89G\\86D`\8aJd\8eNg\91Rc\8aSZ\81LSzEhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQh`Si`Yi`[i`[i`Yi`Yi`WiaViaTibRibPibRibPibPibPibPibOh`Kg_Hf`Je_Ic^J^YEUR?ON:IJ8EH5AE4>E5>E5>G6>F7=F5?H7=F3=G/FL2MI.S?&}P9»raÉcUÞ_XéUQåGDß@<ß@<Ø?9Í9/Í9+Í<+Î<-Î=,Í;,Ì;*Í9+Í:*Î:,Î;+Î:,Í:*Ï9+Ï9*Ï9+Ì:-É?5ÄA7¼B5®=-\9d6#\952\1d\952\e\9b2\1d¥4"±6&Á;/ÐB8ÝF=äJBèKDèKFÝB@ÚDCÍB=»;2¯9-©=0£?/\9d=-\9d@/\9a>/\96?.\93=.\8d>-\8a?,\84@-\86?+\8d<)\91;*\91<(\92=)\93>*\94?+\96?+\97?+\9d@.\9f>-¢;*¦8)©8*±8-´:-¼:-É;1Ï;1Ò>4ÕA5ÕC6ÔE7ÒD8ÎD7ÇA5Â@2¹=1¯9-§7,¡5+\9d5,\997,\91;,\8b<+\89<*\88;)\86;(\83:)\81=*\80=*|;'y:(y:(x9'x9(v9't7%v4$}3&\90D7\97OA\91L=\8cJ<\8ePA\91SF\8fQF\92RI\97WN\95TN\96WP\9b\W\93VQ\8dTM\89bQ]W3Xc8^i?ZfBGU46C'4@(<H4LXDWcO]fQT\EHN4AE*=@#;;!8:%;>-9;.7=/9?12>*:H.Nc<bzHk\89Kt\95Pr\98Mq\97Lp\99Mp\9aRo\9bNp\9fNo\9fIn\9eJn\9dLq Pu¤V|¨]~©a{¦_o\9aUa\8bI\\86D_\89Ic\8dMd\8eNb\8cMb\89RY\80KRyDhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQh`Ui`[i_]i_]i`[i`Yi`WiaViaTiaTibRiaTibRibRibRiaTibRjbOiaLh`KgaKe`La\HYVCSR>KL:GJ7CF5@D3?F6?F6>E5<E4;G35A+>H0GK2D>$U@%\85[Cµr_³VGØcYîe_ëSPåGFéGEæDBØ;6Ë7+È9)É:,É:*È9+Ç8(È6)Ç5&Ê8+Ê8)Ê8+Ê8)Ë7+Ë7)Ë7+Ê7-Á2*¾5/¶6-¬3(¡0 \9d/\1e\9f1 ¦3!»@1ÇC7ÔG=àKDæMGçJEåFBÞC?ÖB>ÎC>Á@:±;1£<-\9eA0\9aE1\96E2\93E1\90C1\8eC0\88A/\84A.\7fA,|B.~@+\84;*\889(\89:)\89:)\8a<(\8b=)\8d<)\8f<*\95@,\96=+\98;*\9b:*\9e8)£9+¦:-«:,¸:.¼:-À<0Â>2Ä@3Ä@3ÃA3ÁB3µ:+¯9+ª9+£7*\9d7+\997,\968,\92:.\8b<-\88<,\85<+\83:)\82;)\7f:*~;*~=+|;)z;*y:)w:(u7(r7'q6&t5&\86<1\93F<\95MA\8dI<\88H<\8cNA\91SH\91QG\91NF\98SL\97TN\97VP\99\W\91ZS\8cZS\8dlY\80~X}\8a\~\8b_ixOJX45E!;J+L[>cqWboU[eLMV;CI-?D&=@!:="79$:=,8:-7=/:@23?+:H.Mb;bzHk\89Ku\96Qs\99Nr\98Mp\99Mp\9aRo\9bNr¡Pn Il\9eIn\9fMt£Sy¨Zz¨_z¨`o\9aUd\8eL[\84B[\84Bc\8cJh\91Od\8dK^\86Hb\87QY~JRwChaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQh`Ui`[i_]i_]i`[i`Yi`WiaViaTiaTibRibRiaTiaTiaTiaViaTkcPjbMjbMjbOhaNd_K_ZGYVCPO=KL:GH8CF5AE4AE6?C4<C1<H27C+DI2KG.M;#oL6\98dO§^M @2ÅSIçc^ï`\ëSRéKLèEHßA@Ë80Å9*Å7+Å7)Æ8,É:,Ê:/Ê;-Ð=3Ð>1Ñ>4Ñ?2Ò>4Ò>2Ó?5Ò?7Ó?;ÑB>ËD>ÅE<ÀF9ÁI;ÇM@ÎPDØRGÝPGáLEãJDãFAáD?àA=ÚA<ÔE?ÈC<º?7ª</\9f>.\98C/\95G3\91H5\8dF2\8aF3\88D1\83B0~A.{@.xA-z@,\7f:*\848*\859+\859+\86:*\86:*\86:*\87;+\88;)\8b:)\8c9)\908*\93:*\97;,\9a=.¡=.¨9.«9.®9/¯;.°:,¯9+®8*¬8)§6&¤6'\9e7(\9a6'\947(\908*\90:-\8d;-\87;+\83<*\82:+\7f:*~9)}:)|;)|:*z;*z;*x:+t9)r7'p7&p7&t6'\89C7\91I=\8fK>\88I:\86H;\8bPB\93UJ\97TK\95PI\9bTN\97RM\94SM\95\U\8f_U\8fg]\95\7fj\92\94m\83\93dr\82UXi=BS)>N'O_:csOdsRZiJLY;AL.<E(=C'<@%;=%78&9<+79,6<.;A34@,:H.La:ayGj\88Jt\95Ps\99Nr\98Mq\9aNq\9bSo\9bPq Om\9fJm\9eLr£Ry¨Z{©^w¥]r\9fZa\8bI\\86D[\84B^\87Ee\8eLh\91Od\8dK_\87Ha\86PX}IQvBhaQhaQhaQhaQhaQhaQhaQhaQibRibRibRibRibRibRibRiaTjaZja\jaZjaXjbWjbUjcSjcQjcQjcQjcQjcSjbUjbUjbWjbUlcRkcPkcPkbQjcQgbOb]J]ZGURAQP>LK9GH6EF4BE4@C2=B.<J1=G,KG.S>)d>+\93ZI«_R\9a>3\9e3+¶?7×XRñjfõedéSTäIMçNPØIAÐF9Ì?5Ê>1Í@6ÒD8ÔF<ÕG;ÚJAÚJ?ÚJAÛK@ÝJBÞKAÞKCßJCéTPçSQãTPÜSM×RK×RKÚTKßTMÝMEáIDãEBâC@áB>âC?âE@ßGBØIEÉD?¹>7«<1\9f?1\96C1\92E3\8fH4\89E2\88C3\86A1\83@0~?.|>/y>.{=.\7f9-\828+\82:,\82:,\80;,\81<-\81<,\81<,\819*\829*\859)\87:*\89:+\8a;,\8e=,\92<-\98:.\9b9,\9e9-\9f9+ 9*¢8*¢8(¡7'\9e7&\9b7'\977'\937(\8f9*\8b:)\89:+\87;-\83;,\80;+\7f:+}8)}8){8(z8(z8*x9*y:+x:-t9+q6(o5'q7)t9+\8bI;\8cJ<\88J;\84I9\85K=\8cRD\92VK\97WN\96QL\9aUP\97SP\92UP\91`Y\88bW\82hY\86zbmsOZi>IX-AR&HY-Wi?dvLi{SXjDL\8=L+8E':D+<D,;@,9<)78(8;*68+6<.<B45A-9G-J_8^vDh\86Hs\94Os\99Nr\98Mq\9aNq\9bSo\9bPn\9dMm\9eLp¡Ov§V|ª_y§^p\9dXg\94QY\83A[\85E`\89Gc\8cJg\8eKg\8eKe\8cId\8bL`\85OW|IPuBhaQhaQhaQhaQhaQhaQhaQhaQibRibRibRibRibRibRibRiaTjaXjaXjbWjbUjcSjcQjcPjcPjdNjdNjcPjcQjcSjbUjbUjbUlcRkbQkbQkbQkdRibPf_Mc^K\VFVSBQN=LK9IH6GF4DC1?B/:H.?H+NB*`=*\83E:«XP´NJ\9c,(²;7¹>9ÒROñpküvuñefêY\î^^âUNÙODÑG=ÍC8ÑD;ÔG=ÖG?ÖH>ÙIAÙI@ÚJBÚJAÝJCÞKCÞKDàKEáGGàFFÜHFØGDÖHDÕGC×FAÚEAÝB>ãA?æBAèBBæB@âC?ßB=ÙA<ÚIFÉB>¹<6¬=2¢@3\97A0\8fB0\8dD3\89A2\86A1\86>0\85=/\80</\7f=/}=1\7f=1\80:0\80:0\80:0\7f;.\80<1\7f=/\7f=/\7f=-\7f=/\7f=-\7f<,\80;+\7f:+\7f:*\808)\818)\89:-\8d9.\90:-\92:,\97;,\99<+\9d=-\9d>,\988(\969(\929)\8d:(\89:)\86:*\83:+\82:+\7f:+~9*}8)|7({6'z7'z6)y7)u6'v8)w9,s8*o5'm5&q9,v<.\8aL?\86K;\84K:\81L:\84Q@\8bVH\91WL\96VM\93NI\99TO\96UQ\93\U\8fd[z^PdWD`^EEO,>N'>O%J\2^qDi\7fQcyKVl>M_5@R,6E$5D':F.<E28>06:,79+9<+68+6<.<B45A-7E+F[4Yq?d\82Dp\91Lq\97Lr\98Mr\9bOr\9cTp\9cQm\9cLn\9fNs¤Sx©Zz¨_s¡Yg\94Q]\8aGX\82B\\86Fc\8cJf\8fMf\8dJe\8dGe\8dGf\8dL_\84NV{HOtAhaQhaQhaQhaQhaQhaQhaQhaQibRibRibRibRibRibRibRibRjbUjbUjcSjcQjcPjdNjdLjdLjdLjdLjdNjdNjcQjcSjbUjbUlcTkbSjaRkbSlcTjcShaQf_OaZH\WDVQ>OL9LI6IF3FC0AC.:G+@F*U@+wF7¢OI²HH´7;¸36ÈBCÃ>?ÊJIßb^ïrpînmæabâZZÚQKÔKAÎE=ÌC9ÏD=ÐF<ÐC<Í@7ÑB<ÒC;ÓB=ÔD<×C?ØE>ØD@ÚEAÜ@AÝADÝCCÜFEßIHßIHâHFäFEæBCé@CëABëABæ@@á?=Ù>9Ô<7ÚFDÈ=:¹83®<2¦@4\98?/\90?.\8d@0\89=/\88<.\88:.\869/\8691\84:1\83:3\84;4\80:2\7f;2\7f;2~<0~;2|<0|<0|=.{=0{=.{=.{<+z;,y:)z8(y7'\7f9-\82:.\859,\879,\8c:,\91;,\93<+\95<*\918(\909(\8d:(\8a;*\87;+\83<*\80;+~;*~9*\7f7)~6({6'z4(y5(y5*x6*s3't6)v8-r6+n4(m5(s;.x@1\89QB\83N<\80M<\80Q?\85VF\88WH\8dTI\91RI\92OI\96SM\91TO\8e\S\87eYl[INL5DJ.@N-JZ6WgB_qIezObyKUm=E\.AV+5J#/@ 4B(;G3;C67<57:39;.:=,68+6<.<B44@,6D*CX1Um;`~@m\8eIp\96Kq\97Lr\9bOr\9cTp\9cQn\9fPo£Qr¥Vt§Zq¡Wi\98P_\8cIY\86E]\87G_\89Ib\8bId\8dKf\8dJe\8dGd\8cEc\8aG^\84KUzGNs@haQhaQhaQhaQhaQhaQhaQhaQjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdRkdQkeOkeOkeMkeMkeMkeMkeOkdQkdRkdTkdTkdTnbTmaSl`RkbSlcTlcTibRg`Pd]M^YFXS@SN;OJ6LG3ID0CC+>G*DD([B,\88TF­]V¨>>ª/2ËHMÄ?B½;=º:9ÃFDØ[YâecÛYYËGEÐIEÎE?ÌA<ÎC<ÑF?ÒG@ÐC<É?5ÎC<ÏD=ÑD=ÓD>ÕD?ØDBÚDCÜDCÞ?CÞ@AÞBCßEEàFFßECßA@Þ>>çACè@@ç=>å==ã==â@>áD?ßFAÖB@Å:7¶5/¯:1¦@4\97>0\8f=/\8b?1\85<-\85;.\869/\8691\8691\8781\8894\87:4\8292\7f;2\7f;0\7f;0~<0};/{;/{<-w9,w9*x:+y;,y;,y;,y;,z;,};/}9.~8,\7f7)\826(\846)\867(\867&\889*\889*\87:*\85<+\81<,\80=,~<,};+|8+{7*{5)y5(x4'w5)w5)u5)p2%s5(s7,q7+m5(n6)r=/xC5\88UD\82Q@\7fP@\82SC\88WI\8bUI\8cRG\8dNE\94SM\93TM\88RH\83YM}cRc[DGK0<I+HW6YjFezScxOYnCQh<Mb7I^3:L&/@\1e+:\1d3?'<E4<B6:=69<5:</9=.59+6<.<B46?,5B(DT0Si:azAm\8bKp\94Nq\97Nr\9aQr\9cRq\9dRq\9fTs£Wu¥[r¡Yl\9aRc\90K]\87EY\83Cb\8cL`\88I_\88Fa\8aHf\8dJg\8fIc\8bE^\85D^\84KTyFMr?h_Pi`Qi`Qi`QjaRjaRjaRkbSjaRjaRjaRjaRjaRjaRjaRjaRjcSjcSjcSjcQjcQjcQjcQjcQkdRkdRkdRkdRkdTkdTkdTlcTk^Np`QqdTpdTlcTi`Qh`ShbRgaQebOa^KYWBVQ;TO9OI1GC(JF)I?$bJ2\91hV´xmºme·YW¹OOµCCºBCÁCDÆFEÌGHÐJIÑKJÓKKÎDBÏCBÓECÔFBÓF?ÐC<ÎD:ÎF:ÇC7ÇE8ÊE<ÌF=ÒD@ÖBBÙ@CÛ?CàAEàBCáCDßDBàECàECáFDãEBâC@äB@ãA?ã?=â@=â@=àA=ÜC>ÒC=Ä?8µ91¨8-\9f:.\95=/\8c>1\84?0\81?1\7f?3\80>2\80<1\83:1\8691\8881\8781\85;0\83;-\83;-\81<-\80;,\80;,\7f<,\7f<,~:-~:-};-};-};-};-};-};/{9-|8-|8-}7+~8,~8,~8,~9*}7+}7+|8+{9+z8*x9*x9*v8)x8,v8+w7+u7*t6)s5*s5*q5*k1%p6*n4(k3&o7*j5'n9+}I;\83SE\83SG\84RG\87QG\8bPH\8fPI\91PJ\92QK\92SL\8aTJ\86ZM\7fbPm^GVU9KV4M^:j\7fXaxNYpFSj@Qf=Mb;GX4BQ06C%2?#0:"3;&;?.?A3??3<>339+2:+39+5;-7>.9A,;C,;F(Q`9_rDn\87Pr\90Rq\94Pq\99Rr\9cRr\9eSu\9eX}¦b}¦dp\99Wb\8bI]\86D]\85F\\84E^\86Ga\88Id\8bLe\8cMe\8cKb\89H_\86E]\84E^\81KSuBKm;h_Pi`Qi`Qi`QjaRjaRjaRkbSjaRjaRjaRjaRjaRjaRjaRjaRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTlcTqaRqaQobRpdTpgXohXlfXgdUgdUkhWmjWjhShcMc_F[U=RL2PK.F?#P@'kP;\7fXG\83OB\86F<\92E?°WS¶TQºQN½PM¿NJÀMJÂLHÃLHÏSQÇGFÁ=;Ä=:ÎC@ÑF?ÌB8Æ=3ÈD7ÈF9ÊF:ÍG>ÓEAÖDDÛBEÝAEÞBEàBCáCBßDBàECßECàEAáFBßD@ßD@àC>ßB=ÞA<ÞA<àA=ÜC=ÒE<ÇB9º>4«;/\9f:.\93;-\89=/\81>.\7f@1|A3}?2\7f=1\81;1\8691\8881\888/\86:-\84;,\83;,\83;,\82:+\82:+\80;,\7f:+\7f:+\7f:+~:-~:-~:-~:-};/};/|8-|8-|8-|8-{9-{9-|:.z:.z:.z:.y9-x:-x:-w9,w9,w9,t8-t8-s7,s7,r6+p6*p6*o5)j2%o7*m5(k3&l7)j5'n9+}I<\83SG\83SI\86QI\8bPJ\8fPK\93OL\94QK\92SL\89NF\83SG\7f[KzdMqjPhkLcqNfxR]tJUnDOe>Ka:J^9J[7FU6BQ4;E,6@(3;&6;';>-?@0>?1;=03;.1<.4:.5;-9=.;@,<A+;D)Q[9^mDk\81Pp\8cRo\92Pp\98Qs\9dSr\9eSw\9e[{¢cx\9f`k\92S`\87H]\84E]\84E\\83D_\86Ga\88Ic\8aKd\8bLd\8bLb\89J_\86G]\83F\\7fIQs@Ik9g`PhaQhaQhaQibRibRibRjcSibRibRibRibRibRibRibRibRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTlcTpcSo_Pk]Pl`RndXogZkeYeaUfbVom^zwh~{j\7fzgzuaojVcaJRU:DG,@>%LA+SA-S8']7*l>1n8.t8.~;3\87A9\91H?\9bQH¤WM¬YQ»^WºSN·GCºC?ÅCAÏEBÑC?Î?9ÏB9ÐC:ÏE;ÓF?ÕF@×FCÚDCÜCEÞBCÞBCßCDÞDDÞDBÞFCßECÞFCÝE@ÜD?ÛD=ÚC<ÚC<ÚC<ÜC=ÙD=ÔE=ÌF=ÁB9²=3¡9.\918*\879,\81<-\7f@1~@1~?0\7f=/\81;/\84:/\879/\879/\84:-\83;,\83;,\82:+\82:+\82:+\7f:+\7f:+~:-~:-~:-~:-};/};/};/};/{8/{8/{8/{8/{8/{8/y9/y9/z:0y;0y;0x:/x:/v:/u9.u9.t8.s7-r8-q7,p6+p6+o5*n5*j1&o6+j4(i3'l6*i3'm7+}G;\86RG\86RG\8aQH\8cQI\91RK\92SL\93TM\91VN\89WN\86\P~^OsaKoiQnsUkvVevTPd?I_9DX3BV1BV3FW7ET7DR8?I0:D,6>)7<(9=,;>-;=/8<.5=22<16<26<09=.:>-<A+:C(MW5Yh?f|Kl\88Nm\90Np\98Qt\9eRt Uz¡^w\9e_n\95Vb\89J\\83D[\82C\\83DZ\81B_\86G`\87Hb\89Jc\8aKc\8aKa\88I^\85F]\83FX}GMr?Di6g`PhaQhaQhaQibRibRibRjcSibRibRibRibRibRibRibRibRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTlcTqdToaTl`Ri_SiaTjdXieZhfZig[wui\88\84x\90\8d~\95\8f\81\92\8c|\88\83p{zf^cLLT<CG0DF0FD/E=*L<,UB3O8(R6(T4'V4(\6)`8,d<0m=1\8aLA\9cRI­VOµOK»ECÃAAÐDC×GFÑ@;Ô@<ÔD<ÕE=ÙEAÙEAÛFBÝEDÝCCÝCCÞDDÞDDÝEBÝEBÝEBÛFBÛF@ÙF?ØE=×D<×D<×D<×D<ÕE<ÔD<ÐF<ÈE;ºA6¦</\958)\8b9+\84<-\81?/\7f@1~?0\7f=/\81;/\84:-\879/\879-\84;,\83;,\82:+\82:+\82:+\819*\7f:+\7f:+~:-~:-~:-~:-};/};/};/};/{8/{8/{8/{8/{8/x8.x8.w9.y;0y;0y;0v:/v:/u9.u9.u9.s7-s7-q7,p6+p6+o5*m4)m4)j1&m7+j4(h2&k5)h2&k5){E9\88OF\8aOG\8cQI\8eRJ\90TL\90UM\90WN\8bYN\88^R\83bSv_MiZGc^HdhO\fKN]@EU8@Q1<L/;K.>N1BP6ES9GS;@L4>G29B-7?*7>,7>,8<-4:,5=23=46;46<29=/:>-;@*9B'IS1Ud;bxGi\85Km\90Nr\9aSv Tv¢Wz¡^q\98Yd\8bL[\82CY\80A[\82C\\83DZ\81B^\85F_\86Ga\88Ia\88Ia\88I_\86G]\84E\\82GW|HLq>Ch5g`PhaQhaQhaQibRibRibRjcSibRibRibRibRibRibRibRibRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTlcTrfXsgYqg[ldYhaWieZrnezwn\80}v\8d\8d\85\9f\9c\93§¥\99ª¦\9b¨¤\98¢\9c\8e\98\95\86x{hbgQMR<EJ4CH4@E1AD1DG4KL:HI7ED2A>-@:,?7*@6*F4&R5'oC8\8bPH\9eOJ­IG½FHÊEHÑBDÕAAÖ@?ØC?ÙD@ÚE?ÚE?ÜD?ÜDAÞDDÞDDÝCCÜDCÜDCÜDCÚEAÙEAÙF?ÖF>ÕF>ÔE=ÒE;ÒE;ÓF<ÔF<Ó@8ÓC;ËE:¿C7­?2\9c:-\91;,\89=-\83>.\81?/~?.\7f=-\80=-\83;,\86:-\86:,\83:+\82:+\82:+\82:+\7f:+\7f:+~9*~9*~:-~:-};/};/};/};/};/};/z:0y9/y9/y9/x8.w9.v8-v8-x:/v:/v:/u9.u9.t:.s9-s9-q7,q7,p6+p6+n5*m4)l3(l3(g1%l6*i3'f2%i5(f2%i5(|C8\8aND\8dNE\8fPI\8fSK\8eUL\8cXM\89YO\83[OyYLt]MiZG\UBYXCY^GNX@?K39G.7E,4B+4B+7E.<H2@L6CO9@L6=I59E19B/7@-5>+4=*2:+3=42<45:35;18;09=.:?+9B'GQ/Ra8_uDh\84Jo\92Pu\9dVx¢Vw£Xx\9f^k\91T]\83FW}@Y\7fB\\82E\\82E[\81D^\84G^\84G_\85H_\85H_\85H^\84G]\83F\\82GV{GKo?Bf6g`PhaQhaQhaQibRibRibRjcSibRibRibRibRibRibRibRibRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdTkbSndXnf[jcYhd[pmf\83\80y\90\8f\8a¤£\9f²±¬ÁÀ»ÈžÇÄ»ÄÀ·¿¸®¸²¦¢\9c\8e\85\82qedROP>DI5<E08D.8E18E17D07D28C3;C4>D8BE:GE9<4'M:,d?6~E>¡PO¿XYÊQVÉDGÒFGÖFFÙECÚFBÝEBÝE@ÝD?ÜC>ÞDDÞDDÜDCÜDCÜDCÛCBÙD@ØD@ÙEAÖF>ÔE=ÒE<ÐF;ÐF;ÏG;ÓF<Ó>7Õ@9ÎD:ÄD9³A6¤>0\95<,\8b<+\85>,\82?.\80>.\7f>,\80=,\81<,\84;,\84;,\82:+\82:+\82:+\819*\7f:+~9*~9*}:*~:-~:-};/};/};/};/};/{;/z:0x:/y9/w9.w9.v8-u7,s7,u9.t:.t8-s9-s9-q9,r8,r8,p6+p6+p6+n5*m4)l3(l3(i3'g1%k7*h4'f2%h4'e1$h4'{B7\8dMD\91NF\91PJ\8eSK\8bWL\87XN\80ZMy\Ns\Lk[K_XFUT@PS@JR=@I64@,3<+1:)09(.9(0;*3>-7B19D3=H7<H4<H4:F28D04A-2>*0;+0:10943824927:18<.9=,8@(CL-O^7]sDh\83Lp\93Sv\9eWx¢Vw¡Wp\97Xc\89LW}BV|?Y\7fD[\81D[\81F[\81D]\83H]\83F^\84I^\84G]\83H\\82E\\82G[\81HUzGJn>@d6f`PgaQgaQgaQhbRhbRhbRicShbRhbRhbRhbRhbRhbRhbRhbRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdTiaTicWjcYkg^spi\85\84\7f\9e\9d\99¯°«ÁÁ¿ÑÑÏààÞæåáæãÞáÞÙÛÖÐ×ÎÇÌ»±¶¤\96\96\86wvm\_ZGKM8>F/;D/=J6<I5;F5;C4;>3:;3983880<>1A=1L8/_81\86IH¯^]Å`dÈWYÍQSÑOO×MKÙKIÞIEßFAáC@áB?ßCDÞDFÝCEÝCEÜBBÛCBÛCBØC?ÙEAÖE@ÔE=ÒE<ÐF<ÐF<ÏF<ÒE;×@9×@7ÑC9ÈD8ºD8«A3\98<-\8b:)\86=,\83?,\80?-\7f>,\80=,\81=*\83<*\83;,\82:+\80;,\7f:+\7f:+~9*~9*}9,}9,~:/};/};/};/{;1{;1{;1{;1y:1w;1x90u9/t8.s7-s7-q7,r8-q8-r8-p7,p7,n8,o6+o6+o6-o6-n5,k5+j4*j4*i3)h4)f2'k7,h4)c1&e3(b0%e3(zA8\90ME\92MF\91PJ\8dTK\87WM\7fYLwZLo\Mk^N]XERQ?KN;BI79B/2;*08)06*06,06*.6).6'/7(2:+4<-9D4:E4<I7<I7:G35D/2?+0=,-7/-6116027058/7:/9=.8@)?H+KY5[qBg\82Kp\93Sv\9eXv Vs\9dUg\8dP]\80FUx@Wz@[~F[~D[~F]\80F_\82J_\82H_\82J^\81G^\81I]\80F]\80H]\80JSwGGk=>b6f`PgaQgaQgaQhbRhbRhbRicShbRhbRhbRhbRhbRhbRhbRhbRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkcVoi]kg\lh_spi\84\83~\9f \9b¼¼ºÍÏÎÍÏÎÞàßñññøøöø÷õöòïðëèíâÜæÐÅÛÁ´Á¬\9b \91~}u`^\EJN7AI1@J2@I4@G5BD7AA7B=7B:7>;67=3=@5B71H/*c74\8eRQ³ggÆnm¿[[ÆYVÍVRÕQMÛMKàHEäEBåBCßCDÝDFÜCEÝCEÜBBÜBBÛAAÚBAÙD@ØD@ÕD?ÓD<ÑD;ÐF<ÏF<ÒE;ÛB<Ù@8ÒB9ÊD9¿E8­A4\9a:*\896$\88<,\83?,\81>-\7f>,\80=*\80=*\81=*\81=*\80;,\7f:+\7f:+\7f:+~9*}:*}9,|8+};/};/};/};/{;1{;1{;1z<1w;1v<1v:0t:/t8.r8-q7,p7,p7,p7,p7,m7+m7+m7+l6*l6*m7-l6,l6,k5+j4*h4)h4)g3(f2'i7,e3(c1&e3(a/$e3(wA7\8eMG\91NH\8eRJ\8aUM\83YMzZMq[Mh\LWTCHI9?C2=D49B108)/7(6<047047058117-06,/7*08+19,6A38E4<I7=L9:I46E02A,0>-*5-,50/4.16/4707:/9=.8@+<E*IW4YoAf\81Lp\92Uu\9cYt\9dWo\98T`\86IX{CRu=VyAZ}EY|DY|D[~F^\81I^\81I^\81I^\81I]\80H]\80H]\80H\~KStGEh>>^5icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSibRjcSjcSjcSkdTkdTkdTleUleUleUleUleUkdTkdTkdTjdVhdYee]ttl\91\92\8c®¯ªÃÅÂÙÛÚéíîñõöôø÷ûýüÿÿýÿÿýýüøúöóûòë÷áÔòØÇÞɴŵ\9e©\9f\84\88\84gbbFEH-DH/BF/FE1GD5E<3C60D52F;9>?:>A:B:7G83bFC\90jgÄ\93\8f符Ñ\8a\84Çtn¿^WÅTNÔPNÞLLçGIêGJÝDFÞIKÚDEÔ;=Ø>@àFHßEEÕ;;Ù??ÙA>×B>ÖB>ÓB=ÑB<ÏB9Ð@7ÜC=Ú@8Ò?7É@6½A5®@3\9d<,\8e8'\8a=-\86?-\82=-\80=,~=)\7f<)\7f<)\80<)\7f:+~9*}9,}9,|8+|8+|8-z8,{9-{9-y9/y9/y9/z:0z:1y:1w=2v=2v<1s:/s9.q8-p7,m7+m7+m7+m7+l8+l8+l8+l8+l8+g3(k7,o;0n:/j6+g3(f2'e3(c1&h6+c1&]-!_/#^."b2&q?4\8bOG\8dPK\87PI\81RJzXLu^PeXHSM=BE2=D29B14?/2=-3;.2:-39/68357257227016/06,.6+.6)-8*0=,6C19H5:I45G11C-0>-(4*)2--2,.3,25.58-8<-8@+6?$DR/WlAg\82Or\93Zv\9d\r\9bWj\93QX~CVyCSv@Sv@VyCY|FY|FX{E]\80J`\83M`\83M\\7fI[~H]\80J_\82L]\7fMRrIDd?9W3icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSibRjcSjcSjcSkdTkdTkdTleUleUleUleUleUleUleUleUjdVee]noi\85\86\81£¥ À¿ÕÙØéíîõûûöúû÷ûüùýüýÿüþþüÿþúÿüùÿûóÿðàúêÑìÞÄ×αÀ»\9d¤£\84\80\84cflJLQ3FI.CC+GB/H>2G:2J84J<9>:7CB>NIF\RPyje£\8e\89Ͳ«çżÿ×Î벧Í\83zÀc\ÉXT×RSÞIKÚADÔDDÓEDØHGÜJJÚFFÓ=>Õ=<ÛAAØ>>Ø@?ÖA=ÖA=ÕA=ÒA<ÐA9ÑA9ÛB<Ù@8ÑA8ÊA7¾B8°@4\9e</\908*\8b<-\86?-\82=-\80=,~=+~=)\7f<)\7f<+\7f:+~9*}9,}9,|8+|8+{9-z8,|:.|:.z:0z:0z:0z:0z:1y:1v<1t;0t;0p:.q8-n8,m7+k7*l6*k7*k7*i8*k7*i8*i8*i8*j6+l8-n:/n:/k7,f4)e3(d2'b0%c3'^."]-!b2&]/"_1$o?5\7fJB\86QK\86WQ}WNqUJdRDPI9>?/9@.5@/3@/2?.2=/3;.4:069268368557246116/16//7,/7,-8*/;-4A07F39H56H23E/3A0,8.,6.-2,-2+03*36+6:+6>)6>&DR1VkBh\82Ss\94]v\9c_p\98Yf\8eOV|CUxBRu?Ru?UxBWzDX{EWzDZ}G]\80J^\81K[~HZ}G\\7fI]\80J[{LPnJD_@7R3gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSibRjcSjcSjcSkdTkdTkdTleUleUleUleUleUleUleUleUieYde_y{x\97\99\96²¶µËÑÑãééóøû÷ÿÿûÿÿûÿÿûÿþüþûþÿúÿÿúÿÿúÿÿôýûäùøÚïðÑàäÃÑ׳½Å\9e\9e©\81\87\92j^hEPW6CG,DC.HE4LD7J@7H?8C;8QLIia_\7fwt\9c\92\90½²¬ØÎÅéÛÐüéÛÿôçÿäÙï«¢Áfa´DCÆEIÙSTÚVTÎMHÉC@ËDAÑFCÕEDÕCCØBCÖ>=Ö>=Õ?>Ö@?ÕA=ÓB=ÑB<ÒB:ØA:×@9ÑB:ÊD;¿D<°A6¡<0\92:,\8b<-\87>/\82=.\80=,~=+~=+~=+~=+~;+}9,}9,}9,{9-{9-{9-z8,{;1{;1{;1{;1z;2z;2y:1w;1s:1q;1p:0n:/n8.l8-k7,h6+k7,i7,i7,h8,i7,h8,h8,h8,k90k90j8/j8/j8/i7.e3*b2(c3)`1'[,"_0&c4*Y-"\0%pD9}PJ\7fWO}XPoSH^J?OC7?<-46(1:)0;+0=,1=/2<14<15;169268368368338227027008-08--8*.:,2?.4C07F38G46G48F52>20:1/4-,2(-0'03(37(4;)6>'DQ3XlGk\84Zv\96dw\9ddl\94X_\87KUxBTtBRr@Rr@TtBVvDVvDVvDWwE[{I\|JZzHZzH]}K[{IXwKNgG?W=1I1gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSibRjcSjcSjcSkdTkdTkdTleUleUleUleUleUleUmfVmfVjfZikf\82\88\88£§¨¹¿¿ÍÕ×åíïòúüôüþùÿÿùÿÿúÿüúÿùüÿøýþöÿÿõÿÿó÷ýãóüÝîøÖåñÍÝéÃÎÚ²µÁ\99 ¬\84}\87bfmKLS4DH/HJ5KI:GE9D@7OGDia^\8a\82\80¢\9a\97·¯¬ËÆÀÝÚÑéåÚùóçÿüïÿ÷ìÿÝÕú·±å\90\8dÇcc®@?ÁPJÈSJÇPHÂG@ÇF@ÒMHÕJGÐ@?Ï>;Ò><Ó?=Ô@>ÓB=ÓB=ÒC=ÒA<Ô?9ÔA:ÑD;ÊE<¾E<°A8 >3\94:/\8b</\87=0\82=.\80=-~<,~=+~<,~<,~:-}9,}9,}9,{9-{9-{9-z8,|<2|<2{;1{;1z;2y:1y:1w;1q8/n:/m9.l8-k7,h6+h6+g5*i7,h8,h8,h8,h8,g9,h8,h8,k;1i7.g5,h6-j8/h8.d4*`0&c4*`1'].$`1'`4)V*\1f^2'vND~\SuXPgNGWC:H<0@:.:;-7;,/7(.9)0;-2=/4<15;169058/69249249238138119.19.19,-8*.9+/<+2?.5B07F39H5:H78D64?117+,2&,/$-1#15&18&4<%ER8]pPq\8ac{\9blv\9bhe\8cWT{DQs@Qq?Pp>Pp>Qq?SsASsATtBUuCYyG[{IZzH[{I]}KYyGVsGH_C:M9,?,gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSibRjcSjcSjcSkdTkdTkdTleUkdTleUleUleUmfVmfVngWkg\pro\85\8d\8f¤©¬·¿ÁÌÔ×ãíïñûüóýþ÷ÿÿøÿþúÿúúÿøûþóùûîøùëöùèõÿçóÿäðýßíøØèóÑÞèÅÊÒ­¶¾\99\9b£~{\82aX^BGL5FK7DK9@F8@B7b]W\85~x«¡\9fÀ¸µÊ¿ÕÐÌäáÚîîæùöíûôêþðåÿóéÿôìÿåß騤¶ic¥K@²PC¿YKÇ[OÃQG¾E=Á@:ÊE@Ê@=ÌA>ÏA=ÐB>ÐB>ÑC?ÐC<ÑB<Ò?8ÒB:ÏD=ÇG>»D<­A7\9f=4\94<2\8b;0\87=2\82<0\80</~<.~<,~<.~<.~:-}9,|:.|:.{9-{9-y9/x8.|<2|<2z;2z;2y:1y:1x92v:2n8.k9.j8-i7,i7,h6+g5*f6*g7+f8+f8+f8+f8+d8+f8+f8+j:0g7-e5+e5+h8.h8.d4*`1'a2(b3)\0%\0%\0%V*\1fa7+zVJqXQ_NFL?6@6,<6*:8,9;.9=/19,2:-4</4</5;/69.58-47.39/2:/2:/2:/19.19,19,/:,-8*-8(.9)/<+2?.5B18E4:G6;F67B24:,/5'.2$.2$04%/6$19$FR:buWv\8ej{\9aqq\95g\\82QJp=Mo=Nn=Oo>Oo>Oo>Oo>Pp?Qq@TtCXxGZzI[{J]}L]}LWwFQmDAT>3C6&6)gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdShbRjcSjcSjcSkdTkdTkdTleUkdTleUleUmfVmfVngWohXlh]jnmz\82\85\93\9b\9e«µ·ÃÍÏÚåçë÷÷òþüóþúõÿúùÿùùÿöúþð÷ûìõöæñôáóüçóüçóûäóùßñõÚéìÍ×Ö·Ää°¯\91\8d\8dqdfNMP;DK9EN=EPBIQF{{q\9e\9a\91Ľ·×ÎÉÝÓÑåÛÙðëçú÷òïîéûûóÿÿöÿþóÿøîÿóéÿæÝÿ×Ë×\92\82·dR¢K8±TC½WI´E:¶@6ÈLDÄC=ÈC>ÊC=ÍD>ÍD>ÍD>ÌC;ÍB;ÐA;ÑB<ÌE?ÄE>¶A:©>6\9d<5\95<4\8b;2\87=2\82<0\80</~<.~<.~<.~<.~:-}9,|:.|:.{9-{9-y9/x8.{;1{;1y:1y:1x90w8/w81t91l8-j8-j8-i7,i7,g7+g7+g7+f8+f8+f8+f8+d8+d8+d8+d8+h8.f6,e5+f6,g7-g7-f7-d5+a2(d5+^2'[/$`4)`4)g=1tTIUG>C?695,86*99/79,48*37)4:.4:.4:.4:.58-47,46+36+28,19,19,08+08+08+.9+.9+.9)-8(-8(.9)/<+2?.4A06C2:E48C28?/4;+37)15'04%-4$07%HT>dw[t\8cls\91ke\88^RwKBh9Ij;Ll;Mm<Mm<Ll;Ll;Mm<Nn=TtCXxGZzI[{J]}L\|KSsBLf?:K8.;1#.&feSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSgdShbRjcSjcSjcSkdTkdTkdTleUkdTkdTleUmfVngWohXohXmi^fjiluz\84\8d\92¡¬°½ÈÌÒÝßäððïûùòýùóþöøÿ÷ùÿôûÿðùýìøùçö÷åõöèö÷éùöçûöãüôáöëÕæ×ÀÔƬ½±\99\9b\93|tmZXWENPBQWKYcZcmb\95\98\8d±±¥ÓÏÆçÞÙñãâøèèÿññÿöõÿýúüû÷÷úóöùîúüïÿÿóÿÿñÿûêÿåÐîª\93ºoZ§VC¬SAµQB¸L@¿JAÂG?ÅF?ÈE=ÉF>ÉD=ÉD=ÈC<ÈB9ÐC<ÏD=ÊE>¿C;³>7¥:2\9b:3\94=4\8b;2\87=4\82<2\80<1~<0~<0~<0~<0};/|:.|:.|:.{9-{9-y9/x8.z:1z:1x90x90w81v70s7/r7/l8-j8-i9-h8,h8,h8,h8,f8+f8+f8+d8+d8+d8+d8+d8+d8+f6,g6/h70h70g80g80i:2k<4d8/i=4b6-`4+nC:vKBsH?kMCB9047.25,7:/8;247,14)25*58-47,37)37)35(35(46)37)/7(-8(-8(-8(-8(-8(-8(-8(.9).9)-8(-8(.9)/:*0;+1<+7C/7C/:A/9@.9=.59*15&,3#18&IU?cu[m\84ge\83_WzRHmD>c7Gg8Li9Nk;Nk;Li9Kh8Mj:Ol<UrBXuE[xH\yI^{K\yIQn>F`95C2)4, )$feSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSgdShbRicSicUjbUkcVkcVkdTleUkdTkdRkeUlfVmgYnh\mi^jidjpplvx\81\8a\8f¤®°ÂÌÎÔÞàãíîñûúóü÷öýö÷þöùÿóüÿòûÿðüÿîüýíúøìýùîÿùíÿúêÿøèÿòßîßÈÝη¾²\9a\9f\97\80zua`_KVZK\dWkwk|\86{¦¬ ½¿´ÙÖÍìåßøíëÿòòÿóóüòóý÷÷ùúõøý÷úÿùõÿôóûîõýîÿÿñÿùèÿôãü˺º\7fo\9aRC§TF´TH°D8¾I?ÃG=ÇG>ÉF<ÈE=ÇD<ÆC;ÅB8ÌF;ÌH<ÆH<¹C9ª>2\9f:0\95;2\90>3\89<2\84>4\81=4\80<1\7f;0\7f;0\80:0\7f;0};/|:.|:.|:.{9-{9-y9/x8.z:1y90x90w8/v7.u6-r6.q6.l8-i9-i9-i9-i9-h8,g9,g9,e7*e7*e7*e7*e7*e7*e7*e6,f5.j81l:3k:3i9/i:0l=3nB7kA5mE9c=2b>2xVJ\85cWwWLbLA<902:/2:/5=24:0.4*06*6<025*25*04&04&04&15'37)28*.6),7),7),7),7)-8*-8*-8*.9+.9+-8*-8*,7)-8*-8*-8(4?.6A0;D3<E4;B26=-07',3#2;(JVBbqZg{`]vVOmIEe@@`9Ed8Kh:Mj<Mj<Kh:Jg9Kh:Nk=TqCWtFYvH[xJ]zNZwKMj>BZ81?2'0-\1f(%heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVgdSheVhdXjdXkdZkeYldWmfVe`MjeQnkXmk\hfZed_qqo\80\81\83\88\90\92\95\9f ª´¶ÁÉË×Üßèîîó÷øøúùüþûýÿúýÿùüÿöúýòøûðùýïúþðøúïøúïøøìûùêþüçøöÝèäÇÔÓµ»º\9c\98\99zptY]eMbkVq~l\83\91\82\90\9c\90´¹²ËÌÆãâÝïîé÷óðû÷ôüøõû÷ôÿþúþÿúýÿúýÿúýÿùýÿùýÿùýÿùùûöÿÿúÿüöÿêäר  `V\99E;³ND¿MBÂF<ÄD9ÊH;ÎKAÎKAÉI>ÆH:ÅH6ÂI6ºJ6±H5¥F4\9aC2\90C3\8bC5\84B4\81B3\80@4\80>2\81;1\839.\858.\8390~:/}:1|90{8/x8.w7-v6,v6,u7,v8-v8-w9.t8-r6+p4*m4)j8-g8.g8.g8.f7-f7-g7-f6,f6,f6,h8.h8.h8.g7-e5+e3*g2,j5/l7/k90i9-i;.i=0hA2eA1iJ8dI8u^N|kY\88xh\8b~nQK=79,3;.2:-2:-19,19,19,19,17+06*06*06*/5)/5)/5)-5(.6+.6+.6+.6+.6+.6+.6+.6+.6+.6+-5*-5*-5*-5*.6+,6+0:/2>26@58C58C57B24?/3>-3?+DQ=WeN[kQPcGDW9@U6@X6Ic>Ie=Jf=Ie<He9If:Kh<Mj>SpDWtHZvM\xP\xRVrLFa>9P6$1($,.!)+heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVfeSgeVhdXhdYkd\kdZldYlfVidPjhQlkWjk[fh]jli{\7f\82\8e\93\99¨°³¸ÂÃÎÖØßçéïóôøüýÿÿÿÿÿýýüøþýùþÿùýþöúýôøûòöüðöüðöùîöùî÷ùë÷úçøúäñôÙßâÃÌЯ´¸\97\91\96virUXbG_kUt\81m\8b\99\88\9b§\9b¼ÁºÒÓÎçèãòóî÷øóúûöûü÷úûöþÿúþÿúþÿúþÿúþÿúþÿúþÿúúÿþôÿÿóÿÿûÿþÿüúÿîèïÀ¸Á~u\9eL@®L?¹K>ÂL@ÅK>ÁE9»?3¾@4ÁF7ÂG5ÁJ4»L8±J7£F4\98B1\90D4\8bF7\83D5\81C6\80@6\80=4\80<1\83:1\8390\8290}:1{;1z:0y9/w9.v8-v8-u7,s7,s7,t8-t8-r8,q7+o5)m4)j8-h8.h8.g8.g7-g7-g7-g7-c3)d4*e5+g7-h8.i9/j8/j8/i70i70k90j:.j</i>.hA0gD1fG3jQ;fQ>ufQ~vc\8a\85q\84\83qIL;39+2:-2:-19,19,08+08+08+08+/7*/7*/7*.6).6).6)-5(-4,-4,-4,-4,-4,-4,-4,-4,.5-.5--4,,3+,3+-4,.5-,6--7..:01=34@65A56B45B14A05B0BO;P^GQ_HHV=AO5BP6EU8Ia?Ie?Ke@Ie=Hb;Fb9Hc:Hd;RmDVrJ[uN[wQ[tTRmNB[=4J5$1*$,/"*-heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVfeSgeVhdXhdYkd\kdZkeYlfVmhTkiRkjVijZjlauwt\8e\92\95§¬²¾ÆÉÒÜÞêòôõýÿüÿÿüÿÿÿÿÿþþüýüøÿþúÿÿúýþöøûòõøíñ÷ëñ÷ëóöëôøêõøçô÷âôöÞìïÔÛܽÆɪ®±\92\92\97yuy`kpYt{i\88\91\80\9d¨\9a¬¶«ÌÏÈÞßÚïðë÷øóûü÷ýþùþÿúüýøþÿúþÿúþÿúþÿúþÿúþÿúþÿúýÿüùÿÿùÿÿýÿþÿüùÿúôÿ÷íýÑÄ×\9f\90\92M=£RA¨K:¥?0·G9ÎZKÏUH¼A2ÃD5ÅG8ÃK=¸H:©C5\9d?3\95A6\91D:\87A9\84A8\80@7~?6~>5}=4}=4}=4z;2w;1v<1u;0u;0t:/r9.r9.q8-q8-o9-o9-n8,m7+l6*k5)l8-j8/j8/h8.i7.h6-h6-h6-e5+e5+e5+f6,g7-h9/j:0j;1k<4i:2i:0h</i?1iB1iD2eF2eJ5jV>iXDujT\85~k\91\8fz~\7fmCF528*19,19,08+08+/7*/7*/7*08+/7*/7*/7*.6).6).6)-5(-4,-4,-4,-4,-4,-4,-4,-4,.5--4,,3+,3+,3+,3+-4,,6-*4+*6,,8./;12>24@26C27D37D2?L8ES<BP9;I08F-=K2CS8I^?Hb=Kc?Jd=Ha:E_8F_8E_8QjCVpI\tP\vSZrRNgI=T8.A-%0*$,."*,heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVfeSgeVhdXhdYkd\kdZkeYlfVkiTkkSlkWkn]nqf~\83\7f\9e¢¥¹¾ÄÄÌÏÛåçóûýùÿÿúþÿúþýüüüúúøþýùÿþùþÿ÷úüñô÷ìîñæèîâçíßíñâïóâñôáðóÞðòÚèëÐØؼÇÇ«±±\95\9e¡\86\90\92|\90\93\80\9b\9f\90©­\9f¶¼²¿Ä½ÛÝØéêåö÷òûü÷üýøþÿúþÿúüýøþÿúþÿúþÿúþÿúþÿúþÿúþÿúþþüúúúÿÿÿÿþÿõñîûôìÿýñÿûíÿôäë°¶\82m\93P= O<µXGµN?´D6ÀH:À@3ÇE8ÅI?¼F<®?6¡<4\98>6\95B<\8a?:\85@;\81@:|@8z?9x?6x?8x?6v=4u<1s=3s=1r<2r<0p<1p</o;0o;.l:/l;-k9.j9+i7,i7,l7/l7/l7/l7/k6.i7.h6-h6-k;1j:0h8.f7-e6,d8-e9.f:/j?6f>4c=0e@0hC3iF3eF2aF1aK4hV>i]GrjS\85\83n\8d\8fyor_9=,17)08+08+08+/7*/7*/7*.6)08+/7*/7*/7*.6).6).6)-5(-4,-4,-4,-4,-4,-4,-4,-4,-4,,3+,3++2*+2*,3+,3++5,*4+)5+)5++7--9-0<03?15B15B19F4;H47E.2@)1?&7E,=M3DY:E];J_>Ia=J`<F^:H^:F^:RhDWoK`uT^vVZnRKbF9M4(9'$/)#+-!)+heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVgdSheVhdXhdYkd\kdZkeYlfVjhSjjRmlXnq`svk\83\88\84¢§ª¼ÃÉÍ×Ùåïñùÿÿùÿÿùýþúþýÿÿÿýýûÿÿûÿÿúüýõ÷ùîîñææêÜàæØÞåÕæêÙéîÚìïÚìðÙìîÖèèÎÚØ¿ËÉ°¿½¦¶´\9f±®\9bµ³¤¾¾²ÈÈÀÑÒÍÙÚÕèéäñòíúûöüýøüýøþÿúþÿúüýøþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿþúÿýýÿûþþúùúûöüÿøüÿöþÿóÿÿíÿþêõßÈÄ\9b\87\9bbN\93J7¤M:´P@»K=¾@4ÅB:ÅF?¾C<±>9¥96\9d97\98=:\91=;\8a?<\83?<|?:w@;tB9qB:qB8p>5r>3r=5r>3p>5o=2o=4o=2m=3m=1k<2j</i:0h:-h9/i9/n70p70o6/m6/m6/k6.i7.i7.k;1i:0h9/d8-c9-d:.e;/d<0cA5bB5bB3bE3cF4cH3aH2]I1]M4bV<iaJrnU\82\84n\83\88qYaL29'08)08+08+08+/7*/7*/7*.6)08+/7*/7*/7*.6).6).6)-5(,3+,3+,3+,3+,3+,3+,3+,3+,3++2*+2**1)*1)+2*+2**4++5,*6,)5+)5+*6*,8,/;-1>-0=,3@.5B03@,0=)/=&3A*6F,=O5?S7EX<H]>I\>I^=J]=J_>SfFZoPbuY`tYYkSI\F5G1$5%"-'!*) )(heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVgdSheVhdXhdYkd\kdZkeYlfVigRjjRlnYnq`pvj\80\86\82\9c¤¦·¾ÄÕßáí÷ùùÿÿùÿÿøüýüÿÿÿÿÿýþùÿÿúÿÿ÷úüñóõèéíßâæ×ÜãÓÛâÐãèÒæëÔéíÖéëÓëëÓèæÍÜÚÃÒÍ·Ò͹ÌƶÉõÍɾÖÑËÞÛÖéåäïîìòóîøùôýþùüýøüýøþÿúþÿúûü÷þÿúþÿúþÿúþÿúþÿúþÿúþÿúÿýúÿûúÿ÷øÿýüþÿýøÿûòÿ÷îÿòôÿõïöäÿÿìÿíØ˧\91¢kW¡ZFªXC­L;¸D7¿C9ÀE=»D<³@;ª=:¢:7\9a;9\94<;\8c><\85?=}@;wB:rC9oD;oE9o?5p>5p>5p>5o?5o?5o?5o?5n?5m>4j>3i=2h<1h<1h<1k;1n70q60p70o6/m6/l7/i7.h8.f7-d8-d:.b:.d<0d>1e?2cB3^B4^G7bK9dN9aL7`L4]K3\L3]Q7`Y=lhOssY\80\84mt|dEN92>*19*19,19,08+08+/7*/7*/7*08+/7*/7*/7*.6).6).6)-5(,3+,3+,3+,3+,3+,3+,3+,3++2*+2**1)*1)*1)*1)+2*+2*,6-*6,)5+(4*)5)*6*+7+-9+,8*/<+2?.3@.3@.2?+2?+3A*6E.8J0>P6BU9EX<GZ<J]?L_AReG[nRbtZ_qYVhRFWD2C0#1"#.("+* )(heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVgdSheVjdXjcYkd\kdZkeYlfVljUkkSjmXjn]kqey\7f{\94\9c\9e­¶»ÑÛÝéóõùÿÿ÷ÿÿöúûüÿÿÿÿÿøùôÿÿúþþöøúïðòåèìÞãçØßæÖßçÒäêÐæìÐèìÑçéÑèèÐæäÍàÛÇ×оÙÒÂØÐÃÜÓÊåÜ×íãáòéêùðñüø÷úùõýþùÿÿûýþùüýøÿÿûÿÿûüýøþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿýúÿø÷ÿùøÿþýüÿýõÿýëþøðÿýñÿûõÿøñøèÿüêÿûèôιªwb\8eP9©[E±M=¸J;·I<µI=´G@¬C=¤>9\99:4\95<8\8e=9\88?9\7f@9xB8rD7oE9oE9o?5p>7p>7p>7o>7o>7p?8p?8pA9o@8k?6j>5i=4i=4j>5m<5n70q60p70p70m6/l7/i9/g8.c9-a9-b</b>0d@2bA2aA2^C2WD3]N;eVAfW@bS<[O5[O5\R7\W:ZY;mmSrv[y\81icmT1?(5B.0;+2:-2:-19,19,08+08+08+08+/7*/7*/7*.6).6).6)-5(,3+,3+,3+,3+,3+,3+,3+,3++2**1))0()0()0()0(*1)+2*+5-*4,*4+*4+*4++5*,6+,7),7).9)2=-5@07B26A05@/3@,0?*4C,9H1=M3@P6DT9HX=K[@RbG[kQapY^mXSbODRA1?.!/"%0*$-*"+(heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVgdSheVjdXjcYkd\kdZkeYjgVmlWkmUilWelZem`qzu\8d\97\98§°µÊÔÖâìîõýÿôüþ÷ûüüÿÿÿÿýøùôÿþùýýó÷ùìïñãèìÝåéØãêØåíÖæìÐèïÐèíÏæéÎææÎåãÎáÚÈØÑÁ×ÍÁÜÒÉéÞÚøíëÿóõÿõöÿôøþøøþýûÿÿûÿÿûþÿúýþùÿÿûÿÿûýþùþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿþúÿþúÿþúüû÷øüûøÿÿôÿÿðÿÿëþúïþ÷ûÿøÿÿóÿõåÿòÞÿãÌ×­\95¨pW¦XB¬Q>«N<¬O>¯OA¬L@¡C9\99<4\94=4\8e>5\88?6\80@6zA6sC5pE5oE7o?5p>7p>7p>7q?8p?8p?8p?8rA:pA9n?7k?6l=5j>5k?6n=6o81p70n70m80j8/i9/h9/e;/d<0c?1bA2aA2_B2]B1[@/VA.SF3ZT>f^Gg`F`Y?YR6XS6[W:XW9WX9imRqw[u}eUbH%3\1c6C/1<,3;.2:-2:-19,19,19,19,08+/7*/7*/7*.6).6).6)-5(+2*+2*+2*+2*+2*+2*+2*+2**1)*1))0()0()0()0(*1)*1)(2*)3+)3**4++5,,6-,6+,6+,6+.9+2=/6A18C59D47B25@/.;)0?*4C.7F/;J3?O5DT:HX>QaGYhQ_nY[jWP^MAO@.<-!-#(1,&/,#,)heVheVheVheVgdUgdUgdUgdUifWifWifWifWifWifWifWifWjdTkeWkeYkdZle]le[jfZkhWpoZjnUinXjq_hsenys\85\91\91\9e©­»ÄÉÏÙÛçïòóûýúþÿûÿþþþüýþùÿÿúýýóøúíõ÷éòöåïôàêòÝçï×ïö×ëòÑêïÑéìÑææÎÞÛÈÜÕÅÜÔÉßÕÌçÙÖñãâøììþòôÿöúÿùýÿüýÿþüþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿþùþÿùþÿúýÿþûÿÿúÿÿøÿÿúÿÿüÿÿþÿúÿüóÿûïÿýìÿûäÿóÛÿéι\81f¥bH\95O6\9fT=¨ZF£RA\9eK; M?\8f=1\8b?1\86>0~?.w>-s@-sD2tF6p>5r=7s>8s>8u@:sA:r@9q?8r@9q@9q@9o@8p?8n?7n?7n=6j8/m80k90k;1j;1g=1d<0b>0`?0^>/bG6aG6T=+N9&L7$@1\1cWQ;OO7KI0ML0[Z>gfHbaCUT6WX9]`AosXw\80ccmT=J0,:#1>*1<,3;.3;.3;.2:-2:-2:-19,2:-19,19,08+08+/7*/7*/7*/6./6./6..5-.5-.5--4,-4,+2*+2*+2*+2**1)*1)*1)*1)+5-+5-*4,*4,*4++5,+5,,6-(2)*4).8-2=/7A6:E7=H:>I;5B04A/1>,/<(1?(7E.AO8HV?N\EUcL[hTXeSKXG:F8.:.(4*&/*%.)%.)heVheVheVheVgdUgdUgdUgdUifWifWifWifWifWifWifWifWjdTkeWkeYkdZle]le[jfZjiWnmXimTjoYjs`itfo|u\86\94\94 ®±½ÈÌÒÛàéñôôüþúþÿûÿþþþüüý÷ÿÿøýýóùûîöùèóøäðõßéñÚæïÔéðÏåêÊäçÊææÌãáÌÞØÈÜÔÉÞÕÌåÚÖíßÞõççûïñÿôöÿ÷ûÿùýÿýýÿþúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúýÿúûÿùûÿùýÿüýÿþþþÿÿýÿÿýÿÿüÿÿýÿÿýýÿûøÿýóÿÿñÿÿìÿúâÿòØÿìÐß²\95§uZ\91[A\96ZB\9bZD\9aVA\9aSA\8eG5\8bG4\87F4\82E2}D1wC.qA-p?.r@5q?8t?9sA:t?9o=6p>7rA:p?8p?8o>7n?7m>6m>6m>6l=5k<2k<2j>3j@4h@4eA3cB3aA2cH7[A0\G4\J6N=)E6!F7">6\1fKK3GK2CG,BE(JM0Z[<abC_`AWZ;cfGsw\rx\WaH7D*/;%7C/5=.5=05=04</4</4</3;.3;.4</4</3;.3;.2:-2:-2:-19,18007/07/07//6./6./6./6.,3+,3+,3++2*+2**1)*1))0((2*'1)'1)'1)'1((2))3*)3*+5,+5,,6-.8-2<37A6<F=?I>9F58E35B02?+1>*4B+:H1?M6JXAQ_HWdRUbPJVH;G90<2*6,(2*(1,'0+gdUgdUgdUgdUheVheVheVheVifWifWifWifWifWifWifWifWjdTkeWkeYkdZle]le[jfZjiWmlWhlShpYiuaiugq~w\89\97\97¥³¶¿ÊÎÔÝâêòõõýÿúþÿûÿþþþüüý÷ÿÿ÷üüðùûíöùèò÷ãîóÝçïØãìÑàçÆÜáÁÛÞÁÞÞÆÞÛÈÝ×ÉßÖÍãÚÕîââóçéúîðþôõÿ÷øÿøùÿúûÿüüÿþúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúýÿúøÿúøÿüûÿüýÿþÿüÿÿûÿÿùÿÿùÿÿúÿÿûýÿúøÿþøÿÿôÿÿñüÿìüúãÿóÛÿøàÿíÓâÀ§«\83j\87YA\85S<\92[F\96]I\8cS?\7fF2u>)r>)s@+tD.vE4p>3l<2o=4sC9sA8n>4qA7wH>m>4m>4l=3j>3j>3i=2i=2h>2g?3f@3fB4dC4cC4aD4_D3[D2aL9TB.YJ5_S=RG1C;$D<%EA(AE,@I.?E):A"=B$LO0\_@fiJ^aBmpQuy^flPHP83=$4=(=F37?07?27?26>16>15=05=05=06>16>16>16>15=05=05=05=03:23:23:2291291180180180/6..5-.5-,3++2**1)*1))0((/('.''.''.'(/()0)*1**1*/6/-4-+2++2*.5.4;3<C<>H?>J<=K::I66E02A,0?(2A*3B+CR;IXAP_LO^KGUF:H91>4,8.+5-*4,)3+gdUgdUgdUgdUheVheVheVheVifWifWifWifWifWifWifWifWjdTkeWkeYkdZle]le[jfZjiWkmWimThpYht`gsem|u\87\97\96¤³¶¾ÉÍÓÜáéñôóûýùýÿúþýþþüýþøþþöüüðùûí÷úçò÷áíòÛåíÕâèÌÛàÀÖÙºÖÖ¼×ÖÁÜÖÆÞ×ÍäÛÖëáß÷íîûðôÿõùÿùüÿúúÿúúÿüùÿþúÿþúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúýÿúøÿüøÿþúÿþýÿþÿýþÿûþÿúþÿùþÿùüÿùùÿúùÿýùÿÿøþÿöúÿóúþïÿÿíÿüéÿñÝÿðÛÿðÚñÒ½³\90zxR;rI3rH0uH1yL5|O:xK6nA,d7$xM=pD7nB7qE8nB7f:-c9-g=/h>2f?0f>2f?0f>2e@0e?2d@2aA2_B2_D3^D3^D3ZE2WE1UD0WH3NB,\T=nhPb^ELJ1IG.IL1;D)=G,>G*9B#;@"DI)UX9adEjmNuxYtw\Z^C?D-4<$8@+<C18@17?27?27?26>16>16>16>17?27?27?27?27?27?27?27?26=56=55<45<44;34;34;34;329118007//6.-4,,3++2**1)*1*)0))0))0))0)*1*+2+,3,.5.,3,*1*)0),3,1817>79C:?K=?N;?N;<K67F/2A*0?(/>';J3AP9GVAHWDBP?9G81?2,9/+6.+5-*4,fcTfcTgdUgdUheVheVifWifWifWifWifWifWifWifWifWifWjdTkeWkeYkdZle]le[jfZjiWkmWhnThrZfs_cqbixq\82\95\93¢±´½ÈÌÑÚßèðóòúüøüÿúþýÿÿýþÿùÿÿöÿÿòüÿîúýêöûåïôÝåîÓâèÌØݽÒÕ¶ÑÑ·ÓÒ½ÚÔÆßØÐéáÞòéêýô÷ÿ÷üÿûÿÿþÿÿþüþýùýþøþÿùþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúýÿüúÿþúÿÿûÿþýÿþÿþüÿýúÿüúÿüùÿù÷ÿú÷ÿû÷ÿýøÿþúþÿûûÿúüÿø÷ôíÿþöÿýôÿýñÿûëÿ÷çùçÓéӾʹ\9eµ\99\83\93t_vVAiH5kH5pM:sP=kF4gB0fA1jE3lH8nK8nJ:mL9bA0bA.bA0aB.aB0bC/bC1`C1\E3[F3ZH4YH4XG3TH2RG1PH1NH0MI0ecJ~~dpsXTX=IM2FL0;E*<F+>G*>G(@E'BG'JM.ST5vwXyz[nnTRU:@B,>B+>A.9=,8>07?27?27?26>16>16>15=06>16>16>17?27?27?27?27?28?78?77>67>66=56=56=56=54;34;33:229107//6..5--4,+2++2+*1**1**1**1*+1-,2.+1-+1-*0,+1--3//511731;2:H9;L9>O<=O9:L45G/1C)0B(3E-8J2=O9?P=<M;5F6.>1,:-*6,+5,*4+fcTfcTfcTgdUheVifWifWifWifWifWifWifWifWifWifWifWjdTkeWkeYkdZle]le[jfZjiWkmWhnThrZer^ao`fwo\82\95\93 ²´ÀËÏÓÜáéñôòúüøüÿûÿþÿÿýÿÿúÿÿöÿÿóÿÿñþÿìùþçòøÞæïÒâèÌÕÚ¼ÏÒµÌÌ´Î˸ÕÏÃÞ×Ñëãáöíðÿ÷üÿúþÿýÿÿþÿÿÿýüÿøýÿ÷ýÿ÷þÿùþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþþüýþÿûÿÿýþÿýÿþýÿúþÿùþÿ÷þÿõüþóüýõýýõüý÷ýýûþþþþþÿþþÿûùþÿûÿþúûúõòýøòÿþôÿþñÿþíÿúèÿòÝôãÏæѾѺ¨¸\9e\8d\9d\83r\8drax\Gz^IqU@aE0W;&W<'Z?*X=(_D/^E/_F0_F0_F0^H1^H1]I1\L5YM7YM7XM7UM6SM5QM4NL3MK2OR7ilQ|\80elrVQZ=DM0=H*9F*9F*?H+BK,DI+CF'GH)LM.xwYsrTecJSS9KJ5HJ4DE3:=,9?18@38@37?27?26>16>16>16>16>16>16>17?27?27?27?29@89@89@88?78?77>67>67>67>66=56=55<44;33:2291180-4--4-+2+*1*)0))0))/+)/+)/+*0,,2.-3/.40.40-3/+5-2@/5G1;M7=O7=O79K17I/5G-2D,5G/9K5;M7:K94E3.?/,:-*6,*4+)3*ebSfcTfcTgdUheVifWifWjgXifWifWifWifWifWifWifWifWjdTkeWkeYkdZle]le[jfZjiWjlVhnThrZfs_`qahyq\84\97\95¥·¹ÆÑ×Úãèíõøõýÿùýÿûÿþÿÿûþÿ÷ÿÿõÿÿòýÿïüÿê÷üåîôÚâëÎÝãÇÓÖ¹Ì̲ÇÅ°ÇijÏȾÚÒÏéàáöíòþ÷þÿùÿÿýÿÿþÿýÿúúÿøúÿõüÿöýÿùþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþþüÿýÿþýÿýþÿûÿþúÿúøÿ÷÷ÿó÷ÿóöÿòøÿóúÿ÷ûÿùýýûÿýÿÿüÿÿûÿûõÿýùÿÿýÿÿýÿÿýÿüýøúúò÷øêÿÿñÿÿïÿÿíÿþíÿüìÿõæÿíßüéØøãÎüæÎàʲ¤\8evt^FdP7aM4\H/]I0[J0\K1\K1]L2\L2\L2\N4YO6VP8VP8VP8TP7PN5NN4KN3LO4NT8`fJenQS^@DO1@K-9F(=J.<I-BK.FO0GL.FI*NO0YX:qmPjfI`\CXV=VT?SR=KJ8BC3;A3:B5:B59A49A48@38@38@36>16>17?27?28@38@38@39A49@89@89@89@88?78?78?77>68?78?78?77>67>66=56=56=538227105/.3-,1-+0,+0,+0,+0,,1--10-10.21-10,0/)3+*8'-@*5H2:N5;O6:N39M28L04H-5I08K5:M79L95H5.@0+<,*6*+5**4)bcQbcQcdRdeSefThgUigXigXhfWifWifWifWifWifWifWkeWjdTkeWkeYkdZle]jf[jfZjiWhjTglUhrZgt`aqdh|s\88\9a\9a©»¿ÍØÞßèíòúýøÿÿúÿÿûÿüýÿùýÿôùùíùúìùúè÷úåòößêîÕÞäÊ×ÛÀÒÒ¸ÌDZĿ¬Ä¾°ÊûÕÍÊæÝàóêïþ÷ÿÿúÿÿýÿÿÿÿýÿüúÿùúÿ÷ûÿøýÿúþÿúþþüþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿþúþÿúÿþúÿþüÿüÿÿýÿþþÿýÿþúÿúøÿ÷÷ÿõöÿõøÿöùÿöûÿøþÿúÿþúÿüþÿûÿÿúÿÿüÿÿüÿþüÿþýÿüýÿùûúùþøüÿú÷úñùûðúúîýùíÿùëÿúëÿýíÿþêüðØÿûáêÜÂ\9d\8ft^P5PB'WI.WI.ZL1[M2YN2ZO3ZO3ZQ4ZQ4XQ5SO4SO6SO6QO6OO5KN3JM2HL1IO3IR5R[>OZ<>I);F&@K+?J*CN0DM0HQ2KR3IN0JM.YZ;jiKedH_^B]Y@][B][DXV?PN9KJ6@C2>B3>B3<B4;A3;A3;A5;A58>27?28@38@39A49A4:B5:B5:B79A69@89A68?78@58?77?49@89A69@89A69@89A69@88?77>66=64;318005./4..3--2,.3/-2.,2.+2++2++2*)3((5$#7\1c'>!/F)6M18O3:N39M29M26J/7K09M4;O6:M76I50C0,=++7+,6++5*\fN\fN^fO`hQaiRejTgjWgjWfgUgfTheTgdSjdVjdVkeWlfXlfVjgXjfZjf[jf]ieZhdXefTehSdlUenYan\aqfq\84\80\95§«¶ÇÎÑÜàáéìï÷ùôýü÷ýùùþøüÿöûÿñõ÷éøùçö÷åñðÜîíÙëêÕàßÊÔÒ½ÖϼÉÁ®½´¥¼²¨Â·±ËÁÀÛÒÕêáæùòúü÷þþûÿþýÿýþÿùýüùþúúÿûýÿüýÿüýÿþýÿüþþüþþüþþüþþüÿþúþýùþýùþýùÿýøþýøÿþùÿþûÿýüÿüûþüýþþüþÿýþÿýúÿùøý÷ýÿúûüöýýõÿþøÿþøÿúõÿøòÿúøÿúÿþûÿþýÿþþþýÿþýÿüúÿûúÿûýÿþþþþÿþüÿþùÿýòÿýíÿýêÿþæøôÛþúßåßÅ\8e\89lTM0WN1TK,SJ+VM.VM.TN.TM0TO1SO2SO2QP4ON2ON2PO3PP6MP5JN5GM3DM2HQ6EN1AJ-=F'=G%AK(EL*EM(PV4OU3JO/HK,RU8bbFbbFZZ>YY?ZZ@\ZA[[AZZ>WW;UT8SQ8FE0ED0CB.?@.>?/=?1=?2=A3:=28>28@38@37B47B48C38C57B47B46@56A36@56A37A67B47A67B47A67B48B79D6;E:;E:8B98B97A66A36>14</2:/07/-4-.5.-7.,8*-:(0@&3F&6L&9V*8W+:V.9T3:S6:P9<O9=P:9K3@R8DX<EY=BY<=T82I/)<(*6(*4))3(YgMYgM[hN]jP`jRblTfkUglVghVfgUhgUheTkeWkeWmeXlfXjgVjgVjfZjfZjf]ieZgeXefTgjWemVfo\erahxnw\8a\88\9a¬°·ÈÏÐÙÞàèëï÷ùõþûøþúøÿ÷ûþóøüíöùèöùæôóßìë×éæÓåâÏÚ×ÄÐ˸ɾ¬Á´¤¹­\9f»®¥Á¶²ËÁÀÚÏÓåßãúóûú÷þþûÿþýÿüýÿûüþùýüúþýýÿþýÿþýÿþýÿþþþüþþüþþüþþüÿþúþýùÿüùÿüùÿýøÿýøÿþùÿþùÿýúÿüùýüúþýûÿÿÿÿÿÿýýýûûûÿþýÿþûÿüùÿøð÷ìæïåÛõçÞûñèÿûýþüÿþþþþþüýÿúýÿúúþýúþÿýþÿýþÿÿýÿÿþüÿþõÿþíÿþèÿÿãöôÛûûááàÄ\89\88jQL/RM/RL,QK+TN,TN,TO/SP/SO2QP2PP4OO3ON2ON2OO3MP3MO7IO5HN4EN3FP5DO1AJ->H&AH'EM(IO+JP*MS-NT0U[7\b@_bCY\?TW:TT:UU;VV<WW=WW=WW;VW8VU7UT6PL3NI3IG2FC0CB0?@0??3>@3:=28>29?38@37B47B47D37D37B47B46A36A36A36A37B47B47B47B47B47B48C5:E7;F8<G9;G=;G;;G9:G6;D39B18@37?46=54>52<30>-3C)7M)AX.Ea0No:Ln;Ih<Db>@Y<;S;:M:9L8<N6DW;I]ALaBJbBE\?9R5.D-)5'(2''1&YgMYgM[hN]jPakSblTglVglVijXhiWjiWjgVlfXlfXmgYmgYjgVjgVjfZjfZie\ieZhfYefTgjWckTdmZfsbm}s|\8f\8d\9a¬°³ÄËÌÕÜÞæéï÷ùöÿþøþú÷þö÷úïôøéñôãîñÞéèÔàßËÜÙÆ×ÔÁÏÊ·ÇÀ®¿´¢½° ¼°¢Ã¶­ËÀ¼ÕËÊâ×ÛêäèûôüûøÿþûÿþýÿüýÿûüþúþýúþýýÿþýÿþýÿþýÿþþþüþþüþþüþþüþýùþýùÿüùÿüùÿýøÿýøÿýøÿýøÿýúÿüùýüúýüúþþþÿÿÿþþþüüüÿþýÿþûÿýúúóëêßÙàÖÌëÝÔöìãÿûýþüÿþþþþþüýÿúýÿúúþýúþÿýþÿýþÿÿýÿÿþüÿþõÿþíÿþåÿþâøöÝûûáàßÃ\87\86hOJ-QL.RL,RL,TN.TN.TO/SP/SO2QP2OO3OO3NM1ON2NN2MP3LN6JP6IO5FO4FP5DO1CL/BL*FM,IQ,OU1RX2QY0W_6iqJx\80[pvTX]=KP2MP5NQ6NP8QQ9QQ7TR9UT8VU9WV:VR9TO9OM8KH5GF4BC3@@4>@3;>39?39?38@37B47B46C26C28C57B47B46A36A37B47B48C58C57B47B48C58C5:E7;F8<G9=I?=I==I;=J9?H7>G6<D7;C8=D<9C:6@73A08H.AW3Of<VrA^\7fJZ|IUtHKiEB[>8P85H52E1<N6EX<MaEQfGPhHLcF?X;3I2.:,,6+*4)XfLYgM\iO]jPakScmUfnWhmWjmZjkYkjXkjXkhYnhZnhZnhZkhWkhWjfZieYie\ieZhfYfgUehU`hQajWeram}s{\8e\8c\94¦ª¨¹ÀÆÑ×Ùàæìô÷ôýüöüøôûóòõêíñâçêÙáäÑÛÚÆÒѽÍÊ·ÈŲ½ª½¶¤Ã¸¦ÇºªÌÀ´ÖÉÀÞÓÏèÞÝóèìøòöýöþüùÿþûÿþýÿüýÿûüþúþýûÿþýÿþýÿþýÿþýÿþþþüþþüþþüþþüþýùþýùÿüùÿüùÿýøÿü÷ÿü÷þûöÿýúÿûøüûùüûùýýýþþþþþþýýýÿûúÿþûÿýúüõííâÜãÙÏðâÙüòéÿûûþüÿþþþþÿúýÿúýÿúúÿûúþÿüýÿýþÿÿýÿÿþüÿþõÿýìÿýäþýáúøßþþäáßÆ\87\86jPK.RM/SL/SM-TN.UO/UP0TQ0TP3QP2NN2MM1NM1NM1MM1LO2LN6JP6JP6HQ6HR7FQ3FO2HR0LS2OW2V\8\d;grGs\80T\86\93h\8f\9bs\84\8eikuRY`?RW9KO4KM5LL4LL4OM6QO6TR9VT;XS=VQ;RP;NK8JI7DE5BB6@B5;>39?39?38@37B47B46C26C28C58C57B47B47B47B48C58C58C58C58C58C59D6:E7;F8<G9<H><H<<H:<I8>G6=F5<D7<D9=D<8B96@73A09I/CY5Ri?ZvEZ{FWyFRqEGeA<U81I1.A.,?+6H0@S7J^BQfGQiIMdG?X;3I2/;-.8-+5*XfLYgM[iO^kQblTdnVfnWinXkn[klZlkYkjXliZliZnhZoi[liXkhWjfZieYhd[hdYhfYghVfiV`hQajWeral|rx\8b\89\8d\9f£\9f°·ÁÌÒÔÝâçñóñùûóù÷ð÷ðíðççëÝàâÔØÛÈÑмËʶÇŰþª½¸¤º³ Ê¾®ÓƶÜÐÄæÙÑíâÞõëêþó÷ÿúþþ÷ÿýúÿÿüÿþýÿüýÿûüþúþýûÿüýÿþýÿþýÿþýÿþþþüþþüþþüþþüýüøþýùÿýúÿýúÿýøÿü÷þûöýúõÿüùþú÷ûúøûúøüüüþþþþþþþþþÿûúÿüùÿûøÿøð÷ìæðæÜøêáÿõìÿûûþüýþþüþÿúýÿúýÿúúÿûúþÿüýÿüýÿÿýÿÿÿûÿþóÿýêÿüãüûßýûäÿÿèäâÉ\8a\89mRM0TO1UN1UN1TN.UO/UP0UR1TP3QP2NO0LM.ML0ML0MM1KN1LN6JP6KQ7IR7KU:HS5JS6NX6RY8T\7\b>emD\81\91b\92¦s\9e²\81\9a«~\92¡x\86\95nq|ZZcDKO4KM5KJ5JI4LJ5PK5SN8UP:UP:TO9QO:OL9KJ8FG7DD8BD7<?4:@4:@49A46A36A35B15B19D68C57B47B47B47B48C59D68C58C58C59D69D6;F8<G9=H:;G=;G;<H:<I8>G6=F5<D7;C8:A96@75?64B19I/AW3Ne;Tp?St?RtANmACa=7P3,D,*=*)<(1C+;N2G[?OdEPhHLcF>W:3I2*6((2'%/$
\ No newline at end of file
diff --git a/testimages/testimgfst100.jpg b/testimages/testimgfst100.jpg
deleted file mode 100644 (file)
index 36d9b75..0000000
Binary files a/testimages/testimgfst100.jpg and /dev/null differ
diff --git a/testimages/testimgfst1_2.ppm b/testimages/testimgfst1_2.ppm
deleted file mode 100644 (file)
index c17f310..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-P6
-114 75
-255
-0/+10,32.63.83/83-:3-:3+72.61-61-72.61-61-61-61-4/+3.*3.*2-)2-)2-)2-)2-)/,%0-&2/(30)63,74-96/:70A;-E?1HB4JC3LE3LC2LD1PE3R?0fB2\82D5\9cE4²D5¾D7ÆF;ÊG?êCKëDKíCFó?B÷:>ó:?ä@?Ò>:µ@,´?+³@-°@,«@,¤A,\9cB*\97A(\91@-\91>,\91>,\90>)\94?+\93>*\95>*\96?+\93@8\9b?2®C1½D1¹A1¤G8xD6J7&:6584362/40-63.52-52-41,,1+.0+/0+2.+3.+3)(8,,G99sCC\8eMK¥Z^¤p\86\8a\7f©z\87¼ek\9bSGoNI`OL]jjr\8f\94\90\9e¤\98\95\99\88rsaWVDUQbUQb..,0/+21-52-52-61+61+81)61-50,50,61-61-61-61-61-3.*3.*2-)1,(4/+4/+4/+4/+2/(30)41*52+52+74-85.96/?9-B<0E?1G?2G@0H?.I@/MA1LC2[D2qD1\88A/\96;)¦<,³C5ºI;ÝADâDEìDDö?Aù:?ó<>áB>É@6±A-°@,¯?+®?,©@+¡A+\99A)\95A)\90?,\90?,\8f>+\8f<*\90>)\90>)\91?*\94?+\93A5\9eA2´C3ÂC4ÀF9£I>pD7F:*=85<7494173063.32-32-21,-2,-2,/1,10,40-5-+6,+>43`;2|F:\90PN\92gx\81x£s\7f¹Z_\96NBrNCcMH_ON\ost\7f\86~\7f\85wjl^VWG[U_[U_,,*--+0/+10,30+30+4/)4/)3.+2-*2-*3.+4/,4/,4/,4/,3.+2-*1,)1,)4/,4/,4/,4/,41*41*41*52+52+63,74-96/<5+?9-A;/B:-C;.D;,F=.K?1FI6PH5aE0tA,\82;'\92=)¡D2®M<ÏEBÖE@äB?ò<;ú9<ï=;ÖC;ºA0­@+­@,¬?+©>,¤?+\9e?+\96@)\91?)\90?,\8f>+\8e=*\8e=*\8e=*\8d<+\8e=,\8e?.\94C2¥A2¼B5ÆA8¹D;\9bMCcC8:;-@85>63:5174/43.23-14-03,,3,,3,-2,/1,23.40-1-*50-N7)b=-qE<\80ap|v¤ny»[`¢NF\82PAjJ@bFCXEHQRXVU\TQWKRXJ`XU`XU*,+,,*..,0/+/.*1.)1.)2-)1-*0,)0,)1-*/+(/+(/+(/+(1-*0,)0,)/+(1-*1-*1-*1-*30+30+30+30+41,52-74/850:3+<5-=6,>5,A9.C9-F<0K?3DE5LE3XC2f?.u<+\83:)\94>-\9fF4»F<ÆH<ÚE>îA=ò::ç>9ÊD8©@*¦A-¦?,¦?,¤?- ?,\9a?,\94?+\8f>)\8d>-\8c=,\8b>,\8a=+\8a=-\88<,\89=/\8b?1\93E1¨B4¿C;ÃB<·PI\9a`UeUH>I;?80=6094.63,34.14-/4--4,-4--4--4-.3-/1,23./0+0/+</)K5([B;}l~\88\88¼z\82Íkn½OL\93J=hD=_DBX<CMBLKLWOMYMR\QaZJaZJ,.-,.-,.---+/.*.-)/,'/,'-,*-,*-,*-,*-,*-,*-,*-,*-,*-,*.-+/.,/.,/.,/.,/.,0,)2.+3/,3/,2.+2.+40-62/81+;4.<5->5.>5,@6-C9/H;2G?4L@4T>3]9-m9,~8,\8e<.\98?1¦B3³E6ÉG:ÝD>çB>ÞE?¼D4\9fC, A-\9f@,\9f>+\9e?-\9a=,\95>+\8f>+\8c>*\8a=+\89<*\88<,\85<+\86=.\85=/\85?3\88B6\92G4ªH;¼E?»LE°f[\97zjrtfM]PMI>A?3:7.33)34,03,-2,,1+-2,-2,-2,-2,02-02-12-12-7-6?42RID\80|\8b\92\94Å\89\90ØqyÁbh¦TQpIKbLTa]klq\82zy\8b\7fm}p\j[a[Cc]E+/0+/0-/.-/.--+-,(,+',+',+)+*(+*(+*(,+),+),+),+),+)-,*-,*-,*.-+.-+/.,/.,0,)1-*2.+1-*0,)0,)2.+40-91.;30<41=4/=4-?4.A7.E80G:4J;4O:5U61c60u6-\88:.\94<0\9aA3\9eA2®B5ÃE9ÑG=ÍH?±F6\99B.\9aB.\98@,\99>,\9a?-\96=-\91>,\8c=,\89>+\88=*\87<)\84;*\83;,\81;/\81=2\83@7\85E;\93K<£I@²LG®^U¦\81n\93\95\7fz\8bxao`PTCGI;=?224)01)./)./*/0+/0+/0+/0+/0+01,01,01,01,6+<711SUH\81\87\87\8e\95²\87\92¿\80\8f\84\9a²\87\96\9b|\8e\8ev\8d\85\80\9b\8c\90¬\96\8e¦\90\7f\95\80`q^ZV9`\?+/0+/0+/0-/...,--+-,(-,(,,,+++***)))+++++++++++++++*********+++,,,---.../+*0,+0,+.*)/+*/+*1-,3/.:20;31<41<20<3.=2.>3-B5/@72B94D95H70U7/h8.~<0\8c>1\96?6\93@2\9aC2¨D4µE9·G;§B6\96@1\93A,\94?+\94=,\94=,\92<-\8e=,\89<,\85<+\86;(\84;*\82:+\7f:+\7f=1\7f?5\83D;\85IA\8eJ?\9dJDªWQ¦uf\99\99}\89¨\88~\9a\81s~m\hRJVB=F58<.12*.-(/+(2,,0,)0,)0,)0,)/.*/.*/.*/.*7)841(Q\>~\8cr\8e\9b\94\8c\9b\9e\8d¨\9f\9fÆ«\9fÀ«\9e¨\8f´\95\8b°\8e\90´\90\8a§\88}\96yZnUST5UV7,03,01,01.0//10//-..,/.*...---+++*********************)))(((***+++---.../+*/+*.*),('0,+0,+2.-40/;23<42;31;1/;1/;0,<1-?2,:70983:94=82F3,Z6*q9*\7f<+\8f:3\8d?3\8eB2\93B/\9e>.¨B6 @4\95?2\91@+\90=+\91;*\92<-\8f<,\8b<-\87;+\84;*\83:'\829(\819*}9,~>2\80A8\84H@\89NH\8cIA\9ePL«d^¥\88v\8e¦\84\7f¯\89}\9e\81\7f\86tfx^XgPHT@=C557,1.)1)'4*+2*(2*(0+(0+(0,)0,)0,)0,)9(232\1eGW(v\8aY\8c\9d{\8c \84\8f°\81\9cÎ\89 Î§\9cË¡\86µ\87\84²\83\86°\82\82¥}s\8djSgKIL/FI,.1(/2)12*12*44,63,52+30)7/,6.+2-*0,+.,---/+,0)*./(//(/.)-.*+-,*-.)./)./),.-.../.,2.+2-'6/'90'<2)<5+=6,=4-<3,<3.;0,;0.=20F/'97*.:,36-C+)Q'(Y2+]A3vB,\86A1\94>1\939.\8f<,\8dB/\8eC.\8e@,\9b82\8f=1\82A/|B.\83B0\87>/\87;-\84;,x<1p;+s@-t<+\80>0\8aH<\87MA\81QC\98LN\8dm`z\8do}¢\80\8c¦\89\92¦\8b\82£\86k\9dz`\8dbX|VZnRQUDF?7:..6',2%,$-*'+*+),1(-3(03'10)1-*11-..-(HK8w\82`\88\9bn\88£n\86§p\90¶}\9d»\87\92´\81\86«x\83©z\83¦|{\98yl\83iTcPCJ:;B203*14+34,34,66.96/85.74-92,61-4/+2.+0/-///..0*+-0*.0*./+,/+*/.*/.*/0*01+000//-0/+2/*61+92*=4+@6,?8.A8/?6-=4-<3.;0,;0.=20B4+O-,X&/L(,>1+;3(Q0'h.,i;,y=2\89<6\8b;4\87>5\84B4\86B5\8aB6\8b?/\88?.\86?-\87;+\89:+\87:*\7f<)w?(|<0v;-v>/x>0\82B6\8aG>\89K@\88OD\9aNN\94l`\83\89m| |\82ª\85\8bª\8a\8d¡\85\85\95{a\99j[\8ecZ\87`SvXE^H5G7)6,$/'4%(2&(1(+/+,+,.(..%/0$002,..+&DG6s~`|\91h\7f\9bk}\9fl\80§r\85ªt\80§r~¦r~¥v}¢yx\96tj\81eRdLAC58:,47.47.67/780991<92=:3<92>71:5194073073054232010.5,-3--3--2.+3/,21,32-23+33134/43.83-<5-?6-C9/D:0D<1D<1B90@7.>5.=4/=4/>50@72R/3\(4Q-1<8/4;+D6)Z/(`80q:5\819:\8398~:7}A9\81B;\85@9~F/\80B-\86=,\8b9+\897)\82;)y?)qB(\852*\92H=|:.\7fE9|H;\7fK>\82NA\8aTHnoO{wZ\86\82e\8c\97w\81¤|}­\83\80u\9fy\84\8dn\7f\8dl{\8clr\85iesZUZFGA3</&9))3)',+&).('-)*,),*+1(+2*'?;0PUAhwXn\87_p\91br\98gq\9cgu js\9fjy¥ty£uw\9css\92pg\80bNeHB>3:6+6906908919:2;;3?<5@=6?<5@;5?:4>93=84<94<94:7285091.91.72.72.52-52+44,55-540761<92?;2@9/C;0F<0J>0H>4H>4E;1A8/A81@70?82@93>93?<5A>7D=3F90I9,H;*F>)g3(z93\8e@<\93D@\91HA\82?6\8290\8b<5\81A5\82@4\81=2}=1y?1x@1|>1\81;1£3/å\7f{¤TK\81L>nO;iU=sXC\83`Lc\80P\93x]¾e_ÌbdÉ\7f\96~\96 }\87\9dw\8d\90q\87\95r~\98ss\97qi\8dg_xXS]BBD.B5-:3)11'.1&41*<-*F',M$,ME2`[EfmNj|Vh\83Vi\8bYo\96aq\99dp\9cin\9aiw tu\9btt\96so\8ele\80_MgDLC:D;28;28;2:;3=>6==5A>7B?8C@9E@:E@:D?9C>8B>5C<4B;3B;3A81A81?80?80<71:7085.74-77/96/=90A:0C;0G=1L@2MA1MA5K?3G=3E;1B90@9/>:1?;2C<4I81[<7h=7o>7r>3y@5\83I>\8eF7\9aG9\9d?5\9e>2¡I;£M<£G8¨D5 BC\9399\87<7uA4lE4wC6\8710¬7@ÞPNÈFDÅb\\82M=h\BafFlgI\7fjO¶eTâU[ú(Eÿ!Iÿ5SïQ`ågkàloÈuqÃzs¹\80\84\81s¨vm£d_\9bTR\93HO\7f>Bh86O0+J3-F3,J2.Q84]R2fc@qyRt\86\m\89Yo\8f]t\97av\99cr\97nu\97rz\99y~\9b\7fz\94yl\86ic~]NiFTNBQK?6907:1<=5?@8AA9C@9DA:DA:EB;EB;FB9EA8IB8I@7F>3D<1C;0D<1D;2C<2=90<8/96/85.96-:7.=9.B<0E=0J>.M@/M@/M?2L>3H<0E;1D<1@<1@<1@=4Q9/\91@FÕN_ÖR]\99?7\94H8¹LGÛ?J¡F3¦@1«;-­?0ªC0\9f;$ª=)±<+³6<¼?E¹HJ£LE~<.\835+½BGá@RÚ83Ì73ÉTM\95VEpbEopN\80kL¥s\ÿKWý8Jÿ5Lÿ0Jÿ5Mý1Jÿ/Iÿ/Nÿ5Vÿ9ZüA`øEcõFeõCgüClÿHrÿXzïUqÛ\qªOXe/-O<.;@,9K3[Q.ieB|\82`}\8ckx\8eju\8dix\8eh~\93l\8d\9f\85\96¨\92 ®\9d¢°£\94¢\93w\8avaz\OjGVWEXYG58/690:;3>?7AA9DA:EB;FC<GD=GD;HD;KD:LD9JB5H>2G>/F=.E;/D</D<1A:0>:1<8/;60:8,<8-@:.D</G>/K@.NA0M@-N>1K=0G;/D:.B<0@<0@>2@@4u:4ÎU^ì<PÐ+2¤4&\91=#³?0×45¤@0ª</¶@6»G:ª?-¥:(¯:)ÁA4ÈB9Ý?>é:?ã?@ÑD=ÙSJÜ>=è08Ú6*Ð3*»80±bS\80[A\82_C®cPÚg`ö=Eá<@×HDßQOêKOò9Gú1Dÿ4Jþ9Uü:Uÿ=]ÿBdþ?hüAlúAm÷@nÿ?hÿFkøKièZp¾Zdl71QA1FK4bUB\83|j\99\9b\8d\93\9d\92\8e\9b\91\99¥\9b\97\9d\93­¯¤Â¶ÉÉÁÍÉÈÆÄDZ³°\87\93\87ey`RmLU^CW`E47.47.67/9:2==5A>7EB;GD=HE>HE<JF=MF<ME8ND8OC5NB2LC2JA2F>1D</B;1A:2=90<71;9-<8,A;/D=-I@/LA/NA.O@-N>1L</H:-C9-A;/?;/?=1@@4\9eCB¼HI¹//¶0%©9!\9dC!\99C"\9c\9f8/¥6-³>7´B8«?3§;.ºD:Á@:Ä>#ä2&ÿ $ÿ#)÷*'è3(å3'ë/&Ö7"Ô6*Ä;3ÃeY\9eaN\9f[HÜa\ñCLí?AÓ@9¾@4ÎA:òAIÿ4Gü6Gõ=Iý;Sý8Tÿ7Zÿ9cÿ>mÿ?pÿ@tùAuúGeÿLjþMjÿa|ïfxÏjr\98TQ\7fPH\8e\7fz³©§¼¼¾¸½Ã¼ÃÍÆÈÔÒÏÚãÙäìáÝíáãëÛåâÖàÇÂÈ\98\9f\98n\80j\uW^mN]lM11/442783893:;3=?4AC6DF9GI>HI9IK5MM3KJ6JIDRP[KI^OF7I@1IA4D<1B;3?82>95;63A62?74<;9===?@;EA6LA/O?(@B-J91N45F698?82E27A)QK3½L<¡6$\9f:& =&¡=&®?+³:)µ6%¡:)¡<*§B.©B/©>*´?-ÂD5¼8+Í6+Ë<,Ñ=/â7/ò/-õ/,ä7)Ó>(Ú8#Ñ9$Ã7&ÉE8ÕJCñSRöAFþ9BàDEÌA<²<0¨?,¿N>ÖI@ì?Aÿ<FøEKûEQû@SÿA[ÿEi÷>g÷CpüL{ÿKwíRrçYqÿYzÿHqôLpÀhvzmdº \91ÝÕÊàäãäàîôÚõÿÞ÷ÿéöøôõûøó÷óðñëëéãåØÔÕ¶¶´\8c\91\8a{\85z\84\8by~\85s..,01,34/560891;=2?A4BD7IG;KI:NL7OM8NL@`_dtt\8csv\99jbwVO_JDPC>DA=>;83=90=9-96-<90><0></E?1K?/O?/P=,7A&<=+>:/;83?:4P20r*.¥:D¥7&¤9'¢<&\9f;$§='´A.½>-Á<-°?/«:*¬;+­<*³;*ÃE6Â=.Ã7*Ö6*Õ9,Ú:,æ3,ô.+ò/)à5$Î9!Ü3 Û:(Ñ;-Ì?5Å:3ØD@çIFå@>ÓC;Å?4²:,«<+µ=/ÕJCä@AüGNñ@FúFOýDTü@YÿDeÿFoÿLyýLzÿFxÿMuÿWxúPmøKiÖK`Ó\8b\8edWGÁ\97\8bøâ×û÷öøõÿþíÿÿîÿÿöÿÿýüÿþùÿúöþõöýòöîåæÍÉÆ®±¨§­¡ª²£¤¬\9d32-10+21,44,77/::0>>4AA5KE9PI9SL9RL<TPMqr\86\8d\90»\92\99Ð\90\8fË\80}´nm\99\[{POaA@E:9497+3828:/?<+D>&I?&K@,JA2I?5O<6F93893/<24</M5+\89?>¨7=¨=+ªA,§>)©?)¬9&¹<*Ä:-Ì<1Ã?3½9-½9-¼8+Å=1Ê<0Æ2(Ï8-â1)â4)é4+ï0(ö/*ð/&Þ4#Ì7\1fÙ2 ×4#Ö8,Ô@6ÛLDÌC9ÐL@ÅC6¿;,º;*µ:*¹?0½=2Ë@;ÛEFëLPí@DöGNýKYûE[ùB`þIlÿOxÿLvÿP|ÿOvÿTuùOiìMaÿz\86ÿ\9b\9d\96KF¾\7fvúÑËÿ÷ôþüÿýúÿÿùÿÿûþÿüùÿüöÿûøÿ÷øÿóõöìëàØÕÔÑÈÔÖÈËÕ;ÈÀ;;366.22*33)55+88.<<2??5LB6TH8WL:TJ>WRXwx\97\96\9cÖ¢«ö£¨ù\9c ê\97\9bÛ\8d\90Å\80\82©hh\84TSeKIVCET>=C>;2C>*CA*BC1?E;;DABASJM\MW`LXVLNCaJ:\89R>\8d@,ª?+«@,¯B-°=*¶9'Â8+Ì8,Ô:0Î92Í81Ñ:3Î7.Ö>3Ò5,Ù;0Ù8.é1'í1(ô/)ö,(÷.'í3'Ü7$Ï9!Ñ9$Ï6$Ó7*Ñ7-ßJCç]SÈH=·?1¶>%¶<%¹:'Â>1ÈB9ÏF@ÓIGÓIGèDEïIMûQZúN^öE_úHhÿPtÿQxê[wö\xýVpùRfÿ[lóRaòO`óL^¼ql︳ÿíéÿüûùÿÿùÿÿüüúüùôÿûõÿüùÿôôøêêìÞÝäÛÔïéÝø÷åæñíÏÚÖA?3><0:8,85,52)63*;8/A>5KA5SG7WJ9ZNBUNUpp\94\8f\98Ù\9d¬ÿ©µÿ¬¶þ«´ù«°ò ¢ß\8b\8cÄtq¦_]\8f]T\83VOqEAP??=>A6?G<;DAFOTMl\8bi|\9a\82|\96\8fj| Xc¯RM«A1§;!¨;'¬=)±<*·:(½5'Ê8+×:1Ý:1Ü:5Ý;6ß<5á>7åA8Þ;2îLAóQFî6,ï,&ø+(ú*(ö1+é4)Ö3$Ò7%Å=%Ë='Ï9(Ð6*Ó9/ãNHÜOHÀ93·=%º<%½:(Ã;-É@6ÙTMÉJCÃF@âHFéOOíQUíMWøSd÷OhþQoÿRsíWtû\xÿZsýTgÿYgÿ[jøIZÿMcªg_Ñ\9c\96ùÚ×ûóð÷ÿý÷ÿÿýÿüÿú÷ýúóÿ÷ôÿ÷õïáàáÓÐèÞÔþ÷åÿÿëïøõÖßÜGC7D@4@<0=9.95*84+;7.@;5G@6NE6TG4WJ:WNQhg\86\87\8fÍ\97§õ©³ø®¸ý²»ÿ²¹ÿ¬°ù\9e ê\8c\8b×yvÃod¨bZ\93RRvBCU<:?QABdGK\87bi¯q¢¼u¡Âf\8dÈMlÒ>TØ?DÁ9+µ="¬9&°8'¸;)Á<-Ì=/Ù?5à=4ß80Ö3,Ø3-æ?7â;3Û4+Ö4'Ø8*Õ9*ñG8õ:3÷))û*-î.+â4-×3)Ó1&Ì;(Ï<*Õ>-Ø</Ù=1×>8êRQÔ@@Á<)À;(Á9)À8*Ä>2ÐNAÉMA¿E8ÕH?ÜOHßQOÞMPñYeý^púTlúPkÿKsÿWvÿVmÿ_pý_môbläfjÑcb}WJ¡{rßÀ½÷éè÷üøöÿþþÿÿÿúýúûóýúóÿú÷÷îéâØÏäÝÍÿûåÿÿæð÷ðÝäÝMJ9JG8FC4C?3>:/<8/<71?:4C@7KE5QF0WH3WLHb`v\83\8a¾\94£è§­÷«±û­³ý®²ü©­÷¢¦ð\99\9dç\8d\91Û\86\85Ënr¯bh\98\YxkPc\88JUµQYÏS[ðBcåG^ÕAOÍ3=åAHÝ?>ÊB6ºE1¼A1ÁB1ÉD5ÔF8×@5×9.Ø4+Û4+Ø7-Ý:1Ü8.Ü5,Ö4'Ó6'Ì5"Ð=)Õ>-ðB9þ68ø-0ë20Ø/*×2.à42ê72æ:0à:,×:+ÝE8éTMÕA?ßJLÑ>4Ç7,Å;.À<-»<+ÀC1ÁD2¼?-ÅE8ÍMBÒQKÓOMê_dÿiuùZløRhÿRvýWoõlvífmôbmîhqÓ{y\9drb_]Hyg[Ë­«öàâüø÷ùÿÿÿÿÿÿùÿûÿ÷üÿöÿÿøÿüôïçÜëæÓÿýäÿÿâó÷éêîàQN=OL;KH9HD8D@5@<3?:4@;5AB<JG8QF0VG0SI?`^l\83\8a\93¡Þ£¤÷¨©ü«¬üª­ú¦ªó¡¨ì¡©ê\9e§è\96\9fà\8d\99Õ\88\94Ä\8c\86ª\96i\80¹SaàCL÷8?é@-ÖI-ÂK)¼E'ÝP?Ü:7â<>Ô59ÁB1Ã?0Å9,Å3&Í3'Ô3)Ø4*Ú6,Ý?4Ù9-Û9.Ö4'Ô4&Î5#Ì;&Ç;"Å:'Ü5,ù78þ7<ò;=ß:8á99å58ü+0ô.-ä2(Õ5%Æ5$îaWÎ@<ÕFHæIDÏ81Æ9/¿=-¹>,»A,¹:'¾=(¶<-ÀF9ÇMBÉLFæabújsýbrúYkú^sàkqã\8a\84àwtþp|îaqó\9d\9e·\9a\8aKbF`]N¾¤£öÜßÿ÷ûýþÿÿýÿÿ÷ÿøÿ÷øþôýþöÿÿöû÷ëöôßþþâÿÿáýþîûüìXO@WN?TK<RI:MD5KB3I@1I@1DD:KH7RJ3TL5UNFa`r\81\85µ\92\9bÞ£\9fô\9f ü\9f¥ÿ ¬ÿ\9f¬ò¢§ç«¥í¯¢ô\95ªý\92¢Ý¬\9d¼¾lzÝ@Iõ6>ê<>ÕF@á:BÓ??ÊC?Ï@<éCGì9?â9<Ô<9Ë@9ÊE<ÅG9µ:+»9+Æ6-Ó1,à42á>-ß4#å8'Ú5!Í7\1eÆ8 Ë8(Ï5)Ñ3*Î8*É8%Ñ6"à2'ì0.ì+0ê-4ó+.ì/+ã5*Ô7$Ä3\1eÜO>ÙKAÒA<ÞRQÒD@É90È9)Æ;(¾:%»>*¶?+³;-¸>/½?0ÃA3ñmaíhaïiföpoÿmzïdkòadõtoý{yÿVmõ\81\8e\86SiB`dI¼¬\9fûæãÿøøüúûûÿÿúþÿãÿíæÿê÷ÿóÿÿòÿýíÿøçüöàýùàüþûþÿýZQBXO@VM>UL=QH9OF7NE6OF7IG;OJ7TL5WL6VMDb_p}\80«\8a\93Î\96\97Ø\96\9aä\99 ð\9c¥ð\9c§å\98¡Ú\98\9cÛ\97\96Ü\8c\92Ψ\86¹Èl\91ÏG[ÝAEâ@>ã?@ä=DÜ;@ÑA@Â>9ÖKFâ?Bç:>Ø88Ì=5Ê@6¾:-ÆH9¹<*¼8)Ë9,Û81é<8Ó5)Ú6,Û7+Ö=+À9#¸;%º<-½9-ë?;Û=1È:&È:"Ð7%Ô0$Ø1+Ô1,Ø1)×7+Í6#Í<'Ê<(áM?×:5ïLMùecíZS×D:Ä5%Á8&º9&¶=*±>,­<.±=.¶>.¿D5Û]QéhbîjhédgåTaóho÷djûws÷qrýG`ñt\84q\92sQj@hoNÊ¿­ÿõíÿý÷ûÿùùÿûóýõØýÞÔòÖãõÝôùåûøåûòáíåÒòê×üùôÿýø\P@[O?ZN>YM=WK;VJ:UI9VJ:MI=SL:XM7XM7UMB_\etu\94\83\87\8a\8e»\8d\8fÈ\8f\92×\90\95Ù\8f\98Ó\83\8dÀy\82¹owµ\84p\8b¹[\7fì=dö5JæDBÖLAáEFö:KÛBDÌEA´:/ÐKDÜB@ß<=ÖA;ÊH;Â8+½8'½<)½<'Å<*Ò<-Þ7.æ81æ44ç10í53ß4-Î4,È91Ä22Ô>@ò14à5-È7$Â<#Æ;$Ë8&Õ=/Ô>0ÊC0¿:'Â>)Ä<&Ì;*Û=2â64â.1Ô72Ú@8ÝE:ÓD4ÉA1º=+°=+¬=,©>.«=,¬=,¶B3ÓZOæicëikìfmûozðgnûhnÿxxöelþ=Zîgx\7f\94uc\81Oz\89`ÍÉ®ÿùæÿÿñõÿñèûçÖçÔ´ß´³Ù°ÁܹÔãÆêìÖôíÛëÝÐíÜÒìâÙëáØZN>YM=YM=XL<XL<WK;XL<YM=SK>VM<YN8ZN8XNBYSUb_rqp\8fy|\9d\80\81±\86\84Å\87\86Ê\81\81½wy¬oo£gf\9f\8cWSÅISü8Lÿ4AðA<ÝJBäEIö;NÔEAÄE<¯;.ÉK?Ì73Ë0,ÎA8¾E4Â;(À;(¾<&¿;&Ç9%Õ:(à6)æ4*ö.1ÿ16ÿ-4ÿ.4ú17ô/8þ1Bý'?ö'/è0.Ô6+Í:*Ð8*á=3ä<3æ;3ÑL;ÉA1Á8&Ç:)Î6)ä?9Û++ì57Õ4*Õ7,Ð8+È9+ÖQB¾@2¯9+­<.¬<.®?.«<+¬=,ÆQGâhcîpsös{út}öpwÿnwÿpwõ[eÿ:ZëZk\9a¥\85{\9ce\87\9al´¸\95ÚÝÀ×æǾٸ¬Ê¦£½\9a\8c½\86\96Â\8d£Ç\97³Ì¢ËÖ¶ãáÌêÜÑâÍÈÕǼ̾³ZM<ZM<ZM<ZM<XK:YL;YL;ZM<YM?[N=[O9\P:ZN>XOJZSZ_Yehe\82pm\9a|w¹\89\82È\8b\7f½\88\92\89d\9a¡@0»?3Ý>8÷@<ö=;ð=@ëBIä@KÄ?8´>2¬=,ÆH<Ô?9Ñ4/ÏB8³:)¿8$Ã<(Â;'Æ;&Î9%Ö4%á4&ð:/î3*ô-&ü(%ÿ'(û$)ÿ$0ÿ"8ÿ\121ö&3é*1Ú,-Ù0-í76ö45÷/1ö.0Ö90ßB;Ë1)Ï2+×82äA:Ø1+ã81Ô<.Ë5'Ì:-Ç;.æ^RÀ<0½:0·7,·3'´4'±7(°;*µ?3ße`òuyùw\81üz\82ùv|ÿr}ÿitôVdÿ:\æO`\95\9czw\9a`}\93b\92\9ds\92\9ex}\96nq\95gr\98g~ n\81±s\8aº|\92¾\83\9b¾\88¤¹\90½Á¨ÙÍÁ׿½Âµ¯µ¨¢YL;YL;YL;YL;XK:YL;YL;ZM<\L=]M=]N;\P:^Q@[OAZOI\QO`Tlf^\87upª\85\9b\84º¨y¥Áv\9f¹\\88Ò=9Ä@3ÈI8ÚC8õ=?ý9Cë@FÍA@»=1¬;+ª;*ÃC6Ö;6ß;9ßKAÄE4À9&Â;(É>+Ë:)Ð4%Ü4'ñ?5ì4,Ø9&ß4#é.%ì,'ë+*ð(2ø#7þ\e7ð-;ó;EüKUì7@ð,8÷.8õ.3ì,+Ú51Þ97ÿ]\Ú86Ü=9Ù<5Ñ7+Î5'¾7#À8(Á<-Ä;1áWMÅ5-Ó>7Õ<4à=6Û>5Ì=/½9*¸<0×\Uòvxþ\7f\86ùz\81üy\81ÿp}ûcpóPaÿ7WäM\t\7fW^\7fHk\81Px\85Yr\83Yf\83Uj\92^w h\80¦m\83¯p\89·v\88¹w\8eº{\91¯{\9c§\85º³¡Ê·±«¦ª\99\94\98[L9[L9[L9[L9ZK8[L9[L9\M:^K<^M;]N;^O:[N;\O<_O?`PAcO[bUomj\95|v¢\9e\80¢Ï\87\9däm\81àKaÿ:MìGMÊE>ÑF?êBBô?FãEDÅB8·?1©:)©:'Â<1æB@ë=<ß=8æZMÉD3¾6&È;*Î8*Ó3'ç:3ì5/ê-)ç53ð45÷29÷4<ì1<î3Dó.Jÿ3Wë=GÿYdÿ[hñ@Pî8Gâ3:Ò72Á8(Æ3)åRJéTPÖA=ØC?Ë7-Í;,É8%¯=%²=)²8)À=3×H@Ñ4/æ=6æ5/ó-.í4/á90Ð<.¼6*ÐQJñusÿ\84\86õx~üz\82ÿn}ùapðOaÿ7WÞLWXh;[wDm\81Py\86[}\90cy\9biz¥m\7f«n\84ªm\87­p\87´s\84¶o\87¹t\8a²v\91¦{¸¸ ÖȽ²¶Â\99\9d©ZK8ZK8ZK8ZK8ZK8[L9[L9\M:^K:_L;^M;^O:`Q<`Q:aQ:`P9gMN`Tbmm\89|y\94\9e~\8d×\80\86üjmÿHNÿ)Mÿ9RÞAJÓCCÛBDÝB@ÔD<Â@3²<.¨;'°?-ËA6á77å.0Ý52æRFêeVÈ>1É:,Ð8-Ú7.å61é0-ò53ÿ'Bÿ$Aÿ\1f\1d;ó"Aò*Nñ(Tÿ8jú]f÷[fîM]ß:KÜ:G»-,¥8$\98E%´;(ÑSEÄA7Â;5ÚOHÇ9-Æ9'Ç9#¥?&¥<'§6&ÈH?ÙHCÛ62ë40ò1*ÿ)-ú,,ê3+Ú:.Ä8+ÃC8élhÿ\87\87û~\84ý{\83ÿgyóZlëJ\ÿ5TÓFNJ`/]xE|\8d`\89\94j\8b\9eq\87©w}¨p|¨i\81¨i\84¨k\83­m\7f±j\81·l\86³r\92¬}»¾£×˽ªµÉ\8b\96ª\K7\K7\K7\K7]L8]L8]L8]L8]K=[N>ZO=[S>^S?^Q@bPBbOAkLIgWbqv\96\7f\8a·\98\8d·¹\82\99åywùlZñO\êDPñEQë=Fá;?×<:Ì?5½;-¦@*«:(ÅA5Ð92Ù6/Ú6*Û:&Ø:!ç@:æNCÉ<+Ï>-å@:ê16ó1<ù4Eü&(ý')ü('ø&%ñ%(ñ)3è(7÷:NÿdmýX_ïKLÔ=6¿B0«B,\923\1d\934"§60ÇGDÄ44ÖB@ØICË>4Ç4*Î6+¹=1¶0%Ã5+×D:àI>Ù5,ì0.ÿ.1ò12ó/0ñ1,ã7+Ê8)¸>/Ýjcý\8b\8aø\87\8bÿm\7fÿZvÿNjù=^ñ>\¨LOHV5^\80Cv\9a]y¡e~§k}¦j{¥f|£d~¢b{¦n~ªk}­c\81²c\86´k\88°t\94³\89\9d\96\82\90\91cqr]L8]L8]L8]L8^M9^M9^M9^M9^M9`Q>[P>YPAZRG^SOdVViY\k]]lj\80w\80¹\84\8dÜ\96\8b×°\82±Ñ}\8aê~qÿbgòKSöFPñ=Fá7:Õ<7ÇA5¹@-©>,²A1ÄH<¾5+Ì8.Ö:-Ù8&Ü:%Ü3.äH<ÕB2Ó<+è@7ì23ù5?ÿDPò01ì**ï--ì,+é-.â-2ñAKûO[åOQçHLá=>Õ:6Ã:0¹?2»E;´94¨3,ËGCÕCCéSRÎ>6ÏA7Ò>4ÞA8á=<ç=>ç;;íEBÝ<4Ø4+é3/õ20ó12õ/0ò1,ä6+Ì:+³9*Ükcÿ\8e\8dù\80\87ýjzÿVqÿGgú;]éMe\80;6N\;c\82Gr\96Yu\9day¢fx¢cv ax\9f`| bz£g{¨ezª^}®]\86´i\8a°s\82¢sq\8bhKZU5D?^O:^O:^O:^O:]N9]N9]N9]N9^M1_O6ZN>YRJ^Y]qjzvn\85vl\87nu\88t}¨{\84Ï\85\8aæ\95\8dâ\9d\81´©w\80¬m[ç\Wõ]\öLOí8=ç79Ú=8ÉD5ºC/³=1«7*ËYNÇQEº:-Ê;-Ú:,à6)â3.á?4ßC4ß?/ä3+ð0/ó04ÿQYÿZ\á46ç;;ß33Û32Ý:;ãGJÆ-0Ë32ß<?Û25Ô01Ô<;èZYôch÷_kÉJCê_\ô\[Ö<:Ó@8ÚJ?Õ>3×6.ú.:÷)6ô+5üBCÞ3,Ù5+ã5,ï4/ö/2ø-0õ/,æ5+Ð<.±6'Ôc[ÿ\8d\8cÿx\87ôfvúNhÿ8_ú;]ÅO[`<,YdFg\84Ns\94[w\9dbx bt\9e^u\9d^w\9e_| by£cz¨`y¨Z{ªY\81­`\85¬k\87¥sz\95lizj[l\_P=_P=_P=_P=^O<^O<^O<^O<bQ3_P;ZQH_Zarp\86\7f\7f¥|z«yv«r~¸{\85À\84\8aÆ\94\96ɦ\9fÀ»¬±Ì¶¡²\98s®S>²B4ÚMFðJJë=>ä<;×@7Æ</½=4±8/ÂVIÍfWÂQA¾8,Õ7,â4-â4-ß9-äB3à9)è2'ñ/-ñ10ï56ñRV÷X\ãBGæFHäFGôZ\Ö@AÆ45ê=?î;?ç/7óBJÿagÿemú^küYjê]VÞFCÓ41×84âKBßKAÖ90Ý82ú*7ÿ-:ÿ4>ú>?ß4-Ü5,â4+ð5.÷/2ù-0ö/,ç5+Ó=/³5'ËVOþ\8a\8aÿk\7fî`pøIfÿ6_÷Dd\92DDLH/V\@d~Nt\90]y\9cbt\9c]n\98Vp\99Ws\9cZw\9e_x¡]y¤\u¤Tw¦U}©\\82¦f\81\9fku\8fbey]XlP[N=^Q@]P?^Q@_RA\O>`SB_RAbS>^RF^X\om\83x{¤}\80·tx¸nq¶uyÔ\89\8dͧ§¿ÃÀ¯ÖÒ¥ßÙ\9fßÖ\9dÖÌ\97Ä¡\83³yaÄdVæa\ëKKå;<ä::Þ63É83À=5¼L@½WHÐeUÀ@3Ï5+à3-á40â;2Ü8,à6'ê2(í0*é2,â5.Ø?AíRVéJOÿemÿckþahÿfiðZ\ÿ<Bù1;ñ)6í3@þXbÿfnÿcnüZgâGBÙ53Û2/Ú51ÜB8Õ=2Ú91ä84î7;ð69ð67ä2.Ü5,Þ8,ç2)ó2-÷03ù.1÷0-ê5,Ö>1¸6)ÅJEÿ\88\8aÿc{óWmùDcÿ:aßMdc9-9C(OQ9[pEr\8c\v\95\o\96Uk\94Pn\97Sq\9aXt\9b\t\9eVu¡Vt Sr\9eQs\9dSm\91Q]zDKe6>W/<U-YL;]P?^Q@`SB`SB`SBaTC^Q@\QOaZaqm\84xz£v{³ks´`g¯ou¿\87\86䦥ßÉÇÌãà³íé ìè\9fâÛ¤ÊÃ\99¢¥\8a\97\85o\9cgWÆibötrèLMí@Bì8;Û<8ÑA9¹;/­<,ÒaQÙWIÌ5*Ø4+ã><ìKCÖ6*Ý2(å0'ã.'ß4,Ü>3Å1-ÜFEìQUíMWîNXøXbÿlrçLRò.2ø/9ð(5þDQîGOñUYÿ^cíDKß82é<8î<:â70Ù;0Ö:.Ý90é:5ß<7â:7å95Û4,Ú8-Þ8*è1)÷0+ó23ö01ö0-ê5,Ü@4Á7-ÍIGûv{ÿ[tþLlû;`îCc°LTYF5;D)JE/Qa<j\80Rq\8eVk\90Mg\91Ii\92Lm\96Ro\97Xt\9cVq\9bSk\97Lg\92J`\87DUw;Jf3G^0Hb2Pj:TH8YM=[O?^RB_SC`TD_SC`TD_Xhvr\8bxw\9fuz±jr³\d¬iqº~\86Î\9a\9dâµ·çÌÎÛÙÚÌàÜ¿ÛÕ»ÎŶ²§£\86\8e\83}{o\8dri¢i`Ù~yóvrø^^ñGHé>7àB9Ì>4ÄB5¹;,ÎI:Î?/Ò9+àBAû`\Ý@7Þ:0ä6-á4-Ó5*Ã5'º2"È>3ÓB?Ô=BßEOñWaøahãNRê;8ò;=üCIÿR[Ý49á8;øDGò46ê93ñ:6î73ä50ß<3Ú<1á81é62ã;8ç:6è94Ý5,Û9,Ü9*ç2'ò/)î53ó11ô1-ê5,Ý<2Å5-àTUûktõRmÿ;bÿ7`ÜSg\81LF[U?PN9NF3FT3]oEj\85Ni\8cHe\8fEg\91Ik\94Pm\95Vp\98Rj\92Lc\8cF_\88DY\80ASt=Tn>[rFVs=Wt>OC3UI9XL<]QAcWGbVFaUEk_Osp\8dww\9dtv©jo¯]e­em¶y\81É\8d\96Û\9b§Í«µÙµ»Ýº½Ü¼¹Ö´®Ê®¤¿\98\8b§utyjfevgb\83aX\9dZQÕphÿzuÿjgÿPJìE=ÜB8ÕG;¿7)Æ>.Ë>,ÒA.Ö=?Ò=9Ô;5Ü92å:2ß80Ò;0ÇB1¾B(ÅD/À:1Ä57ÛJQèU]êY`×HLÏ7,Ý;6ç=>ç:>ã6:ì8;ù25ÿ-1î71ï4/é-+å4.á=3ß>4å:3ì63ì46ï34í42à2+Ü8,Ý:+ã3&î2'ì63ð31ó2-ê5,Ù6-Í82ùgjò\gèJcÿ3_ÿ8e¼IVW@0PN7YL;LA/<I+N`8a|Ee\88Db\8aAc\8dEf\8fKi\91Rj\91Ne\8cI`\89G_\87H]\83H^|H_yJezO[xB\yC?C5IF=RH?]M=`R8^VAc_\on|wq\9dws¥gh¡^_¢eg´wuÉ\8a\86Ý\98\92ì\9d\9cÖ¡\9dØ¡\9dØ \9bÕ \98Ñ\9d\96Ê\98\90Á\85}¬lkpc^[oXR\84VI¢XM¹[QÙqhî\83\80\7fêdcçSQÇ3)Ä7&À7$Ç:(Ñ>.Õ9*Ô=,Ï8'Ú:,à:.Ú8+Ë:'¿?&Ã:2ËB:É@8¼6-Ä>5×QHÛULÊD;Í<!ß8(ð,.û'6ÿ)@ÿ(@ÿ#@ÿ ?ÿ :ÿ'<ò.8æ::Û94Ý<4å:3è62ì23é62â7/Ø6)Ú;(Û:&ß9#â7#ë4.ï4+ï5)ä7'Ú:.ÝB@ÿdtùKfÿ?aÿ6^ëHet7679$CD2FC28G0FI\1eX`;csNd\80Oa\86Cb\8b=f\8eEl\91Ni\92Fe\8dFe\8aGc\85Hd\83Jc\80Fe\81Gb~C\\81<a\86A4:,??7KB;UI;ZO;\UEecfno\83ol\97b`\91XY\92]`£lpº|}Í\88\86Ù\8e\8aÞ\90\90Ì\91\8fÎ\8f\8cÏ\8f\8aÍ\8f\89É\90\89¿\8e\87³}w\9d\7f^ge\W]^LvWE±ZSÔXXâheÞvmó\84}ÿ\83}ùngÄ8+Á:'½;%Â9&É:)Ö8,Î6(Ñ>.Ë3%×7+Ô6*Í:*Â;'Á7,Ã9.Ç=2Ê@5ÌB7ÍC8ÎD9È>3Ò7#ä6-õ.3ü)8ú':ù%;û#:þ 7ÿ 7ü(7ó6=ä::Û94Þ;4å:3é62î45ê65â70Ø6)Ù9)Ù:%Û9$Þ7$Ý5(á7(ß8&Ù:'Ô8,÷X\þSfúBdÿ5^ö>b¸DWI*'-8'6>)B='EA&Wa/\85\94is\88]`~J`\85@c\8c>h\90Gl\90Pk\93Jh\8dGg\8cIf\88Ke\84Id\81Gf\84He\81Dc\8bEh\90J-5(7:3A>9KD:PJ<TQHccmhi\85ba\8dQS\86TX\97ei²sxÉ\80\83Ô\86\87×\8a\89Õ\88\89É\86\86Ì\86\83Ò\86\81Ó\8c\84Í\8d\85¾\89\83§wt\89\8dOZhZQRfKh\D§PIÜQXê_dãpmâvj÷|tørgÂ:*¿='¾>%Ä;(Ê9(Ú6,Ñ9+Æ;(Ç<)Ï<,Õ<.Í7(É<*È<-É;-È:,Æ7)Í>0Ï=0Ð<0Ê6*Õ.&ê22ø/9ü-=ú0@÷1>û/;ÿ-:ü,:õ0:ë7:Û64Û94ß:4æ95é54ó57í76ã81Ø6+Ô8)Ô9'×8%Ø7#Ñ:%Ð>%Ð@(Ð?,Ø=8ÿ^iþCbÿ:eÿ/ZÜRkc28841-7.4@*<=\1dn^:\93¨m¬Ä\90\81\9dla\82I_\87@i\92Do\97Np\94Tn\94Kh\8dGh\8dJi\8bNd\86Je\84Hg\87Hg\85Ei\91Jn\96O&1#/4-664?<7GD;LMH\^k]a~[\\8cWX\91fh²v{Ï~\83Þ\82\86ß\82\84×\82\84Ñ\83\87Ç\81\83Í\84\80Ô\87\81×\8c\84Ï\8a\83\82~\95nlq\81QOg[KYhKeaD\93XHÉUUãX]íbgîujæaXÓE9É:)Ä<&Æ>(Î;)Õ7+Ò/&Í9+Â=*¾;'Ê>-âL>Ð:,Ì:+Ç:(Ç8'Ê9(Ì9)Ò:,Õ<.Ú>1×9-ç55õ8>ú2?ô.=í/9ë28î15ó/3ò5;í6:á55Ü94Ü94á96ç77é56ô5:ï77ã73Õ7,Ï9*Í:(Ï9(Ð9&Å;!Ä>#Ä@)Ê<.îIMÿPgÿ;cÿ2cõB`\90CI>=8:8;B449>(J\,\9b\9ee¬Ê\8a¥Ä\8b\83¤oa\85H^\86?j\93Eq\99Pn\95Tl\92If\8bEf\8bHh\8cNe\87Jd\87Gg\8aFg\8bEj\95Mo\9aR(0!).'/1.783=?4FIBQT]Z\s[Z\86cd\9duwÄ\85\86ã\8a\8cð\87\87ç\80\80Ö\82\81Ï\82\86Å\86\86Ì\88\85Ò\8b\85Ï\89\81½\84}\9fyrzfbYg_Lf^If`HhaEuZ?¦^OÕURýS\éZRÕ<4Ù8.Ø;,Ð9&Ð;'×7)ß4,Ì2&É<+ÂA,½<'Ã7&ãOAÉ7(Ç:)É<*É:)Ê7'Í5'Ô8+Ú:.Ø4*ä=4ö=Bñ2:ò0;ë1<ã6:ß76ïB>ô=9é;:å97à85Ý84Þ95æ::é9;í9<ô5:î87â;5Ð8-Ç:)Ä;)Ã<)Ä;)À<#¶8\1f½?)Í:3ÿXeÿ>\ø4Zú;f®IOR:03C6G78S/1ON2r\94X\9fÃy\9f¾\82\94²|l\89YWx?`\84>k\91Dl\94Ki\92Pf\8bEb\87Bf\8bHf\8aJh\8cLg\8cIe\8dFk\93Jo\9dRs¡V/3$.1(/1.36-9=.AE6MOLUUa\Zrih\90~~¾\8d\8dã\90\8fí\88\88â\80\7f\84\86Á\8a\8aÆ\8b\88Á\88\81´\85{\9eyn~od`h\NXeKd^HpYGq]Eq\?\90X?ÖWNþEKÜ94ß6/â6,Ý7)Ó8$Ò9'Ù5)á3,Ã7(½:(¿@-À;*ÔB5Ó?3È:,¿<*Å:'Ç:(Ê9(Í5'Ô6*×3)á90è=5í6:í4:ë3;å:@èMKù`[òPKå:3ß82ß82à93ä;8ä88ç9:é9<ë8<ï58ç77Ü:5È8-½9*·<*¶=*¶=*·=(­8$°5&ÜFGÿNaô9TëG`ÕJ_cF8ED07@+C5(O5$xxR\91³v\8cÀu\9b·\84\85\9frKd<Sm=a\80=i\8fBh\92Hc\90Kd\88Be\88Di\8eKl\90Pi\90Mh\91Kh\92Hn\99Jt¥Vx©Z:;)8:/8939;.>B+CG.KM?RQMXXNddlww\9d\87\85Æ\91\8eÛ\8b\8aÐ\82~¹}y«}}³\84\82³\83\7f¢~v\8dwmuna[k[LkZHb`Kh]Ko\Ky\J\89YC©R?ÑD:ã1-Þ5.ã5.à2'Û8'Ð:"Î<%Ô9'Ü6*¸>)±7"¾=*È9+æLBÕ=2Ã;+±=&Á9)Â9)È9+Î7,Õ7.Ü71é=9å84é:7ì::ê=?÷YXúkeÔG@Ð71á<8ß;2à91ã73å76ç79è8;é9<è7=î79æ:8Ø>6Å=1³:)­=)©<'©<'¦=(¡:)©9.éX]ôI[éHZÆSZ ZRHR:JE/@<\1fAR(`xF\83\94^\8f¢j\92µu\8a\9cvUfF?N1Se;c\7fBj\8fBf\92E`\8fGd\87Ci\8cHk\90Ml\93Rk\94Pk\95Mk\97Hr\9fNv©Zwª[ED2DD8EE=CF5EI.JM.OQ9USF[]8]^Nkjzzy¥\81\80º\83\80·xv\9eol\8bki\9bom\95ol\81mgii_Uk[Ko]Ir]JuYNl_OkcP\7f^M¢RG¸92Î4*Ù6'ß7.à4*à6'Ô8"Ê="Ç?%Í<'Õ9*±A+©4 ¾:+Î7.à=8èNFÇC4¨;$Å@1Ä<.Ë=1ØA8àA;á<8å97è88æ;4æ:6õPNáLH¾71Ã=4ÕB;Þ<9à<3â92æ95ê88ë7:ë8<è7=æ7<ê67â96Ô=6À</­:'¦;'¡;%\9f;$\96;(\95<*¬E<îelìN]ÑHR§ZP\81nP?Q9J9%WO+m\9e]x¼oy\97W\86\8aWw\81OBO39C+<F.O]9g\7fEk\8fEg\93F^\91Fi\8cHn\91Mk\90Mi\90Mq\9aTq\9dRp\9fOw§Swª[t§XTM=TM=TM=TM=VO?XQA[TD]VFb[IbZOh^\qflwkuznxtiqh]c^^VZZP[WL^XJd\Ig\Fj^Fm_EdhQwVE¢UK±UH¦J5¨=)Æ9/ß12Ü8.Ü8.Ú8-×7+Õ7+Ô8+Ò9+Ò9+·>-ª5#¬7%¾<,É6,Ó;0ÜJ=ÍD2ÛH@ÑA8ØC<Þ<7é77î87ä84ß>6ÅE8·9+±8'»@0Ç?1Ù?7è96ò67æ7<å8:ã:7ã:3á81ã:3æ:6å97è:<Þ<:ÎA:·?1¢=+\99=(\93;'\919%\80?+\903+Ñ[[Ï[^¬QN\9aZP\94^R\99_TK`\1fVm'\92®d\98³ly\91SXk>JV><B6>?/;?1:B3HY9a}Co\93Ij\93Gh\92Jk\91Tm\94Qj\94Jk\98Gn\9eHp¢Kv¨Sw«Yl\98][\87L^WG^WG^WG^WG]VF^WG`YIaZJd^Fd]Je]Pf]Vh_Zh_Zf]VaXOYWKRPCQN?TQ@ZUB_XEd^Hh`IdfQ~\P®[U¹C?À=5¾:-½9*Ä?.Ù7*Ú8+Ù9+Õ8)Ô8)Ô8)Ò9)Ò9)¸@0¦7#¡7!³>*Á<-Æ4'Ï=0ÔG6Þ44×31ß;9ê<=î5:ë14æ66Ü94³9*®6&­8&µ<+ÈC4Ø@5å95î66ë7:ê88ç:4æ;3â;2à;5Þ;6Ý98Ú<;ÒA<»;0¥7(\9b<(\93<(\8f:%\8d8$v9$\8e?2´QL¬MI\9cRI\93^P\93bT\96`V~\8f[£µ\81\93§rSi88J"<K.8A08;2=>.:>09A2GX8c\7fEr\96Ln\97Km\97Oo\96So\97Pk\95Im\9aIo\9fKt£RyªYn\9eRY\82HNw=c\Lc\Lc\Lc\Lc\Ld]Me^Nf_Of`FhbJicMhaNhaNgaKgaIhbHa^MXUDOL;KJ8NM9OQ<TVAXZE^\MsWK±f`ÎLNÜ9<Ø63¾=*«H)Ô7&Ö9(Ö9(Õ:(Ò9'Ò9'Ñ:'Ñ:'¹?0¥:&\968\1e£A(´?+Ã9,Ê6*Ô=2ð3:é49ä79ã68ç48ç7:Ý98Ç/*¬;)«<)©<'ª:&·:(Î>3ß<5è96î64í74ê93æ;3à=4Ü?8Ø@;Ô>=ÅB:·=2¢6)\99:(\91<(\8a<&\869%\857#u;'\86A1¡SG\9bSG\92ZK\8c\N\90^S\9aaX\81\8dew\85aBQ4-:&0<.7?4=@7::0;<,9=/8@1FW7e\81Gs\97Mq\9aNp\9aRq\9bQp\9aNn\99Jr\9eOu¤Ty¨Zq\9fV[\8aB[\84JR{Af_Of_Of_Of_Of_Og`Pg`PhaQjcPibOg`Mg`MhbLgaIgbEgbEf`J`[EUS>LK7EH5EI8EL<EN=OOCXQA{QA¹SNâFGã77Ë=/«B%Ð7%Ñ:'Ò;(Ò;(Ñ:'Ñ:'Ð;'Ð;'¸<0¨=)\909\1e\95>"¬?*À<-Ê3*Ù<5ñ8@ê@CÙ?=Í97Ä30È:6¸92©7,¢?*£@+£@)¤>(¬9&»7*Ë8.Ý@9ë:4é;4ç<2á?4ÝC9ÑC9Å>8¼;6¢:-\987'\929'\89;'\86=*\83<(~:'}6$y6%\8fL<\93QC\93XJ\8f[M\91]P\95\S\97ZUU]6=F'7C/2<34=8AF?DF8=<(:;+7;-6>/DU5d\80Fs\97Mq\9aNq\9bSp\9dLo\9cKp\9dLx¤W\80¬ar X]\8aG^\8bH^\85NSzChaQhaQhaQhaQhaQhaQhaQhaQi`[i`Yi`WiaTibPibPibOibOh`If`J`[GQP<FI6?F6>G6<G7BI9AK3QL/\9a`LÚ_WêHFà>9Í=2Ë8(Í:*Í:*Ï<,Ï<,Ï<,Ñ;,Ð:+¿:1¯>.\95\957\1e¬<(Â:.Ù@8çHBãEFÌ>:°:.£<-¢>/\9a=.\90=-\88?,\94=*\95>*\97@,\9b@+¡>+¨9(´8,À<0Ø;2Ü@4ÛC6ÕC6ÎD7»=1¨6, 3,\8f<,\8a;*\86;(\81=*|;'y:(x9'u6%\868,\96N@\8eO@\8fTF\97XO\94UN\98YT\96YTR[.OY4;H.5@/GRBX_MGK2>? ;<,9=/7?0EV6f\82Hs\97Mp\99Mq\9bSp Jo\9fKs¢R}©^y¤]b\8cJ`\8aJe\8fO^\85PSzEhaQhaQhaQhaQibRibRibRibRj`_j`^jaZjbWjbUjbUjbUjbWjbMjbMd_KYVCKL:DG6?F6=D48F/BJ2PE)\9afP»UGî_[ìIJå?AÈ:,Ç9+È9+È9+Í;.Î</Ï;/Ï;/É:6½=4®=-µA2ÎJ>ßJCæIDáB>ÐE@µ?5\9cA/\93H3\8dF2\86C0}C/vD-\87:*\87:*\89<*\8a=+\8f<*\93:*\9c;+¢<.³9.¸<0»=/¸=.¬8)¢8*\968,\92:.\86=,\83<*\7f:*}<*z;*x:+s8(q8'\91C9\8fK>\8aL?\93SI\98QK\98SN\96]V\94i`\81\8f^m}P@P)O^=apSNY;@G(<? 9:*8<.8@1DU5f\82Ht\98Nq\9aNq\9bSp¢Ko Ny¨Zx¦^e\8fM\\85Cg\90Nb\8bI^\83ORwChaQhaQhaQhaQibRibRibRibRja\jaXjbUjcQjcPjcQjbUjbWldQkbQjcQc^KWTCML:EF4AB28K-RB+\8bM@§F?°;4ãb]ôfeìSXØNCÍC8ÑD:ÖH>ÚJAÛKBÞKCßLDçMMÝNJ×NHÛNGáFBæBAäB?ßD?ÒGD³>5\99B1\8dF2\87D3\85@1~?0z?1\82:.\81;/\80</\80=-\7f<,\82:+\84;,\87;+\92:.\97;.\9c;+\9f;+\9a9(\929)\89:)\84;,\80;,~9*{8(z8*x9*u:,o5'r:-\8cJ<\84K:\87RB\96WN\98QM\97VR\88bWsfSQ`7EV*Zm@awIL^68G(<F.9=.9:*7;-9A2AR2a}Cr\96Lq\9aNq\9bSm\9eLu¦Uy§^g\94QZ\84Dc\8cJf\8dJe\8dG[\80MPuBhaQhaQhaQhaQjcSjcSjcSjcSkdTkdQkeMkeKkeKkeMkdRkcVlcTkbSlcThaQaZHUP=NI6HC07J*mF5¶HIÅ3=É=@ÈLJäjgÙYZÔKCÍD<ÑF?ÎA:ÒC=ÔC>ØD@ÙEAà?DßEEàHGãCCê@Cí?Aä@?ÛB<Ó??µ82\9f?1\8e?0\89;.\8990\8781\87:4\80;4~;2|<2{=0w<.x=-w<,x;)};/\82:,\889*\8f9(\8e8'\8a;*\81=*~=+\808*}5'z4(y5*t4(s7,n6)t?1\87R@\7fR?\86XH\8dSH\97RM\8fVOvaPBL1L[<asM\sELd47L#0@#:E77;:;<,7;-9A2=N.Yu;n\92Hq\9aNr\9cTo£Qs¦Yj\99Q[\88G`\8aJb\8bIf\8eHb\8aAZ\7fLNs@i`QjaRjaRkbSjaRjaRjaRjaRjcSjcSjcSjcSkdTkdTkdTkdTq`PqdTneVicUgdSdbM]Y@QK1MD'lP:\9cdW¤LH»KJÈHIÐHHÓIGÓGHÏ?>ÓD>ÌD8ÅG8ÈH=ÔDCÜ?FáCDáCBàECáFBâDAáB>â@=ãA>ÊD;±;1\98</\84?0}B4}?4\84:1\8b82\85<-\83;,\83;,\80;,\7f:+~:-~:-};/}9.}9.|:.|:.z:.z:.x:-w9,u9.t8-r6+p6*m5(l4'l7)wB4\81UJ\88QJ\93OL\96QL\8dRJ\7f`LedFXjD^xKPi?Mb;ET58B)5:&>?/@>11<.5;-:>->C,Zf@p\89Rr\97Rr\9eQz¡bu\9c]`\87H]\84Ea\88Id\8bLd\8bL_\86GXzGJl:haQibRibRjcSibRibRibRibRjcSjcSjcSjcSkdTkdTkdTkdTrbSk_QmeXieYmk^\85\82s\88\83pwr^MW<CE-K@,Y=/`8,k;/yC7\85M@¨SLµLHÈDBÔC@ÒB:ÔE=×FAÛEDßCDÞDDÞFCÞFCÛF@ÙD=ØC<ÙD=ÓF=¾B8\9c:-\85<-\7fA2~?0\83;/\8990\83;,\83;,\82:+\7f:+~:-~:-};/};/|90|90{8/y9/z<1y;0v:/v:/t8.r8-p6+n5*m4)j4(j4(u?3\87QG\8dRJ\92SL\91VN\88\Qu^LiiO^mNG[8?S0CT4ES9?I17?*:>-9;-3=46<2:>/<A*R^:h\81Jp\95Pu¡Rx\9f`d\8bL[\82C[\82C`\87Hb\89Ja\88I^\85FRwDDi6haQibRibRjcSibRibRibRibRjcSjcSjcSjcSkdTkdTkdTkdTqeWnf[kg^\81~w\99\98\93µ²«¸´©®¨\9c\7f\82oQVB=I5:G3<K68E39A2=A3O<-\81JCµMNÑFKÚACÜDAÝE@ÜD?ÞDDÝEDÜDCÙEA×G?ÓF=ÑG<ÐH<×@9ÈD8©?2\8e=,\83@/~?.\81<,\87;-\83;,\82:+\7f:+\7f:+~:-};/};/};/z:0y9/w9.v8-v:/u9.t:.s9-q7,p6+m4)l3(j4(g3&g3&q=0\90ME\91RK\8cXM\82ZNs\L^WDRWA@L65A-2>*6B.=I5>J6:F26B.2>*2;65:38;0:?)KW3d|Hs\98Sx¤Un\94WY\7fB[\81D\\82E^\84G_\85H^\84G\\82EQuEAe5gaQhbRhbRicShbRhbRhbRhbRjcSjcSjcSjcSkdTkdTkdTkdTlfZmi`\87\86\81¶¶´ÐÒÑììêïëèãÞÚ×»°\9e\8b|c^JAI2=J6>F7=>6=966A3J70\89LKÅbeÌTU×PMáIFæB@ÞDFÞDFÝCCÛCBÙEAÔE=ÐF<ÎH=Ý@9ÏB8µD6\91:)\86?-\80?-\80=*\84=+\80;,\7f:+\7f:+}9,};/};/{;1{;1w;1v:0t8.r8-q8-q8-n8,m7+o6-l6,j4*h4)i5*e3(d2'm;0\95LF\8fSK\81YMo\MYVEFJ99B12:+47017-/7*2:-9D4=J88G21@+-63160690:>-DO/ayGt\99Vs\9fT`\83KVyA[~F[~F_\82J_\82J^\81I]\80HMqE=a5icSicSicSicSicSicSicSicSjcSkdTkdTleUleUleUleUleUgg_\8c\8d\87ÃÅÂéíîõùúýÿþÿþüüøõþãÐÜʲ§ \83efGGJ/HC0H92L76;@<LDA\83kgÖ¯¨à¤\9aÄf^×OOéCGØFGÚDEÛACÚ>?Ù??×B>ÓB=ÏB9ß@:ÏA7·A5\96:+\87>-\81>-\7f>*\80=*\7f:+}9,}9,{9-|:.z:0z:0z:1v=2t;0q8-n8,m7+l8+l8+j9+k7,o;0j6+e3(e3(_/#`0$g9,\8bNI\85TMrXKRL<;D14A02=/4:077557216//7,/;-6E27I32D.+4/.3-36-9=,>I+`wIv\9a]l\97RX{ESv@WzDY|F^\81K^\81K\\7fI]\80JKiG7U3gdSgdSgdSgdSgdSgdSgdSgdSjcSkdTkdTleUleUleUmfVmfVpts©­¬Øàâôüþùÿÿûÿüþÿùÿÿø÷þÝçñÎÌØ°\9c«\80dnIFJ/JG6I@7SKI\85}{µ°¬ßÝÑÿöèÿÚÐÖ{xÊLPÍRKÉHCÑGDÖDDÖ>=Ö@?ÕA=ÒC=Ø?9ÎD:¸C:\9a<0\89=/\81>.\7f>,\7f>,~:-}9,|:.{9-|<2{;1z;2z;2p:0n:/l8-i7,i7,h8,h8,h8,k90j8/j8/c3)b3)^/%\0%j>3}VOlOGMA58:,/:*1=/5=27:179449338119..9+2?.7F37H55?4.4*.1&48)>H/e{Ux\9aga\8aPTtBRr@TtBUuCXxF[{I\|JXxFE[D-C.gdSgdSgdSgdSgdSgdSgdSgdSjcSkdTkdTleUleUmfVngWohXt|~¦®±ÔÞàñýýöÿýúÿùùýïö÷çñÿçïüàçñÏÆ̨\94\9axTZ@DM:AL>\83|v¹´ÙÑÎîíèö÷ïÿûðÿóê굯¼eT¶VF¼MBÃD=ÉB>ÎC>ÏD?ÎC<ÔA:ÊE>²A9\99<4\89<2\81=0\7f=/\7f=/~:-|:.|:.y9/|<2z;2y:1x92k9.j8-i7,g7+g9,g9,e9,e9,h8.f6,h8.d5+c4*]1&]1&qG;WMD@9/99-6:,3;.4</69.57,2:/2:-19,/:,.9)/:*2?.8E49D34;+04&04%=F1m\82cr\92iNuFMm<Nn=Nn=Pp?VvE[{J]}LQq@9F<$1'feSfeSfeSfeSfeSfeSfeSfeSjcSkdTkdTleUleUmfVohXpiYhqv\92\9d¡ÊÕÙé÷÷óþøùÿöûÿîúüçû÷îÿöêÿñáæѼ³¢\8emfTVYNhsk«¯ áÚÒþêëÿóöÿûúõÿöõÿñûÿóÿÝÃÊ\83m«R@¸L@ÂG?ÇG>ÈE=ÆC;ÒE>ÅD>«<5\96<4\89<4\81=4\7f=1\7f=1};/|:.|:.y9/z:1x90v70s7/k9.i9-i9-g9,f8+d8+d8+d8+g6/j92h91m>6k?6e90|QHvKB4;33;039/36+47,35(35(46)-8(-8(-8(-8(.9)-8(.9)0;+7C-<C19=.04%>G4fz_YyTAg>Jg7Nk;Kh8Mj:VsC[xH\yIIf6/83 )$heVheVheVheVheVheVheVheVgfTieZkd\meXidNmlXghb~\81\88\9f©ªÇÏÑëïðüüüÿþúþÿùùüó÷ýñ÷úñøúì÷ùáØÜ»¤ª\88bmOiw`\8c\9d\8dÅÆÁëìçøùôúûöþÿúþÿúþÿúþÿúíÿÿÿþüÛ®¨®VLÁH=ÊF:ÈF9ÄF:ÁJ2µL6\9cG2\89F5\7fD4\80@4\84:/\888/}:1|90x8.w7-v8-w9.s7,p4)h9/g8.g8.g7-e5+h8.i7.h6-k4/m80k;-hA0fJ5kYE\80yfihV3;.2:-19,19,08+/7*/7*.6).5-.5-.5-.5-/6.-4,-4,/6./;14@67C54A0<I5UcLIW=ES9Ie?Jf>Hd;Jg;UqH[wOXsR<W8&.1"*-heVheVheVheVheVheVheVheVgfTieZkd\lfXkiRjlWsvo¤§®ÌÖØóûýüÿÿþþüÿþúýþöô÷ìíóçñõçóöãîñÖÑÒ³¤§\88\80\84m\8f\96\86®¸­ÜÝØö÷òýþùþÿúþÿúþÿúþÿúþÿúûÿÿýüúÿûóÿÚÊ·zg¢K8¿QBÂH;ÇC6ÁH=¦?6\95B:\86A:\7f@9{?7z>6w=2u<1t;0q;/p:.o;.m9,k7*m80j8/i7.i7.h8.g7-g8.i:0i=4g=1iB1fE2gQ:ocM\8a\88s[^K19,19,08+/7*08+/7*/7*.6)-4,-4,-4,-4,-4,,3+,3+-4,*6,,8.1=16C2:G5?M66D+>L3F^<Jb>Ha:F_8UnG^vTTkN2I/%-/"*,heVheVheVheVheVheVheVheVheTieZkd\lfXkiRnp[z\7fx­´ºÝçéùÿÿúþÿÿÿýÿÿúùûðèìÞÞåÕçìÖëïØêêÐÕÓºÆÁ­À½®ÐÍÆáàÞñòíüýøþÿúýþùþÿúþÿúþÿúþÿúÿùüÿÿý÷ÿúóÿòýüçɦ\90 WD³P=Å@9ÃD>°=:\9e::\8f>=\80@>tC<mE;q?6q?6o?5o?5m>4i=2h<1h<1q60p70m6/i7.i:0f:/c;/f>2`D6dI8cJ4_K3_S9okR~\83lAJ519,19,08+/7*08+/7*/7*.6)-4,-4,-4,-4,,3++2*+2*,3++7-)5++7+.:,0=,4A/1>*4B+;M3DW;H[=K^>XkMbtZPbL+<)#,+ )(heVheVheVheVheVheVheVheVheTkdZkd\lfXllTinXovn\9e§¬Úäæ÷ÿÿûÿÿýýûÿÿ÷ôöéæêÛâé×æíÎçëÐçåÎÜÕÃÚÐÄêßÛøîïÿöùýþùÿÿûþÿúþÿúþÿúþÿúþÿúþÿúÿüúÿÿýñÿÿíÿÿóÿùÿÿíìȲ¬t[µN=³L=±I@ =7\94<8\85@9uC8mH8q?8q?8p?8p?8qB:k?6j>5k?6r71p70m80h9/c;/c?1aA2^A1WL8f[E^T9ZS7YX:nrWjt[0?(3;.2:-19,19,08+/7*/7*.6),3+,3+,3+,3++2*)0()0(+2**4,*4++5,,6+-8*4?/8C36A01@+8G0@P6HX>VfL_nYJXG(6'&/,#,)heVheVheVheVifWifWifWifWkeUle[le]khYlnViqZlxn\92 £ÇÐÕîöùûÿÿþÿúÿÿ÷øúìò÷ãèðÙêñÏçêÍâàËÝÕÊçÙÖøêêÿõùÿûÿþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúýÿ÷ýÿüýþÿýþÿÿþÿÿüôÿÿìÿõÙÖ¡\82\9b^B\9fWA\9eO>\8eA1\84A0xA-qB.s>8t?9t?9r@9r@9p?8o>7m>6l:1m=3i?3d@2_B2_H6M;'F5!LN6FI.Z[<^_@\_@sy]KX>0>'5=04</3;.3;.3;.2:-19,19,07/07//6..5-,3++2*+2**1)*4,)3+)3*+5,+5,/9.7A6>H=7D23@.4B+AO8P^GYfTCOA,8.'0+&/*heVheVheVheVifWifWifWifWkeUle[le]khYkmUis[lyo\96¥¨ÊÓØï÷úûÿÿþÿúþþôøûêðõßäìÔÜâÀÚÚÀÞØÊåÜ×õéëÿôøÿùúÿüüþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúöÿüûÿþÿûÿÿ÷ÿÿùÿÿûùÿÿôöÿîÿüãûåÍʨ\8f\91eL\83Q:zF0xE0p@*sC9rB8o?5n?5k?4j>3i?3h>2cB3cC4`E4ZE2WF2aV@QK3HD+=G,<E(CH(_bCknOkoT<D,9B-8@37?26>16>17?27?26>16>15<44;33:23:207//6.,3+*1))0))0))0)+2+.5.+2+070<C<>L;;J73B+1@)BQ:L[H@N?/<2,6.*4,gdUgdUifWifWifWifWifWifWkeUle[le]khYjnUfrZeuj\91¥¦ÉÒ×îöùúþÿÿÿûÿÿôþÿîôùâãìÏÔ׸ÏÏ·ÜÕËïæçÿ÷üÿýÿþÿúýÿ÷þÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúúÿÿýÿþÿþúÿý÷ÿûõÿýøþþüûÿþþúùÿý÷ÿüïÿòáâкº¡\8b\98{i\85fTrQ>iH5bC/dE1`D/aE0`E0`E0[J6ZK6VK5QK3NL3qtY`fJCL/:G+@I,CH(MN/xwY__EEG1>A.8@38@37?26>17?27?27?28@39@88?77>67>66=54;329107/-4-+2+*1*+1-+1-,2..400626G4=O9:L44F,5G/=O98I7,</+5,)3*fcTgdUifWjgXifWifWifWifWkeUle[le]khYimTgs[ewk\96ª«ÔÝäóûþûÿÿþÿùýýñûþëðöÜÜåÈÏϳůÓÌÆîåêÿùÿÿþÿûÿùùÿôþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿûÿýþÿ÷ÿ÷óÿòõÿóùÿøÿýÿÿúÿÿûÿÿýÿüýÿøþôþÿóÿÿïÿûìÿöéÿîÔò\98bQ7ZJ0[K1[M2\N3[P4UQ8TP7PP6KN3LR6YdFCP2=J,?L0GP3HM-[Z<ieH^ZAXVALI8;C6;C6:B59A47?28@39A4:B5:A99@89@88?79@89@88?78?76;5271.3/-2.-2.-10-10-10(;%6J1;O49M16J/:M78K8-?/,6+*4)YgM]jPblTglVghVifUkeWmeXjgVkg[jf]hfWfkUdp\m~x§ºÁÚâåòûúùÿùûÿñ÷úçóòÞêçÔØÕÂÌ¿®½±¥Ç¼ºâÙÞûöýþýÿüýÿúþýýÿþýÿþþþüþþüÿþúÿüùÿþùÿÿúÿýúþýûÿÿÿýýýÿýüÿüöýóêÿòçþüÿÿÿýþÿûúþýþÿÿÿýÿÿþòÿÿäùù߶µ\99SN0QK+UO-TO/QP2PP4ON2PP4KO6EN3FP5@I*CJ(HN(PT1RV5]]AZZ@XX>ZZ@XY:UT5LG1FD/A?0>@3;>38@38C57D38C56A36A38C58C58C59D6<G99E;8E48A05=0292/;/1D&;U&Be-@_6<T<;N;?Q7H]>D\<0H.*4)(2'YgM]jPblThmWjkYkjXmgYnhZkhWjfZie\hfWdiSdp\u\86\80¢µ¼ÓÚàñùû÷þ÷ó÷éëîÛÞÝÉÒϼÅÀ­Âµ¤É½±ÚÏÍïæëýøÿþýÿüýÿûÿþýÿþýÿþþþüþþüÿþúÿýúÿýøÿýøÿýúýüúÿÿÿþþþÿþýÿúôçÝÔõçÜþüÿÿÿýþÿûúþýýþÿÿþÿÿþòÿýàüüâµ´\98QL.RL,UO/UP0RQ3OO3ON2NN2KO6HQ6GQ6EN/KR0U[5`k@}\88`ovTQV8MO7OO7SQ8VU9WR<OM8GE6@B5;>39A47B47D38C57B47B48C58C58C5:E7<G9=I?=J9?H7<D7<C<5A5=P2Tn?Z}EOnE:R:1D1>P6OdEOgG9Q7/9.+5*YgM\jPdnVhpYlo\mlZliZoi[liXieYie\igXejTdp\s\84~\95¨¯ÊÓÚëõ÷ñ÷óéìáÜßÎÎ͹ÆÁ­¼·£ÐóãÖÍóèæÿ÷üÿúÿþýÿüýÿûÿüýÿþýÿþþþüþþüþýùÿýúÿýøýúõÿüùûúøýýýÿÿÿÿýüÿûõöìãýïäþüÿÿÿûþÿúúþýüýÿÿþÿÿþïÿûÞÿÿê¹·\9eTO2UN1UO/VQ1RQ3MN/ML0MM1KO6JS8JT9NW8U\:djD\8c£m\9a°\7f\8d\9etgrPKO6KJ5OJ6SN:TO9PN9KI:DF9=@59A47B45B19D68C58C59D69D69D6;F8=H:=I?=J9>G6<D7:A:6B6=P2Oi:Tw?Ji@2J2*=*6H.K`ANfF9Q7*4)$.#
\ No newline at end of file
diff --git a/testimages/testimgfst1_4.ppm b/testimages/testimgfst1_4.ppm
deleted file mode 100644 (file)
index c4eda85..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-P6
-57 38
-255
-0/-51.72.92,80-80-80-80-5-*4,)5-*5-*1.'41*63,96/B<0H@3JA2MA1YB4\86C3«?2ÀF;æCHñAD÷:@Ù?=³@-°?-¦?,\98@*\91>.\90=+\93=,\94?+\99?6¸B4±E9_>/;5572/62/41,.0-0/-5,-=13yD@\9c`l\7f\7f±XT\86PGbopu\8e\91\86bcSYSa,,,0/-2.+3.*2-*2-*2-*2-*2-*1,)3.+3.+41,41,52-850<5-@7.C9/I=1JG6fA/\84;*¢E6ÊE>è@?ò;=ÁB3ª?-¨?, ?.\94?+\8f>-\8c=,\8b<-\8c=.\9eB3ÂA;ªPHPF<@6494043.02--3/02/21/3/.P5*sTY|~»YX\9eJ>fDCUMVQQYNaXQ,-/---.-+/+(.*).*)/+*/+*/+*0,+1-,1-,1-*2.+1-*40-:2/=4/?4.E80J=5V93r7/\92;1¦A5ÇD:ÙF?ªC2\9d@.\9d=-\96=-\8c=,\89<,\87;-\84<0\86B7\9eH;¶OJ¡}mhseKI=77-01+/0+.0-//-00.00.:/7jhi\8c\92Äv\82¶ho\7fiyx\82\97\88j{k`Z@,03./1....-+-+,+)*+)*+)*+)**(),*+/-./+*.*)0,+3/.;23<21<1/@2/?82A83X6-\7f;.\92>4\99A3­C6\9d?3\92?-\93;-\8f<.\87;-\859)\819+\81>5\85IA\96KE¨nc\8d¥\85|\8fyZfR?E710+2)*1++1++1-,1-,6,-cqM\8e\9c\8d\96º\96\9fƧ\8a²\8d\89«\86g~bOO312,32-74/72.7/,3--/-.,+0/(//)+.-+/0*///2.+70*=3*?6->5.<1-<1/D1+B0.D,*\4,x>0\8f:3\8b?2\8dA3\90<1\83>.\88<.\80;+w;0v>/\86C:\86MB\96\X~\95x\8b¨\8a\80\9d\81^\8bbWpS>D:.-+-)*1(-/*0+,10,+^cL\84\9al\86¨u\8e°}\82¨w~\9ey`r\?A4671872=:5?:6?74;629527327./50-41,43.540;62@7.G:1G=4C90?61?61D65M34A9.K8*m61\89==\84A;\84=7\81B1\85;.\7f<,{>,¨KF\8aG>tM<\81VFxwX§xh\9e\98~\85¡{\86\8fpx\90pasYGD39.*./)1-*=&,H@5clQm\8a^r\98er\9cjw tt\93qZsUD;4893=<7B?:D?;FA;F?9F?7D;4B92B92<7194.96/@9/F<0M@0M?4H;2B90?;2\:8\9cEK\84@7¤EA\9cD6¥=2¤E3ª@2©<A\97D@y=2¶:DÔ@>ªVLjeG\85kPæOVÿ+Iý;UôL]äWgØclÐ`lÐQfÁL_\8fDKR3.E=2cZ9y\83`s\8cdx\93f\84\9d\7f\8e¤\8f{\91|YrRURC671;:5B?:GB>HC=LE=MC9L@4H>2D<1A:2<71<8-C;0K?/O?/M=0F:.A:0A?3¨EHÌ17 <%°=+¥:0¶A8¨</»?5Ô<1÷.4â=7æ42Ö6*¾NC\91]HÖ[Vè>AÑFAô>Jü5Hþ9Uÿ;`ÿ?mûArÿFjùTr»WalLA\8b~u©«¨«³µ¾¼¿ÚÒÏÙÏק©¦`w][eJ10.762<<4BB8JH<NL7PPHb`xWNQH?@A96=82>71>;6F?5P?-A>-D65>;4h;5«;-¡:'«>*»9+©;,¬>-·?/Á;/Ñ7+Þ7.ô.+Ú7&Ù6#Ë=1ÚFBñADÒA>­<.ÇG<ó@FøDMýAYÿBjýIxÿKwùVuóJk\9ennÓ»¯îëòþäýÿóüýøõöíðÒÎÍ\97\9d\93\95\9b\8d74/52+:70@=4OE9TK<ecq\96\9cÖ\94\94Ú||®`^vECH<;@B<,G@-EB;I?G@IHLB8\92B;ª?-­>+¸9*Í9/È91Ç9/Î:0Ñ7-è1)ð/*ò/)Ö7"Ö5#Ó9/ÜMEÅE:»<)»<-ÈA;ÛIJïDJüK]úEdÿNwûUyýSnù\mß`iÙ\9e\9aÿööýüÿÿûúÿûøÿñôêßÝäâÕÐÙÔC?4<8/84+>93MC7WJ:a\p\94\9e欶þ®µû\9f ãvtµbX\8dGDWD@=[OS\89s\9a§f\84¾IR³<(­:(º;,Ì9/Ý:3Ú72ä=7Ý90äD8ñ91ú**ì1,Ö2&Ê<(Ó:,Ú?:×EE½<'Á9+ÎH?ÅIAßKGæOTøWiþQoÿTwÿXoý\kíWc§unóÞÛ÷ÿýÿüýýúõûðîåØÐÿüèæìèPJ<IC7B;3A:4GC8SG1[T[\8b\96Ωªü¬¯ü¥©ó\9a\9eå\86\8bÍuw \92UgØHQåDIÇA8àB?Ï>9Â@2Ë=1Ô7.Ù5,Û:0Ú6,Ô4&Ì9%Û;/ü47ç55á55ò21Ü6*ßK?ÖDEÔ=6Ã;/½@.½>-ÃE9ÎMHôdmúXmû[sëtxôftÈ\89\82baOßÂÄýûþÿúÿúÿöÿþ÷ôîàÿÿãööêXO@TK<NE6LC4JF:VK5]V]\87\8cÃ\9d\9cì\9d¥ø\9d¦ç¤\9eè\98\99ÚÁn\88ä=Dâ?BÙ=AÌB?è=CØ:9È?7¿A3Ä7-ß63Ý7+Ý7'Ã8#Æ8,Ú91Ë8&Ý2(à-0å/,Õ8'ÔC2ÝD?æTTÍ:0Á:'·>-´<.¾@2éf^ïijóboöllþbo¶\8b\84[iFãÑÇÿüùúþýßýåôýìÿøè÷ïÚþýùZN>YM=WK;WK;SK>YL9ZRPsr\94\84\86\8c\8dÐ\85\87Àqs¬¤Ymù7OáFAí>KÒDBÁB9Ô97ÌC9Á9)¾;'Í:*â6,ó04ô02á34æ2>í/1Ë8(Ñ9+Ý<2ÊB2Å9(×:1ã03Ö71Ò>2ÇC6¯;,¬<.®=-Ú_Xïlr÷nxÿpwûNb½~yx\8fa×ÖºãñØÃÚ¾¢Í\9f»Ô­äãÎêÙÑßÑÈZM<ZM<XK:ZM<\L=^O<[OC]RVh`\85\82\97|³¥i\9c½>5ÝC9ö<?âAG¸<2¸@2×96ËC7Á:'È;)Õ5'ì7.ç2'ô*&õ&.ÿ\e8ò.:ç6<ó08ô-0Ü:5Ý>:Ý;8×4+Ç8(Ç:0ÔJ@È;2Ë80¼:,ÊOH÷x\7füy\81ÿkxÿE`¶mdp\8bX\84\90hp\8fcz\9fl\87µw\92»\7f¤´\8fνµ¯¥¤ZK8ZK8ZK8\M:^K<_N<_P=aP>cQ_uq\96º\80\96òZiÿ9PÓCCæAEÑB<¯;,»=/ç9:âH@ÏG9Ì8,ß6/í1/ü,<ý(<ð,Dü/XùS_ñIZÛ4>´;*ÍE9ÓD@ÑA9Ê9(«<(¹=1Ø?:ë51ù-.Þ7.Å@7øz{üz\82ýdvùA[\95VEi\7fP\82\91h~¥p\81©m\86¬o\83µn\8f­yÉ° §¹]L8]L8]L8]L8^M=[O?^RFfSOkZd|\83¹§\87¸çwsôP[ñALÝ:;Ã?2­>-Ç<5Õ7.Ú9%äA:Ñ=/ê86û7Eö*-õ)*ì)/ó=LôT\ß@=º?0§8-¹>9×CCÐA9Ò91Ï:6Ý>:Ü;3ò00ô02ë2-Â:,î{xþw\85ÿQnôAaqM?j\8cPz¢f{£g}¡c}¦j}­a\89²p\89¥\7f[gg_N<_N<_N<_N<`N6\SNql\82xq\9at|ª\87\8bÒ¥\95¶\8c|ÏSIëGHä:;È@2´91ÉYMÃ?3Ý6-â70á?0ì1,ú9<ôNRå<?åBEÓ:=à:>ã4;ðW\ù_kàRNÞ@?ÜG@Ø93û+9ü7>Ý4-ê5.ù.2î1-Â8+çtqûj{ÿAcÓCZWQ9m\89Vw\9dbr\9a[w\9e_y¤_x§Y\82ªd~\99las]\O>^Q@_RA`SBaTNnj\83wy²mq¸\8d\8cÜÆüäÞ¢ØÑ\9d¬\90xÃe[ìRTè:;Í<7¸G9ÐVIÕ4,å>8Ü6*è0(ã60ÚACóS[úZdø]cú2<ô1?ùU^üXaá<8â64Ù<3â94è8:å63Ý6-ð0+÷03ñ1.Ì9/ädeþWsû?b\94EHCG0bwLp\92Vj\93Oq\98Yt\9cVo\99Og\8bKNh8G^4UH8]P@bUEdWGpk\89sv«cj²|\83Ë¥«ÛÆÇÙËÅDz¦°yxt\8bhbÐoiübbîE@ÐB8Ã>/Ð=-âFGÜ;3ã60Ì:-Â=,Ë;;åMYèSYã:7öCIä7;ù59î73é30ß<3è64ê67æ40Ü8,ì1(ñ33ï2.Ò80ò_gûBdêCaaK=RG5LZ7g\85Ie\8dFj\92Sj\91N`\89G[|E]tHZuB@@6TG>^SAjgrol\9b`` qrÂ\8e\8aá\98\97Ó\99\93Ó\98\90Ë\8b\82±n_drWL¸YSãtmözxÛKCÁ8&É:*Õ9,Ò9+Ú8-Ç<)Å;1Æ<2ÎD:ÏF<Ù7(ø*6ÿ'?ÿ!<ÿ#9í6;Ý:5ç85ì44Þ6-Ú9'Þ7$ç5+ã7)áB>ÿQjÿ:a\98;F8<+BA-_h=g~Rc\88Bk\90Kj\8fIf\88Kd\81Ie\81Fc\88C/4-A<8OJDabwYY\8dfh³~\80×\85\86Ö\86\86Ì\86\81Õ\8d\84Å}x\8fxUS^bG¹SQèagìqi×K>Ã<(Ì9)Ô6+Ä;)Ô@2Í9+É:,Ê8+Ò;0Ò:/é24ù/=ó1<ø/9õ1;â66Þ95é77ò59Ý6.Ò9)Ô9'Ê<$Ì?-÷MVÿ:dÜB\F678:-de;¥¾\85s\91]f\8cCq\96Sj\8fIi\8bNf\85Ih\88Gl\96N-0'34/@B7TT`b_\8a\83\81Ô\8b\89ê\81\87\87Ç\8a\83Æ\84z\9fndbd_Km\H\88[DêQTàA=Û7-Ñ8&Ý5,Æ7)À=+ÔB5Ç9+Ç:)Ì6(×6,â92ð5<ì2=êFGïB>ä86á96å99ë8<î68Ö92¿:)½<)¸:$Ç=3ÿG^î@akC;><0[J8\8d²o\95±~YuEe\89Ah\91Ke\88Dh\8cLi\8eKj\92It¢WA?2??5EG/RPC]]Qzw¢\88\85Èyv£xt§yq\88ob\n[Ll\Mu^N¤L@Ø7/á4.Ý5(Ì<$Õ9*³:'Æ:-âE>¸=+Ã;-Ï;1Þ;6ç98é:7ïLMÔIDÙ;8á:4æ66ê7;è7=è8:Í=4®;)¥:&\9e:*ÌOMçHZ£]SHG3R^6v\98\\87\98bWdHGT6i\86Dc\91Hi\8cHl\90Pn\97Qr\9eOv©ZZQBZQB[RC_VGd[Jj_]qeij^`ZWNYSGaYFi^Hp_O¯RK³?0Ë80Û7-Ù7,Õ7+Ô8+²:*±9(Ê7-ÓD6Ù;8à<:í49â96¹;-´;*Ð@5í76é6:å95â92ã99Ü<<¸<2\9b<*\918&\86:,ÁUU\9fVO\98_Vp\84I\84\9c`Rd:>D6<>1AM7j\88Hl\94Kn\95Tl\96Jq¡Mu¦W]\86Lf]Nf]Nf]Ng^OiaLiaNiaLhaG`[HOL;JK9ORA^TH­UQß;<¹@+Ô8)Õ9*Ò9)Ñ:)°<-\99;"º<-Ñ80ï7?Ü9:Ø58Á61§>+§<(¼:,Ý;6î85ç<4Ú@8Í=<®<1\969(\89<(\838%\82?/\99SG\90ZN\96]VcmJ6A08?7>>29;.>J4m\8bKq\99Pq\9bOs\9eOz¦[b\8fJX\7fHi`Qi`Qi`Qi`Qj_]j`WjaRjaRiaL]XEFI8?E7AI4wT>ÛVQàA>Ë9*Ì:+Ï;-Ñ;-¾;3¤;(ÈB7âE@ÍB?¡@0\94A1\83@-\8e;+\93=,\9c;+¬:/É<2É?4¶</\9d6-\89<,\82:+|:*u7(\91D:\90PF\98UO\97]YdoE@M1U^I@C(9;.>J4n\8cLq\99Pp Lz¦[h\91Od\8cMY~Ji`Qi`QkbSkbSlbXldQldQlbVnbThaQWQAHE4MG/¬BBÉIHæ^`ÒG@ÒE>×FAÛGCáGIÝIGçACáB?Ä>;\97A2\89=0\82<2\81;3\7f=1};-\80;,\8a:/\959,\91:)\84;,\808*{5)v6,q9,\87M?\8dUH\97SPn]MP`;YoA;L*:@49;.<H2g\85Er\9aQr£Rj\97R`\88Ie\8dGWyGi`QkbSjaRjaRkbSkbSlcTlcTqaTldYpm^lfPSK4yK>\94A=©HBÀHGÐB>ÎE=ÙCDáCDàECÞC?ßB=ÄA9\91:0\7f?3\8781\84;,\82:,\7f9-~:/}90|90z:0x:/t8.p6+l3(p:.\88QJ\93RN\82[LbiJNd>HW89A,=>04<1<?,arFr\9aSs\99\]\83Fb\88K`\86IOq?haQjcSibRibRkbSkbSlcTlcTnf[\8b\88\83þÎÉÃ\92\86xHM9<G6=>6V?7·PSØJIàEAÞDFÜDCÖE@ÑG=ÔA: >1\82?.\83;,\82:,\7f9-~:/}:1y:1v7.s9.r8-p5-l3*i3)k7,\92OI\80ZO\UE@G74:,6>/<G65A-284:</Vg=t\9cU`\83I\\7fE`\83I^\81GIj=icSicSicSicSkbSmdUmdUmdU\84\84\82ßãäúþÿÿýúîçË\9e¢\7fNQ6K>6XSP¼©£ì¶¬ÚUXÓIGØBCØ@?ÓB=Õ@:©>4\85=.\80=,\7f9-|8-}:1{;2s:1m7-l8-j8-l7/g5,a1'd5+~QKSG94?/5;168516/1=/7F307046)Q`?o\95ZUuCWwE\|J\|J>V<gdSgdSgdSgdSkbSmdUmdUpgX\86\8d\93Þéëöÿúùûí÷úéåßÅ\83~hQYL´°§ôææûúõüëáÕ\87sºK@ÉD?ÊC=ÎC>¤=8\86<3\7f=1~:/{8/{;2w81j8/i7.f7-d8-i70i81e6.qE<A>767/58-57,08+08+.9+2=-9B146(TbIWzPNk=Ol>ZwIVsE,6.heVheVheVheVhdXmd[khU\80\81\83ÉÑÔúúüÿþúõøïõ÷êååÉ\8b\8ft\8d\98\88ááßûûùþþüþþüúÿÿç·­ºTFÃI>ÀH8\99C6\81A7\81;3z;2u9/s9.o6+j81i70h6/h70j92j@2jUBtq^39/17-17-/5+/4./4..3-.3-.:04@2BO;AO6Ic@Hb;YsNF_B&+/heVheVheVheVjdXmd[mlX\8e\94\94ëóöþþþûûóäèÙèìÓâÝÇÓËÀìãäúúøþþüþþüþþüÿüýôÿýñêØ»xe½G=¨?<\8a?<qE<q?8p?8n?7i=4q62l71f;2c?3bM<_O8fbIV`H39/17-17-/5+-2,-2,,1+,1+*4,-7,2=-5@/;J3HX=]mS<J9%++heVheVifWifWkeYmf\knY\81\8d\8bÜãéþþþüüðíòÜâåÈáÙÎôèêÿøüþþüþþüþþüþþüûÿüÿûÿÿüýÿýêß·\9e¦lX\84E3uB/t?9q?8o>7m>6i>5cA5_J9L?,DH/XX<jmR=G/7=36<26<25;1382271/4.,1+*1*+2+.5.9@89F57D0N[I8D8+1-gdUifWifWifWldYmf\hpY}\8d\8aàçíþþþþÿñêðÖÏͶãÛÙÿúÿþÿúþþüþþüþþüþþüþýÿûÿ÷ýÿ÷ÿýÿÿüÿÿûòèÝËÊ´¦¨\8dxaH2^H1^J2XM9QL6Z\DJS8@J/NN2ieLJI5:@69?58>49?5:?99>88=75:4051,1--10/325G19K39K53D4-4,\hPfkUjhYnfYkg[ieZemX\8c\9b\9eäìïùüóìíÛØÓÀÅ·ªÝÒÖþøÿüýÿþþþÿþüÿýúÿýùÿüûÿýþÿüùøêáÿýÿýÿüþýÿÿþëØÖ½RK.UO/QP4PN5IO5EN1KQ/agC]`CTT<VU9OJ6CA49?58C59A69A6:B7=E:<F;:B54>5AU0Kk<:M:EX<?V:-4,[iPgoXlm]nhZkg[ieZemX\85\94\97ÚãêìñëÖÕû©ÚÌÁøíñÿüÿüþýþþþÿþüÿýúÿúöþúùÿýþÿüùûíäÿýþýÿüþþÿÿûçÝÛÆTM1VO2PO1MK2LR8LU8^dB\8fªsx\88aKM7SL:SN:IG:;A76A3;C8;C8;C8>F;>H=<D77A8H\7PpA/B/AT8E\@)0(
\ No newline at end of file
diff --git a/testimages/testimgfst1_8.ppm b/testimages/testimgfst1_8.ppm
deleted file mode 100644 (file)
index 11dca13..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-P6
-29 19
-255
-0/-50,4/,4/,2-*3.+30+74/B:/J>0dC2¥A2âBBá=;®?,\9c@+\8f>-\90=-¬B5\82F;:5232./1.5//uKLkj¤SNdci_\VX-.0.-+,*+,*+,*+.,-0,+2.-<20A4.H94w9.¦A5³C7\97>,\8e=,\84;,\84A8¤TK\84\89sGK<0/+/.,0/-PMF\89\9b§~\98\8bw\8fwWV:45/:728302012,.10,32.?5,B8/>3/F21K4,\80;4\88?6\86>0\81<-\87C8\81M@\8dxc\8b \81m\86fFJ<1,)1+-NO?y\99h\7f¥vk\86g@>29:4C@;GB<I?5D<1<71=9.L?/J<1@<1\9a>A\9f?1§?4¬@3Â::¾:8ÃG?\95bMé?Hù>QïKcçLlÔJanE?\84\82m\96£\8f±¹¬w\88uX[F43/==3OI9kl\81lg\87IDJ>;6H@3C?<a?6¨=+º;,¹;/Å;0â4+å3'Ô8+ÛFB½=0ØDB÷ESþHpýRtÚ]kèÎÍÿóýþôóÎËÆ°·¯EA5=82OF7wy ­°ý\96\96Üih\94\82KQ¸WhÈA=¼=.Ö8/Ý82Ø:.ð50â3.Û7-ÚEAÅ;.ÃC6ÖKHøYmû_têhp¶\9d\98þüÿýúõ÷ðÞëîçYM?SG9SJ9lj\80\92\95Ü\8e\8fϽf\88å@DÍB?Ø=;Á=0Ô7.é3/Ô51×6,Ú6-Ò9+Û<6ÖA:»=.³=/èfdøksÛns£¨\8aéñäÌçÈñè×îçá[K;[K;^M=^PEqg\8cºp\93Û?@ä@A·=0Ú?:É=,ã5,õ,2ù'@ð@KÝ34×?:Ó:2½;-Ø=8×6.à`]þp|ÑRYx\8b^z\9fk\88´u²¸\9c£¢ª^M;^M;]P@kalxy§¹\88\9béJNÔ<7¼C8Ó9-Þ>2ó6:ñ7:æ9?å@DÒKHÓECÖ?8é6:æ5/ò00×XQÿ\t£IKr\95[x\9f`z¨`\85¦oYi^[N>aTDlh\81qvº°°ÒÎÇ­\9dukçWVÑB:ÎB5à=8Þ6-×CAðV^ñ8>ôGMæ74á:4è66å4*ò21ÝMLøFhcG;bzJj\93Ok\94N\yCPj;A>5^Z[cc\9f\80\81Ô\8f\8cÑ\8b\83´n\RÎa^å`YÇ:(Ï9*Ñ;,È:0Ð@7í04ú)<ò09â96ç53Ø9&Ù9)öGX°;NEG1w\8d\i\8eHi\8cJf\84Hh\90J780JKCom\94\84\80Ê\80|¯sgkm^K¼LAß8/Ô8)¿:+Í?3É:,à93ì<?âC@â96è8;Þ95´;*º@3ÞK[PI6y\8bYcxQg\8cFi\8cJl\96Nv¦Z`WHbYJh_PkaWXUFXUB\8bWLÅ=1Ø8*Ò9)ª;(Ê<0à::Ú65¯<*Õ;3è96Û<8·;3\8f9(\98H=\96\QdsHBI7=D2m\90Lo\99Op\9eSW\80Hi`QjaRkaWkbSg^MHI9kJ9ÛONÎ@6Õ@9ÈA;ÝB>²@6\88?0\88<.\92:,¬<0\9a:,\819+v8+\8cNA\8dXPTb>CK4;B0n\91Mq\9fTd\8dKTyFjaRjaRkbSlcTumb\9b\97\8cjZJnC<¦GC×FCÞDDÙD>±?5\82<0\82:,~:/y9/u9.p6+l6*\8cSL`XE?M4:A/6<0g\84Jd\87Ma\84JIj=gdSgdSlcTneV²·ºûýøÚØ¿[ZH¯¤¢ï½¶ÎWOÐB>¼?9\82<0}9.z:1m9.h8,i70g80RD;4:.28.2?.39-ZtMSp@[xH1B2heVheVkeYy{pëïòõöîèêÔµ¶¨õõóþþüöîëË\7fq°D:\80?9u<5o:2l71f:1eE6gbN28.06,.3--2,/90;G3EZ;NbG%*-heVifWlfZt\7fqîòõô÷æÝÚÉý÷÷þþüþþüþþþÿþùáÆ»«\86t{UHeD5]F6TN8JN3VXB8>47=36;5271-2.1628G2=K:+2+akSliZjfZw\82zéïï×ÔÃÜÑÍýüÿþþþÿüùþüýýôïþþþÿýö\98\92xTO2LN6OV5r~VRP9KH79A4:B7<D9=E8=L5AZ:CW<*1)
\ No newline at end of file
diff --git a/testimages/testimggray.jpg b/testimages/testimggray.jpg
deleted file mode 100644 (file)
index 95505a2..0000000
Binary files a/testimages/testimggray.jpg and /dev/null differ
diff --git a/testimages/testimgint.ppm b/testimages/testimgint.ppm
deleted file mode 100644 (file)
index 59c50a8..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-P6
-227 149
-255
-0/+0/+0/+10,21-32.52-63.83/83/83-83-:3-:3-:3+:3+72.72.61-61-61-61-72.72.50,50,50,50,50,50,50,50,4/+3.*3.*3.*2-)2-)2-)2-)1,(1,(1,(1,(1,(1,(1,(1,(.+$.+$/,%0-&1.'2/(2/(30)52+63,63,74-85.96/96/:70@:,A;-C=/F@2GA3IC5JC3JC3LE3LE3LC2LC2LD1ME2PE3PE3Q>/S@1c?/iE5\81C4\86H9\9cE4\9eG6´F7µG8¿E8ÁG:ÇG<ÈH=ÊG?ËH@êCKëDLëDKëDKíCFìBEò>Añ=@÷:>ö9=ò9>ò9>ä@?â>=Ó?;Ð<8µ@,´?+´?+´?+²?,²?,°@,°@,«@,ª?+¤A,£@+\9cB*\9bA)\97A(\96@'\91@-\90?,\91>,\91>,\90=+\90=+\90>)\90>)\93>*\93>*\93>*\93>*\94=)\95>*\96?+\96?+\93@8\92?7\99=0\9b?2«@.°E3¼C0½D1·?/¸@0¥H9£F7\7fK=s?1N;*E2!95495484373262/51.40-3/,63.52-52-52-41,41,41,30++0*+0*-/*-/*./*./*1-*1-*2-*1,)3)(2('5)):..D66J<<o??zJJ\8eMK\92QO UY­bf¤p\86¥q\87\8a\7f©\89~¨{\88½{\88½sy©[a\91WKsPDlPKbMH_KHYSPaddl{{\83\8d\92\8e\98\9d\99¢¨\9c¡§\9b\9d¡\90\8e\92\81z{iefTXWEQP>TPaTPaTPa/.*/.*0/+10,21-21-52-52-72.72.72,72,92,92,92*92*72.61-61-50,50,61-61-72.61-61-61-61-61-61-61-61-3.*3.*3.*3.*2-)2-)2-)1,(2-)2-)2-)2-)2-)2-)2-)2-)/,%/,%0-&1.'2/(2/(30)30)52+63,63,74-85.96/96/96/@:,A;-C=/E?1F@2HB4IB2IB2JC1JC1KB1JA0KC0LD1OD2OD2Q>/S@1b>.gC3~@1\83E6\98A0\9aC2­?0®@1¹?2»A4ÂB7ÄD9ÈE=ÈE=ç@HèAIéBIêCJíCFíCFô@Có?Bø;?÷:>ó:?ó:?ä@?â>=Ó?;Ð<8´?+´?+´?+³>*²?,²?,¯?+¯?+ª?+ª?+¤A,£@+\9cB*\9a@(\97A(\96@'\90?,\90?,\91>,\91>,\90=+\90=+\90>)\8f=(\93>*\93>*\92=)\92=)\94=)\95>*\95>*\96?+\93@8\92?7\99=0\9c@3¬A/°E3½D1½D1¹A1¹A1¦I:¢E6}I;q=/N;*E2!:65:6595484373051.51.40-63.52-52-52-41,41,41,30+,1+,1+.0+.0+/0+/0+2.+2.+3.+2-*4*)3)(5))9--C55H::k;;uEE\8aIG\8eMK\9cQU©^b l\82£o\85\88\89~¨z\87¼x\85ºnt¤W]\8dTHpOCkLG^MH_MJ[PM^ZZbmmu\83\88\84\93\98\94\98\9e\92\99\9f\93\98\9c\8b\8d\91\80}~lijX]\JUTBUQbUQbUQb..,..,0/+0/+10,21-41,52-52-52-61+61+61+61+81)81)61-61-50,4/+4/+50,61-61-61-61-61-61-61-61-61-61-3.*3.*3.*2-)2-)2-)1,(1,(3.*3.*3.*3.*3.*3.*3.*3.*1.'1.'1.'2/(30)30)41*41*52+52+63,74-74-85.96/96/?9-@:.B<0D>2E?1F@2G?2H@3HA1HA1H?.H?.I@/JA0MA1MA1JA0LC2YB0\E3pC0tG4\89B0\8aC1\97<*\99>,¦<,ª@0²B4µE7¹H:ºI;Ü@CÝADáCDãEFëCCìDD÷@B÷@Bù:?ø9>ó<>ò;=âC?ß@<ËB8È?5±A-±A-°@,°@,°@,¯?+®?,®?,©@+¨?*¡A+ @*\99A)\98@(\95A)\95A)\90?,\90?,\90?,\8f>+\8f>+\8f>+\8f<*\8f<*\90>)\90>)\90>)\90>)\90>)\91?*\94?+\95@,\93A5\92@4\9b>/\9eA2±@0µD4ÁB3ÁB3¾D7¾D7¥K@ F;vJ=j>1I=-B6&=85<74;63:5294183062/51.63.52-32-32-21,21,21,10+,1+,1+,1+,1+.0+.0+0/+0/+3/,3/,5-+3+)4*)7-,=32A76^90gB9|F:\82L@\8fOM\9aZX\93hy\98m~\82\85|§w\83½r~¸gl£QV\8dPDtL@pLAaPEeOJaMH_LKYZYgquv\84\88\89\85\8c\84\89\90\88\8a\90\82\83\89{wykfhZZ[KSTDYS]YS]YS]--+--+/.*0/+0/+10,41,41,41,41,50*50*50*50*70(70(50,4/+4/+3.*3.*4/+4/+50,50,50,50,50,50,50,50,50,3.*3.*2-)2-)2-)1,(1,(1,(4/+4/+4/+4/+4/+4/+4/+4/+2/(2/(30)30)41*41*52+52+52+52+63,63,74-85.85.96/=7+>8,@:.B<0C=/D>0E=0E=0E>.E>.F=,F=,G>-H?.K?/L@0LC2MD3YB0[D2nA.qD1\85>,\86?-\927%\938& 6&¥;+®>0³C5¸G9ºI;Û?BÜ@CàBCáCDêBBëCCõ>@õ>@ù:?ø9>ó<>ó<>âC?Þ?;ÊA7Å<2°@,°@,¯?+¯?+¯?+®>*­>+­>+¨?*§>)¡A+\9f?)\98@(\97?'\94@(\94@(\90?,\90?,\8f>+\8f>+\8f>+\8e=*\8f<*\8f<*\90>)\8f=(\8f=(\8f=(\8f=(\90>)\93>*\94?+\93A5\93A5\9c?0\9fB3²A1¶E5ÂC4ÂC4ÀF9ÀF9§MB F;uI<h</H<,B6&>96=85<74;63:5294173062/63.52-32-32-21,21,21,10+,1+,1+,1+,1+.0+.0+0/+0/+40-40-6.,4,*4*)6,+:0/=32Y4+a<3u?3zD8\86FD\8fOM\8a_p\91fw|s\9e\80w¢s\7f¹lx²`e\9cNS\8aPDtL@pLAaODdMH_ID[EDRLKY[_`imnszrw~vy\7fqtzlln`_aSWXHSTD[U_[U_[U_,,*,,*--+..,0/+0/+10,10,30+30+30+30+4/)4/)4/)4/)4/,3.+3.+2-*2-*3.+3.+4/,4/,4/,4/,4/,4/,4/,4/,4/,2-*2-*2-*2-*1,)1,)0+(0+(4/,4/,4/,4/,4/,4/,4/,4/,30)30)30)41*41*41*52+52+41*52+52+63,74-85.85.85.<5+=6,>8,@:.A;/A;/C;.C;.C;.C;.D;,D;,E<-G>/J>0K?1FI6FI6PH5QI6aE0cG2tA,uB-\82;'\83<(\90;'\95@,\9fB0¥H6­L;°O>ÎDAÏEBÖE@×FAäB?äB?ò<;ò<;ú9<ú9<ð><ï=;ÙF>ÕB:½D3¹@/­@+­@+­@,¬?+¬?+¬?+©>,©>,¤?+¤?+\9f@,\9e?+\97A*\95?(\92@*\91?)\8f>+\8f>+\8f>+\8f>+\8e=*\8e=*\8d<)\8d<)\8e=*\8e=*\8d<+\8d<+\8e=,\8e=,\8d>-\8e?.\94C2\93B1¢>/¦B3º@3½C6Å@7Å@7¹D;ºE<\9dOE\96H>jJ?]=2<=/78*@85?74?74=52:5194074/74/43.32-23-23-03,03,03,/2+,3,,3,,3,,3,-2,-2,/1,/1,12-23.40-2.+1-*1-*50-72/N7)S<.c>.hC3pD;xLCz[j\86gvwq\9f|v¤p{½it¶^c¥PU\97OG\83IA}PAjPAjKAcI?aEBWGDYILUMPY]ca`fdah`_f^Y_STZNSYKSYK_WT_WT_WT++),,*,,*--+/.*0/+0/+0/+2/*2/*2/*2/*3.(3.(3.(3.(3.+2-*1,)1,)1,)1,)2-*3.+2-*2-*2-*2-*2-*2-*2-*2-*2-*2-*2-*1,)1,)0+(0+(0+(3.+3.+3.+3.+3.+3.+3.+3.+30)30)41*41*41*41*41*41*41*41*52+63,63,74-85.85.;4*;4*=7+>8,?9-?9-@8+@8+B:-B:-C:+C:+D;,F=.I=/J>0FI6FI6OG4PH5_C.aE0r?*r?*\81:&\82;'\8e9%\92=)\9d@.¢E3«J9®M<ÍC@ÎDAÔC>ÕD?ãA>ãA>ñ;:ñ;:ù8;ù8;ï=;î<:×D<Ò?7ºA0µ<+¬?*¬?*¬?+¬?+«>*«>*¨=+¨=+£>*£>*\9e?+\9d>*\96@)\95?(\91?)\90>(\8f>+\8f>+\8f>+\8e=*\8e=*\8d<)\8d<)\8d<)\8d<)\8d<)\8c;*\8c;*\8d<+\8e=,\8d>-\8d>-\94C2\94C2£?0§C4»A4¾D7ÆA8Å@7·B9¹D;\9ePF\97I?jJ?\<1;<.78*@85?74>63=52:5194074/74/43.32-23-23-03,03,03,/2+,3,,3,,3,,3,-2,-2,/1,/1,01,12-51.3/,1-*1-*3.+50-K4&M6(\7'a<,i=4qE<wXg\88ix{u£\80z¨s~Àkv¸di«X]\9fUM\89KC\7fPAjM>gH>`H>`FCXFCX?BK<?HBHFFLJIPHJQIJPDKQEOUGSYK`XU`XU`XU*,+*,+,,*,,*--+..,0/+0/+/.*/.*1.)1.)1.)1.)2-)2-)1-*0,)0,)/+(/+(0,)0,)1-*/+(/+(/+(/+(/+(/+(/+(/+(1-*1-*0,)0,)/+(/+(/+(/+(1-*1-*1-*1-*1-*1-*1-*1-*30+30+30+30+30+30+30+30+41,41,41,52-63.74/74/85092*:3+;4,=6.=6,>7->5,>5,A9.A9.B8,C9-D:.F<0J>2K?3DE5EF6LE3MF4XC2YD3f?.f?.v=,v=,\829(\85<+\93=,\98B1\9fF4¢I7»F<¼G=ÆH<ÈJ>ÙD=ÚE>ì?;ì?;ò::ñ99ç>9ç>9ÍG;ÇA5­D.§>(¦A-¦A-¦?,¦?,¦?,¥>+¤?-¤?- ?,\9f>+\9b@-\99>+\94?+\93>*\8f>)\8f>)\8d>-\8d>-\8c=,\8c=,\8a=+\8a=+\8a=+\8a=+\8a=-\89<,\88<,\88<,\88<.\89=/\8a>0\8b?1\92D0\92D0¥?1©C5½A9ÀD<ÃB<ÂA;±JCµNG\98^S\92XMgWJXH;;F87B4?80>7/>71<5/94.83-63,63,34.23-14-14-.3,.3,-4,,3+,3,,3,,3,,3,,3,,3,-2,-2,.0+02-23.12-/0+./*0/+10,>1+?2,J4'P:-V=6aHAo^p\85t\86\81\81µ\84\84¸{\83Îs{Æmp¿be´VS\9aFC\8aL?jI<gD=_E>`DBXDBX<CM8?I9CB=GFCNFEPHFRFGSGLVKPZOaZJaZJaZJ)+**,+++),,*--+..,/.*0/+.-).-)0-(0-(0-(0-(1,(1,(0,)0,)/+(/+(/+(/+(0,)0,).*'.*'.*'.*'.*'.*'.*'.*'1-*0,)0,)0,)/+(/+(/+(.*'0,)0,)0,)0,)0,)0,)0,)0,)30+30+30+2/*2/*2/*2/*2/*30+41,41,52-63.74/74/85092*:3+;4,<5-<5+=6,=4+=4+A9.A9.B8,C9-D:.F<0J>2K?3BC3CD4JC1KD2VA0WB1d=,d=,t;*t;*\807&\829(\8f9(\94>-\9bB0\9eE3¸C9¹D:ÃE9ÇI=ÙD=ÛF?îA=îA=ñ99ð88ç>9æ=8ÌF:Æ@4«B,¥<&¥@,¥@,¦?,¦?,¥>+¥>+¤?-£>, ?,\9f>+\9a?,\99>+\94?+\93>*\8f>)\8e=(\8d>-\8c=,\8c=,\8c=,\8a=+\8a=+\8a=+\89<*\89<,\89<,\88<,\87;+\88<.\89=/\8a>0\8a>0\92D0\93E1¥?1ªD6¾B:ÀD<ÃB<ÂA;·PI½VO¡g\\9baVqaTbREDOA@K=>7/>7/=60<5/94.83-63,52+34.23-14-14-.3,.3,-4,,3+-4--4--4--4--4--4-.3-.3--/*/1,23.12-/0+./*/.*0/+:-':-'F0#L6)T;4aHAsbt\8bz\8c\8a\8a¾\8c\8cÀ\81\89Ôx\80ËsvÅhkºYV\9dFC\8aI<gH;fD=_D=_B@VCAW>EO>EOGQPLVUR]UT_WS_SR^RT^SV`U`YI`YI`YI+-,+-,+-,+-,+-,+-,,,*,,*/.*.-).-).-)/,'/,'/,'/,',+),+),+)-,*-,*-,*-,*-,*-,*-,*-,*-,*-,*-,*-,*-,*,+),+)-,*-,*.-+.-+/.,/.,/.,/.,/.,/.,.-+.-+.-+.-+/+(0,)1-*2.+3/,3/,2.+2.+2.+2.+2.+3/,3/,51.62/73070*81+92,;4.<5-<5-=4-=4->5,>5,?5,@6-A7-C9/G:1H;2G?4G?4K?3L@4T>3T>3]9-]9-m9,n:-}7+\80:.\8c:,\90>0\97>0\98?1¦B3¨D5²D5·I:ÉG:ÌJ=ÝD>ßF@æA=çB>ßF@ÜC=ÀH8¹A1 D-\9eB+ A- A-\9f@,\9e?+\9f>+\9f>+\9e?-\9e?-\9a=,\99<+\95>+\94=*\8f>+\8e=*\8c>*\8c>*\8a=+\89<*\89<*\89<*\87;+\87;+\85<+\85<+\86=.\86=.\85=/\85=/\84>2\86@4\87A5\88B6\90E2\91F3¦D7­K>¼E?ºC=¶G@»LE©_T°f[\94wg\91tdsugik]P`SCSFOK@IE:A?3;9-85,74+44*33)34,34,14-03,-2,,1+,1+,1+-2,-2,-2,-2,-2,-2,-2,-2,02-02-02-02-12-12-12-12-4*39/8?42@53E<7YPKrn}\8a\86\95\8f\91Â\94\96Ç\8e\95Ý\83\8aÒs{Ãfn¶^d¢V\\9aNKjFCb=?V=?V<DQAIVHVWSab`qim~vt\86zo\81uiyleuh^l]SaRa[Ca[Cb\D,.-,.-,.-,.-,.-,.---+--+.-).-).-)-,(/,'/,'.+&.+&,+),+),+),+),+),+),+),+),+),+),+),+),+),+),+),+),+),+)-,*-,*-,*.-+.-+.-+/.,.-+.-+.-+.-+.-+.-+.-+/+(0,)1-*2.+2.+2.+2.+2.+2.+1-*1-*2.+2.+40-51.62/70*81+:3-;4.<5-<5-=4-=4->5,>5,?5,@6-A7-C9/F90G:1F>3G?4K?3K?3S=2S=2\8,\8,k7*l8+{5)~8,\8b9+\8e<.\96=/\97>0¤@1¥A2¯A2²D5ÄB5ÈF9ÚA;ÜC=å@<æA=ßF@ÛB<¿G7¸@0 D-\9eB+ A-\9f@,\9e?+\9d>*\9e=*\9e=*\9e?-\9e?-\99<+\99<+\94=*\94=*\8f>+\8e=*\8c>*\8b=)\89<*\89<*\89<*\88;)\87;+\87;+\84;*\84;*\85<-\85<-\84<.\85=/\84>2\85?3\87A5\88B6\93H5\93H5§E8­K>½F@¼E?¹JC¾OH¯eZ¶la\9b~n\98{kz|nprdWgZJZMOK@KG<EC7@>2=:196-44*11'23+12*03,/2+,1+,1+,1+,1+,1+,1+,1+,1+,1+,1+,1+,1+/1,/1,/1,/1,01,01,01,01,5+48.7=20?42H?:^UPvr\81\8c\88\97\8f\91Â\94\96Ç\8e\95Ý\84\8bÓx\80ÈpxÀlr°gm«a^}[XwSUlTVmU]j\dqftur\80\81u\86~\7f\90\88\83\95\89|\8e\82v\86yp\80sfteXfW^X@_YAa[C*./*./*./*./,.-,.-,.-,.-,,*,,*-,(-,(,+',+',+'+*&+*(+*(+*(+*(+*(+*(+*(+*(,+),+),+),+),+),+),+),+),+),+),+)-,*-,*-,*-,*.-+.-+.-+.-+.-+.-+.-+.-+.-+/+(0,)1-*1-*2.+2.+1-*1-*0,)0,)0,)0,)1-*3/,40-51.80-91.:2/;30<41<41=4/=4/=4-=4->3-?4.@6-B8/E80F91H;5H;5J;4K<5O:5O:5V72V72c60d71t5,w8/\868,\8a<0\93;/\95=1\9aA3\9aA3\9fB3¡D5®B5²F9ÃE9ÅG;ÑG=ÓI?ÏJAÌG>µJ:®C3\9bD0\98A-\9aB.\99A-\99A-\98@,\99>,\99>,\9a?-\9a?-\96=-\95<,\91>,\90=+\8c=,\8c=,\89>+\89>+\88=*\88=*\87<)\87<)\85<+\84;*\83;,\83;,\81;/\81;/\81=2\81=2\82?6\84A8\83C9\84D:\93K<\92J;¡G>¦LC±KF±KF¨XO®^U\9eyf¦\81n\90\92|\8d\8fy{\8cyp\81ncqbVdUMQ@JN=GI;CE7>@39;.35*/1&01)/0(/0*./)./*./*./*/0+/0+/0+/0+/0+/0+/0+/0+/0+01,01,01,01,01,01,01,01,6+<6+<600;55EG:]_Ru{{\89\8f\8f\8d\94±\91\98µ\8b\96Ã\84\8f¼|\8b²{\8a±y\8f§x\8e¦|\8b\90v\85\8an\80\80l~~j\81ym\84|u\90\81\80\9b\8c\88¤\8e\8d©\93\8f§\91\86\9e\88\80\96\81x\8eyj{hXiVZV9\X;_[>*./*./*./*./,.-,.-,.-,.-,,*,,*-,(,+',+',+'+*&+*&+*(+*(+*(+*(*)'*)'*)'*)',+),+),+),+),+),+),+),+),+),+),+),+),+),+),+),+)-,*-,*-,*.-+.-+.-+.-+.-+/+(/+(0,)1-*1-*0,)0,)/+(/+(/+(/+(/+(0,)1-*3/,3/,80-91.:2/;30<41<41<3.<3.=4-<3,=2,>3-?5,@6-C6.D7/F93F93H92I:3N94M83T50T50a4.c60r3*v7.\857+\89;/\93;/\94<0\99@2\99@2\9b>/\9d@1©=0­A4¾@4ÁC7ÎD:ÏE;ÌG>ÉD;³H8¬A1\99B.\97@,\99A-\98@,\97?+\96>*\98=+\98=+\99>,\99>,\95<,\95<,\90=+\8f<*\8c=,\8b<+\88=*\88=*\87<)\87<)\86;(\86;(\84;*\83:)\82:+\82:+\80:.\80:.\80<1\81=2\82?6\84A8\84D:\85E;\93K<\92J; F=¥KB°JE´NI¬\Sµe\¦\81\88u\98\9a\84\95\97\81\84\95\82y\8awlzk`n_UYHPTCKM?EG9@B5;=057,13(/0(./'-.(,-',-(-.)./*/0+./*./*./*./*./*./*./*./*/0+/0+/0+/0+/0+/0+/0+/0+7,=5*;3--:44HJ=bdWy\7f\7f\8a\90\90\8b\92¯\8e\95²\88\93À\83\8e»\80\8f\87\96½\8c¢º\90¦¾\97¦«\92¡¦\8c\9e\9e\89\9b\9b\82\99\91\7f\96\8e\81\9c\8d\88£\94\94°\9a\96²\9c\94¬\96\8b£\8d\85\9b\86|\92}j{hUfSXT7ZV9]Y<+/0+/0+/0+/0+/0+/0-/.-/.--+,,*,,*,,*,+',+',+',+'+++*********))))))((((((************************************************++++++,,,,,,---------.../+*/+*0,+0,+0,+/+*/+*.*)/+*/+*/+*/+*0,+1-,2.-3/.91/91/:20;31;30;30<20;1/<3.<3.=2.=2.=2,?4.B5/C60A83A83B94C:5E:6D95I81I81V80W91g7-k;1|:.\80>2\8b=0\8d?2\96?6\96?6\93@2\94A3\99B1\9cE4©E5«G7¶F:¸H<ºJ>¸H<«F:¥@4\97A2\95?0\94B-\93A,\94?+\93>*\94=,\94=,\94=,\95>-\92<-\92<-\8e=,\8e=,\8a=-\89<,\85<+\85<+\86;(\86;(\84;*\83:)\82:+\82:+\7f:+\7f:+~<0~<0}=3\7f?5\80A8\83D;\83G?\84H@\8fK@\8eJ?\9aGA\9fLF¤QKªWQ\9dl]¦uf\93\93w\99\99}\89¨\88\87¦\86\81\9d\84x\94{u\80ojudZfPS_IJVBBN:=F58A07;-48*01)/0(.-(,+&.*'/+(1++2,,0,)0,)0,)0,)0,)0,)0,)0,)/.*/.*/.*/.*/.*/.*/.*/.*9+:6(70-$85,DO1_jLv\84j\86\94z\8b\98\91\8f\9c\95\8b\9a\9d\88\97\9a\84\9f\96\8fª¡\96½¢\9dÄ©\97¸£\96·¢\96º \96º \8f´\95\88­\8e\88­\8b\8d²\90\91µ\91\91µ\91\8f¬\8d\86£\84\83\9c\7fz\93vg{bPdKST5TU6WX9+/0+/0+/0+/0+/0+/0-/.-/...,--+--+--+-,(-,(-,(-,(,,,,,,+++******)))((((((*********************************))))))))))))(((******+++,,,,,,---.......*)/+*/+*/+*/+*.*)-)(-)(/+*/+*/+*/+*0,+1-,3/.3/.:20:20;31;31;30;30;1/;1/;2-;2-<1-<1-<1+=2,@3-A4.?61?61@72A83C84C84G6/G6/S5-T6.d4*h8.z8,~<0\89;.\8b=0\95>5\94=4\92?1\93@2\97@/\99B1¥A1¦B2°@4²B6´D8³C7¨C7£>2\96@1\95?0\93A,\92@+\93>*\92=)\93<+\93<+\93<+\94=,\91;,\91;,\8e=,\8d<+\89<,\88;+\85<+\84;*\85:'\85:'\83:)\83:)\819*\819*~9*~9*~<0\7f=1~>4\80@6\82C:\85F=\85IA\87KC\8eJ?\8cH=\9aGA¡NH¨UO¯\V£rc®}n\97\97{\9d\9d\81\8bª\8a\87¦\86\82\9e\85{\97~z\85tp{jcoY\hRQ]IGS?BK:<E4;?19=/23+01)/.),+&-)&.*'1++2,,/+(/+(/+(/+(/+(/+(/+(/+(.-).-).-).-).-).-).-).-)7)85'60-$74+BM/\gIs\81g\84\92x\8d\9a\93\91\9e\97\8e\9d \8c\9b\9e\89¤\9b\97²©\9fÆ«§Î³¥Æ±¦Ç²¦Ê°£Ç­\99¾\9f\8d²\93\89®\8c\8d²\90\8d±\8d\8e²\8e\8dª\8b\83 \81\7f\98{v\8frcw^MaHPQ2QR3QR3+/2+/2+/0+/0+/0+/0-/.-/..0/.0/..,..,..,--+.-).-)------,,,+++******))))))******************************)))))))))((((((((()))******+++,,,---.......*).*)/+*/+*.*)-)(,(',('0,+0,+0,+0,+1-,2.-3/.40/:12:12;31;31;31;31;1/;1/;1/;1/;0,;0,;0,<1-?2,@3-96/:70983:94:94:94=82<71G4-H5.Y5)]9-o7(t<-\7f<+\81>-\90;4\90;4\8d?3\8e@4\8eB2\8fC3\94C0\94C0\9e>.¡A1¨B6©C7¢B6\9e>2\95?2\94>1\91@+\90?*\90=+\8f<*\91;*\91;*\91;,\92<-\8f<,\8f<,\8b<-\8a;,\87;+\87;+\84;*\84;*\83:'\83:'\829(\829(\819*\808)}9,}9,}=1~>2~?6\80A8\81E=\85IA\86KE\88MG\8cIA\8cIA\97IE¡SO¤]W­f`\9d\80\8by\8a¢\80\8f§\85\80°\8a\86\7f \83y\9a}\81\88vx\7fmfx^`rXXgPN]FHT@AM9>D6:@257,35*2/*/,'0(&1)'3)*4*+2*(2*(2*(2*(0+(0+(0+(0+(0,)0,)0,)0,)0,)0,)0,)0,)9(28'10/\e65!<L\1dUe6n\82Q\80\94c\8b\9cz\90¡\7f\8e¢\86\8c \84\8a«|\96·\88\9bÍ\88¢Ô\8f¥Ó¬¤Ò«£Ò¨\9dÌ¢\8f¾\90\81°\82\7f­~\83±\82\85¯\81\88²\84\88«\83} xz\94qp\8ag_sWJ^BKN1JM0IL/,03,03,01,01,01,01.0/.0//10/10//-//-//-..,/.*/.*......---,,,+++******)))))))))))))))))))))))))))******))))))((((((''''''))))))***+++,,,---.......*).*)/+*/+*.*)-)(,('+'&0,+0,+0,+0,+1-,3/.40/510:12;23;31;31;31;31;1/:0.;1/:0.;0,;0,;0,;0,>1+?2,96/96/872983983983<71<71C0)E2+U1%Z6*l4%q9*|9(~;*\8e92\8e92\8c>2\8d?3\8dA1\8dA1\91@-\90?,\9b;+\9e>.¥?3¦@4 @4\9e>2\95?2\94>1\90?*\90?*\90=+\8f<*\90:)\91;*\91;,\91;,\8f<,\8e;+\8b<-\8a;,\87;+\86:*\84;*\83:)\829&\829&\829(\829(\808)\808)}9,|8+~>2~>2\7f@7\81B9\82F>\86JB\88MG\8aOI\8cIA\8cIA\99KG¤VR¨a[±jd¢\85\90~\8d¥\83\90¨\86\81±\8b\86\7f \83z\9b~\83\8ax{\82pj|bew]_nWVeNO[GFR>AG9;A379.46+30+/,'0(&0(&3)*4*+1)'1)'1)'1)'/*'/*'/*'/*'/+(/+(/+(/+(/+(/+(/+(/+(8'18'110\1c54 9I\1aQa2k\7fN~\92a\87\98v\8c\9d{\8b\9f\83\8a\9e\82\86§x\92³\84\95Ç\82\9bÍ\88\99Ç \99Ç \98Ç\9d\93Â\98\88·\89\7f\81¯\80\88\87\82¬~\85¯\81\86©\81z\9duv\90mk\85bZnRFZ>HK.FI,DG*-0'.1(.1(.1(01)01)01)01)33+33+63,52+52+41*30)2/(7/,6.+6.+5-*2-*1,)0,+/+*.,-.,---/--/+,0*+/()-()-/(//(//(//(/.)-.)-.*+.*+,+)-,*,-(,-(-.(-.(-.(-.(+-,+-,------/.,/.,2.+2.+1,&2-'5.&6/'8/&90';1(;1(;4*<5+<5+<5+=4-<3,<3,;2+;2-;2-;0,;0,;0.;0.<1/<1/E.&E.&86)86).:,.:,36-36-C+)B*(O%&R()V/(]6/\@2`D6vB,xD.\85@0\87B2\94>1\93=0\939.\928-\8f<,\91>.\8eC0\90E2\8fD/\8eC.\8d?+\8c>*\9b82\9a71\8f=1\8e<0\82A/\81@.|B.{A-\83B0\83B0\87>/\86=.\87;-\86:,\84;,\83:+u9.|@5s>.n9)s@-s@-t<+yA0};-\81?1\87E9\8bI=\86L@\87MA\80PB\81QC\95IK\9bOQ\88h[\90pct\87i{\8epx\9d{~£\81\8a¤\87\8b¥\88\91¥\8a\90¤\89\83¤\87}\9e\81k\9dzg\99vb\8fdZ\87\X|VSwQZnRSgKQUDHL;D=5?80:..5))5&+5&+2%,2%,$-*$-*&*)&*)*(++),0',1(-3(03(03'13'10)10)1-*1-*1.*+0,-.-(/.);>+VYFnyW~\89g\8a\9dp\8b\9eq\89¤o\8c§r\87¨q\88©r\8e´{\98¾\85¡¿\8b\9f½\89\97¹\86\91³\80\89®{\85ªw\83©z\84ª{\83¦|\82¥{\80\9d~v\93tq\88nf}c[jWL[HIP@AH8<C3.1(.1(.1(/2)01)12*12*12*44,44,63,63,63,52+41*30)7/,6.+6.+5-*2-*2-*0,+0,+.,-.,---/--/+,0*+/)*.()-.'..'..'..'.-(,-(,-)*-)*-,*-,*,-(-.)-.(-.(./)./),.-,.----.../.,/.,1-*1-*2-'3.(6/'70(90':1(<2)<2)<5+<5+=6,=6,>5.=4-<3,;2+;2-;2-;0,;0,;0.;0.<1/<1/E.&F/'86)86).:,.:,36-25,C+)C+)O%&R()U.'Z3,Y=/\@2s?)uA+\83>.\86A1\93=0\93=0\94:/\939.\8d:*\8d:*\8a?,\8b@-\8cA,\8dB-\8fA-\8fA-\9a71\9a71\8f=1\8e<0\82A/\81@.|B.{A-\82A/\82A/\86=.\85<-\86:,\86:,\83:+\83:+t8-x<1p;+n9)r?,q>+q9(s;*~<.\82@2\88F:\8bI=\86L@\86L@\80PB\81QC\93GI\9bOQ\8aj]\93sfx\8bm\7f\92t{ ~\81¦\84\8b¥\88\8c¦\89\92¦\8b\91¥\8a\85¦\89\7f \83m\9f|i\9bxe\92g^\8b`\\80ZX|V_sWZnRY]LPTCKD<E>6?338,,7(-6',3&-2%,$-*$-*&*)&*)+),+),1(-2).3(03(03'13'10)10)1-*1-*12./2./-,',+&8;(TWDmxV\7f\8ah\84\97j\85\98k\84\9fj\87¢m\83¤m\83¤m\87­t\90¶}\9a¸\84\98\82\91³\80\8c®{\85ªw\83¨u\82¨y\82¨y\82¥{\81¤z\7f\9c}u\92sp\87mf}c[jWL[HEL<=D48?//2)/2)03*03*12*23+23+23+55-55-74-85.74-63,63,52+81+70*50,4/+3.*2-)1-*0,)/.,/.,......--/,,.)*,)*,/)-/)-/)-/)-.*+.*+.*).*).-).-).-)/.*./)./)/0*/0*//////..,..,/.*/.*1.)1.)4/)4/)70(81);2)<3*>4*>4*>7->7-?6-?6-?6->5,=4-<3,;2-;2-;0,:/+:/-;0.<1/<1/@2)A3*N,+N,+W%.V$-L(,K'+=0*</):2';3(O.%S2)i/-k1/h:+j<-w;0z>3\89<6\89<6\8b;4\8a:3\86=4\86=4\82@2\82@2\85A4\86B5\8aB6\8bC7\8b?/\8b?/\88?.\87>-\86?-\85>,\87;+\87;+\8a;,\89:+\88;+\87:*\7f<)\7f<)w?(w?(}=1{;/u:,v;-w?0w?0v<.u;-\7f?3\82B6\88E<\8bH?\89K@\89K@\86MB\87NC\94HH\9cPP\90h\\99qe\82\88l\88\8er{\9f{\80¤\80\82ª\85\83«\86\8bª\8a\8bª\8a\8f£\87\89\9d\81\86\96|\82\92xa\99j\\94eX\8b`V\89^X\85^S\80YPsUIlNB[E;T>4F6+=-(5+%2($/'#.&4%(4%(1%'1%'0'*1(+/+,0,-+,.+,.(..(..%/0%/0$00$004.04.0.+&,)$58'QTCkvX}\88j}\92i~\93j~\9aj\82\9en~ m}\9fl\7f¦q\86­x\8a¯y\89®x\85¬w\82©t\7f§s~¦r~¥v\7f¦w\7f¤{~£z}\9byt\92pp\87ke|`XjRJ\DEG9=?18:,14+14+14+25,34,34,45-45-66.66.96/96/96/96/85.74-92,92,61-61-50,4/+2.+2.+0/-10.000/////1--/+,.*+-0*.0*.0*.0*./+,/+,/+*/+*/.*/.*/.*0/+/0*01+01+01+00000000.00.0/+0/+2/*2/*61+72,:3+;4,=4+>5,@6,@6,@9/@9/A8/A8/@7.?6->5.=4-<3.;2-;0,;0,;0.;0.<1/=20B4+B4+O-,O-,X&/W%.M)-L(,>1+>1+;3(;3(N-$Q0'e+)g-+g9*i;,v:/z>3\88;5\89<6\8a:3\8a:3\88?6\88?6\84B4\84B4\86B5\86B5\89A5\89A5\8b?/\8a>.\88?.\87>-\85>,\85>,\87;+\87;+\889*\889*\869)\869)~;(~;(v>'v>'\7f?3w7+u:,w<.s;,u=.z@2z@2\81A5\84D8\89F=\8aG>\88J?\89K@\87NC\89PE\98LL\9eRR\8fg[\95ma|\82f\82\88lv\9av| |\7f§\82\81©\84\8a©\89\8a©\89\8f£\87\8a\9e\82\87\97}\83\93yd\9cm_\97h^\91f]\90e`\8df]\8ac\\7faVy[NgQF_I>P@3E5.;1(5+%0(#.&4%(3$'1%'1%'/&)0'*.*+/+,)*,)*,&,,&,,#-.#-.".."../)+1+-.+&.+&7:)QTChsUw\82dy\8eez\8ffz\96f\80\9cl|\9ekz\9ciy k~¥p\81¦p\7f¤n}¤o|£n|¤p}¥q}¤u}¤u{ w{ wz\98vr\90nn\85ie|`XjRJ\DCE7;=/68*25,25,36-36-56.56.56.56.77/880;81;81;81;81:70:70<5/;4.94083/72.61-51.51.51.51.32032021/10.0/-/.,3*+3*+1++1++1++1++0,)0,)2.+2.+10+10+10+21,12*12*22022023.12-21,21,50*50*;4,;4,=4+>5,@6,A7-B8.C9/C;0C;0C;0C;0B90@7.?6->5,=4-<3,<3.;2-;2-<3.<3.=4/?61?61P-1P-1['3Z&2O+/N*.:6-:6-29)3:*B4'C5(Y.'Z/(b:2e=5r;6v?:\83;<\83;<\85;:\84:9\7f;8\80<9}A9\7fC;\82C<\81B;\85@9\84?8}E.}E.\81C.\80B-\86=,\85<+\8b9+\8a8*\897)\897)\82;)\81:(x>(x>(qB(pA'\874,\7f,$\817,\87=2v4(v4({A5}C7zF9|H;\7fK>\80L?\81M@\83OB\87QE\8aTHjkKnoOwsV|x[\80|_\88\84g\87\92r\8e\99y\80£{\83¦~|¬\82\84\82w§}v zs\9dw\84\8dn\81\8ak|\8ai|\8aiy\8ajw\88hp\83gl\7fcbpWZhOTYEHM9E?1=7):-$7*!6&&6&&1'%1'%+*%+*%(-'(-'&,(&,()+()+(+)*+)*0'*0'*,$!2*'51&95*?D0TYEbqRm|]q\8abq\8abp\91bv\97hu\9bjs\99hq\9cgu kw¢lu js\9fju¡lx¤sz¦uz¤vy£ux\9dtx\9dtw\96to\8ell\85gc|^UlOG^AFB7>:/95*47.47.47.58/67/67/780780991991<92=:3=:3=:3=:3<92?82>71<73;62:5194084173084184165365354243121/21/5,-5,-3--3--3--3--2.+2.+3/,3/,21,21,21,32-23+23+33133134/45054/65094.94.=6.=6.?6-@7.C9/D:0E;1E;1E=2E=2E=2D<1C:1B90@7.?6-?6/>5.=4/=4/=4/=4/>50?61?61@72R/3R/3])5])5R.2R.2=90<8/5<,5<,D6)E7*Y.'Z/([3+]5-k4/p94~67\7f78\8176\8176|85}96y=5{?7~?8\7f@9\84?8\84?8}E.}E.\80B-\7fA,\86=,\85<+\8a8*\8a8*\897)\897)\82;)\82;)x>(x>(qB(qB(\863+\863+\99OD£YN\85C7{9-\81G;\82H<{G:|H;~J=\7fK>\81M@\84PC\89SG\8dWKmnNqrRzvY~z]\82~a\8a\86i\89\94t\91\9c|~¡y\80£{{«\81\83\82x¨~w¡{t\9ex\85\8eo\84\8dn\80\8em\80\8em~\8fo}\8enw\8ant\87km{bft[afRUZFQK=GA3B5,</&;++:**4*(3)',+&,+&(-'(-'(.*(.*+-*+-*-+,-+,2),2),0(%:2/B>3IE:NS?]bNcrSixYk\84\j\83[i\8a[o\90ao\95dn\94cl\97bo\9aet\9fir\9dgp\9cgr\9eiw£ry¥ty£uv ru\9aqu\9aqt\93qm\8cjk\84fb{]UlOG^AEA6=9.84)58/58/58/690780891891891::2;;3>;4>;4?<5?<5?<5>;4?:4?:4>93>93=82<71<73;62:72;83;83:72:7285074/63.7/,7/,7/,7/,50,50,50,50,41,41,52+52+33+44,44,44,43/540650761:70;81=90=90?8.?8.A9.B:/D:.F<0H<.I=/G=3G=3G=3G=3E;1D:0A8/@7.@70@70?6/?6/>71>71?82?82=82>93>;4?<5@=6@=6C<2C<2E8/E8/H8+H8+F9(G:)D<'E=(a-"d0%q0*w60\8573\88:6\8b<8\8b<8\8bB;\89@9\81>5~;2\8290\83:1\8a;4\8c=6\81A5\80@4\82@4\81?3\81=2\80<1}=1}=1x>0x>0w?0w?0{=0{=0\80:0\80:0\9b+'¨84Ïieá{wªZQ\91A8\84OA\81L>mN:nO;hT<iU=pU@tYD\80]I\84aM^{Kc\80P\8ftY\93x]½d^ÀgaÐfhÔjlÇ}tÊ\80\94\96~\97¡~\93\9dz\87\9dw\84\9at\8c\8fp\8b\8eo\84\92o\85\93p}\97r{\95pq\95oo\93mh\8cfb\86``yYUnNT^CHR7BD.;='@3+?2*92(70&00&//%-0%,/$2/(2/(:+(:+(D%*D%*K"*K"*@8%LD1VQ;]XB]dEgnOgySi{Uh\83Vf\81Te\87Ul\8e\m\94_m\94_n\96aq\99dr\9eko\9bhm\99hp\9ckv\9fsx¡ux\9ewt\9ast\96st\96ss\92pl\8bii\84ca|[TnKF`=MD;E<3@7.6906906906908918919:29:2::2;;3>;4?<5@=6@=6@=6?<5A<6A<6@;5?:4>93>93=84=84<94<94<94<94;83:7296185091.91.91.91.72.72.72.72.52-52-52+52+44,44,44,55-540540761872<92=:3?;2@<3@9/@9/B:/C;0E;/F<0I=/J>0H>4H>4H>4G=3F<2D:0A8/@7.B92A81@70@70?82?82@93A:4=82>93>;4@=6A>7B?8E>4E>4F90F90I9,J:-H;*H;*F>)F>)i5*l8-{:4\83B<\92D@\97IE\9aKG\9bLH\9bRK\95LE\88E<\80=4\807.\818/\89:3\8c=6\81A5\80@4\82@4\81?3\81=2\80<1}=1|<0x>0x>0w?0x@1|>1|>1\81;1\81;1\97'#®>:å\7f\96\92¼lc\97G>\82M?{F8lM9mN:hT<iU=pU@uZE\81^J\86cOa~Ng\84T\93x]\96{`½d^ºa[ÄZ\Å[]È~uÊ\80\95\98\80\98¢\7f\95\9f|\89\9fy\86\9cv\8d\90q\8e\91r\87\95r\88\96s\7f\99t~\98su\99ss\97qn\92li\8dgh\81a^wW]gLPZ?IK5AC-D7/C6.=6,:3)33)22(/2'.1&52+52+=.+=.+G(-G(-N%-N%-ME2YQ>c^HhcMfmNmtUj|Vk}Wj\85Xh\83Ve\87Ul\8e\n\95`p\97bq\99dt\9cgq\9djn\9agl\98go\9bju\9erw tv\9cuq\97pr\94qs\95rr\91ok\8ahi\84ca|[TnKGa>SJAKB9F=48;27:17:17:19:2:;3;<4<=5<<4<<4?<5@=6A>7B?8B?8C@9E@:E@:D?9D?9C>8C>8B=7B=7@<3@<3B;3A:2A:2A:2A:2A:2A81@70@70@70>7/>7/=6.=6.<71;60:7096/85.74-74-63,66.66.85.96/;7.=90@9/A:0B:/C;0F<0H>2K?1L@2L@0L@0MA5L@4K?3J>2G=3F<2E;1D:0B90A8/?8.?8.<8/=90=90>:1;4,LE=P?8J92Z;6T50W,&d93a0)d3,e1&a-"e,!l3(s9.u;0\8fG8\8eF7\9aG9\9fL>£E;\9b=3\9d=1¢B6¥M?§OA«UD­WF©M>\9b?0\9d9*¡=.\9578\9578\8f55\8b11\8383\87<7wC6r>1lE4iB1q=0q=0\8932\8932\9c'0\9a%.ÑCAî`^ÅCAÕSQÞ{uµRL~I9\89TDcW=g[AafFbgGgbDgbDzeJ\84oT¨WF»jYí`fâU[þ,Iö$Aÿ\1eFÿ"Jÿ8Vÿ:XòTcÿapòtxóuyíy|ð|\7fÌyuÍzvÆ}vÇ~w»\82\82\85\84u¤zl£yk£qh\9cja\9a[V\8eOJ\88A?\82;9\7f4;t)0m,0l+/T$"Q!\1fN/*R3.J3-H1+D1*E2+F.*C+'H/+O62VK+aV6da>gdAhpIu}Vr\84Zo\81Wi\85Ul\88Xn\8e\r\92`t\97au\98bw\9adx\9beq\96ms\98ot\96qr\94ot\93sy\98x{\98|y\96zy\93xs\8drl\86ii\83fg\82a`{ZSnKHc@SMAQK?OI=7:17:17:17:19:2;<4<=5=>6>>6>>6@=6A>7A>7B?8B?8C@9E@:E@:E@:D?9D?9C>8C>8C>8C?6B>5D=5D=5C<4B;3B;3B;3B92A81A81A81@91@91@91@91<71;60:7096/85.85.74-74-66.66.96/96/;7.=90A:0B;1C;0C;0F<0H>2K?1L@2L@0L@0L@4L@4K?3J>2G=3F<2E;1D:0B90B90@9/?8.=90>:1>:1?;2B;3B;3C2+F5.[<7`A<mB<vKEyHA|KD\80LA\7fK@\86MB\8dTI\91WL\90VK\8dE6\8cD5\96C5\99F8\9d?5\968.\999-\9d=1\9cD6\98@2\97A0\9bE4¢F7£G8­I:³O@¬NO©KL\9dCC\94::\88=8\89>9xD7s?2g@/rK:\81M@yE8\82,+\85/.°;DÆQZÚLJÝOMÂ@>Á?=Æc]¹VPzE5\87RBocIfZ@Z_?ejJrmOojL{fK\81lQ·fU½l[âU[ÖIOú(Eù'Dÿ!Iÿ"Jþ/Mþ/MâDSéKZ×Y]ÖX\Ï[^Ò^aÂokÃpl½tm¿vo¶}r·~s±\83\83\87\86\80w¯}t³to°ql±jh°ig³ho¥Za\94SW\8eMQ}MK{KI]>9? \eL5/H1+E2+I6/N62O73T;7ZA=[P0dY9eb?ifCltMz\82[x\8a`t\86\n\8aZn\8aZm\8d[o\8f]r\95_t\97at\97at\97ao\94ks\98ow\99tv\98s{\9az\80\9f\7f\82\9f\83\80\9d\81\80\9a\7fx\92wp\8amj\84gg\82a_zYSnKIdAVPDVPDTNB6906907:18;2:;3<=5>?7?@8@@8@@8B?8B?8C@9C@9C@9C@9EB;DA:DA:DA:EA8D@7D@7D@7HA7HA7H?6G>5F>3E=2D<1D<1C;0C;0C;0C;0C:1C:1B;1B;1<8/<8/<8/;7.96/85.85.74-96-96-96-:7.<8-=9.A;/B<0C;.D</I=-J>.L?.M@/M@/M@/M?2M?2L>3K=2I=1G;/E;1D:0C;0C;0?;0?;0?;0?;0?<3?<3ZB8N6,{*0\90?EÆ?PÓL]ÚVaØT_\9cB:\9eD<\97K;\9aN>¸KFÀSNàDOÜ@K\9fD1\9dB/¤>/¤>/©9+¥5'¥7(©;,¬E2¢;(\9b\9d9"©<(­@,¶A0¹D3«.4´7=¿BHÄGM½LN·FH\98A:\8a3,{9+x6(~0&\813)©.3¸=Bá@RëJ\çE@Õ3.Ï:6Å0,ÄOHÓ^W\8dN=\95VEugJl^AdeCpqO\83nO~iJ\96dM¢pYÿQ]ÿLXÿ<Nù4Fÿ/Fÿ2Iÿ0Jÿ,Fÿ2Jþ.Fú.Gü0Iÿ/Iü,Fÿ*Iÿ.Mÿ7Xÿ8Yÿ;\ÿ=^ÿDcÿFeüIgýJhøIh÷Hg÷EiöDhüClÿFoÿIsÿKuÿ`\82ÿXzïUqçMiÕVkÛ\q«PY\81&/\&$a+)Q>0Q>0:?+6;'4F.AS;YO,aW4d`=ieBouS\7f\85c}\8ckw\86ew\8diu\8bgr\8afr\8afv\8cfx\8ehz\8fhz\8fh\80\92x\86\98~\8b\9d\87\8d\9f\89\93¡\90\99§\96\9a¨\9b\97¥\98\92 \91\89\97\88y\8cxp\83of\7fa^wYSnKKfCUVDUVDVWE58/58/6907:1:;3<=5>?7@A9AA9AA9C@9C@9DA:DA:DA:DA:EB;EB;EB;EB;FB9FB9FB9FB9JC9IB8I@7H?6G?4E=2D<1D<1C;0C;0C;0C;0D;2D;2C<2C<2=90=90<8/<8/:7096/85.85.96-96-96-:7.<8->:/A;/B<0D</E=0I=-K?/M@/M@/M@/M@/M?2L>1K=2J<1H<0G;/D:0D:0D<1C;0@<1@<1@<1A=2@=4A>5Q9/J2(\8a9?­\bÛTeßXiÛWbËGR\9391\94:2\8c@0\90D4±D?»NIÚ>IÕ9D¤I6¢G4¨B3¨B3®>0¯?1°B3³E6¯H5¨A.¢>'¡=&¨;'¨;'«6%ª5$µ8>·:@¶9?µ8>³BD½LN³\U´]V\89G9|:,~0&\8c>4ÂGLÐUZâASÕ4FÜ:5Ï-(Î95Ë62½HAÎYR\9b\K\94UDj\?tfIstRtuS~iJ\80kL¤r[µ\83lþJVøDPý8Jü7Iÿ7Nÿ:Qÿ4Nÿ-Gÿ;Sÿ5Mþ2Ký1Jÿ/Iþ.Hÿ.Mÿ3Rþ2Sÿ3Tû5Vü6Wö;Z÷<[ò?]ó@^óDcòCbò@dò@dø?hûBkÿEoÿGqþSuýRtôZvïUqÙZoâcxÈmv´Ybn86f0.K8*L9+=B.<A-4F.7I1TJ'^T1ea>okHx~\\88\8el\83\92q|\8bjx\8ejz\90ly\91mw\8fkw\8dgx\8eh\7f\94m\84\99r\92¤\8a\98ª\90\9f±\9b¢´\9e¨¶¥¬º©¬º­¨¶©\9e¬\9d\93¡\92\80\93\7fq\84pd}_\uWRmJLgDUVDVWEXYG47.58/58/7:19:2<=5>?7?@8AA9AA9C@9DA:DA:DA:DA:EB;FC<FC<FC:FC:GC:GC:IB8IB8KC8KC8JB5H@3H>2G=1F=.E<-D;,D;,D:.D:.C;.D</D<1D<1@9/@9/=90<8/<8/;7.:5/:5/97+97+;7,;7,>8,@:.C;.D</F=.G>/J?-K@.M@/M@/M@-M@-N>1N>1K=0J</H<0G;/D:.C9-B<0B<0@<0@<0?=1@>2??3@@4j/)q60½DMØ_hõEYì<PÚ5<Ä\1f&¤4&£3%\90<"\92>$±=.¼H9Ý:;Ø56§C3§C3­?2¬>1´>4¹C9»G:¼H;ª?-©>,§<*¥:(¬7&°;*º:-»;.ÌF=ÌF=Ø:9Ó54á27ê;@ëGHîJKÍ@9ÓF?ÕOFØRIäFEÝ?>é19æ.6Ø4(Û7+Ï2)Ô7.¼91¿<4®_P\9eO@uP6\85`F\8bhL\84aE\9fTA°eRÛhaáng÷>Fò9Aá<@ã>BÙJFÛLHÛMKÜNLíNRæGKò9Gñ8Fú1Dú1Dÿ2Hÿ8Nÿ:Vþ9Uü:Uý;Vþ;[ÿ=]þ?aÿ@bÿBkÿBkýBmýBmüCoüCoúCqúCqÿClÿ=fÿFkÿInõHfõHfèZpèZp½Yc\9b7A]("Z%\1fRB2[K;HM6>C,UH5dWDrkY\80yg\8a\8c~\98\9a\8c\91\9b\90\87\91\86\81\8e\84\88\95\8b\8e\9a\90\8b\97\8d\89\8f\85\8a\90\86\99\9b\90¥§\9c³³§ºº®¿¿·ÁÁ¹ÅÁÀÇÃÂÃÁľ¼¿±³°¤¦£\8b\97\8by\85yh|c^rYRmLNiHQZ?S\AU^C47.47.47.58/891:;3;<4<=5??7@@8B?8C@9DA:EB;FC<FC<FC<GD=GD;GD;HD;IE<KD:KD:KC8KC8JB5IA4I?3H>2G>/G>/F=.F=.F<0E;/D</C;.C;0C;0A:0@9/>:1=90<8/<8/;60;60:8,:8,;7,<8-?9-A;/C;.D</G>/H?0K@.LA/M@/M@/M@-M@-N>1N>1K=0J</G;/F:.C9-C9-B<0A;/?;/?;/?=1@>2@@4@@4q60\87LFÍT]ÓZcë;Oã3GÖ18É$+¤4&¤4&\90<"\90<"«7(³?0Ô12Ñ./\9f;+ <,¦8+¦8+°:0·A7ºF9¹E8ª?-ª?-¦;)¡6$ª5$³>-ÄD7ÈH;½7.ÈB9áCBãEDí>Cê;@Ý9:Õ12Ì?8ØKDÝWNÙSJÛ=<Ñ32å-5ì4<Õ1%Þ:.É,#Ó6-¸5-¶3+»l]ºk\\81\B\82]C|Y=|Y=¨]J¾s`ÛhaÐ]VúAIô;Cá<@ß:>ÑB>ÔEAÝOMæXVíNRæGKò9Gð7Eú1Dø/Bÿ/Eÿ4Jý8Tý8Tû9Tü:Uþ;[ÿ>^ÿBdÿDfû<eü=fú?jú?jù@l÷>jó<jò;iÿDmÿ7`ÿ>cÿInûNlùLjçYoåWmÛw\81Ã_i\86QKp;5L<,J:*CH1LQ:]P=reR\84}k\94\8d{\9b\9d\8f¥§\99\9d§\9c\93\9d\92\92\9f\95\9b¨\9e¤°¦£¯¥¡§\9d£©\9f´¶«ÁøÉɽÎÎÂÒÒÊÑÑÉÓÏÎÓÏÎÎÌÏÈÆɼ¾»¯±®\94 \94\7f\8b\7fk\7ff`t[UpORmLV_DV_DW`E47.47.47.47.67/7809:2:;3==5>>6A>7B?8DA:EB;FC<GD=GD=GD=GD;HE<IE<JF=LE;LE;LD7LD7MC7LB6NB4MA3MA1L@0JA0I@/I@1G>/E=0D</C;.C;.A:0A:0@91@91=90<8/<71;60:8,:8,;7+<8,?9-A;/C<,D=-H?.H?.K@.LA/M@-M@-O@-N?,N>1M=0L</K;.H:-G9,C9-C9-@:.@:.>:.?;/?=1@>2??3@@4\83('¦KJÄPQ´@A»11¼22¹3(¸2'¤4\1c§7\1f\99?\1d\96<\1a\94>\1d\97\9d@!\99<\1d\9c5,\9e7.¤5,£4+­81¶A:µC9²@6®B6­A5§;.£7*¯9/¹C9ÄC=Á@:Ä>#ÇA&ã1%Ý+\1fû\1a\1eÿ $ÿ%+ÿ'-ó&#ô'$å0%æ1&ä2&ä2&ë/&ë/&Õ6!Õ6!Ð2&Ò4(Á80Ä;3ÀbVØzn£fS\92UB\8fK8\9eZGØ]XÞc^øJSî@IõGIî@BÖC<Ó@9ÁC7ÀB6ÓF?ÝPIöEMñ@Hÿ4Gÿ4Gû5Fù3Dñ9Eö>Jú8Pù7Oû6Rû6Rÿ5Xÿ8[ÿ9cÿ;eÿ=lÿ>mÿ@qÿ@qÿBvÿAuúBvùAuûHföCaúGeþKiýLiÿTqÿ^yûXsòi{òi{Ónv»V^\86B?s/,m>6~OGte`\8b|w\9f\95\93¬¢ ®®°µµ·°µ»©®´°·Áµ¼Æ¾ÀÌ¿ÁÍÄÁÌÈÅÐÖÌ×ÞÔßãØÔçÜØèÜÞæÚÜæÖàæÖàßÓÝÙÍ×ÉÄʼ·½ § \8a\91\8ar\84nfxb[tVXqSZiJZiJZiJ47.36-36-36-56.67/780891;;3<<4@=6A>7C@9EB;GD=GD=GD=GD=HE<HE<JF=JF=MF<MF<ME8ME8ND8ND8PD6OC5OC3OC3MD3LC2KB3I@1G?2E=0D</D</B;1A:0A:2@91=90<8/<71<71:8,:8,;7+<8,?9-A;/C<,D=-H?.I@/LA/LA/M@-M@-O@-N?,N>1M=0L</K;.H:-G9,C9-B8,@:.@:.>:.>:.><0?=1??3@@4\9165º_^ËWX«78³))·--²,!´.#ª:"¯?'¤J(¡G%\9bE$\9aD#\9d@!\99<\1d\9f8/¢;2§8/¦7.¯:3¸C<¶D:±?5¨<0¨<0§;.©=0ºD:ÃMCÄC=¸71½7\1cÅ?$ç5)æ4(ÿ"&ÿ"&ÿ &ÿ\1e$ø+(ù,)é4)é4)æ4(ä2&ê.%ê.%Ü=(Ð1\1cÛ=1Ò4(Â91Æ=5¤F:Ìnb­p]\96YF\99UB³o\äidÕZUì>GñCLë=?æ8:Ñ>7Ñ>7½?3¶8,À3,Å81ñ@Hí<Dý2Eÿ5Hþ8Iü6Gô<Hø@Lÿ?Wÿ>Vÿ:Vþ9Uÿ6Yÿ7Zÿ7aÿ8bÿ=lÿ=lÿ=nÿ=ný>rý>rø@tø@töCaÿLjÿSqúGeð?\ÿQnÿh\83ÿd\7fëbtêasÕpxØs{ºvsªfc\8c]U\85VN\90\81\98\93»±¯Äº¸ÂÂÄÇÇÉÃÈοÄÊÅÌÖÆÍ×ËÍÙÏÑÝÚ×âàÝèêàëìâíïäàòçãóçéïãåïßéîÞèèÜæã×áÏÊн武\8f\96\8fv\88ri{e_xZ\uWbqRapQ_nO00.11/3315536727838938939:2:;3<>3>@5@B5BD7CE8DF9GI>FH=GH8GH8HJ4IK5LL2MM3ML8IH4ED?GFAJHSKITECX@>SOF7LC4JA2KB3LD7KC6F>3B:/D=5B;3@93?82>95=84;63:52C84C84@85@85;:8<;9<<<<<<?@;?@;D@5EA6LA/K@.O?(O?(AC.@B-K:2I80N45N45H8;H8;;B;3:3,?,4G49C+1;#B<$QK3ÒaQºI9£8&¢7% ;'\9d8$\9d:#£@)\9e:#¡=&¬=)­>*³:)°7&²3"²3"\9f8'\9f8'\9f:(¢=+¦A-©D0ªC0¨A.¨=)©>*°;)³>,ÀB3ÄF7Á=0¶2%Ì5*Í6+Ê;+Ì=-Ð<.Ñ=/á6.á6.ñ.,ñ.,ô.+õ/,å8*ä7)Ó>(Ó>(Ü:%Õ3\1eÌ4\1fÏ7"Ä8'À4#Ä@3ÕQDÓHAÙNGñSR÷YXýHMð;@ù4=ÿ:CàDEÞBCÏD?É>9´>2±;/¨?,©@-ÀO?ÄSCÖI@ÒE<é<>ðCEÿ<Fü8BùFLøEKúDPüFRüATø=Pü>XÿD^ÿGkÿBfö=fó:cò>k÷CpùIxüL{ÿMyÿKwïTtìQqÞPhßQiþVwÿf\87ÿZ\83ÿ@iüTxýUy¹aoÊr\80vi`\88{rª\90\81À¦\97ÍźÞÖËØÜÛÙÝÜÞÚèàÜêíÓîîÔïøÖïûÙòøâïûåòñíîòîïøõð÷ôïõñîóïìïééêääæàâãÝßÕÑÒÍÉʺº¸¤¤¢\8b\90\89{\80yr|qpzo~\85sx\7fmu|j//-00.11/3315616727827829:2:;3;=2=?4?A4AC6BD7CE8FH=FH=GH8HI9HJ4JL6LL2MM3KJ6KJ6KJEQPKWU`YWbUShQOdRI:MD5H?0G>/G?2H@3F>3C;0C<4A:2?82>71=84>95<74;63=2.>3/=52>63:97<;9<<<===?@;?@;D@5EA6LA/K@.O?(O?(>@+>@+J91J91N45L23D47C369@96=61D14G48B*8B*OI1`ZB¼K;«:*\9d2  5# ;'\9d8$\9c9"¢?(\9f;$£?(®?+¯@,µ<+³:)¶7&¶7&¢;*¡:) ;)¢=+¥@,§B.¨A.§@-ª?+¦;'±<*¼G5ÅG8¾@1»7*»7*Í6+Í6+Ê;+Ì=-Ð<.Ñ=/á6.á6.ñ.,ñ.,ô.+ô.+ã6(ã6(Ñ<&Ñ<&Ý;&Ø6!Ñ9$Ô<'Ç;*À4#¿;.ËG:ÐE>ÕJCëMLðRQùDIð;@û6?ÿ=FàDEÞBCÎC>Ç<7³=1¯9-¦=*§>+µD4¿N>ÙLCÖI@é<>ì?Aÿ<Fÿ=G÷DJöCIúDPüFRýBUù>Qû=WÿB\ÿFjÿCgù@iø?h÷CpûGtûKzüL{ÿLxÿHtêOoîSsí_wðbzýUv÷OpÿBkÿAjíEiêBf¼dr¾ft^QH\8c\7f\96\87̲£ÝÕÊìäÙåéèæêééåóçãñùßúûáüÿâûÿåþÿîûÿðýýùúýùúýúõüùôû÷ôøôñöððòììïéëíçéãßàÚÖ×ÇÇŲ²°\9b \99\8e\93\8c\86\90\85\86\90\85\8e\95\83\89\90~\86\8d{--+..,/0+12-23.4505606718919:2:<1<>3>@3@B5BD7BD7IG;IG;JH9JH9LJ5MK6NL7NL7KI=NL@SRW_^cgg\7fll\84il\8ffi\8c`XmXPeNGWG@PD>JD>JB=C?:@@<=>:;;83:72=90>:1>:.=9-74+85,:7.<90=;/><0></></E?1E?1J>.K?/O?/N>.P=,P=,5?$6@%;<*<=+>:/<8-961850=82@;5R42O1/j"&s+/\9c1;«@J¨:) 2!\9d2 £8&¢<&\9e8"\9c8!¡=&¥;%¨>(²?,´A.¼=,»<+¿:+¿:+¯>.¬;+ª9)ª9)«:*­<,­<*­<*´<+¯7&»=.ÉK<ÌG8»6'½1$Ç;.Ô4(Õ5)Ô8+Õ9,Ù9+Ú:,æ3,æ3,ô.+ô.+ò/)ñ.(á6%ß4#Ï:"Î9!à7$Ý4!Ú9'Þ=+Ò<.Ë5'Å8.Í@6Æ;4Ê?8ØD@àLHèJGäFCçB@éDBÖF>ÔD<ÉC8Ã=2³;-¯7)©:)ª;*®6(¾F8×LE×LEã?@ä@AöAHýHOòAGòAG÷CLüHQþEUù@Pú>WþB[ÿEfÿDeýDmþEnþIvÿKxþM{ýLzÿCuÿDvÿJrÿKsÿYzÿ_\80ÿUrïEbøKiÿSqÐEZÑF[Ê\82\85¿wzUH8\8b~n¶\8c\80Û±¥òÜÑÿêßöòñúöõ÷ôÿðíøûêýýìÿÿëÿÿîÿÿõÿÿ÷ÿÿýüÿýüÿþùÿýøÿû÷þùõýôõûòóûðôúïóïæçæÝÞÓÏÌÀ¼¹¬¯¦¢¥\9c\9d£\97\9d£\97£«\9c\9d¥\96\9a¢\93--+--+./*/0+01,23.34.45/7808919;0;=2=?2?A4@B5AC6HF:IG;JH9KI:MK6NL7OM8OM8KI=SQE]\anmryy\91\81\81\99\7f\82¥}\80£}u\8ask\80f_o[TdSMYMGSFAGB=CC?@?;<;83961;7.<8/<8,<8,:7.;8/<90>;2><0><0=;.=;.E?1E?1J>.K?/O?/N>.P=,P=,7A&7A&<=+<=+>:/=9.<94<94=82@;5P20M/-n&*|48¢7A¨=G¦8'¤6%¥:(©>,¥?)\9f9#\9d9"¡=&¤:$¨>(²?,´A.½>-½>-Â=.Ã>/´C3°?/¬;+«:*«:*¬;+¬;)¬;)³;*µ=,ÀB3ÆH9Ä?0¹4%¿3&È</Õ5)Ö6*Ô8+Ö:-Ú:,Ú:,æ3,æ3,ô.+ô.+ñ.(ð-'ß4#Ý2!Ì7\1fË6\1eÚ1\1eÙ0\1d×6$Ü;)Ô>0Ð:,Ë>4ÑD:Á6/Á6/Í95ØD@èJGçIFå@>Ý86Ð@8Ï?7Å?4À:/²:,°8*«<+­>-«3%¹A3ÑF?ÔIBâ>?ä@AøCJÿKRï>Dï>DöBKüHQÿGWüCSû?XýAZþBcÿCdþEnÿIrÿMzÿN{þM{üKyÿBtÿL~ÿT|ÿIqõMnþVwÿVs÷MjòEcõHfË@Uê_tÕ\8d\90PC3]P@¤znЦ\9aîØÍÿêßùõôÿýüþûÿöóþþíÿÿîÿÿíÿÿïÿÿõÿÿöÿÿûúÿûúÿþùÿýøÿû÷þùõÿö÷þõöþó÷þó÷õìíëâãÙÕÒÈÄÁ¸»²²µ¬¯µ©°¶ª¶¾¯¯·¨«³¤10+0/*0/*0/*0/*21,33+44,77/88099/;;1==3??5@@4AA5JD8KE9NG7PI9QJ7RK8QK;QK;NJGXTQcdxwx\8c\83\86±\8c\8fº\8b\92É\8b\92É\8c\8bÇ\83\82¾yv­nk¢ed\90[Z\86QPpJIiHGYCBT=<A87<76165086*75)2713828:/9;0>;*?<+B<$B<$I?&I?&J?+K@,JA2I@1I?5I?5P=7N;5G:4D719:48931>41>46>15=0J2(N6,~43\8dCB¬;A¨7=§<*¨=+©@+«B-¨?*¤;&¥;%¨>(ª7$­:'¸;)º=+Ã9,Ä:-Ê:/Ì<1Ä@4À<0¼8,º6*º6*»7+»7*º6)½5)È@4ÏA5Æ8,Ã/%Æ2(Í6+Í6+á0(â1)á3(â4)è3*è3*ï0(ï0(õ.)õ.)ð/&ï.%Þ4#Ü2!Ì7\1fÊ5\1d×0\1eÖ/\1dÕ2!Ù6%Ö8,×9-Ó?5ØD:ÔE=Î?7Å<2ÊA7ÑMAÕQEËI<¿=0Á=.Á=.¼=,º;*´9)´9)¶<-¸>/¸8-¼<1É>9ÎC>ØBCÜFGéJNðQUì?Cì?CòCJùJQýKYùGUøBXùCYøA_úCaûFiÿLoÿNwÿOxÿMwýJtÿKwÿT\80ÿU|ýIpùJkÿStÿVpøNhæG[åFZã[gÿ\93\9fÿ·¹ý\99\9b\91FAt)$©jaÓ\94\8bñÈÂÿßÙÿóðÿûøÿþÿù÷üûøÿüùÿÿøÿÿùÿÿûþÿûþÿýúÿýúÿüöÿûõÿú÷ÿùöÿ÷øÿö÷ÿôöÿóõüòñòèçäÜÙ×ÏÌÍÊÁÊǾÉ˽Ê̾ÆÐȽǿ·Á¹54/43.21,10+10+10+33+44,66.66.88.::0<<2>>4??3@@4IC7KE9OH8QJ:SL9SL9RL<QK;OKH[WTij~~\7f\93\8b\8e¹\96\99Ä\97\9eÕ\98\9fÖ\99\98Ô\93\92Î\8e\8bÂ\87\84»\80\7f«wv¢ml\8cfe\85]\nUTfLKPCBG>=8:94:8,97+27127157,68-<9(?<+D>&E?'I?&I?&J?+K@,JA2I@1I?5I?5N;5L93F93C60671560-:0-:05=008+F.$S;1\88>=\91GF©8>¢17§<*¨=+¨?*©@+¨?*¨?*ª@*¬B,ª7$­:'¸;)º=+Ã9,Ä:-Ê:/Ì<1ÅA5Â>2¿;/½9-¾:.¾:.½9,¼8+Á9-ÍE9ÏA5À2&Á-#Í9/Ó<1Ì5*â1)ã2*â4)ã5*è3*è3*ï0(ï0(õ.)õ.)ð/&ï.%Þ4#Ü2!Ì7\1fË6\1eÛ4"Ú3!Ö3"Ö3"Ó5)Õ7+Ñ=3Ó?5èYQáRJÒI?ËB8ÊF:ÍI=ÇE8¿=0½9*½9*º;*¸9(´9)¶;+¹?0¼B3ÁA6¾>3Æ;6ÌA<ÙCDÝGHçHLëLPí@Dì?CñBIùJQþLZüJXûE[üF\÷@^ùB`úEhÿJmÿMvÿOxÿNxþKuÿO{ÿO{ÿNuÿLsÿVwÿ\}þTnîD^ôUiïPdðhtÿ\92\9e÷\93\95ë\87\89´id\9cQL­neÎ\8f\86迹ÿÜÖÿóðÿùöþüÿüúÿýúÿýúÿÿùÿÿùÿÿúýÿúýÿûøÿûøÿüöÿüöÿüùÿûøÿùúÿö÷þòôýñó÷íìðæååÝÚÞÖÓÙÖÍÜÙÐÜÞÐÞàÒÙãÛÎØÐÄÎÆ::288055-33+22*22*33)33)55+66,77-99/;;1==3>>4??5KA5MC7RF6UI9VK9WL:TJ>TJ>PKQ]X^kl\8b\81\82¡\8d\93Í\99\9fÙ\9c¥ð\9f¨ó\9e£ô\9a\9fð\97\9bå\93\97á\91\95Õ\8c\90Ð\86\89¾\80\83¸xz¡np\97cc\7fVVrNM_HGYECPB@M<>M:<K;:@98><90=:1C>*D?+CA*CA*AB0BC1?E;>D:;DA;DA=<N?>P?BQADS>HQ>HQ=IG<HFFH=<>3O8(`I9\85N:\85N:\8d@,\89<(§<(¨=)©>*©>*¬?*®A,±>+°=*³6$¶9'Á7*Â8+Ê6*Ë7+Ò8.Ô:0Ï:3Í81Ì70Ì70Ï81Ï81Î7.Ì5,Ô<1Õ=2Ô7.Í0'Ñ3(Ù;0Û:0Õ4*è0&è0&ì0'í1(ó.(ó.(ö,(õ+'÷.'÷.'í3'ì2&Ü7$Ú5"Ï9!Î8 Ò:%Ñ9$Ï6$Î5#Ñ5(Ó7*Ñ7-Ñ7-ãNGêUNäZPÛQGÉI>ÃC8»C5·?1µ=$µ=$¶<%µ;$¸9&¹:'À</Ä@3ÉC:Å?6É@:ÐGAÓIGÒHFÓIG×MKèDEæBCêDHóMQúPYùOXøL\øL\õD^õD^÷EeûIiÿNrÿQuÿPwÿOvë\xéZvñWsõ[wÿ\vÿ[uúSgñJ^ýXiøSdìKZûZiéFWñN_ôM_òK]¶kfÌ\81|㬧ÿÐËÿíéÿñíýùøÿýü÷ýý÷ýýøþþ÷ýýûûùúúøûøóûøóÿûõÿüöÿüùÿüùÿ÷÷ÿóóüîîùëëïáàêÜÛâÙÒâÙÒåßÓíçÛïîÜòñßèóïÚåáÍØÔ==5;;388044,22*22*33)33)44*55+66,88.::0<<2>>4??5KA5MC7RF6UI9WL:WL:TJ>TJ>PKQ]X^lm\8c\83\84£\8f\95Ï\9d£Ý¢«ö¦¯úª¯ÿ¥ªû¢¦ð\9f£í\9f£ã\9c à\98\9bÐ\94\97Ì\91\93º\87\89°zz\96jj\86`_qWVhSQ^PN[KM\GIXDCI?>D>;2=:1A<(B=)CA*CA*AB0BC1?E;>D:;DA;DACBTHGYORaX[jZdm[enZfdYec\^SPRGbK;r[K\90YE\87P<\8d@,\8eA-«@,«@,«@,«@,¯B-°C.°=*¬9&µ8&·:(Â8+Ã9,Ë7+Ì8,Ó9/Õ;1Î92Í81Í81Î92Ò;4Ò;4Ð90Î7.ÛC8Ñ9.Ï2)Ô7.Û=2Û=2Ú9/Ø7-è0&é1'í1(í1(ó.(ó.(ö,(õ+'÷.'÷.'í3'ì2&Ý8%Û6#Ð:"Ï9!Ï7"Ï7"Ï6$Î5#Ò6)Ô8+Ñ7-Î4*É4-âMFðf\ëaWÐPEÁA6µ=/²:,¶>%¶>%·=&¶<%¸9&¹:'À</Ã?2ÉC:ÈB9ÎE?ÕLFÕKIÏECÎDBÒHFéEFçCDêDHòLPûQZúPYúN^úN^÷F`öE_÷EeûIiÿNrÿQuÿRyÿRyçXtê[wø^zù_{ûTnóLføQeÿZnÿ\mÿctîM\öUdñN_ùVgóL^òK]°e`¿toÔ\9d\98þÇÂÿçãÿìèúöõÿþýúÿÿúÿÿúÿÿúÿÿüüúûûùýúõüùôýøòÿúôÿú÷ÿú÷ÿõõûïï÷ééóååêÜÛçÙØâÙÒæÝÖîèÜøòæüûéÿÿíðû÷àëçÒÝÙ@>2@>2><0<:.:8,86*74+63*52)52)52)74+96-=:1@=4B?6I?3LB6RF6TH8VI8WJ9YMA[OCPIPXQXdd\88}}¡\89\92Ó\96\9fà\9a©ü¡°ÿ¨´þ¨´þª´ü©³û©²÷¦¯ô§¬î¥ªì\9f¡Þ\97\99Ö\8c\8dÅ~\7f·sp¥gd\99\Z\8cUS\85YP\7fYP\7fVOqMFhC?N=9H<<:??=<?4?B7?G<>F;9B?:C@=FKAJO:YxJi\88^q\8fbu\93xr\8c}w\91\8ei{\82]o\9aR]\9aR]­PK®QL±G7¦<,£7\1d¤8\1e©<(ª=)­>*¯@,´?-´?-¹<*¸;)½5'¾6(Ç5(É7*Ò5,Õ8/Ú7.Û8/Ø61Ú83Ú83Ù72Ù6/Ø5.Û81Ý:3çC:à<3Ù6-â?6ý[Pÿmbÿ]RãA6è0&ê2(ó0*ò/)ö)&ô'$ø(&ú*(ô/)ô/)è3(å0%Õ2#Ó0!Ñ6$Ô9'Å=%Æ>&Ê<&Ë='Ð:)Ð:)Ñ7+Ñ7+Ú@6Ð6,ÜGA÷b\äWPÍ@9Æ?9¹2,µ;#¶<$º<%º<%½:(¾;)Ã;-Å=/Æ=3ÌC9ÕPIÝXQÐQJ¿@9½@:ÈKEáGEàFDåKKëQQîRVëOSìLVîNX÷RcõPaôLeóKdúMkÿRpÿStÿQrïYvîXuöWsú[wÿ[tÿYrÿWjþUhÿcqýWeÿ\kÿ[jôEVóDUÿOeÿLb³ph¬iaÆ\91\8bé´®óÔÑÿèåøðíýõòõþûùÿÿ÷ÿÿõÿýûýúýÿüÿûøûöóýúóþûôÿøõþöóÿ÷õÿöôöèçæØ×ãÕÒÞÐÍàÖÌðæÜüõãþ÷åÿýèÿÿì÷ÿýçðíØáÞB@4A?3?=1><0<:.:8,85,74+52)52)52)74+96-<90?<3A>5H>2KA5QE5SG7UH7VI8XL@YMARKRXQXbb\86zz\9e\86\8fÐ\93\9cÝ\98§ú\9f®ÿ©µÿª¶ÿ­·ÿ®¸ÿ®·ü­¶û¯´ö®³õ¨ªç¡£à\97\98Ð\8b\8cÄ\81~³ur§ig\99b`\92`W\86`W\86]VxVOqNJYFBQBB@AA?;>3@C8AI>?G<9B?<EBFOTQZ_Po\8e^}\9cq\84¢r\85£\87\81\9b\8a\84\9e\9au\87\8ei{¤\g¥]h³VQ«NI¬B2§=-©=#«?%¥8$¦9%¨9%©:&®9'®9'´7%´7%»3%¾6(É7*Î</Ù<3Ú=4ß<3Þ;2ß=8Þ<7Ý;6ß=8äA:çD=æC<äA:ä@7åA8â?6Û8/Ó1&×5*êH=þ\Qö>4í5+ì)#ì)#ù,)ý0-ü,*ø(&ö1+÷2,ì7,é4)Ù6'Õ2#Ð5#Ñ6$Ä<$Å=%É;%É;%Î8'Í7&Î4(Î4(Ó9/Ï5+Ò=7åPJãVOÚMFÉB<¶/)·=%·=%»=&º<%½:(½:(Á9+Â:,Æ=3ËB8ÓNGÜWPÑRKÂC<¾A;ÆICâHFáGEåKKìRRîRVëOSìLVíMWùTeùTeúRkúRkþQoÿSqÿRsÿRsèRoîXuü]yÿa}ÿ[týUnûReûReüVdøR`ÿYhÿYhúK\ÿPaÿRhüE[ªg_\9dZRµ\80zܧ¡éÊÇþßÜóëèýõòôýúøÿþ÷ÿÿõÿýûýúýÿüÿüùýøõüùòýúóÿ÷ôþöóÿ÷õÿöô÷éèéÛÚäÖÓÝÏÌÞÔÊïåÛüõãÿùçÿýèÿÿìöÿüçðíÙâßEA5D@4C?3A=1?;/=9-;7,;7,73(73(73*84+:6-<8/?:4@;5E>4HA7NE6PG8SF3UH5WJ:YL<ULOYPS_^}vu\94\81\89Ç\90\98Ö\94¤ò\9c¬úª´ù«µú®¸ý°ºÿ²»ÿ²»ÿ³ºÿ²¹ÿ®²û¨¬õ ¢ì\96\98â\8d\8cØ\81\80ÌwtÁol¹j_£g\ bZ\93]U\8eSSwKKoCDV=>P86;?=BO?@O?@W:>`CGwRY\87bi§i\9a±s¤¾w£¼u¡Ém\94Çk\92ÕZyÊOnÓ?UÙE[ÝDIÐ7<½5'½5'µ="³; ®;(®;(²:)³;*¸;)º=+À;,Á<-Å6(È9+Ô:0Ù?5á>5á>5â;3à91Û81Ø5.Ø3-Þ93èA9ìE=éB:ã<4â;2Û4+×5(Ù7*Ò2$Ë+\1dÒ6'åI:õK<íC4î3,ê/(ø**ú,,û*-ù(+ë+(í-*ã5.â4-Ù5+Ö2(Ô2'Ô2'Ê9&Ê9&Ì9'Î;)Ñ:)Ñ:)Ô8+Ô8+Ð4(Ø<0Ó:4Ô;5æNMïWVÙEEÄ00À;(À;(¿:'¿:'Á9)À8(À8*¿7)Ä>2Æ@4ÎL?×UHÏSGÃG;¾D7ÂH;ØKB×JAÛNGáTMãUSßQOßNQàORðXdó[gú[mú[müVnøRjúPküRmÿCkÿLtÿZyÿYxÿXoýTkúWhþ[løZh÷Ygôblò`jácgèjnÜnmÊ\[\8cfYwQD\95of¿\99\90Ùº·ñÒÏïáàÿóòöû÷úÿûöÿþõÿýüþýþÿÿÿûþÿ÷úùúòùúòûøñüùòÿùöÿøõøïêíäßåÛÒÛÑÈÛÔÄìåÕü÷áÿüæÿþåÿÿçöýöéðéÝäÝHD8GC7FB6D@4B>2@<0?;0>:/:6+95*84+95,:6-<8/>93?:4D=3G@6LC4NE6RE2SF3UH8WJ:VMPXOR[Zypo\8e|\84Â\8c\94Ò\91¡ï\99©÷¦°õ¨²÷«µú­·ü°¹þ°¹þ±¸ÿ±¸ÿ®²ûª®÷¤¦ð\9d\9fé\96\95á\8c\8b×\82\7fÌ|yÆwl°pe©g_\98aY\92XX|PPtFGY>?Q:8=?=BO?@TDEdGKqTX\88cj\95pw®p¡³u¦¼u¡¶o\9b¿c\8a¸\\83ÅJiº?^Æ2HÔ@VÞEJÓ:?Â:,Æ>0ºB'±9\1eª7$ª7$­5$®6%µ8&¸;)À;,Â=.ÐA3ÑB4Ù?5Ú@6ß<3Ü90Ü5-Ú3+Ò/(Ð-&Ó.(Ø3-à91â;3ß80Û4,Ü5,Ñ*!Ì*\1dØ6)áA3Ý=/Ð4%É-\1eíC4óI:ÿE>ø=6÷))ñ##ö%(ý,/î.+î.+á3,ß1*Ö2(Ô0&Ò0%Ò0%Ì;(Í<)Ð=+Ò?-×@/ØA0Û?2Û?2Ñ5)èL@ãJDÎ5/ßGFòZYÞJJÕAAÂ=*Á<)À;(¿:'Â:*Á9)À8*¿7)Á;/Â<0ÈF9ÐNAËOCÃG;½C6½C6ÓF=ÒE<ÖIBÝPIÞPNÛMKÚILÜKNíUaó[gþ_qÿ`rýWoôNfõKfùOjÿLtÿPxÿVuÿQpýTkÿXoÿbsÿfwÿesþ`nôblóakãeiâdhÒdcÊ\[\87aTkE8\82\S­\87~Ê«¨æÇÄéÛÚÿñðôùõøýùõÿýôÿüüþýþÿÿÿüÿÿùüúûóúûóüùòýúóÿûøÿûøþõð÷îéêà×ÞÔËÜÕÅìåÕýøâÿþèÿþåÿÿæôûôéðéßæßKH7JG6IF7GD5EB3C@1B>2A=1<8-<8-;7.:6-;60<71>93?:4A>5DA8JD4LF6PE/QF0VG2WH3XMIXMIXVlnl\82z\81µ\8b\92Æ\90\9fä\98§ì§­÷¨®øª°ú¬²ü®´þ®´þ¯³ý¯³ýª®ø¨¬ö£§ñ\9f£í\99\9dç\91\95ß\89\8d×\83\87Ñ\81\80Æxw½imª`d¡[a\91TZ\8aTQpLIh^CV^CVz<G\82DO©EMµQYÎRZÒV^ôFg÷IjíOfèJaÛGUÓ?MÏ5?Ç-7Ú6=æBIåGFÚ<;È@4ÎF:¾I5´?+·<,·<,»<+½>-Ä?0ÇB3ÑC5ÓE7ÚC8ÙB7Û=2Ù;0Ú6-Ø4+Ù2)Ù2)Ó2(Õ4*Ù6-Û8/Ü8.Û7-Ü5,Ü5,Ò0#Ø6)Õ8)Ï2#Ê3 Ñ:'Ñ>*Ï<(Ô=,ßH7÷I@öH?ü46ó+-ô),ø-0ñ86î53Þ50Ú1,Õ0,Õ0,Ú.,Û/-è50è50å9/æ:0â<.â<.Û>/Û>/Ï7*ïWJöaZÐ;4Ï;9äPNÛFHäOQÏ<2Ë8.Ç7,Æ6+Ä:-Å;.À<-¾:+º;*»<+¿B0ÅH6ÆI7ÂE3½@.¼?-ÇG:ÆF9ÊJ?ÑQFÓRLÐOIÑMKÓOMæ[`ë`eüfrÿiuü]oïPbòLbøRhÿSwÿQuýWoùSkëblôkuõnuðipøfqñ_jçajîhqÐxvÁig\98m]\99n^pnYPN9jXL\90~r¼\9e\9cÞÀ¾ëÕ×ÿëíúöõþúùùÿÿøþþýýÿÿÿÿÿúÿÿ÷ÿûÿ÷øþôùüóüÿöÿÿøÿÿøÿúòÿøððèÝãÛÐßÚÇîéÖýûâÿÿæÿÿáÿÿáõùëíñãæêÜNK:NK:LI:JG8HE6FC4EA5D@4@<1?;0=90<8/<71=82>93?:4B?6DA8JD4LF6PE/PE/UF1WH3WLHVKGVTjki\7fy\80´\8a\91Å\8f\9eã\96¥ê¦¬ö§­÷©¯ù«±û¬²ü«±û­±û¬°ú¨¬ö¦ªô£§ñ¡¥ï\9e¢ì\9a\9eè\95\99ã\91\95ß\92\91×\89\88Î{\7f¼sw´nt¤io\9fkh\87da\80z_rv[n\8eP[\93U`·S[¾ZbÎRZËOWé;\ê<]àBYßAXÕAOÐ<JÏ5?Ë1;éELêFMßA@Õ76Å=1ËC7½H4·B.ÀE5ÀE5ÄE4ÅF5ËF7ÍH9ÕG9ÖH:Õ>3Ó<1Õ7,Ó5*Ö2)×3*Û4+Ü5,Ù8.Ü;1ß<3ß<3Ü8.Ù5+Û4+Ü5,Ñ/"Ü:-Ú=.Î1"Å.\eÎ7$Ð=)Ì9%Ï8'Ñ:)å7.î@7ÿ=?ÿ<>þ36ö+.æ-+ã*(Ô+&Ô+&Õ0,Ú51ä86æ:8ì94ì94ç;1å9/Þ8*Ü6(Ó6'Ò5&Í5(çOBÿkdÛF?È42ÖB@Ó>@êUWÖC9Ð=3È8-Æ6+Ä:-Æ</Á=.À<-¹:)»<+½@.¿B0¿B0½@.»>,º=+ÃC6ÃC6ÈH=ÏODÒQKÐOIÑMKÓOMé^cíbgýgsÿnzÿcuôUgöPfüVlÿRvÿPtýWoþXpõlvüs}ñjqßX_ò`kò`kéclõoxã\8b\89Õ}{¢wg uepnYPN9eSG\83qe±\93\91ܾ¼ëÕ×ýçéúöõþúùùÿÿøþþýýÿÿÿÿÿúÿÿ÷ÿüÿøùÿõúýôýÿ÷ÿÿøÿÿøÿýõÿþöùñæíåÚèãÐôïÜþüãÿþåþÿàÿÿâ÷ûíðôæíñãQN=PM<NK:MJ9KH9IF7GC7FB6C?4B>3@<3>:1>93>93?:4@;5?@:BC=IF7JG8PE/PE/UF/WH1UKASI?TR`kiwz\81­\8b\92¾\8f\9dÚ\95£à¥¦ù¦§ú¨©üª«þ¬­ý¬­ý«®ûª­ú§«ô¥©ò¡¨ì §ë ¨é\9f§è\9c¥æ\9a£ä\95\9eß\90\99Ú\89\95Ñ\84\90Ì\81\8d½}\89¹\85\7f£\81{\9f\96i\80\92e|·Q_¸R`âENãFOø9@õ6=è?,è?,ÖI-ÖI-ÅN,ÁJ(¾G)¼E'âUDÙL;Û96×52Û57Ý79Õ6:Ð15»<+»<+¾:+¾:+Ã7*Â6)Å3&Ä2%Î4(Î4(Ó2(Ó2(×3)Ø4*Ú6,Û7-Ü>3Û=2Û;/Ú:.Ú8-Ø6+×5(Õ3&Ô4&Ó3%Í4"Ï6$Î=(Ð?*Æ:!¾2\19Å:'Ã8%Ö/&ß8/ü:;ÿ?@ÿ8=ø16æ/1â+-Ô/-Õ0.Ü44á99é9<ê:=þ-2þ-2õ/.ô.-ä2(á/%Ó3#Ñ1!Å4#Ï>-økaâUKÆ84ÏA=Ê;=áRTæIDÞA<Ð92Ë4-Å8.Ç:0À>.¾<,·<*º?-»A,¹?*º;(º;(½<'¾=(¹?0¹?0¾D7ÆL?ÊPEÉODÊMGÌOIæabçbc÷gpÿpyÿhxö[köUgü[mù]rù]rÝhnálrÜ\83\8c\86ãzwÍdaôfrünzñdtôgwì\96\97ô\9e\9f·\9a\8a¦\89y[rV?V:XUFnk\¥\8b\8aÙ¿¾ðÖÙûáäÿôøÿøüýþÿûüÿþûÿÿýÿÿùÿÿõÿùÿøõÿô÷ýóúÿöÿÿøüýõÿýôÿÿöþúîóïãïíØøöáþþâýýáýþÞÿÿâýþîøùéö÷çRO>QN=PM<NK:LI:JG8HD8HD8EA6C?4A=4@<3?:4?:4@;5@;5@A;BC=IF7JG8PE/QF0UF/WH1SI?RH>SQ_jhvz\81­\8c\93¿\8f\9dÚ\95£à\9f ó¡¢õ¤¥ø¦§ú¨©ù©ªú©¬ù¨«ø¦ªó¤¨ñ §ë §ë¡©ê¢ªë¡ªë ©ê\97 á\96\9fà\94 Ü\92\9eÚ\91\9dÍ\8d\99É\96\90´\92\8c°\97j\81\95h\7f»Uc¸R`Ý@IÝ@Iõ6=õ6=êA.è?,ÕH,ÕH,ÃL*¿H&»D&»D&áTCÕH7Ü:7á?<éCEæ@BØ9=Ò37ÅF5ÅF5ÇC4ÅA2É=0Å9,Å3&Ã1$Ê0$Ë1%Ò1'Õ4*Ø4*Ù5+Ù5+Ù5+áC8Û=2×7+×7+Û9.Ü:/Ø6)Ó1$Ø8*Ð0"Ê1\1fÐ7%Ë:%Å4\1fÆ:!ÐD+Ã8%Æ;(Û4+Ü5,ð./ô23ý6;ÿ;@ÿKMýFHêECæA?å==â::â25Þ.1ù(-ù(-ó-,ó-,å3)ä2(×7'Ö6&Ã2!¿.\1dñdZê]SÎ@<ÓEAÉ:<ÝNPîQLãFAÓ<5Ì5.Ä7-Æ9/¾<,½;+¸=+¼A/¼B-¸>)·8%·8%½<'¿>)²8)²8)¸>1ÁG:ÅK@ÄJ?ÅHBÈKEä_`ä_`óclþnwÿgwö[köUgü[mù]rú^sÞioàkqÞ\85\7fì\93\8dð\87\84ßvsünzÿz\86ðcsâUeæ\90\91ÿ°±Í° ¯\92\82WnR>U9URCgdU\9f\85\84Ù¿¾ñ×ÚøÞáÿõùÿùýýþÿûüÿþûÿÿýÿÿøÿÿôÿùÿøôþóõûñùÿõýþöúûóÿüóÿÿöÿÿóùõéõóÞüúåÿÿãüüàýþÞÿÿâÿÿñüýíüýíXO@WN?VM>UL=TK<RI:QH9QH9LC4LC4JA2I@1H?0G>/G>/H?0CC9DD:IF5KH7QI2RJ3SK4SK4UNFTMEVUgji{y}­\8a\8e¾\8f\98Û\96\9f⦢÷¥¡ö¡¢þ¡¢þ\9e¤ÿ ¦ÿ\9f«ÿ ¬ÿ\9f¬ò\9dªð¢§ç£¨è­§ï¯©ñ³¦ø²¥÷\97¬ÿ\92§ú\92¢Ý\90 Û¯ ¿¯ ¿Î|\8a¹guÜ?HÜ?Hô5=ô5=é;=é;=ÔE?ÔE?â;Cá:BÙEEÌ88ÊC?ÊC?¾/+ÚKGìFJéCGî;Aì9?ä;>ã:=Ö>;Ô<9ÌA:È=6ÈC:ÑLCÉK=»=/³8)¶;,º8*»9+Å5,Å5,Ð.)Ò0+Ü0.ß31åB1Ý:)Ü1 Þ3"å8'è;*Ý8$Ö1\1dË5\1cÊ4\eÄ6\1eÄ6\1eÇ4$È5%Î4(Ï5)Í/&Ï1(Í7)Î8*Ê9&Ê9&Ò7#Ó8$à2'ã5*ï31î20í,1ë*/é,3ë.5ö.1ó+.ë.*ì/+å7,ä6+Õ8%Ñ4!À/\1aÃ2\1dæYHè[JÊ<2ÝOEÄ3.ÙHCÝQP×KJÑC?Ê<8Ç7.Æ6-È9)Ê;+Ç<)Å:'¾:%½9$¹<(º=)µ>*´=)±9+´<.¸>/¹?0½?0½?0Â@2ÃA3ïk_ôpdèc\óng÷qnèb_ðjiútsÿmzúhuðelìahòadøgjñpkñpkúxvÿ\81\7fÿTkÿ\sÙerÿ\9f¬\92»\9bn\97w]sLF\5MQ6lpU¥\95\88ȸ«êÕÒÿîëÿ÷÷ÿööúøùüúûûÿÿüÿÿûÿÿúþÿåÿïßÿéãüçéÿíøÿôøÿôþÿñýþðÿüìÿûëÿùèÿ÷æþøâþøâýùàþúáüþûþÿýþÿýXO@XO@WN?VM>TK<SJ;RI:RI:NE6MD5LC4JA2I@1I@1I@1I@1DD:EE;JG6LI8RJ3SK4SK4SK4UNFUNFVUgji{x|¬\87\8b»\8c\95Ø\92\9bÞ \9cñ \9cñ\9c\9dù\9d\9eú\9c¢ÿ\9e¤ÿ\9eªþ ¬ÿ\9f¬ò\9dªð¡¦æ ¥å¨¢ê¨¢ê«\9eðª\9dï\95ªý\93¨û\94¤ß\91¡Ü«\9c»¥\96µÃq\7f®\jÜ?HÜ?Hô5=ô5=é;=é;=ÔE?ÔE?á:BÞ7?×CCÎ::ÊC?Ç@<Á2.áRNèBFæ@Dì9?é6<à7:ß69Ò:7Ñ96ÐE>Ç<5Â=4ÌG>ËM?ÁC5¶;,´9*¹7)º8*Å5,Æ6-Ó1,Õ3.à42ä86â?.Þ;*à5$à5$â5$â5$Ú5!×2\1eÏ9 Î8\1fÆ8 Ç9!Í:*Í:*Ï5)Í3'Ò4+Ó5,Ï9+Í7)Ç6#Æ5"Í2\1eÏ4 Ý/$Þ0%é-+é-+ë*/ë*/é,3ê-4ð(+ò*-ì/+ì/+á3(à2'Ô7$Ô7$Ñ@+º)\14ÒE4Í@/ÕG=çYOÔC>ÔC>âVUÞRQÙKGÑC?Í=4É90Ç8(Ç8(Ç<)Å:'¿;&¿;&»>*¼?+·@,¶?+±9+³;-·=.¸>/»=.¼>/Â@2ÄB4ìh\ònbæaZðkdõolça^ðjiûutÿp}ÿn{õjqê_fêY\ñ`córmûzuøvtý{yýOfÿVm×cpÿ\9a§\8b´\94e\8en]sLKa:SW<quZ¬\9c\8fÔÄ·ôßÜÿòïÿúúÿøøüúûüúûúþÿúþÿùýþøüýæÿðßÿéâûæçÿëõÿñöÿòþÿñÿÿòÿüìÿüìÿùèþõäùóÝøòÜùõÜüøßøú÷úüùýÿüYPAYPAXO@WN?VM>UL=TK<TK<PG8OF7NE6MD5LC4LC4LC4LC4GE9HF:MH5OJ7RJ3SK4VK5VK5VMDVMDYVglizx{¦\85\88³\88\91Ì\8e\97Ò\98\99Ú\98\99Ú\97\9bå\99\9dç\99 ð\9c£ó\9e§ò ©ô\9fªè\9d¨æ\9b¤Ý\99¢Û\9c ß\9b\9fÞ\9c\9bá\9a\99ß\95\9b×\96\9cر\8f®\8c¿Ôx\9dÊn\93ÙQeÉAUÜ@DÜ@Dá?=á?=â>?â>?ã<Cã<CÞ=B×6;ÑA@Ï?>ÇC>À<7Ã83åZUâ?Bâ?Bç:>ä7;Ø88Õ55Ê;3Ë<4ÒH>Å;1»7*ÅA4ÊL=ÅG8»>,µ8&¹5&»7(È6)Ê8+×4-Ú70æ95é<8Ó5)Ô6*Ù5+Ú6,Ú6*Ú6*Õ<*Ö=+¾7!¼5\1f´7!µ8"¸:+¸:+¹5)¶2&è<8ç;7Ü>2×9-É;'Æ8$Æ8 Ç9!Ð7%Î5#Ô0$Ô0$×0*Ø1+Õ2-Ô1,Ö/'Ú3+Ù9-Ø8,Î7$Ì5"Ë:%Ï>)ÑC/À2\1eçSEÏ;-Ü?:ßB=ëHIõRSêVTçSQãPIÜIBÖC9Ï<2È9)Å6&Á8&À7%º9&º9&¶=*·>+²?-°=+¬;-®=/±=.±=.µ=-·?/½B3ÀE6Ú\Pæh\âa[îmgôpnåa_êehñloâQ^î]jôipñfmò_eöci÷soýyuùstørsûE^ÿMfÛ^nÿ\8e\9e\87¨\89^\7f`VoEMf<Y`?szY®£\91ÞÓÁþíåÿ÷ïÿþøÿý÷úÿøûÿùùÿûùÿû÷ÿùõÿ÷âÿèÚÿàÙ÷ÛÜúÞéûãëýå÷üèûÿìýúçþûèÿ÷æùðßòê×ïçÔóëØøðÝüùôÿü÷ÿþùZQBYPAYPAXO@WN?VM>VM>UL=SJ;RI:QH9PG8OF7OF7PG8PG8IG;JH<NI6PK8SK4TL5VK5VK5ULCVMDYVgkhyux£\81\84¯\84\8dÈ\8b\94Ï\92\93Ô\93\94Õ\92\96à\94\98â\94\9bë\97\9eî\98¡ì\9a£î\9a¥ã\97¢à\95\9e×\92\9bÔ\94\98×\92\96Õ\93\92Ø\90\8fÕ\80\86Â\82\88Ä ~±\9f}°Äh\8d»_\84ÑI]È@TÝAEÝAEâ@>â@>ã?@ã?@ä=Dä=Dà?DØ7<Ï?>ÓCBÅA<º61Ç<7æ[Vâ?Bâ?Bé<@æ9=Ù99×77Ì=5Î?7ÎD:Â8.¸4'¿;.ÄF7ÃE6»>,¶9'»7(¾:+Ë9,Í;.Ú70Ý:3ç:6ê=9Ò4(Ó5)Ø4*Ú6,Û7+Û7+Õ<*Õ<*Â;%Â;%»>(»>(º<-»=.Á=1Ã?3îB>ì@<ßA5Ù;/Ê<(Ç9%Ç9!É;#Ó:(Ï6$Ò."Ò."×0*Ø1+Ó0+Ñ.)×0(Ø1)Õ5)Ô4(Ì5"Ì5"Ë:%Î=(Ê<(Ì>*ñ]OÜH:Ð3.Î1,ã@AùVWÿvtÿrpÿleó`YäQGÔA7Ä5%½.\1eÂ9'À7%º9&º9&µ<)¶=*±>,¯<*¬;-­<.°<-¯;,³;+¶>.¼A2ÀE6ËMAÞ`Tâa[ñpj÷sqä`^â]`ã^aØGTèWdóhoóho÷djüioùuqûwsørsðjkö@YüF_Ú]mÿ\86\96\81¢\83Yz[RkAPi?_fEv}\²§\95æÛÉÿóëÿ÷ïÿûõÿûõúÿøüÿúùÿû÷ÿùòüôîøðÖûÜÍòÓÌêÎÍëÏÚìÔÝï×ëðÜñöâöóàùöãüóâôëÚêâÏæÞËëãÐñéÖùöñûøóýúõ\P@[O?[O?ZN>YM=YM=XL<XL<VJ:VJ:UI9TH8TH8TH8UI9UI9KG;LH<QJ8RK9WL6WL6WL6WL6TLAUMBYV_ifost\93~\7f\9e\83\87\8b\8f¾\8d\91¾\8e\92¿\90\92Ë\92\94Í\92\95Ú\94\97Ü\94\99Ý\95\9aÞ\95\9eÙ\91\9aÕ\8b\95È\87\91Ä\83\8cÃ\7f\88¿{\83Áx\80¾\87s\8e\88t\8f½_\83½_\83ñBië<cõ4Iô3HåCAåCAÕK@ÕK@àDEàDEõ9Jõ9JÞEGÖ=?ÉB>ÏHD»A6¯5*ÇB;ÜWPÝCAÝCAâ?@à=>Õ@:Õ@:ÉG:ÊH;Æ</À6)»6%½8'¿>+¿>+½<'¼;&Ã:(Å<*Ñ;,Ò<-Þ7.ß8/æ81è:3é77æ44æ0/ç10ê20é1/Ý2+Ø-&Ë1)Î4,È91Å6.Â00Ä22Ï9;×ACõ47ó25â7/Ý2*È7$Æ5"À:!Â<#È=&Å:#È5#Ê7%Ñ9+Ó;-Ñ;-Ï9+ÈA.Ä=*¿:'¾9&À<'Â>)Å='Ä<&Ï>-Ë:)Ú<1àB7Ù-+å97ã/2æ25Ó61Ø;6ÞD<åKCéQFëSHåVFäUEÈ@0Å=-»>,¹<*³@.³@.¯@/®?.¨=-©>.«=,ª<+«<+®?.µA2¹E6ÅLAÛbWàc]ípjóqsâ`bå_få_föjuûozôkré`gñ^dþkqÿyyÿzzýlsñ`gü;Xÿ>[àYjÿz\8b\8b \81i~_XvDZxFhwN|\8bb´°\95æâÇÿúçÿüéýÿïýÿï÷ÿó÷ÿóñÿðêýéáòßÛìÙÁìÁºåº¹ß¶»á¸Åà½ÉäÁØçÊÞíÐìîØðòÜøñßòëÙìÞÑçÙÌìÛÑñàÖñçÞòèßóéà[O?[O?ZN>ZN>YM=YM=YM=XL<XL<WK;VJ:VJ:VJ:VJ:WK;WK;MI=NJ>RK9TM;XM7XM7XM7XM7TLAUMBVS\c`ijk\8ast\93y}¬\82\86µ\85\89\86\8a·\88\8aÃ\8b\8dÆ\8a\8dÒ\8c\8fÔ\8b\90Ô\8c\91Õ\8c\95Ð\87\90Ë\80\8a½y\83¶s|³mv­go­ck©\80l\87\7fk\86´Vz¶X|ì=dç8_ö5Jø7LæDBæDBÖLAÖLAáEFáEFö:Kö:KÞEGÙ@BÉB>ÏHD·=2®4)ÌG@ÑLEÚ@>Ø><Ý:;Ý:;ÖA;×B<ËI<ÊH;À6)Á7*¾9(½8'º9&º9&¼;&¾=(Ä;)Æ=+Ò<-Ó=.Ý6-Ý6-ã5.å70å33ã11å/.è21ï75ð86å:3à5.Í3+Ð6.Ê;3Ç80Ä22Æ44Ñ;=ÙCEð/2ð/2à5-Ý2*É8%È7$Â<#Ä>%Ã8!Ä9"Ë8&Ï<*Ö>0ÙA3ÙC5ØB4ÏH5ÉB/À;(¾9&À<'Â>)Ä<&Â:$Ì;*Ê9(Í/$ãE:Ü0.ì@>ã/2Ü(+Ð3.Ò50Ò80Ó91Ñ9.Í5*Â3#¿0 ÌD4È@0º=+¶9'­:(­:(ª;*©:)¨=-©>.«=,«=,«<+¬=,²>/µA2ËRGßf[àc]èkeïmoåceïipônuûozþr}ömtìcj÷djÿrxÿzzýssúipí\cþ=Zü;XÝVgùr\83\8f¤\85x\8dnl\8aXm\8bYz\89`\8a\99p¸´\99àÜÁùòßþ÷äÿÿñÿÿñõÿññÿíçúæÜïÛÑâÏÉÚÇ­Ø­¨Ó¨ªÐ§­Óª¸Ó°»Ö³ÊÙ¼ÑàÃâäÎçéÓòëÙñêØïáÔéÛÎêÙÏëÚÐæÜÓäÚÑâØÏZN>ZN>YM=YM=YM=XL<XL<XL<XL<WK;WK;VJ:VJ:WK;XL<XL<QI<RJ=TK:VM<XM7YN8YM7YM7WMAVL@VPR_Y[c`sjgzqp\8fzy\98|\7f ~\81¢\81\82²\84\85µ\87\85Æ\89\87È\89\88Ì\89\88Ì\87\87Ã\83\83¿|~±vx«qq¥ll fe\9ecb\9b\92]Y\90[WÃGQÊNXý9Mù5Iÿ1>ÿ5Bï@;ï@;ÜIAÜIAãDHãDHõ:Mõ:MÕFBÕFBÃD;ÇH?°</­9,ÎPDÄF:Ñ<8Ì73Í2.Ð51Í@7ÑD;ÂI8¾E4À9&Á:'À;(¾9&¼:$¼:$¾:%¿;&Æ8$É;'Õ:(Ö;)ß5(ß5(å3)æ4*ï'*ñ),û*/ÿ.3ÿ/6ÿ07ÿ17ÿ17ý4:ý4:ù4=ù4=ÿ2Cÿ3Dÿ/Gÿ/G÷(0ø)1ê20è0.Õ7,Ô6+Î;+Ï<,Ë3%Ï7)Ü8.à<2ä<3å=4ç<4è=5ÒM<ÍH7ÉA1Ã;+Â9'Â9'Æ9(Æ9(É1$Ñ9,â=7èC=ß//Ý--ë46ë46Ö5+×6,Ö8-Ø:/Ô</Ò:-Ë<.É:,ÒM>ÌG8½?1¶8*¬6(¬6(©8*©8*«;-¬<.­>-­>-«<+ª;*¬=,­>-ÀKAØcYÝc^ælgîpsçilôqyúw\7fígpöpy÷qxñkrÿktÿv\7fÿu|ùhoüblðV`ÿ=]ÿ6VáPaøgx\9c§\87\90\9b{z\9bdx\99b\82\95g\8d r­±\8eÈÌ©ÝàÃçêÍéøÙäóÔÕðÏÌçÆÂ༹׳³Íª­Ç¤\94Å\8e\92Ã\8c\98Ä\8f\9eÊ\95§Ë\9b©Í\9dµÎ¤»ÔªÎÙ¹Ôß¿åãÎéçÒîàÕéÛÐçÒÍäÏÊÝÏÄÙËÀÕǼYM=YM=YM=XL<XL<XL<XL<XL<XL<WK;WK;WK;WK;WK;XL<YM=RJ=SK>UL;VM<YN8YN8ZN8YM7YOCWMATNPZTV[Xk`]pgf\85po\8etw\98vy\9az{«~\7f¯\82\80Á\85\83Ä\85\84È\85\84È~~º{{·vx«rt§pp¤mm¡ji¢gf\9f\87RN\86QM¼@JÇKUþ:Nû7Kÿ3@ÿ5Bï@;ï@;ÜIAÜIAãDHãDHõ:Mõ:MÑB>ÔEAÁB9ÅF=®:-¯;.ÒTH¿A5Ë62Ä/+Ä)%È-)É<3ÎA8¾E4¹@/Â;(Ã<)À;(¿:'¾<&À>(À<'½9$Ä6"Æ8$Ó8&Õ:(ß5(ß5(å3)æ4*ù14þ69ÿ7<ÿ5:ÿ,3þ'.û(.ý*0÷.4ó*0í(1ð+4û.?û.?ø":ð\1a2ò#+ô%-ç/-æ.,Ó5*Ñ3(Ê7'Ë8(Ï7)Õ=/ã?5ä@6å=4â:1ã80ã80ÓN=ÑL;ÏG7Ç?/À7%¾5#Ä7&É<+Í5(Ð8+çB<Ý82à00Ï\1f\1fî79é24Ó2(Ó2(Ñ3(Ñ3(Í5(Í5(Æ7)Å6(ßZK×RCÇI;½?1³=/²<.¯>0°?1«;-¬<.®?.­>-«<+ª;*ª;*ª;*°;1ÏZPÛa\êpkôvyëmpôqyõrzÿy\82ÿ\7f\88ÿy\80ðjqúdmÿpyÿu|þmtø^hîT^ÿ>^þ5UÞM^óbs «\8b\9b¦\86\7f iz\9bd\82\95g\8a\9do¢¦\83´¸\95ÈË®ÕØ»ÊÙºÃÒ³°Ëª¦Á \9d»\97\98\92\97±\8e\94®\8b\85\7f\85\7f\8d¹\84\94À\8b\9dÁ\91\9eÂ\92ªÃ\99°É\9fÁ̬ÈÓ³ÛÙÄâàËëÝÒå×ÌáÌÇÛÆÁÑø˽²Å·¬ZM<ZM<ZM<ZM<ZM<ZM<ZM<ZM<WJ9XK:XK:XK:YL;YL;YL;ZM<XL>YM?ZM<ZM<[O9[O9[O9\P:YM=YM=VMHXOJXQX\U\`Zfb\hhe\82ol\89ro\9cur\9fzu·\82}¿\89\82È\8a\83É\89\8a\8c\85\8d\90\8ei\9f\81\\92¤C3£B2»?3ÃG;Þ?9Þ?9ô=9ýFBö=;õ<:ï<?ð=@êAHëBIæBMåALÈC<Ä?8·A5´>2­>-­>-ÁC7ÍOCÊ5/Ñ<6Î1,Î1,ÑD:Ê=3°7&¸?.¼5!À9%Ã<(Á:&À9%À9%Å:%Æ;&Î9%Ï:&×5&Ô2#Ú-\1fÞ1#ì6+ô>3ó8/ñ6-÷0)ô-&û'$ú&#ü$%ü$%ü%*ø!&ü ,ÿ'3ÿ%;ÿ!7ÿ\154ÿ\121ú*7ñ!.â#*ç(/Û-.Ö()Õ,)Ý41è21ê43õ34õ34÷/1ô,.ò*,ð(*Ø;2Ô7.Ô70îQJ¼"\1aÄ*"áD=Ê-&Ì-'Ü=7çD=ß<5Ö/)Ö/)á6/æ;4Ø@2Ô<.Ì6(É3%É7*Í;.È</Å9,êbVáYMÇC7º6*¼9/º7-²2'´4)³/#³/#±1$²2%°6'²8)±<+³>-°:.¹C7Ö\Wêpkðswôw{úx\82óq{þ|\84úx\80÷tzøu{ÿr}ÿr}ÿmxþhsý_mëM[ÿ9[ÿ8ZÛDUîWh\9b¢\80\97\9e|} fx\9ba~\94c\82\98g\94\9fu\9c§}\9d©\83\9b§\81\8d¦~\89¢z}¡sx\9cnv\9ckx\9em\7f¡o\82¤r\7f¯q\83³u\89¹{\8d½\7f\92¾\83\94À\85\9c¿\89\9dÀ\8a¦»\92ª¿\96¾Â©Ë϶ßÓÇßÓÇÞÆÄÕ½»É¼¶¿²¬¸«¥YL;YL;YL;YL;YL;YL;YL;YL;WJ9XK:XK:XK:YL;YL;YL;ZM<XL>YM?ZM<ZM<[O9[O9[O9\P:[O?[O?WNIXOJWPWZSZ\Vb^Xd_\yfc\80jg\94nk\98to±\7f\86\7fÅ\87\80Æ\8d\81¿\8a\8a\84\91\96\92\82]\93 ?/\9c;+±5)»?3Ú;5Ý>8ñ:6ö?;õ<:ô;9ï<?ð=@êAHêAHã?Já=HÂ=6¿:3²<0°:.©:)«<+¿A5ÊL@ÚE?ØC=Ô72Ò50ÐC9ÎA7µ<+®5$¾7#Á:&Ä=)Ã<(Ã<(Ã<(Æ;&Æ;&Î9%Ì7#Ô2#Ö4%â5'ç:,ï9.ï9.é.%é.%ñ*#ñ*#û'$ý)&ÿ)*ÿ+,þ',ú#(ý!-ÿ&2ÿ#9ÿ\1d3ÿ\110ÿ\ f.ð -û+8ò3:è)0×)*Ü./Û2/×.+ð:9ï98ö45ô23÷/1÷/1ù13û35Ò5,Ù<3Õ81âE>àF>Ë1)Ï2+À#\1cÓ4.Þ?9çD=à=6Ù2,Ø1+à5.â70Ò:,Ï7)Ë5'Ê4&Ê8+Í;.È</Æ:-ëcWàXLÅA5¸4(¾;1¿<2¸8-»;0º6*º6*·7*¶6)±7(±7(­8'­8'²<0¹C7ÓYTçmhíptõx|ý{\85÷u\7fþ|\84úx\80ùv|ùv|ÿr}ÿp{ÿjuûepü^lëM[ÿ9[ÿ9[ßHYíVg\93\9ax\8d\94rt\97]q\94Zw\8d\{\91`\89\94j\8d\98n\8a\96p\86\92ln\87_m\86^f\8a\g\8b]j\90_p\96ex\9ah|\9el~®p\82²t\87·y\8b»}\90¼\81\91½\82\98»\85\9a½\87\9d²\89\9f´\8b°´\9b»¿¦ÐĸÔȼ׿½Ñ¹·Ä·±º­§²¥\9fYL;YL;YL;YL;YL;YL;YL;YL;WJ9XK:XK:XK:YL;YL;YL;ZM<[K<\L=\L<\L<]N;]N;[O9\P:_RA^Q@\PB[OAYNHZOI\QO]RP^RjeYqf^\87kc\8cpk¥}x²\86\87\9b\84º\97\80¶¢s\9f\9fp\9cºo\98Àu\9eÀc\8f®Q}Ë62Å0,¹5(¿;.ÄE4ÈI8ÙB7ÛD9ô<>ô<>û7Aü8BìAGé>DÐDCÌ@?»=1¸:.¬;+«:*¨9(©:)¾>1ÉI<ÜA<Õ:5Ú64Ý97ÙE;áMCÊK:³4#À9&À9&Â;(Å>+É>+È=*Ë:)Ê9(Ò6'Î2#Ö.!Ý5(î<2ò@6ñ91ê2*×8%×8%Þ3"Þ3"è-$é.%ì,'í-(î.-ê*)ï'1ò*4ú%9õ 4ú\17\162ë(6ñ.<ï7Að8Bí<Fí<Fê5>â-6ó/;ó/;ö-7ö-7ô-2õ.3ñ10ñ10Ö1-á<8Ú53à;9ÿkjåA@Ñ/-Ð.,Ù:6Þ?;ßB;Ù<5Ò8,Ð6*Ð7)Ï6(À9%¿8$¿7'Á9)Á<-Â=.Ä;1Ä;1ê`VÞTJÊ:2À0(Í81Ò=6Ò91Ô;3Ý:3Ý:3Ø;2Ö90Ê;-Æ7)»7(¹5&·;/¼@4ÏTMãhaëoqöz|ÿ\80\87ú{\82û|\83ùz\81ûx\80ûx\80ÿr\7fÿn{þfsø`müYjíJ[ÿ7Wÿ9YâKZèQ`\82\8dey\84\e\86Od\85Nm\83Rq\87V{\88\{\88\t\85[p\81W^{Ma~P^\86Re\8dYl\95]s\9cdz g}£j\81­n\84°q\87µt\8a¸w\89ºx\8a»y\8eº{\8f»|\92°|\90®z\9c§\85¤¯\8dº³¡Â»©Ë¸²É¶°²­±¦¡¥\9c\97\9bYL;YL;YL;YL;YL;YL;YL;YL;WJ9XK:XK:XK:YL;YL;YL;ZM<[K<\L=\L<\L<]N;]N;[O9\P:^Q@]P?[OAZN@XMGYNHZOMZOM\Ph`TlaY\82f^\87mh¢zu¯\83\83\9a\83¹\9d\86¼¯\80¬¬}©Äy¢Äy¢Ãf\92±T\80ÜGCÙD@ËG:ÊF9ÈI8ÈI8ÙB7ÚC8ô<>õ=?ý9Cþ:DíBHé>DÎBAÉ=<½?3¸:.¬;+«:*©:)ª;*½=0ÆF9Ö;6Ð50ß;9åA?ÛG=èTJØYH»<+Á:'¾7$¾7$Ã<)É>+È=*Ë:)Ë:)Ï3$Î2#Ù1$á9,ñ?5ñ?5í5-å-%Ø9&Ø9&ß4#ß4#è-$è-$ë+&ë+&ê*)è('í%/ò*4ú%9÷"6ÿ\1d9ÿ <ú7Eè%3ç/9ÿOYÿakÿPZò=Fï:Cì(4î*6õ,6ø/9ö/4ò+0è('ã#"Õ0,Ú51Õ0.æA?ÿqpøTSÞ<:èFDÛ<8Ú;7Ö92Ô70Ñ7+Ð6*Í4&É0"¼5!¼5!¾6&Á9)À;,¿:+Â9/Ä;1ãYOØNDÈ80Â2*Ò=6ØC<Ö=5×>6â?8ã@9ßB9Ý@7ÑB4Í>0Á=.¾:+¶:.¸<0ÊOHßd]ëoqø|~ÿ\83\8aü}\84÷x\7f÷x\7fûx\80ýz\82ÿr\7fÿmzýer÷_l÷TeëHYÿ4Tÿ7WãL[áJYozRfqIVw@XyBcyHi\7fNs\80Tu\82Vq\82Xo\80Vj\87Yn\8b]m\95at\9ch{¤l\7f¨p\83©p\84ªq\82®o\84°q\87µt\88¶u\86·u\86·u\8b·x\8c¸y\93±}\8e¬x\95 ~\99¤\82¯¨\96»´¢Èµ¯É¶°°«¯¢\9d¡\97\92\96ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8YJ7ZK8ZK8ZK8[L9[L9[L9\M:]J;^K<]L:]L:]N;]N;]N9^O:\O<[N;[N;[N;^N>_O?_O@`PAbNZeQ]aTnfYshe\90ur\9d~x¤}w£\9a|\9e¦\88ªÎ\86\9cÌ\84\9aèq\85âk\7féTjÚE[ÿ;Nÿ>QïJPèCIÌG@ÉD=ÏD=ÒG@êBBëCCô?FöAHæHGáCBÈE;Â?5ºB4µ=/«<+ª;*©:'©:'¾8-Æ@5æB@à<:î@?í?>Ü:5éGBåYLÖJ=ÆA0½8'º2"¿7'È;*È;*Í7)Î8*Ð0$Ô4(â5.è;4ð93í60ë.*ç*&á/-â0.ë/0í12ô/6ö18ö3;÷4<è-8è-8é.?ì1Bò-Ið+Gù+Oÿ2Vë=Gâ4>ìBMÿalÿlyÿYfôCSñ@Pë5Dê4Cæ7>æ7>Ø=8Ô94Â9)½4$Ç4*Â/%Ì91î[Só^ZîYUØC?ÞIEÙD@Ñ<8Ë7-Ë7-Ì:+Ì:+È7$Å4!®<$­;#°;'´?+µ;,²8)»8.Â?5ÜMEÖG?Ñ4/Î1,ä;4è?8ç60ç60ó-.ô./í4/í4/á90ß7.Î:,Ì8*¼6*¼6*ÈIBÞ_Xênlù}{ÿ\86\88û\7f\81óv|õx~úx\80üz\82ÿq\80ÿl{üds÷_nóRdëJ\ÿ4Tÿ8XãQ\ÙGR^nAWg:Vr?ZvCfzIk\7fNt\81Vw\84Yw\8a]y\8c_t\96dw\99gv¡i{¦n\7f«n\80¬o\84ªm\84ªm\86¬o\88®q\87´s\88µt\84¶o\85·p\86¸s\88ºu\8e¶z\88°t\8e£x\92§|¬¬\94»»£ÎÀµÒŶºÆ§«·\98\9c¨ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8YJ7ZK8ZK8ZK8[L9[L9[L9\M:]J;^K<]L:]L:]N;]N;]N9^O:ZM:[N;[N;\O<_O?`P@`PA`PAaMYbNZ]PjaTnda\8cqn\99ys\9fxr\9e\91s\95£\85§Ð\88\9eÎ\86\9cçp\84Þg{åPfØCYü3Fÿ;NðKQèCIÊE>ÇB;ÏD=ÒG@éAAêBBó>Eô?FäFEßA@ÆC9Á>4¸@2²:,¨9(¨9(¨9&©:'½7,Ã=2ëGEåA?ê<;ä65Ö4/á?:é]Pôh[×RAÆA0½5%¿7'Ç:)Æ9(Ì6(Ï9+Ñ1%×7+æ92è;4ê3-æ/)é,(ë.*ê86ë97ó78ó78ø3:ø3:ö3;ö3;î3>ï4?ð5Fñ6Gõ0Ló.Jÿ1Uÿ:^ã5?ûMWÿ`kÿ^iÿVcûQ^õDTè7Gõ?Ní7Fß07Ú+2Ì1,Í2-Â9)Á8(É6,Ã0&ÜIAüiaßJFäOKÏ:6Ð;7àKGÕ@<Ë7-Ë7-Í;,Í;,Ë:'É8%°>&­;#¯:&²=)²8)®4%»8.ÈE;ÕF>ÔE=Ó61Ò50å<5æ=6å4.å4.ñ+,ò,-ë2-ì3.â:1á90Ò>0Ñ=/½7+º4(ÂC<×XQåigø|zÿ\86\88ü\80\82ôw}öy\7fûy\81üz\82ÿo~ÿixúbqö^mñPbîM_ÿ6Vÿ9YæT_ÕCNUe8Td7YuB`|In\82Qs\87Vz\87\~\8b`\7f\92e\83\96i{\9dk}\9fmz¥m|§o~ªm\7f«n\83©l\83©l\85«n\87­p\85²q\85²q\82´m\82´m\84¶q\86¸s\8b³w\86®r\8e£x\95ª\7f³³\9bÄĬÙËÀÞОÂέ±½\9c ¬ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8YJ7ZK8ZK8ZK8[L9[L9[L9\M:]J9^K:^K:^K:^M;^M;]N9^O:^O:^O:_P9`Q:aQ:aQ:aQ:`P9fLMgMN]Q_aUcdd\80rr\8ezw\92xu\90\95u\84¥\85\94Ø\81\87Ø\81\87ýknödgÿKQö=Cÿ#Gÿ,Pÿ;Tü6OÛ>GÚ=FÓCCÒBBÜCEÜCEÞCAßDB×G?ÓC;ÄB5À>1´>0®8*¦9%¨;'¬;)®=+Ä:/Ê@5ä::â88æ/1ä-/Ý52ß74ãOCÿk_îiZ×RCÆ</Ã9,É:,Ç8*Í5*Ò:/Ö3*Ú7.ç83æ72é0-ç.+í0.ñ42ÿ,Gÿ+Fÿ(Eÿ&Cÿ"@ÿ\1e<ÿ\1e\1c:÷&Eø'Fõ-Qö.Ró*Vó*Vÿ1cÿ=oçJSþajÿitôXcëJZíL\éDU×2CäBOÙ7D¿10·)(£6"§:&\99F&\9aG'¸?,µ<)Ù[MÜ^PÊG=ÈE;¾71Ã<6àUNÑF?È:.Æ8,È;)Ç:(Ç9#É;%§A(£=$¥<'§>)©8(¦5%¼<3ÎNEÖE@×FAÜ73Ø3/í62ì51î-&ò1*ÿ(,ÿ(,û--û--ì5-ì5-Ý=1Ý=1Ç;.¿3&½=2ÏODßb^öyuÿ\87\87ÿ\83\83ø{\81ù|\82ý{\83ûy\81ÿl~ýdvö]oòYkíL^íL^ÿ5Tÿ7VàS[Ë>FJ`/Oe4ZuBd\7fLv\87Z}\8ea\84\8fe\86\91g\86\99l\8a\9dp\84¦t\84¦t}¨p|§o}©j}©j\82©j\83ªk\85©l\86ªm\84®n\84®n\7f±j\80²k\80¶k\83¹n\87´s\83°o\8d§x\95¯\80´·\9cÄǬØ̾ÜеÀÔ¢­Á\90\9b¯YJ7YJ7YJ7YJ7YJ7YJ7YJ7YJ7YJ7ZK8ZK8ZK8[L9[L9[L9\M:]J9^K:^K:^K:^M;^M;]N9^O:`Q<`Q<aR;aR;aQ:`P9_O8_O8gMNhNO^R`cWegg\83vv\92~{\96}z\95\99y\88¥\85\94Õ~\84Ö\7f\85ÿmpýknÿRXüCIÿ'Kÿ-Qÿ;Tý7PàCLáDMÖFFÐ@@ÚACÙ@BÛ@>ÜA?ÔD<ÑA9ÃA4¿=0´>0®8*§:&ª=)±@.´C1Ê@5ÐF;Ý33à66ã,.æ/1ã;8Ö.+Ê6*éUIÿzkã^OÍC6Ç=0Ê;-Ç8*Í5*Ó;0Ú7.Û8/ä50ã4/é0-ê1.ò53õ86ÿ!<ÿ!<ÿ =ÿ =ÿ\1d;ÿ\e\1c\e\e\1d<ì$Hï'Kí$Pð'Sÿ0bÿ?qÿfoý`ióWbíQ\ðO_íL\ã>OÕ0AÝ;HÓ1>½/.¸*)¤7#§:&\96C#\95B"¯6#²9&ÓUG¹;-Â?5¹6,¹2,ÊC=ãXQÓHAÇ9-Ä6*Ä7%Â5#Ã5\1fÇ9#§A(¡;"£:%¥<'§6&¦5%À@7ÕULÙHCÚIDß:6Ø3/ê3/é2.î-&õ4-ÿ(,ÿ'+ø**÷))ç0(æ/'×7+×7+Ì@3¿3&¹9.ÈH=Ù\Xóvrÿ\88\88ÿ\86\86ü\7f\85ý\80\86ÿ}\85ûy\81ÿj|úasóZlïVhçFXêI[ÿ2Qÿ3RÜOWÄ7?CY(Lb1To<a|Ix\89\\83\94g\8b\96l\8c\97m\8b\9eq\8f¢u\8a¬z\88ªx~©q{¦nz¦gz¦g\7f¦g\7f¦g\82¦i\84¨k\81«k\82¬l|®g~°i\7fµj\81·l\89¶u\85²q\8f©z\97±\82³¶\9bÁÄ©ÒƸÔȺ±¼Ð\9e©½\8b\96ª[J6[J6[J6[J6[J6[J6[J6[J6\K7\K7\K7\K7\K7\K7\K7\K7[I;\J<ZM=ZM=XM;YN<ZR=\T?^S?^S?^Q@_RAcQCbPBbOA`M?kLIjKHaQ\jZegl\8cv{\9b{\86³\80\8b¸\8e\83­\96\8bµ¾\87\9e¾\87\9eåywäxvùlZôgUïMZåCPã=IçAMîBNê>Jé;Dé;Dâ<@à:>Ø=;×<:Í@6Ê=3¿=/»9+ :$ªD.¬;)©8&Ã?3ÊF:Ò;4Î70Ú70Ú70Û7+Ú6*Û:&Ü;'Ù;"Õ7\1eß82öOIòZOÛC8Å8'Ë>-ÓB1Î=,Ö1+íHBä+0î5:õ3>î,7ÿ?Pì'8ü&(ÿ*,ÿ*,ö "ù%$ý)(û)(ð\1e\1dí!$ø,/é!+î&0ï/>ä$3ÿYmé,@þajü_hÿZaúU\ôPQìHIØA:Ï81ÁD2ÁD2­D.¢9#\945\1f\967!\9a;)\9b<*¨71ª93ÄDA¼<9À00Å55Ç31ÖB@ÛLFÙJDÑD:Æ9/Å2(Ç4*Ì4)Ë3(¸<0³7+²,!­'\1c¸* Å7-ÔA7ÙF<æODÜE:Û7.Ö2)é-+î20ÿ.1ÿ.1ò12ñ01ó/0ó/0ð0+ð0+ã7+â6*Ñ?0Â0!º@1·=.Ò_Xæslÿ\8f\8e÷\85\84ù\88\8cù\88\8cÿs\85ÿhzÿ[wÿYuÿRnûJfýAbó7Xï<Zí:XÃgj\959<BP/N\;Uw:e\87Jt\98[z\9eax d|¤h~§k\7f¨l~§k~§k|¦g{¥f|£d|£d~¢b\7f£cz¥m|§o~ªk\7f«l~®d~®d\80±b\82³d\86´k\87µl\89±u\8a²v\95´\8a¡À\96«Ä¤¬Å¥¤²³\8b\99\9aw\85\86\K7\K7\K7\K7\K7\K7\K7\K7]L8]L8]L8]L8]L8]L8]L8]L8\J<]K=\O?\O?ZO=ZO=ZR=[S>^S?]R>]P?\O>`N@aOAcPBcPBkLIkLIcS^m]hkp\90y~\9e}\88µ\82\8dº \95¿\9a\8f¹³|\93±z\91áusé}{ÿr`öiWüZgðN[ëEQîHTöJVòFRí?Hê<Eá;?ß9=×<:Ö;9Í@6Ê=3¿=/¼:,¤>(¦@*©8&¬;)Ã?3Â>2Ì5.Ô=6Ö3,Ö3,Ø4(Ø4(Ø7#Ú9%Ú<#Ù;"Ü5/èA;æNCáI>Í@/Å8'Ê9(Ï>-Þ93ðKEç.3ï6;÷5@ð.9ÿ>Oë&7ù#%ú$&ý')ÿ*,þ*)ú&%ù'&û)(ï#&ð$'ì$.ÿ9CÚ\1a)ò2Aü?SÞ!5ÿluÿclÿZaüW^óOPæBCÕ>7Ô=6¸;)ÀC1´K5¨?)\923\1d\8b,\16\8a+\19\8b,\1a\9d,&­<6ÒROÉIFÄ44Å55Ð<:êVTÖGAÕF@ÎA7Å8.Å2(È5+Ï7,Ï7,¼@4¹=1¼6+¼6+Ä6,É;1ÔA7ÚG=áJ?ÙB7Ú6-×3*ê.,î20þ-0þ-0ò12ñ01ó/0ó/0ð0+ð0+ã7+â6*Ò@1Â0!¸>/¶<-Ñ^Wévoÿ\90\8f÷\85\84ö\85\89ö\85\89ÿq\83ÿgyÿZvÿXtÿRnûJfû?`õ9Zò?]ó@^´X[\9047AO.N\;Vx;e\87Jr\96Yw\9b^v\9eby¡e|¥i}¦j|¥i{¤hz¤ey£d{¢c{¢c}¡a}¡ax£kz¥m|¨i}©j|¬b|¬b~¯`\80±b\82°g\84²i\87¯s\85­q\8a©\7f\8e­\83\8f¨\88\8b¤\84w\85\86aopO]^\K7\K7\K7\K7\K7\K7\K7\K7]L8]L8]L8]L8]L8]L8]L8]L8]L8_N:`Q>`Q>[P>ZO=YPAZQBZRGZRGZOKZOK]OO_QQcSVeUXdVVfXXa_uki\7fmv¯y\82»\80\89Ø\84\8dÜ\99\8eÚ\97\8cØ®\80¯®\80¯Ó\7f\8cÚ\86\93ë\7fräxkÿbgôUZîGOíFN÷GQöFPô@Ið<Eâ8;á7:Õ<7Õ<7ÇA5Å?3ºA.·>+ª?-¨=+ª9)µD4ÅI=¹=1º1'Ä;1Ë7-Ì8.Ó7*Ô8+Ø7%Ø7%Û9$Ý;&Ý4/Ü3.ÞB6êNBÛH8Ç4$É2!×@/å=4òJAé/0ð67ù5?÷3=ÿDP÷3?ì*+ç%&ç%%ô22ñ//ê((ç'&ò21æ*+ô89á,1Þ).å5?ÿS]ê>JÿZf÷acîXZîOSíNRéEFÝ9:Ó84×<8¿6,Ä;1¼B5¶</¬6,¨2(¥*%\9f$\1f\9a%\1e¦1*ÈD@À<8½++Å33×A@ô^]Ð@8ÒB:ÐB8Ê<2Í9/Ò>4Ü?6Ý@7á=<Þ:9ä:;è>?è<<ä88æ>;ïGDâA9Ü;3Ù5,×3*æ0,ê40õ20ô1/ó12ò01õ/0õ/0ñ0+ñ0+ä6+ã5*ÓA2Ä2#´:+µ;,Í\Tëzrÿ\92\91ù\87\86ú\81\88ø\7f\86ÿo\7fúgwÿYtÿVqÿLlÿEeû<^ø9[æJbëOg\8fJE{61CQ0R`?[z?h\87Lp\94Wt\98[s\9b_w\9fcy¢fz£gy£dx¢cw¡bw¡bx\9f`y a{\9fa{\9fay¢fz£gz§d{¨ey©]zª^|­\~¯^\84²g\87µj\8b±t\86¬o\85¥v\80 qx\92on\88eSb]@OJ2A<]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8\K7^M9_P=`Q>[P>ZO=XO@YPAXPE[SH_TPbWSgYYi[[l\_n^aoaarddnl\82wu\8bu~·\7f\88Á\83\8cÛ\87\90ß\91\86Ò\97\8cص\87¶¯\81°Èt\81Ìx\85é}pî\82uÿlqÿbgúS[óLTöFPóCMò>Gï;Dá7:à69Ô;6Õ<7ÈB6Æ@4»B/¸?,§<*ª?-¯>.¹H8ÍQEÅI=½4*¹0&Ë7-Í9/Ö:-Ù=0Û:(Ø7%Ù7"Ü:%Ý4/Ú1,Ü@4êNBàM=Ï<,Ï8'ÛD3Þ6-êB9é/0ì23ö2<û7AÿNZÿJVÿ>?ô23å##ï--í++ò00é)(í-,ô89Õ\19\1aæ16à+0ç7AóCMÿVböJVÔ>@ØBDàAEÝ>BÞ:;Ü89Õ:6Ó84Ä;1Á8.¶</½C6ÇQGÏYOÌQLÀE@®92°;4ÏKGÔPLãQQìZZèRQïYXÆ6.Í=5ÐB8Î@6Ò>4ÖB8ßB9ßB9ä@?à<;æ<=ëABê>>ä88ç?<õMJÛ:2Ø7/Ø4+Ø4+ç1-ê40ô1/ó0.ó12ò01õ/0õ/0ñ0+ñ0+ä6+ã5*ÔB3Æ4%°6'³9*ÇVNî}uÿ\92\91ú\88\87ú\81\88ö}\84ÿl|÷dtÿUpÿQlÿFfÿBbø9[ú;]èLdìPh|72w2-HV5XfE_~Ci\88Mp\94Ws\97Zq\99]v\9ebx¡ex¡ev av au\9f`u\9f`w\9e_x\9f`{\9fa{\9fax¡ez£gz§dz§dx¨\y©]z«Z|­\\84²g\87µj\8c²u\88®q\85¥v}\9dns\8djg\81^Q`[CRM7FA]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]N9]L0^M1_O6_O6ZN>YM=VOGWPHUPT\W[f_omfvog~og~pf\81qg\82ho\82ls\86nw¢t}¨w\80Ë~\87Ò\84\89å\87\8cè\95\8dâ\95\8dâ¡\85¸\93\9fmv£qz¸yg½~lùniúojÿhgùa`ûQTòHKð;@ê5:æ68å57Ø;6Ø;6ÈC4ÇB3ºC/·@,­7+µ?3¯;.°</ÄRGÐ^SÄNB³=1º:-º:-É:,ÐA3Ý=/×7)Ý3&à6)à1,ã4/á?4åC8áE6ÞB3ß?/à@0ß.&è7/ï/.ï/.ð-1ù6:ÿPXÿZbÿ]_þQSÝ02Þ13Ú..òFFã77Ù--×/.ç?>×45Ö34ÿehÛ?BÆ-0È/2À('Ó;:ã@CÚ7:Ú14á8;Ü89Ñ-.Ë32Ò:9ÔFEàRQï^cøglùamñYeÁB;ÅF?ç\YõjgÿonÿkjäJH×=;Ç4,Ð=5ÕE:ÓC8Õ>3Ô=2Ú91×6.û/;ö*6÷)6ø*7ó*4ò)3ó9:ÿHIÞ3,Ý2+Ø4*Ù5+â4+ä6-î3.î3.ö/2õ.1ø-0ø-0ô.+ô.+æ5+å4*Ô@2Ê6(¯4%³8)¿NFí|tÿ\91\90û\89\88ÿ|\8bÿu\84ùk{òdtÿSmøLfÿ:aÿ8_ö7Yü=_ÌVbÈR^]9)a=-Q\>`kMb\7fIl\89Sq\92Yt\95\s\99^x\9ecy¡cx bt\9e^t\9e^u\9d^u\9d^w\9e_x\9f`{\9fa| bx¢bz¤dz¨`z¨`y¨Zy¨Z{ªY|«Z\7f«^\83¯b\87®m\84«j\87¥s\83¡oz\95lp\8bbevfZk[QbR^O:^O:^O:^O:^O:^O:^O:^O:]N9]N9]N9]N9]N9]N9]N9]N9^M1_N2_O6^N5ZN>ZN>YRJ[TL^Y]gbftm}{t\84}u\8c{s\8azp\8byo\8aov\89sz\8dt}¨x\81¬x\81Ì|\85Ð\82\87ã\86\8bç\95\8dâ\92\8aß\9f\83\9d\81´²\80\89­{\84¦gU\93TBÏD?ØMHêRQîVUøNQóILñ<Aè38è8:ç79Ú=8Ú=8ÊE6ÈC4»D0¸A-°:.·A5ª6)¢.!¼J?Øf[ÙcWÊTH»;.µ5(Â3%Ë<.Û;-×7)Þ4'á7*Þ/*å61ß=2Ü:/Û?0áE6ãC3Ú:*á0(æ5-ñ10î.-ì)-ô15ÿDLÿRZÿ^`ÿZ\ä79ä79×++õIIä88Ú..Ü43Ï'&Ê'(ùVWÚ>AÕ9<Ð7:¸\1f"Â*)Ö>=åBEÙ69Õ,/Ú14Ö23Ì()Í54ãKJòdcøjiõdiòaf÷_kø`lÏPIÏPIç\YãXUæNMàHGÍ31Í31ÕB:ÞKCáQFÛK@ØA6Ó<1Ö5-Ó2*ú.:ù-9ø*7õ'4ò)3ø/9ù?@ÿHIÝ2+Ý2+Ù5+Ù5+â4+ä6-î3.ï4/ö/2õ.1ø-0ø-0ô.+ô.+æ5+å4*Ó?1Í9+®3$²7(¶E=êyqÿ\8e\8dü\8a\89ÿz\89ûq\80õgwïaqüPjôHbÿ7^ÿ6]÷8Zþ?aÈR^´>J\8(b>.S^@`kMb\7fIk\88Rq\92Yt\95\u\9b`x\9ecx bu\9d_r\9c\r\9c\s\9b\s\9b\u\9c]w\9e_z\9e`{\9fax¢bz¤dy§_y§_x§Yx§Yy¨W{ªY}©\\81­`\85¬k\84«j\89§u\88¦t\83\9eu{\96mv\87wm~nevf^O<^O<^O<^O<^O<^O<^O<^O<]N;]N;]N;]N;]N;]N;]N;]N;`O1aP2_P;^O:XOFZQH[V]_Zahf|qo\85yy\9f~~¤}{¬yw¨wt©wt©my³q}·v\80»y\83¾\7f\85Á\83\89Å\8d\8fÂ\92\94Ç\9b\94µ\9e\97¸­\9e£·¨­Ç±\9c¾¨\93¥\8bf\88nI\9fD/¡F1²B4·G9ÖIBàSLîHHçAAê<=é;<ã;:ã;:×@7Õ>5Ç=0Ä:-º:1¾>5®5,©0'·K>ÎbUÐiZÎgXÁP@²A1¹3'À:.Ö8-Ô6+à2+ä6/à2+ã5.Þ8,Þ8,à>/åC4å>.Û4$é3(ç1&ò0.ï-+í-,ñ10ð67ú@AïPTøY]æGKñRVÕ49çFKÙ9;âBD×9:Í/0Ì24âHJÏ9:Í78µ#$Ï=>â57æ9;í:>é6:ã+3à(0â19ë:BíLRý\bÿksÿhpú^kõYfúWhûXiòe^è[TìTQ×?<Ï0-Ó41Ò3/áB>âKBèQHèTJßKAÛ>5×:1Û60Û60ú*7ÿ0=ÿ/<ü*7û-7ÿ8BÿDEýABÞ3,Þ3,Ü5,Ü5,á3*ã5,î3,ð5.÷/2ö.1ù-0ù-0õ.+õ.+ç5+æ4*Ó=/Ò<.±3%´6(±<5étmý\89\89ý\89\89ÿq\85ÿg{ðbrì^nüMjóDaÿ5^ÿ6_ò?_øEe¨ZZ\8466KG.KG.SY=]cG`zJi\83Sr\8e[w\93`w\9a`{\9edw\9f`r\9a[o\99Wo\99Wp\99Wq\9aXr\9bYt\9d[w\9e_x\9f`w \y¢^y¤\y¤\v¥Uu¤Tw¦Ux§V}©\\81­`\86ªj\84¨h\86¤p\85£o\80\9amx\92ep\84hj~bbvZ_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<^O<cR4bQ3`Q<^O:YPG]TK_Zac^esq\87{y\8f\80\80¦\83\83©\7f}®zx©yv«zw¬r~¸v\82¼{\85À~\88Ã\84\8aÆ\89\8fË\94\96É\99\9bΫ¤Å±ªËÀ±¶Å¶»Ó½¨Õ¿ªÓ¹\94ɯ\8aÁfQ´YD±A3¬<.ÎA:âUNøRRòLLì>?ê<=å=<ä<;ØA8Õ>5È>1Ä:-»;2¾>5´;2·>5½QDÅYLÅ^OÍfWÔcS¿N>¾8,À:.Õ7,Ó5*ß1*ä6/ä6/á3,Ý7+ã=1åC4äB3á:*Û4$ê4)ä.#ð.,ð.,ñ10ó32ç-.é/0âCGöW[õVZÿosäCHèGLÞ>@û[]ÿqrÝ?@ÿ~\80ÿnpèRSÓ=>Ã12Ï=>ôGIé<>ì9=ó@Dð8@æ.6ñ@Hÿ]eÿntÿjpýck÷]eù]jýanÿ\mùVgí`YÞQJáIFÐ85Ð1.Õ63Ð1-Ø95ÜE<áJAßKAÕA7Ò5,Ò5,Ü71ß:4ñ!.ý-:ÿ0=û)6ü.8ÿ:Dü@Aï34ß4-à5.Ý6-Ü5,á3*â4+î3,ñ6/÷/2ö.1ù-0ù-0õ.+õ.+ç5+æ4*Ò<.Ó=/±3%³5'¬70æqjû\87\87þ\8a\8aÿm\81ücwí_oë]mûLiôEbÿ6_ÿ8aôAaúGg¥WWu''NJ1IE,PV:W]A]wGg\81Qp\8cYv\92_w\9a`z\9dcu\9d^p\98Yl\96Tl\96Tn\97Uo\98Vp\99Wr\9bYu\9c]v\9d^v\9f[w \w¢Zw¢Zt£Ss¢Ru¤Sv¥Tx¤W|¨[\80¤d}¡a}\9bgy\97cr\8c_h\82U`tXZnRRfJYL;[N=^Q@^Q@]P?\O>]P?^Q@_RA\O>ZM<[N=^Q@`SB_RA^Q@cT?_P;\PD^RFWQUZTXb`vrp\86tw x{¤}\80·\7f\82¹{\7f¿uy¹or·lo´rvÑvzÕ\80\84Ä\88\8cÌ\99\99±¤¤¼µ²¡½º©ÌÈ\9bÒΡØÒ\98ØÒ\98ÛÒ\99ÛÒ\99×Í\98ÐÆ\91ͪ\8c©\86h\9a`Hº\80hÔtf®N@ÖQLìgbéIIà@@â89ã9:ã99Þ44Ü41Þ63É83Ä3.ÅB:½:2»K?ÇWKµO@ËeVÏdTÅZJÆF9½=0Î4*Ò8.â5/á4.Þ1-Þ1-Þ7.ã<3à<0Ú6*Þ4%â8)æ.$ç/%ì/)î1+ë4.ë4.ã6/ã6/Ñ8:äKMóX\êOS×8=Õ6;øW_ÿ~\86ÿ}\85ÿowÿgnÿhoÿgjõ\_ïY[ô^`ÿQWÿBHþ6@ý5?ù1>ò*7ê0=ô:GúT^ÿ^hÿhpÿemýalþbmÿ_lý[híRMßD?Ù53Ö20Ù0-×.+×2.Ý84ÞD:ÜB8×?4Ô<1Ù80Ù80â62ã73î7;î7;ð69ñ7:ñ78ï56æ40ã1-Û4+Ü5,Ý7+Ý7+æ1(ç2)ò1,ô3.÷03ö/2ù.1ù.1ö/,ö/,ê5,é4+ÚB5Ï7*º8+±/"·<7ÓXSÿ\97\99ú~\80ÿh\80ÿc{ø\rîRhùDcøCbÿ;bÿ7^æTkÞLcsI=T*\1e6@%?I.JL4[]EWlAbwLo\89Yx\92bw\96]u\94[p\97Vp\97Vl\95Ql\95Qm\96Ro\98Tq\9aXr\9bYt\9b\u\9c]r\9cTs\9dUt Uu¡Vv¢Uu¡Tt Ss\9fRz¤Zy£Yy\9d]s\97Wm\8aTb\7fIWqBQk<?X0=V.:S+YL;[N=]P?^Q@]P?]P?]P?_RA`SB^Q@\O>]P?`SBaTC`SB^Q@fWBaR=\PDaUI`Z^f`dmk\81xv\8cvy¢z}¦}\80·z}´quµlp°lo´nq¶swÒy}Ø\87\8bË\93\97ק§¿µµÍÈÅ´ÐͼÚÖ©ÞÚ­äÞ¤ãÝ£äÛ¢âÙ ÛÑ\9cÓÉ\94Ú·\99¾\9b}±w_Å\8bs×wiµUGßZUöqlöVVéIIæ<=ç=>é??å;;ß74Ý52Ï>9È72ÅB:¹6.°@4¼L@°J;Ã]NÚo_ÎcSÇG:¶6)È.$Ð6,à3-Û.(á40å84ä=4â;2Û7+Ù5)ß5&à6'í5+ì4*í0*ì/)ç0*ç0*à3,à3,Ñ8:×>@äIMòW[û\aû\aý\dÿ`hòRZíMUïRYü_fÿknÿgjñ[]èRTó06ï,2ó+5õ-7ï'4ç\1f,â(5ï5B÷Q[ÿYcþdlÿemÿdoÿcnüZgóQ^áFAÙ>9Ù53Ú64ß63Û2/Ø3/Ú51Ú@6Ø>4Õ=2Ó;0Ù80Û:2ä84æ:6í6:ì59ï58ï58ð67î45å3/á/+Û4+Ü5,Ý7+Ý7+æ1(ç2)ñ0+ô3.÷03ö/2ù.1ù.1ö/,ö/,ê5,é4+Ø@3Õ=0½;.µ3&³83×\Wÿ\90\92ówyÿbzÿ]uôXnïSiúEdöA`ÿ9`ÿ:aâPgÑ?VlB6V, 3="9C(EG/PR:Rg<^sHj\84Tt\8e^u\94[s\92Ym\94Sm\94Si\92Nj\93Ok\94Pm\96Rn\97Up\99Wr\99Zs\9a[s\9dUs\9dUs\9fTs\9fTs\9fRr\9eQp\9cOo\9bNm\97Mj\94Jh\8cL_\83CXu?Li3D^/>X)=V.>W/?X0XK:[N=]P?^Q@]P?]P?^Q@`SB`SB_RA_RA`SBaTCaTC_RA]P?`US[PNXQX`Y`gczqm\84su\9ey{¤uz²x}µt|½ltµbi±`g¯gm·pvÀ}|Ú\85\84â\97\96Ч¦à½»ÀËÉÎÜÙ¬äá´éå\9cíé îê¡ëç\9eçà©áÚ£ÖÏ¥ËÄ\9a¯²\97\9d \85\96\84n\9a\88r¥p`\8dXHº]VÏrk÷usåcaåIJßCDì?Aë>@ë7:ç36Ý>:Ø95ÒB:Æ6.¶8,»=1­<,·F6ÚiYÜk[ÜZLÅC5È1&Í6+Ú6-Ö2)Û64çB@éH@Þ=5Ô4(Ó3'Ü1'Û0&è3*ç2)å0)ä/(ß4,â7/Ý?4ßA6Â.*È40ÙCBìVUø]aö[_óS]ðPZçGQèHRîNXü\fÿmsÿntóX^Û@Fð,0ò.2ú1;ü3=ó+8ï'4ñ7DÿIVñJRöOWõY]û_cÿchÿ`eùPWêAHß82Þ71ä73é<8í;9é75à5.ß4-Ù;0Ø:/Ö:.Õ9-Û7.Þ:1è94ê;6ß<7Þ;6á96â:7æ:6ä84Ý6.Ù2*Ø6+Ù7,Þ8*Ý7)ç0(è1)õ.)÷0+ó23ò12ö01ö01õ/,õ/,ê5,é4+Ø<0ÞB6Ä:0½3)´0.ã_]ÿ\83\88ónsÿ_xûWpÿMmýKkÿ@eø8]ê?_ðEeÀ\d£?GXE4P=,7@%7@%HC-KF0N^9ZjEg}Or\88Zr\8fWq\8eVk\90Mk\90Mg\91Ih\92Ji\92Lj\93Ml\95Qn\97So\97Xo\97Xt\9cVt\9cVr\9cTq\9bSn\9aOl\98Mj\95Mi\94Le\8cI`\87D\~BRt8Lh5D`-AX*>U'B\,D^.Ic3WJ9YL;\O>]P?]P?]P?_RA`SB_RA_RA`SBaTCaTC`SB^Q@]P?YNL\QO_X_jcjqm\84xt\8bxz£{}¦v{³ty±jr³bj«\c«`g¯lr¼v|Æ\89\88æ\92\91藍ݳ²ìÈÆËÓÑÖâß²çä·ìè\9fîê¡íé èä\9bãÜ¥ÚÓ\9cËÄ\9a½¶\8c¢¥\8a\97\9a\7f\98\86p\94\82l¢m]\99dT¿b[Ïrkÿ\84\82õsqóWXæJKîACì?Aï;>ì8;Û<8Ú;7ØH@ÒB:»=1¸:.©8(¤3#»J:ÕdTëi[×UGÎ7,Ê3(Ø4+Ø4+Ø31òMKü[SíLDÙ9-Õ5)Þ3)Ý2(á,#á,#à+$á,%Û0(Þ3+Ø:/Ú<1Á-)Å1-Ï98ÙCBßDHßDHåEOëKUðPZõU_÷WaúZdÿhnÿmsóX^×<Bò.2ò.2õ,6ó*4í%2ï'4÷=JÿQ^èAIç@HäHLïSWü[`úY^ðGNà7>Þ71à93é<8îA=ò@>î<:å:3â70Ø:/Ø:/Ö:.Ö:.Ü8/Þ:1ç83é:5ß<7Þ;6á96â:7æ:6ä84Ý6.Ù2*Ù7,Ú8-Þ8*Ý7)ç0(è1)õ.)÷0+ó23ò12ö01ö01õ/,õ/,ê5,é4+Ö:.âF:Ä:0¾4*².,ëgeÿz\7fñlqÿ`yùUnüJjüJjþ>cô4Yè=]óHh¾Zb\9b7?[H7^K:AJ/=F+LG1GB,GW2Sc>`vHl\82Tn\8bSo\8cTi\8eKh\8dJf\90Hf\90Hg\90Ji\92Lk\94Pl\95Qm\95Vn\96Wt\9cVs\9bUp\9aRm\97Oi\95Jf\92Gc\8eFb\8dE_\86CZ\81>Vx<Oq5Mi6Kg4Ne7Ne7Ke5Nh8Sm=SG7VJ:YM=[O?[O?\P@]QA_SC^RB^RB_SC_SC^RB^RB^RB^RBRK[^Wgjf\7ftp\89ut\9cxw\9fuz±v{²qyºiq²_g¯Zbª^f¯iqºu}Å|\84Ì\93\96Û\9c\9f䭯ߺ¼ìÉËØÐÒßÚÛÍÝÞÐäàÃåáÄãÝÃÝ×½ØÏÀÎŶ¾³¯¯¤ \93\9b\90\88\90\85\88\86z\81\7fs\90ul\91vm§ne­tkä\89\84à\85\80ñtpæieñWWéOOîDEé?@ä92å:3áC:âD;Ë=3É;1ÃA4²0#­/ ÇI:ÜWHÓN?Ì=-É:*Ð7)Í4&Ó54ôVUÿkgø]YâE<Ù<3Þ:0Þ:0á3*à2)Þ1*Ü/(Ï1&Í/$¿1#¾0"Â:*¼4$½3(Ç=2ÕDA×FCÙBGØAFÞDNêPZðV`ñWa÷`gþgnð[_ÙDHé:7ç85ë46ë46í4:ô;AýIRÿU^á8=Ý49Þ58é@CýILýILø:<ì.0ç60ë:4ò;7ó<8ò;7ð95ç83ä50Þ;2Ý:1Ù;0Ø:/ß6/à70è51é62ã;8â:7æ95ç:6é:5ç83ß7.Û3*Ù7*Ú8+Ü9*Û8)æ1&æ1&ñ.(ó0*î53í42ó11ó11ó0,ó0,ê5,é4+Ú9/âA7Ç7/À0(½12÷klÿqzøhqþ[vôQlÿ>eÿ=dÿ7`ÿ2[×NbàWk\95`ZxC=WQ;_YCQO:KI4QI6JB/CQ0M[:ZlBgyOk\86Om\88Qi\8cHh\8bGe\8fEf\90Fg\91Ih\92Jj\93Ol\95Qm\95Vm\95Vr\9aTp\98Rm\95Oj\92Le\8eHb\8bE`\89E_\88DZ\81BV}>St=No8Pj:Qk;WnBYpDTq;Ur<Vs=PD4SG7WK;YM=YM=ZN>]QA^RB^RB_SC`TD_SC^RB^RBaUEcWG]Vfleuxt\8d~z\93zy¡yx sx¯sx¯iq²bj«[c«\d¬go¸u}Æ\80\88Ð\85\8dÕ\98\9bࠣ谲⻽íÇÉÖÌÎÛÔÕÇ×ØÊÜØ»Û׺×Ñ·Ñ˱ÍĵĻ¬´©¥¥\9a\96\85\8d\82t|qxvjqoc\85ja\8bpg\97^U\9aaXÈmhÔytø{wù|xÿmmýccúPQðFGïD=é>7Ü>5àB9Ë=3ÑC9ÙWJÀ>1´6'¹;,Â=.Ä?0ÐA1ÔE5×>0Ð7)Ð21êLKú_[òWSáD;×:1Ü8.Ý9/æ8/æ8/å81ä70Ø:/Õ7,Ç9+Å7)°(\18¹1!É?4ÒH=ÔC@Ì;8Ì5:Ð9>Ñ7AáGQîT^òXbô]d÷`géTX×BFë<9í>;ö?AýFHÿLRÿPVÿT]ÿU^Ý49Ø/4Ù03â9<ò>Aò>Aó57ï13è71ë:4ð95ì51é2.ê3/ã4/â3.à=4ß<3Û=2Ú<1á81á81è51è51ã;8â:7ç:6ç:6é:5ç83ß7.Û3*Ú8+Û9,Ý:+Û8)æ1&æ1&ñ.(ó0*î53í42ó11ó11ó0,ó0,ê5,é4+Ü;1Û:0É91À0(ÎBCüpqûktôdmòOjîKfÿ9`ÿ7^ÿ6_ÿ9bÛRfÜSg\81LFt?9VP:]WAUS>NL7OG4KC0?M,GU4Rd:_qGe\80Ij\85Ng\8aFg\8aFd\8eDd\8eDe\8fGg\91Ii\92Nj\93Ok\93Tl\94Uo\97Qm\95Oj\92Lg\8fIb\8bE`\89C^\87C^\87C[\82CX\7f@Vw@Rs<Uo?Vp@\sG^uIXu?Wt>Vs=NB2QE5TH8WK;XL<YM=[O?]QAaUEaUEbVF`TD_SCaUEfZJj^Nif\83tq\8eyy\9fyy\9fuwªuwªot´jo¯_g¯^f®_g°em¶pxÀ}\85Í\88\91Ö\8d\96Û\97£É\9d©Ï©³×±»ß¹¿á»ÁãÀÃâÁÄãÄÁÞ¿ܿ¹Õ¹³Ï¸®É²¨Ã¥\98´\96\89¥\87\86\8bqputpokgfwhc\80ql\82`W\8ah_\9dZQ­jaØskä\7fwÿ{vþytÿheô\YÿPJ÷F@å>6êC;Ö<2ÞD:ê\PÇ9-Ã;-¾6(¾6&Æ>.ÐC1ÐC1ÓB/ÔC0Ð79Ö=?ÚEAØC?Õ<6Ñ82Ø5.Û81å:2å:2â;3á:2×@5×@5ËF5ÌG6«/\15¸<"ÌK6ÎM8Ä>5·1(¿02É:<ÔCJÞMTéV^íZbî]dëZaÝNRÏ@DÍ5*Ñ9.Þ<7äB=îDEðFGðCGì?Câ59ß26æ25ì8;û47÷03ÿ+/ÿ.2ë4.ï82ò72ë0+ç+)ê.,ä3-ã2,á=3á=3Þ=3Þ=3ä92ä92ë52ë52í57ì46ï34ð45ï64í42â4-Þ0)Û7+Ü8,Ý:+Ü9*ã3&ã3&ì0%î2'ì63ë52ð31ð31ò1,ò1,ê5,é4+ß<3Ô1(Ð;5Ç2,çUXÿqtøbmðZeæHaèJcÿ4`ÿ/[ÿ4aÿ;hÉVc¼IVV?/]F6QO8RP9\O>UH7LA/MB0;H*AN0J\4WiA^yBf\81Je\88Df\89Eb\8aAc\8bBc\8dEe\8fGf\8fKh\91Mi\91Rj\92Sl\93Pj\91Ng\8eKd\8bHa\8aH_\88F^\86G^\86G_\85J\\82G^|H\zF]wH^xIbwLdyNYv@Yv@Yv@L@0OC3SG7UI9WK;XL<[O?]QAcWGcWGcWGaUE`TDcWGi]MocSur\8fyv\93vv\9css\99qs¦su¨jo¯af¦Ya©]e­em¶lt½u}Å\7f\87Ï\8b\94Ù\93\9cá\98¤Ê\9d©Ï¥¯Óª´Ø¯µ×¯µ×±´Ó²µÔ´±Î²¯Ì®¨Ä¨¢¾©\9fº¤\9aµ\98\8b§\8a}\99zy~bafhdc_[Zj[Vte`xVM\88f]\8eKB\9aWNÂ]UÒmeùtoÿ\7fzÿvsÿliÿZTÿOIìE=óLDÜB8ßE;æXL¹+\1f»3%½5'Æ>.ÎF6Ë>,À3!È7$ØG4ÝDFÒ9;È3/Ë62Ó:4Õ<6Ý:3à=6æ;3ã80Ý6.Ù2*Í6+Í6+Â=,Ã>-ÑU;ÄH.½<'½<'Â<3Á;2Ã46Â35ÜKRÝLSáNVæS[èW^æU\ÛLPÒCGÌ4)Ï7,Ø61Ø61Ý34Þ45à37ß26å8<ä7;í9<ñ=@û47õ.1ÿ*.ÿ04ê3-ð93ó83ì1,è,*ë/-æ5/å4.à<2à<2ß>4ß>4æ;4æ;4í74í74ë35ë35î23ï34í42ë20à2+Ý/(Ü8,Ü8,Ý:+Ü9*ã3&ã3&ì0%î2'ì63ë52ð31ð31ò1,ò1,ê5,é4+à=4Ï,#Ô?9Ê5/ödgÿqtó]héS^äF_êLeÿ7cÿ/[ÿ4aÿ;hÁN[ª7DH1!]F6PN7LJ3\O>VI8I>,NC18E'=J,EW/Rd<Zu>c~Gc\86Be\88D`\88?a\89@a\8bCc\8dEd\8dIf\8fKg\8fPg\8fPj\91Nh\8fLe\8cIc\8aG`\89G_\88F_\87H_\87H\\82G[\81F_}I^|H`zKa{Lf{Pg|Q[xB\yC]zD?C5BF8IF=KH?RH?TJA\L<_O?`R8`R8\T?^VA^ZWfb_jiwqp~uo\9bzt {w©zv¨op©gh¡`a¤]^¡_a®eg´qoÃ{yÍ\85\81Ø\8e\8aá\97\91ë\9c\96ð \9fÙ \9fÙ¤ Û¥¡Ü¥¡Ü¥¡Ü¤\9fÙ¤\9fÙ¤\9cÕ¢\9aÓ \99Í\9f\98Ì\9d\95Æ\96\8e¿\8b\83²\82z©potgfkd_\b]ZoXRnWQ\82TG\87YL\99OD¥[P¶XNº\RÕmdä|sð\85\8f\87ðxwòzyça`ØRQØDBîZXÌ8.Æ2(Ä7&Ã6%À7$À7$Å8&É<*Ð=-Ò?/Ó7(×;,×@/Ó<+Í6%Ì5$Ù9+áA3à:.ß9-Ú8+Ø6)Ë:'Ë:'ÁA(ÃC*Ã:2Ç>6ÌC;ÏF>ÌC;Ä;3¹3*³-$Ã=4ÍG>×QHÝWNá[RßYPÕOFÊD;Í<!Ï>#Þ7'Þ7'ï+-í)+ø$3ù%4ÿ(?ÿ(?ÿ(@ÿ(@ÿ$Aÿ$Aÿ"Aÿ"Aÿ :ÿ"<ÿ(=ÿ&;ð,6ï+5ã77æ::Û94Û94Ü;3Ý<4å:3ä92è62è62ì23ì23é62é62ã80á6.Ù7*×5(Ú;(Ú;(Û:&Û:&ß9#ß9#â7#â7#ë4.ì5/ï4+ð5,ï5)ï5)å8(ä7'Ü<0Ø8,Õ:8Ú?=ÿjzÿaqÿQlõGbÿFh÷5Wÿ4\ÿ:bèEbîKh\94WV_"!35 :<'EF4MN<MJ9EB16E.9H1EH\1dHK JR-U]8ZjEdtOc\7fNe\81Pa\86Cb\87Da\8a<c\8c>e\8dDg\8fFl\91Nm\92Oi\92Fg\90De\8dFc\8bDe\8aGd\89Fc\85Ha\83Fd\83Jb\81Hb\7fEb\7fEd\80Fd\80Fc\7fDa}BX}8[\80;^\83>;?1>B4FC:HE<OE<QG>ZJ:]M=_Q7_Q7\T?_WB_[Xgc`lkyqp~sm\99uo\9btp¢pl\9efg `a\9a\] \] ce²ik¸trÆ}{Ï\85\81Ø\8c\88ß\93\8dç\97\91ë\98\97Ñ\99\98Ò\9c\98Ó\9d\99Ô\9d\99Ô\9c\98Ó\9c\97Ñ\9b\96Ð\9d\95Î\9b\93Ì\9a\93Ç\99\92Æ\98\90Á\91\89º\86~­~v¥onsfejc^[a\YnWQmVP\81SF\85WJ\9eTI©_T¸ZPº\RÏg^Úriávnê\7f\85\84ÿ\87\86útsìfeæRPíYWÇ3)Â.$Ä7&Ä7&À7$À7$Å8&Ç:(Î;+Ð=-Ô8)Ô8)Ò;*Ñ:)Ñ:)Ð9(×7)×7)à:.ß9-Û9,Ù7*Ì;(Ê9&½=$¼<#¾5-Á80Å<4È?7É@8Ç>6Â<3À:1»5,Ä>5ÏI@ÕOFØRIÕOFÉC:¾8/Ê9\1eÍ<!Þ7'ß8(ñ-/ð,.ü(7ý)8ÿ*Aÿ*Aÿ(@ÿ'?ÿ"?ÿ!>ÿ\1e=ÿ\1d<ÿ\1d7ÿ\1f9ÿ%:ÿ&;ò.8ó/9å99ç;;Û94Û94Ü;3Ý<4å:3ä92è62è62ì23ì23é62é62ã80á6.Ù7*×5(Ù:'Ù:'Ú9%Ú9%Þ8"Þ8"á6"á6"é2,ê3-í2)î3*î4(í3'ã6&ã6&Ý=1Ô4(Ñ64ñVTÿeuÿ\lõGbúLgÿ@bþ<^ÿ1Yÿ5]ñNkã@]|?>a$#79$79$:;)@A/DA0A>-5D-9H1@C\18MP%Zb=goJfvQhxSc\7fNe\81P`\85Ba\86C`\89;b\8b=e\8dDg\8fFk\90Ml\91Nj\93Gh\91Ee\8dFd\8cEf\8bHe\8aGd\86Ib\84Gd\83Jc\82Ib\7fEb\7fEd\80Fe\81Gc\7fDb~C\\81<_\84?b\87B4:,7=/??7BB:JA:MD=TH:WK=[P<[P<ZSC^WG`^ahfilm\81pq\85qn\99nk\96ig\98ca\92[\\95Z[\94Y\\9f\_¢gkµmq»wxÈ~\7fÏ\86\84×\8a\88Û\8e\8aÞ\90\8cà\91\91Í\91\91Í\93\91Ð\93\91Ð\92\8fÒ\91\8eÑ\91\8cÏ\91\8cÏ\92\8cÌ\91\8bË\92\8bÁ\92\8bÁ\92\8b·\8c\85±\82|¢zt\9a\83bk{Zce\Wd[V]^L\]KuVDxYG¬UN¹b[ÓWWÓWWÝc`ãifÙqhàxoú\8b\84û\8c\85ÿ\84~û~x÷leìaZÂ6)¿3&Á:'À9&½;%¼:$Á8%Ã:'É:)Ê;*×9-Ó5)Í5'Ð8*Ñ>.Ñ>.Î6(Ç/!Ù9-Ø8,Õ7+Õ7+Î;+Ì9)À9%¾7#¾4)¿5*Á7,Ä:/Ç=2É?4ËA6ÌB7Å;0Ê@5ÎD9ÐF;ÑG<ÑG<Ê@5Á7,Ð5!Ó8$â4+ä6-ô-2ô-2ü)8ý*9û(;ú':ù%;ø$:ù!8ø 7û\1d\1c3ÿ\1f6ÿ\1f6ú&5ý)8ò5<ó6=å;;ä::Û94Û94Ý:3Þ;4å:3ä92é62é62í34í34é54é54ã81á6/Ø6)×5(Ù9)Ù9)Ù:%Ù:%Û9$Û9$Þ7$Þ7$Ý5(Þ6)à6'á7(ß8&ß8&Ù:'Ø9&Ú>2Î2&Ö7;ÿlpÿ[nýReó;]ÿJlÿ2[ÿ:cð8\ô<`Ò^q°<OK,)L-*0;*-8'19$6>)B='A<&A="D@%>H\16Wa/p\7fT}\8cat\89^i~S`~Ja\7fK_\84?`\85@`\89;c\8c>e\8dDg\8fFk\8fOk\8fOk\93Ji\91Hh\8dGg\8cFg\8cIf\8bHf\88Kd\86Ie\84Ic\82Gc\80Fc\80Fd\82Fe\83Gd\80Cc\7fB`\88Bb\8aDe\8dG06(39+;;3>>6G>7KB;RF8UI;XM9YN:XQA^WGa_bigjlm\81op\84ol\97jg\92`^\8fXV\87ST\8dWX\91[^¡ad§ko¹qu¿z{Ë\81\82Ò\87\85Ø\89\87Ú\8c\88Ü\8d\89Ý\8e\8eÊ\8e\8eÊ\8e\8cË\8e\8cË\8d\8aÍ\8b\88Ë\8c\87Ê\8c\87Ê\8c\86Æ\8b\85Å\8d\86¼\8e\87½\8e\87³\88\81­\7fy\9fwq\97\81`iyXad[Vd[V]^L[\JsTBvWE¨QJ¶_XÔXXÖZZàfcåkhÚriáypë|uë|uÿ\82|ÿ\87\81ÿ\80yõjcÉ=0Ä8+Â;(Á:'½;%½;%Á8%Â9&Ç8'È9(Ø:.Ô6*Í5'Ï7)Ð=-Ð=-Í5'Ç/!Ô4(Ô4(Ò4(Ó5)Í:*Í:*Ä=)Ã<(Ã9.Ã9.Ã9.Ã9.Ä:/Æ<1Ç=2È>3ÐF;ÐF;ÌB7Ç=2È>3ÌB7ËA6È>3Ð5!Ó8$ã5,å7.ô-2ô-2û(7ü)8ù&9ù&9ù%;ù%;ü$;ý%<ÿ#:ÿ#:ÿ 7ÿ\1f6ú&5þ*9ó6=ô7>ä::à66Û94Û94Ý:3Þ;4å:3ä92é62é62î45î45ê65ê65ã81á6/Ø6)×5(Ø8(Ø8(Ø9$Ø9$Ú8#Ú8#Ý6#Ý6#Ü4'Ü4'ß5&à6'Þ7%Þ7%Ù:'Ø9&Ö:.Ð4(èIMÿrvÿVióH[õ=_üDfÿ1Zÿ5^÷?cûCgÄPc\97#6@!\1eK,)*5$,7&5=(;C.C>(@;%B>#HD)S]+r|J\8f\9es\98§|\82\97ll\81V^|H_}I^\83>a\86Ab\8b=f\8fAh\90Gj\92Il\90Pl\90Pl\94Kj\92Ih\8dGg\8cFg\8cIg\8cIg\89Lf\88Ke\84Id\83Hd\81Gd\81Gf\84Hf\84Hf\82Ed\80Cd\8cFf\8eHj\92L,4'/7*692:=6A>9DA<KD:NG=QK=QK=ROFYVM__iggqij\86kl\88ih\94ba\8dUW\8aOQ\84MQ\90UY\98^b«ei²mrÃrwÈ|\7fÐ\82\85Ö\86\87×\87\88Ø\89\88Ô\8a\89Õ\8a\8bË\8a\8bË\89\89Ï\88\88Î\87\84Ó\87\84Ó\87\82Ô\87\82Ô\8c\84Í\8a\82Ë\8c\84½\8d\85¾\8d\87«\87\81¥}z\8fur\87\91S^\8bMXgYPhZQRfKOcHeYAh\D\9eG@¯XQÚOVÝRYè]bíbgßliçtqáuiÝqe÷|tþ\83{ÿ\87|òlaÈ@0À8(¿='¿='½=$½=$Â9&Â9&É8'É8'Û7-Ú6,Ð8*Ð8*Ç<)Ç<)Æ;(Å:'Ì9)Í:*Ñ8*Ð7)Í7(Í7(É<*Ë>,È<-È<-É;-É;-Ç9+Æ8*Æ7)Å6(Ï@2ÐA3Ï=0Ê8+Ë7+Ï;/Í9-É5)Ô-%Ø1)è00ë33ö-7ö-7ú+;ú+;ù/?ù/?ö0=÷1>ü0<ý1=ÿ/<ÿ/<ú*8ù)7ò-7õ0:í9<ì8;Þ97Ù42Û94Û94Þ93ß:4æ95å84é54é54ñ35ò46í76ì65ã81á6/Ø6+×5*Ô8)Ô8)Ô9'Ô9'×8%×8%Ø7#Ø7#Ñ:%Ñ:%Ï=$Ð>%Ð@(Ð@(Ï>+Ï>+Ð50×<7ÿ\gÿalÿMlö;Zÿ@ký6aÿ2]ÿ*UßUnáWp|KQX'-40-730(2).8/5A+7C-;<\1c<=\1dVF"fV2t\89N\8f¤i¦¾\8a¦¾\8a\8a¦uo\8bZ_\80G^\7fF]\85>`\88Ae\8e@i\92Dl\94Km\95Lo\93Sn\92Ro\95Ll\92Ih\8dGg\8cFg\8cIh\8dJi\8bNh\8aMd\86Jc\85Id\83Gd\83Gf\86Gg\87Hg\85Ee\83Cf\8eGi\91Jl\94M*2%-5(4707:3=:5@=8G@6JC9NH:NH:NKBVSJ]]geeoef\82ef\82a`\8c[Z\86PR\85MO\82PT\93[_\9eei²lp¹sxÉw|Í\7f\82Ó\83\86×\85\86Ö\85\86Ö\88\87Ó\89\88Ô\86\87Ç\85\86Æ\84\84Ê\83\83É\83\80Ï\83\80Ï\85\80Ò\85\80Ò\8d\85Î\8b\83Ì\8c\84½\8c\84½\8b\85©\84~¢yv\8bqn\83\8eP[\88JUgYPi[RSgLQeJfZBh\D\9eG@°YRÛPWÝRYæ[`ë`eÝjgåroç{oßsgö{sîskþxmã]RÃ;+½5%¿='¿='¾>%¿?&Ä;(Ä;(Ê9(Ê9(Ø4*Ú6,Ó;-Ð8*Å:'Ä9&Æ;(É>+Ï<,Ó@0ÚA3Ö=/Î8)Ê4%Æ9'Ê=+Æ:+Ç;,É;-É;-È:,Ç9+Æ7)Å6(Æ7)Ë<.Ñ?2Ñ?2Ó?3Ò>2Ë7+Ã/#Ò+#Ö/'è00ì44ù0:ù0:ý.>þ/?ú0@ú0@ö0=õ/<ù-9ù-9ü*7ü*7ý-;ü,:õ0:õ0:ê69é58Û64Ù42Û94Û94Þ93ß:4æ95å84é54é54ò46ó57î87í76ä92á6/Ø6+×5*Ó7(Ó7(Ó8&Ó8&Ö7$Ö7$×6"×6"Ï8#Ð9$Î<#Ï=$Ï?'Ï?'Ï>+Ï>+Ð50åJEÿgrýS^ÿHgõ:YÿAlø1\ÿ3^ÿ)TÝSlÓIbf5;S"(>:7730-7.0:12>(/;%56\16AB"m]9\8c|X\9b°uª¿\84µÍ\99®Æ\92\92®}w\93bd\85L`\81H]\85>a\89Bg\90Bl\95Go\97Np\98Oq\95Uo\93So\95Lk\91Hg\8cFf\8bEf\8bHh\8dJi\8bNi\8bNe\87Kc\85Id\83Ge\84Hg\87Hh\88Ih\86Fg\85Eh\90Ij\92Km\95N%0"(3%/4-16/664997?<7B?:HE<HE<HIDQRMY[h`bo_c\80]a~\]\8dWX\88RS\8cTU\8eZ\¦fh²nsÇsxÌy~Ù|\81Ü\80\84Ý\81\85Þ\82\84×\82\84×\83\85Ò\83\85Ò\83\87Ç\82\86Æ\81\83Í\80\82Ì\83\7fÓ\83\7fÓ\85\7fÕ\86\80Ö\8d\85Ð\8b\83Î\8b\84·\89\82µ\87\83\9a\7f{\92usxljo\84TR\7fOMeYIh\LYhKWfIc_BeaD\8cQA\9ecSÌXXÌXXäY^è]bê_dóhmózoërgúulÝXOçYMÑC7Ä5$È9(Ã;%Ã;%Ä<&Å='Í:(Í:(Ô6*Ô6*Ò/&Õ2)Î:,Î:,Â=*À;(¿<(À=)Ç;*ÑE4àJ<ÝG9Ò<.Ê4&È6'Í;,Æ9'Æ9'È9(È9(Ê9(Ê9(Ë8(Ë8(Î6(Ò:,×>0Ø?1Ü@3Ü@3×9-Ï1%ß--ä22ð39ó6<ú2?ù1>ö0?ö0?í/9í/9ê17é06ë.2ë.2ï+/ï+/ñ4:ò5;î7;ì59â66à44Ú72Û83Ü94Ü94à85á96ç77æ66é56é56ó49ó49ï77î66ä84á51Õ7,Ó5*Ï9*Ï9*Í:(Í:(Ï9(Ï9(Ð9&Ð9&Å;!Æ<"Ä>#Æ@%Ä@)ÅA*Ë=/Ë=/Û6:úUYÿ[rÿH_ÿ<dÿ9aÿ5fÿ1bñ>\ôA_¨[a\8b>D<;6:94=;>758B44A336;%5:$4F\16K]-\80\83J£¦m©Ç\87­Ë\8b®Í\94¤Ã\8a\8f°{x\99df\8aM]\81D\\84=`\88Ag\90Bm\96Hp\98Op\98On\95Tm\94Sn\94Kj\90Gf\8bEd\89Ce\8aGg\8cIh\8cNh\8cNe\87Jd\86Ic\86Fd\87Gf\89Eg\8aFf\8aDe\89Cg\92Jj\95Mm\98P#. &1#,1*.3,331553;83>;6FC:FC:FGBOPKWYf^`m\`}Z^{]^\8eZ[\8bWX\91\]\96df°qs½x}Ñ|\81Õ\7f\84ß\81\86á\83\87à\82\86ß\81\83Ö\7f\81Ô\80\82Ï\81\83Ð\84\88È\83\87Ç\82\84Î\81\83Í\84\80Ô\86\82Ö\88\82Ø\89\83Ù\8c\84Ï\8a\82Í\89\82µ\87\80³\84\80\97{w\8epnsgej\82RP~NLeYIi]MZiLXgJeaDfbE\86K;\98]MÅQQÆRRÞSXâW\åZ_îchîujépeõpgÊE<ÐB6Á3'Ä5$ÒC2Ã;%Ã;%Å='Æ>(Î;)Î;)Õ7+Õ7+Ï,#Ñ.%Ë7)Î:,Ä?,Â=*½:&º7#¿3"ÏC2äN@äN@×A3Í7)Ê8)Ï=.È;)Ç:(Ç8'Å6%È7&É8'Ë8(Í:*Ò:,Ó;-Ò9+Ï6(Ô8+Ù=0Û=1×9-é77í;;÷:@÷:@û3@÷/<ò,;ð*9ì.8í/9ê17ë28ï26ð37ö26ö26ð39ò5;î7;ì59á55ß33Û83Þ;6Ü94Ü94à85á96ç77æ66é56é56ó49ô5:ï77î66ä84á51Õ7,Ó5*Î8)Î8)Ì9'Ì9'Î8'Î8'Ï8%Ï8%Ã9\1fÄ: Â<!Ä>#Ã?(Ã?(É;-É;-ß:>ÿ_cÿQhÿKbÿ6^ÿ>fû+\ÿ7hí:XÿMk\9cOUp#)=<7CB=:8;97:B44A338='>C-EW'`rB\94\97^µ¸\7f­Ë\8bªÈ\88¤Ã\8a\9bº\81\8b¬wx\99de\89LY}@Z\82;_\87@f\8fAl\95Gp\98Op\98On\95Tl\93Rm\93Jj\90Gf\8bEd\89Ce\8aGg\8cIh\8cNh\8cNe\87Jd\86Ic\86Fd\87Gg\8aFh\8bGg\8bEf\8aDi\94Lk\96Nn\99Q(0!'/ (-&).'.0-1306729:5<>3?A6CF?ILEOR[UXaY[r\^uYX\84[Z\86]^\97de\9ekmºvxÅ~\7fÜ\83\84á\89\8bï\89\8bï\89\89é\85\85å\82\82Ø\7f\7fÕ\82\81Ï\83\82Ð\80\84Ã\80\84Ã\83\83É\83\83É\85\82Ï\86\83Ð\8a\84Î\8a\84Î\89\81½\88\80¼\88\81£\84}\9f\81z\82vowkg^c_Vg_Lf^Kf^If^Ie_Gf`Hg`DhaElQ6w\A¥]N°hYÖVSÔTQ÷MVÿW`øiaçXPÚA9Ï6.Ö5+Ú9/Ù<-×:+Ï8%Ð9&Ï:&Ï:&×7)×7)Þ3+ß4,Ê0$Ì2&È;*Ê=,ÃB-Á@+¾=(»:%Ã7&½1 êVHßK=Á/ Ï=.Ë>-Å8'È;)È;)Ç8'Æ7&È5%È5%Ë3%Ì4&Ò6)×;.Ý=1Ü<0Ú6,Ú6,ä=4ëD;ù@Eñ8=ñ2:ó4<õ3>ð.9è.9ì2=æ9=ã6:ß76à87è;7ê=9ð95î73ë=<ê<;ç;9å97à85ß74Ü73Ü73Ý84Þ95ä88æ::é9;é9;ì8;ì8;ô5:ô5:î87î87ä=7á:4Ò:/Ï7,Æ9(Æ9(Ã:(Ä;)Ã<)Ã<)Ä;)Ä;)½9 Â>%º<#³5\1c¹;%ÅG1Ð=6Å2+ÿ[hÿWdÿGeÿ;Yö2Xõ1W÷8cý>iÌgm«FLV>4K3)5E87G:E56>./Q-/R.0=< GF*Qs7z\9c`\97»q£Ç}©È\8c\9d¼\80\97µ\7f\93±{\81\9enf\83SVw>Xy@]\81;b\86@h\8eAm\93Fl\94Kk\93Ji\92Pi\92Ph\8dGe\8aDa\86Aa\86Ad\89Ff\8bHf\8aJd\88Hg\8bKg\8bKg\8cIe\8aGc\8bDd\8cEh\90Gk\93Jm\9bPo\9dRr U(0!(0!(-&).'-/,02/450783;=2=?4AD=GJCLOXSV_VXoY[rZY\85]\\88ab\9bjk¤rtÁ}\7fÌ\85\86ã\8a\8bè\8a\8cð\89\8bï\88\88è\84\84ä\80\80Ö}}Ó\80\7fÍ\81\80Î\82\86Å\83\87Æ\86\86Ì\88\88Î\89\86Ó\89\86Ó\8b\85Ï\8a\84Î\88\80¼\86\84}\9f~w\99{t|rkshd[b^Uf^Kf^Ke]He]He_Ge_Gg`DhaEx]Bx]B\9bSD¤\MÑQNÕURùOXÿV_çXPÝNF×>6Ñ80Ø7-Ú9/Ø;,Ö9*Ï8%Ð9&Ï:&Ï:&×7)×7)Þ3+ß4,Ë1%Ì2&Æ9(É<+ÂA,Á@+¾=(»:%Ã7&È<+äPBÜH:Ç5&Ë9*Ç:)Â5$Ê=+É<*Ê;*É:)Ì9)Ë8(Î6(Î6(Ò6)Ô8+Ø8,Õ5)Ô0&Ö2(Þ7.ã<3úAFñ8=î/7î/7ñ/:ð.9ê0;í3>ã6:Þ15Ú21á98ñD@÷JFûD@õ>:ç98æ87ä86ã75à85à85Þ95Þ95Ý84Þ95å99æ::é9;é9;ì8;ì8;ó49ò38í76í76â;5à93Ñ9.Í5*Æ9(Æ9(Ã:(Ã:(Â;(Â;(Ã:(Ã:(½9 Â>%¸:!³5\1c¹;%¼>(Ë81Ó@9ÿ[hÿR_ÿ>\ü7Uù5[û7]ú;fû<g¦AG\994:V>4O7-1A41A4I9:N>?R.0X46PO3gfJp\92V\8d¯s\9dÁw¡Å{\99¸|\99¸|\98\80\8cªtq\8e^WtDQr9Z{B\\80:b\86@h\8eAl\92Ek\93Jj\92Ih\91Oh\91Of\8bEc\88Ba\86Ab\87Be\8aGg\8cIg\8bKf\8aJh\8cLi\8dMh\8dJg\8cId\8cEf\8eGi\91Hm\95Lm\9bPo\9dRq\9fT-1",0!,/&,/&-/,/1.25,36-8<-:>/?C4EI:KMJQSPUUaWWc\Zr`^ved\8cpo\97yy¹\84\84Ä\8b\8bá\90\90æ\8f\8eì\8e\8dë\8a\8aä\84\84Þ\81~Í~{Ê\7f\80\7fÃ\85\87Â\86\88Ã\8a\8aÆ\8b\8bÇ\8d\8aÃ\8b\88Á\8b\84·\8a\83\8a\80£\85{\9e\81v\86zo\7fujfod`j^PfZLWdJWdJd^Hd^HoXFpYGp\Dq]EwbEq\?\89Q8\94\CÑRIØYPÿIOÿKQâ?:ß<7ß6/Þ5.â6,â6,Ý7)Û5'Ò7#Ó8$Ñ8&Ñ8&Ù5)Ù5)à2+á3,Ã7(Ã7(½:(À=+¿@-¿@-À;*¾9(Å3&ÛI<ÚF:Ô@4Ë=/Ä6(¿<*»8&Å:'Å:'Ç:(Ç:(Ê9(É8'Ì4&Ì4&Ö8,Ô6*×3)Ö2(Û3*Þ6-å:2ç<4ñ:>ì59é06ë28ì4<ì4<ä9?ç<BÕ:8ÝB@éPKóZUüZUôRMîC<ã81ß82ß82ß82ß82à93á:4ã:7ä;8ã77ä88æ89ç9:é9<é9<ë8<ë8<ï58î47æ66ç77Ý;6Ú83Ê:/Æ6+¾:+¾:+¸=+¸=+¶=*¶=*¶=*¶=*µ;&»A,¯:&¬7#¶;,®3$Ç12çQRÿWjýJ]õ:Uñ6QèD]íIbÚOdÕJ_cF8^A3FE1CB.5>)1:%B4'H:-G-\1cU;*aa;\84\84^\8b­p\98º}\8fÃx\8fÃx\94°}\9b·\84\99³\86\80\9am\uMHa9Nh8\vF_~;d\83@g\8d@k\91Di\93Ih\92Hc\90Kc\90Kd\88Bc\87Ac\86Bd\87Cg\8cIi\8eKj\8eNj\8eNh\8fLi\90Mg\90Jf\8fIe\8fEg\91Gk\96Gn\99Jq¢Ss¤Uu¦W04%04%/2)/2)/1.02/14+25,8<-:>/>B3CG8HJGMOLQQ]SS_WUm[Yqa`\88ml\94vv¶\82\82Â\89\89ß\8e\8eä\92\91ï\90\8fí\8c\8cæ\85\85ß\82\7fÎ~{Ê~}Á\7f\81\83¾\84\86Á\88\88Ä\89\89Å\8b\88Á\87\84½\85\82\84z\9d~t\97xm}peumb^i^Zh\NeYKWdJWdJd^Hd^HpYGqZHq]Er^FoZ=lW:\8aR9\99aHÖWN×XOù@Fõ<BÖ3.Ø50Þ5.ß6/á5+á5+Ü6(Ü6(Ò7#Ó8$Ñ8&Ñ8&Ù5)Ù5)à2+á3,Ä8)Â6'»8&¼9'½>+¾?,Á<+¿:)Æ4'çUHÑ=1Ì8,ÏA3À2$¿<*¿<*Ã8%Ä9&Æ9'Ç:(Ê9(É8'Ì4&Ì4&Ó5)Ñ3'Õ1'Ù5+â:1ç?6ê?7é>6ê37ë48î5;î5;ê2:è08á6<å:@ñVTýb`ÿmhÿhcõSNãA<á6/ß4-Þ71Ý60Þ71Þ71ß82à93ã:7ä;8ã77ä88æ89ç9:é9<é9<ê7;ê7;ï58î47ç77ç77Ý;6Û94Ê:/Æ6+¼8)¼8)¶;)¶;)´;(´;(´;(´;(³9$¸>)­8$¬7#´9*¨-\1eÇ12øbcÿPcùFYô9Tô9TêF_íIbÖK`ÏDYiL>`C5FE1ED0=F17@+@2%>0#G-\1cY?.kkE\8f\8fi\8e°s\91³v\86ºo\89½r\9d¹\86\9d¹\86\8e¨{i\83VHa9>W/Jd4WqA^}:c\82?f\8c?j\90Ch\92Hf\90Fb\8fJa\8eIb\86@c\87Ad\87Cf\89Eh\8dJk\90Mm\91Qm\91Qi\90Mi\90Mh\91Kg\90Jg\91Gi\93Im\98Ip\9bLt¥Vu¦Ww¨Y78&67%57,57,56056057*68+;?(<@)?C*DH/HJ<LN@POKRQMVVLZZP``hjjrtt\9a\80\80¦\87\85Æ\8d\8bÌ\94\91Þ\93\90Ý\90\8fÕ\89\88Î\85\81¼\80\80\80\7f\7fµ\81\81·\86\84µ\88\86·\89\85¨\85\81¤\83{\92\7fw\8e\7fu}yowtgam`Zl\MjZKkZHjYGa_Ja_Jg\Jg\JmZIo\KwZHx[I\83S=\83S=¥N;°YFÚMCÖI?è62ä2.Ú1*Ý4-ã5.ã5.á3(à2'Ú7&Ü9(Ï9!Ð:"Í;$Í;$Ô9'Ô9'Û5)Ü6*¹?*µ;&²8#³9$½<)À?,É:,Æ7)Ñ7-õ[QÖ>3Ë3(ÊB2º2"°<%¶B+Á9)Â:*Ä;+Ä;+É:,É:,Î7,Î7,Ð2)Ð2)Õ0*Û60ç;7ê>:è;7ä73ç85ë<9î<<é77à35ã68ãEDëMLÿ{uÿrlïb[ÙLEÐ71Í4.Ü73å@<Þ:1Ý90ß80Þ7/â62â62ä65å76æ68æ68ç7:è8;è8;è8;è7=ç6<î79í68æ:8æ:8Ù?7Ö<4Æ>2Â:.´;*´;*­=)­=)ª=(ª=(©<'©<'¦=(¨?*¡:)¡:)©9.£3(Î=Bûjo÷L^óHZèGYçFXÉV]ÇT[£]U\9dWONX@GQ9LG1JE/HD'D@#7H\1e:K!C[)Tl:s\84N\88\99c\90£k\93¦n\8f²r\97ºz¢´\8e\93¥\7fu\86fRcC?N1BQ4Oa7Xj@_{>d\80Cg\8c?k\90Cf\92Ee\91D`\8fG_\8eFb\85Ad\87Cf\89Eh\8bGi\8eKk\90Mk\92Qm\94Si\92Nj\93Oj\94Li\93Kh\94Ej\96Gn\9bJq\9eMs¦Ws¦Wt§X<=+<=+;=2;=2;<6;<6;=0;=0>B+@D-BF-FJ1IK=MOAPOKRQMWWMZZP]]effnmm\93yy\9f\81\7fÀ\86\84Å\8e\8bØ\8e\8bØ\8c\8bÑ\87\86Ì\83\7fº|x³zv¨yu§xx®zz°\7f\80\81} }y\9c|t\8bxp\87tjroemm`Zi\VjZKk[Ll[Il[Ib`Kb`Kh]Ki^Lo\Kq^My\Jz]K\91aK\8c\F¦O<§P=Ë>4Ç:0Þ,(à.*Þ5.ß6/ã5.á3,à2'ß1&Ú7&Û8'Ï9!Ð:"Í;$Í;$Ô9'Ô9'Û5)Ü6*º@+´:%¯5 °6!»:'À?,É:,Ç8*Ø>4õ[QâJ?Ð8-ÉA1»3#©5\1e²>'¿7'¿7'À7'À7'Å6(Ç8*Í6+Î7,Ú<3Ù;2Þ93á<6é=9é=9å84á40è96ê;8ì::é77ê=?úMOÿdcÿnmøicãTNÉ<5¾1*Ì3-Õ<6á<8à;7à<3ß;2à91ß80â62â62ä65ä65ç79ç79è8;è8;è8;è8;ç6<ç6<î79í68æ:8æ:8Ù?7×=5Æ>2Â:.²9(²9(¬<(«;'¨;&¨;&§:%§:%¥<'¢9$ 9( 9(¤4)±A6áPU÷fkóHZòGYêI[èGYÆSZÂOV\9fYQ\9dWODN6EO7MH2E@*:6\1995\18=N$Rc9p\88Vz\92`\87\98b\89\9ad\89\9cd\8f¢j\8d°p\91´t\83\95om\7fYO`@;L,8G*AP3N`6Wi?`|?e\81Dg\8c?k\90Cf\92Ee\91D`\8fG_\8eFd\87Cf\89Ej\8dIk\8eJj\8fLk\90Mj\91Pl\93Rk\94Pl\95Ql\96Nk\95Mj\96Gm\99Jq\9eMt¡Px«\x«\x«\CB0CB0BB6BB6BB:BB:AD3@C2CG,DH-GJ+JM.MO7OQ9SQDUSF[]8[]8\]MbcShgwsr\82zy¥\80\7f«\84\83½\85\84¾\87\84»\84\81¸~|¤wu\9dsp\8fqn\8dom\9fqo¡tr\9aus\9bvs\88sp\85rlnoikmcYj`Vl\LjZJn\Ho]Iq\Iq\ItXMtXMk^Nk^NjbOkcP~]L\7f^MªZO¡QF»<5¹:3Ì2(Ì2(Õ2#Ù6'à8/ß7.á5+à4*ß5&ß5&Õ9#Ô8"É<!Ê="Æ>$Æ>$Í<'Í<'Ô8)Õ9*µE/­='©4 ©4 º6'À<-Ï8/Í6-Ú72ðMHïUMÚ@8ÇC4À<-¡4\1d¬?(À;,¿:+¿7)¿7)Ä6*Ç9-Ñ:1Ó<3âC=áB<ä?;ã>:è<:è<:è88æ66å:3å:3ä84è<8ñLJÿ\Zûfb÷b^Æ?9¾71º4+À:1ÔA:ÚG@Þ<9Ö41à<3ß;2â92á81ä73å84è66é77ê69ê69ê7;ê7;è7=è7=æ7<æ7<ë78ê67â96ã:7Ö?8Ó<5Â>1¾:-­:'­:'¦;'¦;'¢<&¡;%\9f;$\9f;$\9a?,\927$\96=+\94;)\992)ºSJðgnç^eìN]éKZÖMWÒIS¨[Q§ZP\7flN~kM?Q9<N6O>*H7#@8\14ME!Gx7d\95Ts·ju¹l\85£cv\94T\87\8bX\91\95b\8b\95c\80\8aXWdHGT8;E-8B*:D,?I1JX4XfBd|Bi\81Gh\8cBl\90Fg\93Fe\91D^\91F]\90Ef\89Ei\8cHm\90Lm\90Lk\90Mj\8fLi\90Mj\91No\98Rp\99So\9bPn\9aOm\9cLo\9eNs£Ow§Sz­^y¬]x«\FE3FE3EE9FF:FF>FF>EH7DG6EI.FJ/IL-LO0NP8QS;USFVTGZ\7Z\7XYI\]Mbaqlk{sr\9eyx¤{z´}|¶\81\7f|³yw\9fqo\97mj\89if\85ec\95fd\96ig\8fjh\90kh}hezicef`bg]Se[QiYIk[Ko]Iq_Ks^Kr]JuYNuYNk^Nl_OkcPldQ\7f^M\80_N£SH\99I>´5.¶70Ï5+Ñ7-Ù6'Û8)Þ6-Ý5,ß3)à4*à6'à6'Õ9#Ò6 É<!Ê="Æ>$Æ>$Í<'Í<'Ô8)Õ9*µE/­='¨3\1f¨3\1fº6'À<-Ï8/Í6-Ò/*ã@;õ[SáG?ÊF7ÉE6£6\1f¯B+ÊE6ÉD5È@2Ç?1Í?3ÑC7ÛD;ÞG>ß@:Þ?9ß:6Ý84á53â64ç77é99è=6å:3â62ç;7ïJHñLJÓ>:»&"´-'¼5/Å?6ÉC:Ò?8Ò?8ß=:â@=ß;2ß;2á81â92å84æ95ê88ë99ê69ë7:ê7;ê7;è7=è7=æ7<å6;é56è45á85á85Õ>7Ò;4À</½9,­:'¬9&¦;'¥:&¡;% :$\9e:#\9e:#\9a?,\8e\97>,\93:(\96/&Æ_Výt{àW^ðRaèJYÐGQËBL¤WM§ZP\82oQ\82oQFX@9K3F5!I8$XP,woKv§f\91Â\81}Áty½p~\9c\g\85Ey}J\84\88Ut~LZd28E)0=!4>&<F.<F.9C+CQ-Vd@e}Cj\82Hi\8dCm\91Gg\93Fe\91D_\92G^\91Fh\8bGk\8eJo\92No\92Nk\90Mi\8eKg\8eKi\90Mr\9bUr\9bUr\9eSq\9dRp\9fOr¡Qw§SzªVs¦Wr¥Vp£TRK;RK;RK;RK;RK;RK;RK;RK;UN>UN>VO?WP@YRBZSC[TD\UEb[IaZH`XMbZOf\Zlb`rgmvkqznx|pz\7fs}\80t~|qyujrmbhh]cbbZaaY__U]]S^ZO^ZO`ZLa[Me]Je]Jg\Fg\Fi]Ei]Ek]Cl^DbfOgkTwVEqP?\9bND¥XN°TG²VI©M8¢F1¦;'§<(Ã6,È;1ß12Þ01Û7-Û7-Ü8.Ü8.Ú8-Ù7,×7+Ö6*Õ7+Õ7+Ô8+Ô8+Ò9+Ò9+Ò9+Ò9+¶=,¶=,®9'¦1\1f¨3!±<*¿=-½;+È5+É6,Ó;0ÛC8ÜJ=ØF9Å<*¹0\1eàMEÛH@ÔD;ÔD;ÚE>ÜG@â@;ß=8å33é77ï98î87ä84â62Ü;3Þ=5ÌL?ÆF9¼>0´6(¯6%²9(¹>.½B2Â:,Æ>0×=5Ú@8è96è96ñ56ò67å6;å6;ä79ä79â96â96â92â92Þ5.ß6/à70â92å95å95å97å97é;=ç9;Ý;9Ý;9ÐC<ÎA:»C5·?1¢=+¡<*\9a>)\98<'\94<(\92:&\919%\919%\87F2\81@,\89,$\8d0(ÀJJännámpÊVY­RO¬QN\99YO\98XN\92\P\94^R\99_T\9a`ULa 9N\r2I\ 3Md\1ev\92H\96²h »t »t\98°r\83\9b]k~QZm@WcKQ]EHNB<B6;<,@A1<@2:>0:B3:B3>O/RcCZv<f\82Hm\91Gn\92Hi\92Fi\92Fh\92Jg\91Ii\8fRk\91Tl\93Pl\93Pj\94Jj\94Jj\97Fl\99Hn\9eHn\9eHo¡Jq£Ls¥Pu§RvªXx¬Zx¤im\99^b\8eSVO?VO?VO?VO?VO?VO?VO?VO?WP@WP@XQAYRB[TD\UE]VF]VFc\Jb[IaYNbZOdZXh^\lagodjpdnrfpthrthrqfnlaif[aaV\[[SYYQWWMUUKWSHXTI[UG\VHbZGc[HeZDf[Ei]Ej^Fl^Dm_E_cLgkT{ZIwVE SI¦YO®RE°TG§K6£G2¨=)¨=)Ã6,Ç:0ß12Þ01Û7-Û7-Û7-Û7-Ú8-Ù7,×7+Ö6*Õ7+Õ7+Ô8+Ô8+Ò9+Ò9+Ò9+Ò9+·>-¶=,­8&¦1\1f§2 ¯:(¾<,½;+É6,Ç4*Ì4)Ò:/ÙG:àNAÛR@ÙP>ÚG?ÔA9Í=4Í=4Ò=6Ô?8Û94Ø61é77ê88í76ì65ä84ä84ß>6á@8ÃC6¿?2·9+²4&®5$±8'¸=-¼A1Ç?1ÉA3Ø>6Ù?7ç85ç85ñ56ò67æ7<æ7<å8:å8:ã:7ã:7ã:3ã:3á81â92ã:3ã:3æ:6å95å97ä86æ8:æ8:Þ<:Þ<:ÏB;Ê=6¶>0±9+¡<* ;)\99=(\98<'\93;'\92:&\919%\908${:&|;'\8f2*\9a=5ÄNNÙccÑ]`¾JM©NKªOL\99YO\9aZP\94^R\95_S\98^S\98^SRg&Rg&\s-y\90J\96²h£¿u\97²k\86¡Zi\81C_w9Sf9H[.CO7=I18>239-:;+@A1<@2:>0:B39A2>O/QbB[w=g\83In\92Ho\93Ij\93Gj\93Gi\93Kh\92Jk\91Tl\92Um\94Ql\93Pj\94Jj\94Jj\97Fl\99Hm\9dGm\9dGn Iq£Lu§Rw©TvªXvªXj\96[_\8bPV\82G[TD[TD[TD[TD[TD[TD[TD[TDZSCZSC[TD\UE]VF_XH_XH`YId^Fc]Ec\Ic\Id\Oe]Pf]Vg^Wh_Zi`[ja\ja\h_Xd[T`WN^ULXVJVTHSQDQOBQN?RO@TQ@VSB\WD]XE_XEaZGd^Hf`Jh`IiaJ`bMgiT}[O}[OªWQ«XR»EA¹C?À=5¾;3¼8+»7*¼8)¿;,Ã>-Ä?.Ù7*Ù7*Ú8+Ú8+Ù9+Ø8*Õ8)Ô7(Ô8)Ô8)Ô8)Ô8)Ò9)Ò9)Ò9)Ò9)¸@0¶>.©:&¡2\1e\9e4\1e¥;%³>*µ@,Ã>/¿:+Ä2%Æ4'Î</ØF9ÛN=ÝP?ß55Ü22Õ1/Ö20Ü86à<:é;<è:;ï6;í49ì25ë14å55ç77à=8ß<7¶<-³9*¯7'¬4$«6$®9'µ<+¸?.ÉD5ÊE6Ø@5Ø@5ä84ã73í55ï77ê69ê69é77é77æ93æ93å:2å:2â;2â;2á<6á<6ß<7Þ;6Ý98Ý98Ø:9Û=<ÔC>ÒA<ÂB7º:/¨:+¤6'\9c=)\9b<(\94=)\93<(\90;&\8f:%\8d8$\8d8$u8#t7"\889,\98I<¶SN»XS±RN©JF\9bQH\9dSJ\92]O\95`R\93bT\93bT\95_U\94^TfwC{\8cX\93¥q¤¶\82ª¾\89\9e²}y\8f^Xn=?Q)@R*AP3=L/:C24=,58/58/:;+@A1;?19=/9A29A2=N.QbB\x>i\85Kp\94Jq\95Kl\95Il\95Il\96Nj\94Lm\94Qn\95Ro\97Pm\95Nk\95Ij\94Hk\98Gm\9aIm\9dIm\9dIp\9fNt£Rx©Xx©Xt¤Xp T_\88NU~DNw=`YI`YI`YI`YI`YI`YI`YI`YI^WG^WG_XH`YIaZJb[Kb[Kc\Ld^Fd^Fe^Ke^Ke]Pe]Pd[Td[Tg^Yg^Yf]Xf]Xe\Ud[TcZQbYP[YMXVJTREPNAOL=OL=QN=RO>WR?XS@[TA^WDa[Ec]Gg_Hh`IacNegR{YM\80^R±^X°]WºD@´>:À=5À=5À</¾:-¼8)½9*Á<+Ä?.Ø6)Ù7*Ù7*Ú8+Ø8*Ø8*Õ8)Õ8)Ô8)Ô8)Ô8)Ô8)Ò9)Ò9)Ò9)Ò9)¹A1¶>.©:&¢3\1f\9d3\1d¢8"°;'´?+À;,¿:+Æ4'Ç5(É7*Ì:-Ë>-Ë>-Þ44Ü22Ö20Ø42Ý97á=;ê<=ê<=î5:ë27ê03ê03å55å55Ù61Ö3.°6'¯5&®6&­5%¬7%­8&²9(³:)Å@1ÇB3×?4ÙA6å95ä84í55î66ê69ê69é77é77æ93æ93å:2å:2à90à90ß:4ß:4Þ;6Ý:5Ü87Û76Ø:9Û=<ÓB=Î=8»;0³3(£5&¢4%\9a;'\9a;'\93<(\91:&\8f:%\8d8#\8c7#\8b6"|?*s6!\834'\95F9¯LG®KF©JF¬MI\9bQH\9cRI\91\N\93^P\92aS\93bT\96`V\96`V|\8dY\98©u¬¾\8a¦¸\84\8f£nr\86QLb1,B\11,>\161C\e8G*9H+9B16?.9<3:=49:*?@0:>08<.9A28@1<M-PaA^z@j\86Lq\95Ks\97Mn\97Ko\98Ln\98Pm\97Op\97Tp\97Tp\98Qn\96Ok\95Ik\95Il\99Hn\9bJn\9eJo\9fKs¢Qx§Vz«Zv§Vl\9cPd\94HZ\83IR{AMv<b[Kb[Kb[Kb[Kb[Kb[Kb[Kb[KaZJb[Kb[Kc\Lc\Ld]Me^Ne^Nd^De_Ef`HgaIhbLgaKf_Lf_LibOhaNgaKgaKf`Hf`HgaGgaGa^M^[JXUDSP?OL;NK:LK9ML:ON:PO;PR=SU@VXCXZE[]H\^Ib`Qb`QpTH{_S±f`³hbÊHJÄBDÙ69Ù69×52Ô2/½<)¼;(ªG(­J+Ô7&Õ8'Ö9(Ö9(Ö9(Ö9(Ô9'Ô9'Ò9'Ò9'Ò9'Ò9'Ñ:'Ñ:'Ñ:'Ñ:'»A2·=.§<(¡6"\957\1d\968\1e >%§E,±<(²=)Â8+Ä:-Ì8,Í9-Ò;0Ô=2ñ4;ï29ç27æ16á46á46à35à35è59ç48å58æ69ß;:Û76Ë3.Å-(«:(«:(ª;(ª;(¨;&¨;&ª:&ª:&·:(¼?-Î>3ÒB7à=6à=6è96è96î64î64í74í74ê93ê93æ;3æ;3Ý:1Þ;2Ú=6Û>7×?:Ö>9Ô>=Ó=<ÇD<ÇD<¿E:¸>3¦:-¡5(\989'\9a;)\92=)\91<(\8b='\8a<&\87:&\858$\857#\857#}C/o5!x3#\8eI9¡SG\9dOC\98PD\9fWK\91YJ\91YJ\8b[M\8c\N\8f]R\91_T\99`W\9aaX\82\8ef\98¤|\9b©\85\80\8ej\kNDS62?+$1\1d,8*.:,4<17?4<?6;>5;;199/89)>?/:>07;-8@17?0<M-O`@^z@k\87Mr\96Lt\98Np\99Mp\99Mo\99Qn\98Pp\9aPq\9bQp\9aNn\98Lm\98Im\98Io\9bLq\9dNq Pt£Sx§Y{ª\y§^p\9eUb\91IX\87?]\86LU~DPy?d]Md]Md]Md]Md]Md]Md]Md]Md]Md]Md]Me^Ne^Nf_Of_Of_Of`FgaGhbJhbJicMicMhaNhaNhaNhaNgaKf`Jf`HgaIhbHhbHc`O`]L[XGVSBQN=MJ9IH6HG5KJ6LK7KM8MO:PR=RT?SU@TVAZXIZXIiMAvZN¬a[±f`ÑOQÔRTà=@Ý:=Ú85×52À?,¾=*ªG(©F'Ó6%Ô7&Õ8'Ö9(Ö9(Ö9(Ô9'Ô9'Ò9'Ò9'Ò9'Ò9'Ñ:'Ñ:'Ñ:'Ñ:'º@1¶<-§<(£8$\968\1e\946\1c\9c:!¥C*µ@,µ@,Ã9,À6)Æ2&É5)Ò;0ØA6ï29ð3:ë6;ì7<ç:<æ9;æ9;å8:å26æ37ç7:è8;ß;:Ø43È0+Á)$¬;)¬;)«<)«<)ª=(¨;&©9%¨8$±4"¶9'É9.Í=2Ý:3Þ;4è96é:7î64î64í74í74ê93ê93æ;3æ;3á>5á>5Ý@9Ý@9Ø@;×?:Ô>=Ó=<Ã@8À=5¶<1°6+¡5(\9f3&\989'\9a;)\90;'\90;'\8a<&\88:$\858$\847#\846"\835!v<(n4 }8(\94O?¦XL\9fQE\97OC\9cTH\93[L\92ZK\8b[M\8b[M\8d[P\90^S\98_V\9aaXq}Ux\84\n|XSa=8G*.= /<(0=)1=/1=/5=28@5>A8>A8;;177-78(=>.9=/7;-7?06>/;L,N_?^z@k\87Mr\96Lt\98Np\99Mq\9aNp\9aRo\99Qq\9bQq\9bQq\9bOo\99Mn\99Jo\9aKr\9eOu¡Rw¦Vx§Wz©[w¦Xq\9fVf\94K[\8aBU\84<_\88NW\80FR{Ae^Ne^Ne^Ne^Ne^Ne^Ne^Ne^Ne^Ne^Nf_Of_Of_Og`Pg`Pg`PibOibOhaNhaNhaNhaNhaNhaNgaKgaKgaIf`HfaDgbEgbEgbEf`Jd^H`[E\WAUS>PN9KJ6IH4EH5FI6EI8GK:FM=GN>FO>GP?OOCRRFWP@^WG\83YI\87]MµOJÅ_ZâFGÝABã77à44Ë=/É;-­D'ªA$Ð7%Ð7%Ð9&Ñ:'Ò;(Ò;(Ñ:'Ñ:'Ñ:'Ñ:'Ñ:'Ñ:'Ð;'Ð;'Ð;'Ð;'º>2¶:.¨=)¦;'\92\8d6\e\91:\1e\9aC'¯B-±D/¿;,¼8)Å.%Æ/&Ò5.Ù<5ë2:î5=è>Aê@CÞDBÜB@ÖB@ÕA?Æ52É85Ë=9Ì>:¿@9¹:3«9.¨6+¢?*¢?*£@+£@+£@)¢?(£='¢<&ª7$¬9&»7*¾:-Ë8.Ï<2Ú=6ÞA:ê93ê93è:3è:3æ;1æ;1à>3à>3ÝC9ÜB8ÓE;ÑC9ÉB<Æ?9À?:¿>9§?2¤</\9b:*\998(\929'\929'\8b=)\8a<(\86=*\86=*\83<(\82;'~:'}9&~7%}6$v3"x5$\85B2\97TD\9bYK\93QC\8dRD\94YK\8f[M\8f[M\8f[N\90\O\94[R\95\S\98[V\99\W`hAX`9IR3=F'4@,2>*4>55?64=86?:=B;AF?EG9BD6?>*;:&78(=>.8<.6:,6>/6>/:K+N_?^z@j\86Lr\96Lt\98Np\99Mq\9aNq\9bSp\9aRp\9dLp\9dLp\9dLn\9bJn\9bJp\9dLt Sx¤W~ª_~ª_x¦^o\9dUd\91N\\89F[\88E\\89Fa\88QY\80IRyBg`Pg`Pg`Pg`Pg`Pg`Pg`Pg`Pf_Of_Of_Of_Og`Pg`Pg`Pg`PkdQjcPibOg`Mf_Lf_Lf_Lf_LgaKgaKgaIgaIgbEgbEgbEfaDgaKf`Jc^H`[EZXCUS>ON:LK7DG4DG4CG6DH7BI9BI9BK:BK:JJ>PPDVO?UN>oE5oE5¦@;¿YTæJKßCDä88á55Í?1Ë=/­D'§>!Ï6$Ð7%Ð9&Ñ:'Ò;(Ò;(Ñ:'Ñ:'Ñ:'Ñ:'Ñ:'Ñ:'Ð;'Ð;'Ð;'Ð;'¹=1¶:.©>*§<(\93<!\8c5\1a\909\1d\99B&¤7"«>)Á=.Â>/Í6-Î7.Ø;4ÞA:ó:Bõ<DìBEê@CØ><Ð64Å1/Á-+¾-*Â1.Ä62Ä62¶70²3,¨6+¨6+ =(¡>)¢?*¢?*¢?(¢?(¤>(¤>(¬9&­:'¸4'¸4'Å2(Ë8.Ù<5ßB;ë:4ë:4é;4é;4ç<2ç<2á?4á?4ÜB8ÛA7ÑC9Î@6Ä=7À93¹83·61 8+\9c4'\954$\965%\929'\929'\89;'\868$\86=*\85<)\83<(\81:&~:'|8%}6$|5#v3"}:)\8bH8\95RB\92PB\8cJ<\8dRD\9a_Q\8dYK\8eZL\91]P\92^Q\96]T\95\S\96YT\95XSV^7EM&5>\1f8A";G3:F23=4-7./835>9@E>EJCGI;AC5>=);:&67'<=-8<.6:,6>/6>/:K+M^>]y?j\86Lq\95Kt\98Np\99Mq\9aNq\9bSp\9aRp\9dLp\9dLo\9cKn\9bJn\9bJq\9eMv¢Uz¦Y\82®c\7f«`v¤\h\96NZ\87DV\83@\\89Fc\90Mc\8aSY\80IRyBhaQhaQhaQhaQhaQhaQhaQhaQg`Pg`Pg`Pg`Pg`Pg`Pg`Pg`Ph_Zh_Zh_Xh_Xh_Vh_Vh`Sh`ShaOhaOhaOhaOhaNhaNhaNhaNg_Hf^Ge_Id^Ha\H\WCRQ=ML8GJ7DG4>E5=D4=F5>G6<G7;F6EL<FM=>H0CM5XS6RM0\83I5¬r^àe]ÕZRçECãA?á?:Ü:5Ë;0Ê:/Ç4$È5%Ê7'Ê7'Ë8(Ì9)Î;+Ð=-Ï<,Ï<,Ï<,Ï<,Ñ;,Ñ;,Ñ;,Ñ;,·2)º5,®=-©8(\978"\934\1e\957\1e\99;"°@,®>*¼4(½5)Í4,Õ<4âC=çHBãEFåGHÔFBÈ:6°:.°:.¤=.\9f8)¡=. <-\9a=.\98;,\90=-\90=-\88?,\88?,\95>+\95>+\96?+\97@,\97@,\98A-\9cA,\9cA,\9f<)\9f<)§8'¨9(³7+·;/Á=1Ã?3Ú=4Û>5ÝA5ßC7ÜD7ÚB5ÔB5ÓA4ÓI<ÐF9ÁC7º<0ª8.¦4* 3,\9f2+\90=-\8f<,\8b<+\89:)\86;(\86;(\81=*\81=*|;'{:&x9'x9'x9'x9'u6%t5$z, \8d?3\97OA\95M?\8cM>\91RC\91VH\8dRD\99ZQ\99ZQ\92SL\92SL\99ZU\96WR\93VQ\9ea\QZ-HQ$AK&AK&<I/5B(1<+3>-1<,EP@X_MU\JLP7CG.@A"<=\1e9:*=>.9=/9=/8@14<-8I)PaA`|Bk\87Mq\95Kr\96Ln\97Kp\99Mp\9aRp\9aRn\9eHo\9fIo\9fKo\9fKp\9fOs¢Rz¦[~ª_\82­fw¢[i\93Q_\89G\\86F`\8aJd\8eNg\91Qc\8aUZ\81LSzEhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQi`[i`[i`Yi`Yi`Wi`WiaTiaTibPibPibPibPibOibOibOibOh`Ig_Hf`Je_Ic^J^YETS?ON:HK8EH5?F6>E5=F5>G6<G7;F6@G7>E5=G/CM5NI,ID'\86L8±wc×\TÛ`XóQOèFDá?:á?:ÒB7Ê:/Í:*Î;+Ï<,Ï<,Î;+Í:*Í:*Í:*Î;+Î;+Î;+Í:*Ï9*Ï9*Ï9*Ï9*Å@7Å@7¶E5®=-\989#\923\1d\924\e\946\1d¥5!ª:&Ã;/ÌD8ÞE=ãJBéJDéJDßABàBCÏA=Ä62¯9-°:.¥>/¢;,¢>/ <-\9a=.\98;,\90=-\8f<,\87>+\87>+\91:'\92;(\92;'\93<(\94=)\95>*\99>)\99>)¢?,¡>+¨9(§8'°4(³7+»7+½9-Ó6-Õ8/Ø<0Û?3ÙA4ÚB5ÕC6ÔB5Ê@3Ç=0»=1µ7+¨6,¥3) 3, 3,\8f<,\8e;+\8a;*\89:)\86;(\85:'\81=*\81=*|;'{:&y:(x9'x9'w8&u6%t5$\802&\91C7\97OA\93K=\8aK<\8fPA\8fTF\8dRD\91RI\96WN\94UN\96WP\9b\W\95VQ\8fRM\97ZUT]0Zc6^hC[e@GT:6C)4?.<G6LWGWbR^eST[IIM4AE,?@!;<\1d89)<=-8<.9=/8@14<-9J*PaA`|Bl\88Nr\96Ls\97Mo\98Lp\99Mp\9aRp\9aRp Jo\9fIn\9eJn\9eJq Pu¤T|¨]~ª_{¦_o\9aSa\8bI\\86D_\89Ic\8dMd\8eNb\8cLb\89TY\80KRyDhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQi_^i_^i_]i_]i`Yi`YiaViaViaTiaTiaTiaTiaTiaTiaViaVjbMiaLh`Kh`Ke`La\HYVCTQ>KL:HI7CF5AD3?F6?F6>E5=D4:H14B+?G/DL4H=!NC'\8cXB«wa¹SEÎhZòc_åVRèEFéFGèBDÝ79Ç9+Ç9+È:,È:,È9+Ç8*Æ7)Å6(Ê8+Ê8+Ê8+Ê8+Ë7+Ë7+Ë7+Ë7+Á2.Â3/¶6-±1(¡0 \9f.\1e£/ ¦2#Á=1ÇC7ÙD=àKDéLGçJEåFBáB>ÐE@ÎC>ºD:±;1\9b@.\9dB0\93H3\92G2\8eG3\8cE1\88E2\85B/~D0|B.wE.vD-\87:*\87:*\88;+\88;+\89<*\8a=+\8a=+\8b>,\93@.\92?-\95<,\95<,\9b:*\9d<,¢<.£=/µ;0¶<1º>2¼@4ÀB4ÀB4¾C4¾C4°<-®:+¥;-¢8*\979-\968,\92:.\92:.\87>-\86=,\84=+\82;)\80;+\7f:*}<*~=+z;*z;*x:+w9*s8(r7'p7&p7&\89;1\94F<\92NA\8dI<\87I<\8cNA\92RH\91QG\93LF\99RL\98SN\9aUP\97^W\93ZS\87\S\93h_v\84S}\8bZ|\8c_iyLIY25E\1e;J)L[:crUapS[fHLW9CJ+>E&=@!:=\1e78(;<,7;-9=/9A25=.9J*O`@`|Bl\88Ns\97Mt\98Np\99Mp\99Mp\9aRp\9aRq£Ln Il\9dKn\9fMt£Uy¨Zz¨`z¨`o\99Wd\8eL[\84B[\84Bc\8cJh\91Od\8dK^\87Eb\87SY~JRwChaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQhaQi_^i_^i_]i_]i`Yi`YiaViaViaTiaTiaTiaTiaTiaTiaViaVkcNjbMjbMjbMgbNd_K]ZGYVCNO=KL:FI8CF5?F6?F6=D4<C3;I26D-BJ2BJ2I>"_T8\98dN\99eO¤>0½WIï`\ï`\òOPìIJêDFä>@È:,Æ8*Å7)Å7)Ç8*É:,Ê;-Ê;-Ð>1Ð>1Ñ?2Ñ?2Ò>2Ò>2Ó?3Ó?3ÐA=ÑB>ÇG>ÅE<ºI9¼K;ÃO@ÇSD×SG×SGáLEàKDãFAáD?àA=Þ?;ÑFAÌA<·A7¯9/\9b@.\9cA/\93H3\93H3\8dF2\8cE1\87D1\84A.|B.{A-uC,uC,\858(\858(\869)\869)\87:(\87:(\87:(\88;)\8c9'\8c9'\907'\918(\998(\9b:* :,¢<.°6+±7,³7+´8,¶8*µ7)²7(±6'©5&¨4% 6(\9e4&\946*\946*\919-\919-\85<+\84;*\82;)\81:(~9)~9)|;)|;)z;*z;*x:+v8)r7'q6&p7&q8'\8fA7\95G=\8fK>\8bG:\86H;\8dOB\94TJ\95UK\96OI\9bTN\97RM\97RM\95\U\95\U\91f]¢wn\8b\99h\85\93br\82UYi<BR+>N'O^=crQdsVZiLNY;AL.>E&=D%=@!;>\1f78(:;+6:,8<.:B36>/9J*N_?_{Ak\87Mr\96Lt\98Np\99Mq\9aNq\9bSp\9aRp¢Km\9fHm\9eLr£Qy¨Z{ª\w¥]r Xa\8bI\\86D[\84B^\87Ee\8eLh\91Od\8dK_\88Fa\86RX}IQvBhaQhaQhaQhaQhaQhaQhaQhaQibRibRibRibRibRibRibRibRja\ja\jaXjaXjbUjbUjcQjcQjcPjcPjcQjcQjbUjbUjbWjbWldQkcPkbQkbQjcQhaOb]J_ZGURARO>LK9IH6EF4CD2AB2?@09L.7J,SC,P@)t6)\96XK¹XQ\9d<5¥0)µ@9ØWRílgôfeäVUãJOçNSÕK@ÐF;Ê@5È>3Í@6ÑD:ÔF<ÕG=ÚJAÚJAÚJAÛKBÝJBÞKCÞKCÞKCìRRëQQãTPàQMÚQKÚQKßRKáTMäIEãHDçCBåA@ãA>äB?àE@áFAÕJGÍB?µ@7¯:1\99B1\99B1\8eG3\8fH4\88E4\87D3\86A2\84?0~?0}>/y>0y>0\819-\819-\80:.\80:.\7f;.\80</\80=-\80=-~;+~;+\82:+\83;,\85<-\86=.\8a>.\8b?/\94<0\94<0\98</\98</\9c;+\9c;+\9e:*\9d9)\9a9(\998'\929)\918(\8a;*\89:)\85<-\85<-\81<-\80;,\7f:+}8)|9){8(z8*z8*x9*y:+v;-t9+p6(o5'p8+r:-\8bI;\8cJ<\85L;\83J9\82M=\89TD\94UL\96WN\97PL\9bTP\95TP\95TP\8adY\88bWylY\86yfgvMZi@HY-AR&GZ-Wj=bxJg}OXjBK]5=L-7F':D,;E-;?08<-78(9:*59+8<.;C47?08I)L]=\x>i\85Kq\95Kt\98Np\99Mq\9aNq\9bSp\9aRm\9eLm\9eLp¡Pv§V|ªay§^p\9dZg\94QY\83C[\85E`\89Gc\8cJg\8eKg\8eKe\8dGd\8cF`\85RW|IPuBhaQhaQhaQhaQhaQhaQhaQhaQibRibRibRibRibRibRibRibRja\ja\jaXjaXjbUjbUjcQjcQjcPjcPjcQjcQjbUjbUjbWjbWldQkcPkbQkbQkdRibPe`Mc^KZWFVSBPO=LK9GH6EF4BC3@A17J,8K-QA*SC,\83E8\9d_R±PI\921*±<5µ@9ÓRMñpkÿtsóedðW\ô[`àVKÙODÑG<ÍC8ÑD:ÔG=ÖH>ÖH>ÙI@ÙI@ÚJAÚJAÝJBÞKCÞKCßLDáGGàFFÙJF×HDÓJDÒICÕHAÕHAÝB>ÞC?æBAçCBåC@äB?ÝB=Û@;ÖKHÌA>´?6°;2\9bD3\98A0\8bD0\8cE1\86C2\85B1\84?0\83>/}>/}>/z?1z?1\82:.\82:.\80:.\80:.\80</\80</\80=-\80=-\80=-\80=-\82:+\82:+\829*\829*\837'\837'\8f7+\908,\948+\959,\9b:*\9c;+ <, <,\998'\998'\929)\918(\89:)\889(\83:+\83:+\7f:+~9*}8)|7(z7'z7'y7)y7)u6'w8)u:,s8*o5'n4&q9,u=0\8dK=\8bI;\84K:\84K:\85P@\8bVF\94UL\95VM\94MI\9aSO\96UQ\9aYU\8cf[\81[PdWDgZGBQ(?N%>O#K\0^qDk~QcyKVl>M_7@R*6E&5D%<F.<F.:>/6:+89):;+59+8<.;C47?06G'HY9Ws9e\81Gn\92Hr\96Lp\99Mr\9bOr\9cTq\9bSl\9dKn\9fMs¤Sx©Xz¨_s¡Xg\94Q]\8aGX\82B\\86Fc\8cJf\8fMf\8dJe\8cIe\8dGf\8eH_\84QV{HOtAhaQhaQhaQhaQhaQhaQhaQhaQibRibRibRibRibRibRibRibRjcSjcSjcPjcPjdLjdLjdJjdJjdJjdJjdLjdLjcQjcQjbUjbUlcTkbSjaRkbSlcTkbShaQf_OaZH]VDVQ>QL9NI6KF3HC0FA.6I)7J*a:)pI8´FGµGHÂ0:À.8Ì@CÈ<?ÇKIÞb`íspêpmãcdÝ]^ÚQIÔKCÎE=ÌC;ÏD=ÐE>ÐC<Í@9ÑB<ÒC=ÓB=ÔC>×C?ØD@ØD@ÙEAß>Cà?DÝCCßEEáIHáIHæFFåEEê@Cê@Cî@Bî@BåA@â>=Ø?9Õ<6ÚFFÎ::¶93µ82¢B4\9d=/\8e?0\8e?0\8a</\89;.\8990\888/\8781\8781\8693\87:4\7f:3\7f:3~;2~;2|<2|<2{=0{=0y>0y>0y>.x=-w<,v;+w:(v9'};/~<0\82:,\83;-\8a;,\8c=.\92<+\93=,\8f9(\8f9(\8a;*\8a;*\82>+\81=*~=+}<*\808*\7f7)~6(}5'z4(z4(y5*y5*s3'u5)t8-r6+m5(m5(q<.vA3\87R@\83N<|O<\7fR?\84VF\86XH\8eTI\8eTI\93NI\97RM\8fVO\93ZS\7fjYoZIFP5AK0?N/JY:VhB_qKd{MbyKUm=E]-AV-5J!/?"3C&;F89D67;:598:;+;<,59+8<.;C46>/5F&EV6So5a}Ck\8fEq\95Ko\98Lr\9bOr\9cTq\9bSl No£Qr¥Xt§Zq Xi\98P_\8cKY\86E]\87G_\89Ib\8bId\8dKf\8eHe\8dGd\8cCc\8bB^\83PUzGNs@haQhaQhaQhaQhaQhaQhaQhaQjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdQkdQkeMkeMkeKkeKkeKkeKkeMkeMkdRkdRkcVkcVlcTkbSjaRkbSlcTlcTibRg`Pd]K_XFXS@SN;OJ7LG4ID1FA.7J*7J*d=,\7fXGÁST«=>¹'1ÕCMÉ=@Ä8;·;9ÂFDÖ\YàfcÚZ[ÈHIÒIAÎE=ËB:ÍD<ÑF?ÒG@ÐC<Ë>7ÑB<ÒC=ÓB=ÔC>×C?ØD@ÙEAÙEAß>Cß>CÝCCßEEßGFÞFEà@@Þ>>ê@Cé?Bê<>é;=â>=ã?>ÞE?ßF@ÖBBË77³60´71¢B4\9c<.\8d>/\8d>/\88:-\88:-\888/\888/\8781\8781\87:4\87:4\7f:3\7f:3~;2~;2|<2{;1z</z</u:,u:,v;+w<,w<,w<,y<*y<*};/|:.\808*\7f7)\845&\856'\8b5$\8b5$\8d7&\8d7&\889(\89:)\81=*\81=*~=+}<*\7f7)~6(}5'|4&y3'y3'x4)x4)q1%t4(s7,r6+m5(n6)r=/xC5\89TB\85P>~Q>\81TA\86XH\86XH\8cRG\8aPE\97RM\97RM\8aQJ\8dTMzeTlWFCM2>H-HW8ZiJgySewQXoAQh:Ld4H`08M$-B\19*:\1d1A$:E79D68<;7;:;<,;<,59+8<.;C46>/3D$CT4Pl2_{Aj\8eDp\94Jo\98Lr\9bOr\9cTr\9cTn¢Pq¥Ss¦Yp£Vk\9aRb\91I[\88GW\84Cb\8cL_\89I_\88Fa\8aHf\8eHg\8fIc\8bB^\86=^\83PTyFMr?h_Pi`Qi`Qi`QjaRjaRjaRkbSjaRjaRjaRjaRjaRjaRjaRjaRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdTn]Mq`PqdTqdTlcTi`QgaShbTebQebQa_JYWBVR9TP7OI/HB(NE(I@#dH2\88lV²zm¬tg³[W­UQ´DCµEDÃCDÆFGÎFFÑIIÔJHÕKIÏCDÏCDÔDCÕEDÔE?ÑB<ÍE9ÎF:ÃE6ÄF7ÇG<ÈH=ÓCBÓCBÛ>EÛ>EàBCàBCáCBáCBàECàECáFBáFBáC@áC@áB>àA=â@=â@=â@=â@=ÌF=Å?6±;1¬6,\99=0\98</\86A2\84?0|A3|A3}?4|>3\84:1\84:1\8a71\8a71\85<-\84;,\83;,\83;,\82:+\82:+\80;,\80;,\7f:+\7f:+~:-~:-~:-~:-};/};/|8-|8-|8-|8-|:.|:.|:.|:.y9-y9-y9-y9-w9,w9,w9,v8+u9.t8-t8-s7,r6+q5*p6*p6*j2%o7*m5(k3&m8*j5'n9+~I;\80TI\80TI\87PI\87PI\91MJ\92NK\94OJ\95PK\8fTL\8dRJ~_K\81bNdcEVU7GY3M_9g\81T_yLWpFQj@Qf?Mb;HW8BQ28B)4>%38$5:&=>.@A1A?2?=00;-0;-39+5;-9=,;?.=B+>C,S_9coIn\87Pu\8eWp\95Ps\98Sq\9dPr\9eQv\9d^~¥f~¥fq\98Yc\8aK^\85F^\85F]\84E_\86Ga\88Id\8bLe\8cMe\8cMb\89J_\86G]\84E^\80MSuBKm;h_Pi`Qi`Qi`QjaRjaRjaRkbSjaRjaRjaRjaRjaRjaRjaRjaRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdTraQraQobRqdTpgXpgXlfXicUgdSkhWmkVjhShdKc_F[U;RL2SJ-H?"X<&lP:\8bSF\86NA\96>:\99A=ÀPOÀPOÊJKÊJKÎFFÎFFÐFDÐFDÚNOÏCDÉ98Ê:9ÑB<ÔE?ËC7Æ>2ÄF7ÅG8ÇG<ÉI>ÔDCÕEDÝ@GÝ@GàBCàBCáCBáCBàECàECàEAáFBáC@áC@áB>àA=á?<á?<â@=â@=ÍG>ÈB9¶@6¯9/\99=0\96:-\84?0\82=.|A3|A3}?4|>3\84:1\84:1\8a71\8a71\84;,\84;,\83;,\83;,\82:+\82:+\80;,\7f:+\7f:+\7f:+~:-~:-~:-~:-};/};/|8-|8-|8-|8-{9-{9-|:.|:.z:.z:.y9-y9-x:-w9,w9,w9,t8-t8-s7,s7,r6+q5*p6*o5)j2%o7*m5(k3&l7)j5'n9+~I;\80TI\80TI\87PI\88QJ\92NK\93OL\95PK\96QL\89NF\8aOG|]I\80aMmlNkjLasMfxR[uHUoBMf<Ib8J_8H]6FU6BQ2;E,6@'5:&6;'<=-?@0@>1></1<.1<.4:,5;-9=,;?.<A*=B+P\6`lFj\83Lr\8bTn\93Nr\97Rr\9eQr\9eQw\9e_{¢cx\9f`k\92S`\87H]\84E]\84E\\83D_\86Ga\88Ic\8aKd\8bLd\8bLb\89J_\86G]\84E\~KQs@Ik9g`PhaQhaQhaQibRibRibRjcSibRibRibRibRibRibRibRibRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdTrbSo_Pj^Pl`RmeXogZieYeaUecVom`zwh~{l\7fzgzubojVe`LMW<?I.=?'CE-NC/H=)V:,_C5d<0f>2qA5xH<\84NB\8dWK\96^Q\9abUµ`Y­XQ²IE°GCÇCAËGEÓB?Ï>;ÑA9ÒB:ÒC;ÔE=ÖE@×FAÚDCÚDCÞBCÞBCÞDDÞDDÝEBÞFCÞFCÞFCÛF@ÚE?ÙD=ØC<ØC<ØC<ÙD=ÙD=ÓF=ÑD;¿C9·;1\9d;.\975(\84;,\84;,~@1~@1~?0}>/\83;/\83;/\888/\888/\83;,\83;,\83;,\82:+\82:+\82:+\7f:+\7f:+~:-~:-~:-~:-};/};/};/};/{8/{8/{8/{8/{8/{8/y9/y9/y;0y;0y;0x:/v:/v:/u9.u9.t8.s7-r8-q7,p6+p6+n5*n5*j1&o6+j4(i3'l6*i3'm7+}G;\87QG\87QG\8bPH\8cQI\91RK\92SL\90UM\91VN\85YN\87[PxaOv_MkkQqqWhwXfuVPdAJ^;DX5BV3DU5FW7ES9DR8?I1:D,6>)5=(9=,:>-;=/9;-3=42<36<26<29=.:>/<A*<A*LX4[gCe~Gn\87Pl\91Lr\97Rs\9fPt Qz¡bw\9e_n\95Vb\89J\\83D[\82C\\83DZ\81B_\86G`\87Hb\89Jc\8aKc\8aKa\88I^\85F]\84EX}JMr?Di6g`PhaQhaQhaQibRibRibRjcSibRibRibRibRibRibRibRibRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdTscTqaRl`Rk_QiaTkcVieYieYigZwuh\88\85v\90\8d~\95\90}\92\8dz\88\83o~ye[eJKU:DF.DF.LA-G<(T8*[?1Z2&Z2&_/#`0$g1%j4(p8+s;.\99D=£NG¹PL·NJÅA?ÅA?ÔC@ØGDÑA9ÒB:ÓD<ÔE=×FA×FAÛEDÛEDÞBCÞBCÞDDÞDDÝEBÝEBÝEBÝEBÛF@ÚE?ÙD=ØC<ØC<ØC<ØC<ØC<ÒE<ÒE<ÃG=¼@6 >1\986)\85<-\85<-~@1~@1~?0}>/\83;/\83;/\888/\888/\83;,\83;,\82:+\82:+\82:+\819*\7f:+\7f:+~:-~:-~:-~:-};/};/};/};/{8/{8/{8/{8/{8/z7.x8.x8.y;0y;0y;0x:/v:/u9.u9.u9.s7-s7-q7,p6+p6+o5*m4)m4)j1&o6+j4(h2&k5)h2&k5){E9\86PF\87QG\8cQI\8dRJ\92SL\93TM\91VN\91VN\89]R\8a^Sv_MnWE``FggMYhIN]>CW4>R/:N+9M*>O/AR2ES9FT:BL4>H0:B-7?*9=,9=,9;-79+3=43=46<26<29=.:>/;@);@)HT0Wc?azCk\84Ml\91Lt\99Tu¡Rv¢Sz¡bq\98Yd\8bL[\82CY\80A[\82C\\83DZ\81B^\85F_\86Ga\88Ia\88Ia\88I_\86G]\84E\\83DW|ILq>Ch5g`PhaQhaQhaQibRibRibRjcSibRibRibRibRibRibRibRibRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdTrfXsgYph]ldYfbYie\qngzwp~}x\8d\8c\87\9f\9c\95§¤\9dª¦\9b¨¤\99¢\9c\90\9a\94\88x{hcfSMR>EJ6>J6;G3:G3=J6BQ<?N9;H66C16>/4<-7;-7;-K8)^K<\88QJ\8dVO°HI³KLÎCHÎCHØ?AØ?AÚB?ÛC@ÜD?ÜD?ÜD?ÜD?ÞDDÞDDÜDCÜDCÜDCÜDCÙEAÙEA×G?ÖF>ÔG>ÓF=ÐF;ÐF;ÐH<ÐH<Ö?8ØA:ÊF:ÅA5ª@3¢8+\8e=,\8d<+\82?.\82?.~?.}>-\81<,\81<,\86:,\86:,\82:+\82:+\82:+\82:+\7f:+\7f:+~9*~9*~:-~:-};/};/};/};/};/};/z:0y9/y9/y9/w9.w9.v8-v8-v:/v:/v:/u9.t:.t:.s9-s9-q7,q7,p6+p6+n5*m4)l3(l3(g1%l6*h4'f2%i5(f2%i5(yE8\8fLD\90ME\8fPI\91RK\8bWL\8cXM\83[O\83[Os\Lt]Mc\I\UBUZDY^HLXB?K5:F28D05A-5A-8D0<H4@L8CO;@L8=I59E17C/5A-3?+2>*0<(3<72;65:35:38;09<1:?);@*FR.T`<^vBj\82Nn\93Nw\9cWw£Tw£Tx\9eak\91T]\83FW}@Y\7fB\\82E\\82E[\81D^\84G^\84G_\85H_\85H_\85H^\84G]\83F\\82EVzJKo?Bf6g`PhaQhaQhaQibRibRibRjcSibRibRibRibRibRibRibRibRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdTmaSpdVnf[kcXhd[qmd\83\80y\92\8f\88¤£\9e²±¬ÃÀ¹ÈžÈĹÄÀµ¿¹­¸²¦\9c\9f\8c\81\84qafRMR>?K7:F27D08E17F16E07D27D2;C4=E6BF8CG9D1"M:+p92|E>±IJÀXY×LQÍBGÛBDÜCEÜDAÝEBÝE@ÝE@ÜD?ÛC>ÞDDÞDDÜDCÜDCÜDCÛCBØD@ØD@×G?ÖF>ÓF=ÒE<ÐF;ÐF;ÏG;ÐH<Õ>7×@9ÊF:ÇC7®D7§=0\90?.\8d<+\82?.\82?.~?.}>-\81<,\81<,\86:,\86:,\82:+\82:+\82:+\819*\7f:+~9*~9*~9*~:-~:-};/};/};/};/};/};/z:0y9/y9/x8.w9.v8-u7,u7,u9.u9.t8-t8-s9-r8,r8,r8,p6+p6+p6+o5*m4)l3(l3(k2'g1%l6*h4'f2%h4'e1$h4'xD7\8fLD\91NF\90QJ\91RK\8bWL\8bWL\81YM\80XLs\LpYI_XEYR?OT>LQ;>J44@*1=)/;'.:&.:&0<(3?+7C/9E1=I5<H4<H4:F28D05A-2>*0<(0940943814927:/8;09>(:?)BN*Q]9\t@j\82No\94Ox\9dXw£Tv¢Sp\96Yc\89LW}@V|?Y\7fB[\81D[\81D[\81D]\83F]\83F^\84G^\84G]\83F\\82E\\82E[\81DUyIJn>@d4f`PgaQgaQgaQhbRhbRhbRicShbRhbRhbRhbRhbRhbRhbRhbRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdThbVicWhd[kg^qpk\85\84\7f\9d\9d\9b¯¯­ÀÂÁÐÒÑààÞååãæâßáÝÚÛÖÒÔÏËÔ¸­½¡\96\98\85v}j[_ZFPK7>F/<D-=J6<I5=E6;C4<=5:;3;74:636A37B4K81Q>7\86IH¡dcÄad¾[^ÊRSÊRSÕNKÔMJàHEÞFCåA?ä@>ÞDFÞDFÝCEÝCEÜBBÜBBÛCBÚBAÙEAØD@ÔE=ÓD<ÐF<ÐF<ÍG<ÍG<Û>7Û>7ÐC9ÎA7·F8°?1\95>-\8f8'\85>,\85>,\80?-\7f>,\80=*\80=*\83<*\83<*\80;,\80;,\7f:+\7f:+~9*~9*}9,}9,};/};/};/};/{;1{;1{;1{;1w;1w;1v:0u9/t8.s7-r8-q7,q8-q8-q8-p7,n8,n8,m7+m7+o6-o6-l6,k5+j4*j4*h4)h4)f2'k7,f4)c1&e3(b0%e3(uC8\94KE\95LF\8eRJ\8fSK\81YM\80XLp]No\MdaP[XGNRAJN=AJ99B12:+08)25.25.06,/5+.6)/7*2:-4</9D4:E5<I7<I79H35D/1@+/>)-63-6316027158/7:19=,:>->I)MX8Zr@i\81Oo\94Qx\9dZu¡Vr\9eSi\8cT]\80HUx@WzB[~F[~F[~F]\80H_\82J_\82J_\82J^\81I^\81I]\80H]\80H]\80HSwKGk?>b6f`PgaQgaQgaQhbRhbRhbRicShbRhbRhbRhbRhbRhbRhbRhbRjcSjcSjcSjcSjcSjcSjcSjcSkdTkdTkdTkdTkdTkdTkdTkdToi]mg[lh_tpg\84\83\9f\9a¼¼ºÎÎÌÍÏÎÞàßññïøøöúöóöòïðëçéäàêÎÃÜÀµ¿¬\9d¢\8f\80{vb`[GGO8AI2=J6=J6?G8>F7@A9>?7?;8>:74?18C5H5.D1*o21\8fRQÃ`cÍjmÍUVÍUVØQN×PMâJGàHEçCAæB@ÞDFÞDFÝCEÝCEÜBBÜBBÚBAÚBAØD@ØD@ÔE=ÓD<ÏE;ÐF<ÍG<ÍG<ÞA:Ü?8ÐC9ÏB8¹H:±@2\94=,\8c5$\85>,\85>,\80?-\7f>,\80=*\80=*\83<*\83<*\80;,\7f:+\7f:+\7f:+~9*~9*}9,|8+};/};/};/};/{;1{;1{;1{;1w;1w;1v:0u9/t8.s7-q7,q7,p7,p7,p7,o6+m7+m7+l6*l6*o6-n5,l6,k5+j4*i3)h4)g3(f2'k7,e3(c1&e3(a/$e3(tB7\94KE\95LF\8eRJ\8fSK\81YM\7fWKo\MmZKWTCKH7?C2?C29B109(/7(5=.47047039/17-/7*/7*08+19,6A19D4<I7>K9:I46E02A,0?*+41,52/4.16047.7:19=,:>-;F&KV6Xp>h\80No\94Qw\9cYs\9fTn\9aOb\85MX{CRu=VyAZ}EY|DY|D[~F^\81I^\81I^\81I^\81I]\80H]\80H]\80H\\7fGQuIEi=<`4icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSibRjcSjcSjcSkdTkdTkdTleUleUleUleUleUkdTkdTkdTkdTee]ee]stn\91\92\8c­¯¬ÃÅÂ×ÛÜéíîñõöôøùûýüþÿÿÿÿýýüúúöó÷óðûàÍóØÅÜʲƴ\9c§ \83\8a\83fbcDGH)EH-CF+ID1ID1I:3D5.H32M87;@<<A=B:7B:7_GC\86nj½\96\8fÙ²«Ê\8e\84·{q½_W¸ZRÖNN×OOëEIìFJØFGÜJKÚDEÒ<=Ø>@àFHàDEÖ:;Ù??Ú@@×B>×B>ÓB=ÒA<ÏB9ÎA8àA;Ý>8ÏA7Í?5¹C7³=1\99=.\926'\87>-\87>-\81>-\80=,~=)~=)\7f<)\7f<)\7f:+~9*}9,}9,|8+|8+{9-z8,{9-{9-y9/y9/y9/z:0z:1z:1v=2v=2u<1s:/r9.q8-n8,m7+m7+m7+l8+l8+l8+l8+j9+j9+g3(k7,o;0n:/j6+g3(d2'e3(c1&h6+b2&]-!_/#^."a3&oA4\8bNI\8dPK\83RK\82QJu[Nw]P`ZJSM=>G4<E26C23@/2=/1<.39/39/77566457246116/05..6+.6+,8*0<.5D19H58J45G11C-.@*)2-)2--2,.3-25,58/8<+:>-5@"FQ3Vm?i\80Rq\95Xx\9c_q\9cWi\94OZ}GVyCSv@Sv@VyCY|FY|FX{E]\80J`\83M`\83M\\7fI[~H]\80J_\82L]\80JSqOEcA9W5icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSibRjcSjcSjcSkdTkdTkdTleUleUleUleUleUleUleUleUkdTee]oog\85\86\80¤¥\9fÀ¿×ÙÖéíîöúûöúû÷ûüûýüýÿþÿþüÿþüÿüùÿûøÿíÚÿæÓîÜÄÜʲÁº\9d¨¡\84\82\83dijKMP5FI.FA.GB/K<5H92L76O:98=9?D@PHE[SP\7fgc¥\8d\89Õ®§êüÿÒÈí±§Û}uÁc[ØPPÙQQêDHã=AÕCDÕCDÜFGßIJÞDFÖ<>×;<Ü@AØ>>Ù??ÖA=ÖA=ÓB=ÒA<ÏB9ÏB9ß@:Ý>8ÐB8Î@6ºD8´>2\9a>/\937(\87>-\87>-\81>-\80=,~=)~=)\7f<)\7f<)\7f:+~9*}9,}9,|8+|8+{9-z8,|:.|:.z:0z:0z:0z:0z:1z:1u<1t;0t;0r9.q8-p7,m7+l6*l6*l6*k7*k7*k7*k7*i8*i8*j6+l8-n:/n:/k7,h4)e3(d2'b0%d2'^."]-!b2&^."_1$n@3\84GB\8bNI\87VO\84SLpVIjPCOI9C=-8A.7@-3@/2?.2=/1<.4:04:077577557246116/16//7,/7,,8*/;-3B/7F37I36H23E/1C--61,50-2,-2,03*36-6:)8<+5@"FQ3Ul>j\81Sr\96Yx\9c_o\9aUe\90KX{EUxBRu?Ru?UxBWzDX{EWzDZ}G]\80J^\81K[~HZ}G\\7fI]\80JZ}GPnLB`>5S1gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSibRjcSjcSjcSkdTkdTkdTleUleUleUleUleUleUleUleUleUaedw{z\95\99\98²¶µÉÑÓáéëñùû÷ÿÿùÿÿùÿÿûÿüúÿûþÿùÿÿúÿÿøÿÿøøÿÞôûÚéóÐÜæÃÍÙ±ºÆ\9e\9bª\7f\84\93h^hCNX3CG,AE*HE4IF5I@7H?6C;9SKIia_\7fwu\99\94\90¹´°ÓÑÅáßÓ÷ëÝÿúìÿåÛ౧Áfc¥JGÄFJÓUYÔYRÊOHÆE@ÇFAÐFCÑGDÕCCÕCCÖ>=Ö>=Õ?>Ö@?ÕA=ÕA=ÑB<ÑB<Ù@:Ø?9ÎD:ÍC9»F=´?6\9c>2\968,\89=/\89=/\81>.\80=-~=+~=+~=+~=+~:-}9,}9,}9,{9-{9-{9-z8,{;1{;1{;1{;1z;2z;2y:1y:1q;1q;1o;0n:/m9.l8-i7,h6+i7,i7,h8,h8,h8,h8,h8,h8,k90k90j8/j8/j8/i7.d4*b2(b3)`1'[,"_0&a5*Y-"\0%pD9yRK~WPwZRoRJYMAOC7;=/46(/:*0;+0<.1=/4<14<17:169068368349338227027008-08--8*/:,2?.5B17F38G46G46G43=20://5+,2(-0%03(37(6:+5?&FP7WmGm\83]u\97dy\9bhk\94Z^\87MVvDTtBRr@Rr@TtBVvDVvDVvDWwE[{I\|JZzHZzH]}K[{IXxFOeN@V?2H3gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSibRjcSjcSjcSkdTkdTkdTleUleUleUleUleUleUmfVmfVmfVgkj\83\87\86£§¦º¾½ÍÕ×åíïòúüôüþùÿÿùÿÿûÿüúÿûýþøýþøÿÿ÷ÿÿø÷þÝõüÛîøÕæðÍÝéÁÎÚ²³Â\97\9e­\82}\87bdnIMQ6DH-KH7LI8KB9G>5OGEia_\8a\82\80¢\9a\98µ°¬ËÆÂÝÛÏèæÚýñãÿýïÿòèÿÝÓÿ¯¬é\8e\8bÙ[_¹;?ÈMFÌQJÎMHÆE@ÍC@ÕKHÙGGÑ??Ô<;Õ=<Ô>=Õ?>ÕA=ÕA=ÒC=ÑB<×>8Ø?9ÏE;ÎD:»F=´?6\9d?3\979-\89=/\89=/\81>.\80=-~=+~=+~=+~=+~:-}9,}9,}9,{9-{9-{9-z8,|<2|<2{;1{;1z;2y:1y:1y:1o9/o9/m9.l8-k7,j6+h6+g5*i7,i7,h8,h8,h8,h8,h8,h8,l:1i7.g5,h6-j8/i7.d4*`0&c4*`1'].$`1'`4)V*\1f^2'yMB\81ZS|UNjME]@8H<0D8,9;-8:,-8(.9)/;-1=/4<14<169058/68368349338238127019.19.-8*.9+/<+2?.4C07F37H58I69C84>317-,2(,/$-0%15&37(3=$GQ8\rLs\89cz\9cix\9agd\8dSS|BRr@Qq?Pp>Pp>Qq?SsASsATtBUuCYyG[{IZzH[{I]}KYyGTtBH^G8N7*@+gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSibRjcSjcSjcSkdTkdTkdTleUkdTleUleUleUmfVmfVngWngWksu\85\8d\8f¢ª­·¿ÂËÕ×ãíïðüüòþþ÷ÿþ÷ÿþúÿùùÿøûÿñøüîøùé÷øèñÿçñÿçðýáëøÜéóÑÞèÆËÑ­·½\99\9c¢\80|\82`X^DGM3CL9CL9=H::E7d]W\85~x«¢\9dÁ¸³Ê¿×ÏÌâáÜîíèö÷ïõöîúòçÿøíÿöíÿëâᬦ¥pj¤M<«TC»[K¿_OÁRG·H=ÀA:ÆG@ÈA=ÉB>ÍB=ÎC>ÎC>ÏD?ÎC<ÎC<Ò?8ÔA:ËF?ÊE>·F>°?7\9b>6\97:2\89<2\89<2\81=0\80</~<.~<.~<.~<.~:-}9,|:.|:.{9-{9-y9/x8.|<2|<2z;2z;2y:1y:1x92x92k9.k9.j8-i7,i7,h6+f6*f6*f8+f8+f8+f8+d8+d8+d8+d8+j:0g7-e5+e5+h8.h8.c4*`1'a2(b3)\0%\0%\0%V*\1fa7+~THg]TZPGHA7>7-77+88,8<.9=/19,2:-4</4</7:/69.68-57,2:/2:/2:-2:-19,19,/:,/:,-8(-8(.9)0;+2?.5B18E4:G6;F57B14;+/6&.2$.2$04%15&09$HQ<avWx\8dnz\9aqs\93j[\82SIpANn=Nn=Oo>Oo>Oo>Oo>Pp?Qq@TtCXxGZzI[{J]}L]}LWwFOo>DQG5B8(5+gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSibRjcSjcSjcSkdTkdTkdTleUkdTleUleUmfVmfVngWohXohXgoqz\82\84\93\9b\9e¬´·ÃÍÏÛåçë÷÷òþþóþúõÿüùÿøùÿøúþð÷ûíõöæòóãïÿåïÿåðýáîûßîøÖåïÍÓÙµÀÆ¢¬²\90\8a\90nbhNLR8CL9EN;EPBGRD\80ys \99\93ż·×ÎÉÜÔÑäÜÙíìçø÷òîïçúûóÿþóÿþóÿóêÿðçÿàÚÿÕÏä\8d|ºcR¨H8³SCÃTI´E:¼=6ÊKDÈA=ÉB>ÍB=ÎC>ÎC>ÎC>ÍB;ÍB;Ó@9ÔA:ËF?ÈC<³B:­<4\9a=5\98;3\89<2\89<2\81=0\80</~<.~<.~<.~<.~:-}9,|:.|:.{9-{9-y9/x8.{;1{;1y:1y:1x90w8/w81w81j8-j8-j8-i7,i7,h6+g7+g7+f8+f8+f8+f8+d8+d8+d8+d8+h8.f6,e5+f6,g7-g7-f7-d5+a2(d5+^2'[/$`4)`4)g=1{QERH?G=4;4*;4*99-88,48*37)3;.3;.3;.3;.58-47,46+46+19.19.19,08+08+08+.9+.9+.9)-8(-8(.9)/<+2?.4A06C2:E48C28?/4;+37)15'04%/3$/8#JS>cxYv\8blr\92ig\87^QxIAh9Jj9Ll;Mm<Mm<Ll;Ll;Mm<Nn=TtCXxGZzI[{J]}L\|KSsBIi8<I?.;1"/%feSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSibRjcSjcSjcSkdTkdTkdTleUkdTkdTleUmfVngWohXohXpiYbkpluz\83\8e\92¡¬°½ÈÌÒÝáâððíûûòý÷óþøøÿõùÿöûÿîùýìøúåöøãøôëùõìýóçýóçÿñáúéÙêÕÀØîÀ¯\9b¡\90|tm[\UCMPESVKXc[bme\95\99\8a¯³¤ÕÎÆæß×õáâûçèÿðóÿô÷ÿýüþúùòüóñûòóÿïøÿôûÿóûÿóÿãÉé­\93·pZ YC¬SA­TB¸L@¹MAÂG?ÂG?ÆF=ÇG>ÈE=ÈE=ÇD<ÆC;ÐC<ÑD=ÇF@ÂA;¯@9¨92\96<4\96<4\89<4\89<4\81=4\80<3~<0~<0~<0~<0};/|:.|:.|:.{9-{9-y9/x8.z:1z:1x90x90w81v70s7/s7/j8-j8-i9-h8,h8,h8,g9,f8+f8+f8+d8+d8+d8+d8+d8+d8+f5.g6/h70h70g80g80i:2k<4d8/i=4b6-`4+nC:vKBsH?tI@7>6180/7,4<16<228.14)25*58-47,46)46)35(35(46)46)-8(-8(-8(-8(-8(-8(-8(-8(.9).9)-8(-8(.9)/:*0;+1<,7C-7C-:A/9@.9=.59*15&.2#09&KTAbv[o\83hd\84_YyTGmD=c:If6Li9Nk;Nk;Li9Kh8Mj:Ol<UrBXuE[xH\yI^{K\yIQn>Eb27@;*3. )$feSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSfeSibRjcSjcSjcSkdTkdTkdTleUkdTkdTleUmfVngWohXpiYpiYgpuluz\80\8b\8f£®²ÁÌÐÓÞâàîîîüüòý÷óþø÷ÿôøÿõüÿïûÿîýÿêüþéû÷îýùðÿ÷ëÿøìÿ÷çÿñáòÝÈáÌ·Á°\9c¥\94\80{tbd]KVYN_bWkvn{\86~¨¬\9d¼À±ÜÕÍìåÝþêëÿðñÿòõÿðóüø÷üø÷õÿöøÿùôÿððýìõþíûÿóÿðÖÿðÖÿůÃ|f¦M;«R@¼PD°D8ÂG?ÂG?ÇG>ÇG>ÈE=ÇD<ÆC;ÅB:ÑD=ÒE>ÇF@À?9¬=6¦70\95;3\95;3\89<4\89<4\81=4\80<3~<0~<0~<0~<0};/|:.|:.|:.{9-{9-y9/x8.z:1y90x90w8/v70u6/r6.r6.j8-j8-i9-i9-i9-h8,g9,g9,e7*e7*c7*c7*c7*c7*c7*c7*f5.i81k:3k:3h91i:2l=5pA9l@7pD;g;2g;2~SJ\8b`W~SJpE<5<42912:/5=24:0.4*25*8;025*25*13&13&13&24'46)57*,7',7',7',7',7'-8(-8(-8(.9).9)-8(-8(,7'-8(-8(-8(4@*6B,<C1=D2=A28<-26'.2#2;(LUB_sXg{`YyTNnIAg><b9Gd4Kh8Mj:Mj:Kh8Jg7Kh8Nk;TqAWtDYvF[xH]zJZwGMj:@]-3<7'0+\1f(#heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVfeSgfThdYhdYkd\kd\ldWmeXe`JjeOmlXmlXef`de_nqx~\81\88\87\91\92\95\9f «³µÁÉËØÜÝéíîöööùùùþýùÿþúþÿùýþøúýôøûò÷ýñøþò÷úñ÷úñ÷ùëøúìûýåõ÷ßãçÆÑÕ´·½\9b\95\9bylwY\gI_mVq\7fh\81\92\82\8d\9e\8e·¸³ËÌÇâãÞîïêôõðøùôùúõøùôþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúèÿÿíÿÿÿÿýóòðÕ¨¢\92e_\9cD:ªRHÄK@ÀG<ÇC7ËG;ÎL?ÎL?ÈJ>ÆH<ÁJ2ÁJ2µL6±H2\9eI4\99D/\89F5\88E4\7fD4~C3\80@4~>2\84:/\839.\877.\877.}:1}:1|90{8/x8.w7-v6,v6,u7,v8-v8-w9.t8-r6+p4)o3(h9/g8.g8.g8.f7-f7-g7-f6,f6,f6,h8.h8.i7.h6-f4+e3*h1,k4/l7/m80i9+j:,f?.hA0`D/gK6^L8r`Lun[\82{h\83\82pNM;3;.3;.2:-2:-19,19,19,19,08+/7*/7*/7*.6).6).6)-5(.5-.5-.5-.5-.5-.5-.5-.5-.5-.5--4,-4,-4,-4,.5-.5-/;12>45A77C97C56B43@/2?.2?+DQ=WeN\jSSaGGU;DR8FT:Hd>Ie?Jf>Ie=Hd;Ie<Kh<Mj>SoFWsJZvN\xP\wVVqPFaB7R3&.1$,/!),heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVfeSgfThdYhdYkd\kd\ldWmeXidNlgQlkWlkWfgaklf{~\85\8f\92\99§±²¸ÂÃÎÖØßçéïóôøüýÿÿÿÿÿÿýüøþýùþÿùýþøúýôøûòöüðöüðöùðöùð÷ùë÷ùëøúâñóÛßãÂÌЯ³¹\97\91\97uhsUXcE^lUt\82k\89\9a\8a\98©\99¿À»ÒÓÎçèãòóî÷øóúûöûü÷úûöþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúíÿÿìÿÿÿþüÿÿýÿéãíÀºÐxn¢J@¾E:ÀG<ÌH<ÌH<ÆD7À>1¾@4ÃE9ÀI1ÁJ2·N8³J4\9eI4\98C.\8aG6\8aG6\80E5\7fD4\80@4~>2\84:/\84:/\877.\877.}:1}:1|90{8/x8.w7-w7-v6,u7,u7,v8-v8-s7,r6+p4)o3(h9/g8.g8.g8.f7-f7-g7-g7-c3)d4*e5+g7-i7.j8/j8/j8/l50l50m80m80k;-l<.hA0iB1dH3lP;dR>weQ}vc\8b\84q\84\83qLK92:-2:-2:-19,19,08+08+08+08+/7*/7*/7*.6).6).6)-5(-4,-4,-4,-4,-4,-4,-4,-4,.5-.5--4,,3+,3+-4,.5-.5-,8..:01=34@65A36B45B14A05B.BO;P^GQ_HHV<AO5BP6FT:Gc=Ie?Jf>Ie=Gc:Fb9Gd8He9QmDVrIZvN[wOZuTRmLA\=2M.&.1$,/"*-heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVfeSgfThdYhdYkd\kd\keWlfXkiRkiRikVikVileuxq\8e\91\98¨«²½ÇÉÒÜÞêòôõýÿüÿÿüÿÿÿÿýþþüýüøÿþúÿÿøýþöøûðõøíñ÷ëñ÷ëó÷éôøêõøåô÷äô÷ÜìïÔÛܽÈɪ®±\92\93\96wuyblpYt{k\89\90\80\9d§\9c¬¶«ÍÎÉÞßÚïðë÷øóûü÷ýþùþÿúüýøþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúûÿÿûÿÿÿþüÿþüÿûóÿûóùÔÄÊ¥\95\8dP=\95XE¤M:\9bD1¶H9Ê\MÏUH»A4ÆB5ÉE8ÃJ?¾E:©B9£<3\94A9\95B:\86A:\85@9\7f@9~?8{?7z>6z>6z>6w=2v<1u<1t;0t;0s:/p:.p:.o9-o9-n:-n:-m9,l8+k7*j6)l7/l7/j8/i7.i7.h6-h6-h6-e5+e5+e5+f6,f7-h9/i:0j;1i=4g;2f<0g=1g@/iB1fE2fE2bL5kU>fZDvjT\82\80k\91\8fz}\80mCF319,19,19,08+08+/7*/7*/7*08+/7*/7*/7*.6).6).6)-5(-4,-4,-4,-4,-4,-4,-4,-4,.5--4,,3+,3+,3+,3+-4,.5-)5+*6,,8./;12>24@46C27D37D2?L:ES<BP9;I08F-=K2DR9G_=Ia?Kc?Kc?Ha:F_8F_8F_8QjCWpI\tR]uSZqTOfI=T:,C)&.0$,."*,heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVfeSgfThdYhdYkd\kd\keWlfXkiRljSjlWlnYnqj\80\83|\9e¡¨º½ÄÃÍÏÛåçóûýùÿÿúþÿúþÿüüúúúøþýùÿþúþÿ÷úûóô÷ìîñæèîâçíáíñãïóåñôáðóàðóØèëÐØÙºÇÈ©¯²\93\9e¡\82\8f\93|\90\94}\99 \90§®\9e³½²¼Æ»ÜÝØéêåö÷òûü÷üýøþÿúþÿúüýøþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúöûþûÿÿÿÿýóòðÿñéÿûóÿöæÿòâù¼©¼\7fl¡J7¤M:ÁSDºL=»A4ÁG:Ã?2ÈD7ÃJ?¾E:¨A8¢;2\93@8\95B:\86A:\85@9\80A:~?8{?7z>6z>6z>6w=2v<1u<1u<1t;0t;0q;/q;/p:.p:.n:-n:-m9,l8+k7*k7*l7/l7/j8/j8/i7.i7.h6-h6-k;1j:0h8.g7-e6,f7-g8.h9/k?6i=4f<0h>2iB1kD3fE2eD1aK4kU>i]GuiS\85\83n\90\8eyor_:=*08+08+08+08+/7*/7*/7*.6)08+/7*/7*/7*.6).6).6)-5(-4,-4,-4,-4,-4,-4,-4,-4,-4,,3+,3++2*+2*,3+,3+-4,)5+)5+)5++7--9-0<03@/5B15B09F4;I27E.2@'1?&7E,>L3BZ8E];H`<Ia=Ha:F_8F_8F_8PiBWpI^vT^vTXoRKbE7N4%<"%-/#+-!)+heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVgdSheThdYhdYkd\kd\keWlfXjhQkiRkmXoq\qvo\83\88\81 §­¼ÃÉÍ×Ùåïñùÿÿùÿÿùýþúþÿÿÿýýýûÿÿúÿÿúüþó÷ùîîòäæêÜàç×ÞåÕæëÕéîØìðÙìðÙîîÔèèÎÚØ¿ËÉ°Á¼¨¸³\9f±®\9f¶³¤À½¶ÊÇÀÒÑÏÚÙ×èéäñòíúûöüýøüýøþÿúþÿúüýøþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿúýÿùüüûùûúøõÿø÷ÿúõÿôóÿòÿÿìæåÐÀ\9d\87\8ciS\93J7\9aQ>´Q>³P=Â=6ÆA:ÅF@ÁB<±>;ª74\9d99\9e::\8f>=\8e=<\80@>~><sB;sB;lD:lD:p>5p>5p>5p>5o?5n>4n>4n>4l=3l=3i=2h<1g;0f:/f:/f:/q60q60o6/o6/m6/l5.i7.i7.j;1i:0f:/d8-a9-b:.c;/d<0_C5_C5_D3aF5aH2bI3^J2]I1ZN4bV<gcJrnU\80\85n\83\88qXaL1:%08+08+08+08+/7*/7*/7*.6)08+/7*/7*/7*.6).6).6)-5(,3+,3+,3+,3+,3+,3+,3+,3+,3++2*+2**1)*1)+2*+2*,3+*6,*6,)5+)5+*6*,8,/;-1=/0=,3@/5B03@.0=)/<(3A*7E.=O5@R8EX<I\@I\>J]?J]=K^>SfH[nPbtZasYYkUJ\F5F3$5"#,+!*) )(heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVgdSheThdYhdYkd\kd\keWlfXigPkiRlnYoq\pun\81\86\7f\9c£©·¾ÄÕßáí÷ùùÿÿùÿÿøüýüÿÿÿÿýýýûÿÿúÿþùúüñóõêéíßâæØÜãÓÛâÒãèÒæëÕéíÖèìÕëëÑççÍÜÚÁÐεÒ͹ÌdzÇĵÍÊ»ÕÒËÞÛÔçæäïîìòóîøùôýþùüýøüýøþÿúþÿúûü÷þÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿùüÿõøÿþüÿÿý÷ÿúôÿ÷ïÿîôÿóõôßÿÿìÿéÓʧ\91®eR¢YF¶S@¯L9Ã>7Å@9ÃD>ÁB<³@=®;8\9f;;\9d99\8f>=\8e=<\81A?\7f?=tC<sB;mE;mE;p>5p>5p>5p>5o?5o?5o?5o?5n?5m>4j>3i=2h<1h<1h<1h<1q60q60p70o6/m6/m6/i7.i7.f7-f7-e9.e9.d<0e=1f>2g?3^B4aE7eJ9gL;dK5cJ4_K3_K3]Q7cW=lhOvrY\7f\84mv{dEN94=(19,19,19,08+08+/7*/7*/7*08+/7*/7*/7*.6).6).6)-5(,3+,3+,3+,3+,3+,3+,3+,3++2*+2**1)*1)*1)*1)+2*+2*+7-*6,)5+(4*)5)*6*+7)-9+,9(/<+2?-3@.3@,2?+2@)3A*4F,8J0>Q5BU9EX:GZ<J]=L_?ReG[nPbtZ_qWVhRFXB2C0!2\1f$-,"+* )(heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVgdSheTjcYjcYkd\kd\keWlfXkkSkkSinXjoYjqiy\80x\93\9c¡­¶»ÑÛÝéóõùÿÿ÷ÿÿöúûüÿÿÿÿýøøöÿÿøþþöøúíðòåèìÝãçØßæÔßæÔäëÌæíÎèìÑæêÏéçÐæäÍáÚÈ×оÚÐÄÙÏÃÝÒÎæÛ×íãäóéêùðóÿöùùúõýþùÿÿûýþùüýøÿÿûÿÿûüýøþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿøöÿù÷ÿÿýÿÿýðÿÿëþúíÿÿíÿÿôÿúéûïÿüêÿÿíóϹ |f\8aR9\9abI³L;³L;²K<²K<±I@¬D;¢?9\9c93\94<8\93;7\85@9\83>7uC8tB7lG7lG7p>7p>7p>7p>7o>7o>7p?8p?8pA9o@8k?6j>5i=4i=4j>5j>5q60q60p70p70l7/l7/h9/g8.a9-a9-a=/b>0aA2aA2_B2_B2RG3ZO;bWAcXB_U:ZP5XQ5ZS7YX:ZY;jnSrv[x\82icmT0?(4C,2:-2:-2:-19,19,08+08+08+08+/7*/7*/7*.6).6).6)-5(,3+,3+,3+,3+,3+,3+,3+,3++2**1))0()0()0()0(*1)+2*+5-*4,*4+*4+*4++5,,6+,6+,7).9+2=-5@07B26A15@/4?.0?*4C.9H1=L5@P6DT:HX>K[ARbH[kQap[^mXSaPDRA1?0!/ &/,$-*"+(heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVgdSheTjcYjcYkd\kd\keWlfXmmUmmUhmWglVeldszr\8d\96\9b§°µÊÔÖâìîõýÿôüþ÷ûüüÿÿÿÿýøøöÿÿ÷ýýõ÷ùìïñäèìÝåéÚãêØåìÚæíÎèïÐèìÑåéÎçåÎåãÌáÚÈØÑ¿×ÍÁÜÒÆéÞÚøíéþôõÿõöþõøÿ÷úýþùÿÿûÿÿûþÿúýþùÿÿûÿÿûýþùþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿüúÿüúûûùûûùòÿÿòÿÿëÿÿæÿúîÿôôÿúÿÿíþ÷åÿïÙÿâÌá©\90¨pW·P?´M<²K<³L=´LC±I@¤A;\9d:4\94<8\93;7\85@9\83>7uC8tB7lG7lG7p>7p>7p>7p>7p?8p?8p?8p?8qB:pA9l@7k?6j>5j>5k?6k?6r71q60p70p70l7/l7/h9/h9/d<0e=1d@2d@2aA2`@1\?/[>.RG3]R>h]Gi^HbX=[Q6YR6]V:XW9XW9imRrv[t~eWaH$3\1c5D-3;.3;.2:-2:-19,19,19,19,08+/7*/7*/7*.6).6).6)-5(+2*+2*+2*+2*+2*+2*+2*+2**1)*1))0()0()0()0(*1)*1)(2*)3+)3**4++5,,6-,6+,6+,7).9+2=-6A18C39D47B15@/-<'0?*4C,7F/;K1?O5DT:HX>QaGYiO_nY[jUP^MAO>.<- .\1f(1.&/,#,)heVheVheVheVgdUgdUgdUgdUifWifWifWifWifWifWifWifWjdTkeUkdZkdZle]le]jgXkhYnpXkmUgoXjr[gsinzp\83\91\94\9cª­»ÄÉÏØÝçïòóûþúþÿûÿÿþÿúýþùÿÿøýýõøúìõ÷éò÷ãïôàêòÛçïØïöÔëòÐëîÑéìÏçåÐÞÜÇÜÔÉÜÔÉáÓÐçÙÖñããúììþòöÿöúÿùýÿûÿþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúýÿ÷ýÿ÷ýÿüýÿüýþÿýþÿýþÿýþÿÿþÿÿýÿÿûóÿüôÿÿìÿýêÿ÷ÛûðÔ¸\83d\9cgH\8fR6\96Y=¤\F\9dU?\9bL;\9dN=\8c?/\8c?/\83@/\81>-v?+v?+sD0uF2r=7r=7s>8s>8u@:u@:r@9q?8r@9r@9q@9p?8p?8o>7n?7m>6j8/k90j:0k;1g=1g=1b>0b>0]@0\?/_H6_H6Q?+L:&I8$A0\1cQS;MO7HK0JM2Z[<fgHabCTU6UX9]`AntXy\7fcanT=J0,:#1?(3;.3;.3;.3;.2:-2:-2:-19,2:-19,19,08+08+/7*/7*/7*/6./6./6..5-.5-.5--4,-4,+2*+2*+2*+2**1)*1)*1)*1)+5-+5-*4,*4,*4++5,+5,,6-(2)*4+.8-2<17A6:D9=G<>H=5B04A/1>,/<*1?(7E.AO8HV?N\EUcL[hVXeSKWI:F8.:0(4*&/*%.)%.)heVheVheVheVgdUgdUgdUgdUifWifWifWifWifWifWifWifWjdTkeUkdZkdZle]le]jgXkhYlnVjlThpYks\htjp|r\86\94\97 ®±¾ÇÌÒÛàéñôôüÿúþÿûÿÿþÿúüýøÿÿøýýõùûíöøêóøäðõáéñÚæî×éðÎäëÉäçÊäçÊãáÌÜÚÅÜÔÉÞÖËçÙÖíßÜõççýïïÿôøÿ÷ûÿùýÿûÿþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúýÿ÷ýÿ÷ýÿüýÿüýþÿýþÿýþÿýþÿÿþÿÿþÿÿüôÿýõÿÿìÿÿìÿùÝÿôØÿçÈå°\91¯rV\96Y=\9eV@ XB¡RA\9fP?\92E5\91D4\88E4\86C2|E1yB.pA-o@,t?9s>8t?9u@:t?9q<6p>7sA:q?8q?8o>7o>7n=6n=6m>6l=5m;2m;2m=3n>4j@4i?3eA3d@2dG7]@0]F4_H6O=)G5!G6"D3\1fIK3HJ2DG,BE*LM.Z[<abC_`AWZ;cfGrx\rx\UbH7D*.<%6D-5=05=05=04</4</4</3;.3;.4</4</3;.3;.2:-2:-2:-19,18007/07/07//6./6./6./6.,3+,3+,3++2*+2**1)*1))0((2*'1)'1)'1)'1((2))3*)3*+5,+5,,6+.8-2<17A6<F;?I>9F48E35B02?-1?(4B+:H1?M6JXAQ_HWdRUbPJVH;G90<2*6,(1,(1,'0+gdUgdUgdUgdUheVheVheVheVifWifWifWifWifWifWifWifWjdTkeUkdZkdZle]le]jgXkhYkmUikSgqYku]hukq~t\88\97\9a¤³¶ÀÉÎÔÝâêòõõýÿúþÿûÿÿþÿúüýøÿÿõüüòùüëöùèò÷áîóÝçï×ãëÓáçÅÜâÀÝÝÃÞÞÄàÚÌÝ×ÉßÖÑãÚÕîâäóçéùîòþó÷ÿ÷øÿøùÿûûÿüüþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúöÿüöÿüûÿþûÿþÿûÿÿûÿÿ÷ÿÿ÷ÿÿùÿÿùÿÿúøÿüúÿÿôÿÿôöÿîòþêÿôÛÿüãÿï×Ùë§\85l\7f]D\81U<\8b_F\92`I\88V?|H2s?)q>)s@+tD.vF0o?5l<2n>4sC9rB8n>4pA7wH>k?4k?4j>3j>3i?3h>2h>2h>2cB3cB3cC4cC4`E4`E4[F3ZE2^M9SB.VK5^S=OI1B<$B>%EA(=G,?I.=F)8A$=B"KP0\_@fiJ^aBmpQuy^gkPHP84<$4=(=F17?27?27?26>16>15=05=05=06>16>16>16>15=05=05=05=03:23:23:2291291180180180/6..5-.5-,3++2**1)*1))0((/('.''.''.'(/()0)*1**1*/6/-4-+2++2+.5.4;4<C<@G@=K:=K::I66E22A*0?(2A*3B+CR;IXAP_LO^KGUF:H91>4+8.+5-*4,)3+gdUgdUgdUgdUheVheVheVheVifWifWifWifWifWifWifWifWjdTkeUkdZkdZle]le]jgXkhYkmUjlTgqYjt\fsio|r\87\96\99¤³¶¿ÈÍÓÜáéñôóûþùýþúþÿþÿúýþùþþôüüòùüë÷úéò÷áíòÜåíÕàèÐÛá¿ÕÛ¹ÖÖ¼××½ÜÖÈÞØÊäÛÖëâÝøìîüðòÿõùÿøüÿùúÿùúÿûûÿüüþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúöÿüöÿüûÿþûÿþÿûÿÿûÿÿ÷ÿÿ÷ÿÿøþÿ÷ýÿúøÿûùÿÿôÿÿôøÿðõÿíÿýäÿüãÿðØÿðØÿîÕôÒ¹º\8eu}Q8yG0xF/zF0~J4\80M8|I4p@*f6 {KAsC9qA7tD:qA7i9/f7-j;1i=2i=2i=2i=2h>2h>2h>2h>2bA2bA2bB3bB3_D3^C2YD1XC0XG3Q@,^S=qfPc]EOI1KG.NJ1:D)=G,>G*9B%;@ DI)UX9adEjmNuxYsw\Z^C=E-4<$7@+;D/8@37?27?27?26>16>16>16>17?27?27?27?27?27?27?27?26=56=55<45<44;34;34;34;329118007//6.-4,,3++2**1)*1*)0))0))0))0)*1*+2+,3,.5.,3,*1*)0),3,1817>7;B;>L;?M<?N;<K87F/2A*0?(/>';J3AP9GVCHWDBPA9G81>4,9/,6.+5-*4,fcTfcTgdUgdUheVheVifWifWifWifWifWifWifWifWifWifWjdTkeUkdZkdZle]le]jgXkhYjnUimTfrZgs[aqfiyn\81\95\96\9f³´¾ÇÌÑÚßèðóòúýøüýúþÿÿÿûþÿúÿÿôÿÿóüÿìúýêöûäïôÝåîÑàéÌÙܽÒÕ¶ÑѹÓÓ»ÚÓÉßØÎéàáòéêýôùÿ÷üÿûÿÿýÿþÿúýþùüÿöýÿ÷þÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúúÿÿúÿÿýÿþýÿþÿþúÿþúÿý÷ÿý÷ÿûõÿûõÿü÷ÿýøþþüÿÿýûÿþúþý÷óòÿþýÿþøÿþøÿüïÿùìõè×âÕÄȶ ®\9c\86\8fv`qXBfI7fI7mN<pQ?hG4dC0cB/gF3iJ6kL8kL8lM9_C._C._C._C.^C._D/_D/_D/XG3XG3XI4XI4TI3SH2OI1OI1KI0KI0beJ|\7fdntXSY=FO2DM09F*:G+>G*>G*@E%BG'LM.ST5wvXzy[nnTTT:@B,?A+>A.:=*7?27?27?27?26>16>16>15=06>16>16>17?27?27?27?27?28?78?77>67>66=56=56=56=54;34;33:229107//6..5--4,+2++2+*1**1**1**1*+1-,2.+1-+1-*0,+1--3//511733958I6;L9>P:=O9:L45G/1C)0B(3E-8J2=O9?Q;<M;5F4.>1*:-+5,+5,*4+fcTfcTfcTgdUheVifWifWifWifWifWifWifWifWifWifWifWjdTkeUkdZkdZle]le]jgXkhYjnUimTfrZfrZ_odgwl\81\95\96\9f³´ÁÊÏÓÜáéñôòúýøüýûÿÿÿÿûÿÿûÿÿôÿÿôÿÿïþÿîùþçò÷àæïÒàéÌÖÙºÏÒ³ÌÌ´Í͵ÕÎÄÞ×Íëâãöíîÿ÷üÿùþÿýÿÿýÿÿÿûýþùýÿ÷ýÿ÷þÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúúÿÿúÿÿýÿþýÿþÿþúÿþúÿý÷ÿý÷ÿûõÿûõÿü÷ÿü÷ýýûþþüûÿþûÿþýùøÿüûÿúôúõïÿøëÿþñÿýìÿýìÿøâÿñÛúáËéкո¦º\9d\8b¡\82p\90q_{ZG}\ItS@dC0Y:&Z;']>*[<(`D/`D/aE0aE0`E0aF1aF1aF1\K7\K7[L7[L7WL6VK5RL4QK3MK2RP7ilQ}\80elrVSY=DM0>G*9F*9F*?H+BK.DI)BG'GH)LM.xwYsrTddJSS9IK5HJ4CF3:=*8@38@38@37?27?26>16>16>16>16>16>16>17?27?27?27?29@89@89@88?78?77>67>67>67>66=56=55<44;33:2291180-4--4-+2+*1*)0))0))/+)/+)/+*0,,2.-3/.40.40-3/-3/0A.5F3;M7=O9=O79K37I/5G-2D,5G/9K5;M7:K94E3.>1*:-+5,*4+)3*ebSfcTfcTgdUheVifWifWjgXifWifWifWifWifWifWifWifWjdTkeUkdZkdZle]le]jgXkhYimTimTfrZgs[_qehzn\83\97\98¤¸¹ÇÐ×Úãêíõøõýÿùýþûÿÿÿÿúþÿùÿÿóÿÿóýÿíüÿì÷ýãîôÚâëÎÛäÇÕÕ¹ÌÌ°ÇıÇıÏÈÂÚÓÍéàåöíòþ÷ÿÿùÿÿþÿÿþÿûÿùúÿøøÿóùÿôþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿûÿÿûÿýþÿýþÿ÷ÿ÷÷ÿ÷óÿòóÿòóÿñôÿòøÿ÷øÿ÷þüÿÿýÿÿúÿÿúÿùôÿýøÿÿýÿÿýÿýþÿûüÿöüòóùïþÿóþÿóÿÿïÿÿïÿýîÿ÷èüîáøêÝöåËùèÎÝ̲¡\90vq`FbQ7^N4YI/ZJ0ZJ0ZL1ZL1[M2[M2YN2ZO3UQ8UQ8UQ8UQ8QQ7OO5LO4KN3JP4NT8]hJdoQQ^@BO1>K-9F(=J.<I-BK.FO2GL,EJ*ON0YX:qmPjfI`\CZV=VT?TR=LI8EB1:B5:B5:B59A49A48@38@38@36>16>17?27?28@38@38@39A49@89@89@89@88?78?78?77>68?78?78?77>67>66=56=56=538227105/.3-,1-+0,+0,+0,+0,,1--10-10.21-10,0/,0/':$-@*5I0:N5;O4:N39M18L04H-5I.8K5:M79L95H5.@0*<,+5*+5**4)ebSebSfcTgdUheVifWjgXjgXifWifWifWifWifWifWifWifWjdTkeUkdZkdZle]le]jgXkhYgkRhlSfrZht\`rfj|p\87\9b\9c¨¼½Î×Þßèïòúýøÿÿûÿÿûÿÿþÿùýþøùùíùùíøûè÷úçñ÷ÝéïÕÜåÈÔÝÀÒÒ¶Éɭ¿¬Â¿¬ÊýÕÎÈæÝâóêïþ÷ÿÿùÿÿýÿÿþÿûÿùúÿøøÿóùÿôþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúþÿúÿûÿÿûÿýþÿýþÿ÷ÿ÷÷ÿ÷óÿòóÿòõÿóõÿóùÿøùÿøÿýÿÿýÿÿúÿÿúÿÿûÿÿûÿþüÿþüÿüýÿùúþùÿõüÿø÷ûìøüíüûéüûéÿøéÿúëÿüïÿüïÿïÕÿúàìÛÁ\9f\8et`O5RA'XH.XH.[K1\L2[M2\N3\N3]O4[P4[P4SO6SO6SO6SO6OO5MM3JM2IL1IO3KQ5Q\>OZ<<I+9F(>K-=J,AN2AN2HQ4IR5IN.IN.ZY;jiKgcFa]@]Y@_[B][FXVAPM<LI8<D7;C6;C6;C6:B5:B5:B5:B57?27?28@38@39A49A4:B5:B5:A99@89@89@88?78?78?77>69@89@89@89@89@89@89@88?78=77<65:4271051/40.3/-2..3/-2.-10,0/,0/,0/,0/,0/#6 )<&1E,8L3:N3:N39M19M16J/7K09L6;N8:M:6I60B2+=-,6+,6++5*YgMYgM[hN]jP`jRblTfkUfkUfgUefTheTgdSjdVjdVldWmeXjgVjgVjfZjfZjf]ie\geVgeVdiSfkUco[bnZ`qks\84~\94§®µÈÏÓÛÞáéìïø÷ôýü÷þ÷øÿøüÿòûÿñõøå÷úçø÷ãñðÜïìÙìéÖáÞËÔѾÚͼ̿®¿³§¾²¦Â·µÌÁ¿ÛÒ×êáæøóúü÷þýüÿþýÿýþÿûüÿùýüúþýýÿþýÿþýÿþýÿþþþüþþüþþüþþüÿþúþýùÿüùÿüùÿýøÿýøÿþùÿÿúÿýúÿüùþýûÿþüÿÿÿÿÿÿýýýûûûÿýüþúùÿûõÿþøÿýôÿúñÿøíÿúïþüÿþüÿþþüþþüýÿúýÿúúþýúþýýþÿýþÿÿýÿÿýÿÿýñÿýñÿÿäÿÿäõõÛûûáâáÅ\8b\8anSN0TO1RL,QK+TN,TN,SN.SN.QP2QP2PP4PP4ON2ON2OO3PP4LP7JN5EN3DM2GQ6DN3AJ+=F'?F$CJ(FL&FL&QU2PT1KO.HL+TT8bbFbbHZZ@YY?ZZ@[[A[[AZ[<WX9UT5SR3ID.HC-DB-B@+@>/@>/=?2>@3:=2:=28@38@37B47B47D37D37B47B46A36A36A36A37B47B47B47B47B47B48C59D6;F8;F87C97C96C25B16?.4=,2:-08+-4-.5.,8,,8,*=\1f.A#0J\e4N\1f6Y!7Z"8W.7V-:R:9Q9<O<=P=9K1@R8DY:EZ;BZ:=U51I/&>$+5**4))3(YgMYgM[hN]jP`jRblTfkUglVghVfgUifUheTkeWkeWmeXmeXjgVjgVjfZjfZjf]ie\geVgeVfkUglVdp\fr^gxry\8a\84\99¬³¶ÉÐÑÙÜàèëïø÷õþýøÿøøÿøûÿñøüîöùæöùæôóßìë×éæÓåâÏÚ×ÄÎ˸ʽ¬Á´£¹­¡»¯£Á¶´ÌÁ¿ÙÐÕçÞãùôûü÷þýüÿþýÿüýÿûüÿùýüúþýýÿþýÿþýÿþýÿþþþüþþüþþüþþüÿþúþýùÿüùÿüùÿýøÿýøÿþùÿþùÿýúÿüùýüúþýûÿÿÿÿÿÿýýýûûûÿþýÿþýÿý÷ÿøò÷íäïåÜõçÜþðåþüÿþüÿþþüþþüýÿúýÿúúþýúþýýþÿýþÿÿýÿÿýÿÿþòÿýñÿÿäÿþãõõÛûûááàÄ\89\88lQL.RM/RL,QK+TN,TN,TO/TO/QP2QP2PP4OO3ON2ON2OO3OO3LP7JN5FO4EN3FP5DN3AJ+>G(AH&EL*IO)JP*NR/OS0VZ9]a@aaE[[?VV<TT:UU;VV<WW=WW=WX9VW8VU6UT5PK5NI3IG2FD/CA2A?0>@3>@3:=2:=28@38@37B47B47D37D37B47B46A36A36A36A37B47B47B47B47B47B48C5:E7;F8<G9;G=;G=;H7:G6;D39B18@37?26=66=61=11=11D&8K-?Y*F`1Mp8Lo7Ih?Dc:@X@;S;:M:9L9<N4DV<I^?LaBJbBE]=9Q7-E+*4)(2''1&YgMYgM[hN]jPakSblTglVglVijXhiWjiWihVlfXlfXmgYmgYjgVjgVjfZjfZie\ie\hfWgeVfkUejTbnZgs_l}w~\8f\89\99¬³²ÅÌÍÔÚÞåëï÷ùöþÿøÿø÷þ÷÷ûíôøêñôáîñÞéèÔàßËÜÙÆ×ÔÁÏÊ·ÆÁ®À³¢½°\9f¼°¤Ã·«ËÀ¾ÖËÉáØÝìãèúõüýøÿýüÿþýÿüýÿûüþúþýúþýýÿþýÿþýÿþýÿþþþüþþüþþüþþüþýùþýùÿüùÿüùÿýøÿýøÿýøÿýøÿýúÿüùýüúýüúþþþÿÿÿþþþüüüÿþýÿþýÿþøúóíêà×àÖÍëÝÒùëàþüÿþüÿþþüþþüýÿúýÿúúþýúþýýþÿýþÿÿýÿÿýÿÿþòÿýñÿþáÿýà÷÷ÝûûáàßÃ\87\86jOJ,QL.RL,RL,TN.TN.TO/TO/QP2QP2OO3OO3NM1ON2NN2OO3KO6KO6GP5FO4FP5DN3CL-BK,FM+IP.OU/RX2OZ/U`5grJv\81YovTW^<KP2LQ3NP8NP8QQ9QQ9TR9US:VU9WV:VQ;TO9OM8KI4GE6DB3?A4>@3;>3;>38@38@37B47B46C26C28C57B47B46A36A37B47B48C58C57B47B48C58C5:E7;F8<G9=I?=I?=J9=J9?H7>G6<D7;C6=D=;B;5A54@46I+BU7Mg8WqB]\80HZ}EUtKKjABZB8P85H52E2<N4EW=MbCQfGPhHLdD?W=2J0/9.,6+*4)XfLYgM\iO]jPakScmUhmWhmWklZjkYkjXkjXmgYnhZnhZnhZkhWkhWjfZieYie\ie\hfWhfWdiSbgQ_kWfr^l}w}\8e\88\93¦­§ºÁÈÏÕÙàæìôöôüþöýöôûôòöèíñãçê×áäÑÛÚÆÒѽÍÊ·ÈŲ½ª¼·¤Ä·¦Çº©ÌÀ´ÖʾÞÓÑéÞÜòéîúñöü÷þþùÿýüÿþýÿüýÿûüþúþýûÿþýÿþýÿþýÿþýÿþþþüþþüþþüþþüþýùþýùÿüùÿüùÿýøÿü÷ÿü÷þûöÿýúÿûøüûùüûùýýýþþþþþþýýýÿûúÿþýÿþøüõïíãÚãÙÐðâ×ÿñæþüÿþüÿþþüþþüýÿúýÿúúþýúþýüýÿýþÿÿýÿÿýÿÿþòÿüðÿýàÿüßùùßþþäáàÄ\87\86jPK-RM/SM-SM-TN.UO/UP0UP0RQ3QP2NN2MM1NM1NM1MM1NN2KO6KO6HQ6HQ6HR7FP5FO0HQ2LS1OV4V\6]c=grGt\7fT\87\92j\90\9bs\86\8dkmtRZ_ARW9LN6KM5LL4LL4OM4QO6TS7VU9XS=VQ;RP;NL7JH9FD5AC6@B5;>3;>38@38@37B47B46C26C28C58C57B47B47B47B48C58C58C58C58C58C59D6:E7;F8<G9<H><H><I8<I8>G6=F5<D7<D7=D=:A:5A54@47J,DW9Pj;[uFY|DWzBRqHGf=<T<1I1.A.,?,6H.@R8J_@QfGQiIMeE?W=2J00:/.8-+5*XfLYgM[iO]kQblTdnVfnWgoXkn[jmZlkYkjXliZliZnhZoi[liXkhWjfZieYhd[hd[hfWigXejTbgQ_kWfr^k|vz\8b\85\8c\9f¦\9e±¸ÂËÒÔÝäçñóðúüóùõðöòíðåçêßàãÒØÛÊÑмËʶÉİþª½¸¤¹´ Ë¾®ÓƶÜÏÆæÙÐíâàöëéýôùÿùþýøÿÿúÿþýÿþýÿüýÿûüþúÿûûÿüýÿþýÿþýÿþýÿþþþüþþüþþüþþüýüøþýùÿýúÿýúÿýøÿü÷þûöýúõÿüùþú÷ûúøûúøüüüþþþþþþþþþÿûúÿüûÿüöÿøò÷íäðæÝøêßÿôéþüÿþüÿþÿúþÿúýÿùýÿùúþýúþýüýÿüýÿÿýþÿþÿÿÿðÿýîÿüßþúÝüûæÿÿêäâÉ\8a\88oRM0TO2UN1UN1TN.UO/UP0VQ1RQ3QP2NO0LM.ML0ML0MM1MM1KO6KO6IR7IR7KU:HR7JS4NW8RY7T[9\b<flF}\94^\90§q\9c²\81\97­|\91¢x\85\96lq|ZYdBKO6JN5KJ5JI4NI5PK7SN:UP<UP:TO9QO:OM8KI:HF7CE8BD7<?4<?49A49A46A36A35B15B19D68C57B47B47B47B48C59D68C58C58C59D69D6;F8<G9=H:;G=;G=<I8<I8>G6=F5<D7;C6:A:8?84@45A57J,BU7Lf7Uo@Ru=Ru=NmDCb97O7,D,*=*)<)1C);M3G\=OdEPhHLdD>V<2J0+5*(2'%/$
\ No newline at end of file
diff --git a/testimages/testimgint1_2.ppm b/testimages/testimgint1_2.ppm
deleted file mode 100644 (file)
index 391cd8a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-P6
-114 75
-255
-0/-10.51.62/83/:3-:3-:3-91.80-80-91.80-80-80-80-6.+5-*5-*4,)4,)4,)4,)4,)/,%0-&2/(30)63,74-96/:70A;/E?3IA4JB5MD5NB2NB2PD4T>1gA4\82D5\9cD6²D7¿C7ÈE=ÊG?ìBKëDKíCFó?Bø9@ó:?å??Ò>:µ@.´?-´?-°?-«@,¤A,\9dA*\97A*\92?/\91>.\91>,\92<+\94?+\94=*\95>+\96?,\94?8\9b?2®C3¾C3º@1¦F8yD6J7(:6584371150-72/61.61-50,.0-//-0/-2.-5,-3)*:+.G8;sCC\90LK¥Z_¥o\87\8b~ª{\86¼gj\9dSGoPH`PK_jjr\8f\94\90\9e¤\98\96\98\8arsaWVDUQbUQb/.,0/-40-51.61-61-81+81+80.7/-7/-80.80.80.80.80.5-+5-+4,*3+)6.,6.,6.,6.,2/(30)41*52+52+74-85.96/?9-B<0F>3G?2H?0J>0K?/MA1LC2[D4rC1\88A/\97:)§;.´B7¼G=ÝAEãCEìDDö?Cû:?ô;@áB?Ê?8³@-²?,¯>,®?,©@-£@+\9b@+\96@)\91>.\91>.\90=+\8f<*\90=+\92<+\93=,\94?+\94@6 @4¶B5ÂB5ÀF;£I>rD7G9,=77<6694183062/51.52-21,-2./1.00.10.5//5,-6,-?35a:3~E<\90PN\93fz\81x£t~¹Z_\97NBrNCeOFaPN\osv\80\85\7f\81\84yjl^VWI\T_\T_,,,.-+0/-3/,3/,4/+4/+6/)3.+2-*2-*3.+4/,4/,4/,4/,3.+2-*1,)1,)4/,4/,4/,4/,41,41,41,52-52-63.74/961<5+?8.B:/B:/D:.F:.H<.K?1GH6RG5aD2u@.\82;)\93<+£C3°L=ÏEBÖEBäB@ò;=ú9<ð<=×B;º@1­@,­@,¬>-©>,¥>-\9e?+\97?+\93>)\90?.\8f>-\8e=,\8e=,\8e=,\8d<+\8e=,\90?.\94B4¥A2½A7ÇA8ºC;\9bMCcC8<:.A75>63<4183/43/23.23.02-,2.-2./1.00.32040/2,,5//P5*c<-qE<\80aq|v¦ox»\_¤OE\82PAlK?cFBYEHQRXVU\TQWKTWL`XV`XV+++,,,/.,0/-1-*1-*2-)2-)2,,1++1++2,,0**0**0**0**2,,1++1++0**2,,2,,2,,2,,30+30+30+30+41,52-74/850:3+<5->5.>5,B8.E8/H<0K?3DE5LE5YB2h>.v;+\859)\94>/¡E6¼F<ÇG>ÜD?î@?ò::ç>;ÊD8ª?+§@-¦?,¦?.¥>-¢>.\9a?-\94?+\8f>)\8d>-\8c=,\8c=.\8b<-\8a=-\89;.\89=/\8b?1\93E1¨B4ÁB;ÃB=¸OK\9b_WeTJ>H=@72=6094.63.43.13./4..3--3/-3/.3/02/00.2200/-0/-=.)K5*]B;~k~\8a\87¼z\81Ïkn½OL\93J=iF<aDBZ>BMBLMLWQNXOR\QaYLaYL,-/,-/---.-+/.,0,)/+(/+(/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+1-,1-,1-,1-,1-,0,)2.+3/,3/,2.+2.+40-62/80-;4.=4/>5.?4.B5-E80H;2G>5M?6U=3^8/n8.~8,\8f;0\9a>1§A3´D8ÉF<ÞC>çB@ÞE?½C4¡B, A- ?.\9f>-\9f>.\9a=,\96=-\90=+\8c>*\8b<+\89<,\89<,\87;-\86</\85=1\87?3\88B6\93F4ªH=¼E?»KG²e]\99ylstfO\RMI>B>5:7.33+34.03,/1,,1+-2.-2./1./1.02/11/11/11/8,6?42SHD\82{\8d\92\94Ç\89\8fÙrxÂbg§TQpJJdLTa]klq\82|z\8a\7fo}p\j]a[Cc]E-.0-.0-.0....-+-,*.*'.*',*++)*+)*+)*,*+,*+,*+,*+,*+-+,-+,-+,.,-.,-/-./-.0,+1-,2.-1-,0,+0,+2.-40/91/;30=31=4/>3/A4.C60E82H94L:6O:5U61e60v6-\8990\94<0\9c@5 @2®B5ÃE9ÑF?ÍH?³E8\9aB.\9aB.\9a?-\99>,\9a>/\96=-\93=.\8c=,\8a=-\89<*\87;+\84;,\83;-\81;/\81=2\83@7\87D<\94J=¥H@³KH°]U¦\81o\93\95\7f|\8bxao`QSEGI;=?224)01)./)./*0/-//-//-//-//-00.00.00.00.7*>713SUJ\82\86\89\8f\94²\89\91À\80\8f¸\85\99´\87\96\9d|\8e\90w\8c\85\82\9a\8c\92«\98\8e¥\91\81\94\80`q_ZV9`\?+/2+/2-.0.......-+-,*-,*-+,,*++)**(),*+,*+,*+,*+,*++)*+)*+)*,*+-+,.,-/-./+*0,+0,+.*)/+*/+*1-,3/.:12;31=32<20=20?1.@2/B5/A62B94D95I62W61i7.\7f;0\8c>1\96?6\93?4\9aB4¨D5µE9¸F<¨B6\97?1\95@,\94>-\94=,\95<.\93;-\8f<.\89<,\87;+\86:*\86:*\83:+\7f9-\80<1\7f?6\83D=\87HA\8fI?\9dJDªWS¨tg\9a\98\7f\8a§\88\80\9a\81s~n\hRLUB>E58;022*0-(0**2,,1++1++0,+0,+1-,1-,/.,/.,9(:41*R[>\7f\8bs\8f\9a\94\8c\9b \8e¨\9f¡Å«\9fÀ«\9fÁ©\8f³\97\8b°\8f\91³\92\8a§\88~\95yZnUTS7VU9,03,03./1./1000////.,/.,/-..,-,*++)*+)*+)*+)*+)*+)*+)**())'(+)*,*+.,-/-./+*/+*.*),('0,+0,+2.-40/;23<34<21;10<1/=/.>0-?1.:70983:94?82F3,[5*q9,\7f<,\9195\8d?3\8eB2\94A1\9e>0¨A8 ?6\96>4\91@-\90=+\91;*\92<-\91;.\8d;-\88:-\84;,\859)\829(\819*~8,\80=4\80A8\84H@\89NH\8dHA\9ePL«d`§\88v\90¥\84\80®\89}\9e\81\7f\86thw`YgPHSB=C566.2-)1()4*+2)*2)*2)*0**1++0,+0,+0,+9(241 IV*w\89Y\8d\9c{\8d \84\8f°\83\9eÌ\8b¡Î§\9dÊ¡\87´\89\86±\84\88¯\83\84¤}s\8clSgKIL/FI,/0*01+12,21,43.63.52-4/+7/,6.,2-*0,+.,---/,+0)*./(//(//)-.*+/+*.-)./*./)--/.../.,2.+4,)7.):/)<2)=4+>5.=4-<3.=2.;0.=/.?10F/':6+.:,45-C++Q'(Y2+]A3vB,\86A1\94=3\959.\8f<.\8eA/\8fB0\90?,\9b83\90<2\82@0~A/\84A1\89=0\88:.\86:-x<1p;-s@/u;-\80>2\8bG<\87MA\81QC\9aKN\8dm`|\8cq~¡\81\8c¦\89\93¥\8d\84¢\86k\9dzb\8dbY{V[mSRUDG>7<..6',4%,&,,)*,-(,2'/4'03'10(3/)31-..-(HK8x\81b\89\9an\8a¢p\88¦p\92µ}\9d»\89\93³\81\86«x\83©z\83¦~}\98yn\81kTcPEI:=A212,23-34.43.65096185083/91.80-4/,3--2./0.1..0+*/2(00*.0*./+,1-,/.*0/*10+0000./0/-3.+81+:1*>4+@6-@7.A8/?6/=4-=2.;0.;0.=20D3,P,.X&/N&.?0-<2)Q0)i-,i;,{<3\89;7\8b:6\88>5\85A6\86B5\8aB6\8c?/\88?.\87>-\88;+\8b9+\87:*\7f<)x>(~;2v:/v>/y>0\82B8\8aG>\89JA\88OD\9aNN\94l`\83\89o| |\82ª\87\8c©\8b\8e \86\85\95{c\98j]\8dc\\86bTuXE^H6F9*6,%/'5%(4%*2'+/*.,,.)-0&.0%/12,..+&DF8s~`~\90j\7f\9bk}\9fm\80¦s\87©v\81¦s~¦t~¥x}¢yx\95vj\81gRdNBB699-560560671872983<94=:5=84>63<419418307327323121/05,/5,/3--3--3/,40-32-32-43143162/83/<5/?6-C90F90E;2E;2C90A60?40>3/>31?42@72R/5\(4Q,3<714;+F6)Z/)b70s97\819:\848:~:7}A9\81B;\85@;~E1\82A/\88<.\8b9-\897+\83:+y?+sA*\852*\94G?|90\7fE9}G;\7fK>\83MC\8aTJnoP|wZ\87\81g\8c\97w\81£~~­\83\82v\9ey\84\8dn\7f\8cn{\8bnr\85iesZVYHH@5=/&9))3)',+').('-)*,+.*+1(+3)'?;2QTAivZp\86`q\90dr\98gs\9biu kt\9elz¤ty¢vw\9but\92pg\80bPdID=5<5-782782893:94;:5?<7@=8@;7B:7A96>95=84=84=85;63941:0/91/91/72.61-52-63.74/540952<94A:4A8/D:0H<0J>2J=4J=4E;2B8/A81@72@72A83>95?<7A>7E<5G90J8,H;+F>+g2*z93\8f?>\94C@\91HB\83?6\8292\8b<5\81A5\83?4\82<2\7f=1y?1y?1}=1\83:1£31å\7f{¦SM\81K?nO=jT?sXC\83`Mc\80R\93x]¿daÎadÉ~x®\96~\96 ~\88\9cw\8f\8fs\89\94t~\98st\96qj\8ci`xXS]DDC.C4-;2+11'/0(41*>,,G',N#,OC3`[EgkPk{Wh\83Xi\8bYo\95bq\99dp\9cko\99kw vu\9bvt\96up\8dne\80_MfFLC<D;49:49:4:;5>=8=<7A>9B?:D?;E@<E@:D?9E>8D=7C<6B;5B;3A81A83@72?82<71;6085.74/96196/=82A:0C;0I=1L@2N@3N@7K>5I<3E;2B90@91@91A:4D;4I81[<7h=7p>7s<5z?7\84H>\8fF7\9cE;\9f>5\9e=4¢I;£M>£G8¨C7¡AE\939;\87<9uA6lE6wC8\8902¬6BßOOÊEFÅb]\82M?h\BbeFmfI\81iO·dVäU[ú'Gÿ!Iÿ4TñP`çemâkoÈuqÃztº\80\84\80uªum£ca\9bST\93HO\7f>Bi78Q/-J3-G2-J2.S74]R2gbBrxTu\86\n\88[o\8f^u\95cw\98cs\96nu\97tz\99z\80\9a\81z\94{m\86id}_OiFUMBRJ?782893<=7@?:A@;C@;DA<E@<FA;FA;FA;G@8JA:I@7G=4E;1D:0E;2D;2D;4?80<71:5/94.96/;7.?8.C;0F<0J>0M@0M@/O>4L>3H;2E;1D;2B;1@<3A=4Q81\92?GÕMaÖR]\9b>7\94H:»KGÛ?J¢E3§@1«;/®>0ªC0\9f:&ª=)³;+³6>¼?GºGL£KG\7f;0\844-½AIâ?TÚ85Î65ÉSO\95VGqaGppN\82kL¥s\ÿJWý8Jÿ5Nÿ/Jÿ5Oý1Jÿ.Kÿ/Nÿ5Xÿ9ZüA`øEc÷EgöBgüClÿGsÿXzñTsÛ\qªNYf.-Q;0<?,9K5]P0idD|\81a}\8ckx\8dlw\8diy\8dh\80\91m\8d\9f\85\98§\92¡­\9f£¯¥\94¢\95x\89vby]OjIXWEZYG671782:;5?>9A@;DA<EB=GB>GD=HC=HD;KD:LC:KA7J>2I=1F<0E;/E;1D;2A:0@91<71;60;7.<8-@:.D</G>/L?/NA0O?/N=3M<2H:/D:0C;0@<1@>2B?6v94ÎT_í;QÐ*4¤4&\92<#´>0×47¥?1ª</¶@6»G:¬>/¥:(¯9+ÁA6ÊA9Þ>>é:?ä>@ÑD=ÙSJÜ>=é08Ú6*Ñ2,»72³aS\80ZC\82^D®bRÜg`÷<Gâ<@×HDßQOëJPò9Gú0Fÿ4Lþ9Uþ9Wÿ=_ÿAfþ?hþ@lú@o÷@pÿ?hÿFkùJkèZp¾Zdm63RA1FK4dUB\84{j\9a\9b\8d\95\9d\92\8f\9a\92\9a¤\9b\97\9d\93­¯¤Â¶ËÈÃÍÉÈÈÃDZ³²\88\92\87exbSlNU]EW_G560560671:94=<7A>9EB=HC?HE>ID>JF=MF<ME:ND8OC5OA4LC4JA2G=1D<1C:1A:2?82<71<8-<8-A;/D</K?1M@/P@0O@-O=1L</H:/C9/B:/?;0?=1@@4 BC¼HK¹//¸/'©9#\9fB#\9bB"\9c>"\9f8/¥6/´=9¶A:«?3§;/ºD:Ã?:Ä>%ä2(ÿ &ÿ"+÷))è3*å3)ë.(Ö7$Ô6*Å:3ÅeY\9eaN¡YJÜa\ñCLî=CÔ?;¿?4Î@<òAIÿ4Gü5Hõ<Jý;Uþ7Tÿ7Zÿ9cÿ=mÿ?rÿ@tùAuúGeÿKjþLlÿa|ïfzÏjr\98TS\7fPH\90~z´¨¨½»¾¸¼Å¼ÂÎÆÈÕÔÎÜãØæìáßïàãëÛåãÕâÇÂÈ\99\9e\98n\7fl\uW_lN^kM201542875984;:5>>6BB8EE9HH@HI;KJ5MM5KJ8JIERP]KI_OF7I?3J@6D;2C:5?74@86;55A62?75>:;===@?;G@6M@/O?(BA/J91P37H599>83D48@)QK3½L>£5& 9& =(¢<&®?+³:)·5'£9)¢;*§B0©B/«>*´?.ÂD5¼8+Í6+Í;.Ó=/â7/ò/-ö/,æ6)Ô=(Ü7#Ñ9$Ã7&ÊD9×JCòRRøAFþ9BàDGÎ@>²<0¨>.¿N>ÖIBí?Aÿ<FøDMýEQû@SÿA]ÿEiø=høBrýK{ÿKwïQrèXsÿYzÿGsõKpÀhvzmeº \91ÝÕÊâãåæßïôÚõÿÝùÿèøùó÷ûøóøóðóêíëâçÙÓÕ·¶´\8c\91\8a}\85z\84\8b{~\85u/.,10.43/650991<<4@@6CC9IF=LI:NL7OM8NL@`_ett\8cuu\99jbwVOaKCRD=EB<><73=90=9.96/<90>;2?;0F>1K?/P?/P=,8@(>=+@91<73A96Q20t).¥9F¦6(¤9'¢;( :$§<(µ@.½>/Ã;/²>1«:,¬;+¯;,³;+ÄE6Ä<0Ã6,×4+Ö8-Û9.æ3,ô.+ô/)á4&Ï9!Ý2 Û9*Ñ;-Ì?5Ç:3ØD@çIHå??ÕA=Å?6²:,¬;+µ=/×JCä@AüGPñ@FûEQýDVü?[ÿCgÿFoÿLyÿK{ÿExÿMvÿWxúOoùJkØJbÓ\8b\8efVGÁ\97\8bøáÙû÷öøõÿþìÿÿîÿÿõÿÿýþÿýùÿù÷ÿõöýòöîåèÍÉƯ°ª§­¡ª²¥¤¬\9f32.10,21,43.77/::2>>4AA7LD9PI9SL:SL<TPOsq\86\8d\90»\93\98Ò\92\8dÍ\80}¶ol\9b^Z{QNaB@E<9497+574891?<+D>(I>(K@,L@2I?6O<6F859830;35;1O4-\8a>@¨6>ª<+«@.§>+«>*¬9&º;,Ä:-Î;1Ä>5½8/½9-½7,Æ<1Ê<2Æ2(Ð7/â1)ä3+é4+ð/*ø.*ð/(Þ4#Í7\1fÛ1 Ù3%Ö8-Ö?6ÛLDÌC;ÐKBÆA8¿;,¼:*µ:*º?0½=2Ë@;ÝDFìKQí@DöFPÿJYüD\úAaÿHnÿOzÿKxÿP|ÿNwÿTuûNjîLcÿz\88ÿ\9a\9e\96KH¿~xüÑËÿööþüÿÿùÿÿùÿÿûÿÿüùÿûøÿúùÿöøÿó÷÷ëíàØÕÔÑÈÕÕÉËÕ;ÈÀ=:385.41*52+74-:70>;2A>5LB6TH:WK;TJ@XQXxw\97\96\9cÖ¢«ö£¨ù\9c\9fì\97\9aÝ\8e\8fÅ\82\81«hh\84UReKIWEDV?<E?:4C>+E@*BC1?D=;DCC@UJM^NW`LXXLNCaJ:\89R>\8e@,ª?-­@,°A.±<*¶8)Â8+Î7.Ö92Ð83Ï72Ñ:3Ï60×=5Ò5,Ù;2Ù80ë0'ï0(ô/)÷,(÷-)í2)Ý6&Ï9!Ñ9$Ñ6$Ó7*Ñ7-ßJCç\UÈH=¸>3·=&¸;%»9)Â>1ÈB9ÏEBÓIGÓIIèDEïIMûQ\úM`öE_ûHhÿOvÿPyëZwö[zýVrúQhÿ[lóRbòO`óL^¾pl︵ÿìéÿüûùþÿúþÿýûüýøõÿú÷ÿûúÿôôøéììÞÞåÚÔïéÝùöçæðïÏÙØB>5?;2;7.95,62)73*<71B=7KA7SG7WJ9[MBWMVpp\94\90\98Ù\9f«ÿ«´ÿ­µÿ¬³û¬¯ò ¢ß\8c\8bÅtq¨`[\91]T\83VOqEAP@?=?@8@E>;DCFOTMk\8di|\9c\82|\98\90i~ Xc°QO«A1§:#©:'­<*±<*·9*½5'Ë7-Ø:1Ý:3Ü:7Þ;6ß<7â=7å@:ß;2ïKBóQFî6,ï,&ú*(û)(÷0-é4+Ø2$Ó6%Ç<'Ë=)Ð8*Ò6*Ó91ãNHÜNJÀ95·=%º<&¾9(Ä:/Ê@6ÚSMÊICÃF@âHFéOOíQUíMYøRføNhÿPoÿQuíWtü\xÿZtÿSiÿXiÿ[jùH\ÿMcªgaÒ\9b\98ûÙ×ûóñ÷ÿýøÿÿýÿüÿù÷þùõÿ÷ôÿööïáááÓÐèÞÕþ÷çÿÿëïø÷ÖßÞGC7D@4@<1=9.95,84+;60@;5H?6NE6VG4YI<XMQhg\87\87\8fÍ\99¦õª²ú¯·ÿ³ºÿ´¸ÿ­¯ù \9fë\8d\8a×yvÃpc©bZ\93SQxBCW>9@QADdGL\89ai°p¢¼t¢Âf\8dÈLnÓ>TØ>FÂ8-µ=$­8&±8'¹:+Ã;-Î;1Ù?5à=6ß80×2,Ø3-æ?9ã:3Û4,×3)Ø8,Ö9*ñG:ö93÷))û*-ï--â4-Ù2*Ô0'Ì;*Ñ;*Ö=-Ø</Ù<3Ø=9êRQÕ?AÁ<)Â:*Á9)À8*Ä>3ÐMCËMA¿E:ÕHAÜNJßQPßLRñYeý^rúTlúPkÿJuÿVxÿUoÿ_pý_mõbläfjÓbd}WL¡zs´øèè÷ûú÷ÿÿþÿÿÿùýûûóýúõÿú÷øíëâ×ÑåÛÏÿúçÿÿæñöðÞãÝOI;LF8HB6E>4@91>7/>71A:4C@9LD7RE2WH5WLHc_v\83\8a¾\94£è©¬ù­°ý¯²ÿ®±þ©¬ù¢¥ò\99\9cé\8e\90Ý\87\84Ëpq±dh\98\XykPc\89JUµQYÏS[ðBcæF`×@QÍ3?åAHÞ>>ËA7ºE3¼A1ÁB3ËC5ÕE:Ø@5×90Ø4+Û4,Ø7/Ý:1Þ7/Ü5,×3)Ó6'Í4$Ò=)Õ>-òA9þ68ù,1ë12Ø/,Ù1.à44ê72ç92à:.×:+ÝE8éTMÖ@AàINÒ>4Ç7,Å;.Á<-½;-ÁB3ÁC4¼>/ÇD:ÏLDÔPKÔNMë^dÿiuùZnøRjÿRxýVpõkxîeoõaoîhsÓ{y\9fqb_\Iyg[Ë­«öàâüøùùÿÿÿþÿÿùÿûÿ÷ýþøÿÿúÿüöïæÝìåÕÿýäÿÿäôöëëíâSM=QK=MG9JD8F?5B;3A:4B:7AB<JG8QF0VG0UH?a]n\83\8a\93¡Þ¥¢ùª¨ü«¬þ«­ú¦ªô£§î¡¨ì\9f§è\96\9fâ\8d\99Õ\89\93Æ\8d\85ª\98h\82¹RcàCN÷8?é?.ØH.ÂK+¼D)ÞO?Ý97â<@Õ4:ÃA3Ä>2Å9,Æ2&Ï2)Ô3)Ø4+Ü5-Ý?4Ù8.Ü8.×3)Ô4&Î5%Í:&È:$Å:'Ý4-ú68ÿ6<ò;=á98á99å58ý*1ô./ä1*Õ5'Ç3%ïaWÎ@>ÕFHæHEÏ81Æ9/¿=/»>,½@.¹:'¿<*·;/ÀF9ÇLDËKHç`dûitýbrúXmû]tâjsä\89\86âvvÿo~ïaqõ\9c\9e·\9a\8cMaH`]NÀ¤£øÛàÿ÷ûýþÿÿýÿÿ÷ÿúÿ÷øþôþþöÿÿöý÷ëøóàÿýäÿÿâýþðûüîXO@WN?TK<RI:MD5KB3I@1I@1FC:MG7RJ3VK7VMHb_t\81\85µ\92\9bÞ£\9fö\9f ü\9f¥ÿ ¬ÿ\9f¬ò¢§é«¥ï°¡ô\97©ý\92¢Þ¬\9d¼¿kzÝ@K÷5@ë;>ÖEBá:BÓ>@ÊC?Ð>>ëBGì8Aâ9<Õ;9Ë@;ËE<ÅG;µ:+¼8,È5-Ô0.á32ã=-ß3%ç7(Û4!Î6\1fÈ7"Ë8(Ñ5)Ó1,Ï7*Ê7%Ñ6$à2'í0.ì+0ê-4õ*.î.-ã5*Ô7&Å2 ÝN>ÚJBÔ@>àQSÓD@É90È9)Æ;(¾9&»>*·>-´:/¹=1½?1ÃA3ñmaíhaïiföpqÿl|ðckó`fõtoý{{ÿVmö\80\90\86ThCadI½«\9fýåãÿ÷úüúýûÿÿüýÿäÿíæÿê÷ÿóÿÿòÿüïÿøçýõàþøàýýýÿÿÿ\PBZN@XL>WK=SG9QE7PD6QE7JF=OI9VK5WL8VMFb_p}\80«\8c\92Î\97\96Ú\97\99æ\9a\9fñ\9c¥ò\9c§ç\98¡Ü\9a\9bÛ\97\95Þ\8d\91Ϊ\85»Èl\93ÐG[ÝAEâ@>ã?@ä=DÞ:AÑAAÂ>9ÖKHâ?Bç:>Ú78Í<7Ê@6¿9.ÇG:¹;,½8)Ì8.Ü71ê;8Õ4*Ú6,Ý7+Ö=-Á8%¸;'»<-¾8/ì?;Û=2È:&È:$Ð7%Ô0&Ø1+Õ0.Ù0+Ø6+Î5%Í<'Ì;(ãLA×:5ðLMúdcîYUØD:Æ4'Ã7&º9&¶=,²=,¯;.²<.¶>.¿D5Ü\QëgbïihêcgåTcógp÷djüvuøprýG`ñt\84s\92sQj@hoP˾­ÿõíÿý÷ûÿúùÿûõüõØýÞÕòÖãõÝôùåý÷çûòáïãÓôé×üùôÿýø\PB[OAZN@YM?WK=VJ<UI;VJ<OH>SL<XM7YL9VLCa[gut\96\84\86\8b\8d½\8d\8fÊ\8f\92×\91\94Ù\91\97Ó\85\8cÂy\82¹owµ\84p\8bºZ\7fí=dø4LæDBÖLBáEHö9MÜBDÎDAµ91ÐKDÝABà<=ÖA=ËG;Â8+½8)½<)½<)Å<*Ó;.Þ7.è71æ44è02í55à3/Î4,É91Ä22Ö=Bò14à5.É6&Ã;%Ç:&Í7(Õ=0Ô=2ÊB2Á:'Ä=)Ä;(Ì;*Û=4â66â-2Ô72Ü?8ÝE:ÕC6ÉA1º<-±<+¬<.«=0«=.­<,¶B3ÓZOèheëikìfmûo|ðgoýgpÿwzöelþ=Zïfx\7f\93wd\80P|\88bÍÉ®ÿùçÿÿñõÿñéúçÖçÔ´ß´´Ø²ÂܹÕâÆêìÖôíÛëÝÐíÜÒìâÙëáØ[N>ZM=ZM=YL<YL<XK;YL<ZM=TJ@XL<ZM:ZM:XNB[RWc^tso\90y|\9d\80\80²\86\83Æ\88\85Ê\82\80¿xx®oo¥gf \8dVSÅITü8Lÿ4AðA>ÞIBåDJö;PÔDCÅD>°:.ÊJAÌ73Í/,Ï@8¾D5Ã:(Â;(¿:'Á:&Ç8'Ö9*à5+æ4*ø-1ÿ07ÿ,4ÿ.4ú17ô/9þ0Dý'?ö'/é/0Ô6+Í:*Ñ8*á=3æ;3æ;3ÓK;ÉA1Á8(È9+Ï5+ä?9Ý++í57Õ4*Õ7,Ð8-È8-ØPD¾@2±9+¯;.­<.®>0«<+­<.ÆQGãgeðotör}ûs}÷pwÿnyÿpwõ[gÿ9ZìYl\9a¥\87{\9cg\88\99m´¸\95ÚÝÀ×æɿظ®É¨£½\9a\8d¼\86\97Á\8f£Ç\97³Ì¤ÌÕ¸åàÍìÛÓäÌÊ×ƾνµZM=ZM=ZM=ZM=XK;YL<YL<ZM=ZL?[N>]N;\O<ZN@YNJ\RZ`Xgid\82rl\9c}v¹\89\82È\8b\7f¿\88\92\89c\9c£?0½>5ß=8÷?=ø<;ð=@ëAJä?MÅ>8¶=2­<.ÆH<Ö>9Ñ30ÐB8³:)¿8%Ã<)Ã:'Ç:(Î8'×4%ã2(ð91ï3*ô-(ý''ÿ'(ü$)ÿ#2ÿ :ÿ\113ö&3é*1Ú,-Ù//í68ö37÷/2ö.0Ö92ßB;Í0)Ï2-Ù72å@<Ù0+ã73Õ<.Ì4'Ì:-È:0æ]SÀ;2½:0¹6,·2)´4'²7(²:,µ?5ßebóuyùw\81ýz\82ûu~ÿq~ÿitöUeÿ9\æO`\95\9czx\99b\7f\93b\94\9cu\93\9dx}\96nq\95is\97i\7f\9fp\81±u\8c¹~\92¾\83\9b½\8a¤¹\90¾À¨ÚÌÃ׿½Ã´¯¶§¢[K;[K;[K;[K;ZJ:[K;[K;\L<]K=^M=]N;^O<^Q@[OC\OI\QOaSlh]\87wo«\86\9b\84¼¨y¥Áv¡»[\89Ô<9Å?4ÈI8ÚC8ö<?ý9Cë@HÏ@B»<3®:+ª;*ÅC6Ø:7à;9áJCÆD6À9&Ã:(É=,Ë:)Ð4'Ü4)ó>5î3,Ø9&ß3%é.%í,'ì*+ð(2ú"9ÿ\1a9ð-;ô:GþJUî6Bð,:ù-9õ.3ì+,Ü41Þ97ÿ]\Ú86Ü=:Ù<5Ó6-Ð4'¿6$À8(Ã;/Ä;1ãVOÅ5-Õ>7Õ<4á<8Û>7Î;1¾8,º<0×\Wóuxþ\7f\86ùz\81üy\81ÿp\7fûcróPcÿ6YäM\v~W`~Hm\81Py\84Zs\82Yf\83Uj\92^w h\82¥m\83¯r\89·w\8a¸w\90º{\91¯}\9c§\85»²£Ë¶±¬¦ª\9a\94\98[K;[K;[K;[K;ZJ:[K;[K;\L<^K<_L=^M;^O<]N;^N>_O@`PAdN[bUqoi\95}v¢\9e\80¢Ð\86\9fäm\83âJcÿ:MìGMËD>ÑF?êADô?FäDDÅB:¸>1©:)ª9)Â<1çB@ì<>ß=8æZMËC5¿6&È:,Î8*Ô1(ç:3ì51ê-)è45ð37÷29÷4<ì1<î3Fó.Jÿ2Yë<IÿYfÿZjò?Rð7Gã2:Ò72Á8(Ç2+æQKéTPØ@?ØC?Ë6/Î:,É8%°<%´<+³8)Á<3ØGBÒ3/è<8ç4/ó-.ï31á90Ò;0¼6*ÐQJòtuÿ\83\87öw~ýz\82ÿm\7fù`rñNaÿ7YÞLWXg<[wDn\7fRz\85[~\8fez\9aiz¥o\81ªp\86ªm\87­r\89³s\84¶q\87¹t\8b±v\93¥}¹·¢Øǽ²µÄ\99\9c«ZK8ZK8ZK8ZK8ZK8[L9[L9\M:`J<_L=^M;^O<`Q<aP<aP<aO9gMPaSdmm\89}x\96\9e}\8e×\80\86üjmÿGNÿ'Oÿ9Rà@JÓBEÛBDßABÖB>Ã?3²<.©:)°?-ËA7á77å.2Þ52æRHìdVÈ>1É9.Ñ7-Û60å61é0.ô43ÿ&Cÿ#Bÿ\1f\1d;ó"Aò*Nò'Tÿ7jü\høZhîM]à9KÞ9I¼,,¦7&\98E%µ:*ÑSEÅ@9Ä:7ÜNJÇ9/Ç8(Ç9%¥?(¦;'©5(ÈH?ÛGCÝ52ë40ò1,ÿ(-ú,,ë2-Ú:.Å7+ÅB:éljÿ\87\89ü}\84þz\85ÿgyóZlëI^ÿ5VÕEOL_1]wG|\8da\89\94l\8c\9ds\88¨w}¨p~§k\83§i\85¦m\84¬m\7f±j\82¶n\88²s\94«}»¾£×˽ªµÉ\8b\96ª]K7]K7]K7]K7^L8^L8^L8^L8]K?]M>[N=]R@^SA`P@cPBdNCmKIgWbqv\96\81\89¸\99\8c¸»\81\9aåyyùl[ñO\ëCPóDQì<Gã:?×<:Ì?6¾:-¦?,­9*Æ@7Ð83Ù61Ü6*Û:&Ø:!ç?<çMCÉ<+Ï=.å@:ê16ó0>ù4Eü%*ý')ý''ø&'ò$(ñ)3è(7÷:NÿcmýX_ðJLÔ=6¿A2«B-\932\1f\943"§60ÇGDÄ44ÖBBØICË>4Ç4*Ï5-¹=1¶0'Ä4,ØC<áI>Û4,í0.ÿ.3ò12ó/0ò0.ä6-Ê8)¹=1Ýjeþ\8a\8bø\87\8bÿl\81ÿZvÿNkù=^ñ>^¨LOHV5^\80Dv\9a]z e~§k}¦j|¤h|¢e\7f¡d}¦n~ªk}¬d\81²c\88³k\89¯t\94³\89\9d\98\84\8f\91epr]L8]L8]L8]L8^M9^M9^M9^M9_L;aP>\O>YPA[QH^SOeUViY\k]]mi\82y\7f¹\85\8cÜ\97\8aÙ°\82³Ñ}\8aì~qÿaiòKS÷EQñ=Fã6:Ö;7ÇA5¹@/«=,´@3ÆG>¿4-Î70×9.Ù7(Þ9&Þ2.åG<ÕB2Ó;-ê?8î15ù5?ÿDRó/3í)+ð,-í++é-.ä-2òAKýN[åNSèGLá=>Õ:6Ã:0¹?4½D<´94©2,ÌFE×BDëSRÎ=8ÏA7Ò>4ÞA:á=>ç=>è:<íEBÝ<4Ú3+ê3/÷12ô02õ/0ó0.ä6-Ì:+´8,Ýjeÿ\8e\8eû\7f\89þi|ÿVqÿFhú;]éMe\80:8P[=c\82Is\94[v\9caz¢fx¡ew\9fax\9f`| bz£i{¨g{©`~­_\88³k\8a°s\84¡uq\8bhKZU5D?_N<_N<_N<_N<^M;^M;^M;^M;`L3_O8ZN>YRL_X_qjzwm\86vk\89ot\88t}¨{\84Ï\85\8aè\96\8cã\9e\80´©w\82¬m[ç\Wö\\öLOí8?ç7:Û<8ËC7ºC/³=1«6,ÍXNÉPE¼9/Ì9/Û9.á5)â3.â>4ßC4à>/ä3+ð/0ô/6ÿQYÿZ^á46è:;ß33Û33Þ9=åFJÇ,2Ë24ß<?Ü17Ô/3Ô;=éX[õbj÷_kÊIDì^\õ[[×<:Ô?9ÜIAÖ=5×6.ú.:÷)6ô+5þAEÞ2.Û4,ã5.ï4/ö/2ø-0õ/.ç4-Ð<.±5)Õb]ÿ\8d\8dÿx\87ôfvúMiÿ7_ü:_ÇN]`<.ZcFg\84Nu\93]y\9cbx bt\9e_u\9d^w\9e_| by£c|§by¨Z{ªZ\81­b\87«m\87¤t{\94mizj[l\_P=_P=_P=_P=^O<^O<^O<^O<dP5`O;[QH_Zarp\88\80~¥|z«zu­s}¸|\84Â\84\8aÆ\95\95ɦ\9fÁ»¬³Ì¶¡²\98s¯R@²B4ÚLHðJLì<?ä<;Ø?7È</¿<4²7/ÄUJÏeWÂQCÀ8,×6.ä3-ä2.à8/äB3à9)è1)ñ/-ñ01ï56ñRWøW]åBGèEJåDIõY\Ö@BÈ35ê=?ï:Aè.9óBLÿ`iÿeoú^kþYjê]VÞFCÕ23×85ãJDáJAÖ92ß82ü)8ÿ-:ÿ4@û=?à3-Ü5,ä3+ð50÷/2ù-0ö..é4-Ó=/³5)ËUQÿ\89\8bÿk\80ð^qøIfÿ5a÷Dd\92DDMG1V\Bf~Nt\90]z\9bbu\9b^o\98Vp\99Wt\9b\y\9d_x¡]y¤\w£Vy¥V~¨^\82¦f\82\9eku\8fbey]XlP]M=`P@_O?`P@aQA^N>bRBaQAcR@^QH^W^om\85y{¤}\7f¸tx¸nq¸uxÕ\8b\8cϧ§ÁÃÀ±ØÑ¥áØ¡ßÖ\9fÖÌ\99Ä¡\83µyaÄdVæ`]ëKMç:<æ::Þ63É83Á<5½K@¾WHÒdUÂ@3Ñ4-à3-â30â;3Ü8,á5)ê2(ï/*é2.ã4/Ù>BîRVéIQÿemÿckÿ`hÿekòY\ÿ<Dú0<ñ)6í3@ÿXbÿepÿcnüZiâGBÙ53Û11Ú51ÞA:Ö<4Û81ä84î7;ð6;ð69ä20Ü5-ß7,ç2+ô1-÷03ú.1÷//ê5.×=1¹4+ÅIGÿ\87\8bÿc{ôVmùDeÿ8cßMdc8/9C(QQ9]oGt\8b]v\95\q\95Wk\94Pn\97Sr\99Xt\9b\u\9dWv Xt Sr\9eQs\9dUn\90S]yFMd6@V/>T-YL<]P@^QA`SC`SC`SCaTD^QA\QOcYbqm\84xz£v{³mr¶`f°ouÁ\89\85樤áÉÇÌäà³íé îç\9fâÛ¤ÊÂ\9b¤¤\8a\97\85o\9cgYÆiböttèLOî?Dì8;Û<8Ó@9¹;/­<.Ô`QÙWIÌ5*Ø4+å=<íJE×4+Ý2(å0'ä-'ß4,Ü>3Å1-ÞFEíQUíMWïMZøXbÿktçLRô-4ú.9ñ'5ÿCQðFOóTYÿ]díDKà72ê;8î<:â62Û:2×90ß82ë97ß;9ã:7æ95Ü3,Ú8-ß7,é1)÷0-ô23÷/1ö0/ë4.Ý?4Á6/ÎHIüu|ÿ[vÿLlý;`ðBc°LV[F5;C+JE1Qa=j\7fTq\8eVk\8fOh\90Ji\92Lm\96Tp\97Xt\9cVr\9aSl\96Nh\92J`\87DUw;Kf3G^0Hb3Pj;UH8ZM=\O?_RB`SCaTD`SCaTD_Xjvr\8dxw¡wy²jqµ\d­iqº\7f\85Ï\9c\9câµ·çÎÍÝÛÙÌàÜ¿ÜÕ»Îĸ²§¥\86\8e\83~zq\8dri¢ibÛ~yõutø^^ñGHé=9â@;Í=4ÄB5º:-ÎI:Ð>/Ò9+áACû`\Ý@9à91æ5/â4-Ó5*Ä5'º2"Ê=3ÓAAÔ=DàDOñWaú`jäMTì:8ò;?ýBKÿR[Þ3;â8;øDGô38ë83ñ97ï64ä50ß<3Ü;1ã73ë54ä;8ç98è96ß4-Û9.Þ8*ç2)ô/)ð43ó11ô1/ë4.Ý<2Å4/âSWüjuõRmÿ:bÿ7bÜRi\81LF\TARM9NF3FT3]oGj\85Pi\8cJf\8eGg\91Ik\94Rn\95Vr\97Tj\91Nc\8cH_\88FY\7fBUs=Tn?\qFWr?Xs@OC3UI9XL<]QAcWGbVFaUEk_Oto\8fxv\9dtv©jo¯]e­em¶y\81É\8e\95Û\9d¦Ï¬´Ù¶ºÝ¼½Ü¼¹Ö¶­Ê°£Á\99\8a©utykegvgd\85`Z\9dZRÖohÿzuÿigÿPJíD=ÜB:ÕG=¿7+Ç>.Ì=-Ó@.×=?Ô<;Ô;5Ü92æ93à70Ò;0ÇB3¾B(ÅD1Â91Ä57ÜIQèU_êY`ØGLÏ7,Þ:8é<@ç:@ã6:ì8;ù25ÿ,1î73ï31é-+å4.á=4à=4å95í55ì46ï26ï34â0,Ü8,Ý:+ã3&ð1)í53ð31ó1/ë4.Ù6-Í84ùfló[héIeÿ1aÿ7e¼IXW@0RM9[K;M@0>I+O_8c{Ge\88Fb\8aAc\8dEf\8fMi\91Sl\90Pe\8cK`\89G_\87H_\82H^|HaxLezQ\wB]xC@B7JE?TG?^M=aQ:`UCd^^pn|wq\9fws¦hg¡^^¤gf´wuÉ\8a\85ß\98\92ì\9f\9bÖ¡\9dØ¢\9cØ \9bÕ \98Ñ\9e\95Ê\99\8fÃ\86|®lkqe\]oXR\85UK¢XM»ZQÛphï\82\80\7fêdcçSQÉ2+Ä6(À7%Ç:)Ó=/Õ9,Ô<.Ï7)Ú:.á90Û7-Ë:)À>(Ã:2ËB:É@8¾5-Æ=5×QHÛULÊD;Ï:"á7*ð,0û'6ÿ(@ÿ'Bÿ"@ÿ\1f?ÿ\1f:ÿ'<ó.8ç9:Û94Þ;4å95é62ì25é54â70Ù5)Û9*Ü9&ß8%â7#ì3.ð3-ï5)æ6)Û9.ÝABÿdtùJgÿ?bÿ6`ìGgv6678&EC4HB48G2FH Y_;csOd\80Oa\86Cb\8b?h\8eEl\90Pk\91Hg\8cGf\89Ie\84Ie\82Jd\7fHe\81Gd}C\\81<a\86A69.??7KB;VH;[N;\TGechpn\83qk\97b`\91XX\94]`¥mo¼|}Ï\88\86Ù\8e\8aÞ\91\8fÎ\91\8fÐ\91\8bÑ\90\89Ï\91\88É\91\88Á\8e\86µ~v\9d\81]if[Y_]NvVG±ZSÔXZãggàuoô\83}ÿ\82\7fùngÅ7+Á:'¾:%Â9&Ë9*Ø8,Î6(Ñ>.Ë3%×7+Ö6*Í:*Â;'Á7-Ã9/Ç=3Ì?6ÎA8ÏB9ÐC:Ê=4Ò7%ä6/õ.5ý(:û&<ù%<ü":ÿ\1f9ÿ 7ü'9ô5=æ::Û94Þ;4æ95é62ð37ì65ã60Ù5+Ù9)Ú9'Ý8%à7$ß5(á7(ß8(Ú8)Ô7.øW\ÿQhûBdÿ5_÷=b¸DYK)'-8(6=+C<)F@(W`1\87\94is\88_`~J`\85@c\8c@j\8fIl\90Pm\93Jh\8dHh\8bKf\88Le\84Kd\81Gg\83He\81Fe\8aEj\8fJ.4(893B=:LC<QI<UPJdboii\85ba\8dRR\86VW\97ei³uxÉ\80\82Õ\86\87×\8a\89×\88\89É\87\85Î\87\82Ò\88\80Ó\8c\84Ï\8d\85¾\89\83§xs\8a\8dO\hYRSeKh\D§OKÝPYê_fãooäul÷|tørgÃ:*¿='¿='Ä;(Ê8)Ú6-Ñ9,Ç:)È;*Ñ;-Õ;/Í7)Ê;+É;/É;/É9.Æ6+Ï<2Ï<2Ð<2Ê6,Ö-&ê24ø.:ý-=ú0@ù0@û.=ÿ,;þ+:õ0:ë6;Ý54Û94ß:6æ95ë54ó49î66ä71Ø6+Õ8)Õ8'×8%Ø7%Ñ:%Ò='Ð@(Ñ>.Ø=8ÿ]kÿBbÿ9eÿ/[ÝQkc28933/6.4@,=<\1dp^:\93¨o­Ä\90\81\9dma\82Ka\86Ai\92Fq\96Pp\94Vn\94Kh\8dHi\8cLi\8bOf\85Je\84Ih\86Hg\85Ei\91Kn\96P(0#/4.764?<7GD;MLJ\^k_`~][\8cWX\91fh²xzÑ\7f\82ß\84\85á\83\84×\84\83Ñ\83\86É\83\83Í\84\80Õ\89\81×\8c\84Ï\8b\83\83~\95pkr\82PQhZMYhKeaF\95WJÉUVãX_îagïtlæaXÔD9É:*Æ;&È=(Î;+Õ7+Ó/&Ï9+Â=*¾;'Ë>-âL>Ð:,Í9+È9)Ç8(Ê8)Î8*Ò:-Õ;/Ú>2×9.è47ö7?ú2?ö-=í/;ë28ï05ó/3ò5;í6:á55Ý86Ü86á96ç77ë46ö5:ï79ã73×6,Ð8*Ï9*Ï9(Ð9(Æ:!Ä>#Ä@)Ë<.îIMÿOhÿ;cÿ2döAb\92BK>=8<7;C369>(K[,\9d\9ee¬Ê\8a¦Ã\8b\85£qb\83J`\85?l\92Es\98Rp\94Vl\91Kf\8bFg\8aJi\8bNe\87Jd\87Gg\8aHg\8aFk\95Mp\9aR(0!).(/10783=>6FHCQT]Z\u[Y\88dc\9dwvÄ\85\86ã\8c\8bñ\87\87é\80\80Ø\82\81Ñ\82\86Æ\86\86Î\89\85Ò\8c\84Ñ\8a\80½\86|¡yq|ha[i^Lh]Kg_Hj`EuYA¦^OÖTTþR^êZRÕ<6Ù80Ø;,Ð9&Ñ:)Ø6)à3,Î1(É;-ÂA.½<)Ã7(ãOCÊ6*È9+Ê;*É:)Ê7'Í5'Ô8+Û9.Ø4*ä=4ö=Cñ1<ó/=ì1<ä5:ß77ðA>ô<:ê::å97à85Ý86à87æ::ë8;í9<ô5:î79â:7Ð8-Ç9+Ä;+Ä;)Ä;)Â;%¸7!¿>+Î93ÿWeÿ>\ú3\ú;f°HQT905C6G7:U.1QM2t\93X\9fÃ{\9f¾\82\94²~l\89YYwA`\83?k\91Dl\94Mj\91Pg\8bEc\86Bg\8aJf\8aLh\8cNg\8cIg\8cFm\93Jq\9dRu¡V/3$.1*00.45/:<.BD7MONUUa\Zrjh\90\7f|¿\8f\8cã\90\8eï\8a\87â\80\80\85\85Ã\8b\8aÆ\8b\87Â\89\81´\85{\9eyn~odbh\NXeKe]JpYIr\Gq\A\91WAÖWPþEMÜ94á51ã5.Þ6)Ô7$Ô9'Û5)ã2,Ã7(¾9(Á@-Â:*ÔB5Õ>3È:,¿<*Å9(Ç:)Ê8)Í5(Ô6+×3*á81é<6í6:î3:ì3;ç:@êLMù`[óPKæ95ß82ß82á85ä;8ä88è8;ë8<ë8<ñ48é77Ü:5È8-½9*¹<*·<*·<*¹<(¯8$°4(ÜFHÿNaô9VëGbÕJ_cE:ED08?-C5(O5&zwT\91³v\8dÀu\9c·\84\85\9etMc<Sm=a\7f?j\8eDh\92He\90Kd\87Ce\88Fj\8dMl\90Pi\90Oi\91Kh\92Hn\98Lt¤Xx¨\:;+99/8939;0>A,CG0LM?RQMXXNecnxv\9e\87\85Æ\91\8eÛ\8c\88Ò\82~¹}y«\7f\85\81³\84~¤~v\8dxmun`]k[NkZJb_Lh\Lq[M{\J\8bXEªQAÑD;ã1/à40ã5.à2)Ý7'Ð9$Î;'Ô8)Ý5,¸=+³6$¿;,È8-èKDÕ<4Ã;-³<(Á9)Ä8)È9+Ï7,Õ7.Þ71é=9æ74ë97ì9<ë=?øXZúkgÔG@Ð72á<8á:2á83ã73æ66é69ê7;ë8>è7=ï79ç9:Ø=8Æ<1´9)­<*ª;(©<(§<*¡:)ª8.éX_ôI\éG\ÆSZ YSIQ<KD1@<!AR(awF\85\93`\8f¢j\92´w\8a\9bwVeH?N1Se=e\7fBj\8eDg\91E`\8fGf\86Ci\8cJl\8fOn\92Rl\93Pk\95Mk\97Jr\9fNx©Zyª[FC2FD8EE=DE7FI.JM.QP;VRF\\8]^Pkj|zx§\83\7fº\83\80·zt ol\8blg\9dql\95pk\82ofkk^Uk[Ko\Kr]LuYNn^OmbP\7f^O¢RI¹82Ð3*Û5)á6/à3,à6)Ô7$Ê="Ç?%Í<)Õ9,±A+«4 ¾:+Î7.à=8êMFÇC4©;$Å@1Å;.Ë=1ØA8àA;ã;8æ87è88ç:4ç:6õOOãKHÀ71Ã<6ÖA=ß;:â;3â94æ95ê88ë7:ì7<è7=ç6<ê69â88Ô=6À</®9(¦;'¡:' 9&\97:(\97<*­E<îelîM_ÓGR§ZR\82mR?Q;K8'XM-o\9d]x¼oy\97Y\87\89Xw\80QDN39B-<E0O]:g\7fEm\8fEg\93F^\90Gk\8bHn\91Ol\8fOk\8fOr\99Vr\9cTr\9eOw¦Uwª[t§XUL=UL=UL=UL=WN?YPA\SD^UFcZKcYOi^\relxku{mzuhri\e^]X\YR[WL_WJd[Jh[Hl]Fm_EdhQyUG¢UM²TH¨I5¨=)Ç9/à02Þ7.Ü8.Û7-Ø6+×7+Õ7+Ô8+Ô8+·=.ª5$®6%¾<.É6,Ô:0ÝI=ÍD4ÛHAÑA8ØC<ß;9é77î79å76ß>6ÇD:·9+±7(½?0Ç?3Û>7è88ó57æ7>æ8:å97ã:5á81å95æ:8æ89è:<Þ;<ÎA:·>3£<+\99<*\95:'\938%\81>-\913+ÒZ\ÑZ^¬QN\9aZP\96]R\99^VK_ Vm)\93­d\98³ly\91UYj@LV><B6>?1<>3;A3IX9c|Eq\92Kl\92Gh\92Jm\91Tm\94Sk\93Jl\97Gp\9dHq¡Mv§UyªYn\97]]\86L_VG_VG_VG_VG^UF_VGaXIbYJe]Fe]Jf\Rg\Vi^\i^Zg\VbXOYWKSODQMAVPB[TB_XEe]Hh`KdeS\80\P¯ZWºBAÀ=5¾:.½9*Æ>0Ú6,Ú8-Ú8-×7+Õ7+Ô8+Ô8+Ò9+¹?0§6$£6!³>,Á<-Æ3)Ð<0ÕF8Þ45Ø22à::ê<=ï5:ë16æ68Ü86´9*¯5&­8'µ<+ÈC4Ø?7æ95ï56ë7:ê88è96æ;4ã:3â;5ß:8Þ88Ú<;Ô@<»;2¥7(\9c;*\94;)\909&\8e7$v9&\90>2¶PL®LI\9cQK\95\Q\95aV\98_V~\8f[£µ\81\93§tUh:8J$=J09?18;4=>0;=2:@2HW8e~Gt\95Np\96Km\97Oq\95Uo\97Ql\95In\99Iq\9eMt£Ryª[n\9eRY\82HNw=d[Ld[Ld[Ld[Ld[Le\Mf]Ng^Og`FiaJjbOi`Oi`Oh`Mh`KiaJc]MZTDOL;LI8NM;QP>TUCXYG^\OsWL³eaÎLNÝ8>Ø63¾=*«H+Ö6(Ö9*Ö9*Õ9*Ô8)Ò9)Ò9)Ò9)¹?2§:&\977\1f¤@(¶>-Ã9,Ê6,Ô=2ñ1<é4;å6;ä5:ç4:ç6<Ý9:Ç/,¬;)«<)ª;(¬9&¸9*Ð=3à;7è96ï56î64ê93æ;3á=4Ý>8Ù?=Ô>=ÆA:·<4¤6)\999)\91<(\8c;(\879%\856%w:'\88@2¡SI\9bRI\93YM\8c\N\90^S\9aaX\82\8dey\84bCP6-:(1<.8>4>?7::0;<.:<19?1GV7g\80Iu\96Os\99Np\9aRr\9aQq\9aNn\99Js\9eOw£Ty§\q\9fW\\89D\\83LSzCg^Og^Og^Og^Og^Oh_Ph_Pi`QkbQjaPh_Nh`MiaLh`IhaGhaEf_LaZGWR?LK9FG5EI8EL<EN=QOCYPA{QC¹SNäEIä67Ì=/­A'Ð7'Ò9)Ó:*Ó:*Ñ:)Ñ:)Ñ:)Ñ:)º<0¨=+\928\1e\97=#¬?*Á;/Ê3*Ù<5ñ8@ê@CÚ>?Í97Æ22È:8¹82«6,£>,£@+£@+¦=(¬9'»7*Ì70Ý@;ì95ë:4è;4â>4ÝC9ÒB:Å>:¾:8¢:-\9a6'\929)\8b:'\88=*\83<*\809'}6$z5&\8fL<\93QC\93XJ\90ZN\91]R\95\U\99ZUU]8=F)9B12<46<8CF?EF8=<(:;-8:/7=/ET5f\7fHu\96Os\99Nq\9bSq\9cLp\9bKq\9cMx¤W\80«ct\9fX_\89G`\8aJ^\85NSzCi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qj_[j_Yj`Wj`TjaRjaPjaPjbOh`Kg_J`[GQP<FI8AE6>F7<G7DH:AJ5RK1\9a`LÛ^XëGHà>;Í=2Ë8(Í:*Í:*Ï<,Ñ;,Ñ;,Ñ;,Ð:+¿:3±=0\96\966\1e®;)Ã9.Ú?:éGDäDFÌ>:°:0¥;.£=1\9c<.\90=-\88?,\95<*\95>+\98@,\9c?-¢=+©8*¶8,À;2Ø;2Ü?6ÜB8ÖB6ÎD9»<3ª5. 3,\8f<,\8c;*\86:*\83<*}:){:(z8(w5%\868,\96NB\8eNB\8fSH\97XO\95TN\98YT\96YVR[0OY6=G.5@0IQDZ^MHJ2>? ;<.:<18>0FU6h\81Ju\96Or\98Mq\9bSr\9fJq\9eMu¡R}¨`y¤_c\8cJa\89Jf\8eP_\84PTyEi`Qi`Qi`Qi`QjaRjaRjaRjaRk_ak__k`ZkaWkaUkaUkaWkaXlaMjbOe^KYVCMK<DF8AE6=C59E1DI2RD*\9ceP¼TIî^]íHLç>AÈ:,È9+È9+Ê8+Í;.Ï;/Ï;/Ï;/É:6½=4°</µA2ÎJ>ßJDçHDáB>ÐEBµ?5\9cA/\94G3\8dF4\87B2\7fB0wC.\889,\87:*\89<,\8b<+\8f<,\959*\9e9-£;.´8.º<0»=/¸=.­7)¢8+\988,\9390\86=.\83;,\7f:*~;+z;,x:+s8*r7)\92B9\90J>\8aL?\93SJ\98QM\99RP\96\X\95i`\82\8e`o|QAO+O^?boSOX=AE*<?"9:,9;09?1ET5h\81Jv\97Ps\99Nq\9bSq¡Mp\9fNy§\z¥^f\8fM\\84Eh\8fPc\8aI^\83PRwDi`Qi`Qi`Qi`QjaRjaRjaRjaRk`\kaXkaUkbQkbQkbSkaWkaXnbRkbQkbQd]MYSCNK<GE6CA2:J/RA-\8bMB¨E?°:6ãa_õdgíRXØNDÏB9ÑD;ÖG?ÚJBÝJCÞKDàKEçMOÝML×NHÜMGáFDæBAäB@áC@ÒGD³>5\9aA1\8eE2\88C3\85@1\80>0z?1\8290\83:1\81;/\80</\80;,\82:+\86:,\88:-\939.\98:.\9c:- :,\9a9)\929)\89:+\84;,\82:,\808*|6*{7*x8,w9,o5)r:-\8dI<\84J<\87RD\96WN\9aPM\97VR\89aWueUQ`9EV,Zm@cuKL^89F(=E09=.9:,8:/:@2BQ2c|Et\95Ns\99Nq\9bSm\9eLu¦Wy§_i\93Q[\83Dd\8bLf\8dJg\8cG]\7fMRtBi`Qi`Qi`Qi`QkbSkbSkbSkbSlbVlcRldOleKleKldOlcRlbVnbTkbSlcTi`QaZJVO?NH8HB27J*mF5¸GKÆ3=É<BÈLJäjiÙX\ÔKEÎC>ÑFAÎ@<ÒC?ÔC@ØDBÙECà?DßEGàHGãCEì?Cí>Cå??ÛB=Ó>@µ82\9f?3\90>0\8a:/\8b80\8873\87:4\80;4\7f:3|<2{=2y;.z</y;,x:+~:/\839.\8a8,\8f9*\8e8'\8a;*\83<*~=+\808,}5)|4(z4*v3*u7,o5*t>2\89QB\80Q?\86XH\8dSH\97RM\90UQw`PBL3L[<arN]sELd47L#1?%<D97;:;<.8:/:@2>M.[t=p\91Js\99Nr\9cTq¢Qu¥Yk\98S]\87Ga\89Kc\8aIf\8eHd\89C\~LPr@i`QjaRjaRkbSjaRjaRjaRjaRkbSkbSkbSkbSlcTlcTlcTlcTq_QscVndXicUgdUfaN]XBQK1NB(lP;\9dcW¤LH¼ILÉFKÐHJÓIIÓGJÏ??ÔC>ÌC9ÆG8ÈH=ÔDCÞ>FâBDáCDâDCãEDâDAáB?â@=ä@>ÌC=±:2\99;1\86>2}B4~>4\8493\8b82\85<-\84;,\83;-\82:,\7f9-\7f9-~:/~:/}90}90}90|90|90z:0y9/w9.w8/t8.r6,p6+n4)l3(n5*y@5\83TL\88QJ\93OL\97PN\8dRJ\80_NgcFYiE^wMRi?Ma<FS59A)69&>?1@>23;05;/;=/?C,ZfBp\88Tr\97Rr\9eQz cu\9b^`\86I]\83Fa\87Jd\8aMd\8aM_\85HXzHJl:i`QjaRjaRkbSjaRjaRjaRjaRkbSkbSkbSkbSlcTlcTlcTlcTrbSl^QndZkdZnj_\85\82s\88\82rxq^NV>CE/L?.Y=/`8.l:1yC9\85LA¨SL·KHÉCBÖB@Ô@<ÔE?×FCÛEFßCDßCDßEEÞFCÝEBÙD>ÚC<ÛD=ÔE?¾B:\9e9/\87;-\80A2~>2\84:1\8990\84;,\84;,\82:,\7f9-\7f9-~:/~:/~:/}90}90{8/{8/{;1y;0x:/x:/t8.s7-q5+o5*m4)l3(j4(u?3\89PI\8eQL\92SN\91VP\8a[Qu^LiiO^mNG[8AR2DS6FS9?I19=,;=/9;-5<46<2;=0=@+R^:h\80Lp\95Pu¡Tx\9ead\8aM[\81D[\81D`\86Ib\88Ka\87J^\84GTvDFh6haQibRibRjcSibRibRibRibRkbSkbSkbSkbSlcTlcTlcTlcTqeYoe[mf^\81~y\9b\98\93µ²«¸´«®§\9d\80\81qQUD?H5:G3=J89D3:@2=A3Q;.\83JCµMNÒEKÛ@DÝCCÝEBÜD?ÞDFÞDFÜDCÚDC×FAÔE=ÑG=ÑG=×@9ÉC:ª>2\8e<.\83@0\80>.\83;-\87;.\83;-\82:,\819+\7f9-~:/~:/}:1}:1z:1y90x8/v7.x90u9/u9/s9.q6.p5-n3+l3*j4*h2(g3(q=2\91LG\91RK\8dVO\82ZPs\N_VERWC@L65A-2>*6B.?H5@I6<E28A04=,4:65:49;0;>+KV4d|Hs\98Sx¤Wp\93Y[~D]\80F^\81G`\83Ia\84J`\83I^\81GQuEAe5haQibRibRjcSibRibRibRibRkbSkbSkbSkbSlcTlcTlcTlcTmd[mi`\89\86\81¶¶´ÑÑÑíëìïëèåÝÛغ°\9e\8b}c^KCH4>J6>F7=>8>966@5K61\8bKLÅbeÌTUÙOMâHFçAAÞDFÞDFÝCEÜBBÚDCÔE?ÐF<ÐG=Þ?9ÏB9·B8\929+\86>/\81>-\81<,\84=+\82:,\819+\7f9-}9.~:/}:1}:1}:1y:1x90t8.r8-r8-q8-p7,o6+o6-n5,l3*i3)i5*g3(d2'm;0\95KH\8fSK\83XOo\M[UEFJ;9A22:-47036/06,2:-9D4=J89F41@+/53162780;>-DO/ayGt\98Xs\9fT`\83KVyA[~F[~F_\82J_\82J^\81I]\80HOoF?_6icSicSicSicSicSicSicSicSkbSlcTlcTmdUmdUmdUmdUmdUifa\8d\8c\88ÃÅÄéíîõùüþþÿÿþüýøõþãÐÞʲ§ \84efGGJ/HC0J92N66=?<LDB\83kiÖ¯ªà¤\9cÄe_ÙOOéBIÚEGÚDFÛACÚ>AÚ>?ÙA@ÓB=ÐA;ß@:Ï@8·A7\979-\89=/\81>-\80=,\81=*\7f9-~8,}9.|8-|90|90z:1z:1w<4u:2q8/p7.m7-l8-l8-l8-l5.p92j5-g2*e3*_/%`0&h8.\8dNI\85TMrXKRL<;D34A04<14:0775664350/6.0;-7D39H52D.-3/.3-45-:<.>H-`wKv\99_l\97RYzETu@XyDZ{F_\80K_\80K]~I^\7fJMhG9T3icSicSicSicSicSicSicSicSkbSlcTlcTmdUmdUmdUneVneVrts©­®Úßâôüþûÿÿýÿþÿþúÿÿø÷þßçñÎÌØ°\9eª\82dnKGJ/JG6I@7TJK\86|{µ°¬ßÜÓÿõêÿÚÐØzzÌKPÎQMÉHCÒFEØDDÖ=?Ø@?ÕA?ÓB=Ù>9ÐC<¹B:\9a<2\8a<0\81>.\7f=-\80=-\7f9-}9.}9.{8/~;2{;2{;2z;4p:0o9/l8-k7,i7,i7,h8,h8,m80l7/j8/d2)c3)^/%^/%l=3}VQlOGMA58:,/:*2=/5=27:179668338119..9+2?.7E49H57>6.4*/1&57)>H0e{Ux\9aha\8aPVtBTr@VtBWuCZxF]{I^|JZxFGZF/B.gdSgdSgdSgdSgdSgdSgdSgdSkbSlcTlcTmdUmdUneVofWpgXv{\7f¦®±ÔÞàòüþ÷ÿÿûÿúúüñö÷éñÿçïüàçñÏÆ̨\95\98yTZ@EL:AL>\83|v¸¶ÚÐÏðìéö÷ïÿúðÿóê굯¼eT·UH½MBÃD>ËA>ÐB@ÑC?ÎC>Ô@<ËD@³@;\99<4\8a<2\81=2\7f=1\7f=/~:/}9.|90{8/|<3{;2y:3x92m80l7/i7.h6-h8.g8.g8.g8.i70g5.h70e4-c4,]1(]1(rF=YLFA81;8/69.4:.5;/69.57,39/39/19.19,.9+/:,3>.9D4;C44:,13&13%=F1m\82cr\92iNuFOl<Pm=Pm=Ro?XuE]zJ_|LSp@:F<%1'gdSgdSgdSgdSgdSgdSgdSgdSkbSlcTlcTmdUmdUneVpgXqhYipx\93\9c£ÊÕÙëöøóþúùÿöûÿîúüçûöðÿöìÿñáæѾ´¢\8eneVWYNisk«¯¡âÙÒþêìÿòöÿûú÷þööÿóûÿóÿÝÃË\83m«RBºK@ÂG?ÉE@ÈE=ÆC;ÒD@ÇC?«;7\98;6\89<4\82<4\7f<3\7f=1~:/}9.|90{8/z:1x92v70u6/k90j8/i9/h8.f7-f7-d8-d8-g6/j92i81m>6m>6e90}QHvKB5:349239/36-57,35*35*46)-8(-8(-8(/7(08)/7*08+2:-9B-<C1:<.13%>G4fz_YxVAg>Jg9Nk=Kh:Mj<VsE[xJ\yKIf8175"(&heVheVheVheVheVheVheVheVheVkdZlc\meXidPmlXghc\80\80\8a\9f©«ÉÎÑíîðýûüÿþüÿþùùüó÷ýóøùóøúì÷ùáØÜ»¤ª\88clOivb\8e\9c\8dÅÅÃëëéøøöúúøþþüþþüþþüþþüîÿÿÿýüÝ­©¯UMÁH=ÊF:ÉD;ÅE<ÂI4¶K7\9dF3\8aE5\81C6\82@4\84:1\8a7/~92|91z7/w7.w7.w8/u6-p4*i81h70h70g6/f4-i70i70h6/k4/m80k;/j@0hI7kXG\81xgjgV4:039/28.28.17-06,06,/5+/4./4./4./4.05/.3-.3-05//:24@67C74A0<I7UcLIW>ES9Jd?Ke>Id;Kf=VqH\vQYrR=V8(-1$)-heVheVheVheVheVheVheVheVheVkdZlc\meXmhTlkWtup¤§°ÌÖØõúýþÿÿÿýþÿþúþýøô÷îíóçñõçóöåððØÑÒ³¦¦\8a\80\84m\8f\95\87°·¯ÜÜÚööôýýûþþüþþüþþüþþüþþüüÿÿÿûúÿûóÿÚʸyg£J:¿QDÂH=ÇC7ÁH=¦?6\96A:\87@:\7f@9{?7z>6w<4v;3t;2s:1p:0p:0m9.k7,m82l71k60i70i70g6/h70j92i=4h<1iB3fE2iP<obO\8a\87t\]K28.28.17-06,17-06,06,/5+.3-.3-.3-.3-.3--2,-2,.3-*5-,8.1=16B4:G5?L86D->L3F^>Jb@H`<F_8UmI^vVTkO2I/',0$)-heVheVheVheVheVheVheVheVheVkdZlc\meXkiTnp[|~y¯³¼ÝçéûÿÿüýÿÿþÿÿÿûúúòèëàÞäÖçìÖëïØêêÒ×ÓºÆÁ­Â¼°ÐÍÈáàÞññïüüúþþüýýûþþüþþüþþüþþüÿùüÿÿýøÿûóÿôýüèÊ¥\92¢WD³O?Å@9ÃD>°<<\9e::\8f>=\80@>tC>mE=q?6q?6p>5o?5m>4k<2h<1h<1q62p62m61i70j92f:1e:1f>4aD6dI8cJ6_K3aR;ojT\7f\82mAJ528.28.17-06,17-06,06,/5+.3-.3-.3-.3--2,,1+,1+-2,,6.*4+,6-/:,1<,5@/2>*5A-;M3DV<H[=K^@XkMbtZPbL+<*%*-"'*heVheVheVheVheVheVheVheVjdVkdZlc\lfXmkVjmXovo\9e§®ÚãèùþÿýþÿþýûÿþùõõëæêÛâé×æìÐèëÐçåÎÜÕÃÚÐÆêßÛùíïÿõûýýûÿÿýþþüþþüþþüþþüþþüþþüÿûúÿÿýóÿÿîÿÿóÿúÿÿïìȲ­s[µN?µK>³H@¢<8\94<8\85@9uC8nF:q?8q?8q?8p?8qB:m>6j>5k?6r73p62m82i81e:1c?3aA4^A3XK8g[E_S;ZS7[W<oqYjt\1?(4:039/28.28.17-06,06,/5+-2,-2,-2,-2,,1+*/)*/),1+*4,*4,+5,,6+-7,4?18C36A12?-9F2AO8IW>WeN`mYKXG)5)(..%++heVheVheVheVifWifWifWifWkeWle[md]mgYnmXkpZmwo\94\9f¥ÇÐÕðõùýþÿÿþüÿÿ÷ùùíòöåèðÛëðÐçêÍäßÌÞÔÊçÙØøéìÿõùÿúÿþþüþþüþþüþþüþþüþþüþþüþþüýÿùýÿþýþÿþýÿÿýÿÿüöÿþìÿôÚ×\9f\84\9b]D\9fWA\9eO>\8eA1\85@1y@/rA0t=8u>9t?9t?9r@9p?8o>7n=6l:3m<5j>5e?4aA4aG8M:)F5#LN6HH.[Z>_^@\_Bsy_MW?0>'6<25;14:04:04:039/28.28.16016005//4.-2,,1+,1++0*,3,+2++2+-4,-4,1809A6@H=8C34?.5A-BN8Q]IZeUDNC-7.)/+(.*heVheVheVheVifWifWifWifWkeWmd[md]khYkmWjr[lyp\96¥ªÊÓÚñöúýþÿÿþúþþôùúêðõßäìÔÝáÀÚÚÀÞØÊæÛÙõéíÿôúÿùüÿüüþþüþþüþþüþþüþþüþþüþþüþþüöÿüýÿþÿúÿÿ÷ÿÿøÿÿúúÿÿöøÿðÿüãýåÍʨ\8f\92dM\84P:zF0xE0p@,tB9sA8o?5n?5m>4j>3j>3i=2eA5dB6aD6[D4WF4aVBQK5HC->G,>D(DG*abCmmQkoV>C-9B-9?58>47=37=38>48>47=37=36;55:449349316005/-2,+0**/)*/)*/),1+/4.,1+160=B<?L;<I74A-2@)CP<MZIAMA0<2.5.,3,gdUgdUifWifWifWifWifWifWldWmd[md]khYjnWhrZeuk\92¤¨ÉÒÙðõûüýÿÿÿûÿÿöÿÿðôùâãìÑÖ׸ÐιÜÕÍðåéÿöþÿýÿÿþüþÿùþþüþþüþþüþþüþþüþþüþþüþþüúÿÿýþÿÿþüÿýùÿûõÿýøþþüýÿþþúùÿýùÿûñÿòáäϼº¡\8d\98{i\86eTtP@iH7cB1dE3bC1aD2aD2`E2[J8[J8WJ7RJ5PK5qs[aeLEK1<F+@I,CH*MN/xw[`^GGF2?@.9?59?58>47=38>48>48>49?5:?99>88=78=77<65:4382160.3/,1-+0,,1-,1--10/321548G4?N9<K46E.7F/?N;:H9.</-4,+2*fcTgdUifWjgXifWifWifWifWldWmd[md]khYimVgs[fvl\96©­ÔÝäõúÿýþÿÿþúýýñüýëðõÞÜåÈÐϳǯÓÌÆîåêÿùÿÿþÿýÿúûÿöþþüþþüþþüþþüþþüþþüþþüþþüÿúÿþþÿ÷ÿùôÿòõÿóûÿúÿüÿÿúÿÿúÿÿüÿüýÿúýöÿÿóÿÿïÿûìÿöëÿíÕű\99bP8[I1[K2[M3\N4]O5VP:TO9QO8KM5MQ8ZcHEO4=J.AK0GP3IL/[Z<ieJ^YCZUBLI8<B8<B8;A7:@68>49?5:@6;A7;@::?9:?99>8:?9:?99>89>86;7273.3/-10-10-10-12-12):'7I3<N4:L27I1;M79J8.>1.5-,3+ZgM]iQckThkXghVifWkeWmeZjgVkg\jf]hfYgjUdp\n}x¨¹ÃÚáçôùüúÿùûÿñøùéóòÞêçÔÚÕÂÌ¿®½±¥Ç¼ºâØàûõÿÿüÿüýÿüýÿþþþþþþþþþÿþüÿþüÿüùÿýúÿþúÿýüÿüýÿþÿþüýÿýüÿûøÿòêÿòéÿûÿÿþÿþÿûüýÿþþÿÿýÿÿþòÿþäúø߸´\99SN0QK+UO/TO1SO2QP4QM2PP6KO6EM5GP5@I*CJ(HN*RS1TU5]]AZZBYW@[Y@YX<UT6MG1HC0B?0??5;>58@58C57D3:B78@58@5:B7:B7:B7;C8>F;9D<9D68A06<2284/;/1D&=T&Be-B^6=S><M;?Q9I\>FZ>1H.,3+*1)ZgM]iQckThmYjkYliZmgYog\khWjf[ie\hfYehSdp\v\85\80£´¾ÓÚàóøûøýùóöëìíÝÞÝÉÒϼÅÀ­Âµ¥É¼³ÚÏÍïåíý÷ÿÿüÿüýÿýÿþþþþþþþþþþÿþüÿþüÿýúÿüùÿüøÿýüÿûüÿþÿÿýþÿþýÿùöéÜÔõçÞÿûÿÿÿýþÿûüþýýþÿÿþÿÿþòÿüâýûä·³\9aQL/RL,UO/UP2TP3PO3QM2NN4KO6HP8HQ6EN/KR0U[7`kA\7f\87`ovUQU:OO7PN7SQ8XT9XR<QL9HE6AA7;>59A67B47D3:B79A69A6:B7:B7:B7<D9>F;=H@>I;?H7=C9<B>5A5=P2Vm?Z}EQmE;Q<2C1>P8PcEQeI:Q7180-4,YgM]iQdnVjo[mn\mk\nhZoi]liXieZie\igZfiTdp\t\83~\96§±ÊÓÜìô÷ñ÷óéìáÝÞÎÏ̹ÆÁ®½¶¤ÐóãÖÍóççÿöþÿùÿÿüÿüýÿýÿþþþþþþþþþþÿþüþýûÿýúÿüùþùõÿüûýùúþüýÿþÿÿýüÿú÷øëãýïæÿûÿÿÿýþÿûüþýüýÿÿþÿÿýñÿûÞÿÿ껶 TN4UN1UO/VQ3TP3NM1OK0MM3KO6JR:KT9NW8U\:djF\8c£m\9c°\7f\8e\9dvhqRKO6KJ5OJ6TM:UO9RM:LI:EE;=@79A67B45B1;C8:B7:B7;C8;C8;C8=E:?G<=H@>I;>G6=C9:@<6B6=P2Qh:Tw?Lh@3I4+<*6H0L_APdH:Q7,3+&-%
\ No newline at end of file
diff --git a/testimages/testimgint1_4.ppm b/testimages/testimgint1_4.ppm
deleted file mode 100644 (file)
index c4eda85..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-P6
-57 38
-255
-0/-51.72.92,80-80-80-80-5-*4,)5-*5-*1.'41*63,96/B<0H@3JA2MA1YB4\86C3«?2ÀF;æCHñAD÷:@Ù?=³@-°?-¦?,\98@*\91>.\90=+\93=,\94?+\99?6¸B4±E9_>/;5572/62/41,.0-0/-5,-=13yD@\9c`l\7f\7f±XT\86PGbopu\8e\91\86bcSYSa,,,0/-2.+3.*2-*2-*2-*2-*2-*1,)3.+3.+41,41,52-850<5-@7.C9/I=1JG6fA/\84;*¢E6ÊE>è@?ò;=ÁB3ª?-¨?, ?.\94?+\8f>-\8c=,\8b<-\8c=.\9eB3ÂA;ªPHPF<@6494043.02--3/02/21/3/.P5*sTY|~»YX\9eJ>fDCUMVQQYNaXQ,-/---.-+/+(.*).*)/+*/+*/+*0,+1-,1-,1-*2.+1-*40-:2/=4/?4.E80J=5V93r7/\92;1¦A5ÇD:ÙF?ªC2\9d@.\9d=-\96=-\8c=,\89<,\87;-\84<0\86B7\9eH;¶OJ¡}mhseKI=77-01+/0+.0-//-00.00.:/7jhi\8c\92Äv\82¶ho\7fiyx\82\97\88j{k`Z@,03./1....-+-+,+)*+)*+)*+)**(),*+/-./+*.*)0,+3/.;23<21<1/@2/?82A83X6-\7f;.\92>4\99A3­C6\9d?3\92?-\93;-\8f<.\87;-\859)\819+\81>5\85IA\96KE¨nc\8d¥\85|\8fyZfR?E710+2)*1++1++1-,1-,6,-cqM\8e\9c\8d\96º\96\9fƧ\8a²\8d\89«\86g~bOO312,32-74/72.7/,3--/-.,+0/(//)+.-+/0*///2.+70*=3*?6->5.<1-<1/D1+B0.D,*\4,x>0\8f:3\8b?2\8dA3\90<1\83>.\88<.\80;+w;0v>/\86C:\86MB\96\X~\95x\8b¨\8a\80\9d\81^\8bbWpS>D:.-+-)*1(-/*0+,10,+^cL\84\9al\86¨u\8e°}\82¨w~\9ey`r\?A4671872=:5?:6?74;629527327./50-41,43.540;62@7.G:1G=4C90?61?61D65M34A9.K8*m61\89==\84A;\84=7\81B1\85;.\7f<,{>,¨KF\8aG>tM<\81VFxwX§xh\9e\98~\85¡{\86\8fpx\90pasYGD39.*./)1-*=&,H@5clQm\8a^r\98er\9cjw tt\93qZsUD;4893=<7B?:D?;FA;F?9F?7D;4B92B92<7194.96/@9/F<0M@0M?4H;2B90?;2\:8\9cEK\84@7¤EA\9cD6¥=2¤E3ª@2©<A\97D@y=2¶:DÔ@>ªVLjeG\85kPæOVÿ+Iý;UôL]äWgØclÐ`lÐQfÁL_\8fDKR3.E=2cZ9y\83`s\8cdx\93f\84\9d\7f\8e¤\8f{\91|YrRURC671;:5B?:GB>HC=LE=MC9L@4H>2D<1A:2<71<8-C;0K?/O?/M=0F:.A:0A?3¨EHÌ17 <%°=+¥:0¶A8¨</»?5Ô<1÷.4â=7æ42Ö6*¾NC\91]HÖ[Vè>AÑFAô>Jü5Hþ9Uÿ;`ÿ?mûArÿFjùTr»WalLA\8b~u©«¨«³µ¾¼¿ÚÒÏÙÏק©¦`w][eJ10.762<<4BB8JH<NL7PPHb`xWNQH?@A96=82>71>;6F?5P?-A>-D65>;4h;5«;-¡:'«>*»9+©;,¬>-·?/Á;/Ñ7+Þ7.ô.+Ú7&Ù6#Ë=1ÚFBñADÒA>­<.ÇG<ó@FøDMýAYÿBjýIxÿKwùVuóJk\9ennÓ»¯îëòþäýÿóüýøõöíðÒÎÍ\97\9d\93\95\9b\8d74/52+:70@=4OE9TK<ecq\96\9cÖ\94\94Ú||®`^vECH<;@B<,G@-EB;I?G@IHLB8\92B;ª?-­>+¸9*Í9/È91Ç9/Î:0Ñ7-è1)ð/*ò/)Ö7"Ö5#Ó9/ÜMEÅE:»<)»<-ÈA;ÛIJïDJüK]úEdÿNwûUyýSnù\mß`iÙ\9e\9aÿööýüÿÿûúÿûøÿñôêßÝäâÕÐÙÔC?4<8/84+>93MC7WJ:a\p\94\9e欶þ®µû\9f ãvtµbX\8dGDWD@=[OS\89s\9a§f\84¾IR³<(­:(º;,Ì9/Ý:3Ú72ä=7Ý90äD8ñ91ú**ì1,Ö2&Ê<(Ó:,Ú?:×EE½<'Á9+ÎH?ÅIAßKGæOTøWiþQoÿTwÿXoý\kíWc§unóÞÛ÷ÿýÿüýýúõûðîåØÐÿüèæìèPJ<IC7B;3A:4GC8SG1[T[\8b\96Ωªü¬¯ü¥©ó\9a\9eå\86\8bÍuw \92UgØHQåDIÇA8àB?Ï>9Â@2Ë=1Ô7.Ù5,Û:0Ú6,Ô4&Ì9%Û;/ü47ç55á55ò21Ü6*ßK?ÖDEÔ=6Ã;/½@.½>-ÃE9ÎMHôdmúXmû[sëtxôftÈ\89\82baOßÂÄýûþÿúÿúÿöÿþ÷ôîàÿÿãööêXO@TK<NE6LC4JF:VK5]V]\87\8cÃ\9d\9cì\9d¥ø\9d¦ç¤\9eè\98\99ÚÁn\88ä=Dâ?BÙ=AÌB?è=CØ:9È?7¿A3Ä7-ß63Ý7+Ý7'Ã8#Æ8,Ú91Ë8&Ý2(à-0å/,Õ8'ÔC2ÝD?æTTÍ:0Á:'·>-´<.¾@2éf^ïijóboöllþbo¶\8b\84[iFãÑÇÿüùúþýßýåôýìÿøè÷ïÚþýùZN>YM=WK;WK;SK>YL9ZRPsr\94\84\86\8c\8dÐ\85\87Àqs¬¤Ymù7OáFAí>KÒDBÁB9Ô97ÌC9Á9)¾;'Í:*â6,ó04ô02á34æ2>í/1Ë8(Ñ9+Ý<2ÊB2Å9(×:1ã03Ö71Ò>2ÇC6¯;,¬<.®=-Ú_Xïlr÷nxÿpwûNb½~yx\8fa×ÖºãñØÃÚ¾¢Í\9f»Ô­äãÎêÙÑßÑÈZM<ZM<XK:ZM<\L=^O<[OC]RVh`\85\82\97|³¥i\9c½>5ÝC9ö<?âAG¸<2¸@2×96ËC7Á:'È;)Õ5'ì7.ç2'ô*&õ&.ÿ\e8ò.:ç6<ó08ô-0Ü:5Ý>:Ý;8×4+Ç8(Ç:0ÔJ@È;2Ë80¼:,ÊOH÷x\7füy\81ÿkxÿE`¶mdp\8bX\84\90hp\8fcz\9fl\87µw\92»\7f¤´\8fνµ¯¥¤ZK8ZK8ZK8\M:^K<_N<_P=aP>cQ_uq\96º\80\96òZiÿ9PÓCCæAEÑB<¯;,»=/ç9:âH@ÏG9Ì8,ß6/í1/ü,<ý(<ð,Dü/XùS_ñIZÛ4>´;*ÍE9ÓD@ÑA9Ê9(«<(¹=1Ø?:ë51ù-.Þ7.Å@7øz{üz\82ýdvùA[\95VEi\7fP\82\91h~¥p\81©m\86¬o\83µn\8f­yÉ° §¹]L8]L8]L8]L8^M=[O?^RFfSOkZd|\83¹§\87¸çwsôP[ñALÝ:;Ã?2­>-Ç<5Õ7.Ú9%äA:Ñ=/ê86û7Eö*-õ)*ì)/ó=LôT\ß@=º?0§8-¹>9×CCÐA9Ò91Ï:6Ý>:Ü;3ò00ô02ë2-Â:,î{xþw\85ÿQnôAaqM?j\8cPz¢f{£g}¡c}¦j}­a\89²p\89¥\7f[gg_N<_N<_N<_N<`N6\SNql\82xq\9at|ª\87\8bÒ¥\95¶\8c|ÏSIëGHä:;È@2´91ÉYMÃ?3Ý6-â70á?0ì1,ú9<ôNRå<?åBEÓ:=à:>ã4;ðW\ù_kàRNÞ@?ÜG@Ø93û+9ü7>Ý4-ê5.ù.2î1-Â8+çtqûj{ÿAcÓCZWQ9m\89Vw\9dbr\9a[w\9e_y¤_x§Y\82ªd~\99las]\O>^Q@_RA`SBaTNnj\83wy²mq¸\8d\8cÜÆüäÞ¢ØÑ\9d¬\90xÃe[ìRTè:;Í<7¸G9ÐVIÕ4,å>8Ü6*è0(ã60ÚACóS[úZdø]cú2<ô1?ùU^üXaá<8â64Ù<3â94è8:å63Ý6-ð0+÷03ñ1.Ì9/ädeþWsû?b\94EHCG0bwLp\92Vj\93Oq\98Yt\9cVo\99Og\8bKNh8G^4UH8]P@bUEdWGpk\89sv«cj²|\83Ë¥«ÛÆÇÙËÅDz¦°yxt\8bhbÐoiübbîE@ÐB8Ã>/Ð=-âFGÜ;3ã60Ì:-Â=,Ë;;åMYèSYã:7öCIä7;ù59î73é30ß<3è64ê67æ40Ü8,ì1(ñ33ï2.Ò80ò_gûBdêCaaK=RG5LZ7g\85Ie\8dFj\92Sj\91N`\89G[|E]tHZuB@@6TG>^SAjgrol\9b`` qrÂ\8e\8aá\98\97Ó\99\93Ó\98\90Ë\8b\82±n_drWL¸YSãtmözxÛKCÁ8&É:*Õ9,Ò9+Ú8-Ç<)Å;1Æ<2ÎD:ÏF<Ù7(ø*6ÿ'?ÿ!<ÿ#9í6;Ý:5ç85ì44Þ6-Ú9'Þ7$ç5+ã7)áB>ÿQjÿ:a\98;F8<+BA-_h=g~Rc\88Bk\90Kj\8fIf\88Kd\81Ie\81Fc\88C/4-A<8OJDabwYY\8dfh³~\80×\85\86Ö\86\86Ì\86\81Õ\8d\84Å}x\8fxUS^bG¹SQèagìqi×K>Ã<(Ì9)Ô6+Ä;)Ô@2Í9+É:,Ê8+Ò;0Ò:/é24ù/=ó1<ø/9õ1;â66Þ95é77ò59Ý6.Ò9)Ô9'Ê<$Ì?-÷MVÿ:dÜB\F678:-de;¥¾\85s\91]f\8cCq\96Sj\8fIi\8bNf\85Ih\88Gl\96N-0'34/@B7TT`b_\8a\83\81Ô\8b\89ê\81\87\87Ç\8a\83Æ\84z\9fndbd_Km\H\88[DêQTàA=Û7-Ñ8&Ý5,Æ7)À=+ÔB5Ç9+Ç:)Ì6(×6,â92ð5<ì2=êFGïB>ä86á96å99ë8<î68Ö92¿:)½<)¸:$Ç=3ÿG^î@akC;><0[J8\8d²o\95±~YuEe\89Ah\91Ke\88Dh\8cLi\8eKj\92It¢WA?2??5EG/RPC]]Qzw¢\88\85Èyv£xt§yq\88ob\n[Ll\Mu^N¤L@Ø7/á4.Ý5(Ì<$Õ9*³:'Æ:-âE>¸=+Ã;-Ï;1Þ;6ç98é:7ïLMÔIDÙ;8á:4æ66ê7;è7=è8:Í=4®;)¥:&\9e:*ÌOMçHZ£]SHG3R^6v\98\\87\98bWdHGT6i\86Dc\91Hi\8cHl\90Pn\97Qr\9eOv©ZZQBZQB[RC_VGd[Jj_]qeij^`ZWNYSGaYFi^Hp_O¯RK³?0Ë80Û7-Ù7,Õ7+Ô8+²:*±9(Ê7-ÓD6Ù;8à<:í49â96¹;-´;*Ð@5í76é6:å95â92ã99Ü<<¸<2\9b<*\918&\86:,ÁUU\9fVO\98_Vp\84I\84\9c`Rd:>D6<>1AM7j\88Hl\94Kn\95Tl\96Jq¡Mu¦W]\86Lf]Nf]Nf]Ng^OiaLiaNiaLhaG`[HOL;JK9ORA^TH­UQß;<¹@+Ô8)Õ9*Ò9)Ñ:)°<-\99;"º<-Ñ80ï7?Ü9:Ø58Á61§>+§<(¼:,Ý;6î85ç<4Ú@8Í=<®<1\969(\89<(\838%\82?/\99SG\90ZN\96]VcmJ6A08?7>>29;.>J4m\8bKq\99Pq\9bOs\9eOz¦[b\8fJX\7fHi`Qi`Qi`Qi`Qj_]j`WjaRjaRiaL]XEFI8?E7AI4wT>ÛVQàA>Ë9*Ì:+Ï;-Ñ;-¾;3¤;(ÈB7âE@ÍB?¡@0\94A1\83@-\8e;+\93=,\9c;+¬:/É<2É?4¶</\9d6-\89<,\82:+|:*u7(\91D:\90PF\98UO\97]YdoE@M1U^I@C(9;.>J4n\8cLq\99Pp Lz¦[h\91Od\8cMY~Ji`Qi`QkbSkbSlbXldQldQlbVnbThaQWQAHE4MG/¬BBÉIHæ^`ÒG@ÒE>×FAÛGCáGIÝIGçACáB?Ä>;\97A2\89=0\82<2\81;3\7f=1};-\80;,\8a:/\959,\91:)\84;,\808*{5)v6,q9,\87M?\8dUH\97SPn]MP`;YoA;L*:@49;.<H2g\85Er\9aQr£Rj\97R`\88Ie\8dGWyGi`QkbSjaRjaRkbSkbSlcTlcTqaTldYpm^lfPSK4yK>\94A=©HBÀHGÐB>ÎE=ÙCDáCDàECÞC?ßB=ÄA9\91:0\7f?3\8781\84;,\82:,\7f9-~:/}90|90z:0x:/t8.p6+l3(p:.\88QJ\93RN\82[LbiJNd>HW89A,=>04<1<?,arFr\9aSs\99\]\83Fb\88K`\86IOq?haQjcSibRibRkbSkbSlcTlcTnf[\8b\88\83þÎÉÃ\92\86xHM9<G6=>6V?7·PSØJIàEAÞDFÜDCÖE@ÑG=ÔA: >1\82?.\83;,\82:,\7f9-~:/}:1y:1v7.s9.r8-p5-l3*i3)k7,\92OI\80ZO\UE@G74:,6>/<G65A-284:</Vg=t\9cU`\83I\\7fE`\83I^\81GIj=icSicSicSicSkbSmdUmdUmdU\84\84\82ßãäúþÿÿýúîçË\9e¢\7fNQ6K>6XSP¼©£ì¶¬ÚUXÓIGØBCØ@?ÓB=Õ@:©>4\85=.\80=,\7f9-|8-}:1{;2s:1m7-l8-j8-l7/g5,a1'd5+~QKSG94?/5;168516/1=/7F307046)Q`?o\95ZUuCWwE\|J\|J>V<gdSgdSgdSgdSkbSmdUmdUpgX\86\8d\93Þéëöÿúùûí÷úéåßÅ\83~hQYL´°§ôææûúõüëáÕ\87sºK@ÉD?ÊC=ÎC>¤=8\86<3\7f=1~:/{8/{;2w81j8/i7.f7-d8-i70i81e6.qE<A>767/58-57,08+08+.9+2=-9B146(TbIWzPNk=Ol>ZwIVsE,6.heVheVheVheVhdXmd[khU\80\81\83ÉÑÔúúüÿþúõøïõ÷êååÉ\8b\8ft\8d\98\88ááßûûùþþüþþüúÿÿç·­ºTFÃI>ÀH8\99C6\81A7\81;3z;2u9/s9.o6+j81i70h6/h70j92j@2jUBtq^39/17-17-/5+/4./4..3-.3-.:04@2BO;AO6Ic@Hb;YsNF_B&+/heVheVheVheVjdXmd[mlX\8e\94\94ëóöþþþûûóäèÙèìÓâÝÇÓËÀìãäúúøþþüþþüþþüÿüýôÿýñêØ»xe½G=¨?<\8a?<qE<q?8p?8n?7i=4q62l71f;2c?3bM<_O8fbIV`H39/17-17-/5+-2,-2,,1+,1+*4,-7,2=-5@/;J3HX=]mS<J9%++heVheVifWifWkeYmf\knY\81\8d\8bÜãéþþþüüðíòÜâåÈáÙÎôèêÿøüþþüþþüþþüþþüûÿüÿûÿÿüýÿýêß·\9e¦lX\84E3uB/t?9q?8o>7m>6i>5cA5_J9L?,DH/XX<jmR=G/7=36<26<25;1382271/4.,1+*1*+2+.5.9@89F57D0N[I8D8+1-gdUifWifWifWldYmf\hpY}\8d\8aàçíþþþþÿñêðÖÏͶãÛÙÿúÿþÿúþþüþþüþþüþþüþýÿûÿ÷ýÿ÷ÿýÿÿüÿÿûòèÝËÊ´¦¨\8dxaH2^H1^J2XM9QL6Z\DJS8@J/NN2ieLJI5:@69?58>49?5:?99>88=75:4051,1--10/325G19K39K53D4-4,\hPfkUjhYnfYkg[ieZemX\8c\9b\9eäìïùüóìíÛØÓÀÅ·ªÝÒÖþøÿüýÿþþþÿþüÿýúÿýùÿüûÿýþÿüùøêáÿýÿýÿüþýÿÿþëØÖ½RK.UO/QP4PN5IO5EN1KQ/agC]`CTT<VU9OJ6CA49?58C59A69A6:B7=E:<F;:B54>5AU0Kk<:M:EX<?V:-4,[iPgoXlm]nhZkg[ieZemX\85\94\97ÚãêìñëÖÕû©ÚÌÁøíñÿüÿüþýþþþÿþüÿýúÿúöþúùÿýþÿüùûíäÿýþýÿüþþÿÿûçÝÛÆTM1VO2PO1MK2LR8LU8^dB\8fªsx\88aKM7SL:SN:IG:;A76A3;C8;C8;C8>F;>H=<D77A8H\7PpA/B/AT8E\@)0(
\ No newline at end of file
diff --git a/testimages/testimgint1_8.ppm b/testimages/testimgint1_8.ppm
deleted file mode 100644 (file)
index 11dca13..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-P6
-29 19
-255
-0/-50,4/,4/,2-*3.+30+74/B:/J>0dC2¥A2âBBá=;®?,\9c@+\8f>-\90=-¬B5\82F;:5232./1.5//uKLkj¤SNdci_\VX-.0.-+,*+,*+,*+.,-0,+2.-<20A4.H94w9.¦A5³C7\97>,\8e=,\84;,\84A8¤TK\84\89sGK<0/+/.,0/-PMF\89\9b§~\98\8bw\8fwWV:45/:728302012,.10,32.?5,B8/>3/F21K4,\80;4\88?6\86>0\81<-\87C8\81M@\8dxc\8b \81m\86fFJ<1,)1+-NO?y\99h\7f¥vk\86g@>29:4C@;GB<I?5D<1<71=9.L?/J<1@<1\9a>A\9f?1§?4¬@3Â::¾:8ÃG?\95bMé?Hù>QïKcçLlÔJanE?\84\82m\96£\8f±¹¬w\88uX[F43/==3OI9kl\81lg\87IDJ>;6H@3C?<a?6¨=+º;,¹;/Å;0â4+å3'Ô8+ÛFB½=0ØDB÷ESþHpýRtÚ]kèÎÍÿóýþôóÎËÆ°·¯EA5=82OF7wy ­°ý\96\96Üih\94\82KQ¸WhÈA=¼=.Ö8/Ý82Ø:.ð50â3.Û7-ÚEAÅ;.ÃC6ÖKHøYmû_têhp¶\9d\98þüÿýúõ÷ðÞëîçYM?SG9SJ9lj\80\92\95Ü\8e\8fϽf\88å@DÍB?Ø=;Á=0Ô7.é3/Ô51×6,Ú6-Ò9+Û<6ÖA:»=.³=/èfdøksÛns£¨\8aéñäÌçÈñè×îçá[K;[K;^M=^PEqg\8cºp\93Û?@ä@A·=0Ú?:É=,ã5,õ,2ù'@ð@KÝ34×?:Ó:2½;-Ø=8×6.à`]þp|ÑRYx\8b^z\9fk\88´u²¸\9c£¢ª^M;^M;]P@kalxy§¹\88\9béJNÔ<7¼C8Ó9-Þ>2ó6:ñ7:æ9?å@DÒKHÓECÖ?8é6:æ5/ò00×XQÿ\t£IKr\95[x\9f`z¨`\85¦oYi^[N>aTDlh\81qvº°°ÒÎÇ­\9dukçWVÑB:ÎB5à=8Þ6-×CAðV^ñ8>ôGMæ74á:4è66å4*ò21ÝMLøFhcG;bzJj\93Ok\94N\yCPj;A>5^Z[cc\9f\80\81Ô\8f\8cÑ\8b\83´n\RÎa^å`YÇ:(Ï9*Ñ;,È:0Ð@7í04ú)<ò09â96ç53Ø9&Ù9)öGX°;NEG1w\8d\i\8eHi\8cJf\84Hh\90J780JKCom\94\84\80Ê\80|¯sgkm^K¼LAß8/Ô8)¿:+Í?3É:,à93ì<?âC@â96è8;Þ95´;*º@3ÞK[PI6y\8bYcxQg\8cFi\8cJl\96Nv¦Z`WHbYJh_PkaWXUFXUB\8bWLÅ=1Ø8*Ò9)ª;(Ê<0à::Ú65¯<*Õ;3è96Û<8·;3\8f9(\98H=\96\QdsHBI7=D2m\90Lo\99Op\9eSW\80Hi`QjaRkaWkbSg^MHI9kJ9ÛONÎ@6Õ@9ÈA;ÝB>²@6\88?0\88<.\92:,¬<0\9a:,\819+v8+\8cNA\8dXPTb>CK4;B0n\91Mq\9fTd\8dKTyFjaRjaRkbSlcTumb\9b\97\8cjZJnC<¦GC×FCÞDDÙD>±?5\82<0\82:,~:/y9/u9.p6+l6*\8cSL`XE?M4:A/6<0g\84Jd\87Ma\84JIj=gdSgdSlcTneV²·ºûýøÚØ¿[ZH¯¤¢ï½¶ÎWOÐB>¼?9\82<0}9.z:1m9.h8,i70g80RD;4:.28.2?.39-ZtMSp@[xH1B2heVheVkeYy{pëïòõöîèêÔµ¶¨õõóþþüöîëË\7fq°D:\80?9u<5o:2l71f:1eE6gbN28.06,.3--2,/90;G3EZ;NbG%*-heVifWlfZt\7fqîòõô÷æÝÚÉý÷÷þþüþþüþþþÿþùáÆ»«\86t{UHeD5]F6TN8JN3VXB8>47=36;5271-2.1628G2=K:+2+akSliZjfZw\82zéïï×ÔÃÜÑÍýüÿþþþÿüùþüýýôïþþþÿýö\98\92xTO2LN6OV5r~VRP9KH79A4:B7<D9=E8=L5AZ:CW<*1)
\ No newline at end of file
diff --git a/testimages/testimgp.jpg b/testimages/testimgp.jpg
deleted file mode 100644 (file)
index 968a90e..0000000
Binary files a/testimages/testimgp.jpg and /dev/null differ
index 26a1972..f135da4 100644 (file)
--- a/tjbench.c
+++ b/tjbench.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2009-2012 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2009-2014 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -29,6 +29,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <ctype.h>
 #include <math.h>
 #include <errno.h>
 #include <cdjpeg.h>
@@ -138,7 +139,7 @@ int decomptest(unsigned char *srcbuf, unsigned char **jpegbuf,
                if(yuv==YUVDECODE)
                {
                        if(tjDecompressToYUV(handle, jpegbuf[0], jpegsize[0], dstbuf, flags)==-1)
-                       _throwtj("executing tjDecompressToYUV()");
+                               _throwtj("executing tjDecompressToYUV()");
                }
                else for(row=0, dstptr=dstbuf; row<ntilesh; row++, dstptr+=pitch*tileh)
                {
@@ -475,7 +476,7 @@ void dodecomptest(char *filename)
 
        if((file=fopen(filename, "rb"))==NULL)
                _throwunix("opening file");
-       if(fseek(file, 0, SEEK_END)<0 || (srcsize=ftell(file))<0)
+       if(fseek(file, 0, SEEK_END)<0 || (srcsize=ftell(file))==(unsigned long)-1)
                _throwunix("determining file size");
        if((srcbuf=(unsigned char *)malloc(srcsize))==NULL)
                _throwunix("allocating memory");
@@ -520,7 +521,7 @@ void dodecomptest(char *filename)
                        _throwunix("allocating JPEG size array");
                memset(jpegsize, 0, sizeof(unsigned long)*ntilesw*ntilesh);
 
-               if((flags&TJFLAG_NOREALLOC)!=0)
+               if((flags&TJFLAG_NOREALLOC)!=0 || !dotile)
                        for(i=0; i<ntilesw*ntilesh; i++)
                        {
                                if((jpegbuf[i]=(unsigned char *)malloc(tjBufSize(tilew, tileh,
@@ -686,6 +687,9 @@ void usage(char *progname)
        printf("     codec\n");
        printf("-accuratedct = Use the most accurate DCT/IDCT algorithms available in the\n");
        printf("     underlying codec\n");
+       printf("-subsamp <s> = When testing JPEG compression, this option specifies the level\n");
+       printf("     of chrominance subsampling to use (<s> = 444, 422, 440, 420, or GRAY).\n");
+       printf("     The default is to test Grayscale, 4:2:0, 4:2:2, and 4:4:4 in sequence.\n");
        printf("-quiet = Output results in tabular rather than verbose format\n");
        printf("-yuvencode = Encode RGB input as planar YUV rather than compressing as JPEG\n");
        printf("-yuvdecode = Decode JPEG image to planar YUV rather than RGB\n");
@@ -700,6 +704,7 @@ void usage(char *progname)
                        if(i!=nsf-1) printf(", ");
                        if(i==nsf-2) printf("or ");
                }
+               if(i%8==0 && i!=0) printf("\n     ");
        }
        printf(")\n");
        printf("-hflip, -vflip, -transpose, -transverse, -rot90, -rot180, -rot270 =\n");
@@ -718,7 +723,7 @@ int main(int argc, char *argv[])
 {
        unsigned char *srcbuf=NULL;  int w, h, i, j;
        int minqual=-1, maxqual=-1;  char *temp;
-       int minarg=2;  int retval=0;
+       int minarg=2, retval=0, subsamp=-1;
 
        if((scalingfactors=tjGetScalingFactors(&nsf))==NULL || nsf==0)
                _throwtj("executing tjGetScalingFactors()");
@@ -825,7 +830,8 @@ int main(int argc, char *argv[])
                                {
                                        for(j=0; j<nsf; j++)
                                        {
-                                               if(temp1==scalingfactors[j].num && temp2==scalingfactors[j].denom)
+                                               if((double)temp1/(double)temp2
+                                                       == (double)scalingfactors[j].num/(double)scalingfactors[j].denom)
                                                {
                                                        sf=scalingfactors[j];
                                                        match=1;  break;
@@ -854,6 +860,22 @@ int main(int argc, char *argv[])
                        if(!strcmp(argv[i], "-?")) usage(argv[0]);
                        if(!strcasecmp(argv[i], "-alloc")) flags&=(~TJFLAG_NOREALLOC);
                        if(!strcasecmp(argv[i], "-bmp")) ext="bmp";
+                       if(!strcasecmp(argv[i], "-subsamp") && i<argc-1)
+                       {
+                               i++;
+                               if(toupper(argv[i][0])=='G') subsamp=TJSAMP_GRAY;
+                               else
+                               {
+                                       int temp=atoi(argv[i]);
+                                       switch(temp)
+                                       {
+                                               case 444:  subsamp=TJSAMP_444;  break;
+                                               case 422:  subsamp=TJSAMP_422;  break;
+                                               case 440:  subsamp=TJSAMP_440;  break;
+                                               case 420:  subsamp=TJSAMP_420;  break;
+                                       }
+                               }
+                       }
                }
        }
 
@@ -893,18 +915,27 @@ int main(int argc, char *argv[])
                printf("\n");
                goto bailout;
        }
-       for(i=maxqual; i>=minqual; i--)
-               dotest(srcbuf, w, h, TJ_GRAYSCALE, i, argv[1]);
-       printf("\n");
-       for(i=maxqual; i>=minqual; i--)
-               dotest(srcbuf, w, h, TJ_420, i, argv[1]);
-       printf("\n");
-       for(i=maxqual; i>=minqual; i--)
-               dotest(srcbuf, w, h, TJ_422, i, argv[1]);
-       printf("\n");
-       for(i=maxqual; i>=minqual; i--)
-               dotest(srcbuf, w, h, TJ_444, i, argv[1]);
-       printf("\n");
+       if(subsamp>=0 && subsamp<TJ_NUMSAMP)
+       {
+               for(i=maxqual; i>=minqual; i--)
+                       dotest(srcbuf, w, h, subsamp, i, argv[1]);
+               printf("\n");
+       }
+       else
+       {
+               for(i=maxqual; i>=minqual; i--)
+                       dotest(srcbuf, w, h, TJSAMP_GRAY, i, argv[1]);
+               printf("\n");
+               for(i=maxqual; i>=minqual; i--)
+                       dotest(srcbuf, w, h, TJSAMP_420, i, argv[1]);
+               printf("\n");
+               for(i=maxqual; i>=minqual; i--)
+                       dotest(srcbuf, w, h, TJSAMP_422, i, argv[1]);
+               printf("\n");
+               for(i=maxqual; i>=minqual; i--)
+                       dotest(srcbuf, w, h, TJSAMP_444, i, argv[1]);
+               printf("\n");
+       }
 
        bailout:
        if(srcbuf) free(srcbuf);
index bea12f1..72b93f8 100755 (executable)
@@ -110,12 +110,13 @@ for image in $IMAGES; do
        done
 
        # Scaled decompression
-       for scale in 2 4 8; do
+       for scale in 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8; do
+               scalearg=`echo $scale | sed s@_@/@g`
                for samp in GRAY 420 422 444; do
-                       $EXEDIR/djpeg -rgb -scale 1/${scale} $BMPARG $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_1_${scale}_djpeg.${EXT}
-                       runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -scale 1/${scale} -quiet -benchtime 0.01
-                       runme cmp $OUTDIR/${basename}_${samp}_Q95_1_${scale}.${EXT} $OUTDIR/${basename}_${samp}_1_${scale}_djpeg.${EXT}
-                       rm $OUTDIR/${basename}_${samp}_Q95_1_${scale}.${EXT}
+                       $EXEDIR/djpeg -rgb -scale ${scalearg} $BMPARG $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_${scale}_djpeg.${EXT}
+                       runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -scale ${scalearg} -quiet -benchtime 0.01
+                       runme cmp $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT} $OUTDIR/${basename}_${samp}_${scale}_djpeg.${EXT}
+                       rm $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT}
                done
        done
 
@@ -165,11 +166,12 @@ for image in $IMAGES; do
        # Transforms with scaling
        for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
                for samp in GRAY 444 422 420; do
-                       for scale in 2 4 8; do
-                               $EXEDIR/djpeg -rgb -scale 1/${scale} $BMPARG $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg >$OUTDIR/${basename}_${samp}_${xform}_1_${scale}_jpegtran.${EXT}
-                               runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -scale 1/${scale} -quiet -benchtime 0.01
-                               runme cmp $OUTDIR/${basename}_${samp}_Q95_1_${scale}.${EXT} $OUTDIR/${basename}_${samp}_${xform}_1_${scale}_jpegtran.${EXT}
-                               rm $OUTDIR/${basename}_${samp}_Q95_1_${scale}.${EXT}
+                       for scale in 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8; do
+                               scalearg=`echo $scale | sed s@_@/@g`
+                               $EXEDIR/djpeg -rgb -scale ${scalearg} $BMPARG $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg >$OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.${EXT}
+                               runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -scale ${scalearg} -quiet -benchtime 0.01
+                               runme cmp $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT} $OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.${EXT}
+                               rm $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT}
                        done
                done
        done
diff --git a/tjbenchtest.java.in b/tjbenchtest.java.in
new file mode 100755 (executable)
index 0000000..ebff9c8
--- /dev/null
@@ -0,0 +1,179 @@
+#!/bin/bash
+
+set -u
+set -e
+trap onexit INT
+trap onexit TERM
+trap onexit EXIT
+
+onexit()
+{
+       if [ -d $OUTDIR ]; then
+               rm -rf $OUTDIR
+       fi
+}
+
+runme()
+{
+       echo \*\*\* $*
+       $*
+}
+
+IMAGES="vgl_5674_0098.bmp vgl_6434_0018a.bmp vgl_6548_0026a.bmp nightshot_iso_100.bmp"
+IMGDIR=@srcdir@/testimages
+OUTDIR=__tjbenchtest_java_output
+EXEDIR=.
+JAVA="@JAVA@ -cp java/turbojpeg.jar -Djava.library.path=.libs"
+
+if [ -d $OUTDIR ]; then
+       rm -rf $OUTDIR
+fi
+mkdir -p $OUTDIR
+
+exec >$EXEDIR/tjbenchtest-java.log
+
+# Standard tests
+for image in $IMAGES; do
+
+       cp $IMGDIR/$image $OUTDIR
+       basename=`basename $image .bmp`
+       $EXEDIR/cjpeg -quality 95 -dct fast -grayscale $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_GRAY_fast_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -sample 2x2 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_420_fast_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -sample 2x1 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_422_fast_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -sample 1x1 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_444_fast_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct int -grayscale $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_GRAY_accurate_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct int -sample 2x2 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_420_accurate_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct int -sample 2x1 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_422_accurate_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct int -sample 1x1 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_444_accurate_cjpeg.jpg
+       for samp in GRAY 420 422 444; do
+               $EXEDIR/djpeg -rgb -bmp $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_default_djpeg.bmp
+               $EXEDIR/djpeg -dct fast -rgb -bmp $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_fast_djpeg.bmp
+               $EXEDIR/djpeg -dct int -rgb -bmp $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg >$OUTDIR/${basename}_${samp}_accurate_djpeg.bmp
+       done
+       for samp in 420 422; do
+               $EXEDIR/djpeg -nosmooth -bmp $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_default_nosmooth_djpeg.bmp
+               $EXEDIR/djpeg -dct fast -nosmooth -bmp $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_fast_nosmooth_djpeg.bmp
+               $EXEDIR/djpeg -dct int -nosmooth -bmp $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg >$OUTDIR/${basename}_${samp}_accurate_nosmooth_djpeg.bmp
+       done
+
+       # Compression
+       for dct in accurate fast; do
+               runme $JAVA TJBench $OUTDIR/$image 95 -rgb -quiet -benchtime 0.01 -${dct}dct
+               for samp in GRAY 420 422 444; do
+                       runme cmp $OUTDIR/${basename}_${samp}_Q95.jpg $OUTDIR/${basename}_${samp}_${dct}_cjpeg.jpg
+               done
+       done
+
+       for dct in fast accurate default; do
+               dctarg=-${dct}dct
+               if [ "${dct}" = "default" ]; then
+                       dctarg=
+               fi
+
+               # Tiled compression & decompression
+               runme $JAVA TJBench $OUTDIR/$image 95 -rgb -tile -quiet -benchtime 0.01 ${dctarg}
+               for samp in GRAY 444; do
+                       for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].bmp \
+                               $OUTDIR/${basename}_${samp}_Q95_full.bmp; do
+                               runme cmp -i 54:54 $i $OUTDIR/${basename}_${samp}_${dct}_djpeg.bmp
+                               rm $i
+                       done
+               done
+               runme $JAVA TJBench $OUTDIR/$image 95 -rgb -tile -quiet -benchtime 0.01 -fastupsample ${dctarg}
+               for samp in 420 422; do
+                       for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].bmp \
+                               $OUTDIR/${basename}_${samp}_Q95_full.bmp; do
+                               runme cmp -i 54:54 $i $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.bmp
+                               rm $i
+                       done
+               done
+
+               # Tiled decompression
+               for samp in GRAY 444; do
+                       runme $JAVA TJBench $OUTDIR/${basename}_${samp}_Q95.jpg -tile -quiet -benchtime 0.01 ${dctarg}
+                       for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].bmp \
+                               $OUTDIR/${basename}_${samp}_Q95_full.bmp; do
+                               runme cmp -i 54:54 $i $OUTDIR/${basename}_${samp}_${dct}_djpeg.bmp
+                               rm $i
+                       done
+               done
+               for samp in 420 422; do
+                       runme $JAVA TJBench $OUTDIR/${basename}_${samp}_Q95.jpg -tile -quiet -benchtime 0.01 -fastupsample ${dctarg}
+                       for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].bmp \
+                               $OUTDIR/${basename}_${samp}_Q95_full.bmp; do
+                               runme cmp $i -i 54:54 $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.bmp
+                               rm $i
+                       done
+               done
+       done
+
+       # Scaled decompression
+       for scale in 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8; do
+               scalearg=`echo $scale | sed s@_@/@g`
+               for samp in GRAY 420 422 444; do
+                       $EXEDIR/djpeg -rgb -scale ${scalearg} -bmp $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_${scale}_djpeg.bmp
+                       runme $JAVA TJBench $OUTDIR/${basename}_${samp}_Q95.jpg -scale ${scalearg} -quiet -benchtime 0.01
+                       runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_Q95_${scale}.bmp $OUTDIR/${basename}_${samp}_${scale}_djpeg.bmp
+                       rm $OUTDIR/${basename}_${samp}_Q95_${scale}.bmp
+               done
+       done
+
+       # Transforms
+       for samp in GRAY 420 422 444; do
+               $EXEDIR/jpegtran -flip horizontal -trim $OUTDIR/${basename}_${samp}_Q95.jpg >$OUTDIR/${basename}_${samp}_hflip_jpegtran.jpg
+               $EXEDIR/jpegtran -flip vertical -trim $OUTDIR/${basename}_${samp}_Q95.jpg >$OUTDIR/${basename}_${samp}_vflip_jpegtran.jpg
+               $EXEDIR/jpegtran -transpose -trim $OUTDIR/${basename}_${samp}_Q95.jpg >$OUTDIR/${basename}_${samp}_transpose_jpegtran.jpg
+               $EXEDIR/jpegtran -transverse -trim $OUTDIR/${basename}_${samp}_Q95.jpg >$OUTDIR/${basename}_${samp}_transverse_jpegtran.jpg
+               $EXEDIR/jpegtran -rotate 90 -trim $OUTDIR/${basename}_${samp}_Q95.jpg >$OUTDIR/${basename}_${samp}_rot90_jpegtran.jpg
+               $EXEDIR/jpegtran -rotate 180 -trim $OUTDIR/${basename}_${samp}_Q95.jpg >$OUTDIR/${basename}_${samp}_rot180_jpegtran.jpg
+               $EXEDIR/jpegtran -rotate 270 -trim $OUTDIR/${basename}_${samp}_Q95.jpg >$OUTDIR/${basename}_${samp}_rot270_jpegtran.jpg
+       done
+       for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
+               for samp in GRAY 444; do
+                       $EXEDIR/djpeg -rgb -bmp $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg >$OUTDIR/${basename}_${samp}_${xform}_jpegtran.bmp
+                       runme $JAVA TJBench $OUTDIR/${basename}_${samp}_Q95.jpg -$xform -tile -quiet -benchtime 0.01
+                       for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].bmp \
+                               $OUTDIR/${basename}_${samp}_Q95_full.bmp; do
+                               runme cmp -i 54:54 $i $OUTDIR/${basename}_${samp}_${xform}_jpegtran.bmp
+                               rm $i
+                       done
+               done
+               for samp in 420 422; do
+                       $EXEDIR/djpeg -nosmooth -rgb -bmp $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg >$OUTDIR/${basename}_${samp}_${xform}_jpegtran.bmp
+                       runme $JAVA TJBench $OUTDIR/${basename}_${samp}_Q95.jpg -$xform -tile -quiet -benchtime 0.01 -fastupsample
+                       for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].bmp \
+                               $OUTDIR/${basename}_${samp}_Q95_full.bmp; do
+                               runme cmp -i 54:54 $i $OUTDIR/${basename}_${samp}_${xform}_jpegtran.bmp
+                               rm $i
+                       done
+               done
+       done
+
+       # Grayscale transform
+       for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
+               for samp in GRAY 444 422 420; do
+                       runme $JAVA TJBench $OUTDIR/${basename}_${samp}_Q95.jpg -$xform -tile -quiet -benchtime 0.01 -grayscale
+                       for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].bmp \
+                               $OUTDIR/${basename}_${samp}_Q95_full.bmp; do
+                               runme cmp -i 54:54 $i $OUTDIR/${basename}_GRAY_${xform}_jpegtran.bmp
+                               rm $i
+                       done
+               done
+       done
+
+       # Transforms with scaling
+       for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
+               for samp in GRAY 444 422 420; do
+                       for scale in 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8; do
+                               scalearg=`echo $scale | sed s@_@/@g`
+                               $EXEDIR/djpeg -rgb -scale ${scalearg} -bmp $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg >$OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.bmp
+                               runme $JAVA TJBench $OUTDIR/${basename}_${samp}_Q95.jpg -$xform -scale ${scalearg} -quiet -benchtime 0.01
+                               runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_Q95_${scale}.bmp $OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.bmp
+                               rm $OUTDIR/${basename}_${samp}_Q95_${scale}.bmp
+                       done
+               done
+       done
+
+done
+
+echo SUCCESS!
index 430088e..40b342e 100755 (executable)
@@ -84,12 +84,13 @@ for image in $IMAGES; do
        done
 
        # Scaled decompression
-       for scale in 2 4 8; do
+       for scale in 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8; do
+               scalearg=`echo $scale | sed s@_@/@g`
                for samp in GRAY 420 422 444; do
-                       $EXEDIR/djpeg -rgb -bmp -scale 1/${scale} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_1_${scale}_djpeg.bmp
-                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}_fast.jpg $OUTDIR/${basename}_${samp}_1_${scale}.bmp -scale 1/${scale}
-                       runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_1_${scale}.bmp $OUTDIR/${basename}_${samp}_1_${scale}_djpeg.bmp
-                       rm $OUTDIR/${basename}_${samp}_1_${scale}.bmp
+                       $EXEDIR/djpeg -rgb -bmp -scale ${scalearg} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_${scale}_djpeg.bmp
+                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}_fast.jpg $OUTDIR/${basename}_${samp}_${scale}.bmp -scale ${scalearg}
+                       runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_${scale}.bmp $OUTDIR/${basename}_${samp}_${scale}_djpeg.bmp
+                       rm $OUTDIR/${basename}_${samp}_${scale}.bmp
                done
        done
 
@@ -134,11 +135,12 @@ for image in $IMAGES; do
        # Transforms with scaling
        for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
                for samp in GRAY 444 422 420; do
-                       for scale in 2 4 8; do
-                               $EXEDIR/djpeg -rgb -bmp -scale 1/${scale} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg >$OUTDIR/${basename}_${samp}_${xform}_1_${scale}_jpegtran.bmp
-                               runme $JAVA TJExample $OUTDIR/${basename}_${samp}_fast.jpg $OUTDIR/${basename}_${samp}_${xform}_1_${scale}.bmp -$xform -scale 1/${scale} -crop 16,16,70x60
-                               runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_${xform}_1_${scale}.bmp $OUTDIR/${basename}_${samp}_${xform}_1_${scale}_jpegtran.bmp
-                               rm $OUTDIR/${basename}_${samp}_${xform}_1_${scale}.bmp
+                       for scale in 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8; do
+                               scalearg=`echo $scale | sed s@_@/@g`
+                               $EXEDIR/djpeg -rgb -bmp -scale ${scalearg} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg >$OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.bmp
+                               runme $JAVA TJExample $OUTDIR/${basename}_${samp}_fast.jpg $OUTDIR/${basename}_${samp}_${xform}_${scale}.bmp -$xform -scale ${scalearg} -crop 16,16,70x60
+                               runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_${xform}_${scale}.bmp $OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.bmp
+                               rm $OUTDIR/${basename}_${samp}_${xform}_${scale}.bmp
                        done
                done
        done
index 89a6d1d..3bb194d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2009-2012 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2009-2012, 2014 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -219,7 +219,6 @@ int checkBuf(unsigned char *buf, int w, int h, int pf, int subsamp,
        bailout:
        if(retval==0)
        {
-               printf("\n");
                for(row=0; row<h; row++)
                {
                        for(col=0; col<w; col++)
@@ -312,7 +311,6 @@ int checkBufYUV(unsigned char *buf, int w, int h, int subsamp)
                                printf("%.3d ", buf[ypitch*ph + uvpitch*ch + (uvpitch*row+col)]);
                        printf("\n");
                }
-               printf("\n");
        }
 
        return retval;
@@ -405,7 +403,7 @@ void _decompTest(tjhandle handle, unsigned char *jpegBuf,
        if(yuv==YUVENCODE) return;
 
        if(yuv==YUVDECODE)
-               printf("JPEG -> YUV %s ... ", subName[subsamp]);
+               printf("JPEG -> YUV %s ... ", subNameLong[subsamp]);
        else
        {
                printf("JPEG -> %s %s ", pixFormatStr[pf],
@@ -475,7 +473,7 @@ void decompTest(tjhandle handle, unsigned char *jpegBuf,
                        sf1);
 
        bailout:
-       printf("\n");
+       return;
 }
 
 
@@ -515,10 +513,15 @@ void doTest(int w, int h, const int *formats, int nformats, int subsamp,
                        decompTest(dhandle, dstBuf, size, w, h, pf, basename, subsamp,
                                flags);
                        if(pf>=TJPF_RGBX && pf<=TJPF_XRGB)
+                       {
+                               printf("\n");
                                decompTest(dhandle, dstBuf, size, w, h, pf+(TJPF_RGBA-TJPF_RGBX),
                                        basename, subsamp, flags);
+                       }
+                       printf("\n");
                }
        }
+       printf("--------------------\n\n");
 
        bailout:
        if(chandle) tjDestroy(chandle);
@@ -531,9 +534,9 @@ void doTest(int w, int h, const int *formats, int nformats, int subsamp,
 void bufSizeTest(void)
 {
        int w, h, i, subsamp;
-       unsigned char *srcBuf=NULL, *jpegBuf=NULL;
+       unsigned char *srcBuf=NULL, *dstBuf=NULL;
        tjhandle handle=NULL;
-       unsigned long jpegSize=0;
+       unsigned long dstSize=0;
 
        if((handle=tjInitCompress())==NULL) _throwtj();
 
@@ -548,12 +551,12 @@ void bufSizeTest(void)
                                if(h%100==0) printf("%.4d x %.4d\b\b\b\b\b\b\b\b\b\b\b", w, h);
                                if((srcBuf=(unsigned char *)malloc(w*h*4))==NULL)
                                        _throw("Memory allocation failure");
-                               if(!alloc)
+                               if(!alloc || yuv==YUVENCODE)
                                {
-                                       if((jpegBuf=(unsigned char *)tjAlloc(tjBufSize(w, h, subsamp)))
-                                               ==NULL)
+                                       if(yuv==YUVENCODE) dstSize=tjBufSizeYUV(w, h, subsamp);
+                                       else dstSize=tjBufSize(w, h, subsamp);
+                                       if((dstBuf=(unsigned char *)tjAlloc(dstSize))==NULL)
                                                _throw("Memory allocation failure");
-                                       jpegSize=tjBufSize(w, h, subsamp);
                                }
 
                                for(i=0; i<w*h*4; i++)
@@ -562,19 +565,27 @@ void bufSizeTest(void)
                                        else srcBuf[i]=255;
                                }
 
-                               _tj(tjCompress2(handle, srcBuf, w, 0, h, TJPF_BGRX, &jpegBuf,
-                                       &jpegSize, subsamp, 100, alloc? 0:TJFLAG_NOREALLOC));
+                               if(yuv==YUVENCODE)
+                               {
+                                       _tj(tjEncodeYUV2(handle, srcBuf, w, 0, h, TJPF_BGRX, dstBuf, subsamp,
+                                               0));
+                               }
+                               else
+                               {
+                                       _tj(tjCompress2(handle, srcBuf, w, 0, h, TJPF_BGRX, &dstBuf,
+                                               &dstSize, subsamp, 100, alloc? 0:TJFLAG_NOREALLOC));
+                               }
                                free(srcBuf);  srcBuf=NULL;
-                               tjFree(jpegBuf);  jpegBuf=NULL;
+                               tjFree(dstBuf);  dstBuf=NULL;
 
                                if((srcBuf=(unsigned char *)malloc(h*w*4))==NULL)
                                        _throw("Memory allocation failure");
-                               if(!alloc)
+                               if(!alloc || yuv==YUVENCODE)
                                {
-                                       if((jpegBuf=(unsigned char *)tjAlloc(tjBufSize(h, w, subsamp)))
-                                               ==NULL)
+                                       if(yuv==YUVENCODE) dstSize=tjBufSizeYUV(h, w, subsamp);
+                                       else dstSize=tjBufSize(h, w, subsamp);
+                                       if((dstBuf=(unsigned char *)tjAlloc(dstSize))==NULL)
                                                _throw("Memory allocation failure");
-                                       jpegSize=tjBufSize(h, w, subsamp);
                                }
 
                                for(i=0; i<h*w*4; i++)
@@ -583,10 +594,18 @@ void bufSizeTest(void)
                                        else srcBuf[i]=255;
                                }
 
-                               _tj(tjCompress2(handle, srcBuf, h, 0, w, TJPF_BGRX, &jpegBuf,
-                                       &jpegSize, subsamp, 100, alloc? 0:TJFLAG_NOREALLOC));
+                               if(yuv==YUVENCODE)
+                               {
+                                       _tj(tjEncodeYUV2(handle, srcBuf, h, 0, w, TJPF_BGRX, dstBuf, subsamp,
+                                               0));
+                               }
+                               else
+                               {
+                                       _tj(tjCompress2(handle, srcBuf, h, 0, w, TJPF_BGRX, &dstBuf,
+                                               &dstSize, subsamp, 100, alloc? 0:TJFLAG_NOREALLOC));
+                               }
                                free(srcBuf);  srcBuf=NULL;
-                               tjFree(jpegBuf);  jpegBuf=NULL;
+                               tjFree(dstBuf);  dstBuf=NULL;
                        }
                }
        }
@@ -594,7 +613,7 @@ void bufSizeTest(void)
 
        bailout:
        if(srcBuf) free(srcBuf);
-       if(jpegBuf) free(jpegBuf);
+       if(dstBuf) free(dstBuf);
        if(handle) tjDestroy(handle);
 }
 
@@ -628,9 +647,10 @@ int main(int argc, char *argv[])
        doTest(35, 39, _onlyGray, 1, TJSAMP_GRAY, "test");
        doTest(39, 41, _3byteFormats, 2, TJSAMP_GRAY, "test");
        doTest(41, 35, _4byteFormats, 4, TJSAMP_GRAY, "test");
-       if(!doyuv) bufSizeTest();
+       bufSizeTest();
        if(doyuv)
        {
+               printf("\n--------------------\n\n");
                yuv=YUVDECODE;
                doTest(48, 48, _onlyRGB, 1, TJSAMP_444, "test_yuv0");
                doTest(35, 39, _onlyRGB, 1, TJSAMP_444, "test_yuv1");
index 2513691..a16b20a 100644 (file)
@@ -1,9 +1,10 @@
 /*
  * transupp.c
  *
- * Copyright (C) 1997-2009, Thomas G. Lane, Guido Vollbeding.
+ * This file was part of the Independent JPEG Group's software:
+ * Copyright (C) 1997-2011, Thomas G. Lane, Guido Vollbeding.
+ * libjpeg-turbo Modifications:
  * Copyright (C) 2010, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains image transformation routines and other utility code
@@ -782,7 +783,7 @@ jt_read_integer (const char ** strptr, JDIMENSION * result)
  * The routine returns TRUE if the spec string is valid, FALSE if not.
  *
  * The crop spec string should have the format
- *     <width>x<height>{+-}<xoffset>{+-}<yoffset>
+ *     <width>[f]x<height>[f]{+-}<xoffset>{+-}<yoffset>
  * where width, height, xoffset, and yoffset are unsigned integers.
  * Each of the elements can be omitted to indicate a default value.
  * (A weakness of this style is that it is not possible to omit xoffset
@@ -804,14 +805,22 @@ jtransform_parse_crop_spec (jpeg_transform_info *info, const char *spec)
     /* fetch width */
     if (! jt_read_integer(&spec, &info->crop_width))
       return FALSE;
-    info->crop_width_set = JCROP_POS;
+    if (*spec == 'f' || *spec == 'F') {
+      spec++;
+      info->crop_width_set = JCROP_FORCE;
+    } else
+      info->crop_width_set = JCROP_POS;
   }
-  if (*spec == 'x' || *spec == 'X') {  
+  if (*spec == 'x' || *spec == 'X') {
     /* fetch height */
     spec++;
     if (! jt_read_integer(&spec, &info->crop_height))
       return FALSE;
-    info->crop_height_set = JCROP_POS;
+    if (*spec == 'f' || *spec == 'F') {
+      spec++;
+      info->crop_height_set = JCROP_FORCE;
+    } else
+      info->crop_height_set = JCROP_POS;
   }
   if (*spec == '+' || *spec == '-') {
     /* fetch xoffset */
@@ -996,10 +1005,16 @@ jtransform_request_workspace (j_decompress_ptr srcinfo,
     else
       yoffset = info->crop_yoffset;
     /* Now adjust so that upper left corner falls at an iMCU boundary */
-    info->output_width =
-      info->crop_width + (xoffset % info->iMCU_sample_width);
-    info->output_height =
-      info->crop_height + (yoffset % info->iMCU_sample_height);
+    if (info->crop_width_set == JCROP_FORCE)
+      info->output_width = info->crop_width;
+    else
+      info->output_width =
+        info->crop_width + (xoffset % info->iMCU_sample_width);
+    if (info->crop_height_set == JCROP_FORCE)
+      info->output_height = info->crop_height;
+    else
+      info->output_height =
+        info->crop_height + (yoffset % info->iMCU_sample_height);
     /* Save x/y offsets measured in iMCUs */
     info->x_crop_offset = xoffset / info->iMCU_sample_width;
     info->y_crop_offset = yoffset / info->iMCU_sample_height;
@@ -1161,6 +1176,7 @@ transpose_critical_parameters (j_compress_ptr dstinfo)
  * We try to adjust the Tags ExifImageWidth and ExifImageHeight if possible.
  */
 
+#if JPEG_LIB_VERSION >= 70
 LOCAL(void)
 adjust_exif_parameters (JOCTET FAR * data, unsigned int length,
                        JDIMENSION new_width, JDIMENSION new_height)
@@ -1310,6 +1326,7 @@ adjust_exif_parameters (JOCTET FAR * data, unsigned int length,
     offset += 12;
   } while (--number_of_tags);
 }
+#endif
 
 
 /* Adjust output image parameters as needed.
index 122d448..cfbaca4 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * transupp.h
  *
- * Copyright (C) 1997-2009, Thomas G. Lane, Guido Vollbeding.
+ * Copyright (C) 1997-2011, Thomas G. Lane, Guido Vollbeding.
  * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
@@ -57,6 +57,7 @@
  * corner up and/or left to make it so, simultaneously increasing the region
  * dimensions to keep the lower right crop corner unchanged.  (Thus, the
  * output image covers at least the requested region, but may cover more.)
+ * The adjustment of the region dimensions may be optionally disabled.
  *
  * We also provide a lossless-resize option, which is kind of a lossless-crop
  * operation in the DCT coefficient block domain - it discards higher-order
@@ -106,13 +107,15 @@ typedef enum {
 
 /*
  * Codes for crop parameters, which can individually be unspecified,
- * positive, or negative.  (Negative width or height makes no sense, though.)
+ * positive or negative for xoffset or yoffset,
+ * positive or forced for width or height.
  */
 
 typedef enum {
-       JCROP_UNSET,
-       JCROP_POS,
-       JCROP_NEG
+        JCROP_UNSET,
+        JCROP_POS,
+        JCROP_NEG,
+        JCROP_FORCE
 } JCROP_CODE;
 
 /*
@@ -140,9 +143,9 @@ typedef struct {
    * These can be filled in by jtransform_parse_crop_spec().
    */
   JDIMENSION crop_width;       /* Width of selected region */
-  JCROP_CODE crop_width_set;
+  JCROP_CODE crop_width_set;   /* (forced disables adjustment) */
   JDIMENSION crop_height;      /* Height of selected region */
-  JCROP_CODE crop_height_set;
+  JCROP_CODE crop_height_set;  /* (forced disables adjustment) */
   JDIMENSION crop_xoffset;     /* X offset of selected region */
   JCROP_CODE crop_xoffset_set; /* (negative measures from right edge) */
   JDIMENSION crop_yoffset;     /* Y offset of selected region */
index 1ff9bba..634bedf 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2011 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2011-2013 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -29,6 +29,9 @@
 #include <stdlib.h>
 #include <string.h>
 #include "turbojpeg.h"
+#ifdef WIN32
+#include "tjutil.h"
+#endif
 #include <jni.h>
 #include "java/org_libjpegturbo_turbojpeg_TJCompressor.h"
 #include "java/org_libjpegturbo_turbojpeg_TJDecompressor.h"
        goto bailout;  \
 }
 
-#define bailif0(f) {if(!(f)) goto bailout;}
+#define bailif0(f) {if(!(f)) {  \
+       char temps[80];  \
+       snprintf(temps, 80, "Unexpected NULL condition in line %d", __LINE__);  \
+       _throw(temps);  \
+}}
 
 #define gethandle()  \
        jclass _cls=(*env)->GetObjectClass(env, obj);  \
@@ -88,13 +95,14 @@ JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_init
        return;
 }
 
-JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3BIIII_3BIII
-       (JNIEnv *env, jobject obj, jbyteArray src, jint width, jint pitch,
-               jint height, jint pf, jbyteArray dst, jint jpegSubsamp, jint jpegQual,
-               jint flags)
+JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3BIIIIII_3BIII
+       (JNIEnv *env, jobject obj, jbyteArray src, jint x, jint y, jint width,
+               jint pitch, jint height, jint pf, jbyteArray dst, jint jpegSubsamp,
+               jint jpegQual, jint flags)
 {
        tjhandle handle=0;
-       unsigned long jpegSize=0;  jsize arraySize=0;
+       unsigned long jpegSize=0;
+       jsize arraySize=0, actualPitch;
        unsigned char *srcBuf=NULL, *jpegBuf=NULL;
 
        gethandle();
@@ -105,7 +113,8 @@ JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3
        if(org_libjpegturbo_turbojpeg_TJ_NUMPF!=TJ_NUMPF)
                _throw("Mismatch between Java and C API");
 
-       arraySize=(pitch==0)? width*tjPixelSize[pf]*height:pitch*height;
+       actualPitch=(pitch==0)? width*tjPixelSize[pf]:pitch;
+       arraySize=(y+height-1)*actualPitch + x+width;
        if((*env)->GetArrayLength(env, src)<arraySize)
                _throw("Source buffer is not large enough");
        jpegSize=tjBufSize(width, height, jpegSubsamp);
@@ -115,8 +124,9 @@ JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3
        bailif0(srcBuf=(*env)->GetPrimitiveArrayCritical(env, src, 0));
        bailif0(jpegBuf=(*env)->GetPrimitiveArrayCritical(env, dst, 0));
 
-       if(tjCompress2(handle, srcBuf, width, pitch, height, pf, &jpegBuf,
-               &jpegSize, jpegSubsamp, jpegQual, flags|TJFLAG_NOREALLOC)==-1)
+       if(tjCompress2(handle, &srcBuf[y*actualPitch + x*tjPixelSize[pf]], width,
+               pitch, height, pf, &jpegBuf, &jpegSize, jpegSubsamp, jpegQual,
+               flags|TJFLAG_NOREALLOC)==-1)
        {
                (*env)->ReleasePrimitiveArrayCritical(env, dst, jpegBuf, 0);
                (*env)->ReleasePrimitiveArrayCritical(env, src, srcBuf, 0);
@@ -130,26 +140,38 @@ JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3
        return (jint)jpegSize;
 }
 
-JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3IIIII_3BIII
-       (JNIEnv *env, jobject obj, jintArray src, jint width, jint pitch,
+JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3BIIII_3BIII
+       (JNIEnv *env, jobject obj, jbyteArray src, jint width, jint pitch,
                jint height, jint pf, jbyteArray dst, jint jpegSubsamp, jint jpegQual,
                jint flags)
 {
+       return Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3BIIIIII_3BIII(
+               env, obj, src, 0, 0, width, pitch, height, pf, dst, jpegSubsamp, jpegQual,
+               flags);
+}
+
+JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3IIIIIII_3BIII
+       (JNIEnv *env, jobject obj, jintArray src, jint x, jint y, jint width,
+               jint stride, jint height, jint pf, jbyteArray dst, jint jpegSubsamp,
+               jint jpegQual, jint flags)
+{
        tjhandle handle=0;
-       unsigned long jpegSize=0;  jsize arraySize=0;
+       unsigned long jpegSize=0;
+       jsize arraySize=0, actualStride;
        unsigned char *srcBuf=NULL, *jpegBuf=NULL;
 
        gethandle();
 
        if(pf<0 || pf>=org_libjpegturbo_turbojpeg_TJ_NUMPF || width<1 || height<1
-               || pitch<0)
+               || stride<0)
                _throw("Invalid argument in compress()");
        if(org_libjpegturbo_turbojpeg_TJ_NUMPF!=TJ_NUMPF)
                _throw("Mismatch between Java and C API");
        if(tjPixelSize[pf]!=sizeof(jint))
                _throw("Pixel format must be 32-bit when compressing from an integer buffer.");
 
-       arraySize=(pitch==0)? width*height:pitch*height;
+       actualStride=(stride==0)? width:stride;
+       arraySize=(y+height-1)*actualStride + x+width;
        if((*env)->GetArrayLength(env, src)<arraySize)
                _throw("Source buffer is not large enough");
        jpegSize=tjBufSize(width, height, jpegSubsamp);
@@ -159,8 +181,9 @@ JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3
        bailif0(srcBuf=(*env)->GetPrimitiveArrayCritical(env, src, 0));
        bailif0(jpegBuf=(*env)->GetPrimitiveArrayCritical(env, dst, 0));
 
-       if(tjCompress2(handle, srcBuf, width, pitch*sizeof(jint), height, pf,
-               &jpegBuf, &jpegSize, jpegSubsamp, jpegQual, flags|TJFLAG_NOREALLOC)==-1)
+       if(tjCompress2(handle, &srcBuf[(y*actualStride + x)*sizeof(int)], width,
+               stride*sizeof(jint), height, pf, &jpegBuf, &jpegSize, jpegSubsamp,
+               jpegQual, flags|TJFLAG_NOREALLOC)==-1)
        {
                (*env)->ReleasePrimitiveArrayCritical(env, dst, jpegBuf, 0);
                (*env)->ReleasePrimitiveArrayCritical(env, src, srcBuf, 0);
@@ -174,6 +197,16 @@ JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3
        return (jint)jpegSize;
 }
 
+JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3IIIII_3BIII
+       (JNIEnv *env, jobject obj, jintArray src, jint width, jint pitch,
+               jint height, jint pf, jbyteArray dst, jint jpegSubsamp, jint jpegQual,
+               jint flags)
+{
+       return Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3IIIIIII_3BIII(
+               env, obj, src, 0, 0, width, pitch, height, pf, dst, jpegSubsamp, jpegQual,
+               flags);
+}
+
 JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_encodeYUV___3BIIII_3BII
        (JNIEnv *env, jobject obj, jbyteArray src, jint width, jint pitch,
                jint height, jint pf, jbyteArray dst, jint subsamp, jint flags)
@@ -216,7 +249,7 @@ JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_encodeYUV___
 }
 
 JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_encodeYUV___3IIIII_3BII
-       (JNIEnv *env, jobject obj, jintArray src, jint width, jint pitch,
+       (JNIEnv *env, jobject obj, jintArray src, jint width, jint stride,
                jint height, jint pf, jbyteArray dst, jint subsamp, jint flags)
 {
        tjhandle handle=0;
@@ -226,14 +259,14 @@ JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_encodeYUV___
        gethandle();
 
        if(pf<0 || pf>=org_libjpegturbo_turbojpeg_TJ_NUMPF || width<1 || height<1
-               || pitch<0)
-               _throw("Invalid argument in compress()");
+               || stride<0)
+               _throw("Invalid argument in encodeYUV()");
        if(org_libjpegturbo_turbojpeg_TJ_NUMPF!=TJ_NUMPF)
                _throw("Mismatch between Java and C API");
        if(tjPixelSize[pf]!=sizeof(jint))
                _throw("Pixel format must be 32-bit when encoding from an integer buffer.");
 
-       arraySize=(pitch==0)? width*height:pitch*height;
+       arraySize=(stride==0)? width*height:stride*height;
        if((*env)->GetArrayLength(env, src)<arraySize)
                _throw("Source buffer is not large enough");
        if((*env)->GetArrayLength(env, dst)
@@ -243,7 +276,7 @@ JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_encodeYUV___
        bailif0(srcBuf=(*env)->GetPrimitiveArrayCritical(env, src, 0));
        bailif0(dstBuf=(*env)->GetPrimitiveArrayCritical(env, dst, 0));
 
-       if(tjEncodeYUV2(handle, srcBuf, width, pitch*sizeof(jint), height, pf,
+       if(tjEncodeYUV2(handle, srcBuf, width, stride*sizeof(jint), height, pf,
                dstBuf, subsamp, flags)==-1)
        {
                (*env)->ReleasePrimitiveArrayCritical(env, dst, dstBuf, 0);
@@ -350,12 +383,12 @@ JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
        return;
 }
 
-JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3BIIIII
+JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3BIIIIIII
        (JNIEnv *env, jobject obj, jbyteArray src, jint jpegSize, jbyteArray dst,
-               jint width, jint pitch, jint height, jint pf, jint flags)
+               jint x, jint y, jint width, jint pitch, jint height, jint pf, jint flags)
 {
        tjhandle handle=0;
-       jsize arraySize=0;
+       jsize arraySize=0, actualPitch;
        unsigned char *jpegBuf=NULL, *dstBuf=NULL;
 
        gethandle();
@@ -367,15 +400,17 @@ JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
 
        if((*env)->GetArrayLength(env, src)<jpegSize)
                _throw("Source buffer is not large enough");
-       arraySize=(pitch==0)? width*tjPixelSize[pf]*height:pitch*height;
+       actualPitch=(pitch==0)? width*tjPixelSize[pf]:pitch;
+       arraySize=(y+height-1)*actualPitch + (x+width)*tjPixelSize[pf];
        if((*env)->GetArrayLength(env, dst)<arraySize)
                _throw("Destination buffer is not large enough");
 
        bailif0(jpegBuf=(*env)->GetPrimitiveArrayCritical(env, src, 0));
        bailif0(dstBuf=(*env)->GetPrimitiveArrayCritical(env, dst, 0));
 
-       if(tjDecompress2(handle, jpegBuf, (unsigned long)jpegSize, dstBuf, width,
-               pitch, height, pf, flags)==-1)
+       if(tjDecompress2(handle, jpegBuf, (unsigned long)jpegSize,
+               &dstBuf[y*actualPitch + x*tjPixelSize[pf]], width, pitch, height, pf,
+               flags)==-1)
        {
                (*env)->ReleasePrimitiveArrayCritical(env, dst, dstBuf, 0);
                (*env)->ReleasePrimitiveArrayCritical(env, src, jpegBuf, 0);
@@ -389,12 +424,20 @@ JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
        return;
 }
 
-JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3IIIIII
-       (JNIEnv *env, jobject obj, jbyteArray src, jint jpegSize, jintArray dst,
+JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3BIIIII
+       (JNIEnv *env, jobject obj, jbyteArray src, jint jpegSize, jbyteArray dst,
                jint width, jint pitch, jint height, jint pf, jint flags)
 {
+       Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3BIIIIIII
+               (env, obj, src, jpegSize, dst, 0, 0, width, pitch, height, pf, flags);
+}
+
+JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3IIIIIIII
+       (JNIEnv *env, jobject obj, jbyteArray src, jint jpegSize, jintArray dst,
+               jint x, jint y, jint width, jint stride, jint height, jint pf, jint flags)
+{
        tjhandle handle=0;
-       jsize arraySize=0;
+       jsize arraySize=0, actualStride;
        unsigned char *jpegBuf=NULL, *dstBuf=NULL;
 
        gethandle();
@@ -408,15 +451,17 @@ JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
 
        if((*env)->GetArrayLength(env, src)<jpegSize)
                _throw("Source buffer is not large enough");
-       arraySize=(pitch==0)? width*height:pitch*height;
+       actualStride=(stride==0)? width:stride;
+       arraySize=(y+height-1)*actualStride + x+width;
        if((*env)->GetArrayLength(env, dst)<arraySize)
                _throw("Destination buffer is not large enough");
 
        bailif0(jpegBuf=(*env)->GetPrimitiveArrayCritical(env, src, 0));
        bailif0(dstBuf=(*env)->GetPrimitiveArrayCritical(env, dst, 0));
 
-       if(tjDecompress2(handle, jpegBuf, (unsigned long)jpegSize, dstBuf, width,
-               pitch*sizeof(jint), height, pf, flags)==-1)
+       if(tjDecompress2(handle, jpegBuf, (unsigned long)jpegSize,
+               &dstBuf[(y*actualStride + x)*sizeof(int)], width, stride*sizeof(jint),
+               height, pf, flags)==-1)
        {
                (*env)->ReleasePrimitiveArrayCritical(env, dst, dstBuf, 0);
                (*env)->ReleasePrimitiveArrayCritical(env, src, jpegBuf, 0);
@@ -430,6 +475,15 @@ JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
        return;
 }
 
+JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3IIIIII
+       (JNIEnv *env, jobject obj, jbyteArray src, jint jpegSize, jintArray dst,
+               jint width, jint stride, jint height, jint pf, jint flags)
+{
+       Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3IIIIIIII
+               (env, obj, src, jpegSize, dst, 0, 0, width, stride, height, pf, flags);
+       
+}
+
 JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompressToYUV
        (JNIEnv *env, jobject obj, jbyteArray src, jint jpegSize, jbyteArray dst,
                jint flags)
index 9c046ce..ca39c9e 100755 (executable)
@@ -53,3 +53,12 @@ TURBOJPEG_1.2
                Java_org_libjpegturbo_turbojpeg_TJTransformer_init;
                Java_org_libjpegturbo_turbojpeg_TJTransformer_transform;
 } TURBOJPEG_1.1;
+
+TURBOJPEG_1.3
+{
+       global:
+               Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3BIIIIII_3BIII;
+               Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3IIIIIII_3BIII;
+               Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3BIIIIIII;
+               Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3IIIIIIII;
+} TURBOJPEG_1.2;
index f2485eb..9117273 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2009-2012 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2009-2012, 2014 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -26,7 +26,8 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-/* TurboJPEG/OSS:  this implements the TurboJPEG API using libjpeg-turbo */
+/* TurboJPEG/LJT:  this implements the TurboJPEG API using libjpeg or
+   libjpeg-turbo */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -92,10 +93,22 @@ static const JXFORM_CODE xformtypes[TJ_NUMXOP]=
        JXFORM_TRANSVERSE, JXFORM_ROT_90, JXFORM_ROT_180, JXFORM_ROT_270
 };
 
-#define NUMSF 4
+#define NUMSF 16
 static const tjscalingfactor sf[NUMSF]={
+       {2, 1},
+       {15, 8},
+       {7, 4},
+       {13, 8},
+       {3, 2},
+       {11, 8},
+       {5, 4},
+       {9, 8},
        {1, 1},
+       {7, 8},
+       {3, 4},
+       {5, 8},
        {1, 2},
+       {3, 8},
        {1, 4},
        {1, 8}
 };
@@ -160,12 +173,17 @@ static int setCompDefaults(struct jpeg_compress_struct *cinfo,
                        cinfo->in_color_space=JCS_EXT_XBGR;  break;
                #else
                case TJPF_RGB:
-                       if(RGB_RED==0 && RGB_GREEN==1 && RGB_BLUE==2 && RGB_PIXELSIZE==3)
-                       {
-                               cinfo->in_color_space=JCS_RGB;  break;
-                       }
-               default:
-                       _throw("Unsupported pixel format");
+               case TJPF_BGR:
+               case TJPF_RGBX:
+               case TJPF_BGRX:
+               case TJPF_XRGB:
+               case TJPF_XBGR:
+               case TJPF_RGBA:
+               case TJPF_BGRA:
+               case TJPF_ARGB:
+               case TJPF_ABGR:
+                       cinfo->in_color_space=JCS_RGB;  pixelFormat=TJPF_RGB;
+                       break;
                #endif
        }
 
@@ -189,9 +207,6 @@ static int setCompDefaults(struct jpeg_compress_struct *cinfo,
        cinfo->comp_info[1].v_samp_factor=1;
        cinfo->comp_info[2].v_samp_factor=1;
 
-       #if JCS_EXTENSIONS!=1
-       bailout:
-       #endif
        return retval;
 }
 
@@ -229,10 +244,16 @@ static int setDecompDefaults(struct jpeg_decompress_struct *dinfo,
                #endif
                #else
                case TJPF_RGB:
-                       if(RGB_RED==0 && RGB_GREEN==1 && RGB_BLUE==2 && RGB_PIXELSIZE==3)
-                       {
-                               dinfo->out_color_space=JCS_RGB;  break;
-                       }
+               case TJPF_BGR:
+               case TJPF_RGBX:
+               case TJPF_BGRX:
+               case TJPF_XRGB:
+               case TJPF_XBGR:
+               case TJPF_RGBA:
+               case TJPF_BGRA:
+               case TJPF_ARGB:
+               case TJPF_ABGR:
+                       dinfo->out_color_space=JCS_RGB;  break;
                #endif
                default:
                        _throw("Unsupported pixel format");
@@ -273,6 +294,149 @@ static int getSubsamp(j_decompress_ptr dinfo)
 }
 
 
+#ifndef JCS_EXTENSIONS
+
+/* Conversion functions to emulate the colorspace extensions.  This allows the
+   TurboJPEG wrapper to be used with libjpeg */
+
+#define TORGB(PS, ROFFSET, GOFFSET, BOFFSET) {  \
+       int rowPad=pitch-width*PS;  \
+       while(height--)  \
+       {  \
+               unsigned char *endOfRow=src+width*PS;  \
+               while(src<endOfRow)  \
+               {  \
+                       dst[RGB_RED]=src[ROFFSET];  \
+                       dst[RGB_GREEN]=src[GOFFSET];  \
+                       dst[RGB_BLUE]=src[BOFFSET];  \
+                       dst+=RGB_PIXELSIZE;  src+=PS;  \
+               }  \
+               src+=rowPad;  \
+       }  \
+}
+
+static unsigned char *toRGB(unsigned char *src, int width, int pitch,
+       int height, int pixelFormat, unsigned char *dst)
+{
+       unsigned char *retval=src;
+       switch(pixelFormat)
+       {
+               case TJPF_RGB:
+                       #if RGB_RED!=0 || RGB_GREEN!=1 || RGB_BLUE!=2 || RGB_PIXELSIZE!=3
+                       retval=dst;  TORGB(3, 0, 1, 2);
+                       #endif
+                       break;
+               case TJPF_BGR:
+                       #if RGB_RED!=2 || RGB_GREEN!=1 || RGB_BLUE!=0 || RGB_PIXELSIZE!=3
+                       retval=dst;  TORGB(3, 2, 1, 0);
+                       #endif
+                       break;
+               case TJPF_RGBX:
+               case TJPF_RGBA:
+                       #if RGB_RED!=0 || RGB_GREEN!=1 || RGB_BLUE!=2 || RGB_PIXELSIZE!=4
+                       retval=dst;  TORGB(4, 0, 1, 2);
+                       #endif
+                       break;
+               case TJPF_BGRX:
+               case TJPF_BGRA:
+                       #if RGB_RED!=2 || RGB_GREEN!=1 || RGB_BLUE!=0 || RGB_PIXELSIZE!=4
+                       retval=dst;  TORGB(4, 2, 1, 0);
+                       #endif
+                       break;
+               case TJPF_XRGB:
+               case TJPF_ARGB:
+                       #if RGB_RED!=1 || RGB_GREEN!=2 || RGB_BLUE!=3 || RGB_PIXELSIZE!=4
+                       retval=dst;  TORGB(4, 1, 2, 3);
+                       #endif
+                       break;
+               case TJPF_XBGR:
+               case TJPF_ABGR:
+                       #if RGB_RED!=3 || RGB_GREEN!=2 || RGB_BLUE!=1 || RGB_PIXELSIZE!=4
+                       retval=dst;  TORGB(4, 3, 2, 1);
+                       #endif
+                       break;
+       }
+       return retval;
+}
+
+#define FROMRGB(PS, ROFFSET, GOFFSET, BOFFSET, SETALPHA) {  \
+       int rowPad=pitch-width*PS;  \
+       while(height--)  \
+       {  \
+               unsigned char *endOfRow=dst+width*PS;  \
+               while(dst<endOfRow)  \
+               {  \
+                       dst[ROFFSET]=src[RGB_RED];  \
+                       dst[GOFFSET]=src[RGB_GREEN];  \
+                       dst[BOFFSET]=src[RGB_BLUE];  \
+                       SETALPHA  \
+                       dst+=PS;  src+=RGB_PIXELSIZE;  \
+               }  \
+               dst+=rowPad;  \
+       }  \
+}
+
+static void fromRGB(unsigned char *src, unsigned char *dst, int width,
+       int pitch, int height, int pixelFormat)
+{
+       switch(pixelFormat)
+       {
+               case TJPF_RGB:
+                       #if RGB_RED!=0 || RGB_GREEN!=1 || RGB_BLUE!=2 || RGB_PIXELSIZE!=3
+                       FROMRGB(3, 0, 1, 2,);
+                       #endif
+                       break;
+               case TJPF_BGR:
+                       #if RGB_RED!=2 || RGB_GREEN!=1 || RGB_BLUE!=0 || RGB_PIXELSIZE!=3
+                       FROMRGB(3, 2, 1, 0,);
+                       #endif
+                       break;
+               case TJPF_RGBX:
+                       #if RGB_RED!=0 || RGB_GREEN!=1 || RGB_BLUE!=2 || RGB_PIXELSIZE!=4
+                       FROMRGB(4, 0, 1, 2,);
+                       #endif
+                       break;
+               case TJPF_RGBA:
+                       #if RGB_RED!=0 || RGB_GREEN!=1 || RGB_BLUE!=2 || RGB_PIXELSIZE!=4
+                       FROMRGB(4, 0, 1, 2, dst[3]=0xFF;);
+                       #endif
+                       break;
+               case TJPF_BGRX:
+                       #if RGB_RED!=2 || RGB_GREEN!=1 || RGB_BLUE!=0 || RGB_PIXELSIZE!=4
+                       FROMRGB(4, 2, 1, 0,);
+                       #endif
+                       break;
+               case TJPF_BGRA:
+                       #if RGB_RED!=2 || RGB_GREEN!=1 || RGB_BLUE!=0 || RGB_PIXELSIZE!=4
+                       FROMRGB(4, 2, 1, 0, dst[3]=0xFF;);  return;
+                       #endif
+                       break;
+               case TJPF_XRGB:
+                       #if RGB_RED!=1 || RGB_GREEN!=2 || RGB_BLUE!=3 || RGB_PIXELSIZE!=4
+                       FROMRGB(4, 1, 2, 3,);  return;
+                       #endif
+                       break;
+               case TJPF_ARGB:
+                       #if RGB_RED!=1 || RGB_GREEN!=2 || RGB_BLUE!=3 || RGB_PIXELSIZE!=4
+                       FROMRGB(4, 1, 2, 3, dst[0]=0xFF;);  return;
+                       #endif
+                       break;
+               case TJPF_XBGR:
+                       #if RGB_RED!=3 || RGB_GREEN!=2 || RGB_BLUE!=1 || RGB_PIXELSIZE!=4
+                       FROMRGB(4, 3, 2, 1,);  return;
+                       #endif
+                       break;
+               case TJPF_ABGR:
+                       #if RGB_RED!=3 || RGB_GREEN!=2 || RGB_BLUE!=1 || RGB_PIXELSIZE!=4
+                       FROMRGB(4, 3, 2, 1, dst[0]=0xFF;);  return;
+                       #endif
+                       break;
+       }
+}
+
+#endif
+
+
 /* General API functions */
 
 DLLEXPORT char* DLLCALL tjGetErrorStr(void)
@@ -355,9 +519,9 @@ DLLEXPORT unsigned long DLLCALL tjBufSize(int width, int height,
        if(width<1 || height<1 || jpegSubsamp<0 || jpegSubsamp>=NUMSUBOPT)
                _throw("tjBufSize(): Invalid argument");
 
-       // This allows for rare corner cases in which a JPEG image can actually be
-       // larger than the uncompressed input (we wouldn't mention it if it hadn't
-       // happened before.)
+       /* This allows for rare corner cases in which a JPEG image can actually be
+          larger than the uncompressed input (we wouldn't mention it if it hadn't
+          happened before.) */
        mcuw=tjMCUWidth[jpegSubsamp];
        mcuh=tjMCUHeight[jpegSubsamp];
        chromasf=jpegSubsamp==TJSAMP_GRAY? 0: 4*64/(mcuw*mcuh);
@@ -367,16 +531,15 @@ DLLEXPORT unsigned long DLLCALL tjBufSize(int width, int height,
        return retval;
 }
 
-
 DLLEXPORT unsigned long DLLCALL TJBUFSIZE(int width, int height)
 {
        unsigned long retval=0;
        if(width<1 || height<1)
                _throw("TJBUFSIZE(): Invalid argument");
 
-       // This allows for rare corner cases in which a JPEG image can actually be
-       // larger than the uncompressed input (we wouldn't mention it if it hadn't
-       // happened before.)
+       /* This allows for rare corner cases in which a JPEG image can actually be
+          larger than the uncompressed input (we wouldn't mention it if it hadn't
+          happened before.) */
        retval=PAD(width, 16) * PAD(height, 16) * 6 + 2048;
 
        bailout:
@@ -413,6 +576,9 @@ DLLEXPORT int DLLCALL tjCompress2(tjhandle handle, unsigned char *srcBuf,
        unsigned long *jpegSize, int jpegSubsamp, int jpegQual, int flags)
 {
        int i, retval=0, alloc=1;  JSAMPROW *row_pointer=NULL;
+       #ifndef JCS_EXTENSIONS
+       unsigned char *rgbBuf=NULL;
+       #endif
 
        getinstance(handle)
        if((this->init&COMPRESS)==0)
@@ -432,6 +598,16 @@ DLLEXPORT int DLLCALL tjCompress2(tjhandle handle, unsigned char *srcBuf,
 
        if(pitch==0) pitch=width*tjPixelSize[pixelFormat];
 
+       #ifndef JCS_EXTENSIONS
+       if(pixelFormat!=TJPF_GRAY)
+       {
+               rgbBuf=(unsigned char *)malloc(width*height*RGB_PIXELSIZE);
+               if(!rgbBuf) _throw("tjCompress2(): Memory allocation failure");
+               srcBuf=toRGB(srcBuf, width, pitch, height, pixelFormat, rgbBuf);
+               pitch=width*RGB_PIXELSIZE;
+       }
+       #endif
+
        cinfo->image_width=width;
        cinfo->image_height=height;
 
@@ -464,6 +640,9 @@ DLLEXPORT int DLLCALL tjCompress2(tjhandle handle, unsigned char *srcBuf,
 
        bailout:
        if(cinfo->global_state>CSTATE_START) jpeg_abort_compress(cinfo);
+       #ifndef JCS_EXTENSIONS
+       if(rgbBuf) free(rgbBuf);
+       #endif
        if(row_pointer) free(row_pointer);
        return retval;
 }
@@ -502,10 +681,11 @@ DLLEXPORT int DLLCALL tjEncodeYUV2(tjhandle handle, unsigned char *srcBuf,
        JSAMPLE *ptr=dstBuf;
        unsigned long yuvsize=0;
        jpeg_component_info *compptr;
+       #ifndef JCS_EXTENSIONS
+       unsigned char *rgbBuf=NULL;
+       #endif
 
        getinstance(handle);
-       if((this->init&COMPRESS)==0)
-               _throw("tjEncodeYUV2(): Instance has not been initialized for compression");
 
        for(i=0; i<MAX_COMPONENTS; i++)
        {
@@ -513,6 +693,9 @@ DLLEXPORT int DLLCALL tjEncodeYUV2(tjhandle handle, unsigned char *srcBuf,
                tmpbuf2[i]=NULL;  _tmpbuf2[i]=NULL;  outbuf[i]=NULL;
        }
 
+       if((this->init&COMPRESS)==0)
+               _throw("tjEncodeYUV2(): Instance has not been initialized for compression");
+
        if(srcBuf==NULL || width<=0 || pitch<0 || height<=0 || pixelFormat<0
                || pixelFormat>=TJ_NUMPF || dstBuf==NULL || subsamp<0
                || subsamp>=NUMSUBOPT)
@@ -527,6 +710,16 @@ DLLEXPORT int DLLCALL tjEncodeYUV2(tjhandle handle, unsigned char *srcBuf,
 
        if(pitch==0) pitch=width*tjPixelSize[pixelFormat];
 
+       #ifndef JCS_EXTENSIONS
+       if(pixelFormat!=TJPF_GRAY)
+       {
+               rgbBuf=(unsigned char *)malloc(width*height*RGB_PIXELSIZE);
+               if(!rgbBuf) _throw("tjEncodeYUV2(): Memory allocation failure");
+               srcBuf=toRGB(srcBuf, width, pitch, height, pixelFormat, rgbBuf);
+               pitch=width*RGB_PIXELSIZE;
+       }
+       #endif
+
        cinfo->image_width=width;
        cinfo->image_height=height;
 
@@ -535,10 +728,20 @@ DLLEXPORT int DLLCALL tjEncodeYUV2(tjhandle handle, unsigned char *srcBuf,
        else if(flags&TJFLAG_FORCESSE2) putenv("JSIMD_FORCESSE2=1");
 
        yuvsize=tjBufSizeYUV(width, height, subsamp);
-       jpeg_mem_dest_tj(cinfo, &dstBuf, &yuvsize, 0);
        if(setCompDefaults(cinfo, pixelFormat, subsamp, -1, flags)==-1) return -1;
 
-       jpeg_start_compress(cinfo, TRUE);
+       /* Execute only the parts of jpeg_start_compress() that we need.  If we
+          were to call the whole jpeg_start_compress() function, then it would try
+          to write the file headers, which could overflow the output buffer if the
+          YUV image were very small. */
+       if(cinfo->global_state!=CSTATE_START)
+               _throw("tjEncodeYUV3(): libjpeg API is in the wrong state");
+       (*cinfo->err->reset_error_mgr)((j_common_ptr)cinfo);
+       jinit_c_master_control(cinfo, FALSE);
+       jinit_color_converter(cinfo);
+       jinit_downsampler(cinfo);
+       (*cinfo->cconvert->start_pass)(cinfo);
+
        pw=PAD(width, cinfo->max_h_samp_factor);
        ph=PAD(height, cinfo->max_v_samp_factor);
 
@@ -609,6 +812,9 @@ DLLEXPORT int DLLCALL tjEncodeYUV2(tjhandle handle, unsigned char *srcBuf,
 
        bailout:
        if(cinfo->global_state>CSTATE_START) jpeg_abort_compress(cinfo);
+       #ifndef JCS_EXTENSIONS
+       if(rgbBuf) free(rgbBuf);
+       #endif
        if(row_pointer) free(row_pointer);
        for(i=0; i<MAX_COMPONENTS; i++)
        {
@@ -736,6 +942,10 @@ DLLEXPORT int DLLCALL tjDecompress2(tjhandle handle, unsigned char *jpegBuf,
 {
        int i, retval=0;  JSAMPROW *row_pointer=NULL;
        int jpegwidth, jpegheight, scaledw, scaledh;
+       #ifndef JCS_EXTENSIONS
+       unsigned char *rgbBuf=NULL;
+       unsigned char *_dstBuf=NULL;  int _pitch=0;
+       #endif
 
        getinstance(handle);
        if((this->init&DECOMPRESS)==0)
@@ -773,7 +983,7 @@ DLLEXPORT int DLLCALL tjDecompress2(tjhandle handle, unsigned char *jpegBuf,
                scaledw=TJSCALED(jpegwidth, sf[i]);
                scaledh=TJSCALED(jpegheight, sf[i]);
                if(scaledw<=width && scaledh<=height)
-                               break;
+                       break;
        }
        if(scaledw>width || scaledh>height)
                _throw("tjDecompress2(): Could not scale down to desired image dimensions");
@@ -783,6 +993,21 @@ DLLEXPORT int DLLCALL tjDecompress2(tjhandle handle, unsigned char *jpegBuf,
 
        jpeg_start_decompress(dinfo);
        if(pitch==0) pitch=dinfo->output_width*tjPixelSize[pixelFormat];
+
+       #ifndef JCS_EXTENSIONS
+       if(pixelFormat!=TJPF_GRAY &&
+               (RGB_RED!=tjRedOffset[pixelFormat] ||
+                       RGB_GREEN!=tjGreenOffset[pixelFormat] ||
+                       RGB_BLUE!=tjBlueOffset[pixelFormat] ||
+                       RGB_PIXELSIZE!=tjPixelSize[pixelFormat]))
+       {
+               rgbBuf=(unsigned char *)malloc(width*height*3);
+               if(!rgbBuf) _throw("tjDecompress2(): Memory allocation failure");
+               _pitch=pitch;  pitch=width*3;
+               _dstBuf=dstBuf;  dstBuf=rgbBuf;
+       }
+       #endif
+
        if((row_pointer=(JSAMPROW *)malloc(sizeof(JSAMPROW)
                *dinfo->output_height))==NULL)
                _throw("tjDecompress2(): Memory allocation failure");
@@ -799,8 +1024,15 @@ DLLEXPORT int DLLCALL tjDecompress2(tjhandle handle, unsigned char *jpegBuf,
        }
        jpeg_finish_decompress(dinfo);
 
+       #ifndef JCS_EXTENSIONS
+       fromRGB(rgbBuf, _dstBuf, width, _pitch, height, pixelFormat);
+       #endif
+
        bailout:
        if(dinfo->global_state>DSTATE_START) jpeg_abort_decompress(dinfo);
+       #ifndef JCS_EXTENSIONS
+       if(rgbBuf) free(rgbBuf);
+       #endif
        if(row_pointer) free(row_pointer);
        return retval;
 }
@@ -827,14 +1059,15 @@ DLLEXPORT int DLLCALL tjDecompressToYUV(tjhandle handle,
        JSAMPLE *_tmpbuf=NULL, *ptr=dstBuf;  JSAMPROW *tmpbuf[MAX_COMPONENTS];
 
        getinstance(handle);
-       if((this->init&DECOMPRESS)==0)
-               _throw("tjDecompressToYUV(): Instance has not been initialized for decompression");
 
        for(i=0; i<MAX_COMPONENTS; i++)
        {
                tmpbuf[i]=NULL;  outbuf[i]=NULL;
        }
 
+       if((this->init&DECOMPRESS)==0)
+               _throw("tjDecompressToYUV(): Instance has not been initialized for decompression");
+
        if(jpegBuf==NULL || jpegSize<=0 || dstBuf==NULL)
                _throw("tjDecompressToYUV(): Invalid argument");
 
@@ -891,6 +1124,7 @@ DLLEXPORT int DLLCALL tjDecompressToYUV(tjhandle handle,
        }
 
        if(flags&TJFLAG_FASTUPSAMPLE) dinfo->do_fancy_upsampling=FALSE;
+       if(flags&TJFLAG_FASTDCT) dinfo->dct_method=JDCT_FASTEST;
        dinfo->raw_data_out=TRUE;
 
        jpeg_start_decompress(dinfo);
index 7610221..a563c81 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2009-2012 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2009-2013 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
  * perceptible loss of image clarity (the human eye is more sensitive to small
  * changes in brightness than small changes in color.)  This is called
  * "chrominance subsampling".
+ * <p>
+ * NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the
+ * convention of the digital video community, the TurboJPEG API uses "YUV" to
+ * refer to an image format consisting of Y, Cb, and Cr image planes.
  */
 enum TJSAMP
 {
@@ -85,6 +89,7 @@ enum TJSAMP
   /**
    * 4:4:0 chrominance subsampling.  The JPEG or YUV image will contain one
    * chrominance component for every 1x2 block of pixels in the source image.
+   * Note that 4:4:0 subsampling is not fully accelerated in libjpeg-turbo.
    */
   TJSAMP_440
 };
@@ -246,10 +251,11 @@ static const int tjPixelSize[TJ_NUMPF] = {3, 3, 4, 4, 4, 4, 1, 4, 4, 4, 4};
  */
 #define TJFLAG_FORCESSE3     128
 /**
- * When decompressing, use the fastest chrominance upsampling algorithm
- * available in the underlying codec.  The default is to use smooth upsampling,
- * which creates a smooth transition between neighboring chrominance components
- * in order to reduce upsampling artifacts in the decompressed image.
+ * When decompressing an image that was compressed using chrominance
+ * subsampling, use the fastest chrominance upsampling algorithm available in
+ * the underlying codec.  The default is to use smooth upsampling, which
+ * creates a smooth transition between neighboring chrominance components in
+ * order to reduce upsampling artifacts in the decompressed image.
  */
 #define TJFLAG_FASTUPSAMPLE  256
 /**
@@ -262,26 +268,26 @@ static const int tjPixelSize[TJ_NUMPF] = {3, 3, 4, 4, 4, 4, 1, 4, 4, 4, 4};
 #define TJFLAG_NOREALLOC     1024
 /**
  * Use the fastest DCT/IDCT algorithm available in the underlying codec.  The
- * default if this flag is not specified is implementation-specific.  The
- * libjpeg implementation, for example, uses the fast algorithm by default when
- * compressing, because this has been shown to have only a very slight effect
- * on accuracy, but it uses the accurate algorithm when decompressing, because
- * this has been shown to have a larger effect.
+ * default if this flag is not specified is implementation-specific.  For
+ * example, the implementation of TurboJPEG for libjpeg[-turbo] uses the fast
+ * algorithm by default when compressing, because this has been shown to have
+ * only a very slight effect on accuracy, but it uses the accurate algorithm
+ * when decompressing, because this has been shown to have a larger effect.
  */
 #define TJFLAG_FASTDCT       2048
 /**
  * Use the most accurate DCT/IDCT algorithm available in the underlying codec.
- * The default if this flag is not specified is implementation-specific.  The
- * libjpeg implementation, for example, uses the fast algorithm by default when
- * compressing, because this has been shown to have only a very slight effect
- * on accuracy, but it uses the accurate algorithm when decompressing, because
- * this has been shown to have a larger effect.
+ * The default if this flag is not specified is implementation-specific.  For
+ * example, the implementation of TurboJPEG for libjpeg[-turbo] uses the fast
+ * algorithm by default when compressing, because this has been shown to have
+ * only a very slight effect on accuracy, but it uses the accurate algorithm
+ * when decompressing, because this has been shown to have a larger effect.
  */
 #define TJFLAG_ACCURATEDCT   4096
 
 
 /**
- * Number of transform operations
+ * The number of transform operations
  */
 #define TJ_NUMXOP 8
 
@@ -439,8 +445,8 @@ typedef struct tjtransform
   /**
    * A callback function that can be used to modify the DCT coefficients
    * after they are losslessly transformed but before they are transcoded to a
-   * new JPEG file.  This allows for custom filters or other transformations to
-   * be applied in the frequency domain.
+   * new JPEG image.  This allows for custom filters or other transformations
+   * to be applied in the frequency domain.
    *
    * @param coeffs pointer to an array of transformed DCT coefficients.  (NOTE:
    *        this pointer is not guaranteed to be valid once the callback
@@ -459,7 +465,7 @@ typedef struct tjtransform
    *        0, 1, and 2 in typical JPEG images.)
    * @param transformID ID number of the transformed image to which
    *        <tt>coeffs</tt> belongs.  This is the same as the index of the
-   *        transform in the transforms array that was passed to
+   *        transform in the <tt>transforms</tt> array that was passed to
    *        #tjTransform().
    * @param transform a pointer to a #tjtransform structure that specifies the
    *        parameters and/or cropping region for this transform
@@ -562,7 +568,7 @@ DLLEXPORT int DLLCALL tjCompress2(tjhandle handle, unsigned char *srcBuf,
  * the given parameters.  The number of bytes returned by this function is
  * larger than the size of the uncompressed source image.  The reason for this
  * is that the JPEG format uses 16-bit coefficients, and it is thus possible
- * for a very high-quality JPEG image with very high frequency content to
+ * for a very high-quality JPEG image with very high-frequency content to
  * expand rather than compress when converted to the JPEG format.  Such images
  * represent a very rare corner case, but since there is no way to predict the
  * size of a JPEG image prior to compression, the corner case has to be
@@ -602,13 +608,17 @@ DLLEXPORT unsigned long DLLCALL tjBufSizeYUV(int width, int height,
  * uses the accelerated color conversion routines in TurboJPEG's underlying
  * codec to produce a planar YUV image that is suitable for X Video.
  * Specifically, if the chrominance components are subsampled along the
- * horizontal dimension, then the width of the luminance plane is padded to 2
- * in the output image (same goes for the height of the luminance plane, if the
- * chrominance components are subsampled along the vertical dimension.)  Also,
- * each line of each plane in the output image is padded to 4 bytes.  Although
- * this will work with any subsampling option, it is really only useful in
- * combination with TJ_420, which produces an image compatible with the I420
- * (AKA "YUV420P") format.
+ * horizontal dimension, then the width of the luminance plane is padded to the
+ * nearest multiple of 2 in the output image (same goes for the height of the
+ * luminance plane, if the chrominance components are subsampled along the
+ * vertical dimension.)  Also, each line of each plane in the output image is
+ * padded to 4 bytes.  Although this will work with any subsampling option, it
+ * is really only useful in combination with TJ_420, which produces an image
+ * compatible with the I420 (AKA "YUV420P") format.
+ * <p>
+ * NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the
+ * convention of the digital video community, the TurboJPEG API uses "YUV" to
+ * refer to an image format consisting of Y, Cb, and Cr image planes.
  *
  * @param handle a handle to a TurboJPEG compressor or transformer instance
  * @param srcBuf pointer to an image buffer containing RGB or grayscale pixels
@@ -694,14 +704,15 @@ DLLEXPORT tjscalingfactor* DLLCALL tjGetScalingFactors(int *numscalingfactors);
  *        image.  This buffer should normally be <tt>pitch * scaledHeight</tt>
  *        bytes in size, where <tt>scaledHeight</tt> can be determined by
  *        calling #TJSCALED() with the JPEG image height and one of the scaling
- *        factors returned by #tjGetScalingFactors().  The dstBuf pointer may
- *        also be used to decompress into a specific region of a larger buffer.
+ *        factors returned by #tjGetScalingFactors().  The <tt>dstBuf</tt>
+ *        pointer may also be used to decompress into a specific region of a
+ *        larger buffer.
  * @param width desired width (in pixels) of the destination image.  If this is
- *        smaller than the width of the JPEG image being decompressed, then
+ *        different than the width of the JPEG image being decompressed, then
  *        TurboJPEG will use scaling in the JPEG decompressor to generate the
  *        largest possible image that will fit within the desired width.  If
- *        width is set to 0, then only the height will be considered when
- *        determining the scaled image size.
+ *        <tt>width</tt> is set to 0, then only the height will be considered
+ *        when determining the scaled image size.
  * @param pitch bytes per line of the destination image.  Normally, this is
  *        <tt>scaledWidth * #tjPixelSize[pixelFormat]</tt> if the decompressed
  *        image is unpadded, else <tt>#TJPAD(scaledWidth *
@@ -714,11 +725,11 @@ DLLEXPORT tjscalingfactor* DLLCALL tjGetScalingFactors(int *numscalingfactors);
  *        parameter to 0 is the equivalent of setting it to <tt>scaledWidth
  *        * #tjPixelSize[pixelFormat]</tt>.
  * @param height desired height (in pixels) of the destination image.  If this
- *        is smaller than the height of the JPEG image being decompressed, then
- *        TurboJPEG will use scaling in the JPEG decompressor to generate the
- *        largest possible image that will fit within the desired height.  If
- *        height is set to 0, then only the width will be considered when
- *        determining the scaled image size.
+ *        is different than the height of the JPEG image being decompressed,
+ *        then TurboJPEG will use scaling in the JPEG decompressor to generate
+ *        the largest possible image that will fit within the desired height.
+ *        If <tt>height</tt> is set to 0, then only the width will be
+ *        considered when determining the scaled image size.
  * @param pixelFormat pixel format of the destination image (see @ref
  *        TJPF "Pixel formats".)
  * @param flags the bitwise OR of one or more of the @ref TJFLAG_BOTTOMUP
@@ -735,16 +746,20 @@ DLLEXPORT int DLLCALL tjDecompress2(tjhandle handle,
  * Decompress a JPEG image to a YUV planar image.  This function performs JPEG
  * decompression but leaves out the color conversion step, so a planar YUV
  * image is generated instead of an RGB image.  The padding of the planes in
- * this image is the same as the images generated by #tjEncodeYUV2().  Note
+ * this image is the same as in the images generated by #tjEncodeYUV2().  Note
  * that, if the width or height of the image is not an even multiple of the MCU
  * block size (see #tjMCUWidth and #tjMCUHeight), then an intermediate buffer
  * copy will be performed within TurboJPEG.
+ * <p>
+ * NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the
+ * convention of the digital video community, the TurboJPEG API uses "YUV" to
+ * refer to an image format consisting of Y, Cb, and Cr image planes.
  *
  * @param handle a handle to a TurboJPEG decompressor or transformer instance
  * @param jpegBuf pointer to a buffer containing the JPEG image to decompress
  * @param jpegSize size of the JPEG image (in bytes)
  * @param dstBuf pointer to an image buffer that will receive the YUV image.
- *        Use #tjBufSizeYUV to determine the appropriate size for this buffer
+ *        Use #tjBufSizeYUV() to determine the appropriate size for this buffer
  *        based on the image width, height, and level of subsampling.
  * @param flags the bitwise OR of one or more of the @ref TJFLAG_BOTTOMUP
  *        "flags".
@@ -771,12 +786,12 @@ DLLEXPORT tjhandle DLLCALL tjInitTransform(void);
  * to another without altering the values of the coefficients.  While this is
  * typically faster than decompressing the image, transforming it, and
  * re-compressing it, lossless transforms are not free.  Each lossless
- * transform requires reading and Huffman decoding all of the coefficients in
- * the source image, regardless of the size of the destination image.  Thus,
- * this function provides a means of generating multiple transformed images
- * from the same source or of applying multiple transformations simultaneously,
- * in order to eliminate the need to read the source coefficients multiple
- * times.
+ * transform requires reading and performing Huffman decoding on all of the
+ * coefficients in the source image, regardless of the size of the destination
+ * image.  Thus, this function provides a means of generating multiple
+ * transformed images from the same source or  applying multiple
+ * transformations simultaneously, in order to eliminate the need to read the
+ * source coefficients multiple times.
  *
  * @param handle a handle to a TurboJPEG transformer instance
  * @param jpegBuf pointer to a buffer containing the JPEG image to transform
@@ -792,9 +807,9 @@ DLLEXPORT tjhandle DLLCALL tjInitTransform(void);
  *        -# set <tt>dstBufs[i]</tt> to NULL to tell TurboJPEG to allocate the
  *        buffer for you, or
  *        -# pre-allocate the buffer to a "worst case" size determined by
- *        calling #tjBufSize() with the cropped width and height.  This should
- *        ensure that the buffer never has to be re-allocated (setting
- *        #TJFLAG_NOREALLOC guarantees this.)
+ *        calling #tjBufSize() with the transformed or cropped width and
+ *        height.  This should ensure that the buffer never has to be
+ *        re-allocated (setting #TJFLAG_NOREALLOC guarantees this.)
  *        .
  *        If you choose option 1, <tt>dstSizes[i]</tt> should be set to
  *        the size of your pre-allocated buffer.  In any case, unless you have
@@ -806,7 +821,7 @@ DLLEXPORT tjhandle DLLCALL tjInitTransform(void);
  *        <tt>dstSizes[i]</tt> should be set to the size of the buffer.  Upon
  *        return, <tt>dstSizes[i]</tt> will contain the size of the JPEG image
  *        (in bytes.)
- * @param transforms pointer to an array of n tjtransform structures, each of
+ * @param transforms pointer to an array of n #tjtransform structures, each of
  *        which specifies the transform parameters and/or cropping region for
  *        the corresponding transformed output image.
  * @param flags the bitwise OR of one or more of the @ref TJFLAG_BOTTOMUP
index 2abfbea..775a544 100644 (file)
--- a/usage.txt
+++ b/usage.txt
@@ -1,3 +1,6 @@
+NOTE:  This file was modified by The libjpeg-turbo Project to include only
+information relevant to libjpeg-turbo and to wordsmith certain sections.
+
 USAGE instructions for the Independent JPEG Group's JPEG software
 =================================================================
 
@@ -77,6 +80,10 @@ The basic command line switches for cjpeg are:
                        saying -grayscale, you'll get a smaller JPEG file that
                        takes less time to process.
 
+       -rgb            Create RGB JPEG file.
+                       Using this switch suppresses the conversion from RGB
+                       colorspace input to the default YCbCr JPEG colorspace.
+
        -optimize       Perform optimization of entropy encoding parameters.
                        Without this, default encoding parameters are used.
                        -optimize usually makes the JPEG file a little smaller,
@@ -250,10 +257,11 @@ The basic command line switches for djpeg are:
                        djpeg runs noticeably faster in this mode.
 
        -scale M/N      Scale the output image by a factor M/N.  Currently
-                       the scale factor must be 1/1, 1/2, 1/4, or 1/8.
-                       Scaling is handy if the image is larger than your
-                       screen; also, djpeg runs much faster when scaling
-                       down the output.
+                       the scale factor must be M/8, where M is an integer
+                       between 1 and 16 inclusive, or any reduced fraction
+                       thereof (such as 1/2, 3/4, etc.  Scaling is handy if
+                       the image is larger than your screen; also, djpeg runs
+                       much faster when scaling down the output.
 
        -bmp            Select BMP output format (Windows flavor).  8-bit
                        colormapped format is emitted if -colors or -grayscale
index be4b5c3..ddcf97e 100644 (file)
@@ -5,6 +5,7 @@
 #define LIBJPEG_TURBO_VERSION @VERSION@
 #cmakedefine C_ARITH_CODING_SUPPORTED
 #cmakedefine D_ARITH_CODING_SUPPORTED
+#cmakedefine MEM_SRCDST_SUPPORTED
 
 #define HAVE_PROTOTYPES
 #define HAVE_UNSIGNED_CHAR
diff --git a/win/jpeg62-memsrcdst.def b/win/jpeg62-memsrcdst.def
new file mode 100755 (executable)
index 0000000..4511c8e
--- /dev/null
@@ -0,0 +1,104 @@
+EXPORTS
+       jcopy_block_row @ 1 ; 
+       jcopy_sample_rows @ 2 ; 
+       jdiv_round_up @ 3 ; 
+       jinit_1pass_quantizer @ 4 ; 
+       jinit_2pass_quantizer @ 5 ; 
+       jinit_c_coef_controller @ 6 ; 
+       jinit_c_main_controller @ 7 ; 
+       jinit_c_master_control @ 8 ; 
+       jinit_c_prep_controller @ 9 ; 
+       jinit_color_converter @ 10 ; 
+       jinit_color_deconverter @ 11 ; 
+       jinit_compress_master @ 12 ; 
+       jinit_d_coef_controller @ 13 ; 
+       jinit_d_main_controller @ 14 ; 
+       jinit_d_post_controller @ 15 ; 
+       jinit_downsampler @ 16 ; 
+       jinit_forward_dct @ 17 ; 
+       jinit_huff_decoder @ 18 ; 
+       jinit_huff_encoder @ 19 ; 
+       jinit_input_controller @ 20 ; 
+       jinit_inverse_dct @ 21 ; 
+       jinit_marker_reader @ 22 ; 
+       jinit_marker_writer @ 23 ; 
+       jinit_master_decompress @ 24 ; 
+       jinit_memory_mgr @ 25 ; 
+       jinit_merged_upsampler @ 26 ; 
+       jinit_phuff_decoder @ 27 ; 
+       jinit_phuff_encoder @ 28 ; 
+       jinit_upsampler @ 29 ; 
+       jpeg_CreateCompress @ 30 ; 
+       jpeg_CreateDecompress @ 31 ; 
+       jpeg_abort @ 32 ; 
+       jpeg_abort_compress @ 33 ; 
+       jpeg_abort_decompress @ 34 ; 
+       jpeg_add_quant_table @ 35 ; 
+       jpeg_alloc_huff_table @ 36 ; 
+       jpeg_alloc_quant_table @ 37 ; 
+       jpeg_calc_output_dimensions @ 38 ; 
+       jpeg_consume_input @ 39 ; 
+       jpeg_copy_critical_parameters @ 40 ; 
+       jpeg_default_colorspace @ 41 ; 
+       jpeg_destroy @ 42 ; 
+       jpeg_destroy_compress @ 43 ; 
+       jpeg_destroy_decompress @ 44 ; 
+       jpeg_fdct_float @ 45 ; 
+       jpeg_fdct_ifast @ 46 ; 
+       jpeg_fdct_islow @ 47 ; 
+       jpeg_fill_bit_buffer @ 48 ; 
+       jpeg_finish_compress @ 49 ; 
+       jpeg_finish_decompress @ 50 ; 
+       jpeg_finish_output @ 51 ; 
+       jpeg_free_large @ 52 ; 
+       jpeg_free_small @ 53 ; 
+       jpeg_gen_optimal_table @ 54 ; 
+       jpeg_get_large @ 55 ; 
+       jpeg_get_small @ 56 ; 
+       jpeg_has_multiple_scans @ 57 ; 
+       jpeg_huff_decode @ 58 ; 
+       jpeg_idct_1x1 @ 59 ; 
+       jpeg_idct_2x2 @ 60 ; 
+       jpeg_idct_4x4 @ 61 ; 
+       jpeg_idct_float @ 62 ; 
+       jpeg_idct_ifast @ 63 ; 
+       jpeg_idct_islow @ 64 ; 
+       jpeg_input_complete @ 65 ; 
+       jpeg_make_c_derived_tbl @ 66 ; 
+       jpeg_make_d_derived_tbl @ 67 ; 
+       jpeg_mem_available @ 68 ; 
+       jpeg_mem_init @ 69 ; 
+       jpeg_mem_term @ 70 ; 
+       jpeg_new_colormap @ 71 ; 
+       jpeg_open_backing_store @ 72 ; 
+       jpeg_quality_scaling @ 73 ; 
+       jpeg_read_coefficients @ 74 ; 
+       jpeg_read_header @ 75 ; 
+       jpeg_read_raw_data @ 76 ; 
+       jpeg_read_scanlines @ 77 ; 
+       jpeg_resync_to_restart @ 78 ; 
+       jpeg_save_markers @ 79 ; 
+       jpeg_set_colorspace @ 80 ; 
+       jpeg_set_defaults @ 81 ; 
+       jpeg_set_linear_quality @ 82 ; 
+       jpeg_set_marker_processor @ 83 ; 
+       jpeg_set_quality @ 84 ; 
+       jpeg_simple_progression @ 85 ; 
+       jpeg_start_compress @ 86 ; 
+       jpeg_start_decompress @ 87 ; 
+       jpeg_start_output @ 88 ; 
+       jpeg_std_error @ 89 ; 
+       jpeg_stdio_dest @ 90 ; 
+       jpeg_stdio_src @ 91 ; 
+       jpeg_suppress_tables @ 92 ; 
+       jpeg_write_coefficients @ 93 ; 
+       jpeg_write_m_byte @ 94 ; 
+       jpeg_write_m_header @ 95 ; 
+       jpeg_write_marker @ 96 ; 
+       jpeg_write_raw_data @ 97 ; 
+       jpeg_write_scanlines @ 98 ; 
+       jpeg_write_tables @ 99 ; 
+       jround_up @ 100 ; 
+       jzero_far @ 101 ; 
+       jpeg_mem_dest @ 102 ; 
+       jpeg_mem_src @ 103 ; 
diff --git a/win/jpeg7-memsrcdst.def b/win/jpeg7-memsrcdst.def
new file mode 100644 (file)
index 0000000..8c9f517
--- /dev/null
@@ -0,0 +1,106 @@
+EXPORTS
+       jcopy_block_row @ 1 ; 
+       jcopy_sample_rows @ 2 ; 
+       jdiv_round_up @ 3 ; 
+       jinit_1pass_quantizer @ 4 ; 
+       jinit_2pass_quantizer @ 5 ; 
+       jinit_c_coef_controller @ 6 ; 
+       jinit_c_main_controller @ 7 ; 
+       jinit_c_master_control @ 8 ; 
+       jinit_c_prep_controller @ 9 ; 
+       jinit_color_converter @ 10 ; 
+       jinit_color_deconverter @ 11 ; 
+       jinit_compress_master @ 12 ; 
+       jinit_d_coef_controller @ 13 ; 
+       jinit_d_main_controller @ 14 ; 
+       jinit_d_post_controller @ 15 ; 
+       jinit_downsampler @ 16 ; 
+       jinit_forward_dct @ 17 ; 
+       jinit_huff_decoder @ 18 ; 
+       jinit_huff_encoder @ 19 ; 
+       jinit_input_controller @ 20 ; 
+       jinit_inverse_dct @ 21 ; 
+       jinit_marker_reader @ 22 ; 
+       jinit_marker_writer @ 23 ; 
+       jinit_master_decompress @ 24 ; 
+       jinit_memory_mgr @ 25 ; 
+       jinit_merged_upsampler @ 26 ; 
+       jinit_phuff_decoder @ 27 ; 
+       jinit_phuff_encoder @ 28 ; 
+       jinit_upsampler @ 29 ; 
+       jpeg_CreateCompress @ 30 ; 
+       jpeg_CreateDecompress @ 31 ; 
+       jpeg_abort @ 32 ; 
+       jpeg_abort_compress @ 33 ; 
+       jpeg_abort_decompress @ 34 ; 
+       jpeg_add_quant_table @ 35 ; 
+       jpeg_alloc_huff_table @ 36 ; 
+       jpeg_alloc_quant_table @ 37 ; 
+       jpeg_calc_jpeg_dimensions @ 38 ; 
+       jpeg_calc_output_dimensions @ 39 ; 
+       jpeg_consume_input @ 40 ; 
+       jpeg_copy_critical_parameters @ 41 ; 
+       jpeg_default_colorspace @ 42 ; 
+       jpeg_default_qtables @ 43 ;
+       jpeg_destroy @ 44 ; 
+       jpeg_destroy_compress @ 45 ; 
+       jpeg_destroy_decompress @ 46 ; 
+       jpeg_fdct_float @ 47 ; 
+       jpeg_fdct_ifast @ 48 ; 
+       jpeg_fdct_islow @ 49 ; 
+       jpeg_fill_bit_buffer @ 50 ; 
+       jpeg_finish_compress @ 51 ; 
+       jpeg_finish_decompress @ 52 ; 
+       jpeg_finish_output @ 53 ; 
+       jpeg_free_large @ 54 ; 
+       jpeg_free_small @ 55 ; 
+       jpeg_gen_optimal_table @ 56 ; 
+       jpeg_get_large @ 57 ; 
+       jpeg_get_small @ 58 ; 
+       jpeg_has_multiple_scans @ 59 ; 
+       jpeg_huff_decode @ 60 ; 
+       jpeg_idct_1x1 @ 61 ; 
+       jpeg_idct_2x2 @ 62 ; 
+       jpeg_idct_4x4 @ 63 ; 
+       jpeg_idct_float @ 64 ; 
+       jpeg_idct_ifast @ 65 ; 
+       jpeg_idct_islow @ 66 ; 
+       jpeg_input_complete @ 67 ; 
+       jpeg_make_c_derived_tbl @ 68 ; 
+       jpeg_make_d_derived_tbl @ 69 ; 
+       jpeg_mem_available @ 70 ; 
+       jpeg_mem_init @ 71 ; 
+       jpeg_mem_term @ 72 ; 
+       jpeg_new_colormap @ 73 ; 
+       jpeg_open_backing_store @ 74 ; 
+       jpeg_quality_scaling @ 75 ; 
+       jpeg_read_coefficients @ 76 ; 
+       jpeg_read_header @ 77 ; 
+       jpeg_read_raw_data @ 78 ; 
+       jpeg_read_scanlines @ 79 ; 
+       jpeg_resync_to_restart @ 80 ; 
+       jpeg_save_markers @ 81 ; 
+       jpeg_set_colorspace @ 82 ; 
+       jpeg_set_defaults @ 83 ; 
+       jpeg_set_linear_quality @ 84 ; 
+       jpeg_set_marker_processor @ 85 ; 
+       jpeg_set_quality @ 86 ; 
+       jpeg_simple_progression @ 87 ; 
+       jpeg_start_compress @ 88 ; 
+       jpeg_start_decompress @ 89 ; 
+       jpeg_start_output @ 90 ; 
+       jpeg_std_error @ 91 ; 
+       jpeg_stdio_dest @ 92 ; 
+       jpeg_stdio_src @ 93 ; 
+       jpeg_suppress_tables @ 94 ; 
+       jpeg_write_coefficients @ 95 ; 
+       jpeg_write_m_byte @ 96 ; 
+       jpeg_write_m_header @ 97 ; 
+       jpeg_write_marker @ 98 ; 
+       jpeg_write_raw_data @ 99 ; 
+       jpeg_write_scanlines @ 100 ; 
+       jpeg_write_tables @ 101 ; 
+       jround_up @ 102 ; 
+       jzero_far @ 103 ; 
+       jpeg_mem_dest @ 104 ; 
+       jpeg_mem_src @ 105 ;