From 4296fe52a37736b7533b3bf447b29ad7933a3ab4 Mon Sep 17 00:00:00 2001 From: giraffedata Date: Sat, 24 Nov 2012 19:18:45 +0000 Subject: New test framework, lots of tests git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@1775 9d0c8265-081b-0410-96cb-a4ca84ce46f8 --- converter/pbm/pbmtog3.test | 23 --- doc/HISTORY | 2 + editor/pamcut.test | 10 -- editor/pamenlarge.test | 8 - editor/pamflip/pamflip.test | 12 -- editor/pnminvert.test | 15 -- generator/pbmmake.test | 9 -- test/Execute-Tests | 113 ++++++++++++++ test/Test-Order | 89 +++++++++++ test/all-in-place.ok | 351 ++++++++++++++++++++++++++++++++++++++++++ test/all-in-place.test | 104 +++++++++++++ test/bmp-roundtrip.ok | 2 + test/bmp-roundtrip.test | 6 + test/cut-paste-roundtrip.ok | 1 + test/cut-paste-roundtrip.test | 6 + test/g3-roundtrip.ok | 3 + test/g3-roundtrip.test | 13 ++ test/gif-roundtrip.ok | 3 + test/gif-roundtrip.test | 30 ++++ test/hdiff-roundtrip.ok | 1 + test/hdiff-roundtrip.test | 6 + test/pad-crop-roundtrip.ok | 2 + test/pad-crop-roundtrip.test | 8 + test/pamcut.ok | 4 + test/pamcut.test | 14 ++ test/pamdepth-roundtrip.ok | 8 + test/pamdepth-roundtrip.test | 12 ++ test/pamdice-roundtrip.ok | 1 + test/pamdice-roundtrip.test | 9 ++ test/pamditherbw.ok | 4 + test/pamditherbw.test | 31 ++++ test/pamedge.ok | 77 +++++++++ test/pamedge.test | 7 + test/pamenlarge.ok | 4 + test/pamenlarge.test | 12 ++ test/pamfile.ok | 3 + test/pamfile.test | 7 + test/pamflip-roundtrip.ok | 12 ++ test/pamflip-roundtrip.test | 34 ++++ test/pamflip.ok | 6 + test/pamflip.test | 16 ++ test/pamseq.ok | 1 + test/pamseq.test | 5 + test/pamslice-roundtrip.ok | 2 + test/pamslice-roundtrip.test | 29 ++++ test/pamsumm.ok | 8 + test/pamsumm.test | 13 ++ test/pamtopam.ok | 16 ++ test/pamtopam.test | 9 ++ test/pbmclean.ok | 73 +++++++++ test/pbmclean.test | 16 ++ test/pbmmake.ok | 43 ++++++ test/pbmmake.test | 18 +++ test/pbmminkowski.ok | 23 +++ test/pbmminkowski.test | 10 ++ test/pbmpage.ok | 3 + test/pbmpage.test | 7 + test/pbmpscale.ok | 50 ++++++ test/pbmpscale.test | 11 ++ test/pbmtext.ok | 21 +++ test/pbmtext.test | 11 ++ test/pbmtog3.ok | 11 ++ test/pbmtog3.test | 28 ++++ test/pbmupc.ok | 1 + test/pbmupc.test | 8 + test/pgmhist.ok | 14 ++ test/pgmhist.test | 6 + test/pgmmake.ok | 2 + test/pgmmake.test | 10 ++ test/pgmramp.ok | 32 ++++ test/pgmramp.test | 12 ++ test/pgmtopgm.ok | 1 + test/pgmtopgm.test | 5 + test/pgmtoppm.ok | 3 + test/pgmtoppm.test | 18 +++ test/png-roundtrip.ok | 2 + test/png-roundtrip.test | 7 + test/pnm-pam-roundtrip.ok | 2 + test/pnm-pam-roundtrip.test | 7 + test/pnm-plain-roundtrip.ok | 2 + test/pnm-plain-roundtrip.test | 9 ++ test/pnmcat.ok | 4 + test/pnmcat.test | 9 ++ test/pnminvert-roundtrip.ok | 2 + test/pnminvert-roundtrip.test | 6 + test/pnminvert.ok | 7 + test/pnminvert.test | 20 +++ test/pnmpsnr.ok | 2 + test/pnmpsnr.test | 11 ++ test/pnmremap1.ok | 1 + test/pnmremap1.test | 19 +++ test/pnmremap2.ok | 3 + test/pnmremap2.test | 21 +++ test/pnmtile.ok | 2 + test/pnmtile.test | 12 ++ test/pnmtopnm-plain.ok | 48 ++++++ test/pnmtopnm-plain.test | 10 ++ test/ppmbrighten.ok | 3 + test/ppmbrighten.test | 7 + test/ppmchange-roundtrip.ok | 2 + test/ppmchange-roundtrip.test | 11 ++ test/ppmcie.ok | 1 + test/ppmcie.out-64 | 1 + test/ppmcie.test | 20 +++ test/ppmdim.ok | 13 ++ test/ppmdim.test | 19 +++ test/ppmdither.ok | 3 + test/ppmdither.test | 7 + test/ppmgauss.ok | 81 ++++++++++ test/ppmgauss.test | 11 ++ test/ppmhist.ok | 11 ++ test/ppmhist.test | 7 + test/ppmmake.ok | 2 + test/ppmmake.test | 13 ++ test/ppmmix.ok | 17 ++ test/ppmmix.test | 29 ++++ test/ppmtopgm.ok | 1 + test/ppmtopgm.test | 7 + test/ppmtoppm.ok | 1 + test/ppmtoppm.test | 5 + test/ppmwheel.ok | 2 + test/ppmwheel.test | 113 ++++++++++++++ test/ps-roundtrip.ok | 2 + test/ps-roundtrip.test | 21 +++ test/rgb3-roundtrip.ok | 5 + test/rgb3-roundtrip.test | 31 ++++ test/testgrid.pbm | 3 + test/testimg.ppm | 4 + test/tiff-roundtrip.ok | 4 + test/tiff-roundtrip.test | 20 +++ test/xbm-roundtrip.ok | 2 + test/xbm-roundtrip.test | 6 + test/xpm-roundtrip.ok | 1 + test/xpm-roundtrip.test | 8 + test/xwd-roundtrip.ok | 3 + test/xwd-roundtrip.test | 14 ++ testgrid.pbm | 3 - testimg.ppm | 4 - 138 files changed, 2238 insertions(+), 84 deletions(-) delete mode 100644 converter/pbm/pbmtog3.test delete mode 100644 editor/pamcut.test delete mode 100644 editor/pamenlarge.test delete mode 100644 editor/pamflip/pamflip.test delete mode 100644 editor/pnminvert.test delete mode 100644 generator/pbmmake.test create mode 100755 test/Execute-Tests create mode 100644 test/Test-Order create mode 100644 test/all-in-place.ok create mode 100755 test/all-in-place.test create mode 100644 test/bmp-roundtrip.ok create mode 100755 test/bmp-roundtrip.test create mode 100644 test/cut-paste-roundtrip.ok create mode 100755 test/cut-paste-roundtrip.test create mode 100644 test/g3-roundtrip.ok create mode 100755 test/g3-roundtrip.test create mode 100644 test/gif-roundtrip.ok create mode 100755 test/gif-roundtrip.test create mode 100644 test/hdiff-roundtrip.ok create mode 100755 test/hdiff-roundtrip.test create mode 100644 test/pad-crop-roundtrip.ok create mode 100755 test/pad-crop-roundtrip.test create mode 100644 test/pamcut.ok create mode 100755 test/pamcut.test create mode 100644 test/pamdepth-roundtrip.ok create mode 100755 test/pamdepth-roundtrip.test create mode 100644 test/pamdice-roundtrip.ok create mode 100755 test/pamdice-roundtrip.test create mode 100644 test/pamditherbw.ok create mode 100755 test/pamditherbw.test create mode 100644 test/pamedge.ok create mode 100755 test/pamedge.test create mode 100644 test/pamenlarge.ok create mode 100755 test/pamenlarge.test create mode 100644 test/pamfile.ok create mode 100755 test/pamfile.test create mode 100644 test/pamflip-roundtrip.ok create mode 100755 test/pamflip-roundtrip.test create mode 100644 test/pamflip.ok create mode 100755 test/pamflip.test create mode 100644 test/pamseq.ok create mode 100755 test/pamseq.test create mode 100644 test/pamslice-roundtrip.ok create mode 100755 test/pamslice-roundtrip.test create mode 100644 test/pamsumm.ok create mode 100755 test/pamsumm.test create mode 100644 test/pamtopam.ok create mode 100755 test/pamtopam.test create mode 100644 test/pbmclean.ok create mode 100755 test/pbmclean.test create mode 100644 test/pbmmake.ok create mode 100755 test/pbmmake.test create mode 100644 test/pbmminkowski.ok create mode 100755 test/pbmminkowski.test create mode 100644 test/pbmpage.ok create mode 100755 test/pbmpage.test create mode 100644 test/pbmpscale.ok create mode 100755 test/pbmpscale.test create mode 100644 test/pbmtext.ok create mode 100755 test/pbmtext.test create mode 100644 test/pbmtog3.ok create mode 100755 test/pbmtog3.test create mode 100644 test/pbmupc.ok create mode 100755 test/pbmupc.test create mode 100644 test/pgmhist.ok create mode 100755 test/pgmhist.test create mode 100644 test/pgmmake.ok create mode 100755 test/pgmmake.test create mode 100644 test/pgmramp.ok create mode 100755 test/pgmramp.test create mode 100644 test/pgmtopgm.ok create mode 100755 test/pgmtopgm.test create mode 100644 test/pgmtoppm.ok create mode 100755 test/pgmtoppm.test create mode 100644 test/png-roundtrip.ok create mode 100755 test/png-roundtrip.test create mode 100644 test/pnm-pam-roundtrip.ok create mode 100755 test/pnm-pam-roundtrip.test create mode 100644 test/pnm-plain-roundtrip.ok create mode 100755 test/pnm-plain-roundtrip.test create mode 100644 test/pnmcat.ok create mode 100755 test/pnmcat.test create mode 100644 test/pnminvert-roundtrip.ok create mode 100755 test/pnminvert-roundtrip.test create mode 100644 test/pnminvert.ok create mode 100755 test/pnminvert.test create mode 100644 test/pnmpsnr.ok create mode 100755 test/pnmpsnr.test create mode 100644 test/pnmremap1.ok create mode 100755 test/pnmremap1.test create mode 100644 test/pnmremap2.ok create mode 100755 test/pnmremap2.test create mode 100644 test/pnmtile.ok create mode 100755 test/pnmtile.test create mode 100644 test/pnmtopnm-plain.ok create mode 100755 test/pnmtopnm-plain.test create mode 100644 test/ppmbrighten.ok create mode 100755 test/ppmbrighten.test create mode 100644 test/ppmchange-roundtrip.ok create mode 100755 test/ppmchange-roundtrip.test create mode 100644 test/ppmcie.ok create mode 100644 test/ppmcie.out-64 create mode 100755 test/ppmcie.test create mode 100644 test/ppmdim.ok create mode 100755 test/ppmdim.test create mode 100644 test/ppmdither.ok create mode 100755 test/ppmdither.test create mode 100644 test/ppmgauss.ok create mode 100755 test/ppmgauss.test create mode 100644 test/ppmhist.ok create mode 100755 test/ppmhist.test create mode 100644 test/ppmmake.ok create mode 100755 test/ppmmake.test create mode 100644 test/ppmmix.ok create mode 100755 test/ppmmix.test create mode 100644 test/ppmtopgm.ok create mode 100755 test/ppmtopgm.test create mode 100644 test/ppmtoppm.ok create mode 100755 test/ppmtoppm.test create mode 100644 test/ppmwheel.ok create mode 100755 test/ppmwheel.test create mode 100644 test/ps-roundtrip.ok create mode 100755 test/ps-roundtrip.test create mode 100644 test/rgb3-roundtrip.ok create mode 100755 test/rgb3-roundtrip.test create mode 100644 test/testgrid.pbm create mode 100644 test/testimg.ppm create mode 100644 test/tiff-roundtrip.ok create mode 100755 test/tiff-roundtrip.test create mode 100644 test/xbm-roundtrip.ok create mode 100755 test/xbm-roundtrip.test create mode 100644 test/xpm-roundtrip.ok create mode 100755 test/xpm-roundtrip.test create mode 100644 test/xwd-roundtrip.ok create mode 100755 test/xwd-roundtrip.test delete mode 100644 testgrid.pbm delete mode 100644 testimg.ppm diff --git a/converter/pbm/pbmtog3.test b/converter/pbm/pbmtog3.test deleted file mode 100644 index 9ca45079..00000000 --- a/converter/pbm/pbmtog3.test +++ /dev/null @@ -1,23 +0,0 @@ -echo Test 1. Should print 3697098186 144 -./pbmtog3 ../../testgrid.pbm | cksum -echo Test 2. Should print 1248301383 122 -./pbmtog3 -nofixedwidth ../../testgrid.pbm | cksum -echo Test 3. Should print 686713716 144 -./pbmtog3 -reverse ../../testgrid.pbm | cksum -echo Test 4. Should print 215463240 122 -./pbmtog3 -nofixedwidth -reverse ../../testgrid.pbm | cksum -echo Test 5. Should print 28792587 47 -pbmmake -w 10 10 | ./pbmtog3 | cksum -echo Test 6. Should print 277456854 32 -pbmmake -w 10 10 | ./pbmtog3 -nofixedwidth | cksum -echo Test 7. Should print 28792587 47 -pbmmake -w 10000 10 | ./pbmtog3 | cksum -echo Test 8. Should print 871281767 162 -pbmmake -w 10000 10 | ./pbmtog3 -nofixedwidth | cksum -echo Test 9. Should print 3736247115 62 -pbmmake -b 10 10 | ./pbmtog3 | cksum -echo Test 10. Should print 2820255307 2191856 -pbmmake -g 1700 2286 | ./pbmtog3 | cksum -echo Test 11. Should print 4159089282 2226575 -pbmmake -g 1800 2286 | ./pbmtog3 | cksum -echo Tests done. diff --git a/doc/HISTORY b/doc/HISTORY index 7952997a..1ff2ee71 100644 --- a/doc/HISTORY +++ b/doc/HISTORY @@ -35,6 +35,8 @@ not yet BJH Release 10.61.00 pamgauss: Fix bug: erroneously says -maxval is too big on 64 bit system. Always broken (Pamgauss was added in 10.23 (July 2004). + Add tests. Thanks Prophet of the Way . + 12.09.30 BJH Release 10.60.00 xpmtoppm: major speedup for 3-character-per pixel files, diff --git a/editor/pamcut.test b/editor/pamcut.test deleted file mode 100644 index be70f1fd..00000000 --- a/editor/pamcut.test +++ /dev/null @@ -1,10 +0,0 @@ -echo Test 1. Should print 2958909756 124815 -./pamcut -top 0 -left 0 -width 260 -height 160 -pad ../testimg.ppm | cksum -echo Test 2. Should print 1550940962 10933 -./pamcut -top 200 -left 120 -width 40 -height 40 -pad ../testimg.ppm | cksum -echo Test 3. Should print 708474423 14 -./pamcut -top 5 -left 5 -bottom 5 -right 5 ../testimg.ppm | cksum -echo Test 3. Should print 3412257956 129 -pbmmake -g 50 50 | ./pamcut 5 5 30 30 | cksum - - diff --git a/editor/pamenlarge.test b/editor/pamenlarge.test deleted file mode 100644 index 7584af01..00000000 --- a/editor/pamenlarge.test +++ /dev/null @@ -1,8 +0,0 @@ -echo Test 1. Should print 3424505894 913236 -./pamenlarge 3 ../testimg.ppm | cksum -echo Test 2. Should print 4152147096 304422 -ppmtopgm ../testimg.ppm | ./pamenlarge 3 | cksum -echo Test 3. Should print 3342398172 297 -./pamenlarge 3 ../testgrid.pbm | cksum -echo Test 4. Should print 237488670 3133413 -./pamenlarge 3 -plain ../testimg.ppm | cksum diff --git a/editor/pamflip/pamflip.test b/editor/pamflip/pamflip.test deleted file mode 100644 index 96e889ea..00000000 --- a/editor/pamflip/pamflip.test +++ /dev/null @@ -1,12 +0,0 @@ -echo Test 1. Should print 2116496681 101484 -./pamflip -lr ../testimg.ppm | cksum -echo Test 2. Should print 217037000 101484 -./pamflip -cw ../testimg.ppm | cksum -echo Test 3. Should print 2052917888 101484 -./pamflip -tb ../testimg.ppm | cksum -echo Test 4. Should print 3375384165 41 -./pamflip -lr ../testgrid.pbm | cksum -echo Test 5. Should print 604323149 41 -./pamflip -tb ../testgrid.pbm | cksum -echo Test 6. Should print 490797850 37 -./pamflip -cw ../testgrid.pbm | cksum diff --git a/editor/pnminvert.test b/editor/pnminvert.test deleted file mode 100644 index 5534f20d..00000000 --- a/editor/pnminvert.test +++ /dev/null @@ -1,15 +0,0 @@ -echo Test 1. Should print 1240379484 41 -./pnminvert ../testgrid.pbm | cksum -echo Test 2. Should print 1416115901 101484 -./pnminvert ../testimg.ppm | cksum -echo Test 3. Should print 2961441369 33838 -ppmtopgm ../testimg.ppm | ./pnminvert | cksum -echo Test 4. Should print 2595564405 14 -pbmmake -w 7 7 | ./pnminvert | cksum -echo Test 5. Should print 2595564405 14 -pbmmake -b 7 7 | cksum -echo Test 6. Should print 2595564405 14 -pbmmake -b 7 7 | ./pnminvert | ./pnminvert | cksum -echo Test 7. Should print 2896726098 15 -pbmmake -g 8 8 | ./pnminvert | cksum - diff --git a/generator/pbmmake.test b/generator/pbmmake.test deleted file mode 100644 index 0fd99ccd..00000000 --- a/generator/pbmmake.test +++ /dev/null @@ -1,9 +0,0 @@ -echo Test 1. Should print 3892756435 12 -./pbmmake -white 16 2 | cksum -echo Test 2. Should print 1576602925 8 -./pbmmake -black 1 1 | cksum -echo Test 3. Should print 4272952448 14 -./pbmmake -gray 7 7 | cksum -echo Test 4. Should print 1634688086 15 -./pbmmake -grey 8 8 | cksum -echo Tests done. diff --git a/test/Execute-Tests b/test/Execute-Tests new file mode 100755 index 00000000..104853e5 --- /dev/null +++ b/test/Execute-Tests @@ -0,0 +1,113 @@ +#! /bin/bash + +# Confirm that PBM_TESTPREFIX is set. +# PBM_TESTPREFIX is the directory with the Netpbm programs you want to +# test. This can be null, but this is not recommended. +# +# You can set it here by decommenting and modifying the next line: +# export PBM_TESTPREFIX="/usr/local/bin/" + + +if [ -z $PBM_TESTPREFIX ] + then + echo "Warning: PBM_TESTPREFIX is not set." + echo "Programs in the default execution path:" + echo $PATH + echo "will be tested." +elif [ ! -d $PBM_TESTPREFIX ] + then + echo "Error: No directory named $PBM_TESTPREFIX" + exit 1 +else + # append "/" to end of string if necessary + export PBM_TESTPREFIX=`echo $PBM_TESTPREFIX | sed '/\/$/!s@$@/@'` +fi + +# Set PBM_BINPREFIX. +# PBM_BINPREFIX is the directory where Netpbm programs which play +# auxiliary roles in tests (such as image generators for producing +# test images, analyzers to summarize output and so forth). +# +# If testing a fresh install, this should be the same as PBM_TESTPREFIX. +# If you are developing a single Netpbm program, you may want to +# set this to a directory with stable executables. +# If set to null, executables in the default execution path will +# be used. + +# export PBM_BINPREFIX="/usr/local/bin/" +# export PBM_BINPREFIX="" +export PBM_BINPREFIX=${PBM_TESTPREFIX} + +# Add PBM_BINPREFIX to PATH. +# This is necessary for Netpbm programs (mosly scripts) that call +# other Netpbm programs. + +if [ ! -z $PBM_BINPREFIX ] + then + export PATH=${PBM_BINPREFIX}:$PATH +fi + +# Set tmpdir, which is used in some of the test scripts. +# This must be an existing directory. + +if [ -z $tmpdir ] + then + if [ -z $TMPDIR ] + then + export tmpdir=/tmp/ + else + export tmpdir=$TMPDIR + fi +fi + +# If necessary set the RGBDEF environment variable. +#export RGBDEF=/etc/rgb.txt +#export RGBDEF=/usr/local/netpbm/lib/rgb.txt +#export RGBDEF=/usr/share/emacs/*/etc/rgb.txt + +# Declare arrays used to count and report test results. +# For now only "SUCCESS" and "FAILURE" are used. +declare -a array=(0 0 0 0 0) +declare -a status=("SUCCESS" "FAILURE" "UNEXPECTED SUCCESS" \ + "EXPECTED FAILURE" "NOT SUPPORTED") + +# Execute the tests, as described in the "Test-Order" file. +# +# To execute just one test, or a few tests, replace the grep part +# within backquotes with names of tests you want to run like this: +# +# for t in pbmmake.test pgmmake.test ppmmake.test + +for t in `grep -v "^#" Test-Order | grep "."` +do +echo == $t == +./$t > ${t%.test}.out ; let result=$? +case $result in +0) cmp --quiet ${t%.test}.out ${t%.test}.ok ; + if [ $? -eq 0 ] + then let result=0; rm ${t%.test}.out ; + else let result=1; + fi ;; +1 | 2 | 3 ) ;; +*) let result=1 ;; +esac + +# Print out a summary report. + +echo $t: ${status[${result}]}; echo +let array[${result}]=${array[${result}]}+1 +done + +echo "Test summary:" +echo ================== + +for s in 0 1 2 3 4 +do +if [[ ${array[${s}]} -gt 0 || s -eq 1 ]] +then +echo ${status[${s}]} ${array[${s}]} +fi +done + +echo ================== +echo "All tests done." diff --git a/test/Test-Order b/test/Test-Order new file mode 100644 index 00000000..2801878a --- /dev/null +++ b/test/Test-Order @@ -0,0 +1,89 @@ +# General test + +all-in-place.test + +# Generator tests + +pbmmake.test +pgmmake.test +ppmmake.test +pamseq.test + +pbmpage.test +pbmtext.test +pbmupc.test +pgmramp.test +ppmgauss.test +ppmcie.test +ppmwheel.test + +# Analyzer tests + +pamfile.test +pgmhist.test +ppmhist.test +pamsumm.test +pnmpsnr.test +pbmminkowski.test + +# Basic (internal) converter tests + +pamtopam.test +pgmtopgm.test +ppmtoppm.test +pgmtoppm.test +ppmtopgm.test +pnmtopnm-plain.test + +# Editor tests + +pamditherbw.test + +pbmclean.test +pamcut.test +pnmcat.test +pamflip.test +pamenlarge.test +pnminvert.test + +pbmpscale.test +pnmremap1.test +pnmremap2.test +pnmtile.test +ppmbrighten.test +ppmdither.test +pamedge.test +ppmdim.test + +ppmmix.test + +# Format converter tests + +pbmtog3.test + +# Round-trip tests : editors + +pnm-plain-roundtrip.test +pnm-pam-roundtrip.test +pnminvert-roundtrip.test +pamflip-roundtrip.test +pamdepth-roundtrip.test +pad-crop-roundtrip.test +cut-paste-roundtrip.test +rgb3-roundtrip.test +ppmchange-roundtrip.test +pamdice-roundtrip.test +pamslice-roundtrip.test + +# Round-trip tests : lossless converters + +g3-roundtrip.test +bmp-roundtrip.test +gif-roundtrip.test +png-roundtrip.test +ps-roundtrip.test +tiff-roundtrip.test +xbm-roundtrip.test +xpm-roundtrip.test +xwd-roundtrip.test +hdiff-roundtrip.test diff --git a/test/all-in-place.ok b/test/all-in-place.ok new file mode 100644 index 00000000..52334382 --- /dev/null +++ b/test/all-in-place.ok @@ -0,0 +1,351 @@ +411toppm: ok +asciitopgm: ok +atktopbm: ok +avstopam: ok +bioradtopgm: ok +bmptopnm: ok +bmptoppm: ok +brushtopbm: ok +cameratopam: ok +cistopbm: ok +cmuwmtopbm: ok +ddbugtopbm: ok +escp2topbm: ok +eyuvtoppm: ok +fitstopnm: ok +fstopgm: ok +g3topbm: ok +gemtopbm: ok +gemtopnm: ok +giftopnm: ok +gouldtoppm: ok +hdifftopam: ok +hipstopgm: ok +icontopbm: ok +ilbmtoppm: ok +imgtoppm: ok +infotopam: ok +jbigtopnm: ok +jpeg2ktopam: ok +jpegtopnm: ok +leaftoppm: ok +lispmtopgm: ok +macptopbm: ok +mdatopbm: ok +mgrtopbm: ok +mrftopbm: ok +mtvtoppm: ok +neotoppm: ok +palmtopnm: ok +pamaddnoise: ok +pamarith: ok +pambackground: ok +pambayer: ok +pamchannel: ok +pamcomp: ok +pamcut: ok +pamdeinterlace: ok +pamdepth: ok +pamdice: ok +pamditherbw: ok +pamedge: ok +pamendian: ok +pamenlarge: ok +pamexec: ok +pamfile: ok +pamfixtrunc: ok +pamflip: ok +pamfunc: ok +pamgauss: ok +pamgradient: ok +pamlookup: ok +pammasksharpen: ok +pammixinterlace: ok +pammosaicknit: ok +pamoil: ok +pampaintspill: ok +pamperspective: ok +pampick: ok +pampop9: ok +pamrecolor: ok +pamrgbatopng: ok +pamrubber: ok +pamscale: ok +pamseq: ok +pamsharpmap: ok +pamsharpness: ok +pamsistoaglyph: ok +pamslice: ok +pamsplit: ok +pamstack: ok +pamstereogram: ok +pamstretch: ok +pamsumm: ok +pamsummcol: ok +pamthreshold: ok +pamtilt: ok +pamtoavs: ok +pamtodjvurle: ok +pamtofits: ok +pamtogif: ok +pamtohdiff: ok +pamtohtmltbl: ok +pamtojpeg2k: ok +pamtompfont: ok +pamtooctaveimg: ok +pamtopam: ok +pamtopdbimg: ok +pamtopfm: ok +pamtopnm: ok +pamtosrf: ok +pamtosvg: ok +pamtotga: ok +pamtotiff: ok +pamtouil: ok +pamtoxvmini: ok +pamundice: ok +pamwipeout: ok +pamx: ok +pbmclean: ok +pbmlife: ok +pbmmake: ok +pbmmask: ok +pbmminkowski: ok +pbmpage: ok +pbmpscale: ok +pbmreduce: ok +pbmtext: ok +pbmtextps: ok +pbmto10x: ok +pbmto4425: ok +pbmtoascii: ok +pbmtoatk: ok +pbmtobbnbg: ok +pbmtocis: ok +pbmtocmuwm: ok +pbmtodjvurle: ok +pbmtoepsi: ok +pbmtoepson: ok +pbmtoescp2: ok +pbmtog3: ok +pbmtogem: ok +pbmtogo: ok +pbmtoibm23xx: ok +pbmtoicon: ok +pbmtolj: ok +pbmtoln03: ok +pbmtolps: ok +pbmtomacp: ok +pbmtomatrixorbital: ok +pbmtomda: ok +pbmtomgr: ok +pbmtomrf: ok +pbmtonokia: ok +pbmtopgm: ok +pbmtopi3: ok +pbmtopk: ok +pbmtoplot: ok +pbmtoppa: ok +pbmtopsg3: ok +pbmtoptx: ok +pbmtosunicon: ok +pbmtowbmp: ok +pbmtoxbm: ok +pbmtoybm: ok +pbmtozinc: ok +pbmupc: ok +pc1toppm: ok +pcxtoppm: ok +pdbimgtopam: ok +pfmtopam: ok +pgmabel: ok +pgmbentley: ok +pgmcrater: ok +pgmdeshadow: ok +pgmedge: ok +pgmenhance: ok +pgmhist: ok +pgmkernel: ok +pgmmake: ok +pgmmedian: ok +pgmminkowski: ok +pgmmorphconv: ok +pgmnoise: ok +pgmnorm: ok +pgmoil: ok +pgmramp: ok +pgmslice: ok +pgmtexture: ok +pgmtofs: ok +pgmtolispm: ok +pgmtopbm: ok +pgmtopgm: ok +pgmtoppm: ok +pi1toppm: ok +pi3topbm: ok +picttoppm: ok +pjtoppm: ok +pktopbm: ok +pngtopam: ok +pngtopnm: ok +pnmalias: ok +pnmarith: ok +pnmcat: ok +pnmcolormap: ok +pnmcomp: ok +pnmconvol: ok +pnmcrop: ok +pnmcut: ok +pnmdepth: ok +pnmenlarge: ok +pnmfile: ok +pnmflip: ok +pnmgamma: ok +pnmhisteq: ok +pnmhistmap: ok +pnmindex: ok +pnminterp: ok +pnminvert: ok +pnmmercator: ok +pnmmontage: ok +pnmnlfilt: ok +pnmnorm: ok +pnmpad: ok +pnmpaste: ok +pnmpsnr: ok +pnmremap: ok +pnmrotate: ok +pnmscale: ok +pnmscalefixed: ok +pnmshear: ok +pnmsmooth: ok +pnmsplit: ok +pnmstitch: ok +pnmtile: ok +pnmtoddif: ok +pnmtofiasco: ok +pnmtofits: ok +pnmtojbig: ok +pnmtojpeg: ok +pnmtopalm: ok +pnmtopclxl: ok +pnmtopng: ok +pnmtopnm: ok +pnmtops: ok +pnmtorast: ok +pnmtorle: ok +pnmtosgi: ok +pnmtosir: ok +pnmtotiff: ok +pnmtotiffcmyk: ok +pnmtoxwd: ok +ppm3d: ok +ppmbrighten: ok +ppmchange: ok +ppmcie: ok +ppmcolormask: ok +ppmcolors: ok +ppmdcfont: ok +ppmddumpfont: ok +ppmdim: ok +ppmdist: ok +ppmdither: ok +ppmdmkfont: ok +ppmdraw: ok +ppmflash: ok +ppmforge: ok +ppmglobe: ok +ppmhist: ok +ppmlabel: ok +ppmmake: ok +ppmmix: ok +ppmnorm: ok +ppmntsc: ok +ppmpat: ok +ppmquant: ok +ppmrelief: ok +ppmrough: ok +ppmshift: ok +ppmspread: ok +ppmtoacad: ok +ppmtoapplevol: ok +ppmtoarbtxt: ok +ppmtoascii: ok +ppmtobmp: ok +ppmtoeyuv: ok +ppmtogif: ok +ppmtoicr: ok +ppmtoilbm: ok +ppmtojpeg: ok +ppmtoleaf: ok +ppmtolj: ok +ppmtomitsu: ok +ppmtompeg: ok +ppmtoneo: ok +ppmtopcx: ok +ppmtopgm: ok +ppmtopi1: ok +ppmtopict: ok +ppmtopj: ok +ppmtopjxl: ok +ppmtoppm: ok +ppmtopuzz: ok +ppmtorgb3: ok +ppmtosixel: ok +ppmtospu: ok +ppmtoterm: ok +ppmtouil: ok +ppmtowinicon: ok +ppmtoxpm: ok +ppmtoyuv: ok +ppmtoyuvsplit: ok +ppmtv: ok +ppmwheel: ok +psidtopgm: ok +pstopnm: ok +qrttoppm: ok +rasttopnm: ok +rawtopgm: ok +rawtoppm: ok +rgb3toppm: ok +rlatopam: ok +rletopnm: ok +sbigtopgm: ok +sgitopnm: ok +sirtopnm: ok +sldtoppm: ok +spctoppm: ok +spottopgm: ok +sputoppm: ok +srftopam: ok +sunicontopnm: ok +svgtopam: ok +tgatoppm: ok +thinkjettopbm: ok +tifftopnm: ok +wbmptopbm: ok +winicontoppm: ok +xbmtopbm: ok +ximtoppm: ok +xpmtoppm: ok +xvminitoppm: ok +xwdtopnm: ok +ybmtopbm: ok +yuvsplittoppm: ok +yuvtoppm: ok +zeisstopnm: ok +fiascotopnm: ok +anytopnm: ok +hpcdtoppm: ok +manweb: ok +pbmtox10bm: ok +pnmmargin: ok +pnmnoraw: ok +pnmquant: ok +pnmquantall: ok +pnmtoplainpnm: ok +ppmfade: ok +ppmquantall: ok +ppmrainbow: ok +ppmshadow: ok +ppmtomap: ok diff --git a/test/all-in-place.test b/test/all-in-place.test new file mode 100755 index 00000000..1726337b --- /dev/null +++ b/test/all-in-place.test @@ -0,0 +1,104 @@ +#! /bin/bash +# Tests whether the executable files listed below are in place. + +# See Netpbm Library Prerequisites +# http://netpbm.sourceforge.net/prereq.html +# if make succeeds but this test fails. + +# Test programs which support the --version flag. + +for i in \ + 411toppm asciitopgm atktopbm avstopam bioradtopgm \ + bmptopnm bmptoppm brushtopbm cameratopam cistopbm \ + cmuwmtopbm ddbugtopbm escp2topbm eyuvtoppm fitstopnm \ + fstopgm g3topbm gemtopbm gemtopnm giftopnm gouldtoppm \ + hdifftopam hipstopgm icontopbm ilbmtoppm imgtoppm infotopam \ + jbigtopnm jpeg2ktopam jpegtopnm leaftoppm lispmtopgm \ + macptopbm mdatopbm mgrtopbm mrftopbm mtvtoppm neotoppm \ + palmtopnm pamaddnoise pamarith pambackground pambayer \ + pamchannel pamcomp pamcut pamdeinterlace pamdepth \ + pamdice pamditherbw pamedge pamendian pamenlarge \ + pamexec pamfile pamfixtrunc pamflip pamfunc pamgauss \ + pamgradient pamlookup pammasksharpen pammixinterlace \ + pammosaicknit pamoil pampaintspill pamperspective pampick \ + pampop9 pamrecolor pamrgbatopng pamrubber pamscale pamseq \ + pamsharpmap pamsharpness pamsistoaglyph pamslice pamsplit \ + pamstack pamstereogram pamstretch pamsumm pamsummcol \ + pamthreshold pamtilt pamtoavs pamtodjvurle pamtofits \ + pamtogif pamtohdiff pamtohtmltbl pamtojpeg2k pamtompfont \ + pamtooctaveimg pamtopam pamtopdbimg pamtopfm pamtopnm \ + pamtosrf pamtosvg pamtotga pamtotiff pamtouil pamtoxvmini \ + pamundice pamwipeout pamx pbmclean pbmlife pbmmake pbmmask \ + pbmminkowski pbmpage pbmpscale pbmreduce pbmtext pbmtextps \ + pbmto10x pbmto4425 pbmtoascii pbmtoatk pbmtobbnbg pbmtocis \ + pbmtocmuwm pbmtodjvurle pbmtoepsi pbmtoepson pbmtoescp2 \ + pbmtog3 pbmtogem pbmtogo pbmtoibm23xx pbmtoicon pbmtolj \ + pbmtoln03 pbmtolps pbmtomacp pbmtomatrixorbital pbmtomda \ + pbmtomgr pbmtomrf pbmtonokia pbmtopgm pbmtopi3 pbmtopk \ + pbmtoplot pbmtoppa pbmtopsg3 pbmtoptx pbmtosunicon \ + pbmtowbmp pbmtoxbm pbmtoybm pbmtozinc pbmupc pc1toppm \ + pcxtoppm pdbimgtopam pfmtopam pgmabel pgmbentley pgmcrater \ + pgmdeshadow pgmedge pgmenhance pgmhist pgmkernel pgmmake \ + pgmmedian pgmminkowski pgmmorphconv pgmnoise pgmnorm \ + pgmoil pgmramp pgmslice pgmtexture pgmtofs pgmtolispm \ + pgmtopbm pgmtopgm pgmtoppm pi1toppm pi3topbm picttoppm \ + pjtoppm pktopbm pngtopam pngtopnm pnmalias pnmarith pnmcat \ + pnmcolormap pnmcomp pnmconvol pnmcrop pnmcut pnmdepth \ + pnmenlarge pnmfile pnmflip pnmgamma pnmhisteq pnmhistmap \ + pnmindex pnminterp pnminvert pnmmercator pnmmontage \ + pnmnlfilt pnmnorm pnmpad pnmpaste pnmpsnr pnmremap \ + pnmrotate pnmscale pnmscalefixed pnmshear pnmsmooth \ + pnmsplit pnmstitch pnmtile pnmtoddif pnmtofiasco pnmtofits \ + pnmtojbig pnmtojpeg pnmtopalm pnmtopclxl pnmtopng pnmtopnm \ + pnmtops pnmtorast pnmtorle pnmtosgi pnmtosir pnmtotiff \ + pnmtotiffcmyk pnmtoxwd ppm3d ppmbrighten ppmchange \ + ppmcie ppmcolormask ppmcolors ppmdcfont ppmddumpfont \ + ppmdim ppmdist ppmdither ppmdmkfont ppmdraw ppmflash \ + ppmforge ppmglobe ppmhist ppmlabel ppmmake ppmmix ppmnorm \ + ppmntsc ppmpat ppmquant ppmrelief ppmrough ppmshift \ + ppmspread ppmtoacad ppmtoapplevol ppmtoarbtxt ppmtoascii \ + ppmtobmp ppmtoeyuv ppmtogif ppmtoicr ppmtoilbm ppmtojpeg \ + ppmtoleaf ppmtolj ppmtomitsu ppmtompeg ppmtoneo ppmtopcx \ + ppmtopgm ppmtopi1 ppmtopict ppmtopj ppmtopjxl ppmtoppm \ + ppmtopuzz ppmtorgb3 ppmtosixel ppmtospu ppmtoterm ppmtouil \ + ppmtowinicon ppmtoxpm ppmtoyuv ppmtoyuvsplit ppmtv ppmwheel \ + psidtopgm pstopnm qrttoppm rasttopnm rawtopgm rawtoppm \ + rgb3toppm rlatopam rletopnm sbigtopgm sgitopnm sirtopnm \ + sldtoppm spctoppm spottopgm sputoppm srftopam sunicontopnm \ + svgtopam tgatoppm thinkjettopbm tifftopnm wbmptopbm \ + winicontoppm xbmtopbm ximtoppm xpmtoppm xvminitoppm \ + xwdtopnm ybmtopbm yuvsplittoppm yuvtoppm zeisstopnm + do + ${PBM_TESTPREFIX}$i --version 2> /dev/null; + case $? in + 0) echo $i": ok";; + 127) echo $i": no such file";; + *) echo $i": error" $?;; + esac + done + + +# Test fiascotopnm, which has a unique -v flag + +${PBM_TESTPREFIX}fiascotopnm -v 2> /dev/null + case $? in + 2) echo fiascotopnm": ok";; + 127) echo fiascotopnm": no such file";; + *) echo fiascotopnm": error" $?;; + esac + + +# Test programs which do not have no --version flag. + +for i in \ + anytopnm hpcdtoppm manweb pbmtox10bm pnmmargin \ + pnmnoraw pnmquant pnmquantall pnmtoplainpnm ppmfade ppmquantall \ + ppmrainbow ppmshadow ppmtomap + do + if [ -x ${PBM_TESTPREFIX}$i ] + then echo $i": ok" + elif [ -f ${PBM_TESTPREFIX}$i ] + then echo $i": not executable" + else echo $i": no such file" + fi + done diff --git a/test/bmp-roundtrip.ok b/test/bmp-roundtrip.ok new file mode 100644 index 00000000..67f7a1fe --- /dev/null +++ b/test/bmp-roundtrip.ok @@ -0,0 +1,2 @@ +1926073387 101484 +2425386270 41 diff --git a/test/bmp-roundtrip.test b/test/bmp-roundtrip.test new file mode 100755 index 00000000..af0e6948 --- /dev/null +++ b/test/bmp-roundtrip.test @@ -0,0 +1,6 @@ +#! /bin/bash +# This script tests: bmptopnm ppmtobmp +# Also requires: + +${PBM_TESTPREFIX}ppmtobmp testimg.ppm | ${PBM_TESTPREFIX}bmptopnm | cksum +${PBM_TESTPREFIX}ppmtobmp testgrid.pbm | ${PBM_TESTPREFIX}bmptopnm | cksum \ No newline at end of file diff --git a/test/cut-paste-roundtrip.ok b/test/cut-paste-roundtrip.ok new file mode 100644 index 00000000..82eac5a8 --- /dev/null +++ b/test/cut-paste-roundtrip.ok @@ -0,0 +1 @@ +1926073387 101484 diff --git a/test/cut-paste-roundtrip.test b/test/cut-paste-roundtrip.test new file mode 100755 index 00000000..cd81a1c6 --- /dev/null +++ b/test/cut-paste-roundtrip.test @@ -0,0 +1,6 @@ +#! /bin/bash +# This script tests: pamcut pnmpaste +# Also requires: + +${PBM_TESTPREFIX}pamcut 50 40 100 70 ~/test-netpbm/testimg.ppm | \ +${PBM_TESTPREFIX}pnmpaste -replace - 50 40 ~/test-netpbm/testimg.ppm | cksum diff --git a/test/g3-roundtrip.ok b/test/g3-roundtrip.ok new file mode 100644 index 00000000..bb0b1cf6 --- /dev/null +++ b/test/g3-roundtrip.ok @@ -0,0 +1,3 @@ +0 +0 +0 diff --git a/test/g3-roundtrip.test b/test/g3-roundtrip.test new file mode 100755 index 00000000..c5c21fa0 --- /dev/null +++ b/test/g3-roundtrip.test @@ -0,0 +1,13 @@ +#! /bin/bash +# This script tests: g3topbm pbmtog3 +# Also requires: pnmcrop + +${PBM_TESTPREFIX}pbmtog3 -nofixedwidth testgrid.pbm | \ +${PBM_TESTPREFIX}g3topbm -width=14 | diff - testgrid.pbm ; echo $? + +${PBM_TESTPREFIX}pbmtog3 -nofixedwidth -reversebits testgrid.pbm | \ +${PBM_TESTPREFIX}g3topbm -width=14 -reversebits | diff - testgrid.pbm ; echo $? + +${PBM_TESTPREFIX}pbmtog3 testgrid.pbm | \ +${PBM_TESTPREFIX}g3topbm | ${PBM_BINPREFIX}pnmcrop -white -right -bottom | \ + diff - testgrid.pbm ; echo $? diff --git a/test/gif-roundtrip.ok b/test/gif-roundtrip.ok new file mode 100644 index 00000000..011ebd3a --- /dev/null +++ b/test/gif-roundtrip.ok @@ -0,0 +1,3 @@ +2871603838 33838 +1926073387 101484 +2425386270 41 diff --git a/test/gif-roundtrip.test b/test/gif-roundtrip.test new file mode 100755 index 00000000..73246705 --- /dev/null +++ b/test/gif-roundtrip.test @@ -0,0 +1,30 @@ +#! /bin/bash +# This script tests: giftopnm pamtogif +# Also requires: ppmtopgm ppmtorgb3 rgb3toppm + +# Test 1. Should produce 2871603838 33838 +# which is the result of ppmtopgm testimg.ppm | cksum + +${PBM_BINPREFIX}ppmtopgm testimg.ppm | \ + ${PBM_TESTPREFIX}pamtogif | ${PBM_TESTPREFIX}giftopnm | cksum + +# Test 2. Break up input image into three monochrome planes, +# maxval 255. Transform each plane to gif and back to pgm. +# Reassemble the planes. Result should be identical to input. +# Should print 1926073387 101484 + +cp testimg.ppm ${tmpdir} && +${PBM_BINPREFIX}ppmtorgb3 ${tmpdir}/testimg.ppm && +${PBM_TESTPREFIX}pamtogif ${tmpdir}/testimg.red | \ + ${PBM_TESTPREFIX}giftopnm > ${tmpdir}/out.red && +${PBM_TESTPREFIX}pamtogif ${tmpdir}/testimg.grn | + ${PBM_TESTPREFIX}giftopnm > ${tmpdir}/out.grn && +${PBM_TESTPREFIX}pamtogif ${tmpdir}/testimg.blu | \ + ${PBM_TESTPREFIX}giftopnm | \ + ${PBM_BINPREFIX}rgb3toppm ${tmpdir}/testimg.red ${tmpdir}/testimg.grn - | \ + cksum + +rm ${tmpdir}/testimg.{ppm,red,grn,blu} ${tmpdir}/out.{red,grn} + +# Test 3. Should produce 2425386270 41 +${PBM_TESTPREFIX}pamtogif testgrid.pbm | ${PBM_TESTPREFIX}giftopnm | cksum diff --git a/test/hdiff-roundtrip.ok b/test/hdiff-roundtrip.ok new file mode 100644 index 00000000..82eac5a8 --- /dev/null +++ b/test/hdiff-roundtrip.ok @@ -0,0 +1 @@ +1926073387 101484 diff --git a/test/hdiff-roundtrip.test b/test/hdiff-roundtrip.test new file mode 100755 index 00000000..dbe74701 --- /dev/null +++ b/test/hdiff-roundtrip.test @@ -0,0 +1,6 @@ +#! /bin/bash +# This script tests: hdifftopam pamtohdiff +# Also requires: + +${PBM_TESTPREFIX}pamtohdiff testimg.ppm | \ + ${PBM_TESTPREFIX}hdifftopam -pnm | cksum \ No newline at end of file diff --git a/test/pad-crop-roundtrip.ok b/test/pad-crop-roundtrip.ok new file mode 100644 index 00000000..67f7a1fe --- /dev/null +++ b/test/pad-crop-roundtrip.ok @@ -0,0 +1,2 @@ +1926073387 101484 +2425386270 41 diff --git a/test/pad-crop-roundtrip.test b/test/pad-crop-roundtrip.test new file mode 100755 index 00000000..532b6cbd --- /dev/null +++ b/test/pad-crop-roundtrip.test @@ -0,0 +1,8 @@ +#! /bin/bash +# This script tests: pnmcrop pnmmargin +# Also requires: + +${PBM_TESTPREFIX}pnmmargin -white 10 testimg.ppm | \ + ${PBM_TESTPREFIX}pnmcrop | cksum +${PBM_TESTPREFIX}pnmmargin -white 10 testgrid.pbm | \ + ${PBM_TESTPREFIX}pnmcrop | cksum diff --git a/test/pamcut.ok b/test/pamcut.ok new file mode 100644 index 00000000..61ef99bc --- /dev/null +++ b/test/pamcut.ok @@ -0,0 +1,4 @@ +2958909756 124815 +1550940962 10933 +708474423 14 +3412257956 129 diff --git a/test/pamcut.test b/test/pamcut.test new file mode 100755 index 00000000..080bcad8 --- /dev/null +++ b/test/pamcut.test @@ -0,0 +1,14 @@ +#! /bin/bash +# This script tests: pamcut pbmmake +# Also requires: + +# Test 1. Should print 2958909756 124815 +${PBM_TESTPREFIX}pamcut -top 0 -left 0 -width 260 -height 160 \ + -pad testimg.ppm | cksum +# Test 2. Should print 1550940962 10933 +${PBM_TESTPREFIX}pamcut -top 200 -left 120 -width 40 -height 40 \ + -pad testimg.ppm | cksum +# Test 3. Should print 708474423 14 +${PBM_TESTPREFIX}pamcut -top 5 -left 5 -bottom 5 -right 5 testimg.ppm | cksum +# Test 3. Should print 3412257956 129 +${PBM_TESTPREFIX}pbmmake -g 50 50 | ${PBM_TESTPREFIX}pamcut 5 5 30 30 | cksum diff --git a/test/pamdepth-roundtrip.ok b/test/pamdepth-roundtrip.ok new file mode 100644 index 00000000..89db1a57 --- /dev/null +++ b/test/pamdepth-roundtrip.ok @@ -0,0 +1,8 @@ +1926073387 101484 +1926073387 101484 +1926073387 101484 +1926073387 101484 +1926073387 101484 +1926073387 101484 +1926073387 101484 +2425386270 41 diff --git a/test/pamdepth-roundtrip.test b/test/pamdepth-roundtrip.test new file mode 100755 index 00000000..2795d659 --- /dev/null +++ b/test/pamdepth-roundtrip.test @@ -0,0 +1,12 @@ +#! /bin/bash +# This script tests: pamdepth pgmtopbm +# Also requires: + +for i in 300 500 1023 4095 5000 16383 65535 +do +${PBM_TESTPREFIX}pamdepth $i testimg.ppm | \ + ${PBM_TESTPREFIX}pamdepth 255 | cksum +done + +${PBM_TESTPREFIX}pamdepth 255 testgrid.pbm | ${PBM_TESTPREFIX}pamdepth 1 | \ + ${PBM_TESTPREFIX}pgmtopbm -th -val=0.5 | cksum diff --git a/test/pamdice-roundtrip.ok b/test/pamdice-roundtrip.ok new file mode 100644 index 00000000..82eac5a8 --- /dev/null +++ b/test/pamdice-roundtrip.ok @@ -0,0 +1 @@ +1926073387 101484 diff --git a/test/pamdice-roundtrip.test b/test/pamdice-roundtrip.test new file mode 100755 index 00000000..06fef8b2 --- /dev/null +++ b/test/pamdice-roundtrip.test @@ -0,0 +1,9 @@ +#! /bin/bash +# This script tests: pamdice pamundice +# Also requires: + +${PBM_TESTPREFIX}pamdice testimg.ppm -outstem=${tmpdir}/a -width=50 -height=40 +${PBM_TESTPREFIX}pamundice ${tmpdir}/a_%1d_%1a.ppm -down=4 -across=5 | cksum + +rm ${tmpdir}/a_?_?.ppm + diff --git a/test/pamditherbw.ok b/test/pamditherbw.ok new file mode 100644 index 00000000..0711fa38 --- /dev/null +++ b/test/pamditherbw.ok @@ -0,0 +1,4 @@ +1421025574 33894 +164421928 33894 +486487763 33894 +3606822102 33894 diff --git a/test/pamditherbw.test b/test/pamditherbw.test new file mode 100755 index 00000000..5335f12d --- /dev/null +++ b/test/pamditherbw.test @@ -0,0 +1,31 @@ +#! /bin/bash +# This script tests: pamditherbw +# Also requires: ppmtopgm + +# Make test input +${PBM_BINPREFIX}ppmtopgm testimg.ppm >${tmpdir}/testimg.pgm + +# Test 1. Simple threshold +${PBM_TESTPREFIX}pamditherbw -threshold -val=0.5 \ + ${tmpdir}/testimg.pgm | cksum + +# Test 2. Floyd-Steinberg +#${PBM_TESTPREFIX}pamditherbw -floyd -val=0.5 ${tmpdir}/testimg.pgm | cksum + +# Test 3. Atkinson +#${PBM_TESTPREFIX}pamditherbw -atkinson -val=0.5 ${tmpdir}/testimg.pgm | cksum + +# Test 4. Hilbert +${PBM_TESTPREFIX}pamditherbw -hilbert ${tmpdir}/testimg.pgm | cksum + +# Test 5. Dither-8 +${PBM_TESTPREFIX}pamditherbw -dither8 ${tmpdir}/testimg.pgm | cksum + +# Test 6. Cluster4 +${PBM_TESTPREFIX}pamditherbw -cluster4 ${tmpdir}/testimg.pgm | cksum + +# Test 7. Atkinson +#${PBM_TESTPREFIX}pamditherbw -atkinson -val=0.5 ${tmpdir}/testimg.pgm | cksum + +# Remove test file +rm ${tmpdir}/testimg.pgm diff --git a/test/pamedge.ok b/test/pamedge.ok new file mode 100644 index 00000000..f1df7b80 --- /dev/null +++ b/test/pamedge.ok @@ -0,0 +1,77 @@ +P1 +60 75 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111000000000000000000000000000000000011111111111 +111111111111110000000000000000000000000000000000001111111111 +111111111111110001111111111111111111111111111110000111111111 +111111111111110011111111111111111111111111111111000111111111 +111111111111110001111111111111111111111111111111100111111111 +111111111111110000011111110000000000000000001111100111111111 +111111111111111000001111100000000000000000000111100111111111 +111111111111111110000111000011111111111111000011100111111111 +111111111111111111000111000111111111111111100011100111111111 +111111111111111111100111001111111111111111110001000111111111 +111111111111111111100111001111111111111111110000000111111111 +111111111111111111100111001111111111111111111000001111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111100111001111111111111100000111111111111111 +111111111111111111100111001111111111111000000011111111111111 +111111111111111111100111001111111111111000100011111111111111 +111111111111111111100111000111111111110001110011111111111111 +111111111111111111100111000011111111100001110011111111111111 +111111111111111111100111100000000000000011110011111111111111 +111111111111111111100111110000000000000111110011111111111111 +111111111111111111100111111111111111111111110011111111111111 +111111111111111111100111111111111111111111110011111111111111 +111111111111111111100111111111111111111111110011111111111111 +111111111111111111100111110000000000000111110011111111111111 +111111111111111111100111100000000000000011110011111111111111 +111111111111111111100111000011111111100001110011111111111111 +111111111111111111100111000111111111110001110011111111111111 +111111111111111111100111001111111111111000100011111111111111 +111111111111111111100111001111111111111000000011111111111111 +111111111111111111100111001111111111111100000111111111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111000111000111111111111111111111111111111111 +111111111111111110000111000011111111111111111111111111111111 +111111111111111000001111100000000001111111111111111111111111 +111111111111110000011111110000000000111111111111111111111111 +111111111111110001111111111111111000111111111111111111111111 +111111111111110011111111111111111100111111111111111111111111 +111111111111110001111111111111111000111111111111111111111111 +111111111111110000000000000000000000111111111111111111111111 +111111111111111000000000000000000001111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 diff --git a/test/pamedge.test b/test/pamedge.test new file mode 100755 index 00000000..da1c0145 --- /dev/null +++ b/test/pamedge.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: pamedge +# Also requires: pbmpscale pbmtext pgmtopbm pgmtopgm ppmtopgm + +${PBM_BINPREFIX}pbmtext " F " -nom | ${PBM_BINPREFIX}pbmpscale 5 | \ +${PBM_BINPREFIX}pgmtopgm | ${PBM_TESTPREFIX}pamedge | \ +${PBM_BINPREFIX}ppmtopgm | ${PBM_BINPREFIX}pgmtopbm -th -val=.5 -plain diff --git a/test/pamenlarge.ok b/test/pamenlarge.ok new file mode 100644 index 00000000..40be5918 --- /dev/null +++ b/test/pamenlarge.ok @@ -0,0 +1,4 @@ +3424505894 913236 +4152147096 304422 +3342398172 297 +237488670 3133413 diff --git a/test/pamenlarge.test b/test/pamenlarge.test new file mode 100755 index 00000000..c3efc4b2 --- /dev/null +++ b/test/pamenlarge.test @@ -0,0 +1,12 @@ +#! /bin/bash +# This script tests: pamenlarge +# Also requires: ppmtopgm + +# Test 1. Should print 3424505894 913236 +${PBM_TESTPREFIX}pamenlarge 3 testimg.ppm | cksum +# Test 2. Should print 4152147096 304422 +${PBM_BINPREFIX}ppmtopgm testimg.ppm | ${PBM_TESTPREFIX}pamenlarge 3 | cksum +# Test 3. Should print 3342398172 297 +${PBM_TESTPREFIX}pamenlarge 3 testgrid.pbm | cksum +# Test 4. Should print 237488670 3133413 +${PBM_TESTPREFIX}pamenlarge 3 -plain testimg.ppm | cksum diff --git a/test/pamfile.ok b/test/pamfile.ok new file mode 100644 index 00000000..6cdf0433 --- /dev/null +++ b/test/pamfile.ok @@ -0,0 +1,3 @@ +testimg.ppm: PPM raw, 227 by 149 maxval 255 +testgrid.pbm: PBM raw, 14 by 16 +stdin: PGM raw, 227 by 149 maxval 255 diff --git a/test/pamfile.test b/test/pamfile.test new file mode 100755 index 00000000..36ee557c --- /dev/null +++ b/test/pamfile.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: pamfile +# Also requires: ppmtopgm + +${PBM_TESTPREFIX}pamfile testimg.ppm +${PBM_TESTPREFIX}pamfile testgrid.pbm +${PBM_BINPREFIX}ppmtopgm testimg.ppm | ${PBM_TESTPREFIX}pamfile diff --git a/test/pamflip-roundtrip.ok b/test/pamflip-roundtrip.ok new file mode 100644 index 00000000..653ab007 --- /dev/null +++ b/test/pamflip-roundtrip.ok @@ -0,0 +1,12 @@ +1926073387 101484 +1926073387 101484 +1926073387 101484 +1926073387 101484 +1926073387 101484 +1926073387 101484 +2425386270 41 +2425386270 41 +2425386270 41 +2425386270 41 +2425386270 41 +2425386270 41 diff --git a/test/pamflip-roundtrip.test b/test/pamflip-roundtrip.test new file mode 100755 index 00000000..7a17359f --- /dev/null +++ b/test/pamflip-roundtrip.test @@ -0,0 +1,34 @@ +#! /bin/bash +# This script tests: pamflip +# Also requires: + +${PBM_TESTPREFIX}pamflip -lr testimg.ppm | ${PBM_TESTPREFIX}pamflip -lr | cksum +${PBM_TESTPREFIX}pamflip -tb testimg.ppm | ${PBM_TESTPREFIX}pamflip -tb | cksum +${PBM_TESTPREFIX}pamflip -r180 testimg.ppm | \ + ${PBM_TESTPREFIX}pamflip -r180 | cksum +${PBM_TESTPREFIX}pamflip -xy testimg.ppm | ${PBM_TESTPREFIX}pamflip -xy | cksum +${PBM_TESTPREFIX}pamflip -r90 testimg.ppm | \ + ${PBM_TESTPREFIX}pamflip -r90 | \ + ${PBM_TESTPREFIX}pamflip -r90 | \ + ${PBM_TESTPREFIX}pamflip -r90 | cksum +${PBM_TESTPREFIX}pamflip -r270 testimg.ppm | \ + ${PBM_TESTPREFIX}pamflip -r270 | \ + ${PBM_TESTPREFIX}pamflip -r270 | \ + ${PBM_TESTPREFIX}pamflip -r270 | cksum + +${PBM_TESTPREFIX}pamflip -lr testgrid.pbm | \ + ${PBM_TESTPREFIX}pamflip -lr | cksum +${PBM_TESTPREFIX}pamflip -tb testgrid.pbm | \ + ${PBM_TESTPREFIX}pamflip -tb | cksum +${PBM_TESTPREFIX}pamflip -r180 testgrid.pbm | \ + ${PBM_TESTPREFIX}pamflip -r180 | cksum +${PBM_TESTPREFIX}pamflip -xy testgrid.pbm | \ + ${PBM_TESTPREFIX}pamflip -xy | cksum +${PBM_TESTPREFIX}pamflip -r90 testgrid.pbm | \ + ${PBM_TESTPREFIX}pamflip -r90 | \ + ${PBM_TESTPREFIX}pamflip -r90 | \ + ${PBM_TESTPREFIX}pamflip -r90 | cksum +${PBM_TESTPREFIX}pamflip -r270 testgrid.pbm | \ + ${PBM_TESTPREFIX}pamflip -r270 | \ + ${PBM_TESTPREFIX}pamflip -r270 | \ + ${PBM_TESTPREFIX}pamflip -r270 | cksum diff --git a/test/pamflip.ok b/test/pamflip.ok new file mode 100644 index 00000000..c7427e46 --- /dev/null +++ b/test/pamflip.ok @@ -0,0 +1,6 @@ +2116496681 101484 +217037000 101484 +2052917888 101484 +3375384165 41 +604323149 41 +490797850 37 diff --git a/test/pamflip.test b/test/pamflip.test new file mode 100755 index 00000000..59f8e639 --- /dev/null +++ b/test/pamflip.test @@ -0,0 +1,16 @@ +#! /bin/bash +# This script tests: pamflip +# Also requires: + +# Test 1. Should print 2116496681 101484 +${PBM_TESTPREFIX}pamflip -lr testimg.ppm | cksum +# Test 2. Should print 217037000 101484 +${PBM_TESTPREFIX}pamflip -cw testimg.ppm | cksum +# Test 3. Should print 2052917888 101484 +${PBM_TESTPREFIX}pamflip -tb testimg.ppm | cksum +# Test 4. Should print 3375384165 41 +${PBM_TESTPREFIX}pamflip -lr testgrid.pbm | cksum +# Test 5. Should print 604323149 41 +${PBM_TESTPREFIX}pamflip -tb testgrid.pbm | cksum +# Test 6. Should print 490797850 37 +${PBM_TESTPREFIX}pamflip -cw testgrid.pbm | cksum diff --git a/test/pamseq.ok b/test/pamseq.ok new file mode 100644 index 00000000..52bb3dd8 --- /dev/null +++ b/test/pamseq.ok @@ -0,0 +1 @@ +3929266994 304 diff --git a/test/pamseq.test b/test/pamseq.test new file mode 100755 index 00000000..1c6ae44b --- /dev/null +++ b/test/pamseq.test @@ -0,0 +1,5 @@ +#! /bin/bash +# This script tests: pamseq +# Also requires: + +${PBM_TESTPREFIX}pamseq 1 255 | cksum diff --git a/test/pamslice-roundtrip.ok b/test/pamslice-roundtrip.ok new file mode 100644 index 00000000..f9fe0bb4 --- /dev/null +++ b/test/pamslice-roundtrip.ok @@ -0,0 +1,2 @@ +2425386270 41 +1926073387 101484 diff --git a/test/pamslice-roundtrip.test b/test/pamslice-roundtrip.test new file mode 100755 index 00000000..fd125500 --- /dev/null +++ b/test/pamslice-roundtrip.test @@ -0,0 +1,29 @@ +#! /bin/bash +# This script tests: pamslice +# Also requires: pnmtopnm + +# Slice rows, one by one, out of testgrid.pbm. +# Add header and reconstruct pbm image. +# Note that in pamslice output 0 is white and 1 is black: opposite of PBM +# Should print 2425386270 41 + +(echo "P1" + echo "14 16" + seq 0 15 | while read i; + do + ${PBM_TESTPREFIX}pamslice -row=$i testgrid.pbm | \ + awk '{print $2}' | sed 'y/01/10/'; + done ) | ${PBM_BINPREFIX}pnmtopnm | cksum + +# Slice rows, one by one, out of testimg.ppm. +# Add header and reconstruct pbm image. +# Should print 1926073387 101484 + +(echo "P3" + echo "227 149" + echo "255" + seq 0 148 | while read i; + do + ${PBM_TESTPREFIX}pamslice -row=$i testimg.ppm | awk '{print $2, $3, $4}'; + done ) | ${PBM_BINPREFIX}pnmtopnm | cksum + diff --git a/test/pamsumm.ok b/test/pamsumm.ok new file mode 100644 index 00000000..0643081b --- /dev/null +++ b/test/pamsumm.ok @@ -0,0 +1,8 @@ +56 +0 +1 +0.250000 +10772432 +15 +255 +106.164760 diff --git a/test/pamsumm.test b/test/pamsumm.test new file mode 100755 index 00000000..9c5f1b84 --- /dev/null +++ b/test/pamsumm.test @@ -0,0 +1,13 @@ +#! /bin/bash +# This script tests: pamsumm +# Also requires: + +for type in -sum -min -max -mean + do + ${PBM_TESTPREFIX}pamsumm -brief $type testgrid.pbm + done + +for type in -sum -min -max -mean + do + ${PBM_TESTPREFIX}pamsumm -brief $type testimg.ppm + done diff --git a/test/pamtopam.ok b/test/pamtopam.ok new file mode 100644 index 00000000..dcb597d3 --- /dev/null +++ b/test/pamtopam.ok @@ -0,0 +1,16 @@ +P7 +WIDTH 227 +HEIGHT 149 +DEPTH 3 +MAXVAL 255 +TUPLTYPE RGB +ENDHDR +P7 +WIDTH 14 +HEIGHT 16 +DEPTH 1 +MAXVAL 1 +TUPLTYPE BLACKANDWHITE +ENDHDR +1873848880 101532 +2260748250 293 diff --git a/test/pamtopam.test b/test/pamtopam.test new file mode 100755 index 00000000..1a4cdff6 --- /dev/null +++ b/test/pamtopam.test @@ -0,0 +1,9 @@ +#! /bin/bash +# This script tests: pamtopam +# Also requires: + +${PBM_TESTPREFIX}pamtopam < testimg.ppm | sed '/ENDHDR/q' +${PBM_TESTPREFIX}pamtopam < testgrid.pbm | sed '/ENDHDR/q' + +${PBM_TESTPREFIX}pamtopam < testimg.ppm | cksum +${PBM_TESTPREFIX}pamtopam < testgrid.pbm | cksum diff --git a/test/pbmclean.ok b/test/pbmclean.ok new file mode 100644 index 00000000..71b622d0 --- /dev/null +++ b/test/pbmclean.ok @@ -0,0 +1,73 @@ +P1 +7 7 +1111111 +1111111 +1101011 +1110111 +1101011 +1111111 +1111111 +P1 +7 7 +1111111 +1111111 +1101011 +1110111 +1101011 +1111111 +1111111 +P1 +7 7 +1111111 +1111111 +1101011 +1110111 +1101011 +1111111 +1111111 +P1 +7 7 +0111110 +1111111 +1101011 +1110111 +1101011 +1111111 +0111110 +P1 +7 7 +0111110 +1111111 +1101011 +1110111 +1101011 +1111111 +0111110 +P1 +7 7 +0000000 +0111110 +0100010 +0100010 +0100010 +0111110 +0000000 +P1 +7 7 +0000000 +0110110 +0100010 +0000000 +0100010 +0110110 +0000000 +P1 +7 7 +0000000 +0000000 +0000000 +0000000 +0000000 +0000000 +0000000 +760076056 4210813 diff --git a/test/pbmclean.test b/test/pbmclean.test new file mode 100755 index 00000000..05fe9338 --- /dev/null +++ b/test/pbmclean.test @@ -0,0 +1,16 @@ +#! /bin/bash +# This script tests: pbmclean +# Also requires: pbmmake pbmpage pnmmargin + +${PBM_BINPREFIX}pbmmake -g 3 3 | ${PBM_BINPREFIX}pnmmargin -black 2 \ + >${tmpdir}/test.pbm + +for n in 1 2 3 4 5 6 7 8 +do +${PBM_TESTPREFIX}pbmclean -min=$n -black -plain ${tmpdir}/test.pbm +done + +rm ${tmpdir}/test.pbm + +# Should print 760076056 4210813 +${PBM_BINPREFIX}pbmpage 1 | ${PBM_TESTPREFIX}pbmclean -black | cksum diff --git a/test/pbmmake.ok b/test/pbmmake.ok new file mode 100644 index 00000000..754eefdf --- /dev/null +++ b/test/pbmmake.ok @@ -0,0 +1,43 @@ +P11 10 +P11 11 +P11 10 +P12 20000 +P12 21111 +P12 20110 +P13 3000000000 +P13 3111111111 +P13 3010101010 +P14 40000000000000000 +P14 41111111111111111 +P14 40101101001011010 +P15 50000000000000000000000000 +P15 51111111111111111111111111 +P15 50101010101010101010101010 +P16 6000000000000000000000000000000000000 +P16 6111111111111111111111111111111111111 +P16 6010101101010010101101010010101101010 +P17 70000000000000000000000000000000000000000000000000 +P17 71111111111111111111111111111111111111111111111111 +P17 70101010101010101010101010101010101010101010101010 +P18 80000000000000000000000000000000000000000000000000000000000000000 +P18 81111111111111111111111111111111111111111111111111111111111111111 +P18 80101010110101010010101011010101001010101101010100101010110101010 +4058563256 45 +3969089344 105 +702117756 189 +1343035453 234 +2621551326 363 +1487646353 522 +3096107498 597 +2833028503 801 +4244475883 891 +294944575 1140 +244734977 1419 +2956143361 1539 +2229243214 1863 +1123259599 2217 +3622140854 2367 +194247095 2766 +1824232358 2931 +3651864954 3375 +3302595397 3849 diff --git a/test/pbmmake.test b/test/pbmmake.test new file mode 100755 index 00000000..82fdb941 --- /dev/null +++ b/test/pbmmake.test @@ -0,0 +1,18 @@ +#! /bin/bash +# This script tests: pbmmake +# Also requires: + +for i in `seq 1 8` +do +for color in -w -b -g +do +${PBM_TESTPREFIX}pbmmake -plain $color $i $i | tr -d '\n'; echo +done +done +for i in `seq 8 5 98` +do + ( ${PBM_TESTPREFIX}pbmmake -w $i $i ; + ${PBM_TESTPREFIX}pbmmake -b $i $i ; + ${PBM_TESTPREFIX}pbmmake -g $i $i ) | cksum +done + diff --git a/test/pbmminkowski.ok b/test/pbmminkowski.ok new file mode 100644 index 00000000..71a909ce --- /dev/null +++ b/test/pbmminkowski.ok @@ -0,0 +1,23 @@ + tiles: 1 + x-edges: 2 + y-edges: 2 +vertices: 4 + area: 1 +perimeter: 4 + eulerchi: 1 + + tiles: 5 + x-edges: 10 + y-edges: 10 +vertices: 16 + area: 5 +perimeter: 20 + eulerchi: 1 + + tiles: 56 + x-edges: 112 + y-edges: 112 +vertices: 224 + area: 56 +perimeter: 224 + eulerchi: 56 diff --git a/test/pbmminkowski.test b/test/pbmminkowski.test new file mode 100755 index 00000000..d0376e9e --- /dev/null +++ b/test/pbmminkowski.test @@ -0,0 +1,10 @@ +#! /bin/bash +# This script tests: pbmminkowski +# Also requires: pbmmake pnmmargin + +${PBM_BINPREFIX}pbmmake -w 1 1 | ${PBM_BINPREFIX}pnmmargin -b 1 | \ + ${PBM_TESTPREFIX}pbmminkowski +echo +${PBM_BINPREFIX}pbmmake -g 3 3 | ${PBM_TESTPREFIX}pbmminkowski +echo +${PBM_TESTPREFIX}pbmminkowski testgrid.pbm \ No newline at end of file diff --git a/test/pbmpage.ok b/test/pbmpage.ok new file mode 100644 index 00000000..7f68da74 --- /dev/null +++ b/test/pbmpage.ok @@ -0,0 +1,3 @@ +550172004 4210813 +4142746975 4210813 +2347597649 4210813 diff --git a/test/pbmpage.test b/test/pbmpage.test new file mode 100755 index 00000000..dcf8e688 --- /dev/null +++ b/test/pbmpage.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: pbmpage +# Also requires: + +${PBM_TESTPREFIX}pbmpage 1 | cksum +${PBM_TESTPREFIX}pbmpage 2 | cksum +${PBM_TESTPREFIX}pbmpage 3 | cksum \ No newline at end of file diff --git a/test/pbmpscale.ok b/test/pbmpscale.ok new file mode 100644 index 00000000..e25d4027 --- /dev/null +++ b/test/pbmpscale.ok @@ -0,0 +1,50 @@ +P1 +21 45 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +111111111111111111110 +111111111111111111111 +111111111111111111111 +001111100000000001111 +000111000000000000111 +000111000000000000111 +000111000000000000000 +000111000000000000000 +000111000000000000000 +000111000000000111000 +000111000000000111000 +000111100000001111000 +000111111111111111000 +000111111111111111000 +000111111111111111000 +000111100000001111000 +000111000000000111000 +000111000000000111000 +000111000000000000000 +000111000000000000000 +000111000000000000000 +000111000000000000000 +000111000000000000000 +001111100000000000000 +111111111111000000000 +111111111111000000000 +111111111111000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +2150868536 457 +3761734242 1065 +3462719777 1803 diff --git a/test/pbmpscale.test b/test/pbmpscale.test new file mode 100755 index 00000000..e1125fc7 --- /dev/null +++ b/test/pbmpscale.test @@ -0,0 +1,11 @@ +#! /bin/bash +# This script tests: pbmpscale +# Also requires: pamenlarge pbmtext + +${PBM_BINPREFIX}pbmtext -nomargin "F" | ${PBM_TESTPREFIX}pbmpscale 3 -plain + +for i in 2 3 4 +do +${PBM_BINPREFIX}pamenlarge 2 testgrid.pbm | \ + ${PBM_TESTPREFIX}pbmpscale $i | cksum +done diff --git a/test/pbmtext.ok b/test/pbmtext.ok new file mode 100644 index 00000000..438fe7b8 --- /dev/null +++ b/test/pbmtext.ok @@ -0,0 +1,21 @@ +1427751145 328 +1975911793 129 +3145408696 273 +2662867350 328 +3630387453 129 +1251480181 297 +1522829573 299 +1333433014 114 +4128014259 249 +2350105502 270 +2044333794 84 +2845861861 177 +2754777566 416 +3452484090 174 +2294575230 297 +67558248 387 +1647907430 159 +2846042958 249 +307551150 328 +584153820 114 +3355717231 177 diff --git a/test/pbmtext.test b/test/pbmtext.test new file mode 100755 index 00000000..69fa9b23 --- /dev/null +++ b/test/pbmtext.test @@ -0,0 +1,11 @@ +#! /bin/bash +# This script tests: pbmtext +# Also requires: + +for i in 0123456789 abcdefghijk lmnopqrst uzwxyz ABCDEFGHIJK LMNOPQRST UVWXYZ +do +for flags in "" "-nom" "-builtin fixed" +do +echo $i | ${PBM_TESTPREFIX}pbmtext $flags | cksum +done +done diff --git a/test/pbmtog3.ok b/test/pbmtog3.ok new file mode 100644 index 00000000..a0768f95 --- /dev/null +++ b/test/pbmtog3.ok @@ -0,0 +1,11 @@ +3697098186 144 +1248301383 122 +686713716 144 +215463240 122 +28792587 47 +277456854 32 +28792587 47 +871281767 162 +3736247115 62 +2820255307 2191856 +4159089282 2226575 diff --git a/test/pbmtog3.test b/test/pbmtog3.test new file mode 100755 index 00000000..09b5d784 --- /dev/null +++ b/test/pbmtog3.test @@ -0,0 +1,28 @@ +#! /bin/bash +# This script tests: pbmtog3 +# Also requires: pbmmake + +# Test 1. Should print 3697098186 144 +${PBM_TESTPREFIX}pbmtog3 testgrid.pbm | cksum +# Test 2. Should print 1248301383 122 +${PBM_TESTPREFIX}pbmtog3 -nofixedwidth testgrid.pbm | cksum +# Test 3. Should print 686713716 144 +${PBM_TESTPREFIX}pbmtog3 -reverse testgrid.pbm | cksum +# Test 4. Should print 215463240 122 +${PBM_TESTPREFIX}pbmtog3 -nofixedwidth -reverse testgrid.pbm | cksum +# Test 5. Should print 28792587 47 +${PBM_BINPREFIX}pbmmake -w 10 10 | ${PBM_TESTPREFIX}pbmtog3 | cksum +# Test 6. Should print 277456854 32 +${PBM_BINPREFIX}pbmmake -w 10 10 | \ + ${PBM_TESTPREFIX}pbmtog3 -nofixedwidth | cksum +# Test 7. Should print 28792587 47 +${PBM_BINPREFIX}pbmmake -w 10000 10 | ${PBM_TESTPREFIX}pbmtog3 | cksum +# Test 8. Should print 871281767 162 +${PBM_BINPREFIX}pbmmake -w 10000 10 | \ + ${PBM_TESTPREFIX}pbmtog3 -nofixedwidth | cksum +# Test 9. Should print 3736247115 62 +${PBM_BINPREFIX}pbmmake -b 10 10 | ${PBM_TESTPREFIX}pbmtog3 | cksum +# Test 10. Should print 2820255307 2191856 +${PBM_BINPREFIX}pbmmake -g 1700 2286 | ${PBM_TESTPREFIX}pbmtog3 | cksum +# Test 11. Should print 4159089282 2226575 +${PBM_BINPREFIX}pbmmake -g 1800 2286 | ${PBM_TESTPREFIX}pbmtog3 | cksum diff --git a/test/pbmupc.ok b/test/pbmupc.ok new file mode 100644 index 00000000..3e58f409 --- /dev/null +++ b/test/pbmupc.ok @@ -0,0 +1 @@ +2619309127 10172 diff --git a/test/pbmupc.test b/test/pbmupc.test new file mode 100755 index 00000000..6fa772d7 --- /dev/null +++ b/test/pbmupc.test @@ -0,0 +1,8 @@ +#! /bin/bash +# This script tests: pbmupc +# Also requires: + +for type in -s1 -s2 +do +${PBM_TESTPREFIX}pbmupc $type 0 72890 00011 +done | cksum diff --git a/test/pgmhist.ok b/test/pgmhist.ok new file mode 100644 index 00000000..d98c2244 --- /dev/null +++ b/test/pgmhist.ok @@ -0,0 +1,14 @@ +value count b% w% +----- ----- ------ ------ + 0 2 12.5% 100% + 1 2 25% 87.5% + 2 2 37.5% 75% + 3 2 50% 62.5% + 4 2 62.5% 50% + 5 2 75% 37.5% + 6 2 87.5% 25% + 8 2 100% 12.5% +value count b% w% +----- ----- ------ ------ + 0 168 75% 100% + 255 56 100% 25% diff --git a/test/pgmhist.test b/test/pgmhist.test new file mode 100755 index 00000000..b5e7ef7d --- /dev/null +++ b/test/pgmhist.test @@ -0,0 +1,6 @@ +#! /bin/bash +# This script tests: pgmhist +# Also requires: pgmramp + +${PBM_BINPREFIX}pgmramp -maxval=8 -lr 8 2 | ${PBM_TESTPREFIX}pgmhist +${PBM_TESTPREFIX}pgmhist testgrid.pbm \ No newline at end of file diff --git a/test/pgmmake.ok b/test/pgmmake.ok new file mode 100644 index 00000000..b9a03af2 --- /dev/null +++ b/test/pgmmake.ok @@ -0,0 +1,2 @@ +3662611538 2513 +3109612402 5012 diff --git a/test/pgmmake.test b/test/pgmmake.test new file mode 100755 index 00000000..0180b502 --- /dev/null +++ b/test/pgmmake.test @@ -0,0 +1,10 @@ +#! /bin/bash +# This script tests: pgmmake +# Also requires: + +${PBM_TESTPREFIX}pgmmake 1 50 50 | cksum +${PBM_TESTPREFIX}pgmmake .2 50 100 -maxval=5 | cksum + + + + \ No newline at end of file diff --git a/test/pgmramp.ok b/test/pgmramp.ok new file mode 100644 index 00000000..0971ccd7 --- /dev/null +++ b/test/pgmramp.ok @@ -0,0 +1,32 @@ +P2 +4 4 +3 +0 1 2 3 +0 1 2 3 +0 1 2 3 +0 1 2 3 +P2 +4 4 +3 +0 0 0 0 +1 1 1 1 +2 2 2 2 +3 3 3 3 +P2 +4 4 +3 +0 0 1 0 +0 1 2 1 +1 2 3 2 +0 1 2 1 +P2 +4 4 +3 +0 0 0 0 +0 1 2 1 +0 2 3 2 +0 1 2 1 +1777787286 65551 +2046889993 65551 +1975520432 65551 +807973067 65551 diff --git a/test/pgmramp.test b/test/pgmramp.test new file mode 100755 index 00000000..cf3d91d7 --- /dev/null +++ b/test/pgmramp.test @@ -0,0 +1,12 @@ +#! /bin/bash +# This script tests: pgmramp +# Also requires: + +for type in -lr -tb -rect -ell +do +${PBM_TESTPREFIX}pgmramp -maxval=3 $type 4 4 -plain +done + +for type in -lr -tb -rect -ell +do ${PBM_TESTPREFIX}pgmramp $type 256 256 | cksum +done diff --git a/test/pgmtopgm.ok b/test/pgmtopgm.ok new file mode 100644 index 00000000..53c25a44 --- /dev/null +++ b/test/pgmtopgm.ok @@ -0,0 +1 @@ +729348909 237 diff --git a/test/pgmtopgm.test b/test/pgmtopgm.test new file mode 100755 index 00000000..638cb68b --- /dev/null +++ b/test/pgmtopgm.test @@ -0,0 +1,5 @@ +#! /bin/bash +# This script tests: pgmtopgm +# Also requires: + +${PBM_TESTPREFIX}pgmtopgm < testgrid.pbm | cksum diff --git a/test/pgmtoppm.ok b/test/pgmtoppm.ok new file mode 100644 index 00000000..55e5af95 --- /dev/null +++ b/test/pgmtoppm.ok @@ -0,0 +1,3 @@ +1767073524 779 +1676700883 779 +718580145 779 diff --git a/test/pgmtoppm.test b/test/pgmtoppm.test new file mode 100755 index 00000000..b93d7867 --- /dev/null +++ b/test/pgmtoppm.test @@ -0,0 +1,18 @@ +#! /bin/bash +# This script tests: pgmtoppm +# Also requires: pamseq pamtopnm pgmramp + +${PBM_BINPREFIX}pgmramp -maxval=5 -lr 256 1 >${tmpdir}/test.pgm +${PBM_BINPREFIX}pamseq 3 5 -tupletype=RGB | ${PBM_BINPREFIX}pamtopnm \ + >${tmpdir}/palette + +# Test 1. +${PBM_TESTPREFIX}pgmtoppm green ${tmpdir}/test.pgm | cksum + +${PBM_TESTPREFIX}pgmtoppm yellow-blue ${tmpdir}/test.pgm | cksum + +${PBM_TESTPREFIX}pgmtoppm -map=${tmpdir}/palette ${tmpdir}/test.pgm | cksum + +rm ${tmpdir}/test.pgm ${tmpdir}/palette + + diff --git a/test/png-roundtrip.ok b/test/png-roundtrip.ok new file mode 100644 index 00000000..67f7a1fe --- /dev/null +++ b/test/png-roundtrip.ok @@ -0,0 +1,2 @@ +1926073387 101484 +2425386270 41 diff --git a/test/png-roundtrip.test b/test/png-roundtrip.test new file mode 100755 index 00000000..6f25d1c3 --- /dev/null +++ b/test/png-roundtrip.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: pngtopnm pnmtopng +# Also requires: + +${PBM_TESTPREFIX}pnmtopng testimg.ppm | ${PBM_TESTPREFIX}pngtopnm | cksum +${PBM_TESTPREFIX}pnmtopng testgrid.pbm | ${PBM_TESTPREFIX}pngtopnm | cksum + diff --git a/test/pnm-pam-roundtrip.ok b/test/pnm-pam-roundtrip.ok new file mode 100644 index 00000000..67f7a1fe --- /dev/null +++ b/test/pnm-pam-roundtrip.ok @@ -0,0 +1,2 @@ +1926073387 101484 +2425386270 41 diff --git a/test/pnm-pam-roundtrip.test b/test/pnm-pam-roundtrip.test new file mode 100755 index 00000000..1aef986c --- /dev/null +++ b/test/pnm-pam-roundtrip.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: pamtopam pamtopnm +# Also requires: + +${PBM_TESTPREFIX}pamtopam < testimg.ppm | ${PBM_TESTPREFIX}pamtopnm | cksum +${PBM_TESTPREFIX}pamtopam < testgrid.pbm | ${PBM_TESTPREFIX}pamtopnm | cksum + diff --git a/test/pnm-plain-roundtrip.ok b/test/pnm-plain-roundtrip.ok new file mode 100644 index 00000000..67f7a1fe --- /dev/null +++ b/test/pnm-plain-roundtrip.ok @@ -0,0 +1,2 @@ +1926073387 101484 +2425386270 41 diff --git a/test/pnm-plain-roundtrip.test b/test/pnm-plain-roundtrip.test new file mode 100755 index 00000000..eab0b0d7 --- /dev/null +++ b/test/pnm-plain-roundtrip.test @@ -0,0 +1,9 @@ +#! /bin/bash +# This script tests: pnmtopnm +# Also requires: + +${PBM_TESTPREFIX}pnmtopnm -plain testimg.ppm | \ + ${PBM_TESTPREFIX}pnmtopnm | cksum +${PBM_TESTPREFIX}pnmtopnm -plain testgrid.pbm | \ + ${PBM_TESTPREFIX}pnmtopnm | cksum + diff --git a/test/pnmcat.ok b/test/pnmcat.ok new file mode 100644 index 00000000..68052957 --- /dev/null +++ b/test/pnmcat.ok @@ -0,0 +1,4 @@ +1704087873 73 +4150323653 73 +1522490272 202953 +2862441566 202953 diff --git a/test/pnmcat.test b/test/pnmcat.test new file mode 100755 index 00000000..35efd515 --- /dev/null +++ b/test/pnmcat.test @@ -0,0 +1,9 @@ +#! /bin/bash +# This script tests: pnmcat +# Also requires: + +${PBM_TESTPREFIX}pnmcat -lr testgrid.pbm testgrid.pbm | cksum +${PBM_TESTPREFIX}pnmcat -tb testgrid.pbm testgrid.pbm | cksum + +${PBM_TESTPREFIX}pnmcat -lr testimg.ppm testimg.ppm | cksum +${PBM_TESTPREFIX}pnmcat -tb testimg.ppm testimg.ppm | cksum diff --git a/test/pnminvert-roundtrip.ok b/test/pnminvert-roundtrip.ok new file mode 100644 index 00000000..67f7a1fe --- /dev/null +++ b/test/pnminvert-roundtrip.ok @@ -0,0 +1,2 @@ +1926073387 101484 +2425386270 41 diff --git a/test/pnminvert-roundtrip.test b/test/pnminvert-roundtrip.test new file mode 100755 index 00000000..8cdb6c25 --- /dev/null +++ b/test/pnminvert-roundtrip.test @@ -0,0 +1,6 @@ +#! /bin/bash +# This script tests: pnminvert +# Also requires: + +${PBM_TESTPREFIX}pnminvert testimg.ppm | ${PBM_TESTPREFIX}pnminvert | cksum +${PBM_TESTPREFIX}pnminvert testgrid.pbm | ${PBM_TESTPREFIX}pnminvert | cksum diff --git a/test/pnminvert.ok b/test/pnminvert.ok new file mode 100644 index 00000000..081e53ee --- /dev/null +++ b/test/pnminvert.ok @@ -0,0 +1,7 @@ +1240379484 41 +1416115901 101484 +2961441369 33838 +2595564405 14 +2595564405 14 +2595564405 14 +2896726098 15 diff --git a/test/pnminvert.test b/test/pnminvert.test new file mode 100755 index 00000000..7fc8523c --- /dev/null +++ b/test/pnminvert.test @@ -0,0 +1,20 @@ +#! /bin/bash +# This script tests: pnminvert +# Also requires: pbmmake ppmtopgm + +# Test 1. Should print 1240379484 41 +${PBM_TESTPREFIX}pnminvert testgrid.pbm | cksum +# Test 2. Should print 1416115901 101484 +${PBM_TESTPREFIX}pnminvert testimg.ppm | cksum +# Test 3. Should print 2961441369 33838 +# printed 4215652354 33838 with older ppmtopgm +${PBM_BINPREFIX}ppmtopgm testimg.ppm | ${PBM_TESTPREFIX}pnminvert | cksum +# Test 4. Should print 2595564405 14 +${PBM_BINPREFIX}pbmmake -w 7 7 | ${PBM_TESTPREFIX}pnminvert | cksum +# Test 5. Should print 2595564405 14 +${PBM_BINPREFIX}pbmmake -b 7 7 | cksum +# Test 6. Should print 2595564405 14 +${PBM_BINPREFIX}pbmmake -b 7 7 | ${PBM_TESTPREFIX}pnminvert | \ + ${PBM_TESTPREFIX}pnminvert | cksum +# Test 7. Should print 2896726098 15 +${PBM_BINPREFIX}pbmmake -g 8 8 | ${PBM_TESTPREFIX}pnminvert | cksum diff --git a/test/pnmpsnr.ok b/test/pnmpsnr.ok new file mode 100644 index 00000000..eff18efa --- /dev/null +++ b/test/pnmpsnr.ok @@ -0,0 +1,2 @@ +0.00 dB +don't differ. diff --git a/test/pnmpsnr.test b/test/pnmpsnr.test new file mode 100755 index 00000000..d5aa07f3 --- /dev/null +++ b/test/pnmpsnr.test @@ -0,0 +1,11 @@ +#! /bin/bash +# This script tests: pnmpsnr +# Also requires: pbmmake + +${PBM_BINPREFIX}pbmmake -w 10 10 > ${tmpdir}/w.pbm +${PBM_BINPREFIX}pbmmake -b 10 10 > ${tmpdir}/b.pbm +${PBM_TESTPREFIX}pnmpsnr ${tmpdir}/w.pbm ${tmpdir}/b.pbm 2>&1 | \ + awk '{print $(NF-1),$NF}' +${PBM_TESTPREFIX}pnmpsnr ${tmpdir}/w.pbm ${tmpdir}/w.pbm 2>&1 | \ + awk '{print $(NF-1),$NF}' +rm ${tmpdir}/b.pbm ${tmpdir}/w.pbm diff --git a/test/pnmremap1.ok b/test/pnmremap1.ok new file mode 100644 index 00000000..a6cfc2bd --- /dev/null +++ b/test/pnmremap1.ok @@ -0,0 +1 @@ +2667816854 101482 diff --git a/test/pnmremap1.test b/test/pnmremap1.test new file mode 100755 index 00000000..1e68c8ad --- /dev/null +++ b/test/pnmremap1.test @@ -0,0 +1,19 @@ +#! /bin/bash +# This script tests: pnmremap +# Also requires: pamdepth pamseq pamtopnm + +${PBM_BINPREFIX}pamseq 3 5 -tupletype=RGB | ${PBM_BINPREFIX}pamtopnm \ + > ${tmpdir}/palette +${PBM_BINPREFIX}pamdepth 255 ${tmpdir}/palette > ${tmpdir}/palette255 + +# Test 1. Floyd-Steinberg +# This fails with older versions of Netpbm and x86-64. +# May also fail on other non-Intel architectures. +# v. 10.59.2 +# x86-32: 2667816854 101482 +# x86-64: 3602410851 101482 + +${PBM_TESTPREFIX}pnmremap -mapfile=${tmpdir}/palette -floyd -norandom \ + testimg.ppm | cksum + +rm ${tmpdir}/palette{,255} diff --git a/test/pnmremap2.ok b/test/pnmremap2.ok new file mode 100644 index 00000000..a2d1c0dc --- /dev/null +++ b/test/pnmremap2.ok @@ -0,0 +1,3 @@ +3224011488 101482 +2325696119 101484 +2325696119 101484 diff --git a/test/pnmremap2.test b/test/pnmremap2.test new file mode 100755 index 00000000..f2fd92e0 --- /dev/null +++ b/test/pnmremap2.test @@ -0,0 +1,21 @@ +#! /bin/bash +# This script tests: pnmremap +# Also requires: pamdepth pamseq pamtopnm + +${PBM_BINPREFIX}pamseq 3 5 -tupletype=RGB | ${PBM_BINPREFIX}pamtopnm \ + > ${tmpdir}/palette +${PBM_BINPREFIX}pamdepth 255 ${tmpdir}/palette > ${tmpdir}/palette255 + +# Test 2. Default (unmodified quantization) +${PBM_TESTPREFIX}pnmremap -mapfile=${tmpdir}/palette -nofloyd \ +testimg.ppm | cksum + +# Test 3. Use first color in palette for missing colors +${PBM_TESTPREFIX}pnmremap -mapfile=${tmpdir}/palette255 -nofloyd \ + -firstisdefault testimg.ppm | cksum + +# Test 4. Use black for missing colors +${PBM_TESTPREFIX}pnmremap -mapfile=${tmpdir}/palette255 -nofloyd \ +-missingcolor=black testimg.ppm | cksum + +rm ${tmpdir}/palette{,255} diff --git a/test/pnmtile.ok b/test/pnmtile.ok new file mode 100644 index 00000000..559d0f65 --- /dev/null +++ b/test/pnmtile.ok @@ -0,0 +1,2 @@ +4228632379 259 +0 diff --git a/test/pnmtile.test b/test/pnmtile.test new file mode 100755 index 00000000..b0c14ca6 --- /dev/null +++ b/test/pnmtile.test @@ -0,0 +1,12 @@ +#! /bin/bash +# This script tests: pnmtile +# Also requires: pnmcat + +${PBM_TESTPREFIX}pnmtile 40 50 testgrid.pbm | cksum + +${PBM_TESTPREFIX}pnmtile 454 298 testimg.ppm > ${tmpdir}/testimg4.ppm && +${PBM_BINPREFIX}pnmcat -lr testimg.ppm testimg.ppm > ${tmpdir}/testimg2.ppm && +${PBM_BINPREFIX}pnmcat -tb ${tmpdir}/testimg2.ppm ${tmpdir}/testimg2.ppm | \ +diff - ${tmpdir}/testimg4.ppm && echo $? + +rm ${tmpdir}/testimg{2,4}.ppm diff --git a/test/pnmtopnm-plain.ok b/test/pnmtopnm-plain.ok new file mode 100644 index 00000000..02d99f1e --- /dev/null +++ b/test/pnmtopnm-plain.ok @@ -0,0 +1,48 @@ +P1 +14 16 +10101010101010 +11111111111111 +10101010101010 +11111111111111 +10101010101010 +11111111111111 +10101010101010 +11111111111111 +10101010101010 +11111111111111 +10101010101010 +11111111111111 +10101010101010 +11111111111111 +10101010101010 +11111111111111 +P2 +14 16 +255 +0 255 0 255 0 255 0 255 0 255 0 255 0 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 255 0 255 0 255 0 255 0 255 0 255 0 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 255 0 255 0 255 0 255 0 255 0 255 0 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 255 0 255 0 255 0 255 0 255 0 255 0 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 255 0 255 0 255 0 255 0 255 0 255 0 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 255 0 255 0 255 0 255 0 255 0 255 0 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 255 0 255 0 255 0 255 0 255 0 255 0 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 255 0 255 0 255 0 255 0 255 0 255 0 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 +P3 +14 16 +255 +0 0 0 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 +0 0 0 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 +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 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 +0 0 0 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 +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 diff --git a/test/pnmtopnm-plain.test b/test/pnmtopnm-plain.test new file mode 100755 index 00000000..3cbd5752 --- /dev/null +++ b/test/pnmtopnm-plain.test @@ -0,0 +1,10 @@ +#! /bin/bash +# This script tests: pnmtopnm +# Also requires: pgmtopgm ppmtoppm + +${PBM_TESTPREFIX}pnmtopnm -plain testgrid.pbm + +${PBM_BINPREFIX}pgmtopgm < testgrid.pbm | ${PBM_TESTPREFIX}pnmtopnm -plain + +${PBM_BINPREFIX}ppmtoppm < testgrid.pbm | ${PBM_TESTPREFIX}pnmtopnm -plain | \ + head -n11 diff --git a/test/ppmbrighten.ok b/test/ppmbrighten.ok new file mode 100644 index 00000000..65feb812 --- /dev/null +++ b/test/ppmbrighten.ok @@ -0,0 +1,3 @@ +2737989845 101484 +1059247992 101484 +32344911 101484 diff --git a/test/ppmbrighten.test b/test/ppmbrighten.test new file mode 100755 index 00000000..72bebff4 --- /dev/null +++ b/test/ppmbrighten.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: ppmbrighten +# Also requires: + +${PBM_TESTPREFIX}ppmbrighten -v 100 testimg.ppm | cksum +${PBM_TESTPREFIX}ppmbrighten -v 100 -normalize testimg.ppm | cksum +${PBM_TESTPREFIX}ppmbrighten -s 100 -v -50 testimg.ppm | cksum diff --git a/test/ppmchange-roundtrip.ok b/test/ppmchange-roundtrip.ok new file mode 100644 index 00000000..a676a1f2 --- /dev/null +++ b/test/ppmchange-roundtrip.ok @@ -0,0 +1,2 @@ +2425386270 41 +2425386270 41 diff --git a/test/ppmchange-roundtrip.test b/test/ppmchange-roundtrip.test new file mode 100755 index 00000000..c303c11b --- /dev/null +++ b/test/ppmchange-roundtrip.test @@ -0,0 +1,11 @@ +#! /bin/bash +# This script tests: ppmchange +# Also requires: pgmtopbm pnminvert ppmtopgm + +${PBM_TESTPREFIX}ppmchange black white white black testgrid.pbm | \ +${PBM_BINPREFIX}pnminvert | ${PBM_BINPREFIX}ppmtopgm | \ +${PBM_BINPREFIX}pgmtopbm -th -val=0.5 | cksum + +${PBM_TESTPREFIX}ppmchange black white white black testgrid.pbm | \ +${PBM_TESTPREFIX}ppmchange black white white black -plain | \ +${PBM_BINPREFIX}ppmtopgm | ${PBM_BINPREFIX}pgmtopbm -th -val=0.5 | cksum diff --git a/test/ppmcie.ok b/test/ppmcie.ok new file mode 100644 index 00000000..3398b2f7 --- /dev/null +++ b/test/ppmcie.ok @@ -0,0 +1 @@ +955840041 786447 diff --git a/test/ppmcie.out-64 b/test/ppmcie.out-64 new file mode 100644 index 00000000..3d8ca13a --- /dev/null +++ b/test/ppmcie.out-64 @@ -0,0 +1 @@ +2583941766 786447 diff --git a/test/ppmcie.test b/test/ppmcie.test new file mode 100755 index 00000000..cd84536a --- /dev/null +++ b/test/ppmcie.test @@ -0,0 +1,20 @@ +#! /bin/bash +# This script tests: ppmcie +# Also requires: + +# Test 1. Should print 955840041 786447 +# Without -nolabel -noaxes -nowpoint -noblack older versions of +# Netpbm produce slightly different charts. +# Output from "ppmcie | cksum" : +# v. 10.35.86: 288356530 786447 +# v. 10.59.2 : 2292601420 786447 +# +# This test fails when ppmcie is compiled with SSE features are turned on. +# Note that Gcc turns on SSE,SSE2 on by default for x86-64. + +# v. 10.59.2 +# x86 32 bit: 955840041 786447 +# x86 64 bit: 4208660683 786447 + +${PBM_TESTPREFIX}ppmcie -nolabel -noaxes -nowpoint -noblack | cksum + diff --git a/test/ppmdim.ok b/test/ppmdim.ok new file mode 100644 index 00000000..9c55e064 --- /dev/null +++ b/test/ppmdim.ok @@ -0,0 +1,13 @@ +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok diff --git a/test/ppmdim.test b/test/ppmdim.test new file mode 100755 index 00000000..27bbc4e1 --- /dev/null +++ b/test/ppmdim.test @@ -0,0 +1,19 @@ +#! /bin/bash +# This script tests: ppmdim +# Also requires: pamfunc pamarith pamsumm + +# Compare ppmdim and pamfunc with various dim factors +# Due to the difference rounding methods, pamfunc produces slightly +# brighter images, by about 0.5 per pixel. +# If the mean difference is between 0 and 0.75 we consider the output +# normal. This works for dim values up to 0.994 . + +for i in 0.125 0.25 0.5 0.75 0.1 0.0117 0.2 0.4 0.333 0.666 0.8 0.9 0.95 + do + ${PBM_TESTPREFIX}ppmdim $i testimg.ppm > ${tmpdir}/dim1.ppm + ${PBM_BINPREFIX}pamfunc -mult=$i testimg.ppm > ${tmpdir}/dim2.ppm + ${PBM_BINPREFIX}pnmarith -diff ${tmpdir}/dim1.ppm ${tmpdir}/dim2.ppm | \ + ${PBM_BINPREFIX}pamsumm -mean -brief | \ + awk '{print $1<0.75 ? "ok" : "fail"}' + done +rm ${tmpdir}/dim[12].ppm diff --git a/test/ppmdither.ok b/test/ppmdither.ok new file mode 100644 index 00000000..3159f17e --- /dev/null +++ b/test/ppmdither.ok @@ -0,0 +1,3 @@ +1519741676 101482 +3886084802 101482 +3737986353 101482 diff --git a/test/ppmdither.test b/test/ppmdither.test new file mode 100755 index 00000000..5fea0bb4 --- /dev/null +++ b/test/ppmdither.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: ppmdither +# Also requires: + +${PBM_TESTPREFIX}ppmdither testimg.ppm | cksum +${PBM_TESTPREFIX}ppmdither -red 2 -green 2 -blue 2 testimg.ppm | cksum +${PBM_TESTPREFIX}ppmdither -dim 2 testimg.ppm | cksum diff --git a/test/ppmgauss.ok b/test/ppmgauss.ok new file mode 100644 index 00000000..cf708d64 --- /dev/null +++ b/test/ppmgauss.ok @@ -0,0 +1,81 @@ +3712518499 55 +3712518499 55 +1147844094 55 +731871722 55 +1259293616 55 +4234223225 55 +171732531 55 +448293386 55 +3030522957 55 +757204806 62 +757204806 62 +2890088558 62 +4276668903 62 +1462902064 62 +4161772187 62 +2741154810 62 +417660035 62 +1026188683 62 +1236982144 71 +1236982144 71 +2668915323 71 +499504068 71 +3377926681 71 +1877781725 71 +1741784255 71 +2975827721 71 +185899480 71 +1890880170 82 +1890880170 82 +2007282168 82 +2290578407 82 +3295586348 82 +3202728672 82 +3794283497 82 +1136760947 82 +2659761303 82 +3268058875 95 +3268058875 95 +4112134785 95 +3700010306 95 +909823480 95 +2336604848 95 +3042873446 95 +299128630 95 +1852505233 95 +3614879265 110 +3614879265 110 +3727088180 110 +3861671574 110 +952180714 110 +1393452065 110 +1551903756 110 +2198775655 110 +3231547603 110 +3184597171 127 +3184597171 127 +406519147 127 +1836966508 127 +1796467962 127 +1932274161 127 +1852779549 127 +1734420920 127 +2400421918 127 +3252995941 148 +3252995941 148 +2022176119 148 +473753498 148 +3178129210 148 +2278608777 148 +3169785704 148 +85136480 148 +2396646133 148 +1871459418 169 +1871459418 169 +639002491 169 +1810927285 169 +4218372313 169 +1320749835 169 +4102007360 169 +3022719594 169 +1769176609 169 diff --git a/test/ppmgauss.test b/test/ppmgauss.test new file mode 100755 index 00000000..a75d272c --- /dev/null +++ b/test/ppmgauss.test @@ -0,0 +1,11 @@ +#! /bin/bash +# This script tests: pamgauss +# Also requires: + +for i in `seq 3 11` +do +for s in `seq 1 9` +do +${PBM_TESTPREFIX}pamgauss $i $i -sigma=.$s | cksum +done +done diff --git a/test/ppmhist.ok b/test/ppmhist.ok new file mode 100644 index 00000000..91731d4b --- /dev/null +++ b/test/ppmhist.ok @@ -0,0 +1,11 @@ +value count b% w% +----- ----- ------ ------ + 0 2 12.5% 100% + 1 2 25% 87.5% + 2 2 37.5% 75% + 3 2 50% 62.5% + 4 2 62.5% 50% + 5 2 75% 37.5% + 6 2 87.5% 25% + 8 2 100% 12.5% +3438989921 711087 diff --git a/test/ppmhist.test b/test/ppmhist.test new file mode 100755 index 00000000..29bba206 --- /dev/null +++ b/test/ppmhist.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: ppmhist +# Also requires: pgmhist pgmramp + +${PBM_BINPREFIX}pgmramp -maxval=8 -lr 8 2 | ${PBM_BINPREFIX}pgmhist +${PBM_TESTPREFIX}ppmhist -map -sort=rgb testimg.ppm | cksum + diff --git a/test/ppmmake.ok b/test/ppmmake.ok new file mode 100644 index 00000000..0e871732 --- /dev/null +++ b/test/ppmmake.ok @@ -0,0 +1,2 @@ +2477651508 15012 +2378991101 7513 diff --git a/test/ppmmake.test b/test/ppmmake.test new file mode 100755 index 00000000..02e747ab --- /dev/null +++ b/test/ppmmake.test @@ -0,0 +1,13 @@ +#! /bin/bash +# This script tests: ppmmake +# Also requires: + +#export RGBDEF=/usr/share/emacs/23.2/etc/rgb.txt + +${PBM_TESTPREFIX}ppmmake rgb:ff/80/80 50 100 -maxval=5 | cksum +${PBM_TESTPREFIX}ppmmake red 50 50 | cksum + + + + + \ No newline at end of file diff --git a/test/ppmmix.ok b/test/ppmmix.ok new file mode 100644 index 00000000..88bcef4a --- /dev/null +++ b/test/ppmmix.ok @@ -0,0 +1,17 @@ +P2 +8 8 +3 +3 2 3 2 1 0 1 0 +2 3 2 3 0 1 0 1 +3 2 3 2 1 0 1 0 +2 3 2 3 0 1 0 1 +1 0 1 0 3 2 3 2 +0 1 0 1 2 3 2 3 +1 0 1 0 3 2 3 2 +0 1 0 1 2 3 2 3 +1926073387 101484 +1926073387 101484 +1926073387 101484 +1926073387 101484 +127 +127 diff --git a/test/ppmmix.test b/test/ppmmix.test new file mode 100755 index 00000000..0f9deedc --- /dev/null +++ b/test/ppmmix.test @@ -0,0 +1,29 @@ +#! /bin/bash +# This script tests: ppmmix +# Also requires: pamdepth pamenlarge pamsumm pbmmake +# Also requires: pgmtopgm pnminvert ppmtopgm + +# Print a pretty checkerboard pattern +${PBM_BINPREFIX}pbmmake -g 8 8 | \ + ${PBM_BINPREFIX}pgmtopgm > ${tmpdir}/a1.pgm && +${PBM_BINPREFIX}pbmmake -g 2 2 | ${PBM_BINPREFIX}pamenlarge 4 | \ + ${PBM_BINPREFIX}pgmtopgm > ${tmpdir}/a2.pgm && +${PBM_TESTPREFIX}ppmmix 0.75 ${tmpdir}/a1.pgm ${tmpdir}/a2.pgm -plain | \ + ${PBM_BINPREFIX}ppmtopgm | ${PBM_BINPREFIX}pamdepth 3 -plain && +rm ${tmpdir}/a1.pgm ${tmpdir}/a2.pgm + +# Mix image with itself. +# Output should match input regardless of ratio. +for i in 0 0.5 0.6 1 +do +${PBM_TESTPREFIX}ppmmix $i testimg.ppm testimg.ppm | cksum +done + +# Mix image with its own inverse. +# Output should be a monotone gray sheet. +${PBM_BINPREFIX}pnminvert testimg.ppm | ${PBM_TESTPREFIX}ppmmix .5 \ + testimg.ppm - | tee ${tmpdir}/a3.ppm | \ + ${PBM_BINPREFIX}pamsumm -brief -max && + ${PBM_BINPREFIX}pamsumm -brief -min ${tmpdir}/a3.ppm && + +rm ${tmpdir}/a3.ppm diff --git a/test/ppmtopgm.ok b/test/ppmtopgm.ok new file mode 100644 index 00000000..32a4743b --- /dev/null +++ b/test/ppmtopgm.ok @@ -0,0 +1 @@ +2871603838 33838 diff --git a/test/ppmtopgm.test b/test/ppmtopgm.test new file mode 100755 index 00000000..7ab481c6 --- /dev/null +++ b/test/ppmtopgm.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: ppmtopgm +# Also requires: + +# Test 1. Should produce 2871603838 33838 +${PBM_TESTPREFIX}ppmtopgm testimg.ppm | cksum + diff --git a/test/ppmtoppm.ok b/test/ppmtoppm.ok new file mode 100644 index 00000000..764a3464 --- /dev/null +++ b/test/ppmtoppm.ok @@ -0,0 +1 @@ +829921912 685 diff --git a/test/ppmtoppm.test b/test/ppmtoppm.test new file mode 100755 index 00000000..c073ecff --- /dev/null +++ b/test/ppmtoppm.test @@ -0,0 +1,5 @@ +#! /bin/bash +# This script tests: ppmtoppm +# Also requires: + +${PBM_TESTPREFIX}ppmtoppm < testgrid.pbm | cksum \ No newline at end of file diff --git a/test/ppmwheel.ok b/test/ppmwheel.ok new file mode 100644 index 00000000..24756d1e --- /dev/null +++ b/test/ppmwheel.ok @@ -0,0 +1,2 @@ +1537578995 59 +875938089 86 diff --git a/test/ppmwheel.test b/test/ppmwheel.test new file mode 100755 index 00000000..4d786f26 --- /dev/null +++ b/test/ppmwheel.test @@ -0,0 +1,113 @@ +#! /bin/bash +# This script tests: ppmwheel +# Also requires: + +# For values 6 and above, x86(-32) and x86-64 produce different output. +# SSE floating-point math is the probable cause. + +for i in 4 5 +do +${PBM_TESTPREFIX}ppmwheel $i | cksum +done + +# i 32 bit 64 bit +# +# 6: 343122583 119 142348877 119 +# 7: 3572780137 158 3220488357 158 +# 8: 3078449954 203 1413542034 203 +# 9: 3437862278 254 311501249 254 +# 10: 1111245327 313 582960969 313 +# 11: 548273236 376 3726921442 376 +# 12: 2741456118 445 3696607391 445 +# 13: 673636665 520 1059273944 520 +# 14: 2445730101 601 3445053713 601 +# 15: 592850912 688 1691004230 688 +# 16: 3302887123 781 86998539 781 +# 17: 1786065899 880 2476986124 880 +# 18: 186804914 985 2853442889 985 +# 19: 1453260662 1096 3182405636 1096 +# 20: 1467480434 1213 4040494227 1213 +# 21: 1062903055 1336 810283715 1336 +# 22: 2638704989 1465 338245948 1465 +# 23: 3441453532 1600 2213581565 1600 +# 24: 1836362684 1741 2056241218 1741 +# 25: 3423398348 1888 3519123827 1888 +# 26: 3262548375 2041 684292199 2041 +# 27: 3598993221 2200 1577275941 2200 +# 28: 3728319498 2365 1061803162 2365 +# 29: 3729945629 2536 133069086 2536 +# 30: 3645113424 2713 3302414477 2713 +# 31: 2873651818 2896 3660671646 2896 +# 32: 1408491813 3085 2010949125 3085 +# 33: 3781351758 3280 1548995986 3280 +# 34: 3242345057 3481 3082631326 3481 +# 35: 2550511376 3688 1038419921 3688 +# 36: 1028065649 3901 2532290776 3901 +# 37: 1140380377 4120 2428435544 4120 +# 38: 1066850059 4345 3102961014 4345 +# 39: 3620700071 4576 1898018896 4576 +# 40: 504158758 4813 272658385 4813 +# 41: 1349365217 5056 270227718 5056 +# 42: 41774986 5305 509262620 5305 +# 43: 2655322328 5560 4133072843 5560 +# 44: 2318607206 5821 3294034402 5821 +# 45: 2178510518 6088 3314361750 6088 +# 46: 3285054002 6361 2469557621 6361 +# 47: 3047461329 6640 3629344726 6640 +# 48: 137286416 6925 4222495543 6925 +# 49: 2115001463 7216 2668575184 7216 +# 50: 1677997300 7513 2978221605 7513 +# 51: 1365174489 7816 3575061958 7816 +# 52: 2863311036 8125 1791798959 8125 +# 53: 3791281707 8440 3482008958 8440 +# 54: 2687508733 8761 4163388707 8761 +# 55: 2593010606 9088 3561733531 9088 +# 56: 2976537803 9421 3234561645 9421 +# 57: 2850729115 9760 1244925692 9760 +# 58: 224433311 10105 3825098819 10105 +# 59: 547683536 10456 3988409437 10456 +# 60: 369722519 10813 2020750234 10813 +# 61: 745454697 11176 1184600938 11176 +# 62: 1380472574 11545 1044589924 11545 +# 63: 1812671001 11920 238104621 11920 +# 64: 2833858343 12301 228306790 12301 +# 65: 957265138 12688 470109697 12688 +# 66: 895413590 13081 944950937 13081 +# 67: 3724154793 13480 126668527 13480 +# 68: 741064239 13885 1930273504 13885 +# 69: 785023636 14296 3279987135 14296 +# 70: 3649222232 14713 2854788625 14713 +# 71: 1997467987 15136 1689264112 15136 +# 72: 3469507186 15565 682126673 15565 +# 73: 2831204610 16000 1826370607 16000 +# 74: 3154512856 16441 1843713601 16441 +# 75: 1469123916 16888 3700274597 16888 +# 76: 2909139778 17341 2769322155 17341 +# 77: 2945643808 17800 1176063119 17800 +# 78: 3334870474 18265 2274153840 18265 +# 79: 1788316629 18736 1170513638 18736 +# 80: 1236198778 19213 780491458 19213 +# 81: 1946474293 19696 2989417839 19696 +# 82: 1479086076 20185 1500511762 20185 +# 83: 3510147444 20680 1990564736 20680 +# 84: 4044688071 21181 2820276538 21181 +# 85: 1293455808 21688 1335142677 21688 +# 86: 3408774244 22201 2664774438 22201 +# 87: 3591290969 22720 1236374968 22720 +# 88: 3814759633 23245 2889543826 23245 +# 89: 4157749717 23776 4033323913 23776 +# 90: 3512276083 24313 1722273029 24313 +# 91: 797424413 24856 1737843448 24856 +# 92: 3480584612 25405 1304329442 25405 +# 93: 2445523895 25960 1260847516 25960 +# 94: 3157009888 26521 1120864660 26521 +# 95: 103872014 27088 2076594208 27088 +# 96: 1584398684 27661 213099822 27661 +# 97: 3586313190 28240 944151015 28240 +# 98: 4086203619 28825 1961862620 28825 +# 99: 3656777902 29416 2475351252 29416 +# 100: 2246720411 30015 4055518595 30015 + + + + \ No newline at end of file diff --git a/test/ps-roundtrip.ok b/test/ps-roundtrip.ok new file mode 100644 index 00000000..67f7a1fe --- /dev/null +++ b/test/ps-roundtrip.ok @@ -0,0 +1,2 @@ +1926073387 101484 +2425386270 41 diff --git a/test/ps-roundtrip.test b/test/ps-roundtrip.test new file mode 100755 index 00000000..6d6935af --- /dev/null +++ b/test/ps-roundtrip.test @@ -0,0 +1,21 @@ +#! /bin/bash +# This script tests: pnmtops pstopnm +# Also requires: pnmtopnm + +${PBM_TESTPREFIX}pnmtops -nocenter -equalpixels -dpi 72 -noturn testimg.ppm \ + > ${tmpdir}/testimg.ps +xysize=`awk '/BoundingBox/ {print "-xsize="$4,"-ysize="$5}' \ + ${tmpdir}/testimg.ps` +${PBM_TESTPREFIX}pstopnm -xborder=0 -yborder=0 $xysize -stdout \ + -quiet ${tmpdir}/testimg.ps | \ + ${PBM_BINPREFIX}pnmtopnm | cksum + +${PBM_TESTPREFIX}pnmtops -nocenter -equalpixels -dpi 72 -noturn testgrid.pbm \ + > ${tmpdir}/testgrid.ps +xysize=`awk '/BoundingBox/ {print "-xsize="$4,"-ysize="$5}' \ + ${tmpdir}/testgrid.ps` +${PBM_TESTPREFIX}pstopnm -xborder=0 -yborder=0 $xysize -stdout \ + -quiet ${tmpdir}/testgrid.ps -pbm | \ + ${PBM_BINPREFIX}pnmtopnm | cksum + +rm ${tmpdir}/testgrid.ps ${tmpdir}/testimg.ps diff --git a/test/rgb3-roundtrip.ok b/test/rgb3-roundtrip.ok new file mode 100644 index 00000000..745a7c5f --- /dev/null +++ b/test/rgb3-roundtrip.ok @@ -0,0 +1,5 @@ +1926073387 101484 +2425386270 41 +0 +0 +0 diff --git a/test/rgb3-roundtrip.test b/test/rgb3-roundtrip.test new file mode 100755 index 00000000..9cc45499 --- /dev/null +++ b/test/rgb3-roundtrip.test @@ -0,0 +1,31 @@ +#! /bin/bash +# This script tests: ppmtorgb3 rgb3toppm +# Also requires: pgmtopbm pgmtopgm ppmtopgm + +# Break an image into three monochrome planes, reassemble the +# image from them and check whether the resulting output is +# identical to the original input. + +cp testimg.ppm ${tmpdir} && +${PBM_TESTPREFIX}ppmtorgb3 ${tmpdir}/testimg.ppm && +${PBM_TESTPREFIX}rgb3toppm ${tmpdir}/testimg.red ${tmpdir}/testimg.grn \ + ${tmpdir}/testimg.blu | cksum + +rm ${tmpdir}/testimg.{ppm,red,grn,blu} + +cp testgrid.pbm ${tmpdir} && +${PBM_TESTPREFIX}ppmtorgb3 ${tmpdir}/testgrid.pbm && +${PBM_TESTPREFIX}rgb3toppm ${tmpdir}/testgrid.red ${tmpdir}/testgrid.grn \ + ${tmpdir}/testgrid.blu | \ + ${PBM_BINPREFIX}ppmtopgm | ${PBM_BINPREFIX}pgmtopbm -th -val=0.5 | cksum + + +# With PGM or PBM input, the three monochrome planes should be +# identical. Test for this. + +diff ${tmpdir}/testgrid.red ${tmpdir}/testgrid.grn ; echo $? +diff ${tmpdir}/testgrid.grn ${tmpdir}/testgrid.blu ; echo $? +${PBM_BINPREFIX}pgmtopgm < testgrid.pbm | diff - ${tmpdir}/testgrid.red; + echo $? + +rm ${tmpdir}/testgrid.{pbm,red,grn,blu} diff --git a/test/testgrid.pbm b/test/testgrid.pbm new file mode 100644 index 00000000..cc6a50aa --- /dev/null +++ b/test/testgrid.pbm @@ -0,0 +1,3 @@ +P4 +14 16 + \ No newline at end of file diff --git a/test/testimg.ppm b/test/testimg.ppm new file mode 100644 index 00000000..061d5368 --- /dev/null +++ b/test/testimg.ppm @@ -0,0 +1,4 @@ +P6 +227 149 +255 +0/-0/-10.21/51.51.62/62/83/83/:3-:3-:3-:3-:3-:3-:2/91.91.80-80-91.91.:2/80-80-80-80-80-80-80-80-6.+6.+6.+5-*5-*4,)4,)4,)4,)4,)4,)4,)4,)4,)4,)2-)/*$/,%/,%0-&1.'2/(30)30)63,63,74-85.85.96/:70:7.A:0B<0D>2F@4IA4JB5KC6KC6MD5MD5OC3NB2OC3OC3PD4RE5R?1Y?2b@4nB5}E6H8G9F7G:G9E:G;G>G?H@E@FLCLDKEICIBD>B=A;A:@:??-?/?/>.>,=+<+<+?+?+=*=*=*>+?,@/?6>5=2?1B3D3D4D4?0A2F8H;H9oA2T8*C3&=5295495473271160050-50-72/72/72/61.61-50,50,41,//-.0-//-//-0/-0/-2.-2.-5,-4+,4*+3)*7(+=.1E69P:0U?1^A3jC4xD6E4E5C3C4A4A4B7D:E@<@6>/@.?-?-?-?,?-@-@,@+A-A+@*A)@*A,>-?/>.>.>,=+<+<+?+>*=*=*=*>+?,@/@5>5>3>1A3D4C4D5A2C6F8I;G:l@3S9*B4)>63:6595484382271161.61.72/72/72/61.61-50,50,41,//-.0-//-//-0/-0/-2.-2.-3--5,-4*+3)*5)+<-0C47N8:d>=vEAJINLTVajl}r{{ou[[QHuOCiOFeOG_PH_RN_[Yfnot~ojkY][LVSJXSZVRaXQa/.,/.,0/-10.40-40-51.51.72.72.72.72.92,92,92,92,91.80.7/-7/-7/-7/-80.91/80.80.80.80.80.80.80.80.6.,5-+5-+5-+4,*4,*4,*4,*5-+5-+5-+5-+5-+5-+5-+3.*2-'1.'2/(30)30)41*41*52+63,63,63,74-85.96/96/:7.?8.@:.B<0D>2G?4H@5H@3H@3I@1I@1K?1K?1K?/L@0MA1NB2MA1QA1YB2dC2qC3|C2B2A0<-:+;.=2@6D:F=D>CE@FBGBFDFCEAD?D;@:?;@=@@@A=@;@5=.@-@-?,?-?->,@,?-@-@,A+A,?*@*@+>->.>.>.=+=+=+=+>,>,<+<+=,=,?+?.A6?5>3>2A4C5D5C5D8F;I=J=G;h@4Q:,B5,?74=77<66:4494183072/72/62/62/62/51.52-41,41,21,.0-,1-.0-.0-//-//-0/-2.-5//4..5,-4*+4*+9-/>24I56[97l?9|E@IDOM[`fvmw}}u~fmTVMEvLAkMAeOFcQHcMH^NK\[[eqty|xzlfiXZ[MVSLZU[ZT`[S`.-+/.,/.,0/-3/,40-40-40-61-61-61-61-81+81+81+81+7/-7/-6.,6.,6.,6.,7/-7/-80.80.80.80.80.80.80.80.5-+5-+5-+4,*4,*4,*3+)3+)6.,6.,6.,6.,6.,6.,6.,4/,30+30)30)41*41*52+52+52+52+52+63,74-85.85.96/96->7-?9-@:.B<0E=2E=2F>1F>1G=1G>/H<.I=/I=/J>.L@0JA0KD2NE4UD4^D3iD2sB1~A/?-9)9'9*<-@3E8HDCACBCDCCDBC@C?A;@:?;@>@A@B=@9@3=-@,@,@,>,?,?,?+@-?,@+@*@+@*@)?*>,>.>.=-=+=+<*<*=+=+<*<*<+>,>-?-A6?5>2@4B6C8C7B7F|F:b@4L:.A7-@85>96=77<74:5294183083062/62/62/32.52-21,21,12--2.-2./1./1.00.00.10.10.5106005//5,-4+,6,-:01D22T71c;3qA7{E;HDRU_lis}yx}ow`fQRLEyL@pL@hPEgQFfLC^GBVMLZ^^fjnquyxx}wzvwzokoa`bTWYLTTL]WY]V]]V^------.-+/.,0/-10.3/,40-3/,3/,4/+4/+4/+4/+6/)6/)4/,4/,3.+3.+3.+3.+4/,4/,50-50-50-50-50-50-50-50-3.+3.+2-*2-*2-*1,)1,)1,)4/,4/,4/,4/,4/,4/,4/,4/,41,41,41,41,41,52-52-52-52-52-63.63.74/85096196/<5-=6,?8.@9/B:/C;0C;0C;.D:.D:.F:.G;-H<.I=/J>0I@1JG6MH5RG5YF5bE3jD1uB/}>,;):):*=,B2F8J=I?GBDCDBEBBBAA=@<>:?:<<>?>B>C:A5?0?-?,?,?,>->->-?->.?-?,?+?,?+>*>*>,?.>->->-=,=,=,=,=,=,=,<,>->.?.B4A4@1@3A7C9B8A7C;H?LCJ@tE;Z>2E9-<5+@93@85?75>63=52<4194083/62/43/43/23.32.12-12-02--2.,2.-2.-2./1./1.00.10.3205105104..2,,4+,7./=/.N5.Y9.e=1n@3sB;yKKZegpzxu{ks_dTTOGLBwNAmNBhMAeJA`GBYGFXKKWMPU]cc`fbbia`f\Z`TW[MUXMXXP^YV`WX`WZ,,,,,,.-+.-+/.,0/-3/,3/,2.+2.+3.*3.*3.*3.*5.(5-*3.+3.+2-*1,)1,)2-*3.+3.+3.+3.+3.+3.+3.+3.+3.+3.+2-*2-*2-*2-*1,)1,)1,)0+(3.+3.+3.+3.+3.+3.+3.+3.+41,41,41,41,41,41,41,41,41,52-52-63.74/85085085.;4,<5+=6,>7-@7.A9.A9.A9.C9/C9-E9-F:.G;/H<.J>0HA1JG6IH6NG5VF6\E3dC2n@0v>-{<+;);*=,@1F5J:J=H@EAFAE@CA@>>?:<;<:;<=@=C=C8@2>,?,@,?+?+?->,>,?,>-?,?,>,?+>*>)?*>+>->->-=,=,=,<+=,<+<+<+<-=,>/?.B4A2@2B5C9C:B:A;A9I@NGNEoG=S?4A;/96-@93A75?74>63<4194083/74/43/43/34/23.23.02-02-.3--3/-3/.3/.3/02/02/11/11/21/32032040/2.-1-,4..8.,G4-O4)X8+`<0e?6mGFyYdku||w|nudh[[RMLB~OArL@hI=cH>`HB^ECX@BO;@FBGJDMJJQJJQIIQFKQEOUIVWO^YS`YS`XU++++++,,,---/.,/.,0/-0/-1-*1-*1-*1-*2-)2-)2-)2-)2-*2,,1++1++1++1++2,,2,,1++1++1++1++1++1++1++1++2,,2,,2,,1++1++1++0**0**3--3--3--3--3--3--3--3.+41,41,41,30+30+30+30+30+41,41,52-63.74/74/85085.:3+;4,<5-=6.?6/?6-?6-?7,B8.B8.E8/E9-G;/H<0J>2H@3HE6GF4KE5QD4XC2_B2f?.n=,v=,|:*9);*=.B2F7F8FF>E>D@C?@@>>::;:<.>.=->-=.?.?-?-?,>*?*>)>+>->-=,=.=.<-<-<-=-;,<,.=0?/C2B1A1B6C:CCC793@72>71=60:5/94.83/63.43.43.34/13.13..3-.3-.3--3/-3/-3/-3/.3/.3/02/02/00.11/22021/0/-/.,2.-4/,?0+D0)K3)T8-Z<4dFFu]js~tzmpceVSLCK?qI_FB]DBW?AN;?H:BE>HGDMHGQIGQHJRGNVKUXM^ZOaYNaXO++++++,,,,,,.,-/.,0/-0/-1-*1-*1-*1-*2-)2-)2-)2-*2,,1++1++0**0**1++1++2,,0**0**0**0**0**0**0**0**2,,2,,2,,1++1++0**0**0**2,,2,,2,,2,,2,,2,,2,,2,,3/,30+30+30+30+30+30+30+41,41,52-63.63.74/85085092,:3+;4,<5->5.>5.>5.>5,B8/B8.E8/E8/G:1I=1J>2I?3FC4FC4JB5OA4TA2\@2b>0j<-q<.w9*}8)8(:,=/B4B5F:E;F>G?G@FACAB@;;;;>;B;D:D4@->(A-A-@,@.@.?-?->/>.@.?.?->+?*>)>+>->->-=,=.<-<-=-=-<.<.<./>1?1D2C1B4C6C;D>D>EAPL[Te\f]u_T[UIGMACI?<92?82>71;6094.74-63.43.43.34.24/13./4..3-.3-.3--3/-3/-3/-3/.3/.3/02/02///-00.22022010.0/-0/-3/,8,,;,)C0*K70S<6^IHtbnzƄzrxikWWIDE=nG^CAY@CV@DP>EKGQRKWUQ^WU`XS_UR^TT^SY_S^[LaZJaZJ,-/,-/,-/,.-------.-+.-+/.,/.,1-*0,)0,)0,)/+(/+(/+*/+*/+*/+*/+*/+*/+*0,+/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+1-,1-,2.-1-,1-,1-,1-,1-,1-,1-,1-,0,)1-*2.+3/,3/,3/,3/,3/,3/,3/,3/,3/,40-51.62/74/80-92,:3-;4.=4/>5.>5.>5.?4.?5,B5-C6.D7/F90G:1F<2G?4H@5J@6P?5T>3X<1^90b6+m9.t8-|8+9,;/=0?1>0A3A4C8E:G=G>E?C@@?BADAE>D8B1A.B,A.@-?,>.=-=->.?/<,=,<->-=,=+=*>*<+<+=-<,<,<,:-;-=/3@2A5A4E5D4E9I>G@D>EAMGZRf_qfsh~rdjj^V^SIQFLLBJF=B>5<8/95,74+63,33+43.34.14-14-02-/1,,1+,1+-2.-2.-2.-2./1./1./1./1.02/02/11/11/11/11/11/40/4+0;/3A32C4/J;6]OOymyϐكtzjn_bZ[LItHBdA>]>>X?BUAIVLU\U`bbqnn}xv|rulyoguh_k_W_P]\Hb\Fc]G,-/,-/,-/,-/------.,-.-+/.,.-+0,)0,)/+(/+(/+(/+(.*).*).*).*)/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+0,+1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,0,+0,)1-*2.+3/,3/,2.+2.+2.+2.+2.+2.+3/,40-51.62/80.91.:2/;4.=4/>50>50=4-?4.?4.A4.B5-C6.E80G:2H;3H>5H>5L=6O>6Q=4V;2Z90_7/h70p7.w7-9-9.<1<1=1@3A3B5D8E:FF8C2B-B-C.B-@.?-?-?->.>.=,>,=-=,=+>+>*=,<+=+<,<,<,;+;-<-2@6A7B6G9E7G->->->/?0<-=-<.=.>-=,<+=+<*<*<,;+;-<-:-;-<0<0<2>3?4A8C:D9J=H;H>KDKFLGSM`Vsgqz{wsocqbXcUNRDMN@HI;DD8@@49;.46+/1&01)01)/0*/0*./*./*//-//-//-.0-//-//-//-//-//-//-00.00.00.00.00.00.00.1/26+97+98/4;63HE>_^Yzz|DŽ}{|}}wq~n}n~~o~y|{j{i\hTXX@]Y<_[@-.0-.0-.0-.0-.0-.0.......-+.-+-,*-,*.*'.*'.*'.*),*++)*+)*+)*+)**()*()*(),*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+-+,-+,-+,-+,.,-.,-.,-.,-/-./-./-./+*0,+1-,1-,1-,1-,0,+0,+0,+0,+0,+0,+1-,2.-3/.40/91/:20;31<41=31=31=31=4/>3/>3/@2/@3-A4.C60D71E82F93H94I:5J;6L:6N94Q83T50^72e60o6/x8/90:/<1>1?4?4?2?1A2B5D7E:G>H@JAI>F:B5A0@.A-A-?->,>,>,=.>.<,=,=.=-=,=+=-<,;););+;+;,;,;-;,;/<1<1>5@7C:DJCLIQL]Vj^oyzxm{jbm]SZJQUFKO@EI:@D6;=057,13(01)/0(./).-(.-).-)/.,0/-/.,/.,/.,/.,/.,..,/.,..,0/-//-0/-//-//-//-//-2-17,:6*83-1961HJ?bfX{z}|k|iXfOSV;ZV9^Z=+/2+/2+/2+/2-.0-.0......------.-+-,*-,*,+),+),+),*+,*+,*++)*+)**()*()*(),*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*++)*+)*+)*,*+-+,-+,.,-.,-/-./-./-./+*0,+0,+0,+0,+0,+/+*.*)/+*/+*/+*/+*0,+1-,3/.40/901:20;31<42=32=31<20<20=20=2.?1.?1.@2/A30B5/C60D63C84D95E:6G96H94K84N50X72_60i70r7/}:1<1>2>2@6?5?5?3@3C5C6E8E;G=H>G=D8A5?0@/@-@-?.>-=,<,=/=/<.;-0->0-?1.@2/A4.?4.@51@72@93A:4B94C84F74H5/Q51X5/a6/l8-u9.0=1?5>5?5?4B4B4C4D4B5D8E:E;B7?4>1>0?.?+=,=,<+<+<.<.;-<-<.;-;,<,;+;+:*:*9):):+9*9-9-<1<3?6A8CHCNJVR`Zper}~~yup{jdp\]iSR^JJS@BK:>E5:@29<134,22*1.)/,'/))0**1++2,,1++1++1++1++1++0,+0,+0,+1-,1-,1-,1-,/.,/.,/.,2,.8*75(13+(56&EK1\gGudyťέɭʰ˱Ȭ{wrdx]Q_ENR7QQ5SR6,03,03,03,03./1./1./1./1/////////////.,/.,.-+.-+/-..,-.,--+,,*++)*+)**()+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)**()*()*())'()'(+)*+)*,*+-+,.,-.,-/-./-./+*/+*/+*/+*/+*.*)-)(,('0,+0,+0,+0,+1-,2.-40/40/:12;23;23<34=32<21<21;10<1/<1/>0/=/.>0->0-?1.>3/=60;60;83<94=:5>93@72C60G4.O4+Y4+d5+n8,x:-;.;.<4<5>3@3A2B1A2@0>1@4B7B9@6>5=2?2?-?->,=+;*;*<-<-;.;.;-;-;.:-:,;,9)9):)9(9*9*~8,~8,<1=4@7B9E>IAKFMFIAH@JFSO]Xhb{ny~wxnjxadr[ZhQQ]IITCCL;>D60-?1.=2.=4-=6.;819919:29:2;81?6/C2+J1,T2)^3*g7+o9-u=.z2B6C7B7?4>2>1>/=.=-<,=,=,=.>/<.<.2>5@6C:G=JBNEOGICIDPJ\Tg`uiu~zytoi}bby]\pUUgOO\HGRAAH8=A388.85.7/,3+)2()2()3)*4*+0*,/+*0*,0**0*,0*,2),2),3*-1+-1+-1+-0,-0,-0,-1+/4)/4*+4-%46!?F%T`8m|Qgtz~z{Ĉːəǝƚ~xvolfZnSJZ?GM3FJ1DF./0+.0+/0+01,01,01,12-21-32.43/43/62/51.41,3/,4/,50-50-4/,3.+2,,1-,0,+0,+.,-.,---/--/,,.++-*).))+.)/.)-/(/.)-/)-.)-.*+.*+/+*/+*-,*.-)--+-.)./*./*------.,-/-./.,0/-2.+2.+2-*4,)5-*6.+8/*:1,:1*;2+=4-=4->50>50>50=4/<3.;2-=2.<1-<1/;0.=/.>0/>0/@1.A0)@2);4*77-39-28.56.:3-?-)F*'L)'S*&Z/(`5,d<0k@0yA0@/A1B3@3=0;/8-;/=.A1B2C2A0>.;,;0:2;1=0?0?/?.>.@1?0>1<0;/:.:-;-{9+~@3w<.q7)w>-w>-v;-}?2{;/@4E9I?LAMBPCNEKISPbYpa}jq|~u{ouiib_[zXZsUZnSWeNPWEJK=C?6@93;0.6**3')3'+3'+1&*,*-)+***,*(),'+.(,1(-2'-3(.3(.3(02(00)10)1/*1/*0/)-1++0-(//#5,>5,>5.>5.>5.=4-<3.<3.=2.<1-;0.;0.=/.=/.>0/@1.C0*C0)A2+>4+:6-95,:3-<1-?-+D*)I*(N+'T/)Z5-_:1e>/pA/xA-A0@2?4=3:2;19..@0A1A1A/?1;2;2<2=0>0@/?/?.@1>/=0<.;.;,:,;,x8,x<1s9-n9+s>.s>.r8*u:,}=1A5E:I=K@NAPCNEJHSRf]wfpww}ovei``YZY{X\wXZnSSaJNUCFH;C@7<737/-3*+2)*1(+.(*,*+**,+),+),-(,/)-2(02(02(02(02(10)1/*1-*3-*3-*12-12.-0,)--%8:,SXBox]iolnpppw{xwy||{xuqnh{eYjWMZHEL<@D5;=/12,12,12,12,23-23-43.43.54/54/85085085074/72.61-80-80-7/,6.+4/,3.+2,,1-,1-./-.0.1/-0--/,,.+*/+)./(/1'//)-/)-/)-/)-.*+.*+0,+0,+/.*/.*/.)0/*0/*0/+//-///0./0./0/-/.,1-*2-*6.+70*90+:1*<1+=3*>4+?5,?6-?6-@7.@7.?6/>5.=4-=4-=2.<1-;0.;0.;0.;0.<1/?1.C2+E0+H/+K--L,/K+.I*/E+.A-,@.*A.(E.(M.)X1*b3-g5,j:,o;-w;0=4<6<5:4:4<2=2>2?3A2A3B5C5?2=/>1>.>/>,=.<,;.<,:-:*;,<)~=+{<+}=1z<1v:/u;/x@1x@1v<.v;-?5B8F=H?JAKANCNFJHTQf\vent{}yximae\a\`]`[|]UrVPhPFYEBP?:D93:2.3,*/)*,)**(0'(1&*1&*1&*0'*1(+0*.0+//*.-+.,+0+,0)-0(-1(-1)-01/23/..*'**"57*PUAmv[|ik~jjnn~mqx|zxvvuwyy}}ywtpmh|cYkUMZHDH9=?299-23-23-34.34.34.45/54/54/650761961:72:72961940940:2/91.91.80-50-4/,4..4..3/03/01/01/20.1..0--/-+.0)02).0*.0*.0*.0*,/+,/+*1-,1-,0/+0/+10+10+10+10,11/1111/010.10.2.+3.+3.*92,92,;2+<3,>4+@6-@6-A7.B8/A8/B90A8/A81@70>5.>5.=2.=2.<1/;0.;0.<1/=20=2.B3.E2.L..R+0V'/U&.P'/I).C/.<1+;2)?2)G0(R/)_.*d/)i9/k;/u<3}<6;8;9;7:6>8@8B9B9C7B7A7A5@1A/@.@.>-<,;+:+8*9*:*:)<){=(x>(x>*>1{7.z7.z<1v;-w=/|A3{@2B7E:H=J?J@MBODQHSJ\Qh[tbgm~v|~}yqoiifgfeggde_~_Zw[PhPK^JBP?8D62:/.4*,/(+*%2&&5%(4%(2&(1'(/)+/+,.,-+++*+-*+-(,-(,/',/',/*+-.*+1++0+'.+"88,PUAiqYvc{hyh|il}mykzmrtq}p}p}s~v~x}x|x}zzwuqnje|bWkRN[GDF9?=1:8,45/45/45/560560560761761872872;83<94<94<94<73<73<41<41;30;3083072/61.61.5106216213122011/00./1-.2,04+.4+.4+.2,.2,,2,,2,,3/.3/,3/,3/,21,21,32-32.32032032032051051.61.61-;4.<5/=4-?6-A7.B8/E8/C9/D:1D:1E;2D:1C90B8/@5/@5/>3/>3/=2.=2.=20=20>31>31@51E31M02T,4X)3W(2R)1K,1B30:6-77+:6*B4)M2)X/)^/)f:1j;3s<7z=:<:<;;;::;7>8A8B9C:C:@9@7C2C1B0?/=.<.:-9-7+8+9+:+~=+x>*v?*x>*9-|/'8/>4w4+s5*}A6}C7E:GJ?KBMDQGWJ|aNzjQpYu]|biu|~{}zwzpzlxlwkumrlmgkd`rX[iRR[HHL=@@4;7,70&5*$6('5''3''1'&.)&+*(++)+-*',('+*)+*)+***,+),+),-)*,#$2*'50*86*BC5UZFfpWn}^teqbuexiwkshtiwkznxlwmxnys{u{w|wyuzwwtsomhd{_WkPN[GCC7>:195,560560671671782782872872983:94=:5>;6>;6>;6>95>95?74?74>63=52;63:5294194184184395484373243151240/6-06-.6-06-.4..4..4..4/,40-40-40-51.32-32-43.43.43/431542540841850940:5/=60>7/@7.A8/C90D:0G:1H;2F<3F<3F<3F<3E;2C90B71A60@51@51?40>3/>31?42@53?53@72C52I35P16T/6S.5P05J22C52=90<:-=:+C7)I6(Q3)W2)]2+d3,l50v64}77877766~75}:4}<6}>5?9@8?9A8B3C1B1@0=/;.:.9-9,9,:,<,|=,y>,x?,|=,5*2,LEXQA8|90F;K=yH:zJ<{M>|N?}OBQEUJ_LrkOosR|uXw]ybiszz|~{y~vpoppp{pwmskj~bfv\_hSV[GOM>GA3@6*=0';,'9+(6+'3+(/,',-'+.').().(+-(-,*/+*3)*4(*7'*7'(3($<3,E>4IG8QR@]bKgqVjyZn]k\l]pbqeodoerfumrjqitnxrzvyvyvvtwvurokjfc|^UlON\ECC7@91;4,671782782782893893983:94:94;:5>;6?<7?<7?<7@;7@;7B:7B:7A96@85=84=84<73<73<73<74<74<74;639529338308/09/.8/080.80.80.61.61-61-61-52-52-63.63.74/74/540540841952:63<94=84@93@70A8/C90D:0G:1H<0I=1I=1J=4J=4J=4I<3F<3D:1B8/A7.A81@70@72?61?61@72@72A83?74@85B86D97G96H96H96H94E80E8/E9-E9+G9,I9*K9+Q7*Z/&d/'n3-z6398;9;:=;A>@:=6<3:3<4=7@7A5B3@2?2=1<0;//|>/}>/=/9/1+<8lf~yZTC(+C&+E$+C&(F5-LC4VQ>[YD`bJgmQiwVj{Wl[gWfWl\oananbrfskojoirnwtyxxwuvssuvsrnlicb{[TmMM]CGH:E<5@707827828938938939:4:94:94;:5<;6?<7@=8@=8@=8A<8A<8C;8C;8C;8B:7?:6>95>95=84>95>95>95>95=85<73:51;30:0.:0.91.91.91/91.91.72.61-61-63.63.63.74/74/74/540651952;83<94?:4B;5B;3A8/B:/C9/E;/H<0I=1J>2J>2K>5K>5J=4J=4F<3E;2C90B8/B92B92A83@72@72A83B94A:4?82@93B;5D=7F=6G<6K<5N;4M6.N6,Q6+Q6+Q7*P9+P9)V6'f6*r6,~;3@9D@HDJGLFQJLDD;;07-7-91=4>5>7=6<5<5=4}=3z>3x@3vA3x@3z>3<3:37331(&=;|zhcG@K@xH:nMhV>lX@t[E`LhPysQwUt\l^__V\Q[T\ouzx̆|~}xvrtuuussr|nyju{amoWgbN_TBUE5R/(9/&7.'6/'81):/)=.+A,+F)+H(+K'+H)'TB4YQ9B?:D?;D?;E@8E>8D=7B;5B;5B;5B;5B:7B;5A:4A:4A83A83A83@72@64>71>71>71<71<71;60:5/85.85.74/74/961961961:70<71=82A:2B;1C:1D<1F<2J>2K?3L@2N@3N@5N@7N@7L?6K>5I<3H;2E;2E;2B90A8/@91?80?80?80@93@93<5/MD=M@:K:3T@9R62O0+a<6\3-`5.`4+^/'^/%f6,m=1q=0I=G;I?KAF>>7=6D;NDPEVJYKOBA5;0>69898655284?8|@6r>1rB4oA2q=0v:07243-1',HIbaEDWUyvVOFu:9:49:49:49:4:;5;<6>=8?>9>=8>=8A>9A>9B?:C@;D?;D?;FA=E@8E>8E>8E>8E>8D=5C<6C<4D;4C:1B92B92B92B92A83A83@93@93>71<71;60;6096/85.74/74/96196/96/:70<71>:1A:0B<0C;0E;/I=1J>0L@2L@2N@3N@3N@5N@7M?6J=4I<3H;2E;2E;2C:1B90@91@91@91@91A:4B92D93I81L/+V.,j76u99{;;ECD?H@IAG>IBNHPLOGD7B4B6C8>37-7-=0C5?0@0E3G6F6H:NELMHL@D9;98>:@8x>3o>0zI;LA?8,+).9DLWKNMM>=@?`\YQ@5TDyaIe[@^]?ihIslOvgJ~dKcNdX_[UZAN,E%D&H'I.N3N6UE8[O5cZ9gaAifEnrOz]zbt^r_p_p`q`udwdwdwfsixrzxyx~}zzromhhd`y[TmMNaERSAVPBUOC8938938939:4;<6<=7?>9@?:@?:@?:C@;C@;C@;C@;D?;D?;FA;FA;FA;E@:E@:E@:G@8F?7JA:I@9H?8G>5F=6E<3F<3E;1D:1D:1D:1D:1D;4D;4D;4C<4?80?80<71;60:5/:5/94.94.96/96/:5/;7.>7/@9/B90C;0E;1F<0I=1K?1M?2M@0NA1M@0P?5M?4L>3K=2I<3H;2E;1D:0C:1C:1A:0A:0?;2@<3@<3D;4UDI?LANBRJUROSLK@4B0@0?1;.7+8+=/E6>+7$:'>-A/C2D:02:BDLLRMRKLA>71{8/v6,x2*1-37=GGWM[FI53:931NKc]J?[J}cLj_CgdEtoOpQhJhNhYbbQZDQ7I1J2N/M*H2O0K1J5L4M2K3L7P@XC[F]IaNcQeUhVkSjRiOiNiNlPoSsVuha|[tUlYldrR]r-2^&'Y0,W:4Q?5B:-:8)>B1LN9VO3aV6e_?heDquTe~iwdxiuerdrcveyhzizjv~zypmg~b^wYTmMPcGSXDXUDYVG7827828939:4;<6=>8@?:A@;BA5G=3F<2E;1D:0D:0E;1E;2D;2E<3E<5E<5@91?80=82<71;60:5/:5/:5/96/96-;7.;7,?8.@:.C;0D0K?/M@0M@0M@/M@0O?2O>4L>3K=2J<3G:1E;1D:0D;2D;2B;1@<1@<3A=4B>5F<3S81[*&:?T`TeUfUcJO30:/>0A3F=IGBH>@B7F5B3@3?3>3B4D6G5B/<);(<(:(6&3(979=7>7<^@aCf@f?e?g?hCmErIsOuQuUvSqTnaxfvWb}15j0/X1*P8,G>/>A.;D/?G/PK._T8g`CokN||`rv}qzq|s|szozm}ouzsqh|c]tXSlNPdHRZCWYDYZH671671782893:;5<=7?>9@?:BA/K?1M@0M@0NA0O?/O?0O?2N=3N=3J<1I;0G;/D:0D:0D<1D<1B;1@<1A=2A?3B?6K=4\5.w32LS]iM_@Q6E&+1)7(:&<)@3D=>?;;?5B4@2?2@5C9H;J<>/?/=+;)9):,;/<1FADA>?797KCTLSMKJ?B5>274.7.1+:484@9[PUC{N9bIkP`F[FfTrdmhEK:D9C=8@?:@?:C@;DAGB>GD=GD=HC=ID>IE2I=1G=1G=1F<0F<0E;1E;1D;2C:1A:0A:0@91@91=82<71;60;60;7.;7.;7,<8-?9-A;/D0L?/M@0NA0NA0O?/O?/O?2N=3M<2L;1I;0G;/F90C9/C;0B<0B;1@<1@>2A?3B?6N;4m84FEY_WbCQ8F3;++1'8%:!9 ;&>.:2717,:-9-7,:1B8E;E:>2?0<,6'6)>0D;G=8-@6D?BB=A9>27.075GBSLNG=910/2671(A>GBOMWWNRDM:G5F2F.D1G7N8S8T8V9W;\>aAeCk;ej?m>n>o=m:jHr;a?dKnKnNmUoZnrajILt:8\6-P9+PC2UM:^QAreU|nʿ~m~k`t[WnRVjNS`FV`EX`H560560560560671893:94;:5=<7>=8A>9C@;DAHC?HC?GD=HE>ID>ID>JF=JF=MF2@@4P91r1/JKSV>D0603//1)1!9#=!;< =#;%6%6)8-6,4,81@:C<@6B7A4->-5+*&"%%+*1.4)*.+3,4,3,2,0-2+2%6&2&7,6.>7`UqeSVBM:WIf[d_RTCIFM@D??@<@8@7FAMLJN@K9H7H5H3E6G;M8P7R6R6U6X9];ak?m@qBtBuBuBtBpFmAaEeKjKkVt_z]tj~p~ow^aCAg6/hB7sUJye\}vŽ˺tqexb\sW[oS[jM\iK]gL561561561560561671872983<;6=<7@=8B?:DAHE>HE>HE2G=1E=2D;2C:1C:3A:2A:4@93?74<73<71>7/>7/<8/=90>:1A:2C<2D=3H@5I?3L@2MA1NA0P@0O@-O@-L?/L>1M=0L;1J91I81E80C90@9/>:/;;/<<0=>0>?1A?0S8-<7\[ZY86.*1+.%2#9&B*F,D'A&A&<#9#9*;0:07.<4CD;=<<@9>48,6.94HH@E;D:H:I8G;I?NAU?Vi>l>o>p>q@r@tAqCjMmSsJh@`Tsge]w_xh{p}qxgg^X{ZQ~wļ«zxl{hbu_`rXbpVboScmT21/320431651875984984984;:5<;6==5??7AA9CC9EE;EE;HH@HH>HHLC4J@4KA5MC9LB8F=4B90E<5C:5@93?74@85?75<74<42C:5B94A96>95?:7>:7?;8@<9B?:D@7G@6J@4L@0O@-O@+L?,G@.F?/I;0K81M53K65J88F;9B?:6904,=,<,=/C4F8>12&9+8*8+8-7-5.3/1-.,.-0,1,5*7):):(9&33 8'7'6(B5SINCSK\W]ZPR>C9??GAFCDAA?9<3;/?HH>HH9H?:F=8B;5D:8A96?74?74@85@85=85;62=4/=4/=52<74=96>:9=<:>=9B?:D?9G@6J@4M@0O@-P?+L@*B?,B?.F<0H:1J65I56F35@65@<9:=6;>5@@4E<-J9)^B4L>QB;-2#6&:'7$9%>*;%<(?+@-=,9*6(7)9):*9);+>.A1B/@.?,:(<+E6H9?18+6)7+7,9.;-8;1:-<-=.E5L?NEGC?>?B?F@JCJCLDPFTBS>S>XBaFhCi?i@jBpFvJzK{JzHtKpQs\z_{XwNqEkDlEiKg_pnukLI~t̲ų~/.,0/-10.21/43/540762761:94::2<<4>>6@@6BB8CC9DD:IF=IG;JH;LI8MJ7NL7NL7OL9KI:NKBTRS_^fihxmmlkkh`YiYQ\OGRH@KH>GG=EE93>:1=9083-94.;60<92=:3>;4?<5@<3E>4G?4I?3L@0O?0P?/P?-L?,<;&:=(?<+A;-B71A62>42;30=84B;5H94N2.Y,)l/.;=FE;02$1 9'<)7$8"<&;&=)A-A/>.<-:-->-<,?-8(>.L=G:6*2&9.6,6+8,:.:/8.6/3,0-.+.+1)2'6&8"7!8$5#9'>/=.6)9,A7<5>8EAKIJJCC?ACCCAD?B==4:.8*:*;+8)D8NEIE@@>ABIHPAG@ICOGTEU@U?XA_DfCiCkFpIwK{L|JzFxHwKtNtZ|aUvCdIkTv?\I`{||aC;|nճξ/.,/.,0/-10,21-32.54/650880991;;3==5??5AA7BB8CC9HEQPL^]bmlzzz{urke_{YSmTLdMEZG@PB;2?=1@<1?;/A;-F?/H?.K?/M@/O?0O?/P>0L?/@=*?>,@=.?;/?;2>93=:5:94<94D95M51V-+j)-288C>C7.7(:(?-?,9&8#;&:&<)>,@/>/=0=1>2?3=29.8*9+:,:,9*;,;-B4E9>31'2(9/5+4*6-7-7.6,3,1*0,.+/)0(2&4$6 5204$<.=/9.=2D:5-60;5D@MIKIC?=8@9A8>4Vdtӏd92lJ>ynХ10,10,0/+0/+10,21,43.54/77/880991;;3==3??5AA7DA8IE:LF:NH:PJ:RK9RM:SL:QK=OJDVTUfdqwxÏƎ{wpmid_[~UPnNJaKGXEBM?=B;7895296/85,85,671783891;;1>5L?6K>5F<3B92=82:946;47<59<5>:1H4-Y2-w78?D>E9<;0<+@.A/@-<);'>*8$:'<+=.<-;.<0=3?6>3:/7,7,8+8+8+7+A5C88.1&3)7-5+4+3)4-6,5,5+1*/*/,/*/)0'2#4!541/2"6)9-:0?6E=F>@7<5@9KDNGE>;1=1<0CBLIUJYFXCYC]@_BdElJsNzO|LyIvJwTT}JqImStVtNiD^F]Xk󝞎HFk.)kc͖ɿȾȿ65143.32.10+10+21,32-43.66.77/880::2<<2>>4@@6B@4JD8ME8OH8RK;TK:TM;SL*F@*G?*H@+IA,IB0IA4HB6HA9G@:K=?51;/<+?-?->,>*?+?-8%9(:+9-9,:.:0<4>5;4918.8.9/8.6,7-C9@70&,#7/<42*3,2(2+3*3+2+/*-*/*.)0)1(4$5"6 57#3#3$3&5)8,<1?6YQRJHAC;E1:*;(:*:):(:+>0A3A6<3<6A=EEGHIMLPBF@CCIKTNYJZF\F_A_BaEiJpNwOzNxLvQ{RyOvOtVy]{SoD^TlQddt`dMMjgΏX<94;8185052+41*41*52+63,74-85.96/;81=:1?<3A>5C?4JB7MC7PG8SJ;WK;UL=UK?SJCSJK]WcnlŚڟꢩ뙛啘ݔ֐ʉzyrqfc~XVkPN\IGRFCLCBJ??K==G;:@;9:<94?;/C=-E@,F@*FA+EB/EC4CC7BC;AC>@ACBLCANEEOCHNAIL>HI>GDCHAA=2L:.gF7OAI/>,>*?+@,@-?-<*8'8)9*9,8-8.91;5:4:3818192:2706/<5>5912(4*;2<33*1*1'1*2)1)/)-(,(-)/)1)3(5'6%7!7 9%8%6%4%4(7+8.7/NGXPZSQIG>D9@7>/<*<&<(:'9(;*>0A4D;@7@:FCIHHGGJIKFHBDDILSQZO]L]K`D^DaFfIlNuOxOxPwVxUvTvYx]{ZwQkI`WkUgM^^mKZTaTaXaefȃ~嫧@=6=:3:7074-52+52+52+63,74-74-96/;81=:1?<3@=4B>3JB7MC7RF8VJ:WK;XL?:6@<1A>/C@/CB0BC3BD7?D=>D@CVCIaLRhU\o\br`dobbjd`afXWaJDlG>SEXFJ7@+>+A.@/A-@-A.A/=+7&7(8+8+8-6-7/81;4727272829494836/A:8/3*8/=5=5915,2)0'0(0)/)-),(,(-)/)2)4)5'7&7$8#7"8%7$6&7)9+7+4*4+NGd\`YOFA7;29->)>'<&;%9&9*2D9A9E?KHLIGDEEHGIICDEHMSSZR\O^OaH^G`GdIiNrQxRyTzUuZw^}^|UpMgOiYn[mctM^TeO`UgL_R_^_vqלB>5A=4@<3>:1<8/:6-84+73*62)62)73*84+;60>93A<6E>6I@7MC7RF8UI9WJ:XK;ZLA[NHTIMXR`gd|~ʗ㞪쩫蟡ڙҍtrhe]ZXR~XQzYQvVOnMH_C?M?:@?;:B?8>>4@B5BE:?D=:CB>FH?LUDVnQfaristvxo^l[cWYWUVMM?@.9$:$<(=*?,@.@-?-=,;,6'6(6*7-7-8/91838495:693616183:3C<=670@7[Rlc]T?63)2)2*/)*&(%(&+(-+0,2+1'0#1"4$:(;&<(<)<*:,9+8,7-@881GAc^XQB<@;4*:&<$<&<&:(:+<0>2>4C;PJXROJ?:?:HDHGGEJKPTRWNVKXL\RfOfKeJfMlQsRvRvWvXuXu[w\xZsWnVkbuVg\m[lFXDXQeVefgieʏ網C?6B>3A=4?;2=90;7.:6-95,73*73*73*84+:5/=82@;5D=5H?6LB6QE7TH8VI8WJ9YK>ZMEUJNWQ_eby{ɔ⛦뢣㘘،ɀuqiec^`W`V]TVPtMIbFCTBAIAAC<<:AB=FEACD?A?@DBEOMRWVdchqu}}}{p`uYiVaQUHF@4;)<&='8$7%8&9(8'9(7(6(3%4(7-:2<3=5<5<5>9<7<7>9B=C=B[O@66,+#)#-)/-,+((0.4/616.3)2&2%6&:';'<(:(9*7)5)4(9/5-=6PJTQLHB?1(;(=&<';'9(8(:,:/>4B8OFWPRID=C;HCLHJFMLSRTWPVNVOZVfUhSiRkRmSqStRuMmUt\z_{\vUoRiReUfRbZhZhN^ScYiS^`_^W}٩EA6EA5C?4A=2?;0=9.<8-;7,84+84+73*84+:5/=82?:4C<4G>5JB7ND8RF6TG6WG7YIBZEJpW]csrz{vpcTnG\K\HP<<5.9*<'<%;';):);*<,<-<-<.6*8.<1?5A8>7<3:4714.3-93A;E?B<=5<44,4+7-2', 6*G:K>@64--),*,,,,*,*)/+2.5.4+1(1'3'7(:):(:);*:*8+8,4+<4:5<7ONYWEE3/;,<(;*:)9)8(8*8,=3A6JAUKRGG>D:G>KDICLISPSTPSMSNWXdZh[pZrVnRlQlQpGmPvZ}[{VrTkWk\mYhZham`k]gfnfm\_]W{OFmfݺIE9HD8FB6D@4B>3@<1?;0>:/:6-95,95,95,:5/<71>93@;5E>6I@7LD7OF5RE4UE5WG8WI>XMKXNW^Zqppԕ革ꗖ⌋ׂ}yumpgf`_ZYXQQuGGcA>Q=5DH8BT=C`@EnCJOU]dfxknoi`WxIg;U2HAPEM;<71?0@,:$6"5$5$5&7(8+;-/?0@3@36*LBJE50GFZ\IKA?2F9OBPDH7/=6.=6.=60>71@93?:4C>8EA8KC8NE6QD3RE2VF6VH;ZMGVMR[Whlk~Β㚦铕⊌نу{umkde_aY[RQsNHbWFY_CQmBLEMMTU][bZhRpRuTuPlJbBW8J.?8ECKGK>>>6F:H6?+>-=-<->/?0B4D7E:E9B7>5;26-5,3+3*1*4-7.90807/6.5,/&5+7+2#1"9)>-;)<-D7JAD?64*-*-/26755301,0*/,0-0+8191:1;2<0=0?0>17+WLaZ;6;:PQFHPQ<4:/8,9,:-<.;-;,:-<.A3H9I;D6@2>0F1E6E6F7E8F8G:G3;18/4,3*4+4,6-81<4=4<3905-5,7-.$;0=.1"-7&=):&9'8):/=9@@<>37,/,.+**)+(/,448899757473717-6*5(5&5(PEmcHA42CC>BVVA<>48.6+:-/=.9+<-?0A2A2@.=.<-C6D9H?PGRLOINLON^cagitnzduVjQiUoWvVtXp^pnywksXa`m`mbos}숊́|thyjskXON:_VGqgSM=RL4D=3B;3A:2@93A:4A96@;7A@;CC;IE9MG7OG2RF0UF1UH5WK?RHFXR^jg}Ēژ礧흤蛢晞⒚ۋ҆ʃ„ymczXiQ_MYIRAI=A=;>8C9H:I8F3C0@1TIG?;76488:;9874:/<.;.:.8+7*4'2&4*3*3(3)3*5,6.8/=3=2;18/7-6,4*3)3&3%4%6&=)>*9$2:&4%1'51<<=@7=37-1-.--/.439:;=9=2603011/1*2(1%3$1$=1j_TL95@?:=RSJHC=:36.8.;0<0=/;*?-@.?-;*;(;+<,>0>2D8LBPHNFLINLaeafhro{hxZkUjZrYs]tarjt}wy_dgtm|eulw좟Ĕ|hjUHQSK>PJF>DF@D8=65B;D8C8A5>29,6)2'2(3(4*5,5.4.4.4,B7=17,6,9-9-5)1%8(2 1!9(8'4"7%C07&8*6,5.3/53:9?>LKHFBB>=<=7:26,1+1)/,./.1+4*5)7(0!.dY]S@:DC;;MMRQHE;66/8.9/;-:+<,@-A.<)8%9&<)?.7)7+>1G:K@IAIBJEa_^`djnwku]iXe]m^sbtdolr~qsryyaqXfЮ]jPDR9QT?jbUXO@WP@WN?UN>TK2G?2H>2F@4GC:GE9JG8NI6RJ5UJ4UJ4VK9XNDULMZTbkh{~Ñט磤쥨ﭩ▟֦ζgzL]ER>M;G?<=EB:4D9F:1)JEJICE>B;?<=<;B;?7D;MAK>=06)9,7+6,5-2*/*/+2/5.A59+1$3&9+;-8&2245!4"4"4%5'5)0&2)5)6*4(3&3'4)2)3.5233/2-2-4.5-3+/+,/-5.9,7(4%-3"XHYN;3NI41HHOPJJC@;6808,9+<+<*;(9&;(<)=)=+<,8,;0=1?3?3@4@5A7japic_mjqqadgmpylzhxdobidjlnqoqoy{}Zlcwbp}u]rQJY:LR8snZ˷YPAXO@XO@VM>UL=TKLAC5:,9+7*7+6-4-2.3/5384>2;-6)5&5'5'5"49$9"9%:&<+<,8,4*3.5-7+7)6&4"4!4"2$2&0+.,,-,/-2.3+.,-0.2.4*5'8'9'?.*D5>1F>VPB?BAUVRRKHC>=59.9+8(;*;(:'<)>+?-@/>.:,;0=0>1?0?1B3C5i\mdb[kfolbakltxq~o|ir]fY`bfqpzxvwx~Rd[p]njkZtON_;SZ;us\ĸ\PB[OA[OAYM?XL>WK=VJD=?==A>CB;?9<686696;6HA;15+A5K>H:=/8)6)7)7,6.507195=93*5*6*6*5*7):*>,4!44!6"8)8)3(-%@;>8=3<.9)7$7"7#7%3$/&.'.*.-//./,)0+5-5,3&4%9&>*A/1 SE;0A;C?JITUUTSQOMJCC;<28+6&7&7%7&:'<*>-=,=,:,;/<.=/=.?0C4E7\Qg]aYlgpma`fgjqR^^khqem`geiqqxwtunuJ]Rh[m񜡣a`UoHOd=W`Aww]\PB\PB[OAZN@YM?YM?XL>XL>UI;TH:SG9RF8RF8RF8RF8PF:LE;KGE=F?F:>?@EDA<61>:ZYAB@C=@:=8997<8A8E;:.2(/9(8)9)8.:/8091;7>81+2*3,5,5-7.9.=/7(:)<+<,;.;0<695C@@<@7=19*9%:&;%<(7'1%1%1(3,1,/*2*5,7+7)5'7%;(>*;(<,^PF<3/.,@@WXusrojg^YPGA75(. 8'8(8&;)<,=-=,<-;.<..B3F7MA`Wa[pltr`a]a]dHTYegrgoelkpsvvvpsenDXKbXk뒖_zYQlCSh?\gEy|_\PB\PB[OA[OAZN@YM?YM?YM?WK=VJ@@?IE>82,C??=@1;-8'7%9'<)<):(>-:*>2C:/-::245653;6C>KCQISHTHUG?0?.<,=->-?.?/>0<.<.<.=,<,=.A3D6LAbXc]nlrr`c`e`gkvozkv`h_flqx{y|ms^jAWC]Uh懍g]YtI^uIhwPfǻ伺޺޼[OA[OA[OAZN@ZN@YM?YM?YM?XL>XL>WK=VJQI>QI>SK>UL;XM9XM7YL9XM;WK?ULGYSWe^nnjut~}ȍώԏՏӐӋʃ|u|ovioljlcyYvPoBd7V4L8H@EFBJCJEGGCJ=N>LCICCA>ID;44,I@LFBA?=;;<;@=E?G2A5A5A6G8A1;(9&<)=*<*8&:+7)0'C<2/?A/2*,1/5.81908.5*2&1#E5A2=.:*9)9+:,:,;/=0>/<.<+<,>/A2SGg^c_jinochjqoxq{t~mubkdnrzx~quipWfAY@[Qf~ykm]oZy`r֭ӦЧӫԮֱں[N>[N>[N>[N>ZM=ZM=ZM=ZM=YLUL=XLNAEFDA=HB:/7,OFB<=8641051>8E;F9D59(:(:*:'8%9&:':&9&:):,9+7+5+3+3-*+*--3/4173738588;8<9>9A9D7F6H5E+5-2124/6-8*;+=,5&8*;/=2>4=4>5A6J0/..46663-7.90:1;1;0:0;/L?F:@19*6)6(7*8*;-=/>0=/<+<+<.=0KAdZc^kiosinrzvfpoyryjslvwv}hocnRbB[ZM=ZM=ZM=ZM=ZM=YLVJ>XL>YN583/,*&/*:3C9C6>/;*;)<):';(<);'8%5$7%8)7*5*3*3)2*33588<4:-2(-(-+1-3)0&1)6,?*A 9/"0(.,10/1,3+5)6*6+90=6>7:4715092H=KYM=WMCWLHXNOZPX]Ub`Yia\rjfokspvq{u~ɊLj~yrrtl\HLB9A:C@@?:;<>DE><=<>=@ABICMANAL>>@9?6>3,7%:'<);(9%9&:':(:'9(6(2$."/%7.=582400-**&(%'%'%'&*!)".'7(>!;61'8#,#++---+(-)416264666512./,,/,92:191SK"+#F>.&.(<7E@:7/*.*51<7>4<.5)3&5*;.;08.bXZOC:6,:/8-3'6*0%2&2&4%6':*<.=1:0C;\Wppsvx|yq||wt}s{r~r}mxgs`nI\>\>[AVekzm}f~cjw|vzqyo|rvuwy§̹Կ̺ZM=ZM=ZM=ZM=ZM=ZM=ZM=ZM=XK;XK;XK;YL]P@[OC[NFYNJZPQ\SX_U^_Wfd\tibngqjxpyĊď~tnqujW{=A5+5+<3@8>8?:A==;;<;@>B@IAI@KAF<9=4<1;/:,:+A5JAG@A=6351@9C89+5#8';(=*=*;(;(:(9(9(6&2%2%5*8.80911&/%.%,&+'+),+-.*-%+$.'7$;7300.93<*1(,.002+.:>7=4:26/40325872-;582E?E?/+2."51?:E@=83-2,60:1:.9*5'5(9+<0<29/cYXN@84+91:06,9/5+4*4*5)6)5(6(6);0B9YTljqtx||v|yv~usp}kwdq_nI]>\>\CYehwozbu\x]ckppmp]l]h\g^k_qeyizktv|}ƷǿϼƷ\L<\L<\L<\L<\L<\L<\L<\L:A=E@GAH@E@B;6909+9*8(9*?3F9674;7C=OEH<3#9(:';)=+=,<+:)9)7)2#/#4*=3?6914+4&5&2%/$,$+%+(+(+-(+&/(6%:733%70;5A8C;D,626;3=6=8<7=6<2;19.6*6);/@6TMgeorz~||yxwsn}gv`p[mG^\FZ`a~evZiQhOmRtX{]}^x\qX`zM_PaUeYn`ug}j~mrtxyyz~ǹ˸ȶ[K;[K;[K;[K;[K;[K;[K;[K;ZJ:ZJ:ZJ:[K;[K;\L<\L<\L<]K=]K=]L<^M=^M;^O<^O<^O<^Q@^Q@]OB[OC\NE[NF\OI]OO^P_bTmdY{i^pg|t{{zxucMlFRA@A=E;H;G;E9A:@A0D:<731;9A?D?SLUJ:+9)7$7%;)=,=,9*8)4&2&2)9/>7>65./&6)6)4*1'.)-)*(**),','1)9&;GD=:<9:5807-6*4&3#5#6$8&;,9=9?9@8?5<2:.9-9,=1NHc_no|~yyyxtn}et^nVhE\8V^N>\O?^NA]OB^PE^OJbNYbQdcTqdZ}lexrwv}‰΂wlXwD_BTDPJPIHE>EBB@C@GBHDGCDA=?7@7=/:+:*9)8*;.?6FA=;BBAA;6JBXLK>@28(3#8(<-:*7)8+0%3)8/;4:5600+,'0,1-10312537486;-5,6.=0C-F)G+N3R9L3?@M_llzWfCS>P3D3A3>6<99834*/$2*.(72YT\ZXVA?HFB@<7706-8-9+7'5#8#9$:(=-;,6)7.=5NGEA501->9@:815120215283:2:/9.:.6*8+IB_Ynl}v}w~yxsk}dv^pSeF]8V=ZL]TRz_BWhC?EBEFBDAECFDEEAB:?4?3;-8(9(9)8*:-;3IE??=>782/A:ZPh[PCA35%6'9+9+7+8,0&6-;4;440/,-+--493;3=3=1>0=1=1>0A1B4K5N0N-O1X>_3HO\an_nWfP`DX8JAQ:G2:/22-8-;+:*:/2(JBkcLGPK;9;9LJ@<707--9)3':/D;GAC=722.;7:62.2-,-,,./3171:1<1>26)4)B:XRjh|}v}xzxqi{bt]oQcI`:X?[O_QNqX:Sf8]uEa|InSvY{]~`gll}m|o}ponllqqrroprtvtwï̫̾ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8[L9[L9\M:\M:]L:^K<`J<^K<_L=^M;_N<^O<^O<^O:_P;`O;aP>aP>aP>aP@8>3>19+7':)<*<,=1?7=:9903/24294MElah[QCD>63;7UQF@918-:,9(9(=)?'<&;&=*7(3(=4LFGAE@963073510+1-,/+-./1/4/81;1>29.3(;2NHa^yzz|{xn~ew^pZlL`Ia9W=YM]JGhQ1Qd6\tDf~Nu[chjnsttr}pnmllnnoolknrttwƯν̻ʤ[J8ZK8[J8ZK8[J8ZK8[J8ZK8[J8ZK8[J8[L9\K9\M:]L:]L:^K<^K<^K<^M=^M=^O<^O<\O<`Q>aR=aR?bQ?bQ?aP>aO;bL>hOKgNRbP\cWkjfuv}|xzƄ}uzlmY[DL/I5R4=0?1;+8(<,?.@1A7C=7485..30:60'5)UGwj[PC7<0;07*6+:0708263320112364<%6#9"9"9!865629%B(G&J'M3\Ehbu`lWcQ]P]MZ@M2==F7;/./(5';(?&>%9'8+VJ;2?8412/C@WSHA916*6(5%5$:(<(:&7%9*4&1%?5RJIAHB;62.411/-+22,/+.+-++-*1*4,8,=12(7.IB\Xww}vj|_sXlTiD\D^6U:VLZHC^K-Mc5Uo?b}Jt\glnrvzwr~m|i}ggikmmlh~ijosrxũʵ¶Ş]K7\K7]K7\K7]K7\K7]K7\K7^L8]L8^L8]L8^L8]L8^L8]L:]J<]K=^L>\L<\L<[N=]P?^SA`SB_R?`P@bQAcRBdQBdNAdLBjMIhKMdPYf[lnkw{Ђy~sqjba^JW>Q:L?NCQ@KF9=4;0:,6&A0<,6(A5F==57285715.6-8*<*:'6%;0SLZOE98*>.B3:-3+GB//5:6=,7BM'3&2)2(2'"*'/'/&)+7 .&7-A#;Xr-D]l_iZcU\PWHM?@84>7A7?17&2!6#;'<)8-7/E?;7316454DCLHKED;:04)5(4)5*1=3_Ysqxh}_w[uUoLfEc:Y;[?Y]i@;VF-L^6YuBgMw]}cgjnonm~l}i|h}feflmlk~gfgimrv|z]K7]K7]K7]K7]K7]K7]K7]K7^L8^L8^L8^L8^L8^L8^L8^K:\K;^L>_M?^N>[N=[N=\Q?^RB_SC]QA]OB_OB`NDbPFcOHeNHiMJgNQeS_g_tnny~ʣxy|{vji`]aOZFRHSIVEP?J;E9?:<::=8?7>4/8(8);.;4JF016;6A.<@N'4$,%(),+,*+((((+,$'%(%,;D'4CAR&6jubjZaW]OSBC<8>68,D5H6>,/)((-%:6TPHG5445==WUGBG?A99/3)6,7/70=3915.2-4.83?9E=J@A86-0*0,210303021201/00.1-4-9-=13$aP@`P@]P?\O>[O?[RC[QE[QG\OG\OI_PMcQOfTTgUUgUUgV\h]nlisv|ˊԘנʪ}π䄆vsjegS\GQFOHREQAK=E7=7:99<7@7A4?0>->-<+:,B6H?;20):26/6.7,8,7(8&9&:*4-4.A9OCH:5%2#@2>5HD135;7@4@ES2?)0#&$'13-/''&%12)*8:+1)13=R^=K[g^fV\OTMREI:;74?96,?2B5=17-3),#' %/*EC::,,35AB^]?:C;A9=39/=4@8@;@<=;>;A?>>::?=IDB9<45,2+1-311202020201/00.1-4-9->24%8+;0[Tzw~rdy[tTqNmFg=_=\EbTgAHp;3SH2Qa<]xEfNrZu^t_xc{g{gyfyfycxbybya|bzczf{h{h{e{a{`}``jnstwuynolSeYAPM2A>^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^L8`N:aP<`Q>]P?ZN>YOCXPEXOH[QO_UTbXYeX_iYcl\fk^glaildqokrty~ʅڌᎇןӭijy{ށzwsrcgU\MTGPCM>G-=0F:RGH?5.1)9181;0=1;-6'6&8+5-2+=4NBK=:,8*B67.>:/0164<8BNZLU>E38$&/1,,22**/.::37,29@EMXcMW=CADBF>A9=8988978391:2A:NHVSNNC@7295KIMLQRYZRQYV51>6B9@7?5B9C<@;?@8=9=?C:?58>=MJ93603+3,4.30210102/201/0/.0-4-8-?36'5(9.VO|yzocwXqOlFh@c9\?^KdZh35g;0WO8WgCa{KjPsYt\u^wbyezfwdvawav`x`x`{azczfzgzfzbz`z]|]~_gntsuqtiidQcUDSL8G@^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M9]K5_M5`P9_P;\O>ZN@XOFXQKYPQ`W\g`hnfsshysg{sg}qh}ol}pqrwv}z҄响㝌ڠulnqvlvismllgi^`RWFM3=16*4'6*3,70=5E9F9B3A2>20&720/.1.47?PX]dZ_OS.103,-EE66,,-.>@2537bh=B*2-4&*;=@E6:379=7;/043;;GFRS`cilek^a@>E@^[hgopjjKK=;40>7D5<4:1415;-7,6.8,4,39b:_6\AaNeWap/+_?0[W>^lIe}MkSt\u_v_xcycxbu`u`u_v_w_x`{azbzd{e|d|`y^yZ{\}^agmpsr{nrjexe[k^RbU_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N:^L4_N4`N8^O:[N>YOEZSMZTT_Zahbprmzu{u{qzpvpqtrxt}wz~τڋޖܙ͛~yl[Q>MBQIWRWUSRKM>C4:9<9;;9=8@8B6A0?/9,A65+.$I?g\dZUI<26)3):0;06,3)6-1*71;29/>0F5B39+1(4-31-.*.17EJV[]b\a9<9<+,JK89//57()'+XZ>B9=6:#(+<>AE49,21705(.37KNaehncl`i`lbkLLNJ\ZVTMMHF423/ACJJ1.3,3,5,4-4/4/3/02/2.1-0../-2-7-=1;-1$7,C=yv|qhx_rRlDc9^6]6\FcN`IMe5+VD0[Y@^lIe|NkRt[w_x`{dzcv`s]r\s\t]v^w_{azbybzb|b{_x[xYzY{Z~_ekmsus|rupnlfwe_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<_N:aP6aP6aO9^O<[OA[RK\VV_Zakgvso}z~|}w{uxvsys}x{~ĄɍΔ͚ǠɭŦmfJE2A4@4B9HDNNJK?C=?;=<;=:@8@5>1=0:0?64,1'I?cVh[eWOB>24)7,905,2+600,4/7/7.>1C4>04%4*0+3/..-.1478BEMRY^FKQW37FJ80=*7.:;ECHAB1/4-4-5,4-3,4/4002/2.1-0../-2-7-:/>01%7,;5sqvi}at[pPjCb7`7a;_LfO[~86]=0NF1VX@ZeEcxMjRr[v^ya{dxas]pYpWqXqXt\u]y_x`x_y^z^y\xYxWyV{X_dhloqmxjqij~cbv]_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<_N:cQ9cQ9aP<]P@ZPG\TR_Zaa_mtryx~~yyyuwww|x}ĂąȸоѻЬoT\GG5>0G?WQWVNO@C=?<==;=:=5:19080<5:3=5OEXM]OeXcUL>:-8.914-2,60402-5.<3C7C4:-3%5,.&0-/,3154-.24BFX]W\ouDJHM@02:=HK9>7?=F7B-8>J]gmwjrcn]g^kao]nYe\]PIJG74/0540.95D?JDIA@86/4/7166'/0<2=+60:>E?A443.5.6-4,3*3,4/4101/2.1-0../-2-7-9.?20%6,61popcx\pXnOiBb9a`P@`P@_O?_O?_O?aQAbRB_O?]M=]M=aQAcSCbRB`Q>dS?aP>]P@^QI[QPZSZeapsqyxz|~}xzrslotwv{̀ʋƖäƳ̰ϬϧϣУ˜˜Ѩg^FzgueH?QNccKL?A89:::97561;6815.B;<3I?XKOAdVcTXIG9:/6-7/6/4/0-2,70=4<07)5(7,/$/&/)1-2040516479JNY]NS8=6+90>=HS_`igrepbmcn`o]gSSF@854111/.3194D=B:?7<4908193667<4;4;4<6;59331/3,5.7.5+3+2,2,201203/2.1//0.3.7.?58,6,/&;7XW{me|\rPhGeCe;d9`NlRd=?P, C;&CG.KM5Y_CZjEcxMqZxbx`t\rYqYlSmRnSoTrXtZu]u[tXtWvXwWvWvUuTtS{[{]z^u[mUb~MXrCSj>AW0?U/`P@`P@`P@_O?`P@aQAbRB`P@_O?`P@bRBcSCbRB`P@fVG_QF\OG^TSaZad`omkvwwy{}}x|qukplonquv|~ՉӘΨǸźαתۥޥݢۤأѠǛӼ}dŋw}mVJa[rpZ[KL?@=>>@;;6664=883?86.>3K@H;]Mo``QH:5)0&6-5-0)5195=7<38.5)4*5*7.5+2+0+0,2,4.5287>@JLW[^b\d]eaiS[NVQY_gjqflZ`NT4:,5*6-9'5!-'67CPZZdbldmencm[hQZEE<7646355302/62>9>7;4:3818295:69;7:7:797965312,3,6-7,6,2+1,1,201203/2.1//0.3.7.<3=28.1*74Z[s}fz^vWoOiFf?b^QA^QA^QA^QA_RB`SCaTD`SC_RB`SCaTDaTD`SC^PCbUM\QM[QRcYbkdtqmvuy{y{y~x|nsei`gjnru}}ׇݗ۩ػؿۧϡÜkpo`RG]Umiuu__JL@DAD>@8:66=:;6A:707,>3=/F8j\i[[MB62(4+6-2,52A>GC=62)1'2'0%4*1).)/)2,7/=4B9-(43DCVX^bZaS[Q[FQHSOY\fmvntY_>D.5-42<2>+9'46EKWISPWW_^fck`iRYBI977175<8;;955160:3;290907183:6<8999997988874402+6-7-8,6,2)0)0,10121302/1//0.3.6.90D9804./._blwbxWsPmLlCf:];_IfSgDJl;4O>,=<':?(ED/FH0Q\U'B\/E_2Ic6WJ:ZM=\O?^QA]P@^QA_RBaTD`SC`SC`SCaTDaTD`SC_RB\PDZOMZQVbXcjcsqmvuxzz|w|symrbi]daglrx{ʉߕ夡䶵۪ө¡vqrcbWi`rmut[]LNCG@D@?=;957282918080717396:7:7;9:7:8:6845.3+6,7-8,6,2)0)/+0/222312010/0.3.6.8/F<913.,,fjygtbyTqKkGj>c6Y=^QhXeBBgC7[N;GF1AC-JH3EE-LU6Sc>btLlUpXnRkPiKgIhJhKjMkPmToWpVtXsUqSoPjMgJeHdG`D]AWy=Rq8Mi6Lf6Ne7Of8Lf7Oi9Sm>UH8WJ:[N>\O?]P@]P@_RBaTD_RB`SCaTDaTD`SC_RB_RB^QIVMR_Xhnf{tpxtxwxzy{syjr`g[c_gjrv|ƀΓ䭮绽߹׶еƱy|qvksimeoi扄~sredWYMNDE@@:7;7B=E?<3=3B51#0"I;XKN@=/8*6*3*42UUkh]XD>;3;2804-2,1+0)0'/$/$0#9,4'3):5CAEGBG@HDOOZVaVa^igoYaBG:<5738283=9CHSV_6?4;6;ADJOIM;A135195<8<9;9:77370;2;1:09082736475:8;8:8:9;7956/3,7-8.9-7*3)1)0)1-323322011/0.3.6.7/C:701-13jpqzft]tPmCf=d9c8^EdZmV[wE>dJ=aYFTO;KI4PI6GE.GP3L\8ZlFf|NmSmRlMhJfHgHgIiLjOlSnVoUtVsUnRjLfKcHaF_FZBX|?St;Pn8Ok:Rl=Wn@ZqCUo?Vq>WqARE5UH8XK;ZM=[N>\O?^QA`SC`SCaTDaTDaTD`SC`SCbUEaVP^Vcje|yu}yzyxyvyswjrcj[c]ehpv~ǁшәݣ௳㻿þŹx{tyvquleleoga[`[smyu{|yrpccSTHGC?>:<6A;:1C:TJ>26)9,=.?/B1C5@17-2/LM_]WSD?:48170939292:19/9,8+8)(3"@2I>D@;:7;:@7AHRV_Yb^g`iU[AE@>?;ACGJLTQYT]V^4:/5/37:=A;?4812429586422020404.<4=4<3;2837343438898889997755/3,7-8,:+7*2(0(0(1,424332111/1.3.6.91<3710-@CnukubqRiHf;a4^6b>dNi\iGFjF:]L<]VCXQ>RJ7OG4ID.DJ.GU2Sc>^sHgMjOjKgGgFfGfHgJiNkRmUmUqUoQjNgKcH`E_F^G\E[~DWxAVr?Uo@YpB]rG^uG[sCYtAXs@NB2QE5UI9WK;XL\P@^RBaUEbVFbVFaUE_SCaUEfZJh]Yngwup|x{ywxvwpujoah^f_gempx}͉؏ؙ֪֡۴ߺɼĻqqqtpopfewhenj_Yd_ZTf`snzv{wwshfZWRNHB=6D=;4G=\R;0<07+6(>.D3B3A1A386>>CCB@=7817/7/:393:3;3>5A5E8G6-;%J8L==50+009>AJKTU`Ze]eYaLR>@4/7/;9@@CHDJBI?F5;26368<7914/2142095740.,*0,3.3,=5=4=4<3:59565655757576866542.1+7.9-:+7*4&1&1(1,425342211/1.3.6.;34+:520UXpxcnZiI`Ef8b/]5bBhLePYj5/^G7XK:UN;[P>VI8M@0JC0@F,AO.K[6Xj@bxGfJhIfFeDcBcEeHgLhOiRkSnRlPhNdJaH_F_H_H_H_H]~G]yF]wH`wKcxOczN]uC[vAZu@JC3MF6QH9TK.E6>-2"7'E7E?973.50;5=5<4=4;4925.4+5)8+<,?-S>G2<):-=2;57443KNMRPUTYY]VXMOD@5+7+7/52242618.64>3;5?9B4>+5(3/9-35759./*+0.515/<4=4=4=4;6:676664635253455411-0(8,:+:+8(4&3$3&4*5052423/2/2,4,6.=4/&>935bgoy[iNcC]Eh:e0]6aGhJ]CFR,#VI8SL:OH6[O?UI9F?-HF1>B'@J(IU1Sd:_rEe}IgJeHcCaBbCcEeHfMhPiQlPkMfJcIaG`F`H`I^G^F_}G`|Ia{Kd{Mf|Nf~N]xC]z@^{CDB6FD8JF;PG>RH>WI>]M>_O?`Q>aR?`SB_VGbYRgb_ojnso~wqzt|yywppgg`a\_`bfhopyz̄֍ߖ眙栞ݡף٤ڦإץԤӥѣ͢ɢȟÙ|rn}igld^`fZZkYUrWP}WNWORIZPXPZSkdyr|uqus_]PLEAZT712*6*7(7'7&9(;+<.?18.<2?4;05(3':/@590907.7+7):*?,A/=.@4E:G+?*?)?(?&?$<$<$8'9+<,9+5.545;984:3;4;5:595735435465454535/5,5)8,9*9(9&8&7%6%4&5-4/504.5,5+5*7,907/:6?BmwbsSjIcKj6[6_cNjIV^$"D, ?:'HE4PMC/?G/BH&EK%KS.S]8[kDavKd~NdJbF`Ba@cBeFhJlPmQlLiHgGfHfJeIcHaGdJdIbGc~GdJdHe~Ga}C[{<\=_B=?4?A6FC[K>]M=`O;`Q<^SA^VIc[Xhcinlysotpvptppmgfaa]^\\edkjtr}{φٍ易囖ٜ՝֞מ֝՜ԛўќ͜ʛǚēxtk|mdif]^f[YiZSoWM{UJVKVK\RYRXRfaqjvo~wusgdUSZU2,/%7)7&7%8&8';*;-=/9,9,:,:,9+9+8+8,;1908.8,9*9(:&9&6*80=5@8A9?7<4914->6H@OGQINFC;7*7%8$7)4,//+3)7(:+@*A)A&A#@!<=:: 9%;);-9197:;;94:5;4;5:595735235465464716/5,5)9*9*9(9&9&8%8%6%5+3+4,5*5*6(7)7*;14,54TYes[pGbIhAd;`3[;aMmLb8?S*$A5'69(;<,B@1DA0@?-=B.>G,=CKP'\b_?bB69.:<1??7DA:KB;OE/>/6(/":.8-7,8,:+:)9&7$5)6,8.:0=3@6A7B8:1@6E;FG=@67+6%6&7,4/03-5+9*<';'=%=#;!:77686$8*;2<6=8;::94:5;4;59585735236475565616/5,4(8)9)9'8%8%7$7$6%5'4)5*6(6(7(6)7+<21+88kr]nPi<[Hl7]>e5[>bVq?Qa#(L/);7+07'37&9<)@=*A<(@>)BB&?FXa4s~Tdw`hSa}LaG`C`?a@c@hEjJkMlNnMkHhHgGhKhKfLdJeKdJcFdGfHfGeFbBcDeEhH25*58-;<4A>7G@:KB;RE.>.8(/!6)5)4(6)9+<+=*;):-:/909/:1;1<3=3D9?8:8794:5;4;59585735447476665726/5,5*8*8(8(8&7&7$6$6$5%6(7'9(9(:(9):+:13.HKoyVjD_<_Ag3\8b>cMlOe0=J C1-11'.6'4=,=B.B@+B<$E>$HE$U\0p~Mr|mjW_{J]~E_Ca@bAfCkJlLmOmOoNlIiIhHiLiLhNgMfLdJdGeHgHhIfGdDgHiIlL-3'36+891<;6B=9G@:MD=QG=SI=SK>UNDZUQa^eigumklkjhb`XVPPQQXY`cfjorux|Ђֆه؊ً֋ϋ͉̊ЉшъщЌϋȍ~wmYjSZnVTc\RZaOZ_HeZDxUBLDTRSWRY^dejkluqunoh~v{~l`?28(;(='='<';':'8(7):/8.8,9+:+:*9)7(9+7+8,7+7*8*<,>-<0=0<2;/:08,7-5*@7@5=49.80;1:25,/%0)2025/8-9+;,<-?.?/@/@/A/?-?.@)9)8+70:6=8=774394:5;6:79585654448485676726/6,5*8*9(9(9&9&8&7&8&8%:&;'=(=(=*=,<.7/;8^eaqPi<[Ai4_4`1YKlYq>NZ%-C),:2/-0)08+7@/:B+<<"A<UH(`[5{Slwo[aK^F`DcBeDjGoNpPoSoSoNlIiIgGiLiLiOhNfJeIdHeIgIhHgGeDiIiKlN+1%.4*470893>:7B=:HA;KD18*4&8)<,:,:,;/;-:/9+5+5(6,;/>4?3?6>37.,#+%-*02391;0<0?0?0@1@1@0=/<-9,9*7/8IE4>1>0@/?.$?%@(@*=-;196U\^qGc?a:a7g3b8`FdNa@IS12A64@:<:46?56<7179+4="9CSZ.PqŊˎ̒Í}{egQ_E^@c@iDoJsPsSqUoSnNkJgGeEgJhKiNiNfKdIdIeHgJhIiHfEjLlNoQ&.!(0%-2+13.331764:95<;6GD=DD*;'7$4#B2OAN@B47)7)>/;+:*8(7'6'6(8*8+;.;/9-6*7,<1<271888=:A9B4A/<,;,:/;19384857563657376;9<69453376;9869796:7877767465:5:7:8995827/7+8+:*9+;*:*:(:*;(9":"=$>%?(?+<.81<89?48E26C41=:)>E&FU*bs?aˌɋËz{efPZ|@^?a>hCoJrOrRpTnRnNjIfFdDfIhKiNiNfKeJdGeFgHhGhGeDkLmOpR(0!'/"(-&).(.0-3317839:4==5?@8DE@JLKORYVXeZ\s]^}YX[Y^]eennwx؄⌌솇䂂܀ւӃ΀ȁǃ˄ΆЈӋҌϊŊ}xwozkegf]Xm[Qm[Mi\Lf^Kd_IeaHhaGo_FoP;UA]OaYYXQTS[\`heYPD<707/:1=/;+9(:&9(:)8)8*5,5,/%3)8,>/@/@-=*9'9)0"WJK?/#=12<07,8->4C5;687899:97877;=<<::8785747575979899::9;9<9<8<7;6:8:9:;9;5907,8+9)9+:):):(;*<)9#=':#49%D3?61,^eVgIb<\1X0Y6cBiYoFQo33N3,B?6>C<@78@-1L/3K2.A9&DJ(Zn=~_włʌ~nfRXvBY{?]>cAiDnImLlNkOlNiIfDcBcBfIhKfLdJgMhNgKfHeEfEjIkJqQrStU*0")/#).').(-/,130561782;<4>?7AD=HJGOPTSUaXYkZ\u\Z^]dbkjut~·ߋ鍍년 ؀~Ҁς̅Ɇȇˉ΋ό΍̎Ȋ|x{stknlb`e]Re`Me^Kf^Kh]Ki\Ij^Hk_Gn^Ew_G[CYFZLVPRSQXX_USLE>9606/909,9(8&8&8(8)7)6*4,5,0'5)9+=-A/@-<*9(8)<.REH<4(:-:,4&=,<+;*;*:)9)8)6(7*8,7,3)1'1(7.<5DG8>/9/:0=.;1<6?5:3622:8EBIFDC?>:7989796858598988788999:9;9<9<7;6:596888;8:59/7+8*:*:*;*;*<)<+<)9$?):%5:';/:2<=^gPdA[8W6[;`>dIe?L?>_:2G;/:>08>2F<:R>=N0.S8/VK5ciEx[p}Ɓ}xr^YuETp=\{B_@b@iCmHlKkLiMiMgGeCcBcDgJiLhNgMiOiMiKgGgFfElImLpQoRtU-1"-1#,/&,.)//-11/34/45-9;0<>1@B7EHAKMLQRWUUaVWi\Yt^]fdpnzx΍ߐꐎ튉燄߁|}ȀÆLjƊʌɌɌŌ|v{pujpndbi_Vc]M_aL_aKc^Jg\Jl[In\Ho]Gq]EwaIxX?S=VDXOUSOTMS><<784716/6.7+7(7&8$8&8'6)5*3,5,3(6(9)<+?-?-<+8(5'J=F:A584627272728596;8;877888:8;8<8<8<8;58475777:7:48/7,8+:+;+<+<+<)<+<)9&@*9$6$;+0'40PT[iJ`:U7V@]HfHdNa89e?6R@2DA09=,57)>6+K9/E-#R=,g]B_t{z{xm\uKHb5Nh8[xB_}?c@hDlGjIhJgLfKdDdCcDeFhKkNkOjNiOiOiMhJgHhHlKoMsVsWvY24&04&01)01+12-23.34.46+9;-;>-?A3DF9IJDMONRQWSS]XVd\Zoda~nlzwÌ֑㔑ꓐ뎋≅ق||~Ë}{vyn~rgmmaak^Vi[Pc\J]`K]aJc^Jh[JmZKqZJtZIv[FsWAxR;Q=YF[PTPFI>A2/5/51605.5+6)8)7$8$8&9'6)6*3,6-6)8'7&:(>+?-;+8)4'UI<18,B45%=+=+8(8'9(:)9)7)6(3'6*3)2)4,:3>7?9=:45596;5;2:397=<@UVbbmjidVQA<634/61717182859697:878898;9<8<8<8<7<5:686797<7<49/9,9*;*;)<)<+=);*<(:'@,8&8';-+"54`gTdG\-=@-@C.DG4IK>MNFQPNRRRVUSYX]a_lkius}njӕᔑ␍܋ӄā}||~zxsznzrfjm_^j[Ti[PjZKfZJb_Lb_Le^Li\Kn[Lr[Kw\K{ZG~UAR=RAVFRHG@88331-3/5/5.3,3)5(9(8$9$:&:'8)7*5,7-;+:)6%8';+=.;.7,90\T=55+A53$:(?+:):*:+:,;-:-8-7-3*1)1+71<7>:;77475;<8>7=7;7;797:::=:=7;2;/8*:*;*<)<*<(;););(=*8'9*8-/)@ChrM^H[DYH[O^T]TWXUdM?OL9LG4JE1FD-?B'=D#>H#KV.\g.==1==3==5;<4;=2;=/?B/@D-CG.FJ3KL:NOAQQIRRHYWJZZN_^\gerqn{yďяӍϊǃ~yzwyv{v|y|}}x|tzrvksrffm_\j\Sk[NlZLl[Kk[Ki]Mg^Mi]Mj]Mn]Ms^Mz]MZI`OVGN@J=@76.1+1+516/5.4-2)4'6&;(9$;$;&;':)9*7,9->,;(5#5#9)<.;/7-?7[TIA:0@36&3 <)9'7'7'7(7)7*7,7-<3:293<7>:=9854196<9::8:>@PPbcppheTP=61+40;7=:;7;5:294837373556669697;8<8>7=7=6:8<898:;:>:>7<28TXepK\I]J\M[QZVVZR`RPI7HM9NI5H@+;567>O%Lf6lTw\edfkt|mn}\Q`Cg{HiFlGmGjGfGbGcGhJlMoPnPlMiKjJjLsTsUsSrQrOsRwUzZvZu[sYRK;RK;RJ=RJ=RJ=RJ=RJ=RK;UNXQ?YR@[TD\UE\UEb[HaZHaYLbYRe][kaiqftuj{zn|pss|puj{mbre]jc`k`_g_\c_Z^^ZY^YUaZRbZOe[Og[Ki\Kk\Ik\Gm]Fm]Fj^HicMqfTqZJuOBWJ\PYLZLN=E4<,7(8-80411-6/7.7.7.7.7+6)7)8)8)9)9)9+9+8+;,;+>-9(1 2!9*H9=,2#PFJ@F<:7487::::776493=7F>B9:/4(1&5);/?3:0<3?7?:=;;9899:7:8:8:999797959540516576899:9:9;;>9;99=:A=B;A6?1:)<+=*<(:&:%8&8&A0<-/#/&LJmoloVZLNNOQMUOXO]RaTjSWZ/:M7FTa)~Poyxs~ahL\mCYdBT]BHP9?D0:=,@C2<@1:>0]sBgHpKoKlGjIiKgJlPmSoSlPmMkJmJmIqLqMrNrPtRvUyYz^ycmZbOWN?WN?WN?WN?WN?WN?WN?WN?XO@YPAYPA[RC\SD]TE^UF_VGd[JcZIcYMcYOf[Uj_]nbdpdhreltgpvirvirsfmm`gg[_bXY^[VZZRYVOWTKXTIXTH\VH^WGcZKcZIf[Ig\Hi]Gj^Fk_Gh`IcbMngTv\MSFVMVORJQEH9C0=,9)8,8062406.8.8.8.7-8-7,7+7+7+7+7+8+8+8+:,<.>.9(1 2 :)>.<.:-4*4);0E:OBQCOCF?@;<5;4=7=88633777879787797=9B:A7?4:,6'5&8)=-@1A4@6@7=8:777567:6:6<7:89879595:592:3:5;6;8;89999:;;;<=?=A;?6=2;-;+=*=+<);(:&8%:%9'8)5*<5QPee^aMMNLTMYP\Q^S^S_VfQ`_/Sg*^r3zOn|pbjHauBTe;JX7FP7?H59?158-:^tEgHqMpLnHkHkLhKmQnTmSmQkLkHlHmHpJpJpLsQuTxXxXx^mXbQYH]TE]TE]TE]TE]TE]TE]TE]TE[RC\SD]TE^UF_VG`WHaXIaXGe]Je]Hd[Jd[Le[Qf[Uh]Yh][i]]j^^k__k__i^\f[YbWS_VQZVMWTKUQHRNCQMBSOCWQCXRB^WG^WEaYFc[Fg\Hi^Hk`JhbLbaMngUy_PXN[UVQIEE@@7>1;/8+8+9,;/:/8.7-7-9.8-7,7,7+7+7+7+8+8+8+9+;,>0>.:(2 3:&>,>.?08+2(4*<0F9M?ND:643204297=<<<;<9<5:27265899<:@:8-:+6'4%5%8(<+=.D5C6B8=79464557969696977779595:3:3;4;6<6;8:999889:<<@>B=?9:17+7(;,<+<+;):(9&7%9&z6#y6%9,F=SOWTPOIFMHSLYP^SaWaW_VePsrFzVn{|[[oaXIaXIaXIaXIaXIaXIaXIaXI_VG`WH`WHaXIbYJcZKd[Ld[Je]Hf^Gf^Ig_Lg^Of\Pf\Rf\Sh]Wh]Wh]Wh^Ug]Te[QdZPc[N]YMZVJVRFRNBPL@PM>TN@UO?WQAYTA[VC]XDaZGd]Jf_LfaMdcQleUv\O[Qb\ZXFD<:<8;6:08-8):*?.?/9-7,8-9-8-8,8,7+7+8+8+8+8+8+9+;,?1>.9'3 38"=)@.?-:+7*5*7+:.7<380625587765615(7'6&7&7&9(:):*A1B4A7?8;5957687687878868694:4;492:2:4;7:8:89799<:@3B%:F.=F3;A3:=2:=4<=599-?@2<>39<1<@29B/?L2PbNK:NK:NK:PMTQ@VS@XWC[ZF]\H^]Kb`Qf^QmWJ[Ricc`MMBC;=8984709+=)C+B+;+7)8*:+9+9*9*8)8)8)8)9)9)9)9);,?1>0:(6"47 =&B-;*;,:,9-8.:0<0:49<4<3928384838256<494:7:9<76210(6(:(:(:(:(:(9&7&:+;/>3?7=8;896876666667484:3:3<3:2;2<5=7=:><=;>=@?1;=28;0;?18A.>K1Pb8770;.?+C*A(;*7(8)9*9*9*9*8)8)9)9)9)9)9)9);,?1=/<)9$65;"A*B.@/;,7*2(4+;0=85:3<6=8>:>;>:=9<587:9>=>=>962/0'9+>*>*>*=)<(:'8%6%7);0=3<5<7;8;787757585:4;4<4=4>5?7A:A;A>A?@=B??:@8=38-5(5'8(<*<(<)<(:&9'7%6$6%}:)t3!~9*OAYNRGOEVJYN[MZM[M\Q_T`WgW~xXy^r|ZU`B;E,/;%0;*0<.3=24<16<2?1:<17:/:>07@-=J0Oa;bxIkLuQuQtNqNrSpRrQsPrOpKnJpLsOvRyX{Zz]x]qWgO]EXB`NYISzCg^Og^Og^Og^Og^Og^Og^Og^Og^Og^Og^Oh_Ph_Ph_Ph_Pi`OjaPjbOjbOjbOi`Oi`OiaNiaNiaNh`Kh`Kh`Ih`IhaGhaGhaGf_Le^Kb[I\WDWR?PM:LI8IH6IH6GH6GJ9GK:HL;IM;A@CAEBC@A??1266:<=;;9714.4)<->+>+@,>+>(;':'7%7'8+8.7094=9>;:79595:4;4;4=4>4B7C9C9<3:/8+6(7'8):):(=)<*<):'9(7&6%}6$x3#x5%B2UEWKPCPDZLYMZN\Q\Q[T\U[VbUkbEV`=JS4=G,6?*2=,4>35?66=68?8=B;CF=EG/;9*78*=>0:<17:/:>06?,=J0N`:awHkLuQuQtNrOrSpPqOrNqMpLoKrNuTyX`~az]qUfL_G]E^IbPYISzCh_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Pg^Oh_Ph_Ph_Ph_Ph_Pi`Qi`QmdUlcTjaRi`Qh_Pg^Og^Mh`MiaNiaLiaLiaLh`Ih`IhaGh`IgaKf_Le^Kb[H\WDUR?PMSQDSPAXLYSRODE::75;3>/=)8":)8'9(;*;*;*;*;*:):):):):):):);,;0:.<,>+9#37?'9#;)>0<18.7/<5?==B?DCEDC@?;7501./,51:6<6:28.8,:+=->+?,@-@-A+>*=*;*:(7(5)5+90?9C>=7;5;5<4<5=4>5@5D9D:C;A9?:;685937-8(5'6':)<*:)8&=*<+<*<)~:'|8%{6&{6&y1#8*G8SCPBL=RE_SWLYN[R]T]V\VYT^QaX;EM(6@8A&>G26BE*;:&78(=>09;069.:>06?,F7GK=IK=AE4KJ6\Q;aE/J9j]g`USFEA@A=>5=0=-4%5&6'7(7(8);,=.<-<-<-<-;,;,;,<-2(7.;/:)7"579"A-;+6)4*6/<7C?HEDEEHCC:661808.4+9/9.8.8-9,:+<+<+=+=*>+?,@-A,A-@-;*:(7(6)6+8-;3<4=6=6?8A7A9B6@6@5H=E;A8;25/3-1*2+9-;*9+:*:););+<+9'}8(|9(|9(|9({8'y6&x3$w- A4OCMAL@QEUJRG\R\RUMTLZUXSWTgZ]T5IQ*AK(BK,>H/7@+2=-4?14<1HPCZ^PW[JMO:DF.AA'==%:;)>?1;=2:=2;?14=*;H.PbF7>F7=E6@F8>E5>F1HL5MI0U?'Q:sbcX_ZUTGG@>A=?9:09+=,=.>-;-;+9+:*:,:+:,:+:,:+:,;.?5B:B7=/6#1125#6(;/A8E?IDJFKHCAEDB><39/=0?1=0?1>2>0>/=/>.@.?,=*;*<+=,?+>+>,>,@.=-:,8,8+8-:09/<2<2?5A7C9C9D9E8B6A4=3:06/5.4,7,:.=,;,;+:*;*<*<,~;*|;){9)y:)x9(w8'u6'w4$4'D7NCK?J>QDTIRGSJXOUOVP]XWRSOcT]W5Xc9_jBZfBIT66C)4@*0:<19<1<@25>+;H.PbMKD63?3A4A3A4;,:,8-7+6+6,7.:/;/<,;-;,:+;+;+<,};+z;*z;,w9*v8)u7(t6)v4&;1FEI0?C(=@#:<$89';<.8:/9<1=A36?,MK4>4>4>4?5?5?5>7?;B>D>F=FM@PDSHPGMGIEGBC?A=B=FBD??7=0>.C0G3I6F4E3C3B1A0}@.zA.|?-:,8,9+:,:,;-;+;+:+:)8)8*9,;/=/<0:/8.9/:.:.:,9+8*7)7(6)6*7+8-9/<0<.<-;,9*:*~9*}:*};+|:,z;,y;,w9*s8*q6(r7)u5)D8H=K?H:IB)=A(;='78(:;-79.9<1=A37@-NKB1=I1?G/LG1S>+g=-ZL_S>43+?9XUigdeRUJNNPIAF<@6>4@6D:G=G>JAJAJBJBKCKCKDKESRTTSRROSLSLULUNLHIFEBC@B@C@EBFDJFE@>7=2?2B1E3G4E3C3B3@0?1~?0z?/|>/:.9.9.9.;-;-;-;-9*9*9+:*:+;-<.;/;/9-9-:,9,8+8*8*8)8)8(8)9*:,:-;-:-:,9+8*}8)}7+|8+{9+z8,y9-x:-v8+q5*o5)q7+t9+H;IC-B47@-;H.L^8_uFiJtPtPtNrOsTpQnMmLpPwY|az`rXiQZA\EaIeMgMgKhJfLcPY{IRtBi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkaUlbYlbYlbYlbVlbVlcRlcRldQldQldQlcRlcTlbVlbXlbXlbXocUnbRkbQlcRlcRkbQg`Pd]M^WGYSCSM?MJ;KH9GE6EB3?B/;H.?H-OC-a=-E:XRNJ,+:9=;SRpnvvehX^^_UQPFG@C:D=G>GAG?HCJBHDJCJFKDKGKGHHGIHHGGHDHDGBFBBAABBABBCBB@A>A?JGC?<6>3@3A0A0C3A2@1?1=1<0<1=1=1;1;1:3;1;1.9)9(:*:+;,;+;,:+:,9+7)~6({5){5){5)z6)x6*x8,w9,s8*p4)o5)r:-v<0M@KN)?O(J\2_rEk~QexKXj@M_7@Q-6E&7D*=F1=D4:>07;-8:,:;-68-8;0>B47@-9F,I[5[qBeFrNsOsMrOsTpQmLoOsUx\z`s[iQ`HYB^GeMgMfJeGgGhLaNXzHQsAi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkbSlbXlbVlbVlcRlcRldOldOldMldMldMldOldQlcRlcTlbVlbVocUmaSkbSlcTmdUlcTi`Qf_Ob[K^WGXQARLB>@9C?C=C@D?CAD@ECDCADADDFGHIHJIIIGHACADBEBEAA@>=:=:FF=<83;2@4?1>0@1G]/AV-7H$1@!6B*=F5PK8MH5ID1DC.@F*DD([B,TG\X>A/3IN?E;>;FBFBB>>7D=D=D@EAEBECDEDF?C@DBEEEGGFFBC>?BD@C>A=>>>A?C@ECBB9850;4?6>3=/?2)=C5?>@=@=C?B?>:9370:0=2>3>2?2?3=2;393938192;0<.<.;-;/:.:.:.~:-~:-~:-~:-};/};/};/};/}90}90~80~8.7.7.7.~8,8,~8,}9,|8-{9-z8,x8,x8,x8.x8.w7-v8-v6,t6+s5*q5+m1'r6,n4)m3(o6+m4)q8-I=SHSJRGRHPHQJQKRLTMTK[NcQo_HYU:MV7O_;j~YbxQYoHUjCRg@Mb;IY5CR17D&4>#2:#6;'<>0@B5@@6<>358-39-4:.7:/9=/;?.=B,%Q?)kP=XGNBE=D?WVTTQQPONMMMLJKJTTHG=>=:B@EAB;>4D9E9F=G>FBDDAEAEBFCDCDDEDCFDFDFDEAD@B?A>A=A=A=C?E?C<>6:090:/<0<0A2~@3~>4<3:3918190;.<-;,;,;-:,:,:,9-9-9-9-~:/~:/~:/~:/}90}90}90}90}90}90|90|90|90z:0z:0y9/y9/y9/w9.w9.w8/w8/t8.s7-r6,r6,p6+p6+k1&q7,m4)l3(o6+l3(p7,~H>RISLQJPJQLPMQNSOOGSH[K{ePsiPhkLfqQgxT^tMXnGPf?La:K_:K\:GV7CP4>2;=04:03;05;16<0:A,>D*Q[9^mDkRpRpSqRsSsVx^|exakT`I]F]F\E`IaJcLeNdMbK`I^I]LRtBIk9i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTnbTqdTo_Pm]Pm_RqeYog\ldYhbVfbWpl`{xi~{jyizubpiVe`JTT(MB.S@/U8(]7*l=3n70u91~;5@:IBPJXPZR^YSNGEB?DBFCD@@:A;CG@GCFFEFDFCDCDCDCDDEEEECECDBDBD?C>C=C=C=C>E@E?B<>5:18-9,;-@2@1~>2=1:19181:0;.;,;,;,:,:,:.:.9-9-~:/~:/~:/~:/~:/~:/}90}90}90}90|90{8/{8/{8/{;1{;1z:0y;0x:/x:/x:/x:/t8.t8.s7-s7-r6,q5+o5*o5*j1&o6+m4)k2'l6*i3'm7+}G=PIPIPJQLRMSNUPVPWO[P~^OtbNoiQorUlwYfwUQeBK_:EY6DU3EV6GV9GT8ER8?I0*7;*:<.<>0;=/9;.6<25=26<26<0:0=@-=C)MW5Zi@f|MlNnQqRuUtWz`w`nWcL\E\E\EZC_HaJbKdMcLaJ_H]H[}JPr@Gi7i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTnbTrdWoaTm_Rk_SkaWlcZle[jf]jf]xtix~r}zg`cNOT>DG2FE1HC0F=,L<,VC4P9+R6*V4*Y5)\6+a9/e=1m=1KBSJUONKFDABDCFF@>A?B>E@ECFDEDEDDDCDCDDDDDEDEBFCFBEAD>E>DDA8;18,9+<-@0@1~?0=/:1:/9/:.:-;,;,:+:,:,9-9-9-9-~:/~:/~:/~:/~:/~:/}90|90}90{8/{8/{8/{8/x8.{;1y;0y;0y;0x:/x:/x:/v:/s7-s7-s7-r6,q5+o5*o5*m4)j1&o6+l3(h2&k5)h2&l6*|FG2:A/9=,9=.9=.8<-7;-7=36=56;46<2:<1;=/bxIjLnQsTwWxZ{ar[eN\EZC\E\EZC_H`IaJbKaJ`I^G]HY{HNp>Eg5haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTrfXth\sg[mcYjaXle]snhzwp~wz{kcfSOR?GJ7EH5BE2BE2EH5KL0A9,A7+@6*F4(S5*qB8PHPKIGGIEIBE@B@BBACBEAEADADADDDFDFDFDDEDEDDCFBFAF>E=E=F=E=F>A:C;E=B9>39-;..=-;/:-:-;.:-;-:,:,:,9+9-9-~:/~:/~:/~:/}:1}:1}:1}:1|91z:1|91y90y90x8/x8/v7.y:1y:1x90v:0v:0u9/u9/t:/r7/q6.q6.p5-o4,n3+n3+m4+j1(m7-j4*h2(j4*f2'j6+}D;NGNHQJTLUOWPYR[Q{YMv\OkZJ]UBYXDY^HOYA?K3:H/7E.4B+5A+8D.=I3CL7EN9BK6?H5.5<,4:,5<45<56;56;49;0:-;@)GP1Ra:`vGiKoRuVyYy[x`nW`IZ}C[~D^G^G]F`IaJbKbKaJ`I_H^IW|ILp@Bf6haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTkaUndZpf\lcZkd\rmg|ľrfcTPQ?FI8>E3;D1:F28E38E38C2:B34(P:/e?6EAPOX[QVCIFJEFFFEDEBDBD?CADDDFDFDFDCDCDCDCEAFAF@F=E/?/>.=-<-;-:-;.:,:,:,:,9+:+9-~8,~:/~:/~:/~:/}:1}:1}:1}:1z:1z:1y90y90x8/v7.v7.t8.w8/u9/u9/s9.t8.s9.r8-r8-q6.q6.p5-o4,n3+m4+l3*j4*h2(l6,i3)f2'h4)e1&i5*{B9MGMHPJTLVOXNYO|\Qs\Nk[L`WFVSBPSBJQ?@I64@,3<+2;*09(09(2;*5>-9B1G4:F2:C25@/3>-1<,3:33954954928919;.;>-;@*CL/O^7]sDiMpSwYyYwYqYfOZ}CX{A\E]F]F^G`I`I`I`I`I_H^G]JV{HJn@Ae7haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlbVj`VjaXkdZkg^upjμzym]_YIKL:@E1;D/>J6=H7=F5;C4;>5:;3983880==3C<2N71a84HH]_`dWZQSNOMKKJHGFDDABBCDDFDFCECEBDBBCBDCD@D?F?E.>-=,<,;,;,<-:,:,:,9+9-9-~8.}9.~:/~:/}:1}:1}:1}:1}:1}:1z:1y:1x90x90w8/t8.s7-r8-t8.s9.r8-q8-r8-p7,p7,p7,o6-o6-n5,n5,m4+l3*k2)i3)g1'k7,h4)e1&h4)b0%f4)zA8MGMHPJULXNYOxZOr\Nk^N^WGRPAKN=CJ:9B12:+08)17+17-06,/5+/5)08+2:+4<-9D4;F5=H7-.800621622717829;0:<.:?)?H+KY5[qChLqVw[wYsVgP^IUx@WzB[~F[~F[~F]H_J_J_J_J^I^I]H]JUvIJk@@a6haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlbVpg^ng_lgatqj}ub^\GKM7CH2AI2AI4@G5BD7AA7B=9C97?:69<5>?7B71J.+d66QRginm\\ZWVSQNLKHHCDBCCFDFDFCECEBDBBBBDCCBC?D>E>FD69A208+/7*6<247058157247025.06,08-19,6A3:E5=J9>K9-,6..400511606718:/:<.:?+WzB[~FY|DY|D\G_J_J^I^I^I]H]H]LStIHhA?]7icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSjcSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUldWibZgd]vsnʵƶibbFEH-DH/CG0FE1GD5F<3C60F42H:9>=9>?:B:7I75cGFjjœ譩ҋtn]XSPONJLFKFKEGIKDF;>>@GIDG:=@@@@A@B>C>BA9@9A9B8@5:.8*=0>/>.>-=,<+=*<,:+9-9-~8,~8.|8-|8-|8-|90|90|90|90z:1z:1z:1z:1y=5w<4w;3u:2t91q8/p7.p7.o6-m7-m7-l8-m7-l8-m7-m7-i2+m6/p92o81k4-g2*g2*h3+e0(i7.d2)]-#`0&_/%b2(s>6OJPKQJRJ}YMv_QfYITN>DE5>E5:C25@04&DR1WlChRs]w_rWkR[~DXyDTu@Tu@WxCZ{F[|GZ{F^JbNbN^J\}H_K`L^~MTsJFd@2I:3L95K<9?:7BA?MHE]RPyjgβſ쳪͂|c^VVRSHMADDEEEHHJKEF<><>AC????A@A@B>B=A<@9A<@;@9B:C;A6;18-=0>/>.>-=,<+<,<,:+9-9-~8,}9.|8-|8-|8-|90|90|90|90z:1{;2{;2z;2w<4u<3u:2s:1r90n8.o6-m7-m7-l8-l8-l8-l8-j8-l8-l8-k6.n70o81n91l7/i4,g2*e3*c1(d4*_/%^.$b2(^.$`0&p>5JERLXR~XOrVKdRDQJ:>?/:A16A05@03>04<14<15;17:379477577557246116//6./7,.9+1<.4A08E49H58G44E24B1.8/.5..3--2+23+46+8:-9=,7?(DQ3WlEhUt`wbpYgPY|DWxCTu@Tu@VwBYzEYzEYzE[|G_K_K\}H[|G^J^J^{MSnKF_A9R4icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUneVneVlfZed_y{xشğl`gEQX7DG,DC.JD4LD7KA8I>:C;9SJKia_wvecBEDIRVUTMKDACAFEEFDDCD=?>@@?@?B@B?B=A:@:@:B:E/>.=-~<,=-=-9-9-~:/}9.}9.|8-{8/{8/}:1}:1{;2{;2{;2{;2z;4x<4t;2q;1r90o9/n8.l8-l6,k7,l8-j8-j8-j8-j8-i9-j8-j8-n91m80m80m80m80i7.f4+c1(d2)a1']-#_0&c4*\-#_0&sD<}PJVP~YQpTI^J?OC7?<-46(2;*0;+1<.2=/4<14<15;17:379479668357257227007/08-.9+0;-2?.6C27E48G48G49F54>33:2/4-,2(/0(13(57*6:)6>'DQ5YmJkZwfwflZ_KWxCWuCTr@Tr@VtBXvDYwEYwEZxF]{I_}K]{I]{I_}K^|JZwKPgJAW@3I2icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUneVneVneVneVmg[jkfڴefmLMQ6FH0HJ5KI:HD9D@7OGDj`_収cd@?PKTMPHF@GBMJKH@?>>???>A?A?B?B=B=>9@:C=E?E>A9=5;2<1=0>/>.=/~<,=-=-9-9-~:/}9.}9.|8-{8/{8/~;2~;2|<3{;2{;2{;2z;4x<4r90o9/o9/m9.l8-k7,j6+h6+i7,i7,i7,h8,h8,h8,h8,h8,m;2l7/j5-i7.j8/j8/f4+a1'e5+a2(].$a2(b3)Y* a2(yNE\VvWRiNGWC:I<3@:.:;-8<.08)/:*3;.4@?A@C?C?C?C=?;A@9>5=3<1<2=1=0=1~<.=/=/~:/~:/~:/}9.|90{8/{8/{8/|<3|<3|<3{;2z;4y:3y:3w;3n70m80l7/l7/k6.h6-h6-h6-i7.h8.h8.g8.g8.g8.g8.h8.k92h6/f4-g5.i70h70e4-b1*c2+b3+_0(]1(]1(V*!b6-{ULtYRaNHN?8A7.=6,;9-9;.9<139-3;.5;/6<06<07:/58-47.69049238139/39/2:/19.19,.9+.9+/:,0;-3>.6C2:E5Qn>Qn>Qn>Qn>Qn>Sp@Sp@WtD[xH]zJ]zJ_|L_|LZwGRlECU?6D7(6)gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUneVneVofWpgXpgXng]lnmz׹ĥregOMP;GK:FM=GOBKQG{{sžؓeSJ:TFWIF;@8KEC>C?B?C@C>C>D>B=B6<5/95,;8/8:/57,36+69.5;/7:/69.69.58-57,36+28,19,28.19,19.19,19,19,.9+.9+.9+/:,0;+3>.6A17B2ex\umtlf_RwKBh9KkVsCZwG]zJ^{K_|L_|LVsCNg@D=CUrDYvH[xJ]zL^{M\yKQn@G_;6B4+4/#)%gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSjcSjbUlbVlbVmcWmdUmdUmdUleUmfVngWogZnh\oh^mjekormtzη|ubb_NXZL]cWmwn|}̻pQDSFSHC:J@H@G>F>E=DG>G>C;>5:2:3>6=5=4=5=4<3;0;1;1~:/~:/~:1}90|90{8/{8/{8/z:1z:1x92w81v70u6/u6/q6.m80k90j8/j8/i9/i9/i9/h8.g7-f7-g7-f7-f7-f7-f7-f7-f5.j81m;4k:3j92j:0m>4oC8l@5oD;d<2c=2zVJdZyWMbLA>:13814927<54:0/5+25,9<336+25*24)03(13(25*46+47,.6),7)/7*-8*/7*/7*/7*/7*19,08+08-/7,/7,/7,08-08+7?09B14*00!''heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdVjdVjdXldYlcZmeZmeXmfVg`NjeRnkXol]he\feasqrԶ|qtY_dMbkXr}lا`XD=NEMCF3<2:1919191~:1|91{80z7/z7/w7.v6-w7.w7.w8/w8/v7.u6-q5+n3+l7/i81i81h70h70g6/g6/g6/f5.g6/i70i81h70g6/e4-e3,h3-j5/m80k90j:0i;.i=0kA3gB2jI:dH:v_O~k\xjoRJ=79.4:04:039/39/39/28.28.17-17-36-06,25,/5+14+/5+/4-.5-/4-.5-/4-/4-/4-/4-05./4-/4-.3,.3,/4-/4-/6.1;23=26@58B79D67B45@03>-4?.DQ=WeN[kQPbHEX<@T8BW6Ic>Ke>Kf=Kf=JeOj?UpGYtK\vO]wP]wRWqNHb?;O6&1+&+.$),heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVidQjhSmjWjk[gg_lll~ЯvkqUYaI_kUto~uKAM@K>L@K>E9=4?6E9F7J7L:J7F6C2C6E7C7B8A7>5<4:39193~92}:2z:1z:1y90x8/v7.v7.u6-v7.t8.t8.t8.r6,o5*m4+l7/i81j81h70i70h70g6/g6/e3,e3,g5.h6/j81j81j81k92k60l71k90k;1k;/j>1j@0iD2gH6kP=gRAufSuesrKL<69.39/39/39/28.28.28.17-17-17-17-06,06,/5+/5+/5+/4./4./4./4./4./4./4./4.05//4..3-.3-.3-.3-/4./6/.80/:21=34@66B66B66B45B16C1CP>P]IR`IIW@AO6BP7EU:Jb@Jd?Ke@Ke>Ic6I5&1-',0$)-heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVmhUkiTmjWjk[kkcwwwۿʫyuy`kpZt{i؞L=RBL;@1G;YMUJ@4D7H:K=I;B7?3@7E;@9A9A8?6~>5}=4<4}=4z;4x<4w;3w;3u:2t91t91t91r90r90r90r90o9/n8.l6,k5+l7/j81l71j81k60i70i70h6/g5.g5.f5.g6/h70i81k:3k:3l;4j;3i:0h<1k?2jC4iD2fE2fI7lVAjYGujVm{mEF658-28.28.28.17-17-17-06,17-17-17-06,06,/5+/5+/5+/4./4./4./4./4./4./4./4./4./4..3--2,-2,.3-/4..5.+5-+6.-9//;12>24@46B47D38E3?L:ER>CQ:;I28F->L3DT9J_@Jb@LdBKc?Ia=G`9F_8G`9RkDXpL]uS^vVZqTPgK=T8.A.&1-',0%*.heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVniVljUlkWlm]pqiؼǫ}ſñpP@O?XJM?E9G4e=1f>2hC3iE5fG3cG2cJ6hV@i\IskVozpq_9=,47,28.17-17-17-06,06,06,17-17-17-06,06,/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3-.3-.3--2,-2,-2,-2,.3--4-*4,)4,*6,+7-.:.1=14@25A36C2:G5N4DX@7C;F?D=>;:7:8>;=;?<@=}@=xA6s>6r=5r=5r=5p>5o=4n>4m=3l<2k;1j;1i:0i:0j:0n72p62p62m61m61l71i70i70l;4k:3h91e90e90e90e:1d<2fB6cA5cC4dD5dG5dI6bI3_I2^L6eV?jbMrmWor[`L3:(28,28.17-17-17-06,06,06,17-17-17-06,06,/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3--2,-2,,1+,1+,1+,1+-2,,3,,6.+5-*4+*4++5,.8-0;-2=/2=-5@/6A05A-1=)1=)5A-8F/=O5@T8FY=H\@J]?I^=K^>K`?TgG[pQcvZauZYkSJ]G6G4&4%$-*$),"'*heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZlfVjgTkjUlnYorasvmθκƶøͧkX[GWEL;D:DE?A>=::9;9=5o?5o?5o@6n?5m>4k<2h<1h<1h<1l<2o83q62p62p62m61l71j81i81h70g80e90e:1d<2e?4f@5dB6^B4aG8cL:dM;cM8`K6]K3]M4]Q9bX?mhRss[nv{eFO:4=*39-28.28.28.17-17-17-06,17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,-2,,1++0*+0*+0*+0*,1+,3,.5.,6.*4+*4+*4++5,-7,.9+-8*0;+4?/5@/4?.3?+3>-3@,7F/9K3@O8BT:GWJ=I>I@G@D>=::7=9>:?9A:xA:tD:pF:pE5j>5n=6o83r73p62p62n72l71j81i81d8/d90c;1d>3d@4cA5cA5_C5ZE4_NnlUtv^|kcmU2>(6B.3;.39/39/39/28.28.28.17-17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,,1+,1++0**/)*/)+0*,1++2+-4-+5-*4,*4,+5,+5,,6+-7,,6+/:,2=/6A17B27B15@04?.2?-4C.:G3=L5AO8DT:JX?L\BTbI\kTcqZ^mXUbPDRA2>0#/%&/,&,,$**heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdVjdVjcYkdZlc\md[lfZlfVolYmlWjlWgkZflbr{x׭oYWDQ@O>OAOBK@C<<5>7?6?8A7{B7uD6qE8qE8p?8q?8s>8q?8q?8q?8q?8p?8sB;qB:o@8m>6l=5j>5m>6o>7o83q73o83m82m82i81h91f:1f;2d>3d@4bB5`C5]A3\@2WB1TG4[S>f^Gi^HbX?ZS9ZS7\W:ZV;XW;kmUsw^u}fUaI&28D03;.4:04:039/39/39/28.28.17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,,1++0*+0**/)*/)+0*+0*,1++2+)3+*4,+5-+5,,6--7.-7,,6+.8-2<16A39D69D47B46A10;+2?-5B09F22=/x=/t?/sB3tD6r=5r=7t=8s>8u@:u@:t?9q?8sA:q@9q@9q@9p?8n?7o>7o>7k92m82l:3l;4l;4h<3g<3c=2c?3^>1dG9cG9T=-N9(M8'@1WQ;PN7KI0OK2]Y>ieJeaDVU7XX<]`CosZzfdlU=I1-9#2>*4-1=)2>*9E/BN8IU?O[GVbN]hWYdTLWI/u@8s>8u>9u@:t?9o=6p>7sA:q?8p?8p?8n?7o>7m>6n=6m>6k<4l=5m>6k?6j?6gA6eA5bB5dG9[A2^G7^I8N=+F7$G8%>6!LL4GK2DG,DD*MM1\[?baC`aBYY=dgJsw^sy_X`I:D,/;%7C/6>16<26<26<25;15;15;15;15;15;15;14:04:039/39/39/27127127116016016005/05/.3-.3--2,-2,,1+,1++0*+0**1**1*)0))0))0)*1*+2*,3+.5--4,.5-07/4;39A6?F>BJ?;F8:E57B14?.3?+6B.)r>)s@+tD0vE4q?4n<3q<4tB9sA8o?5qA7xH>n>4m>4m>4k?4l=3j>3l=3j>3g?5gA6gA6gC7eC7cC6`C5^D5bK;UB1ZI7`S@RG3C;&E=(FA+AE,BH.AE*<@%?B%NN2_`AijKaaEnqTvzagmSJO94<%4=(=F38>28>48>48>47=37=37=36<28>48>47=37=37=36<26<26<25:449349349338238238227105/05//4..3--2,,1++0*+0*).().().().().(*/)+0*,1+160/4.,1+,1+/4.6;4=BK:4.8/-4--4-,3,gdUgdUheVheVheVheVifWifWifWifWifWifWifWifWifWifWkeWkeWlcZmd[md]mf\mg[jiWkmXimVjoYjs`hthm|wڻּҽz{R>tJ4uH3vI4zM8}P;yL7nA.e7'{M@sD:qB8sD:oC8g;0d8-g=1i?3i?3i?3g?3f>2f>2f>2e?2b@4bB5`C5_C5_C5[D4ZE4WD3XI6OB/\T?oiSc^HMK4IG0IK3>D*?H-@F*48>47=37=37=39?58>48>48>48>48>48>48>47<67<67<66;56;56;55:45:438238216005//4.-2,,1+,1++0*+0**/)*/)+0*,1+-2,-2,05/.3-+0*+0*-2.2718=9;B:@K=@M;@M;=J68E13@,1?(0>'4.:0,6..5.-4-gdUgdUgdUheVheVifWifWifWifWifWifWifWifWifWifWifWkeWldWlcZmd[md]mf\mg[jiWkmXinWiqZgs_drejytܿչйѾϴuawVCjI6lI6rM;uP>mF7iB3gB2jE5nI9nJ:oK;oK;eA1cB1cB1cB1cB1cB1bC1`C3]F6\G6\G6ZG6ZG6WH5TG4RG3PH3NH2fdM~~frrZVX@JL4GM3A.:>-;>39?59?58>48>47=37=37=38>48>48>48>48>48>48>48>49>89>89>88=78=78=77<67<66;55:449338227105//4./4.-2.-2.,1-+0,+0,,1--2.-2.,1-,1-,1-,1-.210513764;4;G9=L9@O<@O:8F71?2-9-,6--4,,3+fcTfcTgdUheVheVifWjgXjgXifWifWifWifWifWifWifWifWldWldWlcZmd[md]mf\mg[jiWkmXinWiqZgs_bpcgxrڽѵ˴˺ҿһsrb|]K}^LtUCaD2W:(Y<*[>,X=*`E2`E2`E2_F2`G3`G3`G3]H3\K7\M:\M:YL9XM9UM8RL6QL6NL5QQ9ikS|gmqXSY?FL2>G,48>48>48>47=37=38>48>48>48>49?59?5:?9:?9:?9:?99>89>89>88=78=78=77<66;55:4493382382/40.3/-2.,1-+0,+0,+0,+0,+0,,1--10.21/32/32/32-4-3?17F3=L7@O:?N7M:MJ9BC3=@5;A7;A7;A7:@6:@6:@69?58>48>48>49?59?5:@6:@6:@6;@:;@:;@::?9:?99>89>89>8:?9:?99>89>88=78=77<67<6495273162/40-2.,1-+/.+/.,0/,0/-10.21.23.23-12+1-+9*/@-6H2;M7=O7A6>A6>A6=@7=@79?59?59?5:@6:@6:B7:B7:B7;@9;@9;@::?8:?99>79>89>7;@:;@9;@:;@9:?9:?8:?9:?98?87=94;4382160/4..3/.3/.21.21,2.,2.+2++2*,4))6%$6)=!2F+8L1;O6;M5;M5;M58J29K3;M5H&DK*FM+EL*PV4PT3KN/HK,TT8bbFccIZZ@[Y@\ZA][B][B[Y@XV=US:SQ8HF1GD1DA0A?0@>1>>2??5>@5;>59?59?59A69A48C58C58C5:B79A69@88@58?79A69@8:B7:A9:B79@8:B7;B:E=8B:8B:7A88@56>14O<>P::L6@R8EW=FY=DX=@T;5H2+<),6+,3++2*ZgM[hN\hP]iQbjSckTglXhkXghVghVifWifWkeWlfXmeZmgYmgYkhYkg[kg\jf]jf[hfZefVhiWglVfo\erajwnz˹ʿNjlRM0SN0QK+QK+UO/UO/TO1TO1SO2SO2QP4QP4QM2PO3PN5NQ6MO7JP6HM6EM5HQ6EN1BK.?I'BI(FM+JP,KQ-NR/PT1VZ7^bA_bCY\?TWWU>XV=YW>XV=XW;WV:XT9QK3OI3LG4ID1DA2B@3A?3>@5<=59?59?59A67B48C57D37D3:B79A69A68@58@59A69A6:B7:B7:B7:B7:B7;C874>63=40>-3C)9M*BY/Ga1Op;Ln;Li=Fa>BY?F;J@?I>>I9?G8>F7>D8=B;>E>9C;6@74B19I/BV3Pg=XrB^J[}JXuIMhECZ@9O:6G54E2XR6:@6:@69A67B47B46C26C2;C8:B79A69A69A69A6:B7;C8;C8:B7:B7;C8;C8=E:>F;=G<=G?>H=>I9?G8>F7>D8=B;=D=9C;6@74B19I/DX5Ri?[uEZ{FWyFTqEIdA=T:2H3/@.->+6H2@R8L_CReGSgKOcG@W=6I30:/07/-4,YgMZhN\hP^jRblTemVinZjo[mn\lm[mk\mj[nhZnhZoi]oi[liZkhYjfZieZie\ieZig[ghXghVchRajWerao|s{ѿɶıþʾŸ̌oRL2TO2TM0UN1TN.UO/VQ3VQ3UQ4SO2ON2NM1PL1NM1NL3KN3LN6KQ7KP9JR:LU:IR5JS6OY7SZ9T[9]c?fnGcszpr{\\bFLP7KM5LK6KI4LJ5PK5TN8VP:WQ;VP:SN;QL9LI:IG:GE9CE:=>6:@6:@69A67B47B46C26C2;C8;C8:B79A69A6:B7;C8;C8;C8;C8;C8;C8F;=G<=G?=G<=H8>F7=E6=C7=B;:A:7A95?64B19I/BV3Ne;Uo?Tu@RtAPmAE`=9P6-C.+<*+<)1C-${tmpdir}/test1.tiff && + ${PBM_TESTPREFIX}tifftopnm ${tmpdir}/test1.tiff | cksum + +# test flate compression +# Will fail if Netpbm was built without the flate library +${PBM_TESTPREFIX}pamtotiff -flate testimg.ppm 1<>${tmpdir}/test2.tiff && + ${PBM_TESTPREFIX}tifftopnm ${tmpdir}/test2.tiff | cksum + +${PBM_TESTPREFIX}pamtotiff testgrid.pbm 1<>${tmpdir}/test3.tiff && + ${PBM_TESTPREFIX}tifftopnm ${tmpdir}/test3.tiff | cksum + +# test G4 compression +${PBM_TESTPREFIX}pamtotiff -g4 testgrid.pbm 1<>${tmpdir}/test4.tiff && + ${PBM_TESTPREFIX}tifftopnm ${tmpdir}/test4.tiff | cksum + +rm ${tmpdir}/test[1234].tiff diff --git a/test/xbm-roundtrip.ok b/test/xbm-roundtrip.ok new file mode 100644 index 00000000..a676a1f2 --- /dev/null +++ b/test/xbm-roundtrip.ok @@ -0,0 +1,2 @@ +2425386270 41 +2425386270 41 diff --git a/test/xbm-roundtrip.test b/test/xbm-roundtrip.test new file mode 100755 index 00000000..2dcb5a13 --- /dev/null +++ b/test/xbm-roundtrip.test @@ -0,0 +1,6 @@ +#! /bin/bash +# This script tests: pbmtoxbm xbmtopbm +# Also requires: + +${PBM_TESTPREFIX}pbmtoxbm testgrid.pbm | ${PBM_TESTPREFIX}xbmtopbm | cksum +${PBM_TESTPREFIX}pbmtoxbm -x10 testgrid.pbm | ${PBM_TESTPREFIX}xbmtopbm | cksum diff --git a/test/xpm-roundtrip.ok b/test/xpm-roundtrip.ok new file mode 100644 index 00000000..845be5fb --- /dev/null +++ b/test/xpm-roundtrip.ok @@ -0,0 +1 @@ +2425386270 41 diff --git a/test/xpm-roundtrip.test b/test/xpm-roundtrip.test new file mode 100755 index 00000000..310022cc --- /dev/null +++ b/test/xpm-roundtrip.test @@ -0,0 +1,8 @@ +#! /bin/bash +# This script tests: ppmtoxpm xpmtoppm +# Also requires: pgmtopbm ppmtopgm + +#${PBM_TESTPREFIX}ppmtoxpm -hexonly testimg.ppm | \ +# ${PBM_TESTPREFIX}xpmtoppm | cksum +${PBM_TESTPREFIX}ppmtoxpm testgrid.pbm | ${PBM_TESTPREFIX}xpmtoppm | \ + ${PBM_BINPREFIX}ppmtopgm | ${PBM_BINPREFIX}pgmtopbm -th -value=0.5 | cksum diff --git a/test/xwd-roundtrip.ok b/test/xwd-roundtrip.ok new file mode 100644 index 00000000..011ebd3a --- /dev/null +++ b/test/xwd-roundtrip.ok @@ -0,0 +1,3 @@ +2871603838 33838 +1926073387 101484 +2425386270 41 diff --git a/test/xwd-roundtrip.test b/test/xwd-roundtrip.test new file mode 100755 index 00000000..e24db7bc --- /dev/null +++ b/test/xwd-roundtrip.test @@ -0,0 +1,14 @@ +#! /bin/bash +# This script tests: pnmtoxwd xwdtopnm +# Also requires: pamdepth ppmtopgm + +# Test 1. Should produce 2871603838 33838 +# which is the output of ppmtopgm testimg.ppm | cksum +${PBM_BINPREFIX}ppmtopgm testimg.ppm | ${PBM_TESTPREFIX}pnmtoxwd | \ + ${PBM_TESTPREFIX}xwdtopnm | ${PBM_BINPREFIX}pamdepth 255 | cksum + +${PBM_TESTPREFIX}pnmtoxwd --quiet testimg.ppm | \ + ${PBM_TESTPREFIX}xwdtopnm --quiet | ${PBM_BINPREFIX}pamdepth 255 | cksum + +${PBM_TESTPREFIX}pnmtoxwd --quiet testgrid.pbm | \ + ${PBM_TESTPREFIX}xwdtopnm | cksum diff --git a/testgrid.pbm b/testgrid.pbm deleted file mode 100644 index cc6a50aa..00000000 --- a/testgrid.pbm +++ /dev/null @@ -1,3 +0,0 @@ -P4 -14 16 - \ No newline at end of file diff --git a/testimg.ppm b/testimg.ppm deleted file mode 100644 index 061d5368..00000000 --- a/testimg.ppm +++ /dev/null @@ -1,4 +0,0 @@ -P6 -227 149 -255 -0/-0/-10.21/51.51.62/62/83/83/:3-:3-:3-:3-:3-:3-:2/91.91.80-80-91.91.:2/80-80-80-80-80-80-80-80-6.+6.+6.+5-*5-*4,)4,)4,)4,)4,)4,)4,)4,)4,)4,)2-)/*$/,%/,%0-&1.'2/(30)30)63,63,74-85.85.96/:70:7.A:0B<0D>2F@4IA4JB5KC6KC6MD5MD5OC3NB2OC3OC3PD4RE5R?1Y?2b@4nB5}E6H8G9F7G:G9E:G;G>G?H@E@FLCLDKEICIBD>B=A;A:@:??-?/?/>.>,=+<+<+?+?+=*=*=*>+?,@/?6>5=2?1B3D3D4D4?0A2F8H;H9oA2T8*C3&=5295495473271160050-50-72/72/72/61.61-50,50,41,//-.0-//-//-0/-0/-2.-2.-5,-4+,4*+3)*7(+=.1E69P:0U?1^A3jC4xD6E4E5C3C4A4A4B7D:E@<@6>/@.?-?-?-?,?-@-@,@+A-A+@*A)@*A,>-?/>.>.>,=+<+<+?+>*=*=*=*>+?,@/@5>5>3>1A3D4C4D5A2C6F8I;G:l@3S9*B4)>63:6595484382271161.61.72/72/72/61.61-50,50,41,//-.0-//-//-0/-0/-2.-2.-3--5,-4*+3)*5)+<-0C47N8:d>=vEAJINLTVajl}r{{ou[[QHuOCiOFeOG_PH_RN_[Yfnot~ojkY][LVSJXSZVRaXQa/.,/.,0/-10.40-40-51.51.72.72.72.72.92,92,92,92,91.80.7/-7/-7/-7/-80.91/80.80.80.80.80.80.80.80.6.,5-+5-+5-+4,*4,*4,*4,*5-+5-+5-+5-+5-+5-+5-+3.*2-'1.'2/(30)30)41*41*52+63,63,63,74-85.96/96/:7.?8.@:.B<0D>2G?4H@5H@3H@3I@1I@1K?1K?1K?/L@0MA1NB2MA1QA1YB2dC2qC3|C2B2A0<-:+;.=2@6D:F=D>CE@FBGBFDFCEAD?D;@:?;@=@@@A=@;@5=.@-@-?,?-?->,@,?-@-@,A+A,?*@*@+>->.>.>.=+=+=+=+>,>,<+<+=,=,?+?.A6?5>3>2A4C5D5C5D8F;I=J=G;h@4Q:,B5,?74=77<66:4494183072/72/62/62/62/51.52-41,41,21,.0-,1-.0-.0-//-//-0/-2.-5//4..5,-4*+4*+9-/>24I56[97l?9|E@IDOM[`fvmw}}u~fmTVMEvLAkMAeOFcQHcMH^NK\[[eqty|xzlfiXZ[MVSLZU[ZT`[S`.-+/.,/.,0/-3/,40-40-40-61-61-61-61-81+81+81+81+7/-7/-6.,6.,6.,6.,7/-7/-80.80.80.80.80.80.80.80.5-+5-+5-+4,*4,*4,*3+)3+)6.,6.,6.,6.,6.,6.,6.,4/,30+30)30)41*41*52+52+52+52+52+63,74-85.85.96/96->7-?9-@:.B<0E=2E=2F>1F>1G=1G>/H<.I=/I=/J>.L@0JA0KD2NE4UD4^D3iD2sB1~A/?-9)9'9*<-@3E8HDCACBCDCCDBC@C?A;@:?;@>@A@B=@9@3=-@,@,@,>,?,?,?+@-?,@+@*@+@*@)?*>,>.>.=-=+=+<*<*=+=+<*<*<+>,>-?-A6?5>2@4B6C8C7B7F|F:b@4L:.A7-@85>96=77<74:5294183083062/62/62/32.52-21,21,12--2.-2./1./1.00.00.10.10.5106005//5,-4+,6,-:01D22T71c;3qA7{E;HDRU_lis}yx}ow`fQRLEyL@pL@hPEgQFfLC^GBVMLZ^^fjnquyxx}wzvwzokoa`bTWYLTTL]WY]V]]V^------.-+/.,0/-10.3/,40-3/,3/,4/+4/+4/+4/+6/)6/)4/,4/,3.+3.+3.+3.+4/,4/,50-50-50-50-50-50-50-50-3.+3.+2-*2-*2-*1,)1,)1,)4/,4/,4/,4/,4/,4/,4/,4/,41,41,41,41,41,52-52-52-52-52-63.63.74/85096196/<5-=6,?8.@9/B:/C;0C;0C;.D:.D:.F:.G;-H<.I=/J>0I@1JG6MH5RG5YF5bE3jD1uB/}>,;):):*=,B2F8J=I?GBDCDBEBBBAA=@<>:?:<<>?>B>C:A5?0?-?,?,?,>->->-?->.?-?,?+?,?+>*>*>,?.>->->-=,=,=,=,=,=,=,<,>->.?.B4A4@1@3A7C9B8A7C;H?LCJ@tE;Z>2E9-<5+@93@85?75>63=52<4194083/62/43/43/23.32.12-12-02--2.,2.-2.-2./1./1.00.10.3205105104..2,,4+,7./=/.N5.Y9.e=1n@3sB;yKKZegpzxu{ks_dTTOGLBwNAmNBhMAeJA`GBYGFXKKWMPU]cc`fbbia`f\Z`TW[MUXMXXP^YV`WX`WZ,,,,,,.-+.-+/.,0/-3/,3/,2.+2.+3.*3.*3.*3.*5.(5-*3.+3.+2-*1,)1,)2-*3.+3.+3.+3.+3.+3.+3.+3.+3.+3.+2-*2-*2-*2-*1,)1,)1,)0+(3.+3.+3.+3.+3.+3.+3.+3.+41,41,41,41,41,41,41,41,41,52-52-63.74/85085085.;4,<5+=6,>7-@7.A9.A9.A9.C9/C9-E9-F:.G;/H<.J>0HA1JG6IH6NG5VF6\E3dC2n@0v>-{<+;);*=,@1F5J:J=H@EAFAE@CA@>>?:<;<:;<=@=C=C8@2>,?,@,?+?+?->,>,?,>-?,?,>,?+>*>)?*>+>->->-=,=,=,<+=,<+<+<+<-=,>/?.B4A2@2B5C9C:B:A;A9I@NGNEoG=S?4A;/96-@93A75?74>63<4194083/74/43/43/34/23.23.02-02-.3--3/-3/.3/.3/02/02/11/11/21/32032040/2.-1-,4..8.,G4-O4)X8+`<0e?6mGFyYdku||w|nudh[[RMLB~OArL@hI=cH>`HB^ECX@BO;@FBGJDMJJQJJQIIQFKQEOUIVWO^YS`YS`XU++++++,,,---/.,/.,0/-0/-1-*1-*1-*1-*2-)2-)2-)2-)2-*2,,1++1++1++1++2,,2,,1++1++1++1++1++1++1++1++2,,2,,2,,1++1++1++0**0**3--3--3--3--3--3--3--3.+41,41,41,30+30+30+30+30+41,41,52-63.74/74/85085.:3+;4,<5-=6.?6/?6-?6-?7,B8.B8.E8/E9-G;/H<0J>2H@3HE6GF4KE5QD4XC2_B2f?.n=,v=,|:*9);*=.B2F7F8FF>E>D@C?@@>>::;:<.>.=->-=.?.?-?-?,>*?*>)>+>->-=,=.=.<-<-<-=-;,<,.=0?/C2B1A1B6C:CCC793@72>71=60:5/94.83/63.43.43.34/13.13..3-.3-.3--3/-3/-3/-3/.3/.3/02/02/00.11/22021/0/-/.,2.-4/,?0+D0)K3)T8-Z<4dFFu]js~tzmpceVSLCK?qI_FB]DBW?AN;?H:BE>HGDMHGQIGQHJRGNVKUXM^ZOaYNaXO++++++,,,,,,.,-/.,0/-0/-1-*1-*1-*1-*2-)2-)2-)2-*2,,1++1++0**0**1++1++2,,0**0**0**0**0**0**0**0**2,,2,,2,,1++1++0**0**0**2,,2,,2,,2,,2,,2,,2,,2,,3/,30+30+30+30+30+30+30+41,41,52-63.63.74/85085092,:3+;4,<5->5.>5.>5.>5,B8/B8.E8/E8/G:1I=1J>2I?3FC4FC4JB5OA4TA2\@2b>0j<-q<.w9*}8)8(:,=/B4B5F:E;F>G?G@FACAB@;;;;>;B;D:D4@->(A-A-@,@.@.?-?->/>.@.?.?->+?*>)>+>->->-=,=.<-<-=-=-<.<.<./>1?1D2C1B4C6C;D>D>EAPL[Te\f]u_T[UIGMACI?<92?82>71;6094.74-63.43.43.34.24/13./4..3-.3-.3--3/-3/-3/-3/.3/.3/02/02///-00.22022010.0/-0/-3/,8,,;,)C0*K70S<6^IHtbnzƄzrxikWWIDE=nG^CAY@CV@DP>EKGQRKWUQ^WU`XS_UR^TT^SY_S^[LaZJaZJ,-/,-/,-/,.-------.-+.-+/.,/.,1-*0,)0,)0,)/+(/+(/+*/+*/+*/+*/+*/+*/+*0,+/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+1-,1-,2.-1-,1-,1-,1-,1-,1-,1-,1-,0,)1-*2.+3/,3/,3/,3/,3/,3/,3/,3/,3/,40-51.62/74/80-92,:3-;4.=4/>5.>5.>5.?4.?5,B5-C6.D7/F90G:1F<2G?4H@5J@6P?5T>3X<1^90b6+m9.t8-|8+9,;/=0?1>0A3A4C8E:G=G>E?C@@?BADAE>D8B1A.B,A.@-?,>.=-=->.?/<,=,<->-=,=+=*>*<+<+=-<,<,<,:-;-=/3@2A5A4E5D4E9I>G@D>EAMGZRf_qfsh~rdjj^V^SIQFLLBJF=B>5<8/95,74+63,33+43.34.14-14-02-/1,,1+,1+-2.-2.-2.-2./1./1./1./1.02/02/11/11/11/11/11/40/4+0;/3A32C4/J;6]OOymyϐكtzjn_bZ[LItHBdA>]>>X?BUAIVLU\U`bbqnn}xv|rulyoguh_k_W_P]\Hb\Fc]G,-/,-/,-/,-/------.,-.-+/.,.-+0,)0,)/+(/+(/+(/+(.*).*).*).*)/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+0,+1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,0,+0,)1-*2.+3/,3/,2.+2.+2.+2.+2.+2.+3/,40-51.62/80.91.:2/;4.=4/>50>50=4-?4.?4.A4.B5-C6.E80G:2H;3H>5H>5L=6O>6Q=4V;2Z90_7/h70p7.w7-9-9.<1<1=1@3A3B5D8E:FF8C2B-B-C.B-@.?-?-?->.>.=,>,=-=,=+>+>*=,<+=+<,<,<,;+;-<-2@6A7B6G9E7G->->->/?0<-=-<.=.>-=,<+=+<*<*<,;+;-<-:-;-<0<0<2>3?4A8C:D9J=H;H>KDKFLGSM`Vsgqz{wsocqbXcUNRDMN@HI;DD8@@49;.46+/1&01)01)/0*/0*./*./*//-//-//-.0-//-//-//-//-//-//-00.00.00.00.00.00.00.1/26+97+98/4;63HE>_^Yzz|DŽ}{|}}wq~n}n~~o~y|{j{i\hTXX@]Y<_[@-.0-.0-.0-.0-.0-.0.......-+.-+-,*-,*.*'.*'.*'.*),*++)*+)*+)*+)**()*()*(),*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+-+,-+,-+,-+,.,-.,-.,-.,-/-./-./-./+*0,+1-,1-,1-,1-,0,+0,+0,+0,+0,+0,+1-,2.-3/.40/91/:20;31<41=31=31=31=4/>3/>3/@2/@3-A4.C60D71E82F93H94I:5J;6L:6N94Q83T50^72e60o6/x8/90:/<1>1?4?4?2?1A2B5D7E:G>H@JAI>F:B5A0@.A-A-?->,>,>,=.>.<,=,=.=-=,=+=-<,;););+;+;,;,;-;,;/<1<1>5@7C:DJCLIQL]Vj^oyzxm{jbm]SZJQUFKO@EI:@D6;=057,13(01)/0(./).-(.-).-)/.,0/-/.,/.,/.,/.,/.,..,/.,..,0/-//-0/-//-//-//-//-2-17,:6*83-1961HJ?bfX{z}|k|iXfOSV;ZV9^Z=+/2+/2+/2+/2-.0-.0......------.-+-,*-,*,+),+),+),*+,*+,*++)*+)**()*()*(),*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*++)*+)*+)*,*+-+,-+,.,-.,-/-./-./-./+*0,+0,+0,+0,+0,+/+*.*)/+*/+*/+*/+*0,+1-,3/.40/901:20;31<42=32=31<20<20=20=2.?1.?1.@2/A30B5/C60D63C84D95E:6G96H94K84N50X72_60i70r7/}:1<1>2>2@6?5?5?3@3C5C6E8E;G=H>G=D8A5?0@/@-@-?.>-=,<,=/=/<.;-0->0-?1.@2/A4.?4.@51@72@93A:4B94C84F74H5/Q51X5/a6/l8-u9.0=1?5>5?5?4B4B4C4D4B5D8E:E;B7?4>1>0?.?+=,=,<+<+<.<.;-<-<.;-;,<,;+;+:*:*9):):+9*9-9-<1<3?6A8CHCNJVR`Zper}~~yup{jdp\]iSR^JJS@BK:>E5:@29<134,22*1.)/,'/))0**1++2,,1++1++1++1++1++0,+0,+0,+1-,1-,1-,1-,/.,/.,/.,2,.8*75(13+(56&EK1\gGudyťέɭʰ˱Ȭ{wrdx]Q_ENR7QQ5SR6,03,03,03,03./1./1./1./1/////////////.,/.,.-+.-+/-..,-.,--+,,*++)*+)**()+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)**()*()*())'()'(+)*+)*,*+-+,.,-.,-/-./-./+*/+*/+*/+*/+*.*)-)(,('0,+0,+0,+0,+1-,2.-40/40/:12;23;23<34=32<21<21;10<1/<1/>0/=/.>0->0-?1.>3/=60;60;83<94=:5>93@72C60G4.O4+Y4+d5+n8,x:-;.;.<4<5>3@3A2B1A2@0>1@4B7B9@6>5=2?2?-?->,=+;*;*<-<-;.;.;-;-;.:-:,;,9)9):)9(9*9*~8,~8,<1=4@7B9E>IAKFMFIAH@JFSO]Xhb{ny~wxnjxadr[ZhQQ]IITCCL;>D60-?1.=2.=4-=6.;819919:29:2;81?6/C2+J1,T2)^3*g7+o9-u=.z2B6C7B7?4>2>1>/=.=-<,=,=,=.>/<.<.2>5@6C:G=JBNEOGICIDPJ\Tg`uiu~zytoi}bby]\pUUgOO\HGRAAH8=A388.85.7/,3+)2()2()3)*4*+0*,/+*0*,0**0*,0*,2),2),3*-1+-1+-1+-0,-0,-0,-1+/4)/4*+4-%46!?F%T`8m|Qgtz~z{Ĉːəǝƚ~xvolfZnSJZ?GM3FJ1DF./0+.0+/0+01,01,01,12-21-32.43/43/62/51.41,3/,4/,50-50-4/,3.+2,,1-,0,+0,+.,-.,---/--/,,.++-*).))+.)/.)-/(/.)-/)-.)-.*+.*+/+*/+*-,*.-)--+-.)./*./*------.,-/-./.,0/-2.+2.+2-*4,)5-*6.+8/*:1,:1*;2+=4-=4->50>50>50=4/<3.;2-=2.<1-<1/;0.=/.>0/>0/@1.A0)@2);4*77-39-28.56.:3-?-)F*'L)'S*&Z/(`5,d<0k@0yA0@/A1B3@3=0;/8-;/=.A1B2C2A0>.;,;0:2;1=0?0?/?.>.@1?0>1<0;/:.:-;-{9+~@3w<.q7)w>-w>-v;-}?2{;/@4E9I?LAMBPCNEKISPbYpa}jq|~u{ouiib_[zXZsUZnSWeNPWEJK=C?6@93;0.6**3')3'+3'+1&*,*-)+***,*(),'+.(,1(-2'-3(.3(.3(02(00)10)1/*1/*0/)-1++0-(//#5,>5,>5.>5.>5.=4-<3.<3.=2.<1-;0.;0.=/.=/.>0/@1.C0*C0)A2+>4+:6-95,:3-<1-?-+D*)I*(N+'T/)Z5-_:1e>/pA/xA-A0@2?4=3:2;19..@0A1A1A/?1;2;2<2=0>0@/?/?.@1>/=0<.;.;,:,;,x8,x<1s9-n9+s>.s>.r8*u:,}=1A5E:I=K@NAPCNEJHSRf]wfpww}ovei``YZY{X\wXZnSSaJNUCFH;C@7<737/-3*+2)*1(+.(*,*+**,+),+),-(,/)-2(02(02(02(02(10)1/*1-*3-*3-*12-12.-0,)--%8:,SXBox]iolnpppw{xwy||{xuqnh{eYjWMZHEL<@D5;=/12,12,12,12,23-23-43.43.54/54/85085085074/72.61-80-80-7/,6.+4/,3.+2,,1-,1-./-.0.1/-0--/,,.+*/+)./(/1'//)-/)-/)-/)-.*+.*+0,+0,+/.*/.*/.)0/*0/*0/+//-///0./0./0/-/.,1-*2-*6.+70*90+:1*<1+=3*>4+?5,?6-?6-@7.@7.?6/>5.=4-=4-=2.<1-;0.;0.;0.;0.<1/?1.C2+E0+H/+K--L,/K+.I*/E+.A-,@.*A.(E.(M.)X1*b3-g5,j:,o;-w;0=4<6<5:4:4<2=2>2?3A2A3B5C5?2=/>1>.>/>,=.<,;.<,:-:*;,<)~=+{<+}=1z<1v:/u;/x@1x@1v<.v;-?5B8F=H?JAKANCNFJHTQf\vent{}yximae\a\`]`[|]UrVPhPFYEBP?:D93:2.3,*/)*,)**(0'(1&*1&*1&*0'*1(+0*.0+//*.-+.,+0+,0)-0(-1(-1)-01/23/..*'**"57*PUAmv[|ik~jjnn~mqx|zxvvuwyy}}ywtpmh|cYkUMZHDH9=?299-23-23-34.34.34.45/54/54/650761961:72:72961940940:2/91.91.80-50-4/,4..4..3/03/01/01/20.1..0--/-+.0)02).0*.0*.0*.0*,/+,/+*1-,1-,0/+0/+10+10+10+10,11/1111/010.10.2.+3.+3.*92,92,;2+<3,>4+@6-@6-A7.B8/A8/B90A8/A81@70>5.>5.=2.=2.<1/;0.;0.<1/=20=2.B3.E2.L..R+0V'/U&.P'/I).C/.<1+;2)?2)G0(R/)_.*d/)i9/k;/u<3}<6;8;9;7:6>8@8B9B9C7B7A7A5@1A/@.@.>-<,;+:+8*9*:*:)<){=(x>(x>*>1{7.z7.z<1v;-w=/|A3{@2B7E:H=J?J@MBODQHSJ\Qh[tbgm~v|~}yqoiifgfeggde_~_Zw[PhPK^JBP?8D62:/.4*,/(+*%2&&5%(4%(2&(1'(/)+/+,.,-+++*+-*+-(,-(,/',/',/*+-.*+1++0+'.+"88,PUAiqYvc{hyh|il}mykzmrtq}p}p}s~v~x}x|x}zzwuqnje|bWkRN[GDF9?=1:8,45/45/45/560560560761761872872;83<94<94<94<73<73<41<41;30;3083072/61.61.5106216213122011/00./1-.2,04+.4+.4+.2,.2,,2,,2,,3/.3/,3/,3/,21,21,32-32.32032032032051051.61.61-;4.<5/=4-?6-A7.B8/E8/C9/D:1D:1E;2D:1C90B8/@5/@5/>3/>3/=2.=2.=20=20>31>31@51E31M02T,4X)3W(2R)1K,1B30:6-77+:6*B4)M2)X/)^/)f:1j;3s<7z=:<:<;;;::;7>8A8B9C:C:@9@7C2C1B0?/=.<.:-9-7+8+9+:+~=+x>*v?*x>*9-|/'8/>4w4+s5*}A6}C7E:GJ?KBMDQGWJ|aNzjQpYu]|biu|~{}zwzpzlxlwkumrlmgkd`rX[iRR[HHL=@@4;7,70&5*$6('5''3''1'&.)&+*(++)+-*',('+*)+*)+***,+),+),-)*,#$2*'50*86*BC5UZFfpWn}^teqbuexiwkshtiwkznxlwmxnys{u{w|wyuzwwtsomhd{_WkPN[GCC7>:195,560560671671782782872872983:94=:5>;6>;6>;6>95>95?74?74>63=52;63:5294194184184395484373243151240/6-06-.6-06-.4..4..4..4/,40-40-40-51.32-32-43.43.43/431542540841850940:5/=60>7/@7.A8/C90D:0G:1H;2F<3F<3F<3F<3E;2C90B71A60@51@51?40>3/>31?42@53?53@72C52I35P16T/6S.5P05J22C52=90<:-=:+C7)I6(Q3)W2)]2+d3,l50v64}77877766~75}:4}<6}>5?9@8?9A8B3C1B1@0=/;.:.9-9,9,:,<,|=,y>,x?,|=,5*2,LEXQA8|90F;K=yH:zJ<{M>|N?}OBQEUJ_LrkOosR|uXw]ybiszz|~{y~vpoppp{pwmskj~bfv\_hSV[GOM>GA3@6*=0';,'9+(6+'3+(/,',-'+.').().(+-(-,*/+*3)*4(*7'*7'(3($<3,E>4IG8QR@]bKgqVjyZn]k\l]pbqeodoerfumrjqitnxrzvyvyvvtwvurokjfc|^UlON\ECC7@91;4,671782782782893893983:94:94;:5>;6?<7?<7?<7@;7@;7B:7B:7A96@85=84=84<73<73<73<74<74<74;639529338308/09/.8/080.80.80.61.61-61-61-52-52-63.63.74/74/540540841952:63<94=84@93@70A8/C90D:0G:1H<0I=1I=1J=4J=4J=4I<3F<3D:1B8/A7.A81@70@72?61?61@72@72A83?74@85B86D97G96H96H96H94E80E8/E9-E9+G9,I9*K9+Q7*Z/&d/'n3-z6398;9;:=;A>@:=6<3:3<4=7@7A5B3@2?2=1<0;//|>/}>/=/9/1+<8lf~yZTC(+C&+E$+C&(F5-LC4VQ>[YD`bJgmQiwVj{Wl[gWfWl\oananbrfskojoirnwtyxxwuvssuvsrnlicb{[TmMM]CGH:E<5@707827828938938939:4:94:94;:5<;6?<7@=8@=8@=8A<8A<8C;8C;8C;8B:7?:6>95>95=84>95>95>95>95=85<73:51;30:0.:0.91.91.91/91.91.72.61-61-63.63.63.74/74/74/540651952;83<94?:4B;5B;3A8/B:/C9/E;/H<0I=1J>2J>2K>5K>5J=4J=4F<3E;2C90B8/B92B92A83@72@72A83B94A:4?82@93B;5D=7F=6G<6K<5N;4M6.N6,Q6+Q6+Q7*P9+P9)V6'f6*r6,~;3@9D@HDJGLFQJLDD;;07-7-91=4>5>7=6<5<5=4}=3z>3x@3vA3x@3z>3<3:37331(&=;|zhcG@K@xH:nMhV>lX@t[E`LhPysQwUt\l^__V\Q[T\ouzx̆|~}xvrtuuussr|nyju{amoWgbN_TBUE5R/(9/&7.'6/'81):/)=.+A,+F)+H(+K'+H)'TB4YQ9B?:D?;D?;E@8E>8D=7B;5B;5B;5B;5B:7B;5A:4A:4A83A83A83@72@64>71>71>71<71<71;60:5/85.85.74/74/961961961:70<71=82A:2B;1C:1D<1F<2J>2K?3L@2N@3N@5N@7N@7L?6K>5I<3H;2E;2E;2B90A8/@91?80?80?80@93@93<5/MD=M@:K:3T@9R62O0+a<6\3-`5.`4+^/'^/%f6,m=1q=0I=G;I?KAF>>7=6D;NDPEVJYKOBA5;0>69898655284?8|@6r>1rB4oA2q=0v:07243-1',HIbaEDWUyvVOFu:9:49:49:49:4:;5;<6>=8?>9>=8>=8A>9A>9B?:C@;D?;D?;FA=E@8E>8E>8E>8E>8D=5C<6C<4D;4C:1B92B92B92B92A83A83@93@93>71<71;60;6096/85.74/74/96196/96/:70<71>:1A:0B<0C;0E;/I=1J>0L@2L@2N@3N@3N@5N@7M?6J=4I<3H;2E;2E;2C:1B90@91@91@91@91A:4B92D93I81L/+V.,j76u99{;;ECD?H@IAG>IBNHPLOGD7B4B6C8>37-7-=0C5?0@0E3G6F6H:NELMHL@D9;98>:@8x>3o>0zI;LA?8,+).9DLWKNMM>=@?`\YQ@5TDyaIe[@^]?ihIslOvgJ~dKcNdX_[UZAN,E%D&H'I.N3N6UE8[O5cZ9gaAifEnrOz]zbt^r_p_p`q`udwdwdwfsixrzxyx~}zzromhhd`y[TmMNaERSAVPBUOC8938938939:4;<6<=7?>9@?:@?:@?:C@;C@;C@;C@;D?;D?;FA;FA;FA;E@:E@:E@:G@8F?7JA:I@9H?8G>5F=6E<3F<3E;1D:1D:1D:1D:1D;4D;4D;4C<4?80?80<71;60:5/:5/94.94.96/96/:5/;7.>7/@9/B90C;0E;1F<0I=1K?1M?2M@0NA1M@0P?5M?4L>3K=2I<3H;2E;1D:0C:1C:1A:0A:0?;2@<3@<3D;4UDI?LANBRJUROSLK@4B0@0?1;.7+8+=/E6>+7$:'>-A/C2D:02:BDLLRMRKLA>71{8/v6,x2*1-37=GGWM[FI53:931NKc]J?[J}cLj_CgdEtoOpQhJhNhYbbQZDQ7I1J2N/M*H2O0K1J5L4M2K3L7P@XC[F]IaNcQeUhVkSjRiOiNiNlPoSsVuha|[tUlYldrR]r-2^&'Y0,W:4Q?5B:-:8)>B1LN9VO3aV6e_?heDquTe~iwdxiuerdrcveyhzizjv~zypmg~b^wYTmMPcGSXDXUDYVG7827828939:4;<6=>8@?:A@;BA5G=3F<2E;1D:0D:0E;1E;2D;2E<3E<5E<5@91?80=82<71;60:5/:5/:5/96/96-;7.;7,?8.@:.C;0D0K?/M@0M@0M@/M@0O?2O>4L>3K=2J<3G:1E;1D:0D;2D;2B;1@<1@<3A=4B>5F<3S81[*&:?T`TeUfUcJO30:/>0A3F=IGBH>@B7F5B3@3?3>3B4D6G5B/<);(<(:(6&3(979=7>7<^@aCf@f?e?g?hCmErIsOuQuUvSqTnaxfvWb}15j0/X1*P8,G>/>A.;D/?G/PK._T8g`CokN||`rv}qzq|s|szozm}ouzsqh|c]tXSlNPdHRZCWYDYZH671671782893:;5<=7?>9@?:BA/K?1M@0M@0NA0O?/O?0O?2N=3N=3J<1I;0G;/D:0D:0D<1D<1B;1@<1A=2A?3B?6K=4\5.w32LS]iM_@Q6E&+1)7(:&<)@3D=>?;;?5B4@2?2@5C9H;J<>/?/=+;)9):,;/<1FADA>?797KCTLSMKJ?B5>274.7.1+:484@9[PUC{N9bIkP`F[FfTrdmhEK:D9C=8@?:@?:C@;DAGB>GD=GD=HC=ID>IE2I=1G=1G=1F<0F<0E;1E;1D;2C:1A:0A:0@91@91=82<71;60;60;7.;7.;7,<8-?9-A;/D0L?/M@0NA0NA0O?/O?/O?2N=3M<2L;1I;0G;/F90C9/C;0B<0B;1@<1@>2A?3B?6N;4m84FEY_WbCQ8F3;++1'8%:!9 ;&>.:2717,:-9-7,:1B8E;E:>2?0<,6'6)>0D;G=8-@6D?BB=A9>27.075GBSLNG=910/2671(A>GBOMWWNRDM:G5F2F.D1G7N8S8T8V9W;\>aAeCk;ej?m>n>o=m:jHr;a?dKnKnNmUoZnrajILt:8\6-P9+PC2UM:^QAreU|nʿ~m~k`t[WnRVjNS`FV`EX`H560560560560671893:94;:5=<7>=8A>9C@;DAHC?HC?GD=HE>ID>ID>JF=JF=MF2@@4P91r1/JKSV>D0603//1)1!9#=!;< =#;%6%6)8-6,4,81@:C<@6B7A4->-5+*&"%%+*1.4)*.+3,4,3,2,0-2+2%6&2&7,6.>7`UqeSVBM:WIf[d_RTCIFM@D??@<@8@7FAMLJN@K9H7H5H3E6G;M8P7R6R6U6X9];ak?m@qBtBuBuBtBpFmAaEeKjKkVt_z]tj~p~ow^aCAg6/hB7sUJye\}vŽ˺tqexb\sW[oS[jM\iK]gL561561561560561671872983<;6=<7@=8B?:DAHE>HE>HE2G=1E=2D;2C:1C:3A:2A:4@93?74<73<71>7/>7/<8/=90>:1A:2C<2D=3H@5I?3L@2MA1NA0P@0O@-O@-L?/L>1M=0L;1J91I81E80C90@9/>:/;;/<<0=>0>?1A?0S8-<7\[ZY86.*1+.%2#9&B*F,D'A&A&<#9#9*;0:07.<4CD;=<<@9>48,6.94HH@E;D:H:I8G;I?NAU?Vi>l>o>p>q@r@tAqCjMmSsJh@`Tsge]w_xh{p}qxgg^X{ZQ~wļ«zxl{hbu_`rXbpVboScmT21/320431651875984984984;:5<;6==5??7AA9CC9EE;EE;HH@HH>HHLC4J@4KA5MC9LB8F=4B90E<5C:5@93?74@85?75<74<42C:5B94A96>95?:7>:7?;8@<9B?:D@7G@6J@4L@0O@-O@+L?,G@.F?/I;0K81M53K65J88F;9B?:6904,=,<,=/C4F8>12&9+8*8+8-7-5.3/1-.,.-0,1,5*7):):(9&33 8'7'6(B5SINCSK\W]ZPR>C9??GAFCDAA?9<3;/?HH>HH9H?:F=8B;5D:8A96?74?74@85@85=85;62=4/=4/=52<74=96>:9=<:>=9B?:D?9G@6J@4M@0O@-P?+L@*B?,B?.F<0H:1J65I56F35@65@<9:=6;>5@@4E<-J9)^B4L>QB;-2#6&:'7$9%>*;%<(?+@-=,9*6(7)9):*9);+>.A1B/@.?,:(<+E6H9?18+6)7+7,9.;-8;1:-<-=.E5L?NEGC?>?B?F@JCJCLDPFTBS>S>XBaFhCi?i@jBpFvJzK{JzHtKpQs\z_{XwNqEkDlEiKg_pnukLI~t̲ų~/.,0/-10.21/43/540762761:94::2<<4>>6@@6BB8CC9DD:IF=IG;JH;LI8MJ7NL7NL7OL9KI:NKBTRS_^fihxmmlkkh`YiYQ\OGRH@KH>GG=EE93>:1=9083-94.;60<92=:3>;4?<5@<3E>4G?4I?3L@0O?0P?/P?-L?,<;&:=(?<+A;-B71A62>42;30=84B;5H94N2.Y,)l/.;=FE;02$1 9'<)7$8"<&;&=)A-A/>.<-:-->-<,?-8(>.L=G:6*2&9.6,6+8,:.:/8.6/3,0-.+.+1)2'6&8"7!8$5#9'>/=.6)9,A7<5>8EAKIJJCC?ACCCAD?B==4:.8*:*;+8)D8NEIE@@>ABIHPAG@ICOGTEU@U?XA_DfCiCkFpIwK{L|JzFxHwKtNtZ|aUvCdIkTv?\I`{||aC;|nճξ/.,/.,0/-10,21-32.54/650880991;;3==5??5AA7BB8CC9HEQPL^]bmlzzz{urke_{YSmTLdMEZG@PB;2?=1@<1?;/A;-F?/H?.K?/M@/O?0O?/P>0L?/@=*?>,@=.?;/?;2>93=:5:94<94D95M51V-+j)-288C>C7.7(:(?-?,9&8#;&:&<)>,@/>/=0=1>2?3=29.8*9+:,:,9*;,;-B4E9>31'2(9/5+4*6-7-7.6,3,1*0,.+/)0(2&4$6 5204$<.=/9.=2D:5-60;5D@MIKIC?=8@9A8>4Vdtӏd92lJ>ynХ10,10,0/+0/+10,21,43.54/77/880991;;3==3??5AA7DA8IE:LF:NH:PJ:RK9RM:SL:QK=OJDVTUfdqwxÏƎ{wpmid_[~UPnNJaKGXEBM?=B;7895296/85,85,671783891;;1>5L?6K>5F<3B92=82:946;47<59<5>:1H4-Y2-w78?D>E9<;0<+@.A/@-<);'>*8$:'<+=.<-;.<0=3?6>3:/7,7,8+8+8+7+A5C88.1&3)7-5+4+3)4-6,5,5+1*/*/,/*/)0'2#4!541/2"6)9-:0?6E=F>@7<5@9KDNGE>;1=1<0CBLIUJYFXCYC]@_BdElJsNzO|LyIvJwTT}JqImStVtNiD^F]Xk󝞎HFk.)kc͖ɿȾȿ65143.32.10+10+21,32-43.66.77/880::2<<2>>4@@6B@4JD8ME8OH8RK;TK:TM;SL*F@*G?*H@+IA,IB0IA4HB6HA9G@:K=?51;/<+?-?->,>*?+?-8%9(:+9-9,:.:0<4>5;4918.8.9/8.6,7-C9@70&,#7/<42*3,2(2+3*3+2+/*-*/*.)0)1(4$5"6 57#3#3$3&5)8,<1?6YQRJHAC;E1:*;(:*:):(:+>0A3A6<3<6A=EEGHIMLPBF@CCIKTNYJZF\F_A_BaEiJpNwOzNxLvQ{RyOvOtVy]{SoD^TlQddt`dMMjgΏX<94;8185052+41*41*52+63,74-85.96/;81=:1?<3A>5C?4JB7MC7PG8SJ;WK;UL=UK?SJCSJK]WcnlŚڟꢩ뙛啘ݔ֐ʉzyrqfc~XVkPN\IGRFCLCBJ??K==G;:@;9:<94?;/C=-E@,F@*FA+EB/EC4CC7BC;AC>@ACBLCANEEOCHNAIL>HI>GDCHAA=2L:.gF7OAI/>,>*?+@,@-?-<*8'8)9*9,8-8.91;5:4:3818192:2706/<5>5912(4*;2<33*1*1'1*2)1)/)-(,(-)/)1)3(5'6%7!7 9%8%6%4%4(7+8.7/NGXPZSQIG>D9@7>/<*<&<(:'9(;*>0A4D;@7@:FCIHHGGJIKFHBDDILSQZO]L]K`D^DaFfIlNuOxOxPwVxUvTvYx]{ZwQkI`WkUgM^^mKZTaTaXaefȃ~嫧@=6=:3:7074-52+52+52+63,74-74-96/;81=:1?<3@=4B>3JB7MC7RF8VJ:WK;XL?:6@<1A>/C@/CB0BC3BD7?D=>D@CVCIaLRhU\o\br`dobbjd`afXWaJDlG>SEXFJ7@+>+A.@/A-@-A.A/=+7&7(8+8+8-6-7/81;4727272829494836/A:8/3*8/=5=5915,2)0'0(0)/)-),(,(-)/)2)4)5'7&7$8#7"8%7$6&7)9+7+4*4+NGd\`YOFA7;29->)>'<&;%9&9*2D9A9E?KHLIGDEEHGIICDEHMSSZR\O^OaH^G`GdIiNrQxRyTzUuZw^}^|UpMgOiYn[mctM^TeO`UgL_R_^_vqלB>5A=4@<3>:1<8/:6-84+73*62)62)73*84+;60>93A<6E>6I@7MC7RF8UI9WJ:XK;ZLA[NHTIMXR`gd|~ʗ㞪쩫蟡ڙҍtrhe]ZXR~XQzYQvVOnMH_C?M?:@?;:B?8>>4@B5BE:?D=:CB>FH?LUDVnQfaristvxo^l[cWYWUVMM?@.9$:$<(=*?,@.@-?-=,;,6'6(6*7-7-8/91838495:693616183:3C<=670@7[Rlc]T?63)2)2*/)*&(%(&+(-+0,2+1'0#1"4$:(;&<(<)<*:,9+8,7-@881GAc^XQB<@;4*:&<$<&<&:(:+<0>2>4C;PJXROJ?:?:HDHGGEJKPTRWNVKXL\RfOfKeJfMlQsRvRvWvXuXu[w\xZsWnVkbuVg\m[lFXDXQeVefgieʏ網C?6B>3A=4?;2=90;7.:6-95,73*73*73*84+:5/=82@;5D=5H?6LB6QE7TH8VI8WJ9YK>ZMEUJNWQ_eby{ɔ⛦뢣㘘،ɀuqiec^`W`V]TVPtMIbFCTBAIAAC<<:AB=FEACD?A?@DBEOMRWVdchqu}}}{p`uYiVaQUHF@4;)<&='8$7%8&9(8'9(7(6(3%4(7-:2<3=5<5<5>9<7<7>9B=C=B[O@66,+#)#-)/-,+((0.4/616.3)2&2%6&:';'<(:(9*7)5)4(9/5-=6PJTQLHB?1(;(=&<';'9(8(:,:/>4B8OFWPRID=C;HCLHJFMLSRTWPVNVOZVfUhSiRkRmSqStRuMmUt\z_{\vUoRiReUfRbZhZhN^ScYiS^`_^W}٩EA6EA5C?4A=2?;0=9.<8-;7,84+84+73*84+:5/=82?:4C<4G>5JB7ND8RF6TG6WG7YIBZEJpW]csrz{vpcTnG\K\HP<<5.9*<'<%;';):);*<,<-<-<.6*8.<1?5A8>7<3:4714.3-93A;E?B<=5<44,4+7-2', 6*G:K>@64--),*,,,,*,*)/+2.5.4+1(1'3'7(:):(:);*:*8+8,4+<4:5<7ONYWEE3/;,<(;*:)9)8(8*8,=3A6JAUKRGG>D:G>KDICLISPSTPSMSNWXdZh[pZrVnRlQlQpGmPvZ}[{VrTkWk\mYhZham`k]gfnfm\_]W{OFmfݺIE9HD8FB6D@4B>3@<1?;0>:/:6-95,95,95,:5/<71>93@;5E>6I@7LD7OF5RE4UE5WG8WI>XMKXNW^Zqppԕ革ꗖ⌋ׂ}yumpgf`_ZYXQQuGGcA>Q=5DH8BT=C`@EnCJOU]dfxknoi`WxIg;U2HAPEM;<71?0@,:$6"5$5$5&7(8+;-/?0@3@36*LBJE50GFZ\IKA?2F9OBPDH7/=6.=6.=60>71@93?:4C>8EA8KC8NE6QD3RE2VF6VH;ZMGVMR[Whlk~Β㚦铕⊌نу{umkde_aY[RQsNHbWFY_CQmBLEMMTU][bZhRpRuTuPlJbBW8J.?8ECKGK>>>6F:H6?+>-=-<->/?0B4D7E:E9B7>5;26-5,3+3*1*4-7.90807/6.5,/&5+7+2#1"9)>-;)<-D7JAD?64*-*-/26755301,0*/,0-0+8191:1;2<0=0?0>17+WLaZ;6;:PQFHPQ<4:/8,9,:-<.;-;,:-<.A3H9I;D6@2>0F1E6E6F7E8F8G:G3;18/4,3*4+4,6-81<4=4<3905-5,7-.$;0=.1"-7&=):&9'8):/=9@@<>37,/,.+**)+(/,448899757473717-6*5(5&5(PEmcHA42CC>BVVA<>48.6+:-/=.9+<-?0A2A2@.=.<-C6D9H?PGRLOINLON^cagitnzduVjQiUoWvVtXp^pnywksXa`m`mbos}숊́|thyjskXON:_VGqgSM=RL4D=3B;3A:2@93A:4A96@;7A@;CC;IE9MG7OG2RF0UF1UH5WK?RHFXR^jg}Ēژ礧흤蛢晞⒚ۋ҆ʃ„ymczXiQ_MYIRAI=A=;>8C9H:I8F3C0@1TIG?;76488:;9874:/<.;.:.8+7*4'2&4*3*3(3)3*5,6.8/=3=2;18/7-6,4*3)3&3%4%6&=)>*9$2:&4%1'51<<=@7=37-1-.--/.439:;=9=2603011/1*2(1%3$1$=1j_TL95@?:=RSJHC=:36.8.;0<0=/;*?-@.?-;*;(;+<,>0>2D8LBPHNFLINLaeafhro{hxZkUjZrYs]tarjt}wy_dgtm|eulw좟Ĕ|hjUHQSK>PJF>DF@D8=65B;D8C8A5>29,6)2'2(3(4*5,5.4.4.4,B7=17,6,9-9-5)1%8(2 1!9(8'4"7%C07&8*6,5.3/53:9?>LKHFBB>=<=7:26,1+1)/,./.1+4*5)7(0!.dY]S@:DC;;MMRQHE;66/8.9/;-:+<,@-A.<)8%9&<)?.7)7+>1G:K@IAIBJEa_^`djnwku]iXe]m^sbtdolr~qsryyaqXfЮ]jPDR9QT?jbUXO@WP@WN?UN>TK2G?2H>2F@4GC:GE9JG8NI6RJ5UJ4UJ4VK9XNDULMZTbkh{~Ñט磤쥨ﭩ▟֦ζgzL]ER>M;G?<=EB:4D9F:1)JEJICE>B;?<=<;B;?7D;MAK>=06)9,7+6,5-2*/*/+2/5.A59+1$3&9+;-8&2245!4"4"4%5'5)0&2)5)6*4(3&3'4)2)3.5233/2-2-4.5-3+/+,/-5.9,7(4%-3"XHYN;3NI41HHOPJJC@;6808,9+<+<*;(9&;(<)=)=+<,8,;0=1?3?3@4@5A7japic_mjqqadgmpylzhxdobidjlnqoqoy{}Zlcwbp}u]rQJY:LR8snZ˷YPAXO@XO@VM>UL=TKLAC5:,9+7*7+6-4-2.3/5384>2;-6)5&5'5'5"49$9"9%:&<+<,8,4*3.5-7+7)6&4"4!4"2$2&0+.,,-,/-2.3+.,-0.2.4*5'8'9'?.*D5>1F>VPB?BAUVRRKHC>=59.9+8(;*;(:'<)>+?-@/>.:,;0=0>1?0?1B3C5i\mdb[kfolbakltxq~o|ir]fY`bfqpzxvwx~Rd[p]njkZtON_;SZ;us\ĸ\PB[OA[OAYM?XL>WK=VJD=?==A>CB;?9<686696;6HA;15+A5K>H:=/8)6)7)7,6.507195=93*5*6*6*5*7):*>,4!44!6"8)8)3(-%@;>8=3<.9)7$7"7#7%3$/&.'.*.-//./,)0+5-5,3&4%9&>*A/1 SE;0A;C?JITUUTSQOMJCC;<28+6&7&7%7&:'<*>-=,=,:,;/<.=/=.?0C4E7\Qg]aYlgpma`fgjqR^^khqem`geiqqxwtunuJ]Rh[m񜡣a`UoHOd=W`Aww]\PB\PB[OAZN@YM?YM?XL>XL>UI;TH:SG9RF8RF8RF8RF8PF:LE;KGE=F?F:>?@EDA<61>:ZYAB@C=@:=8997<8A8E;:.2(/9(8)9)8.:/8091;7>81+2*3,5,5-7.9.=/7(:)<+<,;.;0<695C@@<@7=19*9%:&;%<(7'1%1%1(3,1,/*2*5,7+7)5'7%;(>*;(<,^PF<3/.,@@WXusrojg^YPGA75(. 8'8(8&;)<,=-=,<-;.<..B3F7MA`Wa[pltr`a]a]dHTYegrgoelkpsvvvpsenDXKbXk뒖_zYQlCSh?\gEy|_\PB\PB[OA[OAZN@YM?YM?YM?WK=VJ@@?IE>82,C??=@1;-8'7%9'<)<):(>-:*>2C:/-::245653;6C>KCQISHTHUG?0?.<,=->-?.?/>0<.<.<.=,<,=.A3D6LAbXc]nlrr`c`e`gkvozkv`h_flqx{y|ms^jAWC]Uh懍g]YtI^uIhwPfǻ伺޺޼[OA[OA[OAZN@ZN@YM?YM?YM?XL>XL>WK=VJQI>QI>SK>UL;XM9XM7YL9XM;WK?ULGYSWe^nnjut~}ȍώԏՏӐӋʃ|u|ovioljlcyYvPoBd7V4L8H@EFBJCJEGGCJ=N>LCICCA>ID;44,I@LFBA?=;;<;@=E?G2A5A5A6G8A1;(9&<)=*<*8&:+7)0'C<2/?A/2*,1/5.81908.5*2&1#E5A2=.:*9)9+:,:,;/=0>/<.<+<,>/A2SGg^c_jinochjqoxq{t~mubkdnrzx~quipWfAY@[Qf~ykm]oZy`r֭ӦЧӫԮֱں[N>[N>[N>[N>ZM=ZM=ZM=ZM=YLUL=XLNAEFDA=HB:/7,OFB<=8641051>8E;F9D59(:(:*:'8%9&:':&9&:):,9+7+5+3+3-*+*--3/4173738588;8<9>9A9D7F6H5E+5-2124/6-8*;+=,5&8*;/=2>4=4>5A6J0/..46663-7.90:1;1;0:0;/L?F:@19*6)6(7*8*;-=/>0=/<+<+<.=0KAdZc^kiosinrzvfpoyryjslvwv}hocnRbB[ZM=ZM=ZM=ZM=ZM=YLVJ>XL>YN583/,*&/*:3C9C6>/;*;)<):';(<);'8%5$7%8)7*5*3*3)2*33588<4:-2(-(-+1-3)0&1)6,?*A 9/"0(.,10/1,3+5)6*6+90=6>7:4715092H=KYM=WMCWLHXNOZPX]Ub`Yia\rjfokspvq{u~ɊLj~yrrtl\HLB9A:C@@?:;<>DE><=<>=@ABICMANAL>>@9?6>3,7%:'<);(9%9&:':(:'9(6(2$."/%7.=582400-**&(%'%'%'&*!)".'7(>!;61'8#,#++---+(-)416264666512./,,/,92:191SK"+#F>.&.(<7E@:7/*.*51<7>4<.5)3&5*;.;08.bXZOC:6,:/8-3'6*0%2&2&4%6':*<.=1:0C;\Wppsvx|yq||wt}s{r~r}mxgs`nI\>\>[AVekzm}f~cjw|vzqyo|rvuwy§̹Կ̺ZM=ZM=ZM=ZM=ZM=ZM=ZM=ZM=XK;XK;XK;YL]P@[OC[NFYNJZPQ\SX_U^_Wfd\tibngqjxpyĊď~tnqujW{=A5+5+<3@8>8?:A==;;<;@>B@IAI@KAF<9=4<1;/:,:+A5JAG@A=6351@9C89+5#8';(=*=*;(;(:(9(9(6&2%2%5*8.80911&/%.%,&+'+),+-.*-%+$.'7$;7300.93<*1(,.002+.:>7=4:26/40325872-;582E?E?/+2."51?:E@=83-2,60:1:.9*5'5(9+<0<29/cYXN@84+91:06,9/5+4*4*5)6)5(6(6);0B9YTljqtx||v|yv~usp}kwdq_nI]>\>\CYehwozbu\x]ckppmp]l]h\g^k_qeyizktv|}ƷǿϼƷ\L<\L<\L<\L<\L<\L<\L<\L:A=E@GAH@E@B;6909+9*8(9*?3F9674;7C=OEH<3#9(:';)=+=,<+:)9)7)2#/#4*=3?6914+4&5&2%/$,$+%+(+(+-(+&/(6%:733%70;5A8C;D,626;3=6=8<7=6<2;19.6*6);/@6TMgeorz~||yxwsn}gv`p[mG^\FZ`a~evZiQhOmRtX{]}^x\qX`zM_PaUeYn`ug}j~mrtxyyz~ǹ˸ȶ[K;[K;[K;[K;[K;[K;[K;[K;ZJ:ZJ:ZJ:[K;[K;\L<\L<\L<]K=]K=]L<^M=^M;^O<^O<^O<^Q@^Q@]OB[OC\NE[NF\OI]OO^P_bTmdY{i^pg|t{{zxucMlFRA@A=E;H;G;E9A:@A0D:<731;9A?D?SLUJ:+9)7$7%;)=,=,9*8)4&2&2)9/>7>65./&6)6)4*1'.)-)*(**),','1)9&;GD=:<9:5807-6*4&3#5#6$8&;,9=9?9@8?5<2:.9-9,=1NHc_no|~yyyxtn}et^nVhE\8V^N>\O?^NA]OB^PE^OJbNYbQdcTqdZ}lexrwv}‰΂wlXwD_BTDPJPIHE>EBB@C@GBHDGCDA=?7@7=/:+:*9)8*;.?6FA=;BBAA;6JBXLK>@28(3#8(<-:*7)8+0%3)8/;4:5600+,'0,1-10312537486;-5,6.=0C-F)G+N3R9L3?@M_llzWfCS>P3D3A3>6<99834*/$2*.(72YT\ZXVA?HFB@<7706-8-9+7'5#8#9$:(=-;,6)7.=5NGEA501->9@:815120215283:2:/9.:.6*8+IB_Ynl}v}w~yxsk}dv^pSeF]8V=ZL]TRz_BWhC?EBEFBDAECFDEEAB:?4?3;-8(9(9)8*:-;3IE??=>782/A:ZPh[PCA35%6'9+9+7+8,0&6-;4;440/,-+--493;3=3=1>0=1=1>0A1B4K5N0N-O1X>_3HO\an_nWfP`DX8JAQ:G2:/22-8-;+:*:/2(JBkcLGPK;9;9LJ@<707--9)3':/D;GAC=722.;7:62.2-,-,,./3171:1<1>26)4)B:XRjh|}v}xzxqi{bt]oQcI`:X?[O_QNqX:Sf8]uEa|InSvY{]~`gll}m|o}ponllqqrroprtvtwï̫̾ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8[L9[L9\M:\M:]L:^K<`J<^K<_L=^M;_N<^O<^O<^O:_P;`O;aP>aP>aP>aP@8>3>19+7':)<*<,=1?7=:9903/24294MElah[QCD>63;7UQF@918-:,9(9(=)?'<&;&=*7(3(=4LFGAE@963073510+1-,/+-./1/4/81;1>29.3(;2NHa^yzz|{xn~ew^pZlL`Ia9W=YM]JGhQ1Qd6\tDf~Nu[chjnsttr}pnmllnnoolknrttwƯν̻ʤ[J8ZK8[J8ZK8[J8ZK8[J8ZK8[J8ZK8[J8[L9\K9\M:]L:]L:^K<^K<^K<^M=^M=^O<^O<\O<`Q>aR=aR?bQ?bQ?aP>aO;bL>hOKgNRbP\cWkjfuv}|xzƄ}uzlmY[DL/I5R4=0?1;+8(<,?.@1A7C=7485..30:60'5)UGwj[PC7<0;07*6+:0708263320112364<%6#9"9"9!865629%B(G&J'M3\Ehbu`lWcQ]P]MZ@M2==F7;/./(5';(?&>%9'8+VJ;2?8412/C@WSHA916*6(5%5$:(<(:&7%9*4&1%?5RJIAHB;62.411/-+22,/+.+-++-*1*4,8,=12(7.IB\Xww}vj|_sXlTiD\D^6U:VLZHC^K-Mc5Uo?b}Jt\glnrvzwr~m|i}ggikmmlh~ijosrxũʵ¶Ş]K7\K7]K7\K7]K7\K7]K7\K7^L8]L8^L8]L8^L8]L8^L8]L:]J<]K=^L>\L<\L<[N=]P?^SA`SB_R?`P@bQAcRBdQBdNAdLBjMIhKMdPYf[lnkw{Ђy~sqjba^JW>Q:L?NCQ@KF9=4;0:,6&A0<,6(A5F==57285715.6-8*<*:'6%;0SLZOE98*>.B3:-3+GB//5:6=,7BM'3&2)2(2'"*'/'/&)+7 .&7-A#;Xr-D]l_iZcU\PWHM?@84>7A7?17&2!6#;'<)8-7/E?;7316454DCLHKED;:04)5(4)5*1=3_Ysqxh}_w[uUoLfEc:Y;[?Y]i@;VF-L^6YuBgMw]}cgjnonm~l}i|h}feflmlk~gfgimrv|z]K7]K7]K7]K7]K7]K7]K7]K7^L8^L8^L8^L8^L8^L8^L8^K:\K;^L>_M?^N>[N=[N=\Q?^RB_SC]QA]OB_OB`NDbPFcOHeNHiMJgNQeS_g_tnny~ʣxy|{vji`]aOZFRHSIVEP?J;E9?:<::=8?7>4/8(8);.;4JF016;6A.<@N'4$,%(),+,*+((((+,$'%(%,;D'4CAR&6jubjZaW]OSBC<8>68,D5H6>,/)((-%:6TPHG5445==WUGBG?A99/3)6,7/70=3915.2-4.83?9E=J@A86-0*0,210303021201/00.1-4-9-=13$aP@`P@]P?\O>[O?[RC[QE[QG\OG\OI_PMcQOfTTgUUgUUgV\h]nlisv|ˊԘנʪ}π䄆vsjegS\GQFOHREQAK=E7=7:99<7@7A4?0>->-<+:,B6H?;20):26/6.7,8,7(8&9&:*4-4.A9OCH:5%2#@2>5HD135;7@4@ES2?)0#&$'13-/''&%12)*8:+1)13=R^=K[g^fV\OTMREI:;74?96,?2B5=17-3),#' %/*EC::,,35AB^]?:C;A9=39/=4@8@;@<=;>;A?>>::?=IDB9<45,2+1-311202020201/00.1-4-9->24%8+;0[Tzw~rdy[tTqNmFg=_=\EbTgAHp;3SH2Qa<]xEfNrZu^t_xc{g{gyfyfycxbybya|bzczf{h{h{e{a{`}``jnstwuynolSeYAPM2A>^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^L8`N:aP<`Q>]P?ZN>YOCXPEXOH[QO_UTbXYeX_iYcl\fk^glaildqokrty~ʅڌᎇןӭijy{ށzwsrcgU\MTGPCM>G-=0F:RGH?5.1)9181;0=1;-6'6&8+5-2+=4NBK=:,8*B67.>:/0164<8BNZLU>E38$&/1,,22**/.::37,29@EMXcMW=CADBF>A9=8988978391:2A:NHVSNNC@7295KIMLQRYZRQYV51>6B9@7?5B9C<@;?@8=9=?C:?58>=MJ93603+3,4.30210102/201/0/.0-4-8-?36'5(9.VO|yzocwXqOlFh@c9\?^KdZh35g;0WO8WgCa{KjPsYt\u^wbyezfwdvawav`x`x`{azczfzgzfzbz`z]|]~_gntsuqtiidQcUDSL8G@^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M9]K5_M5`P9_P;\O>ZN@XOFXQKYPQ`W\g`hnfsshysg{sg}qh}ol}pqrwv}z҄响㝌ڠulnqvlvismllgi^`RWFM3=16*4'6*3,70=5E9F9B3A2>20&720/.1.47?PX]dZ_OS.103,-EE66,,-.>@2537bh=B*2-4&*;=@E6:379=7;/043;;GFRS`cilek^a@>E@^[hgopjjKK=;40>7D5<4:1415;-7,6.8,4,39b:_6\AaNeWap/+_?0[W>^lIe}MkSt\u_v_xcycxbu`u`u_v_w_x`{azbzd{e|d|`y^yZ{\}^agmpsr{nrjexe[k^RbU_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N:^L4_N4`N8^O:[N>YOEZSMZTT_Zahbprmzu{u{qzpvpqtrxt}wz~τڋޖܙ͛~yl[Q>MBQIWRWUSRKM>C4:9<9;;9=8@8B6A0?/9,A65+.$I?g\dZUI<26)3):0;06,3)6-1*71;29/>0F5B39+1(4-31-.*.17EJV[]b\a9<9<+,JK89//57()'+XZ>B9=6:#(+<>AE49,21705(.37KNaehncl`i`lbkLLNJ\ZVTMMHF423/ACJJ1.3,3,5,4-4/4/3/02/2.1-0../-2-7-=1;-1$7,C=yv|qhx_rRlDc9^6]6\FcN`IMe5+VD0[Y@^lIe|NkRt[w_x`{dzcv`s]r\s\t]v^w_{azbybzb|b{_x[xYzY{Z~_ekmsus|rupnlfwe_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<_N:aP6aP6aO9^O<[OA[RK\VV_Zakgvso}z~|}w{uxvsys}x{~ĄɍΔ͚ǠɭŦmfJE2A4@4B9HDNNJK?C=?;=<;=:@8@5>1=0:0?64,1'I?cVh[eWOB>24)7,905,2+600,4/7/7.>1C4>04%4*0+3/..-.1478BEMRY^FKQW37FJ80=*7.:;ECHAB1/4-4-5,4-3,4/4002/2.1-0../-2-7-:/>01%7,;5sqvi}at[pPjCb7`7a;_LfO[~86]=0NF1VX@ZeEcxMjRr[v^ya{dxas]pYpWqXqXt\u]y_x`x_y^z^y\xYxWyV{X_dhloqmxjqij~cbv]_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<_N:cQ9cQ9aP<]P@ZPG\TR_Zaa_mtryx~~yyyuwww|x}ĂąȸоѻЬoT\GG5>0G?WQWVNO@C=?<==;=:=5:19080<5:3=5OEXM]OeXcUL>:-8.914-2,60402-5.<3C7C4:-3%5,.&0-/,3154-.24BFX]W\ouDJHM@02:=HK9>7?=F7B-8>J]gmwjrcn]g^kao]nYe\]PIJG74/0540.95D?JDIA@86/4/7166'/0<2=+60:>E?A443.5.6-4,3*3,4/4101/2.1-0../-2-7-9.?20%6,61popcx\pXnOiBb9a`P@`P@_O?_O?_O?aQAbRB_O?]M=]M=aQAcSCbRB`Q>dS?aP>]P@^QI[QPZSZeapsqyxz|~}xzrslotwv{̀ʋƖäƳ̰ϬϧϣУ˜˜Ѩg^FzgueH?QNccKL?A89:::97561;6815.B;<3I?XKOAdVcTXIG9:/6-7/6/4/0-2,70=4<07)5(7,/$/&/)1-2040516479JNY]NS8=6+90>=HS_`igrepbmcn`o]gSSF@854111/.3194D=B:?7<4908193667<4;4;4<6;59331/3,5.7.5+3+2,2,201203/2.1//0.3.7.?58,6,/&;7XW{me|\rPhGeCe;d9`NlRd=?P, C;&CG.KM5Y_CZjEcxMqZxbx`t\rYqYlSmRnSoTrXtZu]u[tXtWvXwWvWvUuTtS{[{]z^u[mUb~MXrCSj>AW0?U/`P@`P@`P@_O?`P@aQAbRB`P@_O?`P@bRBcSCbRB`P@fVG_QF\OG^TSaZad`omkvwwy{}}x|qukplonquv|~ՉӘΨǸźαתۥޥݢۤأѠǛӼ}dŋw}mVJa[rpZ[KL?@=>>@;;6664=883?86.>3K@H;]Mo``QH:5)0&6-5-0)5195=7<38.5)4*5*7.5+2+0+0,2,4.5287>@JLW[^b\d]eaiS[NVQY_gjqflZ`NT4:,5*6-9'5!-'67CPZZdbldmencm[hQZEE<7646355302/62>9>7;4:3818295:69;7:7:797965312,3,6-7,6,2+1,1,201203/2.1//0.3.7.<3=28.1*74Z[s}fz^vWoOiFf?b^QA^QA^QA^QA_RB`SCaTD`SC_RB`SCaTDaTD`SC^PCbUM\QM[QRcYbkdtqmvuy{y{y~x|nsei`gjnru}}ׇݗ۩ػؿۧϡÜkpo`RG]Umiuu__JL@DAD>@8:66=:;6A:707,>3=/F8j\i[[MB62(4+6-2,52A>GC=62)1'2'0%4*1).)/)2,7/=4B9-(43DCVX^bZaS[Q[FQHSOY\fmvntY_>D.5-42<2>+9'46EKWISPWW_^fck`iRYBI977175<8;;955160:3;290907183:6<8999997988874402+6-7-8,6,2)0)0,10121302/1//0.3.6.90D9804./._blwbxWsPmLlCf:];_IfSgDJl;4O>,=<':?(ED/FH0Q\U'B\/E_2Ic6WJ:ZM=\O?^QA]P@^QA_RBaTD`SC`SC`SCaTDaTD`SC_RB\PDZOMZQVbXcjcsqmvuxzz|w|symrbi]daglrx{ʉߕ夡䶵۪ө¡vqrcbWi`rmut[]LNCG@D@?=;957282918080717396:7:7;9:7:8:6845.3+6,7-8,6,2)0)/+0/222312010/0.3.6.8/F<913.,,fjygtbyTqKkGj>c6Y=^QhXeBBgC7[N;GF1AC-JH3EE-LU6Sc>btLlUpXnRkPiKgIhJhKjMkPmToWpVtXsUqSoPjMgJeHdG`D]AWy=Rq8Mi6Lf6Ne7Of8Lf7Oi9Sm>UH8WJ:[N>\O?]P@]P@_RBaTD_RB`SCaTDaTD`SC_RB_RB^QIVMR_Xhnf{tpxtxwxzy{syjr`g[c_gjrv|ƀΓ䭮绽߹׶еƱy|qvksimeoi扄~sredWYMNDE@@:7;7B=E?<3=3B51#0"I;XKN@=/8*6*3*42UUkh]XD>;3;2804-2,1+0)0'/$/$0#9,4'3):5CAEGBG@HDOOZVaVa^igoYaBG:<5738283=9CHSV_6?4;6;ADJOIM;A135195<8<9;9:77370;2;1:09082736475:8;8:8:9;7956/3,7-8.9-7*3)1)0)1-323322011/0.3.6.7/C:701-13jpqzft]tPmCf=d9c8^EdZmV[wE>dJ=aYFTO;KI4PI6GE.GP3L\8ZlFf|NmSmRlMhJfHgHgIiLjOlSnVoUtVsUnRjLfKcHaF_FZBX|?St;Pn8Ok:Rl=Wn@ZqCUo?Vq>WqARE5UH8XK;ZM=[N>\O?^QA`SC`SCaTDaTDaTD`SC`SCbUEaVP^Vcje|yu}yzyxyvyswjrcj[c]ehpv~ǁшәݣ௳㻿þŹx{tyvquleleoga[`[smyu{|yrpccSTHGC?>:<6A;:1C:TJ>26)9,=.?/B1C5@17-2/LM_]WSD?:48170939292:19/9,8+8)(3"@2I>D@;:7;:@7AHRV_Yb^g`iU[AE@>?;ACGJLTQYT]V^4:/5/37:=A;?4812429586422020404.<4=4<3;2837343438898889997755/3,7-8,:+7*2(0(0(1,424332111/1.3.6.91<3710-@CnukubqRiHf;a4^6b>dNi\iGFjF:]L<]VCXQ>RJ7OG4ID.DJ.GU2Sc>^sHgMjOjKgGgFfGfHgJiNkRmUmUqUoQjNgKcH`E_F^G\E[~DWxAVr?Uo@YpB]rG^uG[sCYtAXs@NB2QE5UI9WK;XL\P@^RBaUEbVFbVFaUE_SCaUEfZJh]Yngwup|x{ywxvwpujoah^f_gempx}͉؏ؙ֪֡۴ߺɼĻqqqtpopfewhenj_Yd_ZTf`snzv{wwshfZWRNHB=6D=;4G=\R;0<07+6(>.D3B3A1A386>>CCB@=7817/7/:393:3;3>5A5E8G6-;%J8L==50+009>AJKTU`Ze]eYaLR>@4/7/;9@@CHDJBI?F5;26368<7914/2142095740.,*0,3.3,=5=4=4<3:59565655757576866542.1+7.9-:+7*4&1&1(1,425342211/1.3.6.;34+:520UXpxcnZiI`Ef8b/]5bBhLePYj5/^G7XK:UN;[P>VI8M@0JC0@F,AO.K[6Xj@bxGfJhIfFeDcBcEeHgLhOiRkSnRlPhNdJaH_F_H_H_H_H]~G]yF]wH`wKcxOczN]uC[vAZu@JC3MF6QH9TK.E6>-2"7'E7E?973.50;5=5<4=4;4925.4+5)8+<,?-S>G2<):-=2;57443KNMRPUTYY]VXMOD@5+7+7/52242618.64>3;5?9B4>+5(3/9-35759./*+0.515/<4=4=4=4;6:676664635253455411-0(8,:+:+8(4&3$3&4*5052423/2/2,4,6.=4/&>935bgoy[iNcC]Eh:e0]6aGhJ]CFR,#VI8SL:OH6[O?UI9F?-HF1>B'@J(IU1Sd:_rEe}IgJeHcCaBbCcEeHfMhPiQlPkMfJcIaG`F`H`I^G^F_}G`|Ia{Kd{Mf|Nf~N]xC]z@^{CDB6FD8JF;PG>RH>WI>]M>_O?`Q>aR?`SB_VGbYRgb_ojnso~wqzt|yywppgg`a\_`bfhopyz̄֍ߖ眙栞ݡף٤ڦإץԤӥѣ͢ɢȟÙ|rn}igld^`fZZkYUrWP}WNWORIZPXPZSkdyr|uqus_]PLEAZT712*6*7(7'7&9(;+<.?18.<2?4;05(3':/@590907.7+7):*?,A/=.@4E:G+?*?)?(?&?$<$<$8'9+<,9+5.545;984:3;4;5:595735435465454535/5,5)8,9*9(9&8&7%6%4&5-4/504.5,5+5*7,907/:6?BmwbsSjIcKj6[6_cNjIV^$"D, ?:'HE4PMC/?G/BH&EK%KS.S]8[kDavKd~NdJbF`Ba@cBeFhJlPmQlLiHgGfHfJeIcHaGdJdIbGc~GdJdHe~Ga}C[{<\=_B=?4?A6FC[K>]M=`O;`Q<^SA^VIc[Xhcinlysotpvptppmgfaa]^\\edkjtr}{φٍ易囖ٜ՝֞מ֝՜ԛўќ͜ʛǚēxtk|mdif]^f[YiZSoWM{UJVKVK\RYRXRfaqjvo~wusgdUSZU2,/%7)7&7%8&8';*;-=/9,9,:,:,9+9+8+8,;1908.8,9*9(:&9&6*80=5@8A9?7<4914->6H@OGQINFC;7*7%8$7)4,//+3)7(:+@*A)A&A#@!<=:: 9%;);-9197:;;94:5;4;5:595735235465464716/5,5)9*9*9(9&9&8%8%6%5+3+4,5*5*6(7)7*;14,54TYes[pGbIhAd;`3[;aMmLb8?S*$A5'69(;<,B@1DA0@?-=B.>G,=CKP'\b_?bB69.:<1??7DA:KB;OE/>/6(/":.8-7,8,:+:)9&7$5)6,8.:0=3@6A7B8:1@6E;FG=@67+6%6&7,4/03-5+9*<';'=%=#;!:77686$8*;2<6=8;::94:5;4;59585735236475565616/5,4(8)9)9'8%8%7$7$6%5'4)5*6(6(7(6)7+<21+88kr]nPi<[Hl7]>e5[>bVq?Qa#(L/);7+07'37&9<)@=*A<(@>)BB&?FXa4s~Tdw`hSa}LaG`C`?a@c@hEjJkMlNnMkHhHgGhKhKfLdJeKdJcFdGfHfGeFbBcDeEhH25*58-;<4A>7G@:KB;RE.>.8(/!6)5)4(6)9+<+=*;):-:/909/:1;1<3=3D9?8:8794:5;4;59585735447476665726/5,5*8*8(8(8&7&7$6$6$5%6(7'9(9(:(9):+:13.HKoyVjD_<_Ag3\8b>cMlOe0=J C1-11'.6'4=,=B.B@+B<$E>$HE$U\0p~Mr|mjW_{J]~E_Ca@bAfCkJlLmOmOoNlIiIhHiLiLhNgMfLdJdGeHgHhIfGdDgHiIlL-3'36+891<;6B=9G@:MD=QG=SI=SK>UNDZUQa^eigumklkjhb`XVPPQQXY`cfjorux|Ђֆه؊ً֋ϋ͉̊ЉшъщЌϋȍ~wmYjSZnVTc\RZaOZ_HeZDxUBLDTRSWRY^dejkluqunoh~v{~l`?28(;(='='<';':'8(7):/8.8,9+:+:*9)7(9+7+8,7+7*8*<,>-<0=0<2;/:08,7-5*@7@5=49.80;1:25,/%0)2025/8-9+;,<-?.?/@/@/A/?-?.@)9)8+70:6=8=774394:5;6:79585654448485676726/6,5*8*9(9(9&9&8&7&8&8%:&;'=(=(=*=,<.7/;8^eaqPi<[Ai4_4`1YKlYq>NZ%-C),:2/-0)08+7@/:B+<<"A<UH(`[5{Slwo[aK^F`DcBeDjGoNpPoSoSoNlIiIgGiLiLiOhNfJeIdHeIgIhHgGeDiIiKlN+1%.4*470893>:7B=:HA;KD18*4&8)<,:,:,;/;-:/9+5+5(6,;/>4?3?6>37.,#+%-*02391;0<0?0?0@1@1@0=/<-9,9*7/8IE4>1>0@/?.$?%@(@*=-;196U\^qGc?a:a7g3b8`FdNa@IS12A64@:<:46?56<7179+4="9CSZ.PqŊˎ̒Í}{egQ_E^@c@iDoJsPsSqUoSnNkJgGeEgJhKiNiNfKdIdIeHgJhIiHfEjLlNoQ&.!(0%-2+13.331764:95<;6GD=DD*;'7$4#B2OAN@B47)7)>/;+:*8(7'6'6(8*8+;.;/9-6*7,<1<271888=:A9B4A/<,;,:/;19384857563657376;9<69453376;9869796:7877767465:5:7:8995827/7+8+:*9+;*:*:(:*;(9":"=$>%?(?+<.81<89?48E26C41=:)>E&FU*bs?aˌɋËz{efPZ|@^?a>hCoJrOrRpTnRnNjIfFdDfIhKiNiNfKeJdGeFgHhGhGeDkLmOpR(0!'/"(-&).(.0-3317839:4==5?@8DE@JLKORYVXeZ\s]^}YX[Y^]eennwx؄⌌솇䂂܀ւӃ΀ȁǃ˄ΆЈӋҌϊŊ}xwozkegf]Xm[Qm[Mi\Lf^Kd_IeaHhaGo_FoP;UA]OaYYXQTS[\`heYPD<707/:1=/;+9(:&9(:)8)8*5,5,/%3)8,>/@/@-=*9'9)0"WJK?/#=12<07,8->4C5;687899:97877;=<<::8785747575979899::9;9<9<8<7;6:8:9:;9;5907,8+9)9+:):):(;*<)9#=':#49%D3?61,^eVgIb<\1X0Y6cBiYoFQo33N3,B?6>C<@78@-1L/3K2.A9&DJ(Zn=~_włʌ~nfRXvBY{?]>cAiDnImLlNkOlNiIfDcBcBfIhKfLdJgMhNgKfHeEfEjIkJqQrStU*0")/#).').(-/,130561782;<4>?7AD=HJGOPTSUaXYkZ\u\Z^]dbkjut~·ߋ鍍년 ؀~Ҁς̅Ɇȇˉ΋ό΍̎Ȋ|x{stknlb`e]Re`Me^Kf^Kh]Ki\Ij^Hk_Gn^Ew_G[CYFZLVPRSQXX_USLE>9606/909,9(8&8&8(8)7)6*4,5,0'5)9+=-A/@-<*9(8)<.REH<4(:-:,4&=,<+;*;*:)9)8)6(7*8,7,3)1'1(7.<5DG8>/9/:0=.;1<6?5:3622:8EBIFDC?>:7989796858598988788999:9;9<9<7;6:596888;8:59/7+8*:*:*;*;*<)<+<)9$?):%5:';/:2<=^gPdA[8W6[;`>dIe?L?>_:2G;/:>08>2F<:R>=N0.S8/VK5ciEx[p}Ɓ}xr^YuETp=\{B_@b@iCmHlKkLiMiMgGeCcBcDgJiLhNgMiOiMiKgGgFfElImLpQoRtU-1"-1#,/&,.)//-11/34/45-9;0<>1@B7EHAKMLQRWUUaVWi\Yt^]fdpnzx΍ߐꐎ튉燄߁|}ȀÆLjƊʌɌɌŌ|v{pujpndbi_Vc]M_aL_aKc^Jg\Jl[In\Ho]Gq]EwaIxX?S=VDXOUSOTMS><<784716/6.7+7(7&8$8&8'6)5*3,5,3(6(9)<+?-?-<+8(5'J=F:A584627272728596;8;877888:8;8<8<8<8;58475777:7:48/7,8+:+;+<+<+<)<+<)9&@*9$6$;+0'40PT[iJ`:U7V@]HfHdNa89e?6R@2DA09=,57)>6+K9/E-#R=,g]B_t{z{xm\uKHb5Nh8[xB_}?c@hDlGjIhJgLfKdDdCcDeFhKkNkOjNiOiOiMhJgHhHlKoMsVsWvY24&04&01)01+12-23.34.46+9;-;>-?A3DF9IJDMONRQWSS]XVd\Zoda~nlzwÌ֑㔑ꓐ뎋≅ق||~Ë}{vyn~rgmmaak^Vi[Pc\J]`K]aJc^Jh[JmZKqZJtZIv[FsWAxR;Q=YF[PTPFI>A2/5/51605.5+6)8)7$8$8&9'6)6*3,6-6)8'7&:(>+?-;+8)4'UI<18,B45%=+=+8(8'9(:)9)7)6(3'6*3)2)4,:3>7?9=:45596;5;2:397=<@UVbbmjidVQA<634/61717182859697:878898;9<8<8<8<7<5:686797<7<49/9,9*;*;)<)<+=);*<(:'@,8&8';-+"54`gTdG\-=@-@C.DG4IK>MNFQPNRRRVUSYX]a_lkius}njӕᔑ␍܋ӄā}||~zxsznzrfjm_^j[Ti[PjZKfZJb_Lb_Le^Li\Kn[Lr[Kw\K{ZG~UAR=RAVFRHG@88331-3/5/5.3,3)5(9(8$9$:&:'8)7*5,7-;+:)6%8';+=.;.7,90\T=55+A53$:(?+:):*:+:,;-:-8-7-3*1)1+71<7>:;77475;<8>7=7;7;797:::=:=7;2;/8*:*;*<)<*<(;););(=*8'9*8-/)@ChrM^H[DYH[O^T]TWXUdM?OL9LG4JE1FD-?B'=D#>H#KV.\g.==1==3==5;<4;=2;=/?B/@D-CG.FJ3KL:NOAQQIRRHYWJZZN_^\gerqn{yďяӍϊǃ~yzwyv{v|y|}}x|tzrvksrffm_\j\Sk[NlZLl[Kk[Ki]Mg^Mi]Mj]Mn]Ms^Mz]MZI`OVGN@J=@76.1+1+516/5.4-2)4'6&;(9$;$;&;':)9*7,9->,;(5#5#9)<.;/7-?7[TIA:0@36&3 <)9'7'7'7(7)7*7,7-<3:293<7>:=9854196<9::8:>@PPbcppheTP=61+40;7=:;7;5:294837373556669697;8<8>7=7=6:8<898:;:>:>7<28TXepK\I]J\M[QZVVZR`RPI7HM9NI5H@+;567>O%Lf6lTw\edfkt|mn}\Q`Cg{HiFlGmGjGfGbGcGhJlMoPnPlMiKjJjLsTsUsSrQrOsRwUzZvZu[sYRK;RK;RJ=RJ=RJ=RJ=RJ=RK;UNXQ?YR@[TD\UE\UEb[HaZHaYLbYRe][kaiqftuj{zn|pss|puj{mbre]jc`k`_g_\c_Z^^ZY^YUaZRbZOe[Og[Ki\Kk\Ik\Gm]Fm]Fj^HicMqfTqZJuOBWJ\PYLZLN=E4<,7(8-80411-6/7.7.7.7.7+6)7)8)8)9)9)9+9+8+;,;+>-9(1 2!9*H9=,2#PFJ@F<:7487::::776493=7F>B9:/4(1&5);/?3:0<3?7?:=;;9899:7:8:8:999797959540516576899:9:9;;>9;99=:A=B;A6?1:)<+=*<(:&:%8&8&A0<-/#/&LJmoloVZLNNOQMUOXO]RaTjSWZ/:M7FTa)~Poyxs~ahL\mCYdBT]BHP9?D0:=,@C2<@1:>0]sBgHpKoKlGjIiKgJlPmSoSlPmMkJmJmIqLqMrNrPtRvUyYz^ycmZbOWN?WN?WN?WN?WN?WN?WN?WN?XO@YPAYPA[RC\SD]TE^UF_VGd[JcZIcYMcYOf[Uj_]nbdpdhreltgpvirvirsfmm`gg[_bXY^[VZZRYVOWTKXTIXTH\VH^WGcZKcZIf[Ig\Hi]Gj^Fk_Gh`IcbMngTv\MSFVMVORJQEH9C0=,9)8,8062406.8.8.8.7-8-7,7+7+7+7+7+8+8+8+:,<.>.9(1 2 :)>.<.:-4*4);0E:OBQCOCF?@;<5;4=7=88633777879787797=9B:A7?4:,6'5&8)=-@1A4@6@7=8:777567:6:6<7:89879595:592:3:5;6;8;89999:;;;<=?=A;?6=2;-;+=*=+<);(:&8%:%9'8)5*<5QPee^aMMNLTMYP\Q^S^S_VfQ`_/Sg*^r3zOn|pbjHauBTe;JX7FP7?H59?158-:^tEgHqMpLnHkHkLhKmQnTmSmQkLkHlHmHpJpJpLsQuTxXxXx^mXbQYH]TE]TE]TE]TE]TE]TE]TE]TE[RC\SD]TE^UF_VG`WHaXIaXGe]Je]Hd[Jd[Le[Qf[Uh]Yh][i]]j^^k__k__i^\f[YbWS_VQZVMWTKUQHRNCQMBSOCWQCXRB^WG^WEaYFc[Fg\Hi^Hk`JhbLbaMngUy_PXN[UVQIEE@@7>1;/8+8+9,;/:/8.7-7-9.8-7,7,7+7+7+7+8+8+8+9+;,>0>.:(2 3:&>,>.?08+2(4*<0F9M?ND:643204297=<<<;<9<5:27265899<:@:8-:+6'4%5%8(<+=.D5C6B8=79464557969696977779595:3:3;4;6<6;8:999889:<<@>B=?9:17+7(;,<+<+;):(9&7%9&z6#y6%9,F=SOWTPOIFMHSLYP^SaWaW_VePsrFzVn{|[[oaXIaXIaXIaXIaXIaXIaXIaXI_VG`WH`WHaXIbYJcZKd[Ld[Je]Hf^Gf^Ig_Lg^Of\Pf\Rf\Sh]Wh]Wh]Wh^Ug]Te[QdZPc[N]YMZVJVRFRNBPL@PM>TN@UO?WQAYTA[VC]XDaZGd]Jf_LfaMdcQleUv\O[Qb\ZXFD<:<8;6:08-8):*?.?/9-7,8-9-8-8,8,7+7+8+8+8+8+8+9+;,?1>.9'3 38"=)@.?-:+7*5*7+:.7<380625587765615(7'6&7&7&9(:):*A1B4A7?8;5957687687878868694:4;492:2:4;7:8:89799<:@3B%:F.=F3;A3:=2:=4<=599-?@2<>39<1<@29B/?L2PbNK:NK:NK:PMTQ@VS@XWC[ZF]\H^]Kb`Qf^QmWJ[Ricc`MMBC;=8984709+=)C+B+;+7)8*:+9+9*9*8)8)8)8)9)9)9)9);,?1>0:(6"47 =&B-;*;,:,9-8.:0<0:49<4<3928384838256<494:7:9<76210(6(:(:(:(:(:(9&7&:+;/>3?7=8;896876666667484:3:3<3:2;2<5=7=:><=;>=@?1;=28;0;?18A.>K1Pb8770;.?+C*A(;*7(8)9*9*9*9*8)8)9)9)9)9)9)9);,?1=/<)9$65;"A*B.@/;,7*2(4+;0=85:3<6=8>:>;>:=9<587:9>=>=>962/0'9+>*>*>*=)<(:'8%6%7);0=3<5<7;8;787757585:4;4<4=4>5?7A:A;A>A?@=B??:@8=38-5(5'8(<*<(<)<(:&9'7%6$6%}:)t3!~9*OAYNRGOEVJYN[MZM[M\Q_T`WgW~xXy^r|ZU`B;E,/;%0;*0<.3=24<16<2?1:<17:/:>07@-=J0Oa;bxIkLuQuQtNqNrSpRrQsPrOpKnJpLsOvRyX{Zz]x]qWgO]EXB`NYISzCg^Og^Og^Og^Og^Og^Og^Og^Og^Og^Og^Oh_Ph_Ph_Ph_Pi`OjaPjbOjbOjbOi`Oi`OiaNiaNiaNh`Kh`Kh`Ih`IhaGhaGhaGf_Le^Kb[I\WDWR?PM:LI8IH6IH6GH6GJ9GK:HL;IM;A@CAEBC@A??1266:<=;;9714.4)<->+>+@,>+>(;':'7%7'8+8.7094=9>;:79595:4;4;4=4>4B7C9C9<3:/8+6(7'8):):(=)<*<):'9(7&6%}6$x3#x5%B2UEWKPCPDZLYMZN\Q\Q[T\U[VbUkbEV`=JS4=G,6?*2=,4>35?66=68?8=B;CF=EG/;9*78*=>0:<17:/:>06?,=J0N`:awHkLuQuQtNrOrSpPqOrNqMpLoKrNuTyX`~az]qUfL_G]E^IbPYISzCh_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Pg^Oh_Ph_Ph_Ph_Ph_Pi`Qi`QmdUlcTjaRi`Qh_Pg^Og^Mh`MiaNiaLiaLiaLh`Ih`IhaGh`IgaKf_Le^Kb[H\WDUR?PMSQDSPAXLYSRODE::75;3>/=)8":)8'9(;*;*;*;*;*:):):):):):):);,;0:.<,>+9#37?'9#;)>0<18.7/<5?==B?DCEDC@?;7501./,51:6<6:28.8,:+=->+?,@-@-A+>*=*;*:(7(5)5+90?9C>=7;5;5<4<5=4>5@5D9D:C;A9?:;685937-8(5'6':)<*:)8&=*<+<*<)~:'|8%{6&{6&y1#8*G8SCPBL=RE_SWLYN[R]T]V\VYT^QaX;EM(6@8A&>G26BE*;:&78(=>09;069.:>06?,F7GK=IK=AE4KJ6\Q;aE/J9j]g`USFEA@A=>5=0=-4%5&6'7(7(8);,=.<-<-<-<-;,;,;,<-2(7.;/:)7"579"A-;+6)4*6/<7C?HEDEEHCC:661808.4+9/9.8.8-9,:+<+<+=+=*>+?,@-A,A-@-;*:(7(6)6+8-;3<4=6=6?8A7A9B6@6@5H=E;A8;25/3-1*2+9-;*9+:*:););+<+9'}8(|9(|9(|9({8'y6&x3$w- A4OCMAL@QEUJRG\R\RUMTLZUXSWTgZ]T5IQ*AK(BK,>H/7@+2=-4?14<1HPCZ^PW[JMO:DF.AA'==%:;)>?1;=2:=2;?14=*;H.PbF7>F7=E6@F8>E5>F1HL5MI0U?'Q:sbcX_ZUTGG@>A=?9:09+=,=.>-;-;+9+:*:,:+:,:+:,:+:,;.?5B:B7=/6#1125#6(;/A8E?IDJFKHCAEDB><39/=0?1=0?1>2>0>/=/>.@.?,=*;*<+=,?+>+>,>,@.=-:,8,8+8-:09/<2<2?5A7C9C9D9E8B6A4=3:06/5.4,7,:.=,;,;+:*;*<*<,~;*|;){9)y:)x9(w8'u6'w4$4'D7NCK?J>QDTIRGSJXOUOVP]XWRSOcT]W5Xc9_jBZfBIT66C)4@*0:<19<1<@25>+;H.PbMKD63?3A4A3A4;,:,8-7+6+6,7.:/;/<,;-;,:+;+;+<,};+z;*z;,w9*v8)u7(t6)v4&;1FEI0?C(=@#:<$89';<.8:/9<1=A36?,MK4>4>4>4?5?5?5>7?;B>D>F=FM@PDSHPGMGIEGBC?A=B=FBD??7=0>.C0G3I6F4E3C3B1A0}@.zA.|?-:,8,9+:,:,;-;+;+:+:)8)8*9,;/=/<0:/8.9/:.:.:,9+8*7)7(6)6*7+8-9/<0<.<-;,9*:*~9*}:*};+|:,z;,y;,w9*s8*q6(r7)u5)D8H=K?H:IB)=A(;='78(:;-79.9<1=A37@-NKB1=I1?G/LG1S>+g=-ZL_S>43+?9XUigdeRUJNNPIAF<@6>4@6D:G=G>JAJAJBJBKCKCKDKESRTTSRROSLSLULUNLHIFEBC@B@C@EBFDJFE@>7=2?2B1E3G4E3C3B3@0?1~?0z?/|>/:.9.9.9.;-;-;-;-9*9*9+:*:+;-<.;/;/9-9-:,9,8+8*8*8)8)8(8)9*:,:-;-:-:,9+8*}8)}7+|8+{9+z8,y9-x:-v8+q5*o5)q7+t9+H;IC-B47@-;H.L^8_uFiJtPtPtNrOsTpQnMmLpPwY|az`rXiQZA\EaIeMgMgKhJfLcPY{IRtBi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkaUlbYlbYlbYlbVlbVlcRlcRldQldQldQlcRlcTlbVlbXlbXlbXocUnbRkbQlcRlcRkbQg`Pd]M^WGYSCSM?MJ;KH9GE6EB3?B/;H.?H-OC-a=-E:XRNJ,+:9=;SRpnvvehX^^_UQPFG@C:D=G>GAG?HCJBHDJCJFKDKGKGHHGIHHGGHDHDGBFBBAABBABBCBB@A>A?JGC?<6>3@3A0A0C3A2@1?1=1<0<1=1=1;1;1:3;1;1.9)9(:*:+;,;+;,:+:,9+7)~6({5){5){5)z6)x6*x8,w9,s8*p4)o5)r:-v<0M@KN)?O(J\2_rEk~QexKXj@M_7@Q-6E&7D*=F1=D4:>07;-8:,:;-68-8;0>B47@-9F,I[5[qBeFrNsOsMrOsTpQmLoOsUx\z`s[iQ`HYB^GeMgMfJeGgGhLaNXzHQsAi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkbSlbXlbVlbVlcRlcRldOldOldMldMldMldOldQlcRlcTlbVlbVocUmaSkbSlcTmdUlcTi`Qf_Ob[K^WGXQARLB>@9C?C=C@D?CAD@ECDCADADDFGHIHJIIIGHACADBEBEAA@>=:=:FF=<83;2@4?1>0@1G]/AV-7H$1@!6B*=F5PK8MH5ID1DC.@F*DD([B,TG\X>A/3IN?E;>;FBFBB>>7D=D=D@EAEBECDEDF?C@DBEEEGGFFBC>?BD@C>A=>>>A?C@ECBB9850;4?6>3=/?2)=C5?>@=@=C?B?>:9370:0=2>3>2?2?3=2;393938192;0<.<.;-;/:.:.:.~:-~:-~:-~:-};/};/};/};/}90}90~80~8.7.7.7.~8,8,~8,}9,|8-{9-z8,x8,x8,x8.x8.w7-v8-v6,t6+s5*q5+m1'r6,n4)m3(o6+m4)q8-I=SHSJRGRHPHQJQKRLTMTK[NcQo_HYU:MV7O_;j~YbxQYoHUjCRg@Mb;IY5CR17D&4>#2:#6;'<>0@B5@@6<>358-39-4:.7:/9=/;?.=B,%Q?)kP=XGNBE=D?WVTTQQPONMMMLJKJTTHG=>=:B@EAB;>4D9E9F=G>FBDDAEAEBFCDCDDEDCFDFDFDEAD@B?A>A=A=A=C?E?C<>6:090:/<0<0A2~@3~>4<3:3918190;.<-;,;,;-:,:,:,9-9-9-9-~:/~:/~:/~:/}90}90}90}90}90}90|90|90|90z:0z:0y9/y9/y9/w9.w9.w8/w8/t8.s7-r6,r6,p6+p6+k1&q7,m4)l3(o6+l3(p7,~H>RISLQJPJQLPMQNSOOGSH[K{ePsiPhkLfqQgxT^tMXnGPf?La:K_:K\:GV7CP4>2;=04:03;05;16<0:A,>D*Q[9^mDkRpRpSqRsSsVx^|exakT`I]F]F\E`IaJcLeNdMbK`I^I]LRtBIk9i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTnbTqdTo_Pm]Pm_RqeYog\ldYhbVfbWpl`{xi~{jyizubpiVe`JTT(MB.S@/U8(]7*l=3n70u91~;5@:IBPJXPZR^YSNGEB?DBFCD@@:A;CG@GCFFEFDFCDCDCDCDDEEEECECDBDBD?C>C=C=C=C>E@E?B<>5:18-9,;-@2@1~>2=1:19181:0;.;,;,;,:,:,:.:.9-9-~:/~:/~:/~:/~:/~:/}90}90}90}90|90{8/{8/{8/{;1{;1z:0y;0x:/x:/x:/x:/t8.t8.s7-s7-r6,q5+o5*o5*j1&o6+m4)k2'l6*i3'm7+}G=PIPIPJQLRMSNUPVPWO[P~^OtbNoiQorUlwYfwUQeBK_:EY6DU3EV6GV9GT8ER8?I0*7;*:<.<>0;=/9;.6<25=26<26<0:0=@-=C)MW5Zi@f|MlNnQqRuUtWz`w`nWcL\E\E\EZC_HaJbKdMcLaJ_H]H[}JPr@Gi7i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTnbTrdWoaTm_Rk_SkaWlcZle[jf]jf]xtix~r}zg`cNOT>DG2FE1HC0F=,L<,VC4P9+R6*V4*Y5)\6+a9/e=1m=1KBSJUONKFDABDCFF@>A?B>E@ECFDEDEDDDCDCDDDDDEDEBFCFBEAD>E>DDA8;18,9+<-@0@1~?0=/:1:/9/:.:-;,;,:+:,:,9-9-9-9-~:/~:/~:/~:/~:/~:/}90|90}90{8/{8/{8/{8/x8.{;1y;0y;0y;0x:/x:/x:/v:/s7-s7-s7-r6,q5+o5*o5*m4)j1&o6+l3(h2&k5)h2&l6*|FG2:A/9=,9=.9=.8<-7;-7=36=56;46<2:<1;=/bxIjLnQsTwWxZ{ar[eN\EZC\E\EZC_H`IaJbKaJ`I^G]HY{HNp>Eg5haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTrfXth\sg[mcYjaXle]snhzwp~wz{kcfSOR?GJ7EH5BE2BE2EH5KL0A9,A7+@6*F4(S5*qB8PHPKIGGIEIBE@B@BBACBEAEADADADDDFDFDFDDEDEDDCFBFAF>E=E=F=E=F>A:C;E=B9>39-;..=-;/:-:-;.:-;-:,:,:,9+9-9-~:/~:/~:/~:/}:1}:1}:1}:1|91z:1|91y90y90x8/x8/v7.y:1y:1x90v:0v:0u9/u9/t:/r7/q6.q6.p5-o4,n3+n3+m4+j1(m7-j4*h2(j4*f2'j6+}D;NGNHQJTLUOWPYR[Q{YMv\OkZJ]UBYXDY^HOYA?K3:H/7E.4B+5A+8D.=I3CL7EN9BK6?H5.5<,4:,5<45<56;56;49;0:-;@)GP1Ra:`vGiKoRuVyYy[x`nW`IZ}C[~D^G^G]F`IaJbKbKaJ`I_H^IW|ILp@Bf6haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTkaUndZpf\lcZkd\rmg|ľrfcTPQ?FI8>E3;D1:F28E38E38C2:B34(P:/e?6EAPOX[QVCIFJEFFFEDEBDBD?CADDDFDFDFDCDCDCDCEAFAF@F=E/?/>.=-<-;-:-;.:,:,:,:,9+:+9-~8,~:/~:/~:/~:/}:1}:1}:1}:1z:1z:1y90y90x8/v7.v7.t8.w8/u9/u9/s9.t8.s9.r8-r8-q6.q6.p5-o4,n3+m4+l3*j4*h2(l6,i3)f2'h4)e1&i5*{B9MGMHPJTLVOXNYO|\Qs\Nk[L`WFVSBPSBJQ?@I64@,3<+2;*09(09(2;*5>-9B1G4:F2:C25@/3>-1<,3:33954954928919;.;>-;@*CL/O^7]sDiMpSwYyYwYqYfOZ}CX{A\E]F]F^G`I`I`I`I`I_H^G]JV{HJn@Ae7haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlbVj`VjaXkdZkg^upjμzym]_YIKL:@E1;D/>J6=H7=F5;C4;>5:;3983880==3C<2N71a84HH]_`dWZQSNOMKKJHGFDDABBCDDFDFCECEBDBBCBDCD@D?F?E.>-=,<,;,;,<-:,:,:,9+9-9-~8.}9.~:/~:/}:1}:1}:1}:1}:1}:1z:1y:1x90x90w8/t8.s7-r8-t8.s9.r8-q8-r8-p7,p7,p7,o6-o6-n5,n5,m4+l3*k2)i3)g1'k7,h4)e1&h4)b0%f4)zA8MGMHPJULXNYOxZOr\Nk^N^WGRPAKN=CJ:9B12:+08)17+17-06,/5+/5)08+2:+4<-9D4;F5=H7-.800621622717829;0:<.:?)?H+KY5[qChLqVw[wYsVgP^IUx@WzB[~F[~F[~F]H_J_J_J_J^I^I]H]JUvIJk@@a6haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlbVpg^ng_lgatqj}ub^\GKM7CH2AI2AI4@G5BD7AA7B=9C97?:69<5>?7B71J.+d66QRginm\\ZWVSQNLKHHCDBCCFDFDFCECEBDBBBBDCCBC?D>E>FD69A208+/7*6<247058157247025.06,08-19,6A3:E5=J9>K9-,6..400511606718:/:<.:?+WzB[~FY|DY|D\G_J_J^I^I^I]H]H]LStIHhA?]7icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSjcSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUldWibZgd]vsnʵƶibbFEH-DH/CG0FE1GD5F<3C60F42H:9>=9>?:B:7I75cGFjjœ譩ҋtn]XSPONJLFKFKEGIKDF;>>@GIDG:=@@@@A@B>C>BA9@9A9B8@5:.8*=0>/>.>-=,<+=*<,:+9-9-~8,~8.|8-|8-|8-|90|90|90|90z:1z:1z:1z:1y=5w<4w;3u:2t91q8/p7.p7.o6-m7-m7-l8-m7-l8-m7-m7-i2+m6/p92o81k4-g2*g2*h3+e0(i7.d2)]-#`0&_/%b2(s>6OJPKQJRJ}YMv_QfYITN>DE5>E5:C25@04&DR1WlChRs]w_rWkR[~DXyDTu@Tu@WxCZ{F[|GZ{F^JbNbN^J\}H_K`L^~MTsJFd@2I:3L95K<9?:7BA?MHE]RPyjgβſ쳪͂|c^VVRSHMADDEEEHHJKEF<><>AC????A@A@B>B=A<@9A<@;@9B:C;A6;18-=0>/>.>-=,<+<,<,:+9-9-~8,}9.|8-|8-|8-|90|90|90|90z:1{;2{;2z;2w<4u<3u:2s:1r90n8.o6-m7-m7-l8-l8-l8-l8-j8-l8-l8-k6.n70o81n91l7/i4,g2*e3*c1(d4*_/%^.$b2(^.$`0&p>5JERLXR~XOrVKdRDQJ:>?/:A16A05@03>04<14<15;17:379477577557246116//6./7,.9+1<.4A08E49H58G44E24B1.8/.5..3--2+23+46+8:-9=,7?(DQ3WlEhUt`wbpYgPY|DWxCTu@Tu@VwBYzEYzEYzE[|G_K_K\}H[|G^J^J^{MSnKF_A9R4icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUneVneVlfZed_y{xشğl`gEQX7DG,DC.JD4LD7KA8I>:C;9SJKia_wvecBEDIRVUTMKDACAFEEFDDCD=?>@@?@?B@B?B=A:@:@:B:E/>.=-~<,=-=-9-9-~:/}9.}9.|8-{8/{8/}:1}:1{;2{;2{;2{;2z;4x<4t;2q;1r90o9/n8.l8-l6,k7,l8-j8-j8-j8-j8-i9-j8-j8-n91m80m80m80m80i7.f4+c1(d2)a1']-#_0&c4*\-#_0&sD<}PJVP~YQpTI^J?OC7?<-46(2;*0;+1<.2=/4<14<15;17:379479668357257227007/08-.9+0;-2?.6C27E48G48G49F54>33:2/4-,2(/0(13(57*6:)6>'DQ5YmJkZwfwflZ_KWxCWuCTr@Tr@VtBXvDYwEYwEZxF]{I_}K]{I]{I_}K^|JZwKPgJAW@3I2icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUneVneVneVneVmg[jkfڴefmLMQ6FH0HJ5KI:HD9D@7OGDj`_収cd@?PKTMPHF@GBMJKH@?>>???>A?A?B?B=B=>9@:C=E?E>A9=5;2<1=0>/>.=/~<,=-=-9-9-~:/}9.}9.|8-{8/{8/~;2~;2|<3{;2{;2{;2z;4x<4r90o9/o9/m9.l8-k7,j6+h6+i7,i7,i7,h8,h8,h8,h8,h8,m;2l7/j5-i7.j8/j8/f4+a1'e5+a2(].$a2(b3)Y* a2(yNE\VvWRiNGWC:I<3@:.:;-8<.08)/:*3;.4@?A@C?C?C?C=?;A@9>5=3<1<2=1=0=1~<.=/=/~:/~:/~:/}9.|90{8/{8/{8/|<3|<3|<3{;2z;4y:3y:3w;3n70m80l7/l7/k6.h6-h6-h6-i7.h8.h8.g8.g8.g8.g8.h8.k92h6/f4-g5.i70h70e4-b1*c2+b3+_0(]1(]1(V*!b6-{ULtYRaNHN?8A7.=6,;9-9;.9<139-3;.5;/6<06<07:/58-47.69049238139/39/2:/19.19,.9+.9+/:,0;-3>.6C2:E5Qn>Qn>Qn>Qn>Qn>Sp@Sp@WtD[xH]zJ]zJ_|L_|LZwGRlECU?6D7(6)gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUneVneVofWpgXpgXng]lnmz׹ĥregOMP;GK:FM=GOBKQG{{sžؓeSJ:TFWIF;@8KEC>C?B?C@C>C>D>B=B6<5/95,;8/8:/57,36+69.5;/7:/69.69.58-57,36+28,19,28.19,19.19,19,19,.9+.9+.9+/:,0;+3>.6A17B2ex\umtlf_RwKBh9KkVsCZwG]zJ^{K_|L_|LVsCNg@D=CUrDYvH[xJ]zL^{M\yKQn@G_;6B4+4/#)%gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSjcSjbUlbVlbVmcWmdUmdUmdUleUmfVngWogZnh\oh^mjekormtzη|ubb_NXZL]cWmwn|}̻pQDSFSHC:J@H@G>F>E=DG>G>C;>5:2:3>6=5=4=5=4<3;0;1;1~:/~:/~:1}90|90{8/{8/{8/z:1z:1x92w81v70u6/u6/q6.m80k90j8/j8/i9/i9/i9/h8.g7-f7-g7-f7-f7-f7-f7-f7-f5.j81m;4k:3j92j:0m>4oC8l@5oD;d<2c=2zVJdZyWMbLA>:13814927<54:0/5+25,9<336+25*24)03(13(25*46+47,.6),7)/7*-8*/7*/7*/7*/7*19,08+08-/7,/7,/7,08-08+7?09B14*00!''heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdVjdVjdXldYlcZmeZmeXmfVg`NjeRnkXol]he\feasqrԶ|qtY_dMbkXr}lا`XD=NEMCF3<2:1919191~:1|91{80z7/z7/w7.v6-w7.w7.w8/w8/v7.u6-q5+n3+l7/i81i81h70h70g6/g6/g6/f5.g6/i70i81h70g6/e4-e3,h3-j5/m80k90j:0i;.i=0kA3gB2jI:dH:v_O~k\xjoRJ=79.4:04:039/39/39/28.28.17-17-36-06,25,/5+14+/5+/4-.5-/4-.5-/4-/4-/4-/4-05./4-/4-.3,.3,/4-/4-/6.1;23=26@58B79D67B45@03>-4?.DQ=WeN[kQPbHEX<@T8BW6Ic>Ke>Kf=Kf=JeOj?UpGYtK\vO]wP]wRWqNHb?;O6&1+&+.$),heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVidQjhSmjWjk[gg_lll~ЯvkqUYaI_kUto~uKAM@K>L@K>E9=4?6E9F7J7L:J7F6C2C6E7C7B8A7>5<4:39193~92}:2z:1z:1y90x8/v7.v7.u6-v7.t8.t8.t8.r6,o5*m4+l7/i81j81h70i70h70g6/g6/e3,e3,g5.h6/j81j81j81k92k60l71k90k;1k;/j>1j@0iD2gH6kP=gRAufSuesrKL<69.39/39/39/28.28.28.17-17-17-17-06,06,/5+/5+/5+/4./4./4./4./4./4./4./4.05//4..3-.3-.3-.3-/4./6/.80/:21=34@66B66B66B45B16C1CP>P]IR`IIW@AO6BP7EU:Jb@Jd?Ke@Ke>Ic6I5&1-',0$)-heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVmhUkiTmjWjk[kkcwwwۿʫyuy`kpZt{i؞L=RBL;@1G;YMUJ@4D7H:K=I;B7?3@7E;@9A9A8?6~>5}=4<4}=4z;4x<4w;3w;3u:2t91t91t91r90r90r90r90o9/n8.l6,k5+l7/j81l71j81k60i70i70h6/g5.g5.f5.g6/h70i81k:3k:3l;4j;3i:0h<1k?2jC4iD2fE2fI7lVAjYGujVm{mEF658-28.28.28.17-17-17-06,17-17-17-06,06,/5+/5+/5+/4./4./4./4./4./4./4./4./4./4..3--2,-2,.3-/4..5.+5-+6.-9//;12>24@46B47D38E3?L:ER>CQ:;I28F->L3DT9J_@Jb@LdBKc?Ia=G`9F_8G`9RkDXpL]uS^vVZqTPgK=T8.A.&1-',0%*.heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVniVljUlkWlm]pqiؼǫ}ſñpP@O?XJM?E9G4e=1f>2hC3iE5fG3cG2cJ6hV@i\IskVozpq_9=,47,28.17-17-17-06,06,06,17-17-17-06,06,/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3-.3-.3--2,-2,-2,-2,.3--4-*4,)4,*6,+7-.:.1=14@25A36C2:G5N4DX@7C;F?D=>;:7:8>;=;?<@=}@=xA6s>6r=5r=5r=5p>5o=4n>4m=3l<2k;1j;1i:0i:0j:0n72p62p62m61m61l71i70i70l;4k:3h91e90e90e90e:1d<2fB6cA5cC4dD5dG5dI6bI3_I2^L6eV?jbMrmWor[`L3:(28,28.17-17-17-06,06,06,17-17-17-06,06,/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3--2,-2,,1+,1+,1+,1+-2,,3,,6.+5-*4+*4++5,.8-0;-2=/2=-5@/6A05A-1=)1=)5A-8F/=O5@T8FY=H\@J]?I^=K^>K`?TgG[pQcvZauZYkSJ]G6G4&4%$-*$),"'*heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZlfVjgTkjUlnYorasvmθκƶøͧkX[GWEL;D:DE?A>=::9;9=5o?5o?5o@6n?5m>4k<2h<1h<1h<1l<2o83q62p62p62m61l71j81i81h70g80e90e:1d<2e?4f@5dB6^B4aG8cL:dM;cM8`K6]K3]M4]Q9bX?mhRss[nv{eFO:4=*39-28.28.28.17-17-17-06,17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,-2,,1++0*+0*+0*+0*,1+,3,.5.,6.*4+*4+*4++5,-7,.9+-8*0;+4?/5@/4?.3?+3>-3@,7F/9K3@O8BT:GWJ=I>I@G@D>=::7=9>:?9A:xA:tD:pF:pE5j>5n=6o83r73p62p62n72l71j81i81d8/d90c;1d>3d@4cA5cA5_C5ZE4_NnlUtv^|kcmU2>(6B.3;.39/39/39/28.28.28.17-17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,,1+,1++0**/)*/)+0*,1++2+-4-+5-*4,*4,+5,+5,,6+-7,,6+/:,2=/6A17B27B15@04?.2?-4C.:G3=L5AO8DT:JX?L\BTbI\kTcqZ^mXUbPDRA2>0#/%&/,&,,$**heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdVjdVjcYkdZlc\md[lfZlfVolYmlWjlWgkZflbr{x׭oYWDQ@O>OAOBK@C<<5>7?6?8A7{B7uD6qE8qE8p?8q?8s>8q?8q?8q?8q?8p?8sB;qB:o@8m>6l=5j>5m>6o>7o83q73o83m82m82i81h91f:1f;2d>3d@4bB5`C5]A3\@2WB1TG4[S>f^Gi^HbX?ZS9ZS7\W:ZV;XW;kmUsw^u}fUaI&28D03;.4:04:039/39/39/28.28.17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,,1++0*+0**/)*/)+0*+0*,1++2+)3+*4,+5-+5,,6--7.-7,,6+.8-2<16A39D69D47B46A10;+2?-5B09F22=/x=/t?/sB3tD6r=5r=7t=8s>8u@:u@:t?9q?8sA:q@9q@9q@9p?8n?7o>7o>7k92m82l:3l;4l;4h<3g<3c=2c?3^>1dG9cG9T=-N9(M8'@1WQ;PN7KI0OK2]Y>ieJeaDVU7XX<]`CosZzfdlU=I1-9#2>*4-1=)2>*9E/BN8IU?O[GVbN]hWYdTLWI/u@8s>8u>9u@:t?9o=6p>7sA:q?8p?8p?8n?7o>7m>6n=6m>6k<4l=5m>6k?6j?6gA6eA5bB5dG9[A2^G7^I8N=+F7$G8%>6!LL4GK2DG,DD*MM1\[?baC`aBYY=dgJsw^sy_X`I:D,/;%7C/6>16<26<26<25;15;15;15;15;15;15;14:04:039/39/39/27127127116016016005/05/.3-.3--2,-2,,1+,1++0*+0**1**1*)0))0))0)*1*+2*,3+.5--4,.5-07/4;39A6?F>BJ?;F8:E57B14?.3?+6B.)r>)s@+tD0vE4q?4n<3q<4tB9sA8o?5qA7xH>n>4m>4m>4k?4l=3j>3l=3j>3g?5gA6gA6gC7eC7cC6`C5^D5bK;UB1ZI7`S@RG3C;&E=(FA+AE,BH.AE*<@%?B%NN2_`AijKaaEnqTvzagmSJO94<%4=(=F38>28>48>48>47=37=37=36<28>48>47=37=37=36<26<26<25:449349349338238238227105/05//4..3--2,,1++0*+0*).().().().().(*/)+0*,1+160/4.,1+,1+/4.6;4=BK:4.8/-4--4-,3,gdUgdUheVheVheVheVifWifWifWifWifWifWifWifWifWifWkeWkeWlcZmd[md]mf\mg[jiWkmXimVjoYjs`hthm|wڻּҽz{R>tJ4uH3vI4zM8}P;yL7nA.e7'{M@sD:qB8sD:oC8g;0d8-g=1i?3i?3i?3g?3f>2f>2f>2e?2b@4bB5`C5_C5_C5[D4ZE4WD3XI6OB/\T?oiSc^HMK4IG0IK3>D*?H-@F*48>47=37=37=39?58>48>48>48>48>48>48>47<67<67<66;56;56;55:45:438238216005//4.-2,,1+,1++0*+0**/)*/)+0*,1+-2,-2,05/.3-+0*+0*-2.2718=9;B:@K=@M;@M;=J68E13@,1?(0>'4.:0,6..5.-4-gdUgdUgdUheVheVifWifWifWifWifWifWifWifWifWifWifWkeWldWlcZmd[md]mf\mg[jiWkmXinWiqZgs_drejytܿչйѾϴuawVCjI6lI6rM;uP>mF7iB3gB2jE5nI9nJ:oK;oK;eA1cB1cB1cB1cB1cB1bC1`C3]F6\G6\G6ZG6ZG6WH5TG4RG3PH3NH2fdM~~frrZVX@JL4GM3A.:>-;>39?59?58>48>47=37=37=38>48>48>48>48>48>48>48>49>89>89>88=78=78=77<67<66;55:449338227105//4./4.-2.-2.,1-+0,+0,,1--2.-2.,1-,1-,1-,1-.210513764;4;G9=L9@O<@O:8F71?2-9-,6--4,,3+fcTfcTgdUheVheVifWjgXjgXifWifWifWifWifWifWifWifWldWldWlcZmd[md]mf\mg[jiWkmXinWiqZgs_bpcgxrڽѵ˴˺ҿһsrb|]K}^LtUCaD2W:(Y<*[>,X=*`E2`E2`E2_F2`G3`G3`G3]H3\K7\M:\M:YL9XM9UM8RL6QL6NL5QQ9ikS|gmqXSY?FL2>G,48>48>48>47=37=38>48>48>48>49?59?5:?9:?9:?9:?99>89>89>88=78=78=77<66;55:4493382382/40.3/-2.,1-+0,+0,+0,+0,+0,,1--10.21/32/32/32-4-3?17F3=L7@O:?N7M:MJ9BC3=@5;A7;A7;A7:@6:@6:@69?58>48>48>49?59?5:@6:@6:@6;@:;@:;@::?9:?99>89>89>8:?9:?99>89>88=78=77<67<6495273162/40-2.,1-+/.+/.,0/,0/-10.21.23.23-12+1-+9*/@-6H2;M7=O7A6>A6>A6=@7=@79?59?59?5:@6:@6:B7:B7:B7;@9;@9;@::?8:?99>79>89>7;@:;@9;@:;@9:?9:?8:?9:?98?87=94;4382160/4..3/.3/.21.21,2.,2.+2++2*,4))6%$6)=!2F+8L1;O6;M5;M5;M58J29K3;M5H&DK*FM+EL*PV4PT3KN/HK,TT8bbFccIZZ@[Y@\ZA][B][B[Y@XV=US:SQ8HF1GD1DA0A?0@>1>>2??5>@5;>59?59?59A69A48C58C58C5:B79A69@88@58?79A69@8:B7:A9:B79@8:B7;B:E=8B:8B:7A88@56>14O<>P::L6@R8EW=FY=DX=@T;5H2+<),6+,3++2*ZgM[hN\hP]iQbjSckTglXhkXghVghVifWifWkeWlfXmeZmgYmgYkhYkg[kg\jf]jf[hfZefVhiWglVfo\erajwnz˹ʿNjlRM0SN0QK+QK+UO/UO/TO1TO1SO2SO2QP4QP4QM2PO3PN5NQ6MO7JP6HM6EM5HQ6EN1BK.?I'BI(FM+JP,KQ-NR/PT1VZ7^bA_bCY\?TWWU>XV=YW>XV=XW;WV:XT9QK3OI3LG4ID1DA2B@3A?3>@5<=59?59?59A67B48C57D37D3:B79A69A68@58@59A69A6:B7:B7:B7:B7:B7;C874>63=40>-3C)9M*BY/Ga1Op;Ln;Li=Fa>BY?F;J@?I>>I9?G8>F7>D8=B;>E>9C;6@74B19I/BV3Pg=XrB^J[}JXuIMhECZ@9O:6G54E2XR6:@6:@69A67B47B46C26C2;C8:B79A69A69A69A6:B7;C8;C8:B7:B7;C8;C8=E:>F;=G<=G?>H=>I9?G8>F7>D8=B;=D=9C;6@74B19I/DX5Ri?[uEZ{FWyFTqEIdA=T:2H3/@.->+6H2@R8L_CReGSgKOcG@W=6I30:/07/-4,YgMZhN\hP^jRblTemVinZjo[mn\lm[mk\mj[nhZnhZoi]oi[liZkhYjfZieZie\ieZig[ghXghVchRajWerao|s{ѿɶıþʾŸ̌oRL2TO2TM0UN1TN.UO/VQ3VQ3UQ4SO2ON2NM1PL1NM1NL3KN3LN6KQ7KP9JR:LU:IR5JS6OY7SZ9T[9]c?fnGcszpr{\\bFLP7KM5LK6KI4LJ5PK5TN8VP:WQ;VP:SN;QL9LI:IG:GE9CE:=>6:@6:@69A67B47B46C26C2;C8;C8:B79A69A6:B7;C8;C8;C8;C8;C8;C8F;=G<=G?=G<=H8>F7=E6=C7=B;:A:7A95?64B19I/BV3Ne;Uo?Tu@RtAPmAE`=9P6-C.+<*+<)1C-