From 02d1d62827cef86398edc2013f7d2ff04bf21c63 Mon Sep 17 00:00:00 2001 From: Arnar Mar Hrafnkelsson Date: Sun, 25 Mar 2001 11:54:59 +0000 Subject: [PATCH 1/1] Initial revision --- Changes | 404 +++++++ Imager.pm | 2270 ++++++++++++++++++++++++++++++++++++++ Imager.xs | 1813 ++++++++++++++++++++++++++++++ MANIFEST | 95 ++ Makefile.PL | 371 +++++++ README | 217 ++++ bench/benchform.perl | 34 + bench/kscdisplay.png | Bin 0 -> 587774 bytes bench/makegrad.perl | 41 + bench/quantbench.perl | 105 ++ bench/quantone.perl | 90 ++ bigtest.perl | 113 ++ conv.c | 68 ++ datatypes.c | 255 +++++ datatypes.h | 122 ++ doco.perl | 76 ++ draw.c | 859 +++++++++++++++ draw.h | 24 + dynaload.c | 301 +++++ dynaload.h | 73 ++ dynfilt/Makefile.PL | 92 ++ dynfilt/compile.txt | 2 + dynfilt/dt2.c | 54 + dynfilt/dyntest.c | 73 ++ dynfilt/flines.c | 72 ++ dynfilt/mandelbrot.c | 103 ++ dynfilt/pluginst.h | 17 + errep.perl | 96 ++ ext.h | 18 + feat.c | 10 + feat.h | 25 + filterlist.perl | 12 + filters.c | 951 ++++++++++++++++ font.c | 1176 ++++++++++++++++++++ fontfiles/dcr10.afm | 751 +++++++++++++ fontfiles/dcr10.pfb | Bin 0 -> 40627 bytes fontfiles/dodge.ttf | Bin 0 -> 11032 bytes gaussian.c | 71 ++ gif.c | 839 ++++++++++++++ image.c | 1153 +++++++++++++++++++ image.h | 445 ++++++++ imio.h | 48 + io.c | 246 +++++ iolayer.c | 846 ++++++++++++++ iolayer.h | 148 +++ jpeg.c | 715 ++++++++++++ lib/Imager/Color.pm | 107 ++ lib/Imager/Expr.pm | 624 +++++++++++ lib/Imager/Expr/Assem.pm | 277 +++++ lib/Imager/Font.pm | 315 ++++++ lib/Imager/Regops.pm | 426 +++++++ lib/Imager/Transform.pm | 519 +++++++++ lib/Imager/regmach.pod | 103 ++ log.c | 95 ++ log.h | 26 + plug.h | 38 + png.c | 484 ++++++++ pnm.c | 417 +++++++ ppport.h | 286 +++++ quant.c | 1416 ++++++++++++++++++++++++ raw.c | 98 ++ regmach.c | 394 +++++++ regmach.h | 83 ++ regops.perl | 88 ++ spot.perl | 45 + stackmach.c | 49 + stackmach.h | 25 + t/t00basic.t | 28 + t/t10formats.t | 362 ++++++ t/t15color.t | 30 + t/t30t1font.t | 86 ++ t/t35ttfont.t | 71 ++ t/t36oofont.t | 96 ++ t/t40scale.t | 36 + t/t50basicoo.t | 50 + t/t55trans.t | 53 + t/t56postfix.t | 28 + t/t57infix.t | 43 + t/t58trans2.t | 55 + t/t59assem.t | 38 + t/t60dyntest.t | 29 + t/t65crop.t | 33 + t/t66paste.t | 28 + t/t70newgif.t | 40 + t/t75polyaa.t | 60 + t/t90cc.t | 27 + testimg/penguin-base.ppm | 1005 +++++++++++++++++ testimg/scale.gif | Bin 0 -> 4288 bytes testimg/scale.ppm | 58 + testimg/scalei.gif | Bin 0 -> 4314 bytes tiff.c | 346 ++++++ trans2.c | 42 + transbench.perl | 27 + transform.perl | 100 ++ typemap | 22 + 95 files changed, 24002 insertions(+) create mode 100644 Changes create mode 100644 Imager.pm create mode 100644 Imager.xs create mode 100644 MANIFEST create mode 100644 Makefile.PL create mode 100644 README create mode 100644 bench/benchform.perl create mode 100644 bench/kscdisplay.png create mode 100644 bench/makegrad.perl create mode 100644 bench/quantbench.perl create mode 100644 bench/quantone.perl create mode 100644 bigtest.perl create mode 100644 conv.c create mode 100644 datatypes.c create mode 100644 datatypes.h create mode 100755 doco.perl create mode 100644 draw.c create mode 100644 draw.h create mode 100644 dynaload.c create mode 100644 dynaload.h create mode 100644 dynfilt/Makefile.PL create mode 100644 dynfilt/compile.txt create mode 100644 dynfilt/dt2.c create mode 100644 dynfilt/dyntest.c create mode 100644 dynfilt/flines.c create mode 100644 dynfilt/mandelbrot.c create mode 100644 dynfilt/pluginst.h create mode 100644 errep.perl create mode 100644 ext.h create mode 100644 feat.c create mode 100644 feat.h create mode 100755 filterlist.perl create mode 100644 filters.c create mode 100644 font.c create mode 100644 fontfiles/dcr10.afm create mode 100644 fontfiles/dcr10.pfb create mode 100644 fontfiles/dodge.ttf create mode 100644 gaussian.c create mode 100644 gif.c create mode 100644 image.c create mode 100644 image.h create mode 100644 imio.h create mode 100644 io.c create mode 100644 iolayer.c create mode 100644 iolayer.h create mode 100644 jpeg.c create mode 100644 lib/Imager/Color.pm create mode 100644 lib/Imager/Expr.pm create mode 100644 lib/Imager/Expr/Assem.pm create mode 100644 lib/Imager/Font.pm create mode 100644 lib/Imager/Regops.pm create mode 100644 lib/Imager/Transform.pm create mode 100644 lib/Imager/regmach.pod create mode 100644 log.c create mode 100644 log.h create mode 100644 plug.h create mode 100644 png.c create mode 100644 pnm.c create mode 100644 ppport.h create mode 100644 quant.c create mode 100644 raw.c create mode 100644 regmach.c create mode 100644 regmach.h create mode 100644 regops.perl create mode 100644 spot.perl create mode 100644 stackmach.c create mode 100644 stackmach.h create mode 100644 t/t00basic.t create mode 100644 t/t10formats.t create mode 100644 t/t15color.t create mode 100644 t/t30t1font.t create mode 100644 t/t35ttfont.t create mode 100644 t/t36oofont.t create mode 100644 t/t40scale.t create mode 100644 t/t50basicoo.t create mode 100644 t/t55trans.t create mode 100644 t/t56postfix.t create mode 100644 t/t57infix.t create mode 100644 t/t58trans2.t create mode 100644 t/t59assem.t create mode 100644 t/t60dyntest.t create mode 100644 t/t65crop.t create mode 100644 t/t66paste.t create mode 100644 t/t70newgif.t create mode 100644 t/t75polyaa.t create mode 100644 t/t90cc.t create mode 100644 testimg/penguin-base.ppm create mode 100644 testimg/scale.gif create mode 100644 testimg/scale.ppm create mode 100644 testimg/scalei.gif create mode 100644 tiff.c create mode 100644 trans2.c create mode 100644 transbench.perl create mode 100644 transform.perl create mode 100644 typemap diff --git a/Changes b/Changes new file mode 100644 index 00000000..c81bd871 --- /dev/null +++ b/Changes @@ -0,0 +1,404 @@ +Revision history for Perl extension Imager. + +0.01 Thu May 6 15:25:03 1999 + - original version; created by h2xs 1.18 + +0.02 Mon May 10 20:20:20 1999 + - Added PPM writer, and a new return type to + be used to return undef() from a function returning + (int)0. + +0.03 Thu May 20 23:23:23 1999 + - Added Pseudo image handling thingies, now + you can use your own get and put pixel routines. + +0.04 Mon May 24 22:14:55 1999 + - Rewrote parts of jpeg support. + +0.05 Tue May 25 23:40:01 1999 + - Added png support with libpng + fixed error reporting and return types from + some format routines. + +0.06 Wed May 26 19:05:39 1999 + - Fixed Data::Dumper being used when it shouldn't have + added feature checking to see at run time if + certain formats are avaliable. + removed some ancient C++ style comments that hadn't + been properly removed, some out of bounds errors in ppm.c + fixed tests so missing features are skipped. + +0.07 Thu May 27 03:15:00 1999 + - Fixed the typemap for i_img and i_color so that you can pass + a null pointer to them without getting a warning when warnings + are enabled. Maybe this is counter perl but it greatly increases + the usability of the functions. + +0.08 Fri May 28 14:13:21 1999 + - Added support for gif via, giflib or libungif. + gif is so ridden with patent issues but the user + can decide which library to use since they have the same + include files and calling interface. + +0.09 Mon May 31 17:52:32 1999 + - Added image scaling per axis - faster than doing both + axes at the same time. The current method uses lancoz + kernel and filtering. But more types should be added - + including: nearest neighbor, linear, and bicubic. + +0.10 Mon Jun 7 03:25:54 1999 + - Added T1 postscript font handling. It's very primitive + at the moment but creative people can do nice stuff + with it. Currently it is not possible to have it + generate an image of the correct size for a given string + but that is on the way. + +0.11 Mon Jun 7 14:43:35 1999 + - Added T1 features for direct to image rendering in + a single color. fixed some debug messages going to + stderr instead of a log file. + +0.12 Tue Jun 8 02:58:43 1999 + - Fixed bugs in jpeg.c when loading images. Also specified + prototype behaviour to on in the Imager.xs file. The + Makefile.PL step doesn't complain anymore so that is + hopefully fixed. + +0.13 Wed Jun 9 06:55:58 1999 + - Fixed Imager.xs for init_log call. Minor fixes here + and there. + +0.14 Thu Jun 10 14:11:22 1999 + - Rewrote most of the logging stuff so that it is now + possible to remove all logging from the XS part of the + module. Also some primitive check of memory usage was + added. Claes Jacobsson sent in some filters, inverter, + contrast and a noise filter. + +0.15 Mon Jun 14 08:13:29 1999 + - Wrote minor enhancement on the calling syntax list. + Started on the object interface - added better support + for quering avaliable filetypes. Fixed memory leaks in + most loaders. New filters from Claes in this version + are bumpmap, postlevels and mosaic. + +0.16 Wed Jun 16 20:54:33 1999 + - Added fixes to the BEGIN and END parts, added writer + function for the OO interface. Also added basic IPTC + reading support for jpegs. Also a few filters have been + added to the OO interface. + +0.17 Thu Jun 24 11:09:15 1999 + - Added dynamic loading stuff - It's still missing a nice + global symbol table. This will be fixed in next release. + also calling the plugins is not all to easy at the moment. + + +0.18 Mon Jun 28 12:31:33 1999 + - Added global symbol table - plugins now need a symbol + table pointer in them. When the module is loaded it is + set to point at the global symbol table. Also some barebones + Makefile.PL has been made in the dynfilt directory - it works + on my system - I hope it does on yours. + + +0.19 Fri Jul 1 15:00:03 1999 + - Added a way new scaling method for creating easy previews. + It only uses nearest neighbor, so it's doesn't look very nice + but it may be better for applications like remote sensing. + +0.20 Mon Jul 5 10:15:37 1999 + - Added and rewrote documentation. + +0.21 Mon Jul 6 19:15:37 1999 + - Fixed a bug in the scaling routine - it wasn't + handling 0< cases. + +0.22 Sat Oct 9 07:04:14 1999 + - Added a new method to write gif images - now + it is possible to have a part of a palette fixed. + this is very usefull if one needs to make sure that + some color like white is in the pallete. This method + also allows some ditherding and gives better colormap + than the mediancut from the gif libraries. It does + need much more cpu power though. Hopefully later versions + will be faster. + +0.23 **************** Internal release only + - Fixed the %instances bug - caused ALL memory to be leaked. + Added real noise function - need feedback on how it should + be used. Also box(), and polyline are now in place. Polygon + is missing but antialiased line drawing with integer endpoints are + done but should be replaced with a version that can have + floating point endvalues. Two noise filters addded. + +0.24 **************** Internal release only + - Converted i_color into an object from a reference, so now it's + giving an object instead of a void ptr or an integer or something. + +0.25 **************** Internal release only + - Added basic Truetype functionality - still needs a rewrite + to be decent. Currently it's a port of a demo program that + uses an awful amount of global variables and there is much IO since + no caching of glyphs is done. + +0.26 Tue Nov 23 03:57:00 1999 > Development release < + - Added transformations so that an image can be wrapped. + To achive decent speed a C based stackmachine is included. As a result + transformations need to be specified in rpn (postfix) notation. It + also can use the Affix::Infix2Postfix class to do the conversion for it. + +0.27 Tue Dec 28 03:57:00 1999 > CPAN release < + - This is a bugfix version mostly, thanks to claes for pointing + out the problems - fixed palette saving wasn't working correctly after + version 0.24 - rather surprised this didn't crash everything. + Also fixed that for t1 fonts the bounding box wasn't being reported + unless the font had been used before. This is either a bug in t1lib + or a mistake in it's documentation. Another lingering bug since 0.24 + what that $img->box() wasn't creating it's default color properly. + Added i_tt_text() method and more debuging to the truetype routines. + truetype testcase fixed and old debug rubish removed. + +0.28 Tue Jan 4 05:25:58 2000 > CPAN release < + - Only fixes to truetype test and transformation tests. + Thanks to schinder of cpan testers for testing and reporting. + +0.29 Tue Jan 4 21:49:57 2000 > CPAN release < + - fixes to get rid of warnings under pre 5.005, + Fixed broken preproccessor directives to work on non gnu + compilers. Fixed DSO test on HPUX - both code errors and + HPUX creates .sl instead of .so so the tests were failing. + +0.30 Sun Jan 7 05:00:06 2000 > Bunch of Alpha releases < + - An attempt to automate installation. + +0.31 Sat Jan 15 03:58:29 2000 > Fixes fixes fixes < + - Fixed a bug pointed out by Leolo where loading gifs + skips the first line of the imageload() has been + by read() - for now load is an alias for read. It will + be removed in the future. Also, fixes dynamic loading on + systems that prepend an underscore to symbols. At the present + the only system that I know of that needs this is OpenBSD. + BUT YOU MUST RECOMPILE ALL OF YOUR OLD MODULES AGAINST THIS BUILD. + Added getchannels() method ( How did I manage to delay this + untill now ). Some document changes but nothing substantial. + Also fixed the png read/write routines to handle all colorspaces + and images with alpha information. Also now it's possible to + have Imager guess the format of the files to load or save + when passing files to read or save from the filename. + Also all of the tests except dynamic loading now pass on OS/2. + +0.32 Tue Feb 29 17:26:00 2000 CPAN RELEASE + - Added the getcolorcount method. Fixed interlace handling + on png images. Fixed the missing channel count in crop() + method. Rewrote most of t1lib database stuff - created color + and font classes. T1 stuff is mostly done - TT things were + rewritten too and now include most of what is needed for + pixmap caching. Added documentation for fonts. Comments have + been added to some of the relevant c-routines. Added a copy() + function in Imager.xs and a corresponding method name. + Changed the underlying data type for the raw XS images from + pointers to objects - this will hopefully catch the most + basic errors and keep the segfaulting down. This means that + all of the underlying XS calls for readjpeg, readgif, readpng + and readraw do not take the first parameter any more. + Made fixes to keep it not spewing warning on 5.004 perl. + + **** If you had any code that didn't use the OO interface **** + **** It will probably not work any longer **** + +0.33 Beta -- No final + - Fixed the end message from Imager 0.32. Destroy called + on an empty image. Did some work on the polygon method. + Some clean up in the Makefile.PL script. Fixed a buffer + overrun in the t_transform in Imager.XS. Fixed the + error handling in the jpeg loader. It now correctly + returns undef if a load on an image fails. It also + sends the error messages to the log file. Added errstr() + method to the image object. Added a new way to read() + objects from scalars. So far this is only implemented for + jpeg, png and gif. ppm and raw soon - as always if someone + wants to do an overhaul on the ppm stuff feel free. It seems + like such a basic format that interfacing with a library is more + work than implementing all of the needed routines instead. + +0.34 Beta -- No final + - Bunch of documentation fixes, backed out ppm code. + Put in TonyC's giant transform2 patch. Fixed the patch + to make it ansi compliant. Fixed a bunch of bugs in the + Freetype code with regard to vertical and horizontal + positioning and bounding boxes. Cleaned up a lot of the + code so it runs under -Wall. Code that is still in + development such as the polygon converter do not compile + cleanly. Fixed the non antialiased versions of truetype + dump to image routines. Also removed the FIXME for the + hardcoding of antialias in the Imager string method. + Fixed sign error and a missing cache of the bounding box + calculation for the rasterize function. Removed some + debugging code I forgot to remove. Added iolayer.h + and iolayer.c but they don't do anything for now. + +0.35 pre2 -- No time yet + - Fixed some compile warnings for various files under -Wall. + Added functionality for jpeg reading of seekable files, it's not + really working yet. This version is pretty much *not* working. + Do not install unless you intend to do a lot of development. + Repeat - it doesn't even pass tests (but it compiles). Ok now reading + jpegs works from scalars, my guess is that it also works from non + seeking sources such as sockets or pipes. + +0.35 pre3 - No time yet + - Added the *right* patch from Tony which combines + the common code from i_readgif and i_readgif_scalar into + i_readgif_low. Added tiff reading support through iolayer. + +0.35 pre4 - No time yet + - Added tiff writing (no options) support through + iolayer. Also made some small fixes for the iolayer reading + (was always doing two reads when one was needed). Patched the + Imager::read() call so that it now uses a mixture of old and new + functions. + +0.35 pre5 - No time yet + - Fixed various gnu'isms in the c code (some bugs in the link list + implmentation). Fixed missing #skip codes when gif format is not + present in any form. Added fixes for 5.004_04 in the transform2 function. + Made sure it compiles cleanly with sun's cc. Switched from a .jpeg + for transform2 check to a .ppm file so it runs when jpeg is not + present. Added a test for tiff files in t10formats.t. + + +0.35 pre6 - No time yet + - Fixes to Makefile.PL. Should find freetype includes on more + distributions now. Ran tests on Solaris and Hpux, minor fixes. + Compiles with some warnings on with both hpux and solaris' cc. + Made some minor changes to the documentation. Fixes to tiff.c log + code. + +0.35 pre7 - No time yet + - Fixes 64 bit bug on freebsd. While libtiff mirrors the effects of + lseek it's toff_t is a uint32, while lseek uses off_t which can be a 64 + bit quantity. Added the IM_LFLAGS environment variable to help + people with broken libgifs (that want to link with X). + +0.35 Sun Jan 28 19:42:59 EST 2001 + - More makefile fixes, fixed a few signedness warnings. + Checked to see if it compiled cleanly on Solaris and HPUX. + Fixed a 5.004_04 warning and added more ENV flags for makefile. + +0.36 Mon Jan 29 09:36:11 EST 2001 + - String as 0 or "" caused an error in $img->string(). Fixed a + documentation error invoving string() method syntax. Merged a patch + for non antialised truetype fonts. Fixed an error in the Makefile.PL + which caused a makefile to be generated that bombed with sgi's make. + +0.37 Mon Tue 30 09:36:11 EST 2001 + - Several documentation fixes. Pod documentation for almost every + function in image.c. Added sys/types.h include in iolayer which was + causing problems on various linux systems. + +0.38 pre1 - No time yet + - Fixed a braindamaged fix on the Makefile.PL file. Moved the + code for Imager::Color into lib/Imager/Color.pm. Wrote some pod + about how it works. Made the names of Imager::Color XS routines + all begin with ICL_ and used the prefix rules of XS to get nice names + in perl. Found a bug (not fixed) in how XS handles + returning an object to an object it had as a parameter (double + free). + +0.38 pre2 - No time yet + - Fixes lots of for documentation, patch for freetype bounding + box handling. Split put code for Imager::Font into Font.pm and added + more documentation for Font.pm. Added string local ascender and + descender for tt fonts. Note that this needs to be added to t1 fonts + before 0.38 final. + +0.38 pre3 - No time yet + - Fixed an in consistency in the bounding box functions for t1 + fonts. Now both versions get the 6 argument bounding_box method + described in Imager::Font. Started converting the comments in + font.c so that they are viewable by doco.perl. Added two examples + of filters. Need to make them more usefull and then add more + notes than are in compile.txt. + + +0.38 pre4 - No time yet + - Completed adding pod comments to font.c, tiff.c and iolayer.c. + Those along with image.c should now have every single function + described in pod format. + +0.38 pre5 - No time yet + - Replaced ppm.c with pnm.c which adds support for pbm/pgm/ppm + files ascii and binary formats. Added patches for the gif routines. + Patched some of the color quantizing routines (Leolo and TonyC). + There is one bomb and one warning in this test, and frankly I don't + see why they are suddenly there. + +0.38 pre6 - No time yet + - Patch from Tony that fixes infix when Parse::RecDescent is present. + Checked some cases where malloc/free were used instead of mymalloc/myfree. + Added bufchain iolayer code. You can now write to a chain of buffers and + later slurp it all into a single perl scalar. Found some oddity of t/t10 + test not giving the right return value when malloc debugging was enabled. + Fixed some of the logging code and the malloc debugging options. Added + more tests for tiffs. + +0.38 pre7 - No time yet + - Added i_gradgen code and put it into the filters hash. Think a + seperate pod for filters would be a good idea. Also removed some of the + debugging code from the iolayer. Added pod comments to filters.c and + looked over the code. + +0.38 pre8 - No time yet + - limited Win32 support, Imager installs and builds using VC++, + but there's no image/font format support yet. + +0.38 pre9 - No time yet + - Added lots of color quantization code from Tony with benchmarks. + Also fixes ugly stack overrun in old version. Added fixes for the lmfixed + problem. Four of them, let's see which is fastest. This version adds + some voronoi partitioning - it's dog slow but it's a reference implementation + to check if faster algorithms are doing the right thing [tm]. Added a check + for giflib 3. + + + +~~~~~~~~~~~~~^ ^ ^~~~~~~~~~~~~~ + + +0.40 TODO list + iolayer: + - Add scalar/mmap to iolayer + - Add close() code to iolayer + - Merge callback interface into iolayer + - Add interface for writing to all formats but tiff + - Add interface for reading for png (started), + gif (merge with cb patch), ppm and raw + - Add make new tests once all formats support io_layer + - Implment the maxread threshold (Indicates how far + a library can read before it indicates that it's done). + + MultiImage & metadata support: + - Figure what interface should be between C and perl? + - How to store data in the C interface for tags/metadata? + + Old sins: + - Make sure everything is doable with the OO interface + - Split the other classes into seperate files + - Compile with memory debugging enabled and fix leaks + - Check if hashbox code is choosing the wrong closest color + + Documentation: + - Add to the documentation + - Write a tutorial? + - Write a guide to installing the helper libraries + - Go through the entire project and add comments in pod + so doco.perl can be used to read them. + +=================================================== + + For latest versions check the Imager-devel pages: + http://www.eecs.umich.edu/~addi/perl/Imager/devel/ + +=================================================== + diff --git a/Imager.pm b/Imager.pm new file mode 100644 index 00000000..a2d14c69 --- /dev/null +++ b/Imager.pm @@ -0,0 +1,2270 @@ +package Imager; + + + +use strict; +use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS %formats $DEBUG %filters %DSOs $ERRSTR $fontstate %OPCODES $I2P $FORMATGUESS); +use IO::File; + +use Imager::Color; +use Imager::Font; + +@EXPORT_OK = qw( + init + init_log + DSO_open + DSO_close + DSO_funclist + DSO_call + + load_plugin + unload_plugin + + i_list_formats + i_has_format + + i_color_new + i_color_set + i_color_info + + i_img_empty + i_img_empty_ch + i_img_exorcise + i_img_destroy + + i_img_info + + i_img_setmask + i_img_getmask + + i_draw + i_line_aa + i_box + i_box_filled + i_arc + + i_bezier_multi + i_poly_aa + + i_copyto + i_rubthru + i_scaleaxis + i_scale_nn + i_haar + i_count_colors + + + i_gaussian + i_conv + + i_img_diff + + i_init_fonts + i_t1_new + i_t1_destroy + i_t1_set_aa + i_t1_cp + i_t1_text + i_t1_bbox + + + i_tt_set_aa + i_tt_cp + i_tt_text + i_tt_bbox + + i_readjpeg + i_writejpeg + + i_readjpeg_wiol + i_writejpeg_wiol + + i_readtiff_wiol + i_writetiff_wiol + + i_readpng + i_writepng + + i_readgif + i_readgif_callback + i_writegif + i_writegifmc + i_writegif_gen + i_writegif_callback + + i_readpnm_wiol + i_writeppm + + i_readraw + i_writeraw + + i_contrast + i_hardinvert + i_noise + i_bumpmap + i_postlevels + i_mosaic + i_watermark + + malloc_state + + list_formats + + i_gifquant + + newfont + newcolor + newcolour + NC + NF + +); + + + +@EXPORT=qw( + init_log + i_list_formats + i_has_format + malloc_state + i_color_new + + i_img_empty + i_img_empty_ch + ); + +%EXPORT_TAGS= + (handy => [qw( + newfont + newcolor + NF + NC + )], + all => [@EXPORT_OK], + default => [qw( + load_plugin + unload_plugin + )]); + + +BEGIN { + require Exporter; + require DynaLoader; + + $VERSION = '0.38pre9'; + @ISA = qw(Exporter DynaLoader); + bootstrap Imager $VERSION; +} + +BEGIN { + i_init_fonts(); # Initialize font engines + for(i_list_formats()) { $formats{$_}++; } + + if ($formats{'t1'}) { + i_t1_set_aa(1); + } + + if (!$formats{'t1'} and !$formats{'tt'}) { + $fontstate='no font support'; + } + + %OPCODES=(Add=>[0],Sub=>[1],Mult=>[2],Div=>[3],Parm=>[4],'sin'=>[5],'cos'=>[6],'x'=>[4,0],'y'=>[4,1]); + + $DEBUG=0; + + $filters{contrast}={ + callseq => ['image','intensity'], + callsub => sub { my %hsh=@_; i_contrast($hsh{image},$hsh{intensity}); } + }; + + $filters{noise} ={ + callseq => ['image', 'amount', 'subtype'], + defaults => { amount=>3,subtype=>0 }, + callsub => sub { my %hsh=@_; i_noise($hsh{image},$hsh{amount},$hsh{subtype}); } + }; + + $filters{hardinvert} ={ + callseq => ['image'], + defaults => { }, + callsub => sub { my %hsh=@_; i_hardinvert($hsh{image}); } + }; + + $filters{autolevels} ={ + callseq => ['image','lsat','usat','skew'], + defaults => { lsat=>0.1,usat=>0.1,skew=>0.0 }, + callsub => sub { my %hsh=@_; i_autolevels($hsh{image},$hsh{lsat},$hsh{usat},$hsh{skew}); } + }; + + $filters{turbnoise} ={ + callseq => ['image'], + defaults => { xo=>0.0,yo=>0.0,scale=>10.0 }, + callsub => sub { my %hsh=@_; i_turbnoise($hsh{image},$hsh{xo},$hsh{yo},$hsh{scale}); } + }; + + $filters{radnoise} ={ + callseq => ['image'], + defaults => { xo=>100,yo=>100,ascale=>17.0,rscale=>0.02 }, + callsub => sub { my %hsh=@_; i_radnoise($hsh{image},$hsh{xo},$hsh{yo},$hsh{rscale},$hsh{ascale}); } + }; + + $filters{conv} ={ + callseq => ['image', 'coef'], + defaults => { }, + callsub => sub { my %hsh=@_; i_conv($hsh{image},$hsh{coef}); } + }; + + $filters{gradgen} ={ + callseq => ['image', 'xo', 'yo', 'colors', 'dist'], + defaults => { }, + callsub => sub { my %hsh=@_; i_gradgen($hsh{image}, $hsh{xo}, $hsh{yo}, $hsh{colors}, $hsh{dist}); } + }; + + $filters{nearest_color} ={ + callseq => ['image', 'xo', 'yo', 'colors', 'dist'], + defaults => { }, + callsub => sub { my %hsh=@_; i_nearest_color($hsh{image}, $hsh{xo}, $hsh{yo}, $hsh{colors}, $hsh{dist}); } + }; + + $FORMATGUESS=\&def_guess_type; +} + +# +# Non methods +# + +# initlize Imager +# NOTE: this might be moved to an import override later on + +#sub import { +# my $pack = shift; +# (look through @_ for special tags, process, and remove them); +# use Data::Dumper; +# print Dumper($pack); +# print Dumper(@_); +#} + +sub init { + my %parms=(loglevel=>1,@_); + if ($parms{'log'}) { + init_log($parms{'log'},$parms{'loglevel'}); + } + +# if ($parms{T1LIB_CONFIG}) { $ENV{T1LIB_CONFIG}=$parms{T1LIB_CONFIG}; } +# if ( $ENV{T1LIB_CONFIG} and ( $fontstate eq 'missing conf' )) { +# i_init_fonts(); +# $fontstate='ok'; +# } +} + +END { + if ($DEBUG) { + print "shutdown code\n"; + # for(keys %instances) { $instances{$_}->DESTROY(); } + malloc_state(); # how do decide if this should be used? -- store something from the import + print "Imager exiting\n"; + } +} + +# Load a filter plugin + +sub load_plugin { + my ($filename)=@_; + my $i; + my ($DSO_handle,$str)=DSO_open($filename); + if (!defined($DSO_handle)) { $Imager::ERRSTR="Couldn't load plugin '$filename'\n"; return undef; } + my %funcs=DSO_funclist($DSO_handle); + if ($DEBUG) { print "loading module $filename\n"; $i=0; for(keys %funcs) { printf(" %2d: %s\n",$i++,$_); } } + $i=0; + for(keys %funcs) { if ($filters{$_}) { $ERRSTR="filter '$_' already exists\n"; DSO_close($DSO_handle); return undef; } } + + $DSOs{$filename}=[$DSO_handle,\%funcs]; + + for(keys %funcs) { + my $evstr="\$filters{'".$_."'}={".$funcs{$_}.'};'; + $DEBUG && print "eval string:\n",$evstr,"\n"; + eval $evstr; + print $@ if $@; + } + return 1; +} + +# Unload a plugin + +sub unload_plugin { + my ($filename)=@_; + + if (!$DSOs{$filename}) { $ERRSTR="plugin '$filename' not loaded."; return undef; } + my ($DSO_handle,$funcref)=@{$DSOs{$filename}}; + for(keys %{$funcref}) { + delete $filters{$_}; + $DEBUG && print "unloading: $_\n"; + } + my $rc=DSO_close($DSO_handle); + if (!defined($rc)) { $ERRSTR="unable to unload plugin '$filename'."; return undef; } + return 1; +} + + +# +# Methods to be called on objects. +# + +# Create a new Imager object takes very few parameters. +# usually you call this method and then call open from +# the resulting object + +sub new { + my $class = shift; + my $self ={}; + my %hsh=@_; + bless $self,$class; + $self->{IMG}=undef; # Just to indicate what exists + $self->{ERRSTR}=undef; # + $self->{DEBUG}=$DEBUG; + $self->{DEBUG} && print "Initialized Imager\n"; + if ($hsh{xsize} && $hsh{ysize}) { $self->img_set(%hsh); } + return $self; +} + + +# Copy an entire image with no changes +# - if an image has magic the copy of it will not be magical + +sub copy { + my $self = shift; + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + + my $newcopy=Imager->new(); + $newcopy->{IMG}=i_img_new(); + i_copy($newcopy->{IMG},$self->{IMG}); + return $newcopy; +} + +# Paste a region + +sub paste { + my $self = shift; + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + my %input=(left=>0, top=>0, @_); + unless($input{img}) { + $self->{ERRSTR}="no source image"; + return; + } + $input{left}=0 if $input{left} <= 0; + $input{top}=0 if $input{top} <= 0; + my $src=$input{img}; + my($r,$b)=i_img_info($src->{IMG}); + + i_copyto($self->{IMG}, $src->{IMG}, + 0,0, $r, $b, $input{left}, $input{top}); + return $self; # What should go here?? +} + +# Crop an image - i.e. return a new image that is smaller + +sub crop { + my $self=shift; + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + my %hsh=(left=>0,right=>0,top=>0,bottom=>0,@_); + + my ($w,$h,$l,$r,$b,$t)=($self->getwidth(),$self->getheight(), + @hsh{qw(left right bottom top)}); + $l=0 if not defined $l; + $t=0 if not defined $t; + $r=$self->getwidth if not defined $r; + $b=$self->getheight if not defined $b; + + ($l,$r)=($r,$l) if $l>$r; + ($t,$b)=($b,$t) if $t>$b; + + if ($hsh{'width'}) { + $l=int(0.5+($w-$hsh{'width'})/2); + $r=$l+$hsh{'width'}; + } else { + $hsh{'width'}=$r-$l; + } + if ($hsh{'height'}) { + $b=int(0.5+($h-$hsh{'height'})/2); + $t=$h+$hsh{'height'}; + } else { + $hsh{'height'}=$b-$t; + } + +# print "l=$l, r=$r, h=$hsh{'width'}\n"; +# print "t=$t, b=$b, w=$hsh{'height'}\n"; + + my $dst=Imager->new(xsize=>$hsh{'width'},ysize=>$hsh{'height'},channels=>$self->getchannels()); + + i_copyto($dst->{IMG},$self->{IMG},$l,$t,$r,$b,0,0); + return $dst; +} + +# Sets an image to a certain size and channel number +# if there was previously data in the image it is discarded + +sub img_set { + my $self=shift; + + my %hsh=(xsize=>100,ysize=>100,channels=>3,@_); + + if (defined($self->{IMG})) { + i_img_destroy($self->{IMG}); + undef($self->{IMG}); + } + + $self->{IMG}=Imager::ImgRaw::new($hsh{'xsize'},$hsh{'ysize'},$hsh{'channels'}); +} + +# Read an image from file + +sub read { + my $self = shift; + my %input=@_; + my ($fh, $fd, $IO); + + if (defined($self->{IMG})) { + i_img_destroy($self->{IMG}); + undef($self->{IMG}); + } + + if (!$input{fd} and !$input{file} and !$input{data}) { $self->{ERRSTR}='no file, fd or data parameter'; return undef; } + if ($input{file}) { + $fh = new IO::File($input{file},"r"); + if (!defined $fh) { $self->{ERRSTR}='Could not open file'; return undef; } + binmode($fh); + $fd = $fh->fileno(); + } + if ($input{fd}) { $fd=$input{fd} }; + + # FIXME: Find the format here if not specified + # yes the code isn't here yet - next week maybe? + + if (!$input{type} and $input{file}) { $input{type}=$FORMATGUESS->($input{file}); } + if (!$formats{$input{type}}) { $self->{ERRSTR}='format not supported'; return undef; } + + my %iolready=(jpeg=>1, tiff=>1, pnm=>1); + + if ($iolready{$input{type}}) { + # Setup data source + $IO = io_new_fd($fd); # sort of simple for now eh? + + if ( $input{type} eq 'jpeg' ) { + ($self->{IMG},$self->{IPTCRAW})=i_readjpeg_wiol( $IO ); + if ( !defined($self->{IMG}) ) { $self->{ERRSTR}='unable to read jpeg image'; return undef; } + $self->{DEBUG} && print "loading a jpeg file\n"; + return $self; + } + + if ( $input{type} eq 'tiff' ) { + $self->{IMG}=i_readtiff_wiol( $IO, -1 ); # Fixme, check if that length parameter is ever needed + if ( !defined($self->{IMG}) ) { $self->{ERRSTR}='unable to read tiff image'; return undef; } + $self->{DEBUG} && print "loading a tiff file\n"; + return $self; + } + + if ( $input{type} eq 'pnm' ) { + $self->{IMG}=i_readpnm_wiol( $IO, -1 ); # Fixme, check if that length parameter is ever needed + if ( !defined($self->{IMG}) ) { $self->{ERRSTR}='unable to read pnm image'; return undef; } + $self->{DEBUG} && print "loading a pnm file\n"; + return $self; + } + + } else { + + # Old code for reference while changing the new stuff + + + if (!$input{type} and $input{file}) { $input{type}=$FORMATGUESS->($input{file}); } + if (!$input{type}) { $self->{ERRSTR}='type parameter missing and not possible to guess from extension'; return undef; } + + if (!$formats{$input{type}}) { $self->{ERRSTR}='format not supported'; return undef; } + + if ($input{file}) { + $fh = new IO::File($input{file},"r"); + if (!defined $fh) { $self->{ERRSTR}='Could not open file'; return undef; } + binmode($fh); + $fd = $fh->fileno(); + } + if ($input{fd}) { $fd=$input{fd} }; + + if ( $input{type} eq 'gif' ) { + if (exists $input{data}) { $self->{IMG}=i_readgif_scalar($input{data}); } + else { $self->{IMG}=i_readgif( $fd ) } + if ( !defined($self->{IMG}) ) { $self->{ERRSTR}='unable to read gif image'; return undef; } + $self->{DEBUG} && print "loading a gif file\n"; + } elsif ( $input{type} eq 'jpeg' ) { + if (exists $input{data}) { ($self->{IMG},$self->{IPTCRAW})=i_readjpeg_scalar($input{data}); } + else { ($self->{IMG},$self->{IPTCRAW})=i_readjpeg( $fd ); } + if ( !defined($self->{IMG}) ) { $self->{ERRSTR}='unable to read jpeg image'; return undef; } + $self->{DEBUG} && print "loading a jpeg file\n"; + } elsif ( $input{type} eq 'png' ) { + if (exists $input{data}) { $self->{IMG}=i_readpng_scalar($input{data}); } + else { $self->{IMG}=i_readpng( $fd ); } + if ( !defined($self->{IMG}) ) { $self->{ERRSTR}='unable to read png image'; return undef; } + $self->{DEBUG} && print "loading a png file\n"; + } elsif ( $input{type} eq 'raw' ) { + my %params=(datachannels=>3,storechannels=>3,interleave=>1); + for(keys(%input)) { $params{$_}=$input{$_}; } + + if ( !($params{xsize} && $params{ysize}) ) { $self->{ERRSTR}='missing xsize or ysize parameter for raw'; return undef; } + $self->{IMG}=i_readraw( $fd, $params{xsize}, $params{ysize}, + $params{datachannels}, $params{storechannels}, $params{interleave}); + if ( !defined($self->{IMG}) ) { $self->{ERRSTR}='unable to read raw image'; return undef; } + $self->{DEBUG} && print "loading a raw file\n"; + } + return $self; + } +} + + +# Write an image to file + +sub write { + my $self = shift; + my %input=(jpegquality=>75, gifquant=>'mc', lmdither=>6.0, lmfixed=>[], @_); + my ($fh, $rc, $fd, $IO); + + my %iolready=( tiff=>1 ); # this will be SO MUCH BETTER once they are all in there + + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + + if (!$input{file} and !$input{'fd'} and !$input{'data'}) { $self->{ERRSTR}='file/fd/data parameter missing'; return undef; } + if (!$input{type}) { $input{type}=$FORMATGUESS->($input{file}); } + if (!$input{type}) { $self->{ERRSTR}='type parameter missing and not possible to guess from extension'; return undef; } + + if (!$formats{$input{type}}) { $self->{ERRSTR}='format not supported'; return undef; } + + if (exists $input{'fd'}) { + $fd=$input{'fd'}; + } elsif (exists $input{'data'}) { + $IO = Imager::io_new_bufchain(); + } else { + $fh = new IO::File($input{file},"w+"); + if (!defined $fh) { $self->{ERRSTR}='Could not open file'; return undef; } + binmode($fh); + $fd = $fh->fileno(); + } + + + + if ($iolready{$input{type}}) { + if ($fd) { + $IO = io_new_fd($fd); + } + + if ($input{type} eq 'tiff') { + if (!i_writetiff_wiol($self->{IMG}, $IO)) { $self->{ERRSTR}='Could not write to buffer'; return undef; } + } + + my $data = io_slurp($IO); + if (!$data) { $self->{ERRSTR}='Could not slurp from buffer'; return undef; } + + ${$input{data}} = $data; + return $self; + } else { + + if ( $input{type} eq 'gif' ) { + if (not $input{gifplanes}) { + my $gp; + my $count=i_count_colors($self->{IMG}, 256); + $gp=8 if $count == -1; + $gp=1 if not $gp and $count <= 2; + $gp=2 if not $gp and $count <= 4; + $gp=3 if not $gp and $count <= 8; + $gp=4 if not $gp and $count <= 16; + $gp=5 if not $gp and $count <= 32; + $gp=6 if not $gp and $count <= 64; + $gp=7 if not $gp and $count <= 128; + $input{gifplanes} = $gp || 8; + } + + if ($input{gifplanes}>8) { + $input{gifplanes}=8; + } + if ($input{gifquant} eq 'gen' || $input{callback}) { + + + if ($input{gifquant} eq 'lm') { + + $input{make_colors} = 'addi'; + $input{translate} = 'perturb'; + $input{perturb} = $input{lmdither}; + } elsif ($input{gifquant} eq 'gen') { + # just pass options through + } else { + $input{make_colors} = 'webmap'; # ignored + $input{translate} = 'giflib'; + } + + if ($input{callback}) { + defined $input{maxbuffer} or $input{maxbuffer} = -1; + $rc = i_writegif_callback($input{callback}, $input{maxbuffer}, + \%input, $self->{IMG}); + } else { + $rc = i_writegif_gen($fd, \%input, $self->{IMG}); + } + + + + } elsif ($input{gifquant} eq 'lm') { + $rc=i_writegif($self->{IMG},$fd,$input{gifplanes},$input{lmdither},$input{lmfixed}); + } else { + $rc=i_writegifmc($self->{IMG},$fd,$input{gifplanes}); + } + if ( !defined($rc) ) { + $self->{ERRSTR}='unable to write gif image'; return undef; + } + $self->{DEBUG} && print "writing a gif file\n"; + + } elsif ( $input{type} eq 'jpeg' ) { + $rc=i_writejpeg($self->{IMG},$fd,$input{jpegquality}); + if ( !defined($rc) ) { + $self->{ERRSTR}='unable to write jpeg image'; return undef; + } + $self->{DEBUG} && print "writing a jpeg file\n"; + } elsif ( $input{type} eq 'png' ) { + $rc=i_writepng($self->{IMG},$fd); + if ( !defined($rc) ) { + $self->{ERRSTR}='unable to write png image'; return undef; + } + $self->{DEBUG} && print "writing a png file\n"; + } elsif ( $input{type} eq 'pnm' ) { + $rc=i_writeppm($self->{IMG},$fd); + if ( !defined($rc) ) { + $self->{ERRSTR}='unable to write pnm image'; return undef; + } + $self->{DEBUG} && print "writing a pnm file\n"; + } elsif ( $input{type} eq 'raw' ) { + $rc=i_writeraw($self->{IMG},$fd); + if ( !defined($rc) ) { + $self->{ERRSTR}='unable to write raw image'; return undef; + } + $self->{DEBUG} && print "writing a raw file\n"; + } elsif ( $input{type} eq 'tiff' ) { + $rc=i_writetiff_wiol($self->{IMG},io_new_fd($fd) ); + if ( !defined($rc) ) { + $self->{ERRSTR}='unable to write tiff image'; return undef; + } + $self->{DEBUG} && print "writing a tiff file\n"; + } + + } + return $self; +} + +sub write_multi { + my ($class, $opts, @images) = @_; + + if ($opts->{type} eq 'gif') { + # translate to ImgRaw + if (grep !UNIVERSAL::isa($_, 'Imager') || !$_->{IMG}, @images) { + $ERRSTR = "Usage: Imager->write_multi({ options }, @images)"; + return 0; + } + my @work = map $_->{IMG}, @images; + if ($opts->{callback}) { + # Note: you may need to fix giflib for this one to work + my $maxbuffer = $opts->{maxbuffer}; + defined $maxbuffer or $maxbuffer = -1; # max by default + return i_writegif_callback($opts->{callback}, $maxbuffer, + $opts, @work); + } + if ($opts->{fd}) { + return i_writegif_gen($opts->{fd}, $opts, @work); + } + else { + my $fh = IO::File->new($opts->{file}, "w+"); + unless ($fh) { + $ERRSTR = "Error creating $opts->{file}: $!"; + return 0; + } + binmode($fh); + return i_writegif_gen(fileno($fh), $opts, @work); + } + } + else { + $ERRSTR = "Sorry, write_multi doesn't support $opts->{type} yet"; + return 0; + } +} + +# Destroy an Imager object + +sub DESTROY { + my $self=shift; + # delete $instances{$self}; + if (defined($self->{IMG})) { + i_img_destroy($self->{IMG}); + undef($self->{IMG}); + } else { +# print "Destroy Called on an empty image!\n"; # why did I put this here?? + } +} + +# Perform an inplace filter of an image +# that is the image will be overwritten with the data + +sub filter { + my $self=shift; + my %input=@_; + my %hsh; + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + + if (!$input{type}) { $self->{ERRSTR}='type parameter missing'; return undef; } + + if ( (grep { $_ eq $input{type} } keys %filters) != 1) { + $self->{ERRSTR}='type parameter not matching any filter'; return undef; + } + + if (defined($filters{$input{type}}{defaults})) { + %hsh=('image',$self->{IMG},%{$filters{$input{type}}{defaults}},%input); + } else { + %hsh=('image',$self->{IMG},%input); + } + + my @cs=@{$filters{$input{type}}{callseq}}; + + for(@cs) { + if (!defined($hsh{$_})) { + $self->{ERRSTR}="missing parameter '$_' for filter ".$input{type}; return undef; + } + } + + &{$filters{$input{type}}{callsub}}(%hsh); + + my @b=keys %hsh; + + $self->{DEBUG} && print "callseq is: @cs\n"; + $self->{DEBUG} && print "matching callseq is: @b\n"; + + return $self; +} + +# Scale an image to requested size and return the scaled version + +sub scale { + my $self=shift; + my %opts=(scalefactor=>0.5,type=>'max',qtype=>'normal',@_); + my $img = Imager->new(); + my $tmp = Imager->new(); + + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + + if ($opts{xpixels} and $opts{ypixels} and $opts{type}) { + my ($xpix,$ypix)=( $opts{xpixels}/$self->getwidth() , $opts{ypixels}/$self->getheight() ); + if ($opts{type} eq 'min') { $opts{scalefactor}=min($xpix,$ypix); } + if ($opts{type} eq 'max') { $opts{scalefactor}=max($xpix,$ypix); } + } elsif ($opts{xpixels}) { $opts{scalefactor}=$opts{xpixels}/$self->getwidth(); } + elsif ($opts{ypixels}) { $opts{scalefactor}=$opts{ypixels}/$self->getheight(); } + + if ($opts{qtype} eq 'normal') { + $tmp->{IMG}=i_scaleaxis($self->{IMG},$opts{scalefactor},0); + if ( !defined($tmp->{IMG}) ) { $self->{ERRSTR}='unable to scale image'; return undef; } + $img->{IMG}=i_scaleaxis($tmp->{IMG},$opts{scalefactor},1); + if ( !defined($img->{IMG}) ) { $self->{ERRSTR}='unable to scale image'; return undef; } + return $img; + } + if ($opts{'qtype'} eq 'preview') { + $img->{IMG}=i_scale_nn($self->{IMG},$opts{'scalefactor'},$opts{'scalefactor'}); + if ( !defined($img->{IMG}) ) { $self->{ERRSTR}='unable to scale image'; return undef; } + return $img; + } + $self->{ERRSTR}='scale: invalid value for qtype'; return undef; +} + +# Scales only along the X axis + +sub scaleX { + my $self=shift; + my %opts=(scalefactor=>0.5,@_); + + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + + my $img = Imager->new(); + + if ($opts{pixels}) { $opts{scalefactor}=$opts{pixels}/$self->getwidth(); } + + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + $img->{IMG}=i_scaleaxis($self->{IMG},$opts{scalefactor},0); + + if ( !defined($img->{IMG}) ) { $self->{ERRSTR}='unable to scale image'; return undef; } + return $img; +} + +# Scales only along the Y axis + +sub scaleY { + my $self=shift; + my %opts=(scalefactor=>0.5,@_); + + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + + my $img = Imager->new(); + + if ($opts{pixels}) { $opts{scalefactor}=$opts{pixels}/$self->getheight(); } + + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + $img->{IMG}=i_scaleaxis($self->{IMG},$opts{scalefactor},1); + + if ( !defined($img->{IMG}) ) { $self->{ERRSTR}='unable to scale image'; return undef; } + return $img; +} + + +# Transform returns a spatial transformation of the input image +# this moves pixels to a new location in the returned image. +# NOTE - should make a utility function to check transforms for +# stack overruns + +sub transform { + my $self=shift; + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + my %opts=@_; + my (@op,@ropx,@ropy,$iop,$or,@parm,$expr,@xt,@yt,@pt,$numre); + +# print Dumper(\%opts); +# xopcopdes + + if ( $opts{'xexpr'} and $opts{'yexpr'} ) { + if (!$I2P) { + eval ("use Affix::Infix2Postfix;"); + print $@; + if ( $@ ) { + $self->{ERRSTR}='transform: expr given and Affix::Infix2Postfix is not avaliable.'; + return undef; + } + $I2P=Affix::Infix2Postfix->new('ops'=>[{op=>'+',trans=>'Add'}, + {op=>'-',trans=>'Sub'}, + {op=>'*',trans=>'Mult'}, + {op=>'/',trans=>'Div'}, + {op=>'-',type=>'unary',trans=>'u-'}, + {op=>'**'}, + {op=>'func',type=>'unary'}], + 'grouping'=>[qw( \( \) )], + 'func'=>[qw( sin cos )], + 'vars'=>[qw( x y )] + ); + } + + @xt=$I2P->translate($opts{'xexpr'}); + @yt=$I2P->translate($opts{'yexpr'}); + + $numre=$I2P->{'numre'}; + @pt=(0,0); + + for(@xt) { if (/$numre/) { push(@pt,$_); push(@{$opts{'xopcodes'}},'Parm',$#pt); } else { push(@{$opts{'xopcodes'}},$_); } } + for(@yt) { if (/$numre/) { push(@pt,$_); push(@{$opts{'yopcodes'}},'Parm',$#pt); } else { push(@{$opts{'yopcodes'}},$_); } } + @{$opts{'parm'}}=@pt; + } + +# print Dumper(\%opts); + + if ( !exists $opts{'xopcodes'} or @{$opts{'xopcodes'}}==0) { + $self->{ERRSTR}='transform: no xopcodes given.'; + return undef; + } + + @op=@{$opts{'xopcodes'}}; + for $iop (@op) { + if (!defined ($OPCODES{$iop}) and ($iop !~ /^\d+$/) ) { + $self->{ERRSTR}="transform: illegal opcode '$_'."; + return undef; + } + push(@ropx,(exists $OPCODES{$iop}) ? @{$OPCODES{$iop}} : $iop ); + } + + +# yopcopdes + + if ( !exists $opts{'yopcodes'} or @{$opts{'yopcodes'}}==0) { + $self->{ERRSTR}='transform: no yopcodes given.'; + return undef; + } + + @op=@{$opts{'yopcodes'}}; + for $iop (@op) { + if (!defined ($OPCODES{$iop}) and ($iop !~ /^\d+$/) ) { + $self->{ERRSTR}="transform: illegal opcode '$_'."; + return undef; + } + push(@ropy,(exists $OPCODES{$iop}) ? @{$OPCODES{$iop}} : $iop ); + } + +#parameters + + if ( !exists $opts{'parm'}) { + $self->{ERRSTR}='transform: no parameter arg given.'; + return undef; + } + +# print Dumper(\@ropx); +# print Dumper(\@ropy); +# print Dumper(\@ropy); + + my $img = Imager->new(); + $img->{IMG}=i_transform($self->{IMG},\@ropx,\@ropy,$opts{'parm'}); + if ( !defined($img->{IMG}) ) { $self->{ERRSTR}='transform: failed'; return undef; } + return $img; +} + + +{ + my $got_expr; + sub transform2 { + my ($opts, @imgs) = @_; + + if (!$got_expr) { + # this is fairly big, delay loading it + eval "use Imager::Expr"; + die $@ if $@; + ++$got_expr; + } + + $opts->{variables} = [ qw(x y) ]; + my ($width, $height) = @{$opts}{qw(width height)}; + if (@imgs) { + $width ||= $imgs[0]->getwidth(); + $height ||= $imgs[0]->getheight(); + my $img_num = 1; + for my $img (@imgs) { + $opts->{constants}{"w$img_num"} = $img->getwidth(); + $opts->{constants}{"h$img_num"} = $img->getheight(); + $opts->{constants}{"cx$img_num"} = $img->getwidth()/2; + $opts->{constants}{"cy$img_num"} = $img->getheight()/2; + ++$img_num; + } + } + if ($width) { + $opts->{constants}{w} = $width; + $opts->{constants}{cx} = $width/2; + } + else { + $Imager::ERRSTR = "No width supplied"; + return; + } + if ($height) { + $opts->{constants}{h} = $height; + $opts->{constants}{cy} = $height/2; + } + else { + $Imager::ERRSTR = "No height supplied"; + return; + } + my $code = Imager::Expr->new($opts); + if (!$code) { + $Imager::ERRSTR = Imager::Expr::error(); + return; + } + + my $img = Imager->new(); + $img->{IMG} = i_transform2($opts->{width}, $opts->{height}, $code->code(), + $code->nregs(), $code->cregs(), + [ map { $_->{IMG} } @imgs ]); + if (!defined $img->{IMG}) { + $Imager::ERRSTR = "transform2 failed"; + return; + } + + return $img; + } +} + + + + + + + + +sub rubthrough { + my $self=shift; + my %opts=(tx=>0,ty=>0,@_); + + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + unless ($opts{src} && $opts{src}->{IMG}) { $self->{ERRSTR}='empty input image for source'; return undef; } + + i_rubthru($self->{IMG}, $opts{src}->{IMG}, $opts{tx},$opts{ty}); + return $self; +} + + + +# These two are supported for legacy code only + +sub i_color_new { + return Imager::Color->new($_[0], $_[1], $_[2], $_[3]); +} + +sub i_color_set { + return Imager::Color::set($_[0], $_[1], $_[2], $_[3], $_[4]); +} + + + +# Draws a box between the specified corner points. + +sub box { + my $self=shift; + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + my $dflcl=i_color_new(255,255,255,255); + my %opts=(color=>$dflcl,xmin=>0,ymin=>0,xmax=>$self->getwidth()-1,ymax=>$self->getheight()-1,@_); + + if (exists $opts{'box'}) { + $opts{'xmin'} = min($opts{'box'}->[0],$opts{'box'}->[2]); + $opts{'xmax'} = max($opts{'box'}->[0],$opts{'box'}->[2]); + $opts{'ymin'} = min($opts{'box'}->[1],$opts{'box'}->[3]); + $opts{'ymax'} = max($opts{'box'}->[1],$opts{'box'}->[3]); + } + + if ($opts{filled}) { i_box_filled($self->{IMG},$opts{xmin},$opts{ymin},$opts{xmax},$opts{ymax},$opts{color}); } + else { i_box($self->{IMG},$opts{xmin},$opts{ymin},$opts{xmax},$opts{ymax},$opts{color}); } + return $self; +} + +# Draws an arc - this routine SUCKS and is buggy - it sometimes doesn't work when the arc is a convex polygon + +sub arc { + my $self=shift; + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + my $dflcl=i_color_new(255,255,255,255); + my %opts=(color=>$dflcl, + 'r'=>min($self->getwidth(),$self->getheight())/3, + 'x'=>$self->getwidth()/2, + 'y'=>$self->getheight()/2, + 'd1'=>0, 'd2'=>361, @_); + i_arc($self->{IMG},$opts{'x'},$opts{'y'},$opts{'r'},$opts{'d1'},$opts{'d2'},$opts{'color'}); + return $self; +} + +# Draws a line from one point to (but not including) the destination point + +sub line { + my $self=shift; + my $dflcl=i_color_new(0,0,0,0); + my %opts=(color=>$dflcl,@_); + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + + unless (exists $opts{x1} and exists $opts{y1}) { $self->{ERRSTR}='missing begining coord'; return undef; } + unless (exists $opts{x2} and exists $opts{y2}) { $self->{ERRSTR}='missing ending coord'; return undef; } + + if ($opts{antialias}) { + i_line_aa($self->{IMG},$opts{x1}, $opts{y1}, $opts{x2}, $opts{y2}, $opts{color}); + } else { + i_draw($self->{IMG},$opts{x1}, $opts{y1}, $opts{x2}, $opts{y2}, $opts{color}); + } + return $self; +} + +# Draws a line between an ordered set of points - It more or less just transforms this +# into a list of lines. + +sub polyline { + my $self=shift; + my ($pt,$ls,@points); + my $dflcl=i_color_new(0,0,0,0); + my %opts=(color=>$dflcl,@_); + + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + + if (exists($opts{points})) { @points=@{$opts{points}}; } + if (!exists($opts{points}) and exists($opts{'x'}) and exists($opts{'y'}) ) { + @points=map { [ $opts{'x'}->[$_],$opts{'y'}->[$_] ] } (0..(scalar @{$opts{'x'}}-1)); + } + +# print Dumper(\@points); + + if ($opts{antialias}) { + for $pt(@points) { + if (defined($ls)) { i_line_aa($self->{IMG},$ls->[0],$ls->[1],$pt->[0],$pt->[1],$opts{color}); } + $ls=$pt; + } + } else { + for $pt(@points) { + if (defined($ls)) { i_draw($self->{IMG},$ls->[0],$ls->[1],$pt->[0],$pt->[1],$opts{color}); } + $ls=$pt; + } + } + return $self; +} + +# this the multipoint bezier curve +# this is here more for testing that actual usage since +# this is not a good algorithm. Usually the curve would be +# broken into smaller segments and each done individually. + +sub polybezier { + my $self=shift; + my ($pt,$ls,@points); + my $dflcl=i_color_new(0,0,0,0); + my %opts=(color=>$dflcl,@_); + + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + + if (exists $opts{points}) { + $opts{'x'}=map { $_->[0]; } @{$opts{'points'}}; + $opts{'y'}=map { $_->[1]; } @{$opts{'points'}}; + } + + unless ( @{$opts{'x'}} and @{$opts{'x'}} == @{$opts{'y'}} ) { + $self->{ERRSTR}='Missing or invalid points.'; + return; + } + + i_bezier_multi($self->{IMG},$opts{'x'},$opts{'y'},$opts{'color'}); + return $self; +} + + +# destructive border - image is shrunk by one pixel all around + +sub border { + my ($self,%opts)=@_; + my($tx,$ty)=($self->getwidth()-1,$self->getheight()-1); + $self->polyline('x'=>[0,$tx,$tx,0,0],'y'=>[0,0,$ty,$ty,0],%opts); +} + + +# Get the width of an image + +sub getwidth { + my $self = shift; + if (!defined($self->{IMG})) { $self->{ERRSTR} = 'image is empty'; return undef; } + return (i_img_info($self->{IMG}))[0]; +} + +# Get the height of an image + +sub getheight { + my $self = shift; + if (!defined($self->{IMG})) { $self->{ERRSTR} = 'image is empty'; return undef; } + return (i_img_info($self->{IMG}))[1]; +} + +# Get number of channels in an image + +sub getchannels { + my $self = shift; + if (!defined($self->{IMG})) { $self->{ERRSTR} = 'image is empty'; return undef; } + return i_img_getchannels($self->{IMG}); +} + +# Get channel mask + +sub getmask { + my $self = shift; + if (!defined($self->{IMG})) { $self->{ERRSTR} = 'image is empty'; return undef; } + return i_img_getmask($self->{IMG}); +} + +# Set channel mask + +sub setmask { + my $self = shift; + my %opts = @_; + if (!defined($self->{IMG})) { $self->{ERRSTR} = 'image is empty'; return undef; } + i_img_setmask( $self->{IMG} , $opts{mask} ); +} + +# Get number of colors in an image + +sub getcolorcount { + my $self=shift; + my %opts=(maxcolors=>2**30,@_); + if (!defined($self->{IMG})) { $self->{ERRSTR}='image is empty'; return undef; } + my $rc=i_count_colors($self->{IMG},$opts{'maxcolors'}); + return ($rc==-1? undef : $rc); +} + +# draw string to an image + +sub string { + my $self = shift; + unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; } + + my %input=('x'=>0, 'y'=>0, @_); + $input{string}||=$input{text}; + + unless(exists $input{string}) { + $self->{ERRSTR}="missing required parameter 'string'"; + return; + } + + unless($input{font}) { + $self->{ERRSTR}="missing required parameter 'font'"; + return; + } + + my $aa=1; + my $font=$input{'font'}; + my $align=$font->{'align'} unless exists $input{'align'}; + my $color=$input{'color'} || $font->{'color'}; + my $size=$input{'size'} || $font->{'size'}; + + if (!defined($size)) { $self->{ERRSTR}='No size parameter and no default in font'; return undef; } + + $aa=$font->{'aa'} if exists $font->{'aa'}; + $aa=$input{'aa'} if exists $input{'aa'}; + + + +# unless($font->can('text')) { +# $self->{ERRSTR}="font is unable to do what we need"; +# return; +# } + +# use Data::Dumper; +# warn Dumper($font); + +# print "Channel=".$input{'channel'}."\n"; + + if ( $font->{'type'} eq 't1' ) { + if ( exists $input{'channel'} ) { + Imager::Font::t1_set_aa_level($aa); + i_t1_cp($self->{IMG},$input{'x'},$input{'y'}, + $input{'channel'},$font->{'id'},$size, + $input{'string'},length($input{'string'}),1); + } else { + Imager::Font::t1_set_aa_level($aa); + i_t1_text($self->{IMG},$input{'x'},$input{'y'}, + $color,$font->{'id'},$size, + $input{'string'},length($input{'string'}),1); + } + } + + if ( $font->{'type'} eq 'tt' ) { + if ( exists $input{'channel'} ) { + i_tt_cp($font->{'id'},$self->{IMG},$input{'x'},$input{'y'},$input{'channel'}, + $size,$input{'string'},length($input{'string'}),$aa); + } else { + i_tt_text($font->{'id'},$self->{IMG},$input{'x'},$input{'y'},$color,$size, + $input{'string'},length($input{'string'}),$aa); + } + } + + return $self; +} + + + + + +# Shortcuts that can be exported + +sub newcolor { Imager::Color->new(@_); } +sub newfont { Imager::Font->new(@_); } + +*NC=*newcolour=*newcolor; +*NF=*newfont; + +*open=\&read; +*circle=\&arc; + + +#### Utility routines + +sub errstr { $_[0]->{ERRSTR} } + + + + + + +# Default guess for the type of an image from extension + +sub def_guess_type { + my $name=lc(shift); + my $ext; + $ext=($name =~ m/\.([^\.]+)$/)[0]; + return 'tiff' if ($ext =~ m/^tiff?$/); + return 'jpeg' if ($ext =~ m/^jpe?g$/); + return 'pnm' if ($ext =~ m/^p[pgb]m$/); + return 'png' if ($ext eq "png"); + return 'gif' if ($ext eq "gif"); + return (); +} + +# get the minimum of a list + +sub min { + my $mx=shift; + for(@_) { if ($_<$mx) { $mx=$_; }} + return $mx; +} + +# get the maximum of a list + +sub max { + my $mx=shift; + for(@_) { if ($_>$mx) { $mx=$_; }} + return $mx; +} + +# string stuff for iptc headers + +sub clean { + my($str)=$_[0]; + $str = substr($str,3); + $str =~ s/[\n\r]//g; + $str =~ s/\s+/ /g; + $str =~ s/^\s//; + $str =~ s/\s$//; + return $str; +} + +# A little hack to parse iptc headers. + +sub parseiptc { + my $self=shift; + my(@sar,$item,@ar); + my($caption,$photogr,$headln,$credit); + + my $str=$self->{IPTCRAW}; + + #print $str; + + @ar=split(/8BIM/,$str); + + my $i=0; + foreach (@ar) { + if (/^\004\004/) { + @sar=split(/\034\002/); + foreach $item (@sar) { + if ($item =~ m/^x/) { + $caption=&clean($item); + $i++; + } + if ($item =~ m/^P/) { + $photogr=&clean($item); + $i++; + } + if ($item =~ m/^i/) { + $headln=&clean($item); + $i++; + } + if ($item =~ m/^n/) { + $credit=&clean($item); + $i++; + } + } + } + } + return (caption=>$caption,photogr=>$photogr,headln=>$headln,credit=>$credit); +} + + + + + + +# Autoload methods go after =cut, and are processed by the autosplit program. + +1; +__END__ +# Below is the stub of documentation for your module. You better edit it! + +=head1 NAME + +Imager - Perl extension for Generating 24 bit Images + +=head1 SYNOPSIS + + use Imager qw(init); + + init(); + $img = Imager->new(); + $img->open(file=>'image.ppm',type=>'pnm') + || print "failed: ",$img->{ERRSTR},"\n"; + $scaled=$img->scale(xpixels=>400,ypixels=>400); + $scaled->write(file=>'sc_image.ppm',type=>'pnm') + || print "failed: ",$scaled->{ERRSTR},"\n"; + +=head1 DESCRIPTION + +Imager is a module for creating and altering images - It is not meant +as a replacement or a competitor to ImageMagick or GD. Both are +excellent packages and well supported. + +=head2 API + +Almost all functions take the parameters in the hash fashion. +Example: + + $img->open(file=>'lena.png',type=>'png'); + +or just: + + $img->open(file=>'lena.png'); + +=head2 Basic concept + +An Image object is created with C<$img = Imager-Enew()> Should +this fail for some reason an explanation can be found in +C<$Imager::ERRSTR> usually error messages are stored in +C<$img-E{ERRSTR}>, but since no object is created this is the only +way to give back errors. C<$Imager::ERRSTR> is also used to report +all errors not directly associated with an image object. Examples: + + $img=Imager->new(); # This is an empty image (size is 0 by 0) + $img->open(file=>'lena.png',type=>'png'); # initializes from file + +or if you want to create an empty image: + + $img=Imager->new(xsize=>400,ysize=>300,channels=>4); + +This example creates a completely black image of width 400 and +height 300 and 4 channels. + +If you have an existing image, use img_set() to change it's dimensions +- this will destroy any existing image data: + + $img->img_set(xsize=>500, ysize=>500, channels=>4); + +Color objects are created by calling the Imager::Color->new() +method: + + $color = Imager::Color->new($red, $green, $blue); + $color = Imager::Color->new($red, $green, $blue, $alpha); + $color = Imager::Color->new("#C0C0FF"); # html color specification + +This object can then be passed to functions that require a color parameter. + +Coordinates in Imager have the origin in the upper left corner. The +horizontal coordinate increases to the right and the vertical +downwards. + +=head2 Reading and writing images + +C<$img-Eread()> generally takes two parameters, 'file' and 'type'. +If the type of the file can be determined from the suffix of the file +it can be omitted. Format dependant parameters are: For images of +type 'raw' two extra parameters are needed 'xsize' and 'ysize', if the +'channel' parameter is omitted for type 'raw' it is assumed to be 3. +gif and png images might have a palette are converted to truecolor bit +when read. Alpha channel is preserved for png images irregardless of +them being in RGB or gray colorspace. Similarly grayscale jpegs are +one channel images after reading them. For jpeg images the iptc +header information (stored in the APP13 header) is avaliable to some +degree. You can get the raw header with C<$img-E{IPTCRAW}>, but +you can also retrieve the most basic information with +C<%hsh=$img-Eparseiptc()> as always patches are welcome. Neither +pnm nor tiff have extra options. Examples: + + $img = Imager->new(); + $img->read(file=>"cover.jpg") or die $img->errstr; # gets type from name + + $img = Imager->new(); + { local(*FH,$/); open(FH,"file.gif") or die $!; $a=; } + $img->read(data=>$a,type=>'gif') or die $img->errstr; + +The second example shows how to read an image from a scalar, this is +usefull if your data originates from somewhere else than a filesystem +such as a database over a DBI connection. + +*Note that load() is now an alias for read but will be removed later* + +C<$img-Ewrite> has the same interface as C. The earlier +comments on C for autodetecting filetypes apply. For jpegs +quality can be adjusted via the 'jpegquality' parameter (0-100). The +number of colorplanes in gifs are set with 'gifplanes' and should be +between 1 (2 color) and 8 (256 colors). It is also possible to choose +between two quantizing methods with the parameter 'gifquant'. If set +to mc it uses the mediancut algorithm from either giflibrary. If set +to lm it uses a local means algorithm. It is then possible to give +some extra settings. lmdither is the dither deviation amount in pixels +(manhattan distance). lmfixed can be an array ref who holds an array +of Imager::Color objects. Note that the local means algorithm needs +much more cpu time but also gives considerable better results than the +median cut algorithm. + +Currently just for gif files, you can specify various options for the +conversion from Imager's internal RGB format to the target's indexed +file format. If you set the gifquant option to 'gen', you can use the +options specified under L. + +To see what Imager is compiled to support the following code snippet +is sufficient: + + use Imager; + print "@{[keys %Imager::formats]}"; + +=head2 Multi-image files + +Currently just for gif files, you can create files that contain more +than one image. + +To do this: + + Imager->write_multi(\%opts, @images) + +Where %opts describes 3 possible types of outputs: + +=over 4 + +=item callback + +A code reference which is called with a single parameter, the data to +be written. You can also specify $opts{maxbuffer} which is the +maximum amount of data buffered. Note that there can be larger writes +than this if the file library writes larger blocks. A smaller value +maybe useful for writing to a socket for incremental display. + +=item fd + +The file descriptor to save the images to. + +=item file + +The name of the file to write to. + +%opts may also include the keys from L and L. + +=back + +The current aim is to support other multiple image formats in the +future, such as TIFF, and to support reading multiple images from a +single file. + +A simple example: + + my @images; + # ... code to put images in @images + Imager->write_multi({type=>'gif', + file=>'anim.gif', + gif_delays=>[ 10 x @images ] }, + @images) + or die "Oh dear!"; + +=head2 Gif options + +These options can be specified when calling write_multi() for gif +files, when writing a single image with the gifquant option set to +'gen', or for direct calls to i_writegif_gen and i_writegif_callback. + +Note that some viewers will ignore some of these options +(gif_user_input in particular). + +=over 4 + +=item gif_each_palette + +Each image in the gif file has it's own palette if this is non-zero. +All but the first image has a local colour table (the first uses the +global colour table. + +=item interlace + +The images are written interlaced if this is non-zero. + +=item gif_delays + +A reference to an array containing the delays between images, in 1/100 +seconds. + +=item gif_user_input + +A reference to an array contains user input flags. If the given flag +is non-zero the image viewer should wait for input before displaying +the next image. + +=item gif_disposal + +A reference to an array of image disposal methods. These define what +should be done to the image before displaying the next one. These are +integers, where 0 means unspecified, 1 means the image should be left +in place, 2 means restore to background colour and 3 means restore to +the previous value. + +=item gif_tran_color + +A reference to an Imager::Color object, which is the colour to use for +the palette entry used to represent transparency in the palette. + +=item gif_positions + +A reference to an array of references to arrays which represent screen +positions for each image. + +=item gif_loop_count + +If this is non-zero the Netscape loop extension block is generated, +which makes the animation of the images repeat. + +This is currently unimplemented due to some limitations in giflib. + +=back + +=head2 Quantization options + +These options can be specified when calling write_multi() for gif +files, when writing a single image with the gifquant option set to +'gen', or for direct calls to i_writegif_gen and i_writegif_callback. + +=over 4 + +=item colors + +A arrayref of colors that are fixed. Note that some color generators +will ignore this. + +=item transp + +The type of transparency processing to perform for images with an +alpha channel where the output format does not have a proper alpha +channel (eg. gif). This can be any of: + +=over 4 + +=item none + +No transparency processing is done. (default) + +=item threshold + +Pixels more transparent that tr_threshold are rendered as transparent. + +=item errdiff + +An error diffusion dither is done on the alpha channel. Note that +this is independent of the translation performed on the colour +channels, so some combinations may cause undesired artifacts. + +=item ordered + +The ordered dither specified by tr_orddith is performed on the alpha +channel. + +=back + +=item tr_threshold + +The highest alpha value at which a pixel will be made transparent when +transp is 'threshold'. (0-255, default 127) + +=item tr_errdiff + +The type of error diffusion to perform on the alpha channel when +transp is 'errdiff'. This can be any defined error diffusion type +except for custom (see errdiff below). + +=item tr_ordered + +The type of ordered dither to perform on the alpha channel when transp +is 'orddith'. Possible values are: + +=over 4 + +=item random + +A semi-random map is used. The map is the same each time. Currently +the default (which may change.) + +=item dot8 + +8x8 dot dither. + +=item dot4 + +4x4 dot dither + +=item hline + +horizontal line dither. + +=item vline + +vertical line dither. + +=item "/line" + +=item slashline + +diagonal line dither + +=item '\line' + +=item backline + +diagonal line dither + +=item custom + +A custom dither matrix is used - see tr_map + +=back + +=item tr_map + +When tr_orddith is custom this defines an 8 x 8 matrix of integers +representing the transparency threshold for pixels corresponding to +each position. This should be a 64 element array where the first 8 +entries correspond to the first row of the matrix. Values should be +betweern 0 and 255. + +=item make_colors + +Defines how the quantization engine will build the palette(s). +Currently this is ignored if 'translate' is 'giflib', but that may +change. Possible values are: + +=over 4 + +=item none + +Only colors supplied in 'colors' are used. + +=item webmap + +The web color map is used (need url here.) + +=item addi + +The original code for generating the color map (Addi's code) is used. + +=back + +Other methods may be added in the future. + +=item colors + +A arrayref containing Imager::Color objects, which represents the +starting set of colors to use in translating the images. webmap will +ignore this. The final colors used are copied back into this array +(which is expanded if necessary.) + +=item max_colors + +The maximum number of colors to use in the image. + +=item translate + +The method used to translate the RGB values in the source image into +the colors selected by make_colors. Note that make_colors is ignored +whene translate is 'giflib'. + +Possible values are: + +=over 4 + +=item giflib + +The giflib native quantization function is used. + +=item closest + +The closest color available is used. + +=item perturb + +The pixel color is modified by perturb, and the closest color is chosen. + +=item errdiff + +An error diffusion dither is performed. + +=back + +It's possible other transate values will be added. + +=item errdiff + +The type of error diffusion dither to perform. These values (except +for custom) can also be used in tr_errdif. + +=over 4 + +=item floyd + +Floyd-Steinberg dither + +=item jarvis + +Jarvis, Judice and Ninke dither + +=item stucki + +Stucki dither + +=item custom + +Custom. If you use this you must also set errdiff_width, +errdiff_height and errdiff_map. + +=back + +=item errdiff_width + +=item errdiff_height + +=item errdiff_orig + +=item errdiff_map + +When translate is 'errdiff' and errdiff is 'custom' these define a +custom error diffusion map. errdiff_width and errdiff_height define +the size of the map in the arrayref in errdiff_map. errdiff_orig is +an integer which indicates the current pixel position in the top row +of the map. + +=item perturb + +When translate is 'perturb' this is the magnitude of the random bias +applied to each channel of the pixel before it is looked up in the +color table. + +=back + +=head2 Obtaining/setting attributes of images + +To get the size of an image in pixels the C<$img-Egetwidth()> and +C<$img-Egetheight()> are used. + +To get the number of channels in +an image C<$img-Egetchannels()> is used. $img-Egetmask() and +$img-Esetmask() are used to get/set the channel mask of the image. + + $mask=$img->getmask(); + $img->setmask(mask=>1+2); # modify red and green only + $img->setmask(mask=>8); # modify alpha only + $img->setmask(mask=>$mask); # restore previous mask + +The mask of an image describes which channels are updated when some +operation is performed on an image. Naturally it is not possible to +apply masks to operations like scaling that alter the dimensions of +images. + +It is possible to have Imager find the number of colors in an image +by using C<$img-Egetcolorcount()>. It requires memory proportionally +to the number of colors in the image so it is possible to have it +stop sooner if you only need to know if there are more than a certain number +of colors in the image. If there are more colors than asked for +the function return undef. Examples: + + if (!defined($img->getcolorcount(maxcolors=>512)) { + print "Less than 512 colors in image\n"; + } + +=head2 Drawing Methods + +IMPLEMENTATION MORE OR LESS DONE CHECK THE TESTS + +DOCUMENTATION OF THIS SECTION OUT OF SYNC + +It is possible to draw with graphics primitives onto images. Such +primitives include boxes, arcs, circles and lines. A reference +oriented list follows. + +Box: + $img->box(color=>$blue,xmin=>10,ymin=>30,xmax=>200,ymax=>300,filled=>1); + +The above example calls the C method for the image and the box +covers the pixels with in the rectangle specified. If C is +ommited it is drawn as an outline. If any of the edges of the box are +ommited it will snap to the outer edge of the image in that direction. +Also if a color is omitted a color with (255,255,255,255) is used +instead. + +Arc: + $img->arc(color=>$red, r=20, x=>200, y=>100, d1=>10, d2=>20 ); + +This creates a filled red arc with a 'center' at (200, 100) and spans +10 degrees and the slice has a radius of 20. SEE section on BUGS. + +Circle: + $img->circle(color=>$green, r=50, x=>200, y=>100); + +This creates a green circle with its center at (200, 100) and has a +radius of 20. + +Line: + $img->line(color=>$green, x1=10, x2=>100, + y1=>20, y2=>50, antialias=>1 ); + +That draws an antialiased line from (10,100) to (20,50). + +Polyline: + $img->polyline(points=>[[$x0,$y0],[$x1,$y1],[$x2,$y2]],color=>$red); + $img->polyline(x=>[$x0,$x1,$x2], y=>[$y0,$y1,$y2], antialias=>1); + +Polyline is used to draw multilple lines between a series of points. +The point set can either be specified as an arrayref to an array of +array references (where each such array represents a point). The +other way is to specify two array references. + +=head2 Text rendering + +Text rendering is described in the Imager::Font manpage. + +=head2 Image resizing + +To scale an image so porportions are maintained use the +C<$img-Escale()> method. if you give either a xpixels or ypixels +parameter they will determine the width or height respectively. If +both are given the one resulting in a larger image is used. example: +C<$img> is 700 pixels wide and 500 pixels tall. + + $img->scale(xpixels=>400); # 400x285 + $img->scale(ypixels=>400); # 560x400 + + $img->scale(xpixels=>400,ypixels=>400); # 560x400 + $img->scale(xpixels=>400,ypixels=>400,type=>min); # 400x285 + + $img->scale(scalefactor=>0.25); 175x125 $img->scale(); # 350x250 + +if you want to create low quality previews of images you can pass +C'preview'> to scale and it will use nearest neighbor +sampling instead of filtering. It is much faster but also generates +worse looking images - especially if the original has a lot of sharp +variations and the scaled image is by more than 3-5 times smaller than +the original. + +If you need to scale images per axis it is best to do it simply by +calling scaleX and scaleY. You can pass either 'scalefactor' or +'pixels' to both functions. + +Another way to resize an image size is to crop it. The parameters +to crop are the edges of the area that you want in the returned image. +If a parameter is omited a default is used instead. + + $newimg = $img->crop(left=>50, right=>100, top=>10, bottom=>100); + $newimg = $img->crop(left=>50, top=>10, width=>50, height=>90); + $newimg = $img->crop(left=>50, right=>100); # top + +You can also specify width and height parameters which will produce a +new image cropped from the center of the input image, with the given +width and height. + + $newimg = $img->crop(width=>50, height=>50); + +The width and height parameters take precedence over the left/right +and top/bottom parameters respectively. + +=head2 Copying images + +To create a copy of an image use the C method. This is usefull +if you want to keep an original after doing something that changes the image +inplace like writing text. + + $img=$orig->copy(); + +To copy an image to onto another image use the C method. + + $dest->paste(left=>40,top=>20,img=>$logo); + +That copies the entire C<$logo> image onto the C<$dest> image so that the +upper left corner of the C<$logo> image is at (40,20). + +=head2 Blending Images + +To put an image or a part of an image directly into another it is +best to call the C method on the image you want to add to. + + $img->paste(img=>$srcimage,left=>30,top=>50); + +That will take paste C<$srcimage> into C<$img> with the upper +left corner at (30,50). If no values are given for C +or C they will default to 0. + +A more complicated way of blending images is where one image is +put 'over' the other with a certain amount of opaqueness. The +method that does this is rubthrough. + + $img->rubthrough(src=>$srcimage,tx=>30,ty=>50); + +That will take the image C<$srcimage> and overlay it with the +upper left corner at (30,50). The C<$srcimage> must be a 4 channel +image. The last channel is used as an alpha channel. + + +=head2 Filters + +A special image method is the filter method. An example is: + + $img->filter(type=>'autolevels'); + +This will call the autolevels filter. Here is a list of the filters +that are always avaliable in Imager. This list can be obtained by +running the C script that comes with the module +source. + + Filter Arguments + turbnoise + autolevels lsat(0.1) usat(0.1) skew(0) + radnoise + noise amount(3) subtype(0) + contrast intensity + hardinvert + gradgen xo yo colors dist + +The default values are in parenthesis. All parameters must have some +value but if a parameter has a default value it may be omitted when +calling the filter function. + +FIXME: make a seperate pod for filters? + +=head2 Transformations + +Another special image method is transform. It can be used to generate +warps and rotations and such features. It can be given the operations +in postfix notation or the module Affix::Infix2Postfix can be used. +Look in the test case t/t55trans.t for an example. + +transform() needs expressions (or opcodes) that determine the source +pixel for each target pixel. Source expressions are infix expressions +using any of the +, -, *, / or ** binary operators, the - unary +operator, ( and ) for grouping and the sin() and cos() functions. The +target pixel is input as the variables x and y. + +You specify the x and y expressions as xexpr and yexpr respectively. +You can also specify opcodes directly, but that's magic deep enough +that you can look at the source code. + +You can still use the transform() function, but the transform2() +function is just as fast and is more likely to be enhanced and +maintained. + +Later versions of Imager also support a transform2() class method +which allows you perform a more general set of operations, rather than +just specifying a spatial transformation as with the transform() +method, you can also perform colour transformations, image synthesis +and image combinations. + +transform2() takes an reference to an options hash, and a list of +images to operate one (this list may be empty): + + my %opts; + my @imgs; + ... + my $img = Imager::transform2(\%opts, @imgs) + or die "transform2 failed: $Imager::ERRSTR"; + +The options hash may define a transformation function, and optionally: + +=over 4 + +=item * + +width - the width of the image in pixels. If this isn't supplied the +width of the first input image is used. If there are no input images +an error occurs. + +=item * + +height - the height of the image in pixels. If this isn't supplied +the height of the first input image is used. If there are no input +images an error occurs. + +=item * + +constants - a reference to hash of constants to define for the +expression engine. Some extra constants are defined by Imager + +=back + +The tranformation function is specified using either the expr or +rpnexpr member of the options. + +=over 4 + +=item Infix expressions + +You can supply infix expressions to transform 2 with the expr keyword. + +$opts{expr} = 'return getp1(w-x, h-y)' + +The 'expression' supplied follows this general grammar: + + ( identifier '=' expr ';' )* 'return' expr + +This allows you to simplify your expressions using variables. + +A more complex example might be: + +$opts{expr} = 'pix = getp1(x,y); return if(value(pix)>0.8,pix*0.8,pix)' + +Currently to use infix expressions you must have the Parse::RecDescent +module installed (available from CPAN). There is also what might be a +significant delay the first time you run the infix expression parser +due to the compilation of the expression grammar. + +=item Postfix expressions + +You can supply postfix or reverse-polish notation expressions to +transform2() through the rpnexpr keyword. + +The parser for rpnexpr emulates a stack machine, so operators will +expect to see their parameters on top of the stack. A stack machine +isn't actually used during the image transformation itself. + +You can store the value at the top of the stack in a variable called +foo using !foo and retrieve that value again using @foo. The !foo +notation will pop the value from the stack. + +An example equivalent to the infix expression above: + + $opts{rpnexpr} = 'x y getp1 !pix @pix value 0.8 gt @pix 0.8 * @pix ifp' + +=back + +transform2() has a fairly rich range of operators. + +=over 4 + +=item +, *, -, /, %, ** + +multiplication, addition, subtraction, division, remainder and +exponentiation. Multiplication, addition and subtraction can be used +on colour values too - though you need to be careful - adding 2 white +values together and multiplying by 0.5 will give you grey, not white. + +Division by zero (or a small number) just results in a large number. +Modulo zero (or a small number) results in zero. + +=item sin(N), cos(N), atan2(y,x) + +Some basic trig functions. They work in radians, so you can't just +use the hue values. + +=item distance(x1, y1, x2, y2) + +Find the distance between two points. This is handy (along with +atan2()) for producing circular effects. + +=item sqrt(n) + +Find the square root. I haven't had much use for this since adding +the distance() function. + +=item abs(n) + +Find the absolute value. + +=item getp1(x,y), getp2(x,y), getp3(x, y) + +Get the pixel at position (x,y) from the first, second or third image +respectively. I may add a getpn() function at some point, but this +prevents static checking of the instructions against the number of +images actually passed in. + +=item value(c), hue(c), sat(c), hsv(h,s,v) + +Separates a colour value into it's value (brightness), hue (colour) +and saturation elements. Use hsv() to put them back together (after +suitable manipulation). + +=item red(c), green(c), blue(c), rgb(r,g,b) + +Separates a colour value into it's red, green and blue colours. Use +rgb(r,g,b) to put it back together. + +=item int(n) + +Convert a value to an integer. Uses a C int cast, so it may break on +large values. + +=item if(cond,ntrue,nfalse), if(cond,ctrue,cfalse) + +A simple (and inefficient) if function. + +=item <=,<,==,>=,>,!= + +Relational operators (typically used with if()). Since we're working +with floating point values the equalities are 'near equalities' - an +epsilon value is used. + +=item &&, ||, not(n) + +Basic logical operators. + +=back + +A few examples: + +=over 4 + +=item rpnexpr=>'x 25 % 15 * y 35 % 10 * getp1 !pat x y getp1 !pix @pix sat 0.7 gt @pat @pix ifp' + +tiles a smaller version of the input image over itself where the colour has a saturation over 0.7. + +=item rpnexpr=>'x 25 % 15 * y 35 % 10 * getp1 !pat y 360 / !rat x y getp1 1 @rat - pmult @pat @rat pmult padd' + +tiles the input image over itself so that at the top of the image the +full-size image is at full strength and at the bottom the tiling is +most visible. + +=item rpnexpr=>'x y getp1 !pix @pix value 0.96 gt @pix sat 0.1 lt and 128 128 255 rgb @pix ifp' + +replace pixels that are white or almost white with a palish blue + +=item rpnexpr=>'x 35 % 10 * y 45 % 8 * getp1 !pat x y getp1 !pix @pix sat 0.2 lt @pix value 0.9 gt and @pix @pat @pix value 2 / 0.5 + pmult ifp' + +Tiles the input image overitself where the image isn't white or almost +white. + +=item rpnexpr=>'x y 160 180 distance !d y 180 - x 160 - atan2 !a @d 10 / @a + 3.1416 2 * % !a2 @a2 180 * 3.1416 / 1 @a2 sin 1 + 2 / hsv' + +Produces a spiral. + +=item rpnexpr=>'x y 160 180 distance !d y 180 - x 160 - atan2 !a @d 10 / @a + 3.1416 2 * % !a2 @a 180 * 3.1416 / 1 @a2 sin 1 + 2 / hsv' + +A spiral built on top of a colour wheel. + +=back + +For details on expression parsing see L. For details on +the virtual machine used to transform the images, see +L. + +=head2 Plugins + +It is possible to add filters to the module without recompiling the +module itself. This is done by using DSOs (Dynamic shared object) +avaliable on most systems. This way you can maintain our own filters +and not have to get me to add it, or worse patch every new version of +the Module. Modules can be loaded AND UNLOADED at runtime. This +means that you can have a server/daemon thingy that can do something +like: + + load_plugin("dynfilt/dyntest.so") || die "unable to load plugin\n"; + %hsh=(a=>35,b=>200,type=>lin_stretch); + $img->filter(%hsh); + unload_plugin("dynfilt/dyntest.so") || die "unable to load plugin\n"; + $img->write(type=>'pnm',file=>'testout/t60.jpg') + || die "error in write()\n"; + +Someone decides that the filter is not working as it should - +dyntest.c modified and recompiled. + + load_plugin("dynfilt/dyntest.so") || die "unable to load plugin\n"; + $img->filter(%hsh); + +An example plugin comes with the module - Please send feedback to +addi@umich.edu if you test this. + +Note: This seems to test ok on the following systems: +Linux, Solaris, HPUX, OpenBSD, FreeBSD, TRU64/OSF1, AIX. +If you test this on other systems please let me know. + +=head1 BUGS + +box, arc, circle do not support antialiasing yet. arc, is only filled +as of yet. Some routines do not return $self where they should. This +affects code like this, C<$img-Ebox()-Earc()> where an object +is expected. + +When saving Gif images the program does NOT try to shave of extra +colors if it is possible. If you specify 128 colors and there are +only 2 colors used - it will have a 128 colortable anyway. + +=head1 AUTHOR + +Arnar M. Hrafnkelsson, addi@umich.edu +And a great deal of help from others - see the README for a complete +list. +=head1 SEE ALSO + +perl(1), Imager::Color(3), Affix::Infix2Postfix(3), Parse::RecDescent(3) +http://www.eecs.umich.edu/~addi/perl/Imager/ + + +=cut diff --git a/Imager.xs b/Imager.xs new file mode 100644 index 00000000..e702bf1f --- /dev/null +++ b/Imager.xs @@ -0,0 +1,1813 @@ +#ifdef __cplusplus +extern "C" { +#endif +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" +#include "ppport.h" +#ifdef __cplusplus + +#endif + +#include "image.h" +#include "feat.h" +#include "dynaload.h" +#include "regmach.h" + +typedef io_glue* Imager__IO; +typedef i_color* Imager__Color; +typedef i_img* Imager__ImgRaw; + + +#ifdef HAVE_LIBTT +typedef TT_Fonthandle* Imager__TTHandle; +#endif + +typedef struct i_reader_data_tag +{ + /* presumably a CODE ref or name of a sub */ + SV *sv; +} i_reader_data; + +/* used by functions that want callbacks */ +static int read_callback(char *userdata, char *buffer, int need, int want) { + i_reader_data *rd = (i_reader_data *)userdata; + int count; + int result; + SV *data; + dSP; dTARG = sv_newmortal(); + /* thanks to Simon Cozens for help with the dTARG above */ + + ENTER; + SAVETMPS; + EXTEND(SP, 2); + PUSHMARK(SP); + PUSHi(want); + PUSHi(need); + PUTBACK; + + count = perl_call_sv(rd->sv, G_SCALAR); + + SPAGAIN; + + if (count != 1) + croak("Result of perl_call_sv(..., G_SCALAR) != 1"); + + data = POPs; + + if (SvOK(data)) { + STRLEN len; + char *ptr = SvPV(data, len); + if (len > want) + croak("Too much data returned in reader callback"); + + memcpy(buffer, ptr, len); + result = len; + } + else { + result = -1; + } + + PUTBACK; + FREETMPS; + LEAVE; + + return result; +} + +typedef struct +{ + SV *sv; /* a coderef or sub name */ +} i_writer_data; + +/* used by functions that want callbacks */ +static int write_callback(char *userdata, char const *data, int size) { + i_writer_data *wd = (i_writer_data *)userdata; + int count; + int success; + SV *sv; + dSP; + + ENTER; + SAVETMPS; + EXTEND(SP, 1); + PUSHMARK(SP); + XPUSHs(sv_2mortal(newSVpv((char *)data, size))); + PUTBACK; + + count = perl_call_sv(wd->sv, G_SCALAR); + + SPAGAIN; + + if (count != 1) + croak("Result of perl_call_sv(..., G_SCALAR) != 1"); + + sv = POPs; + success = SvTRUE(sv); + + + PUTBACK; + FREETMPS; + LEAVE; + + return success; +} + +struct value_name { + char *name; + int value; +}; +static int lookup_name(struct value_name *names, int count, char *name, int def_value) +{ + int i; + for (i = 0; i < count; ++i) + if (strEQ(names[i].name, name)) + return names[i].value; + + return def_value; +} +static struct value_name transp_names[] = +{ + { "none", tr_none }, + { "threshold", tr_threshold }, + { "errdiff", tr_errdiff }, + { "ordered", tr_ordered, }, +}; + +static struct value_name make_color_names[] = +{ + { "none", mc_none, }, + { "webmap", mc_web_map, }, + { "addi", mc_addi, }, +}; + +static struct value_name translate_names[] = +{ +#ifdef HAVE_LIBGIF + { "giflib", pt_giflib, }, +#endif + { "closest", pt_closest, }, + { "perturb", pt_perturb, }, + { "errdiff", pt_errdiff, }, +}; + +static struct value_name errdiff_names[] = +{ + { "floyd", ed_floyd, }, + { "jarvis", ed_jarvis, }, + { "stucki", ed_stucki, }, + { "custom", ed_custom, }, +}; + +static struct value_name orddith_names[] = +{ + { "random", od_random, }, + { "dot8", od_dot8, }, + { "dot4", od_dot4, }, + { "hline", od_hline, }, + { "vline", od_vline, }, + { "/line", od_slashline, }, + { "slashline", od_slashline, }, + { "\\line", od_backline, }, + { "backline", od_backline, }, + { "custom", od_custom, }, +}; + +/* look through the hash for quantization options */ +static void handle_quant_opts(i_quantize *quant, HV *hv) +{ + /*** POSSIBLY BROKEN: do I need to unref the SV from hv_fetch ***/ + SV **sv; + int i; + STRLEN len; + char *str; + + sv = hv_fetch(hv, "transp", 6, 0); + if (sv && *sv && (str = SvPV(*sv, len))) { + quant->transp = + lookup_name(transp_names, sizeof(transp_names)/sizeof(*transp_names), + str, tr_none); + if (quant->transp != tr_none) { + quant->tr_threshold = 127; + sv = hv_fetch(hv, "tr_threshold", 12, 0); + if (sv && *sv) + quant->tr_threshold = SvIV(*sv); + } + if (quant->transp == tr_errdiff) { + sv = hv_fetch(hv, "tr_errdiff", 10, 0); + if (sv && *sv && (str = SvPV(*sv, len))) + quant->tr_errdiff = lookup_name(errdiff_names, sizeof(errdiff_names)/sizeof(*errdiff_names), str, ed_floyd); + } + if (quant->transp == tr_ordered) { + quant->tr_orddith = od_random; + sv = hv_fetch(hv, "tr_orddith", 10, 0); + if (sv && *sv && (str = SvPV(*sv, len))) + quant->tr_orddith = lookup_name(orddith_names, sizeof(orddith_names)/sizeof(*orddith_names), str, od_random); + + if (quant->tr_orddith == od_custom) { + sv = hv_fetch(hv, "tr_map", 6, 0); + if (sv && *sv && SvTYPE(SvRV(*sv)) == SVt_PVAV) { + AV *av = (AV*)SvRV(*sv); + len = av_len(av) + 1; + if (len > sizeof(quant->tr_custom)) + len = sizeof(quant->tr_custom); + for (i = 0; i < len; ++i) { + SV **sv2 = av_fetch(av, i, 0); + if (sv2 && *sv2) { + quant->tr_custom[i] = SvIV(*sv2); + } + } + while (i < sizeof(quant->tr_custom)) + quant->tr_custom[i++] = 0; + } + } + } + } + quant->make_colors = mc_addi; + sv = hv_fetch(hv, "make_colors", 11, 0); + if (sv && *sv && (str = SvPV(*sv, len))) { + quant->make_colors = + lookup_name(make_color_names, sizeof(make_color_names)/sizeof(*make_color_names), str, mc_addi); + } + sv = hv_fetch(hv, "colors", 6, 0); + if (sv && *sv && SvROK(*sv) && SvTYPE(SvRV(*sv)) == SVt_PVAV) { + /* needs to be an array of Imager::Color + note that the caller allocates the mc_color array and sets mc_size + to it's size */ + AV *av = (AV *)SvRV(*sv); + quant->mc_count = av_len(av)+1; + if (quant->mc_count > quant->mc_size) + quant->mc_count = quant->mc_size; + for (i = 0; i < quant->mc_count; ++i) { + SV **sv1 = av_fetch(av, i, 0); + if (sv1 && *sv1 && SvROK(*sv1) && sv_derived_from(*sv1, "Imager::Color")) { + i_color *col = (i_color *)SvIV((SV*)SvRV(*sv1)); + quant->mc_colors[i] = *col; + } + } + } + sv = hv_fetch(hv, "max_colors", 10, 0); + if (sv && *sv) { + i = SvIV(*sv); + if (i <= quant->mc_size && i >= quant->mc_count) + quant->mc_size = i; + } + + quant->translate = pt_closest; + sv = hv_fetch(hv, "translate", 9, 0); + if (sv && *sv && (str = SvPV(*sv, len))) { + quant->translate = lookup_name(translate_names, sizeof(translate_names)/sizeof(*translate_names), str, pt_closest); + } + sv = hv_fetch(hv, "errdiff", 7, 0); + if (sv && *sv && (str = SvPV(*sv, len))) { + quant->errdiff = lookup_name(errdiff_names, sizeof(errdiff_names)/sizeof(*errdiff_names), str, ed_floyd); + } + if (quant->translate == pt_errdiff && quant->errdiff == ed_custom) { + /* get the error diffusion map */ + sv = hv_fetch(hv, "errdiff_width", 13, 0); + if (sv && *sv) + quant->ed_width = SvIV(*sv); + sv = hv_fetch(hv, "errdiff_height", 14, 0); + if (sv && *sv) + quant->ed_height = SvIV(*sv); + sv = hv_fetch(hv, "errdiff_orig", 12, 0); + if (sv && *sv) + quant->ed_orig = SvIV(*sv); + if (quant->ed_width > 0 && quant->ed_height > 0) { + int sum = 0; + quant->ed_map = mymalloc(sizeof(int)*quant->ed_width*quant->ed_height); + sv = hv_fetch(hv, "errdiff_map", 11, 0); + if (sv && *sv && SvROK(*sv) && SvTYPE(SvRV(*sv)) == SVt_PVAV) { + AV *av = (AV*)SvRV(*sv); + len = av_len(av) + 1; + if (len > quant->ed_width * quant->ed_height) + len = quant->ed_width * quant->ed_height; + for (i = 0; i < len; ++i) { + SV **sv2 = av_fetch(av, i, 0); + if (sv2 && *sv2) { + quant->ed_map[i] = SvIV(*sv2); + sum += quant->ed_map[i]; + } + } + } + if (!sum) { + /* broken map */ + myfree(quant->ed_map); + quant->ed_map = 0; + quant->errdiff = ed_floyd; + } + } + } + sv = hv_fetch(hv, "perturb", 7, 0); + if (sv && *sv) + quant->perturb = SvIV(*sv); +} + +/* look through the hash for options to add to opts */ +static void handle_gif_opts(i_gif_opts *opts, HV *hv) +{ + /*** FIXME: POSSIBLY BROKEN: do I need to unref the SV from hv_fetch? ***/ + SV **sv; + int i; + /**((char *)0) = '\0';*/ + sv = hv_fetch(hv, "gif_each_palette", 16, 0); + if (sv && *sv) + opts->each_palette = SvIV(*sv); + sv = hv_fetch(hv, "interlace", 9, 0); + if (sv && *sv) + opts->interlace = SvIV(*sv); + sv = hv_fetch(hv, "gif_delays", 10, 0); + if (sv && *sv && SvROK(*sv) && SvTYPE(SvRV(*sv)) == SVt_PVAV) { + AV *av = (AV*)SvRV(*sv); + opts->delay_count = av_len(av)+1; + opts->delays = mymalloc(sizeof(int) * opts->delay_count); + for (i = 0; i < opts->delay_count; ++i) { + SV *sv1 = *av_fetch(av, i, 0); + opts->delays[i] = SvIV(sv1); + } + } + sv = hv_fetch(hv, "gif_user_input", 14, 0); + if (sv && *sv && SvROK(*sv) && SvTYPE(SvRV(*sv)) == SVt_PVAV) { + AV *av = (AV*)SvRV(*sv); + opts->user_input_count = av_len(av)+1; + opts->user_input_flags = mymalloc(opts->user_input_count); + for (i = 0; i < opts->user_input_count; ++i) { + SV *sv1 = *av_fetch(av, i, 0); + opts->user_input_flags[i] = SvIV(sv1) != 0; + } + } + sv = hv_fetch(hv, "gif_disposal", 12, 0); + if (sv && *sv && SvROK(*sv) && SvTYPE(SvRV(*sv)) == SVt_PVAV) { + AV *av = (AV*)SvRV(*sv); + opts->disposal_count = av_len(av)+1; + opts->disposal = mymalloc(opts->disposal_count); + for (i = 0; i < opts->disposal_count; ++i) { + SV *sv1 = *av_fetch(av, i, 0); + opts->disposal[i] = SvIV(sv1); + } + } + sv = hv_fetch(hv, "gif_tran_color", 14, 0); + if (sv && *sv && SvROK(*sv) && sv_derived_from(*sv, "Imager::Color")) { + i_color *col = (i_color *)SvIV((SV *)SvRV(*sv)); + opts->tran_color = *col; + } + sv = hv_fetch(hv, "gif_positions", 13, 0); + if (sv && *sv && SvROK(*sv) && SvTYPE(SvRV(*sv)) == SVt_PVAV) { + AV *av = (AV *)SvRV(*sv); + opts->position_count = av_len(av) + 1; + opts->positions = mymalloc(sizeof(i_gif_pos) * opts->position_count); + for (i = 0; i < opts->position_count; ++i) { + SV **sv2 = av_fetch(av, i, 0); + opts->positions[i].x = opts->positions[i].y = 0; + if (sv && *sv && SvROK(*sv) && SvTYPE(SvRV(*sv)) == SVt_PVAV) { + AV *av2 = (AV*)SvRV(*sv2); + SV **sv3; + sv3 = av_fetch(av2, 0, 0); + if (sv3 && *sv3) + opts->positions[i].x = SvIV(*sv3); + sv3 = av_fetch(av2, 1, 0); + if (sv3 && *sv3) + opts->positions[i].y = SvIV(*sv3); + } + } + } + /* Netscape2.0 loop count extension */ + sv = hv_fetch(hv, "gif_loop_count", 14, 0); + if (sv && *sv) + opts->loop_count = SvIV(*sv); +} + +/* copies the color map from the hv into the colors member of the HV */ +static void copy_colors_back(HV *hv, i_quantize *quant) { + SV **sv; + AV *av; + int i; + SV *work; + + sv = hv_fetch(hv, "colors", 6, 0); + if (!sv || !*sv || !SvROK(*sv) || SvTYPE(SvRV(*sv)) != SVt_PVAV) { + SV *ref; + av = newAV(); + ref = newRV_inc((SV*) av); + sv = hv_store(hv, "colors", 6, ref, 0); + } + else { + av = (AV *)SvRV(*sv); + } + av_extend(av, quant->mc_count+1); + for (i = 0; i < quant->mc_count; ++i) { + i_color *in = quant->mc_colors+i; + Imager__Color c = ICL_new_internal(in->rgb.r, in->rgb.g, in->rgb.b, 255); + work = sv_newmortal(); + sv_setref_pv(work, "Imager::Color", (void *)c); + SvREFCNT_inc(work); + if (!av_store(av, i, work)) { + SvREFCNT_dec(work); + } + } +} + +/* used to make the typemap happy */ +typedef HV *HASH; + +MODULE = Imager PACKAGE = Imager::Color PREFIX = ICL_ + +Imager::Color +ICL_new_internal(r,g,b,a) + unsigned char r + unsigned char g + unsigned char b + unsigned char a + +void +ICL_DESTROY(cl) + Imager::Color cl + + +Imager::Color +ICL_set_internal(cl,r,g,b,a) + Imager::Color cl + unsigned char r + unsigned char g + unsigned char b + unsigned char a + + +void +ICL_info(cl) + Imager::Color cl + + +void +ICL_rgba(cl) + Imager::Color cl + PPCODE: + EXTEND(SP, 4); + PUSHs(sv_2mortal(newSVnv(cl->rgba.r))); + PUSHs(sv_2mortal(newSVnv(cl->rgba.g))); + PUSHs(sv_2mortal(newSVnv(cl->rgba.b))); + PUSHs(sv_2mortal(newSVnv(cl->rgba.a))); + + + + + + + +MODULE = Imager PACKAGE = Imager::ImgRaw PREFIX = IIM_ + +Imager::ImgRaw +IIM_new(x,y,ch) + int x + int y + int ch + +void +IIM_DESTROY(im) + Imager::ImgRaw im + + + +MODULE = Imager PACKAGE = Imager + +PROTOTYPES: ENABLE + + +Imager::IO +io_new_fd(fd) + int fd + +Imager::IO +io_new_bufchain() + + +void +io_slurp(ig) + Imager::IO ig + PREINIT: + unsigned char* data; + size_t tlength; + SV* r; + PPCODE: + data = NULL; + tlength = io_slurp(ig, &data); + r = sv_newmortal(); + EXTEND(SP,1); + PUSHs(sv_2mortal(newSVpv(data,tlength))); + myfree(data); + + + +void +i_list_formats() + PREINIT: + char* item; + int i; + PPCODE: + i=0; + while( (item=i_format_list[i++]) != NULL ) { + EXTEND(SP, 1); + PUSHs(sv_2mortal(newSVpv(item,0))); + } + +undef_int +i_has_format(frmt) + char* frmt + +Imager::ImgRaw +i_img_new() + +Imager::ImgRaw +i_img_empty(im,x,y) + Imager::ImgRaw im + int x + int y + +Imager::ImgRaw +i_img_empty_ch(im,x,y,ch) + Imager::ImgRaw im + int x + int y + int ch + +void +init_log(name,level) + char* name + int level + +void +i_img_exorcise(im) + Imager::ImgRaw im + +void +i_img_destroy(im) + Imager::ImgRaw im + +void +i_img_info(im) + Imager::ImgRaw im + PREINIT: + int info[4]; + PPCODE: + i_img_info(im,info); + EXTEND(SP, 4); + PUSHs(sv_2mortal(newSViv(info[0]))); + PUSHs(sv_2mortal(newSViv(info[1]))); + PUSHs(sv_2mortal(newSViv(info[2]))); + PUSHs(sv_2mortal(newSViv(info[3]))); + + + + +void +i_img_setmask(im,ch_mask) + Imager::ImgRaw im + int ch_mask + +int +i_img_getmask(im) + Imager::ImgRaw im + +int +i_img_getchannels(im) + Imager::ImgRaw im + +void +i_img_getdata(im) + Imager::ImgRaw im + PPCODE: + EXTEND(SP, 1); + PUSHs(sv_2mortal(newSVpv(im->data, im->bytes))); + + +void +i_draw(im,x1,y1,x2,y2,val) + Imager::ImgRaw im + int x1 + int y1 + int x2 + int y2 + Imager::Color val + +void +i_line_aa(im,x1,y1,x2,y2,val) + Imager::ImgRaw im + int x1 + int y1 + int x2 + int y2 + Imager::Color val + +void +i_box(im,x1,y1,x2,y2,val) + Imager::ImgRaw im + int x1 + int y1 + int x2 + int y2 + Imager::Color val + +void +i_box_filled(im,x1,y1,x2,y2,val) + Imager::ImgRaw im + int x1 + int y1 + int x2 + int y2 + Imager::Color val + +void +i_arc(im,x,y,rad,d1,d2,val) + Imager::ImgRaw im + int x + int y + float rad + float d1 + float d2 + Imager::Color val + + + +void +i_bezier_multi(im,xc,yc,val) + Imager::ImgRaw im + Imager::Color val + PREINIT: + double *x,*y; + int len; + AV *av1; + AV *av2; + SV *sv1; + SV *sv2; + int i; + PPCODE: + ICL_info(val); + if (!SvROK(ST(1))) croak("Imager: Parameter 1 to i_bezier_multi must be a reference to an array\n"); + if (SvTYPE(SvRV(ST(1))) != SVt_PVAV) croak("Imager: Parameter 1 to i_bezier_multi must be a reference to an array\n"); + if (!SvROK(ST(2))) croak("Imager: Parameter 2 to i_bezier_multi must be a reference to an array\n"); + if (SvTYPE(SvRV(ST(2))) != SVt_PVAV) croak("Imager: Parameter 2 to i_bezier_multi must be a reference to an array\n"); + av1=(AV*)SvRV(ST(1)); + av2=(AV*)SvRV(ST(2)); + if (av_len(av1) != av_len(av2)) croak("Imager: x and y arrays to i_bezier_multi must be equal length\n"); + len=av_len(av1)+1; + x=mymalloc( len*sizeof(double) ); + y=mymalloc( len*sizeof(double) ); + for(i=0;ixsize; + else + croak("No output image width supplied"); + + if (SvOK(ST(1))) + height = SvIV(ST(1)); + else if (in_imgs_count) + height = in_imgs[0]->ysize; + else + croak("No output image height supplied"); + + ops = (struct rm_op *)SvPV(ST(2), ops_len); + if (ops_len % sizeof(struct rm_op)) + croak("Imager: Parameter 3 must be a bitmap of regops\n"); + ops_count = ops_len / sizeof(struct rm_op); + av = (AV*)SvRV(ST(3)); + n_regs_count = av_len(av)+1; + n_regs = mymalloc(n_regs_count * sizeof(double)); + for (i = 0; i < n_regs_count; ++i) { + sv1 = *av_fetch(av,i,0); + if (SvOK(sv1)) + n_regs[i] = SvNV(sv1); + } + av = (AV*)SvRV(ST(4)); + c_regs_count = av_len(av)+1; + c_regs = mymalloc(c_regs_count * sizeof(i_color)); + /* I don't bother initializing the colou?r registers */ + + RETVAL=i_transform2(width, height, 3, ops, ops_count, + n_regs, n_regs_count, + c_regs, c_regs_count, in_imgs, in_imgs_count); + if (in_imgs) + myfree(in_imgs); + myfree(n_regs); + myfree(c_regs); + ST(0) = sv_newmortal(); + if (RETVAL == 0) ST(0)=&PL_sv_undef; + else sv_setref_pv(ST(0), "Imager::ImgRaw", (void*)RETVAL); + + +void +i_contrast(im,intensity) + Imager::ImgRaw im + float intensity + +void +i_hardinvert(im) + Imager::ImgRaw im + +void +i_noise(im,amount,type) + Imager::ImgRaw im + float amount + unsigned char type + +void +i_bumpmap(im,bump,channel,light_x,light_y,strength) + Imager::ImgRaw im + Imager::ImgRaw bump + int channel + int light_x + int light_y + int strength + +void +i_postlevels(im,levels) + Imager::ImgRaw im + int levels + +void +i_mosaic(im,size) + Imager::ImgRaw im + int size + +void +i_watermark(im,wmark,tx,ty,pixdiff) + Imager::ImgRaw im + Imager::ImgRaw wmark + int tx + int ty + int pixdiff + + +void +i_autolevels(im,lsat,usat,skew) + Imager::ImgRaw im + float lsat + float usat + float skew + +void +i_radnoise(im,xo,yo,rscale,ascale) + Imager::ImgRaw im + float xo + float yo + float rscale + float ascale + +void +i_turbnoise(im, xo, yo, scale) + Imager::ImgRaw im + float xo + float yo + float scale + + +void +i_gradgen(im, ...) + Imager::ImgRaw im + PREINIT: + int num; + int *xo; + int *yo; + i_color *ival; + int dmeasure; + int i; + SV *sv; + AV *axx; + AV *ayy; + AV *ac; + CODE: + if (items != 5) + croak("Usage: i_gradgen(im, xo, yo, ival, dmeasure)"); + if (!SvROK(ST(1)) || ! SvTYPE(SvRV(ST(1)))) + croak("i_gradgen: Second argument must be an array ref"); + if (!SvROK(ST(2)) || ! SvTYPE(SvRV(ST(2)))) + croak("i_gradgen: Third argument must be an array ref"); + if (!SvROK(ST(3)) || ! SvTYPE(SvRV(ST(3)))) + croak("i_gradgen: Fourth argument must be an array ref"); + axx = (AV *)SvRV(ST(1)); + ayy = (AV *)SvRV(ST(2)); + ac = (AV *)SvRV(ST(3)); + dmeasure = (int)SvIV(ST(4)); + + num = av_len(axx) < av_len(ayy) ? av_len(axx) : av_len(ayy); + num = num <= av_len(ac) ? num : av_len(ac); + num++; + if (num < 2) croak("Usage: i_gradgen array refs must have more than 1 entry each"); + xo = mymalloc( sizeof(int) * num ); + yo = mymalloc( sizeof(int) * num ); + ival = mymalloc( sizeof(i_color) * num ); + for(i = 0; ifunction_list[i].name != NULL) { + EXTEND(SP,1); + PUSHs(sv_2mortal(newSVpv(dso_handle->function_list[i].name,0))); + EXTEND(SP,1); + PUSHs(sv_2mortal(newSVpv(dso_handle->function_list[i++].pcode,0))); + } + + +void +DSO_call(handle,func_index,hv) + void* handle + int func_index + PREINIT: + HV* hv; + PPCODE: + if (!SvROK(ST(2))) croak("Imager: Parameter 2 must be a reference to a hash\n"); + hv=(HV*)SvRV(ST(2)); + if (SvTYPE(hv)!=SVt_PVHV) croak("Imager: Parameter 2 must be a reference to a hash\n"); + DSO_call( (DSO_handle *)handle,func_index,hv); + + + + diff --git a/MANIFEST b/MANIFEST new file mode 100644 index 00000000..e6bb8e55 --- /dev/null +++ b/MANIFEST @@ -0,0 +1,95 @@ +Changes +Imager.pm +Imager.xs +MANIFEST +README +Makefile.PL +draw.c +draw.h +conv.c +gaussian.c +ppport.h +image.c +image.h +datatypes.h +datatypes.c +feat.h +io.c +io.h +log.c +log.h +jpeg.c +png.c +gif.c +tiff.c +quant.c +raw.c +pnm.c +filters.c +feat.c +font.c +regmach.c +regmach.h +stackmach.c +stackmach.h +trans2.c +iolayer.h +iolayer.c +fontfiles/dcr10.afm +fontfiles/dcr10.pfb +fontfiles/dodge.ttf +lib/Imager/regmach.pod +lib/Imager/Regops.pm +lib/Imager/Expr.pm +lib/Imager/Expr/Assem.pm +lib/Imager/Color.pm +lib/Imager/Font.pm +lib/Imager/Transform.pm +t/t00basic.t +t/t10formats.t +t/t15color.t +t/t30t1font.t +t/t35ttfont.t +t/t36oofont.t +t/t40scale.t +t/t50basicoo.t +t/t55trans.t +t/t56postfix.t +t/t57infix.t +t/t58trans2.t +t/t59assem.t +t/t60dyntest.t +t/t65crop.t +t/t66paste.t +t/t70newgif.t +t/t75polyaa.t +t/t90cc.t +testimg/scale.ppm +testimg/scale.gif +testimg/scalei.gif +testimg/penguin-base.ppm +typemap +dynaload.c +dynaload.h +ext.h +plug.h +filterlist.perl +doco.perl +errep.perl +regops.perl +spot.perl For making an ordered dither matrix from a spot function +transbench.perl +transform.perl Shell interface to Imager::Transform +bigtest.perl Library selection tester +dynfilt/pluginst.h +dynfilt/dyntest.c +dynfilt/dt2.c +dynfilt/mandelbrot.c +dynfilt/flines.c +dynfilt/compile.txt +dynfilt/Makefile.PL +bench/quantone.perl One round of benchmarking image quantization. +bench/quantbench.perl Benchmark various quantization methods +bench/makegrad.perl Builds regular images for quantization. +bench/kscdisplay.png Photo test for quantization. +bench/benchform.perl Formats the benchmark results \ No newline at end of file diff --git a/Makefile.PL b/Makefile.PL new file mode 100644 index 00000000..ce577a14 --- /dev/null +++ b/Makefile.PL @@ -0,0 +1,371 @@ + +use ExtUtils::MakeMaker; +use Cwd; +use Config; + +$lext=$Config{'so'}; # Get extensions of libraries + +# +# IM_INCPATH colon seperated list of paths to extra include paths +# IM_LIBPATH colon seperated list of paths to extra library paths +# +# IM_VERBOSE turns on verbose mode for the library finding and such +# IM_MANUAL to manually select which libraries are used and which not +# IM_ENABLE to programmatically select which libraries are used +# and which are not +# IM_NOLOG if true logging will not be compiled into the module +# IM_DEBUG_MALLOC if true malloc debbuging will be compiled into the module +# do not use IM_DEBUG_MALLOC in production - this slows +# everything down by alot +# IM_CFLAGS Extra flags to pass to the compiler +# IM_LFLAGS Extra flags to pass to the linker +# IM_DFLAGS Extra flags to pass to the preprocessor + + +getenv(); # get environment variables +init(); # initialize global data +pathcheck(); # Check if directories exist + +# Pick what libraries are used +if ($MANUAL) { + manual(); +} else { + automatic(); + if (exists $ENV{IM_ENABLE}) { + my %en = map { $_, 1 } split ' ', $ENV{IM_ENABLE}; + for my $key (keys %formats) { + delete $formats{$key} unless $en{$key}; + } + } +} + +# Make sure there isn't a clash between the gif libraries. +gifcheck(); + +for $frm(values %formats) { + $F_DEFINE .= ' -D'.$frm->{def}; + $F_LIBS .= ' ' .$frm->{libfiles}; + $F_OBJECT .= ' ' .$frm->{objfiles}; +} + +$F_INC = join(" ",map { (exists $definc{$_})?'':'-I'.$_ } @incs); +$F_LIBS = join(" ",map { '-L'.$_ } @libs).' '.$F_LIBS; + +$OSLIBS = ''; +$OSDEF = "-DOS_$^O"; + +if ($^O eq 'hpux') { $OSLIBS .= ' -ldld'; } +if (defined $Config{'d_dlsymun'}) { $OSDEF .= ' -DDLSYMUN'; } + +@objs = qw(Imager.o draw.o image.o io.o iolayer.o log.o + gaussian.o conv.o pnm.o raw.o feat.o font.o + filters.o dynaload.o stackmach.o datatypes.o + regmach.o trans2.o quant.o); + +%opts=( + 'NAME' => 'Imager', + 'VERSION_FROM' => 'Imager.pm', + 'LIBS' => "$LFLAGS -lm $OSLIBS $F_LIBS", + 'DEFINE' => "$F_DEFINE $EXTDEF $OSDEF $CFLAGS", + 'INC' => "$DFLAGS $F_INC", + 'OBJECT' => join(' ', @objs, $F_OBJECT) + ); + +if ($VERBOSE) { print Dumper(\%opts); } +mkdir('testout',0777); # since we cannot include it in the archive. +WriteMakefile(%opts); +exit; + + +sub MY::postamble { +' +dyntest.(MYEXTLIB) : dynfilt/Makefile + cd dynfilt && $(MAKE) $(PASTHRU) + +lib/Imager/Regops.pm : regmach.h regops.perl + $(PERL) regops.perl regmach.h lib/Imager/Regops.pm +'; +} + +# manual configuration of helper libraries + +sub manual { + print < to continue +EOF + + ; # eat one return + + for $frm(sort { $formats{$b}{order} <=> $formats{$a}{order} } keys %formats) { + SWX: + if ($formats{$frm}{docs}) { print "\n",$formats{$frm}{docs},"\n\n"; } + print "Enable $frm support: "; + $gz=; + chomp($gz); + if ($gz =~ m/^(y|yes|n|no)/i) { + $gz=substr(lc($gz),0,1); + if ($gz eq 'n') { + delete $formats{$frm}; + } + } else { goto SWX; } + } +} + + +# automatic configuration of helper libraries + +sub automatic { + for $frm(keys %formats) { + delete $formats{$frm} if !checkformat($frm); + } +} + + +sub gifcheck { + if ($formats{'gif'} and $formats{'ungif'}) { + print "ungif and gif can not coexist - removing ungif support\n"; + delete $formats{'ungif'}; + } + my @dirs; + for my $frm (grep $formats{$_}, qw(gif ungif)) { + push(@dirs, @{$formats{$frm}{incdir}}) if $formats{$frm}{incdir}; + } + my $minor = 0; + my $major = 0; + FILES: for my $dir (@dirs) { + my $h = "$dir/gif_lib.h"; + open H, "< $h" or next; + while () { + if (/GIF_LIB_VERSION\s+"\s*version\s*(\d+)\.(\d+)/i) { + $major = $1; + $minor = $2; + close H; + last FILES; + } + } + close H; + } + + # we need the version in a #ifdefable form + + $F_DEFINE .= "-DIM_GIFMAJOR=$major -DIM_GIFMINOR=$minor"; +} + + +sub gd { + my($path,$chk)=@_; + +# print "checking path $path\n"; + if ( !opendir(DH,$path) ) { + warn "Cannot open dir $path: $!\n"; + return; + } + my @l=grep { $chk->($_) } readdir(DH); + # print @l; + close(DH); + return map $path, @l; +} + + +sub checkformat { + my $frm=shift; + my $libchk=$formats{$frm}{'libcheck'}; + my $incchk=$formats{$frm}{'inccheck'}; + + my @l; + for my $lp (@libs) { + push(@l, gd($lp,$libchk)); + } + + my @i; + for my $ip (@incs) { + push(@i, gd($ip,$incchk)); + } + + printf("%10s: includes %s - libraries %s\n",$frm,(@i?'found':'not found'),(@l?'found':'not found')); + $formats{$frm}{incdir} = \@i; + $formats{$frm}{libdir} = \@l; + return scalar(@i && @l); +} + + + + +sub pathcheck { + if ($VERBOSE) { + print "pathcheck\n"; + print " Include paths:\n"; + for (@incs) { print $_,"\n"; } + } + @incs=grep { -d $_ && -r _ && -x _ or ( print(" $_ doesnt exist or is unaccessible - removed."),0) } @incs; + + if ($VERBOSE) { + print "\nLibrary paths:\n"; + for (@incs) { print $_,"\n"; } + } + @libs=grep { -d $_ && -r _ && -x _ or ( print(" $_ doesnt exist or is unaccessible - removed."),0) } @libs; + print "\ndone.\n"; +} + + +# Format data initialization + +# format definition is: +# defines needed +# default include path +# files needed for include (boolean perl code) +# default lib path +# libs needed +# files needed for link (boolean perl code) +# object files needed for the format + + +sub init { + + @definc{'/usr/include'}=(); + @incs=(qw(/usr/include /usr/local/include /usr/include/freetype /usr/local/include/freetype), split /:/, $INCPATH ); + @libs=(split(/ /, $Config{'libpth'}), split(/:/, $LIBPATH) ); + + $formats{'jpeg'}={ + order=>'21', + def=>'HAVE_LIBJPEG', + inccheck=>sub { $_[0] eq 'jpeglib.h' }, + libcheck=>sub { $_[0] eq 'libjpeg.a' or $_ eq "libjpeg.$lext" }, + libfiles=>'-ljpeg', + objfiles=>'jpeg.o', + docs=>q{ + In order to use jpeg with this module you need to have libjpeg + installed on your computer} + }; + + $formats{'tiff'}={ + order=>'23', + def=>'HAVE_LIBTIFF', + inccheck=>sub { $_[0] eq 'tiffio.h' }, + libcheck=>sub { $_[0] eq 'libtiff.a' or $_ eq "libtiff.$lext" }, + libfiles=>'-ltiff', + objfiles=>'tiff.o', + docs=>q{ + In order to use tiff with this module you need to have libtiff + installed on your computer} + }; + + $formats{'png'}={ + order=>'22', + def=>'HAVE_LIBPNG', + inccheck=>sub { $_[0] eq 'png.h' }, + libcheck=>sub { $_[0] eq 'libpng.a' or $_[0] eq "libpng.$lext" }, + libfiles=>'-lpng -lz', + objfiles=>'png.o', + docs=>q{ + Png stands for Portable Network Graphics and is intended as + a replacement for gif on the web. It is patent free and + is recommended by the w3c, you need libpng to use these formats} + }; + + $formats{'gif'}={ + order=>'20', + def=>'HAVE_LIBGIF', + inccheck=>sub { $_[0] eq 'gif_lib.h' }, + libcheck=>sub { $_[0] eq 'libgif.a' or $_[0] eq "libgif.$lext" }, + libfiles=>'-lgif', + objfiles=>'gif.o', + docs=>q{ + gif is the de facto standard for webgraphics at the moment, + it does have some patent problems. If you have giflib and + are not in violation with the unisys patent you should use + this instead of the 'ungif' option. Note that they cannot + be in use at the same time} + }; + + $formats{'ungif'}={ + order=>'21', + def=>'HAVE_LIBGIF', + inccheck=>sub { $_[0] eq 'gif_lib.h' }, + libcheck=>sub { $_[0] eq 'libungif.a' or $_[0] eq "libungif.$lext" }, + libfiles=>'-lungif', + objfiles=>'gif.o', + docs=>q{ + gif is the de facto standard for webgraphics at the moment, + it does have some patent problems. If you have libungif and + want to create images free from LZW patented compression you + should use this option instead of the 'gif' option} + }; + + $formats{'T1-fonts'}={ + order=>'30', + def=>'HAVE_LIBT1', + inccheck=>sub { $_[0] eq 't1lib.h' }, + libcheck=>sub { $_[0] eq 'libt1.a' or $_[0] eq "libt1.$lext" }, + libfiles=>'-lt1', + objfiles=>'', + docs=>q{ + postscript t1 fonts are scalable fonts. They can include + ligatures and kerning information and generally yield good + visual quality. We depend on libt1 to rasterize the fonts + for use in images.} + }; + + $formats{'TT-fonts'}={ + order=>'31', + def=>'HAVE_LIBTT', + inccheck=>sub { $_[0] eq 'freetype.h' }, + libcheck=>sub { $_[0] eq 'libttf.a' or $_[0] eq "libttf.$lext" }, + libfiles=>'-lttf', + objfiles=>'', + docs=>q{ + Truetype fonts are scalable fonts. They can include + kerning and hinting information and generally yield good + visual quality esp on low resultions. The freetype library is + used to rasterize for us. The only drawback is that there + are alot of badly designed fonts out there.} + }; + # Make fix indent + for (keys %formats) { $formats{$_}->{docs} =~ s/^\s+/ /mg; } +} + + + +sub gen { + my $V = $ENV{$_[0]}; + defined($V) ? $V : ""; +} + + +# Get information from environment variables + +sub getenv { + + ($VERBOSE, + $INCPATH, + $LIBPATH, + $NOLOG, + $DEBUG_MALLOC, + $MANUAL, + $CFLAGS, + $LFLAGS, + $DFLAGS) = map { gen $_ } qw(IM_VERBOSE + IM_INCPATH + IM_LIBPATH + IM_NOLOG + IM_DEBUG_MALLOC + IM_MANUAL + IM_CFLAGS + IM_LFLAGS + IM_DFLAGS); + + if ($VERBOSE) { print "Verbose mode\n"; require Data::Dumper; import Data::Dumper qw(Dumper);} + + if ($NOLOG) { print "Logging not compiled into module\n"; } + else { $EXTDEF.=' -DIMAGER_LOG'; } + + if ($DEBUG_MALLOC) { + $EXTDEF.=' -DIMAGER_DEBUG_MALLOC'; + print "Malloc debugging enabled\n"; + } + +} diff --git a/README b/README new file mode 100644 index 00000000..07a8e37f --- /dev/null +++ b/README @@ -0,0 +1,217 @@ +================================================================ +Copyright (c) 1999, 2000 Arnar M. Hrafnkelsson. All rights reserved. +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. +================================================================ + +>> THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY WHATSOEVER << + +================================================================ + + +======================== +1. Patent infringements? +======================== + +Imager as such contains no patented algorithms. The external +libraries (which are not written by me) may or may not contain +patented algorithms. YOU ARE SOLELY RESPONSIBLE FOR OBTAINING +LICENSE(S) TO USE SUCH LIBRARIES SHOULD YOU NEED ANY. + + +======================== +2. Compiling and testing +======================== + +Some care has been taken to make the installation as smooth as +possible. This is rather hard due to the difference between operating +systems and site setups. To get started just type + +$ perl Makefile.PL + +It should blurb out a list of which libraries were found and which +not. If you add a library to the machine after installing Imager it +does not automatically become available in Imager. It only uses the +libraries that are found. If the list of found libraries is not what +you expected, then the Makefile.PL is either not searching in the +right directories or your box does not have the libraries you think it +does. For a list of where to get the libraries have a look at +3. External dependencies. To widen the search path for libraries and +include files set the IM_INCPATH and IM_LIBPATH variables. The +environment variables that matter when Makefile.PL is run are + +IM_INCPATH colon separated list of paths to extra include files +IM_LIBPATH colon separated list of paths to extra library files + +IM_VERBOSE turns on verbose mode for the library scanning and such +IM_MANUAL to manually select which libraries are used and which not +IM_NOLOG if true logging will not be compiled into the module +IM_DEBUG_MALLOC if true malloc debugging will be compiled into the module + do not use IM_DEBUG_MALLOC in production - this slows + everything down + +IM_CFLAGS Extra flags to pass to the compiler +IM_LFLAGS Extra flags to pass to the linker +IM_DFLAGS Extra flags to pass to the preprocessor + + + +When finding the libraries has been sorted out it's time for + +$ make + +and if that works then do + +$ make test + +If either fails do take a peek at the file errep.perl. It's creates a +file report.txt. This is some information which will help me discover +where the problem is so I can try to fix it in future releases. If +you find running it ok (just remember - no warranty!) please send the +report.txt via email to addi@umich.edu . + +Troubleshooting tips: + +A common problem is that libgif/libungif are sometimes linked to the X +libraries and then running the tests fails. In that case something +like: + +$ IM_LFLAGS="-L/usr/X11R6/lib -lX11" perl Makefile.PL + +Which simply sets the environment variables for the extra libraries +to include the X libraries (which we do not use at all, but must +included since libgif has been linked with it). + +Also note that libgif has a few bugs: You can run something like + +$ perl -Iblib/lib -Iblib/arch t/t10formats.t + +This way you can see what comments the test script prints out. +t/t10formats.t checks for an bug in libgiff and prints out a patch +if that bug is present, note that this bug only affects the more +"advanced" features of libgif. + +Imager needs to have a fairly recent libtiff installed (we know it +it runs fine with 3.5.5). In the future we might consider supporting older +libtiff versions. For now you can either configure Imager manually (by +setting the IM_MANUAL environment variable to 1, in sh: + +$ IM_MANUAL=1 perl Makefile.PL + +and simply say no to tiff support when asked if you want it, the same thing +can be used to circumvent problems in gifs to get Imager going. + + +If it worked just continue with the installation as normally +(with make install). + +======================== +3. External dependencies +======================== + +Some hints about getting the Imager module to find the libraries it +needs for specific features. The libraries it uses are: + + jpeg: ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz + + png: ftp://ftp.uu.net/graphics/png + you also need zlib to use png: ftp://ftp.uu.net/pub/archiving/zip/zlib + + gif: http://www.arrakeen.demon.co.uk/giflib/ +or at: http://prtr-13.ucsc.edu/~badger/software/libungif/index.shtml + + tiff: http://www.libtiff.org/ + + t1: ftp://ftp.neuroinformatik.ruhr-uni-bochum.de/pub/software/t1lib/ +or at: ftp://sunsite.unc.edu/pub/Linux/libs/graphics/ + + tt: http://www.freetype.org/ + + +Precompiled versions of some of the libraries might be found at: + +AIX: + http://www.bull.de/ + ftp://ftp.rge.com/pub/systems/aix/bull/ + + + +======================== +4. Logging and debugging +======================== + +Logging is compiled in by default - if you should want to get of it +from the binaries you can do so by setting the env IMAGER_NOLOG +to something. If you want to enable malloc debugging to check for leaks +then set IMAGER_DEBUG_MALLOC to something. Needless to say it is +pretty pointless to have malloc debug enabled with no logging since you +can never see the malloc information that way. + + +======================== +5. Truetype information +======================== + +If you enable the truetype part and want it to be TESTED you MUST set +the environment variable TTFONTTEST to a complete path to a truetype +font. + + +================= +6. Win32 Support +================= + +Imager can be installed on Win32 systems. This was ported and tested +with Microsoft Visual C++ 6.0 with build 623 of ActivePerl. Currently +I haven't tried to test any of the image formats except for ppm, since +I don't have the required libraries on my NT machine. This may +change. The same is true for font support, though it might be +preferable to try to use Win32's native font support over the external +librarie - why force the user to install yet another library. + +I haven't tried to target compilers other than VC++, since I don't +have them installed. + +If you have any problems with the Win32 support, please email +tony@develop-help.com (don't forget to use nmake instead of make). + +======================= +7. General information +======================= + +The Imager module homepage is currently at: + + http://www.eecs.umich.edu/~addi/perl/Imager/ + +The current docs are rather bad as I've been busy adding features +but hopefully they will be updated soon. Until then you'll just +have to use the source. The test scripts might also be a good idea. +By activating the the #init_log lines in the test script you can get +rather verbose debugging output from the C code. + + +======================== +8. Thanks +======================== + +Thanks go to: + Tony Cook ( TonyC ) + Claes Jacobson ( Claes ) + Philip Gwyn ( Leolo ) + Brad Murray ( HalfJack ) + Nicholas Dronen ( Veblen ) + Michael G Schwern ( Schwern ) + Rocco Caputo ( Dngor ) + Graham barr ( Gbarr ) + Mark-Jason Dominus ( Mjd ) + Jerome + Jason Alexander ( Jalex ) + Randal R. Schwartz ( Merlyn ) + Tkil ( ) + Artur Bergman ( Sky ) + Luc St-Louis ( Lucs ) + PerlJam ( ) + Roderick Schertler ( Roderick ) + Nathan Torkington ( gnat ) + +(and just to play it safe) all those I forgot to mention. diff --git a/bench/benchform.perl b/bench/benchform.perl new file mode 100644 index 00000000..1734ceef --- /dev/null +++ b/bench/benchform.perl @@ -0,0 +1,34 @@ +#!perl -w +use strict; +<>; #drop the uname +my @text = <>; +$text[0] =~ s/\$VAR1/\$data/; +my $data; +eval join '', @text; +print <{$algo}{$image}{$tran}{$pal}); + } + } + print "\n"; + } +} + +__END__ + +=head1 NAME + + benchform.perl - formats quantbench.perl results into a table. + +=head1 SYNOPSIS + + perl benchform.perl quantbench.txt + +=cut diff --git a/bench/kscdisplay.png b/bench/kscdisplay.png new file mode 100644 index 0000000000000000000000000000000000000000..b975bb47c48ecd932b88a6da60c365dc55662261 GIT binary patch literal 587774 zcmV*8Kykl`P)$xu5y5R2Yl*9;Gy*3PMO|Q78q0 zo)`lzI#g0vGzyJ~CJ989P)ebc0w9n`N!Y$pO5A@%)VuzhQi3>Ks}fN_4R5Jr2niB~ zBw%!b(h$8vR00Jt_E@7xDPj;(N(ARo07?OZDJ&#K6op9sE)hW`kOV0NBt=q6#ORUX zzJgDwZC^0CdF`}@AL2FHvh&Bch zL+@O^HaUFqh*I>uM=3*!3Q2iPB?g2@jQP8j&W{&DLaTy=!X=0Ijw=U8Xi-ELY1@`Q zcsxSeIU<7ZB9$(Y5Gk~R*rBvXm47Yl>>dcs^$~-Qmp}Z}a-wH(7Tby>lRm zD@S{b$2Gd}O1JfhGBqiS5+alSlfwLWJw8nIknFs>`As-h|?d>`n#4s8rRI+7BSBy3dzLRpqn zw!rrR?|t5BDWSEd?|Y2NYY&Net0~2LxkM=q$)Hq0*9R1utA|HC{l53}k&k?Y&;9sk zm`)2)0#QH$QUaCeUBj2Z@|QgKkxw$NY9wucp7;6jo!k5$|L1S=#eeljxVEEd)|j%O zO9`b65;g0lr420?n+1D&Gp<}cT$*1-T^5j+O`EHlvRaK5o=5C z-Z|yr$FK8u|KtCNPdxV=8jr^zSR8>(zhPcXfkXrp`8hT4(#zlG*Z;f!o>yM}F03qOe(mE1Tx<;nxs*d34g{eStd_~M^_iN_zi&Qp&+!s+e1 zyz%O5oZUU;{Cq)Gjxfq_zPMm^u*Zi!@d^H&zx7M}$VWefCdXOd^oY@jR($`JS9t5K zci7vV^U)7}h{6ad2DH)yVBL94X}EoS!9V^Vew`n@{35E|aCopoL@3Id;2C0eq^@gX za4Z%pT+A_dJ{}W-LsyDKz$#7CG&FsS(uQahy0DCj0)mBO4lJHN%M?dTLd_SDn-=l|t@%_l$p997;L{NKO% zoBYo2{ubq^q#BPfQXnF9>jq^sUDx4BcppItwz4RrNl`!v(T5=~=6so=kW$X2k$^}d zO3r&K4Y?D6lt?MzV#1|J6wq2@k|23<0O*6KC@R`bLs?dYKH{7sNTTUGwAL)w7bqP$ zJUnDvjIi3UTCKQPoY6HKVvMXeJw;XX@I#L<-A`Z5f2tG!X5u9_x=qQRJ1Fp-> zr7jbo5`#zvIoc`|ip{2Hu~?7<>QPBmjtC(k5+OzkZMk{#X8wHyYb`}lU=mbiN!NR- zQH_y;*gJ$o#Dh{KgoI{q?+8(f$!Lnz!eVjCx?59M6KqxC+74aT?Cc$a66!i9S8+L! z7o#x%)5#ncJgTtNQ_a1zQ@r=sNqK)W#6V0?j|?$JT-)QFV{d04ErM%1j4`Y?9$Oef z2!vsMY002L>4jF8?Yt|)4trCGmJ+O9*i!c-L@LD%PXY082a^Exh#!KVNrqP0Qdb`NFX zpOg?&B=iANLW$t|mZB<&F(9JQT4R+V1;cW=rW(zdO?UXf2R^{(KKD63{J{?~nQFG% za0_-sX&|As!S^2D_XJy^hy9EI9uBTOz_0xm{}osEj`)rL@qc1*afU4m=KFhyKsBnV z%aVI%o-2C?7z;Pweuw}4fBRqg%3u8@fB*0P3P1NVKMzQrpJDq>cc#>ZCB%^LLs_ay zW6Lt{(~vNQY~q?P{?Q-tyTAQg zy!7ptnU8i*D3T~ zzQos_|2l2kQ&kmK8``#GXLpyQqa$XMIj?-@W!`-2EwnX+6oH5_n$_Z*KJ>ix`Wt-Z z-+YPb;UVi3xpCtLr?+qNwZHm0Z@lsb-~ZN&e7PDi9*-$)McX=*nS!lpoWn~&Ii7L- z`cr)JqaR`$b)!HvDh5CS?|I*Qc;EZpLj>&QHHk2QtU_g2`0&A;qxqcUQHdkR%cM27 ztT3W6D(5aGaCUaaXfz_JilQh<-cy#EdQ#xMqun&Pu7em^yA54}{euIVw!`%uh05_V z1qdO~xt`T#gQ!H)wrH)nsWtoaJ#J5D6iU!KQI1NAQ4OZRCr>dh(b{maJg2ToM$-w$ zr)MPPdF_o?`5d3eXiJDaw{G5~_ld_JyG{&&3mHXh>4UW=kJ(v zQ5VKL8BytM-f3OF7ZhIlYzN&jzB;e$v9#AS!4jYy*|c> zh|u?*h~nC{Yy8NkK7&U1#D|}y06z8H)7(1!0##M9GZG$q@KFTA`ErFxDG_>~8H)rc zO<_x%bEFiBX}AH&H!PBqu?Uca&O1Z|J=~N4T4nZ2L@o!3fsH|JCvbo(dW)9xA5zTV z3N@hYVPay;q*O|XO6Vb)r?BX@9kcl^MNu#rO$dEYJ*hK*5k*zkOlLcIgvBOTNW?^N9mRM;Sy>zz zXxh3WjNASHzq{En!s3WDd41_2y23DI5MLoyk z2`Lgoq9`rn=>#7gqC80@yzf~xE3B!B3cBD)T0kpA4@@hG6bG=IA~AZB7>bcWYm0LM zC5Gu}LK_@UKKUdkr^hTW&LQTF9peV)0=@6q-QA_MIn(PC?Cz47i11(W5l+9~2#zgdf09ghtIT%R#w*!dBqX)Lt z_dS)isE{a)r7BBON;K;=q3Lk0rLYqYcdzii_dmlYKKUa&_Shpl`|LB+RbJmIZ*vj> zJrq_s1Zm2m#wxF2!cu@ z9=v*ux|*_HuQPjT@;zB=3C`nv-s8as3R5y0O)<*m#0{5hau*zZ-?Ln8KrBt$;5KWz zu4Ou(p^V1&E;G|1g39c0v){3)Cs_~4Xno?IY#*-PF&4$J1oYTb#Z{I#^t6g;|-e5^TcCM z;oFusUVWX5)dipa%%}M47rxE;`8mcIx~@ef%lYXUFTeB>rxzVZ^OCzKr<|XkQx_$k zoVTDD zyU1mpWKg(rj!OeGI51%vqRULXB2kov&UuLGzRHwuC6g^FVT>7aZX!v>B!VIaO^gar z880Ywex^YUBY-49ki7ULyOi=z!WLcTX&NRsb1X;(N5n`J*f z~#FeV@lbD_YlLl3^@klmwcl$C?7sptR0(vUh~!8PBF5j<)UDESDL` z>ioQ$wjrg!Y&K&w8X>lztSd@oI6pf>DKN?swZ@~dqY?4U^2oyv<3r%?$uXmeP*-D? z%O%!Y4h{}jT%5Amz_<()S`!0!?=zDiAj;rE2Kq56A_gCN5*lp_jLD(f`wYIS@dS}! zEvtai3S$iCXD2A2ZF_W4VYDDdW5g1Nx$inh0<0|<%_@=-&KDObIb=Gjv&0)fD~k__ z-Q68ls|`g_P?jZ1DXOZ^g-+yh_qtU|dY>pm+pE7w<#~2Z%h)VPDlh^q>fA8<{%fI}~ zy!6ty`MrPsdwl83e}UGTo!wog<1xw@`gOlFd9$u{UO}Fdz&}kd7JmV=Y6c!4R77Ng)xSMojnfbyC|i& zb9|SZciyJ&H^k8MgIB-HUw-v#y!qB!Y+T2v8Z#a5GA^goMa^U~BK{vEcgk>l_>$aC&-*bB>}aSvC!S_N6bQO@XOuV)E?o&Dfvqa5UTH=BmSW zJ=6Iv@*T99wi%;$vdHX>)*P!M^MBo*96XNS=o+(=(91mw8+USOg)nSTPOc zRlZQk0JH{zLx$o{4+Ur(ivJk>AYNyyiuVQ)J;b=}wV;%tZ+naYDG*b@7=!Br+EkDX z47fuQC`tc68`3sj#TWS0l)0cC3u5JMj#rqJwGd$euK z$j&fDPYRCSIc$;T9c?V*$&?f$UDuHa6qOyG$xw*Ft6bkD66l<$(RrL5i5LQ1i1aZL zMA11%X$w#~vl}5V2xYS8Ob_4fd`n7!&1S)PIwPb+^pR0nVYR|oO<8Hq&(CSwo+v_T zHC^&(t0@YLwVGzL%sc;V%w`kn(q`5Mq3?UjVw72#0br>FCJCf~CXrlE#G(>R$}tL|O9nADANt^P z{KQZHJU{vqpN0e>!Zt>y6ksTph8>V|O~{j~{!Or`~^^+1@VW z`IPBoj#hB*#!X&$@p&%#HKE8%OVc!X@9F!V<9m0wd-pEOi`7uH7JT4`ei$hNn{~@e z-+F;fyGD%+MO_j6ps3gaQHHMT*x%o0v)N=xRcUmBcDW{X83Y(9*xfl`Je_g#_HArk zqr0By97+i#(037AS`du{!+f$sUDVvUbH+MtxOw*u#kgkw;0TcspZToKk~fy;KKdgh zGzkda@zm4r$A?IaaP;uQJn{IGyzt_SU^R$g@8FORJo7_5aAl5-Fg`kDZ)X?Rx0tHH zSi#4Es}%u>tk-Ll(P&#{ps%vzFCxgh7^Cc=&be4rF0i&pCFkWt5`ABh8eU4$eTHZN zW83(U1~Mb1bjge%5g8OERLJ%nJ0$O7y7CunR|%puDS0$PlziXBbZHHPeE(VtD&Ajsby)(?wvnQ?c;DlK zCnmuNXwisD#E`2Xtu@A|ELVp3Z|TQHk>%QckR3x13T?7~tB#}|l*+y?tu@Q@1$%pY z#FX&PVJmalfMAS9=`73Yq4J5|A-2FMMY~?ptd>;Oh*B%O?=w(SDJ#1J!m&yZMqz`C zj_4Cn54PYzLl1p6V@nbiizS}CZsy|=d-EMu%X5-dMVEbMWkI{zWQMNm7}aB<57gy|;Cj6G z7^T2y#1zCNxC9C_$ksU!_<>rF$zS>nMs>m7!66}dCNp~}59XK_@V-M?gYP>^Go`93 zHvKX)E=ggOCi(yaWj`8?xVSiDI-L?ipe##*i#Qh`DMs}qGhYhU>kTP6#-kczGB6G~ zejy1g3Y|cqz!uorFquqnePDgQVtKJbr^w!H&L=+hF@E&(pC);bVvqs^7K?L~@eEuhYHWz3?b^_+R~(<7 zP!v^8&cpt^ckhJxc+Sz`6?~VAp5((|Iq--nhHF=-kkBboXoEFbnhvSUjWd8PO6mk| zo!75bnxd*n!Q-8yE-Y4A=94+4saUO6O!jwhDdKw1&i)?r)dr(2v&op)IgSnvNQ)CTn-#_sw3`bax^fL=63Qhu zea|Bg?BaYRB*SPt#>JM^VoCHKzwEMC%XM6wo$~s3PI%+B@9-yI(x}2_6Lwi}u(yXz ziGH(YR#k{rI3HQI8^nX}dz!AL_m0tcj4cYh>sT(A?Ck9k`s|C_+uOzIY{0hGux?t$ zbFx8dTgmsfH1i3{}FVgBO4@N1R^OUMWB;dN9V(7rrXv(t0hdwg{Wra$@X49e)RD}hd{cp>m>@ENR zAOJ~3K~%`_7@P~(Qm96XqpKB_%^hL^gVqI&7gRZ= zi;3B^W<1?tJXtf}J3y>O^axwcDWhdPFWEKiCglZ(?cs;Xi<%goJkxnwk+;)s0Z>tE-uzx4tieD1@%@y0tm`NTu~)X#jL zpZclKBMBB~=ls?`{a^UwKmHC<+D*fz@2Dm<-Lhdks;KK-thLN`_BcIX zFdmN)6`4*fee@JngGN7*LKLZ!6SM4 zZo_D&r0JG~q_Ngemjzw3A^0vUD}zTkbSfp4w=ZigeXB78YbA2u2d%Wm5B7*{^A8epZYK@b4krVo48Fuz1_K#oQDoID@GgHC zAVMUAPzJAQa?aRLE)okx!G{%&RtB~tTDQvDlEnn_|=-O zZJ11E)MZKM8W2IH?MH37s4WYVyOLx$76Cw~!CN%|sCTnO+5A2nnIOaDkcdN9OClS( zNfA+?2lKZK9SmElYAXSv2jhLrEX)1*$p}`Pf^9uEj9*?G@@}t}MlL~NzGpQojx7+} ze($!MaND(R1bn}tu1b=II8d5eX;RR5(b!56Lhd}YMQ*2Wdq*r3N;Dw}-UVDp+0Qe| z=G=C@LK{PhF)OlwQIZq08j^X)f{e9UIvS6r^qnU~k0~rh*#RsIQ53VCIeniEh1-ri zAp1CCq^hd>#{Zau`D(FZGMi$IrQI|{7c%8 z(x+6{HLK+Xh0#oAbLQHTt}04fvDvJ!)`HTsz2}){o@LWCoSvOD( z!77S^u5B@*a!}R^i%<^|?_@HfX&OSzJ|E|M%A(4~`9$8IQ7|I8!^waxOV&+`?|P=w z89VbmKJbZWxps7gdQ^}!eDfR6b8z*LdOYIRty{eI+AF;A`VY{eAqe~XhZNeNRqo!} z*_}bU#_7pz&d<;J;D)qP+a6Myy9zu@HLnEm~IZr!=fY`(+!az#~DmmPwIHb{yD z*ReC3K=2q6wKa@KW5ftuuZf~Ay?Fg_R7T(TbX`YG9!Er3gH_qPMhaBcP?r_Ct0{Xz zGP9g*41M1sNl_IxCybc)de=1>a3|QTmQ1EIilQWhNYgncvz(C1vgG38g5YvNAfj2d z4JhI2WP~m(7t1piiv@P*ERCI}3t^BsBgP2#PL7Eouvo8IY*r+#a2wBfRB+1(MX7N^ zA(fn`FqTC;$$m146t*HCOS9caFsVwWlL}iD?C#BJ+Xka__AahB)U}|M;M*V3q;paS;M;TxN_x)^=3og zb(oZR{nhVra(<7Uon17BICzzX%s2_;3c(sq?%kob1sm5<+Jbv`Zt}%1{yv}h;NQp# z+ByHQAF|4z(2m=XbPGW}YX#E=ns=({Yz#F#r)bVju* zfQ~97Vu>gq(ORWmf5-GfFr)KFg?I^7~2|M8H^!(z)u$at(yg=QEFtK(xrna&dM>yXn~9ACb_w z5OZ~@GZm@}O=&EB-{XCx9_QqxG{d+-@L&h9G#T%qL>Q0eG@XMa93CDroD@I`iMpx@ z!C^&{#8Z@JU@vo9aA7O7GIV`Us4KKJw9Zl3+!0q=L))%EJZwx%?e^NUl~n+@~X zh^Aj~{?;9W^H^mV*ENNWoGi{r!P9IQK!%~z78L?1F9U2PELQih7NT3R@j0O=qe_2iK?nNs3w?E#mUJD^O(;+IzB$m zv~;0JDzR?Y)T0S!C&#&|r0pRE#^WqyrUb?)Lg;ebN(x&D67qRRedv)W^f6GG5lRX~ z0)4lntV@WB^~HjO2A8li&Bs3ZG5*1S@}Ca1M*<@xahIjV?#_%SAAf@5<6~Uwc<_OT zDe4jiPa~4stwH$sXTHG4KlOPKJG{4**6$Y}2Rl=Wr>-*@kG4?&*F|ix)!1_}^=tp_ zf5X$i`+NN1@BaaRe*70KPfsa!_gQuuLWId|jIxH=q@Fi?W6o6Cp(wt0f`0 z4AdoeklLzbT-9vP5;7_ggQMC?iaz_bR;yJ$?=0k_OiGm*l<9cNX0xIwa`Quo!tHy< zAi`ueWq&fG+cebG81J%|N+r#`lVe2dp~%UeF+X&rF4r59&qty(T?AthlR@2Tb-`w5 zhsx9}HXDxbof3y4Vt;=xvoo<{v0gFVnX|vM%SE@yjKxVV2K&xqZDyCXC?=B$w#XDf z(=@D>7Z@c}MTymxe%-RUSmRww>l&KAA#^RV?K!>JV6~wXOS9Nu>Jk?sDFm7rXk1TJ zLKi%?C_o#GKp23PixDje3d3g8AhuvMpK^9`f|o=!86!5I!&J^kPzrtYU^RABQTdSP zDg}Di;e)WdcXWAVL=29}s6zUl+4P90G*=F~T&?BQbL*eTakzh|L6yD?q!Z*M3T|W8okE1LY66@8H+G`w9GImWiKV97y~|^sW70)04aNw1i?r?V~BUjBbP6U_YWD3>C*e9woSZ}vR4w?>RY+xJvO&BKpAPP1xQEY8tMD2&Zx#kMPwOV5_I zc37|utqe*9lrqEkLrjue?~!c!Hu)HeuImOh)}Y9hrZI{XvH{*|MG!?B9KpxotdR_S zx5o-B77Ny^JNXQ$QH66oC_yPr8S-_vZ@k0l#VNKl_?R0ms-k3XXPNlFeq?%!^rSl$L71TwI>spL1am^a< zJS0z5Rop$fi&jEaSEQ8pz_tRaCR1V(&dwJZxDQ>VlWFeknvTbpL85Kjd?bgcd^S^` zG;F$-qA1WNHwT3j2k@5Tjti0V#S+9~Y-Xy8 zs%E`vI69irw)qGVHy*QCEZ7@5v`$V=kQj1nf7i3#w73wNjpupJtfuV(5`_>QW?XT2 z^bn6e_7u~}E}Qk5Teog;jkUT25l8p_5acJ<}sJ0d41pK+0Jsecdf0b_wJ!* zde$Dm1HqVJlR!{xMKKVCgn(laY$Y*C{))3mmg6Y4vn9mYc|~$oi)pLMQt7A z$l28e8qIv(QdJGsRcyK~?R>_gPdqN}POXZ*S2N~FHx5*d10(nPRd-HRRb0P$gV}6` zQ8I)M!@#E7;&a3}3q~ya*G{f83k?`O7e9pStakXBv zY-Z#!;4}Q@|NYyTgKNC_Ctv2RZ+?!KUcST0YR*SL{wZqfnAZ(=?p<*AY)y>0WIbw@ ziv!;H>|4;PBKaP7c*JsbD1!V-a-od2;yA9v&D@WJpm|vU0wF95W~SBtAgQ9-KPP*$ z8RhI$_Ex3j-zJqy_LaULS)|f_5PQ&RPlkvl62(zCLEPF13lT;^9D_oI0cQ$jni4q* zzSocaetwul?#_vfMj2fg22oe#s0c==zpP5M%p|m*=7Rn2HA-92J(u|+$3z@G{ccC} za$2j5MH^_EN`kJ(fyx=GVvMR>!&6T^MLVleKr>(PhBv%{XW#rLY~2{PR~!01kk_<@S?&|imkB(6XqhT%L!eC zb5qdXv`8y0BDJIvSr;7?!YS`YnQ*mpWg?f!)LKC(a)|U^bWmD7Akb%;ghf9zahlo) zmn{N+ad~Mig170rN(nh#?uq6y+G#=WR94gQOh|#+Od)Fu+c*|=D<{W(!)3R@*&6GF z(v0MSV8~50jw4l7p^RcT>;R$MY)K~8T8UuWSP`_wOjl@t#nC|-0ATc99-OSpNn92L zQ&n<8WPWGLxkd@xyJIWiWL4fCoI@F*vYM#Q!kYsiLYzUfUo_buPbzxDm! z&-ELptd5QdF=4DG_rb!B8YpiQHI5^?j=?&_+IEuP% zOVu`ea|kNXG!^~0r5k!&RgqI>*N;MV9vrdr16|k2Gj0vTxZ~#hIx$8GXfEz0V+_HM z=nNrdhOuWi^q9)A*=0-)WMk2;W!sI!47F?UUUXFlt0S6vAOtxeRMyg1L-c{ZA342t zi*J4I9emU4pQUbB+`V(gCqMBKUij<_GgEcg1WzC!0zVykjnI-oV-A8979Dy8%Cnq(W(-Oq;5u zX=WHD2NP80V0Fq9kG+9so_QmWKJ+^7z4{uT`r{9Cc5z0m49RNhrX?B0Fp5@oF>lE^ zF~oqjmZV@9N7`|aU{_laL}vF$@Fi%|Ol>TUkQL^nS!e!*;vn>T)ew zRINEXJKGP^btP`$AqE;-N!aM+l{i8Bff%zKt|N4PVi*+5!&@BRc!Xwo!fc^AzVSK^ znghBW^n;?Vm-OMQ68$iabRn|3_6X~!S-BacM6*~4AQB>Z3`k%oB$8;!lu%?kE6BQp zaVl}ZXK@Xyl<&thlmki55-2(`RT@Pq>`_W3&IQq{Dy8;@CO}M4S#25;Srb_14jx41D$OYdn5>oq*=D8@PKlaI~zsv%bR2 z=HM#qkN((y%=_N^Zocx;S0&SD(Xw8zsTT`$RXSP9;+qSx>q98Pa0*ve>0B!=(2Y^8T-raZwdUT1}rz$&{Itq_}Hh*$gP@>`=Q3Yb+%~QXs)B!o-wH22By- z<(&2tw$KPueo!nworH{OLy0`dggD}|LE$i_xGc31=UkSPr6Lz`ToKpljHu^8$BZ?G zm=YmGjMi8yP-jdv9+{G@wUA=T&&rb49YVRD36(Uec<7~uM}|ld_bY)+lNf+wfrFiM zM6HNHM6S-&?79J~wA|=q?%laVT{~v823yaHCM#jJxK6rZ#18}Qd`3tf@1^>|X-o26 z92YqYtw=^Yi}D)Zk6do9NMvkX5yn6o2j*4~yqJW#)m1GgtfGgQPCt#abV`Y4WmXYl zWU*}7oNbuT8dMBeZMgT^JyJp(H>FC6>`}&Ivz+*A>tw<1hcb{jqOQQytT#Q%IkFBU zB@F|9l%YT&8%Mwh1!|0-5n8ia%n0Ksh-^%Z{eabm zVH^QV%nIiWi&?{FvlhCCT&OI|>hJ*LWH8qS^+{#OvBqGk8Cq**wbZDn0BA)V1D97< zEapc%{`Bkl&;P5R+&{Z9c}zhw0f`i8X8Xsr95LAKcC0s|yECqwTK9(^(N-93Sd`TM zuS2iC;g!oXGX0&H5{l_G4a#WAin5L{3|MD*^4Vwk+yBeo<=21tm-v~V`=>nru@4fx zqw6|sRnfLHuAiK8_q97L=PPDS%h~#p|L(u}>-@~m{w#m)d%u_O`8U6xZ-4url1v}@ z$`}$cjlAn!@8acG?qF=gY_=jrQKCnm$X>KdAtc7ZGYp=jG`ld;rc6L#>KQjz*W>_) zCgmi9QVe_g&N+iJaB}?`L$P|RB$-V8I8e_QB(2C+GlufaImfJBh%CZbiLgQK4|qAi zZXB`3;e*_-uCXkaE36gdWj2@lVGJH0Jat{OTuM0V*o!>ED1|eU$F^FnP}Z=Rfi(?p=<|n~YN<58XKB&MPbKoyjH_LZYpeIEy{|bx@=5 zT&$0uAry~fE>K!?M_V{FtM&X<_SpA=1W2skCr(B;*ZS6;ir zo%1W^r%TT6t?5UjJuNsTuIM+r|H#Mu1 z>l|IX!Oe#rB8J4}rsE5r|01uQT{4b=qk|=%``j0J;e{7?iO3s@(wKt&5mU4}X%gUHm+ zmM2G~l1K)*S?<4aIR{j-C@r5$^nMvtME+V8`cZz;JuK}I!9H2wN~ItM5r8{qIH*?w z7Qv=PWvV5zd#vW{T_xUXToB&DVWT)59FHpco-U>Z)RSd`QfhpdmU(h=E;<)U}hq z)iUUgF_4EWP7I^iZo88GQ;SwE6m1&{m0}5w%gh@`r4>~LE=639)Jk!9>lR=Blh3og zT+GJVt3k7`V8&Am+@$>WFr+WHA#5 zoi>Jcv1IHARMwndUa_#E3xI^H47IDMjlnsCIXs}-UeP#l->v(Oj3#Okd|H(WG2(y$ z*bFYwlfLGKP$E zvH&UrJHHcz*9cl5BUM>w%EF_yz29Fbk;%pOEbEjw9wXgu!~f@XALs?-9@5rKsW@n3 z@JWJ$QV+^AosTzr=Fr^pgFZ|G7D?ZMpf-O}_hIe=AQs{(4SN zPiYq|Rb{z(dW~DRZc)u$K~2l1m{jrfM=+76o_+-1U$MEkM_8ZZW=pO;bd$xr<<8wL zckbK~2EvM4H>HH?WsR#!Vtnj+2x;%&JwLxEo2@aVEPcCv7@0LQdb<^eq?7$;*cGRz zY3S2P*hLr<&7z?Xfm|}3DC|YZfpK?5yFBFP=@E}zKjPLSkMd2o78C^|Z+zA&%Q*J*=Od%l+_?1+2aA?lr%McQ{q(T7)(s|UoN_|3S#fNpBuo)mv{qvEl4n|@ zODJe6lTXnoBTSWe%LKie_9j~npi}cnE_-(_3izBX^h!Eby`U8<(Cgy74^6th`V9Fqc~#2f)TiN`?c{aQ9HMp;ccnxL|g|F4P(&uEl^ z;EU|XiC#P+!KOZX8Y77E;f?Fuc=!=s|HfyTYeNgX^SL+ksn33ilamu}oG!Tc@@<~K z+;aBHU6F`C^yriPjlcDG_*;MTf8hB){3AIjx{B4|l3nST%P|SOhAJ>*EG5Xr7`YD+ zqtw1o&<#Y`HuV)Lb-x(4Xr@%YpNa8}uWwAK&hlOgr8Ny~Sxw1k&vF z#^9-4vxf*%5o$=i>y(R;iHJCxl*Fx-B3R*ljTYCGhy^KB=`<+cha|Ns17a$@Zqqcb z1+LZF?n^nn&p4w+Kp#cabJcCjMkRL9<#NgF;E>wYMVlgDdp@6IjAa-+{V?E+!ld5IlFsCourN_DaCfX0c&Wq#wZ!|H`^^Kh;=`X zGUNhWUWyB_>v#0QbKsmn%UO^{tF&aIp_sKbP3^E6LKtOuE{pfJ8)&V=$4FcU+NQ$i z#QD{lcDdSXciN_se3h6OV-S6w%IreGgp4u`#z?v_F%h-FSc|C~uid@mgCG4czxFTw z1%Li8d_Pvh7)L5smjggTYa>yjIqiGCq&&ASG^^&!aMqo4UFulQ^K#ed1?zW7DH@ZyUQOObgu zFbrPM*ZGnZ2imsf&iNUeuH)m+f0)1e6F9WJ(){L(M{BJY3Cd->ew zzCa9MZ9@ndtA%n69;|CXC2XZ>w8a$B`sgF;%@(B$Z96BUsoOcOsX076r0j?5NwK^(>kZJbmh#c7DuMSrRAUN*UAR=N#) z&*AETjAGn%XeWb2*Ka}VeFtpq8Zih}VpaFPbW?@_qa3~OaJA#{Cm!X=ryl3@_;naf zLB{3X{WE{&t-SL)--=OEf3v>(8h8HWvs_)R@nPI+!;F!7sGMuAHbI2?$uV{tbc$G` z2xHH|=>gyQUEjq|{KQ|mf1{LpCPyY8#XfH^rBcC^Ggw(*(PetpT#2X5SGdDENU$UDFJIj&zn zWePf)_C9UPzE~-a4i}K5^jj}mRtIz5_V#BnAos0N+`M-Eex_lJEEWq9OE&`9W>cG*C^?^OXJ`blw*|Pbue=0gL1@Xi`C|1n3Y5OqDF5J#(Z*gO^I6XU=i| zy?gHg3CoTM6%NwDXpHDpb3v7aKF@nM;y3EMr^pG}fA6DIssKJB5i)W=l~j9aPw?nm z?;Z9b1e7tv8YNOc=k-KMW8Y2ntP1DfKW*DW2AxQ>KB`LQd1d@uR z66B^cEawYxAjJSG61*W28FR!2&k!WLMQMvs7L`4fl9c1H8?cQPp?cOBl}So;Y?oIT z9ACf27zX@wa~5r$iVtfTJ+9F9s=rI4cX<&%^nm)P=P1raJ&P{Oh>Wx!TW2F8@JrozW0&sr1#r^!;F zezoa{N=rxI(9zZnNy$AUH@PNdIeE$@y&oqMy(jxoh5~D(gj_3T&^6xjmS_3VAO0~s0Y|-WTgWkhtq>Cnv~7*66xL{B7R$P^626Lp6i2klJpRO^ z<;j}1i3f=W`RIJPAY_kG?(1X%)Bhil_t6)MECAXW0)mt~r8&KRlefO*9ps>S<&`_A zD49jG*^KRWD|#92@I#==H8+n|WD8&T)Mxl_|LecbKm2=tpT%N97(HM6^4G}8a&T~n zvkh14Eoo^O2T#zN#jy-Zvi?d3+88`48Llq2#4w^Tkh)D4YsY_6_|rK&5Yh}DvZ)YNls-F%p%!xNN- zkSRlF0Ra!AO)=zDRJ z=KyKo`sopM$-~P=G)O0>D>5Euft09cHFe#Rj2!qQk$wy)ZNa+zg`5Js6{69KTAoB* z_DHSs-h7m^)aguyq?ClM&|0IW66c(YHdJ~oQ4b6;OdO+_V{DW)B4wc(RT*+Xq7%Fy zOACms!&+s=EO}maGn2|ArS|*pFnAhcnMfy{#qBLdI{|m}FqOx)TT`VluuV3e2*>66B2<{3yM0N>i?##4J3JwMC+o8>{jL4Wxy@4$5ex% zshb%o3u2{%W>>0Nv~g6{VXP%)jSn)k#6hxZZEd9S!hTZ9wRYCtgH4KHATi+ z(F4f|9XUFcSd1Jp&RTSaS>0fiv@Ch=@7Eb5(Z!A9$Z{r5C7m_9ZHK9ygu{g>sp8t8 zvQ+apCplQ@@=V;7UNLW4(G`)2p_F`sQp)Ma%;;el zBOwl8zz5ObB_)|q7kBSaR}DS{+RCxJxFY8Qf0sVJal9nOOkFi-WoYV}_4<;OA_qr@ zge+NM%lQ(647DKyoRtihsk72S=v~ z(URZYJ$sECC$|cFc)x8_qgd}cUV8D1geZvU+ur;fQzD+yni0?QfA~D!dkzkc2m$7c zg&ZD;bX_OUYZhmdEr{u5cflA2&exaRyK~0*-8EI!Fk2jRa$FO}z-+caX-Vb3+HN@F z6pCos7=t#7Fool&m#9T7j z?ru3aIc2q4aOc%KtS`?QE-#_B93CEWbaWz7NX}p@(a=~^VXdX_Mtsb)^BG_Ilb1NZ zJR{$M`N0xx4cb~z31=-TWT{Wt4d{7|!_tjgqBi(3qMh8U+wGRu?w&D(h_*5Z$7upa zD61Df{yZ;y>Z9C!?Q6X7sXyj&-Eneqf-{zwS><3fInX^P=l4opzMRbNQzeepEo_YG4_|S(w#HT;^8P3lyan3QH z&k18Bda)2|W65|){q6gG9RDy3MaLm}rJRI<3I(0WS$fP;N=27cnzz+t;g%w1CA`Nu;eklTTeSfGaU)yOXkwaynoQ6nQR3geiZOp#wsIF_Gwd5pR`YW%z!Z?no z%5rjYLQYyxxZp84ar^cimfIO^+n|)fk0VOkvM43mS|~MgEQ4yIah5TAf>Aiv()T@} zF;$H+?*xp(1F>Y7a)T-s`yrZq9HYlLkbfY+y zl2~mYe)N(3P%sIHxBbB3={0KS)ZpQKY1qEf-WJq%wJNXC56L3(cu2tOnW{ zLrX2wh2fy8fUg(Nyy+SvkIi;(@*S6?B89+MNl{0qOxZ~W@7F`Li% zp&$GKe&pZ(p`y=_fRxXC_60uisZa3bm%hksDR$$xzwI3yuTIHGq3NA_U*(gZ{0L`v zU**Z$U*hd=dk5N9vg9TS+3fm}kA33fyzjm52d$XRguZbl_GQ?bx!D@0kO?y$Hktdg)(OUFFh#t7#cKh{L8-r`ALT|VGeF$Xpw$9M| zk#;fXa=oRh>pi8Wku@gzh*4tRuu7c7sgg{jVel;HGeSs`!DXE^KJ+8bH0Y{jyX&x( z37;#D1k5-7{ct;=bz#Uikcr1g*tI*mr#C zi(lr~f8{rL?k#VnY8)@W@-i=c;d5;I4s9*U8qxqNeuK0|%K=Q1)ArlF=SyN( z5-Q38Xc}&(e{b}C_g#v9KeQw$^?6bOwht~<#cf;;Ut2j zY((K>W{eV4>-z!kBO&H}rW!?JGnsbky2g8nbg|ZyS>V2|S%xjO-?QcZi4w?dt!T`A zAdTWUubm^B5@?+w$;iI>@z1_MHjbmWy-BWN$b9K5FY)lhkFux?pZ@$8_}q(M;J4pZ zmyAx4Cl&r%@s{VlnYX<4t$fFKeiy&`Yro8U-}gSw&(6p((X^7wG>nqh6SEfwfV)3H z7~_O4$r?XSmSas-S#p*iNN#Y7=H@>AmY|?d24$4MbvYONXhLT#d0S8*LXDc74G#=h zMR$jB76X_pG5toV;zlUq!xW0HOl}ILveap)a>He*&M`_CE2v^Rsi&+YZl4LcD>_W2 zY(m0Sp zCX9i)u8NI5?=>+o2aHu{WMhePfvJ@(L6+ruX>pHro#ePUQx&1TCk0DoMTB0JMKOoW zI0oj672XdVtd0mFQ0p19x?#J%LMsv8I_Cs28wRSXCZx!GxuWZP4p)m}12z~1bz^Xq zDVtj4+VKgS&4#dA0TOVyoXv5{((QIsmAJ7Uf8q&pis%f-$H#(fq{M8wKx?VQnI8zM zrmPh+L}hSwEsKlML_hMx6HkzH<_n+w9IM5W%9(uw~Nfd+WiTMJb0qdxmTFeJ2;+e#|fx&0OPSBT}6t!!p+ls1g$ywpYp6Ew1iMwZa zXxceV)6&dl`$2Vz_=s6iw+*w|f~ppDUMWKuLeH!gCB`rknFmyWw1@qcUy*W3r3KtlmmW@`*K=cOd=^tIy{x; z`i+|$9UWm*6qGzgjB~iUlK7Kl6hXZYGC;&c{MB1E*EwUV?Bp+Z`8|S1jkN zeOwO7gLZuU!_V`@Pk)Bm1wNAopW&Z!0U(guV}GEkmylV!+w;V>w96 z&p-9S%KNeB1k1=F>ylCBUWuth<;ZKd+oBYVK2SF^`Z4UY<#Nt!w_A>n4>4L8kE*Ij zK9WLY*L8$pWWGE=rA!Pm*G zEE-r-H~6bH+pgauqHWvq@WT%S0gptxWHgC@!t=8~`%ii4r7yFZuekHISNQbjzrfv# zOO^*KX3dP(?ws?_e&+w=`49XdPd|2xc{^hqjx&MO&uClr}M8do7j%lDO_sx$ITN z2x1UKxRgE{?dY$z+}oaUe(P~w{L(AjT(-RO(o3v&TbgFZ{Gl7%zI_{G4D0n8JJDJ4 zLk9>!PIJca|RPtu1=?cm4r3xJbaN?6 zG3EqQB4ydCltAY=%G9rngo&2G)8nH9#^Bj>JtQeH)kXx`>-Cz}S-hWmmlDR=LMcrP zmXff-n8k*kGenr`wVkPnrfB6*59rjySvQ-_pq$)ATU3JYjK)~QcIc@ahe-a|ZG~ZhiACCE z!{ymMypB+7D%)@{pO>;#g>{E1jV}aJ3OsNxKT;pk7+Ke#hOr z7yQoe{4Rg_M}MS5=?uL8-S6V_FMN(a`oJIZ^4Gq?@$oVJ7)6_DEMqV0QOFsC!TZSW zN+J>ZP0wz#E5V!6i&>Y0+iG>da(PfT{s(F0`5cW}9#(|WLx{v7k_Rug{I(%Rxd%rQA&J>$H}rTvup34$uQu#< zI~KFK^cot+tg$rn8l@vg*N@rmdakw`G7<!rn-Z@MJ>x9xBl){vFjSNWh%T(EB_xo}z!JxVr%_z@AEFHMgpI8zA_TypR zqlOb>WwgOgX0%M16T~Dm4RvEqv`SOE3Y4bKn&+N*mXm7ETOYec1>8J*J750FSGab3 zgaO|E);F_VU-6bVK8u|oN&w?D-Fkpwpsrg?ZLzlH-~GWK;OVEHV-fTv8EP`5B!6#0a^hZaKMiL2zU!c%WlB9T^%jIp$Zh#~VoIbE zGNM!o6jj1QD^;>Vaw(h6qAAPz{tcXU=^M{lP6aWE?g~jgw?;9W9iWwE+wa(HcM?pf zElpJuhMp9n(0p1>qX!2Em_pSWE8_o{Qt82ylNPZcX9XS9CDr}#@K6da%Z(SNx`L)= za*-HgsOxEXYH6HheR)Y`EGY--rb4q|2m^=5M_lbX&Mz-$7jr6OY1@XY^;&YX%BC#U z9Uf(%YMgAQ!$6K>30##E$JNy((T`NhiMY`BG6}FFmmtWoWuEwq2F=$)mLa{Ew^snz)UD@R2&|z zIJFho=t4t{WTmKU(aO*?%oYow@(K!@Vk#Y5x=i(1h8wbEBB96{tQEVp&IzNZQ)LkV zn_PyV2NuFC&xAZPrP2vObMkQYM6vT#FMo;iZa{4EPAiDABTLIfP^t z_X5|H6J5V8&zn@8L=wZU!(jHvQOF6jA;d(|GMFWVwj!t!_fkH83gVdaiQp5aa$p_F z>iYEQaGse_tgsRd;Gs~E7G)vF?&Ay*-vx(_ABiAbKdc`xA4gieTetH>)q%iJ&6Y=r<~rZ znYD+EDdUw4t%A;mf)dqiI;nOFNwK-wF`pd}#*V!6%$Jtc;VF+j{xpllVjumnSJT5@ z6G?HLl@E#|PD?EcN%U~aXqu{_OPS?-MF@e>Z@AiY9G{*rTQ1o2J6tW!XL0?Bvp9_& zopPaOb?JT_8TuYyHG+gj`MQ1Z4E>J5j~v~&iQjejoMk`Cfv)Q?t)n*5ktYLj(UG}^ zi@WzQw&Atc?(+Zq)^G7|e9xc50w4OwAMsQF=pXR=zyJHBAwW{hTgTz*Kq|@>3yf`P zn>kKtnr4R8=VZX>n&s-41_ca6}wlg2M~a zmCO5*_qytm!9LNt6Jn`_iW5!gRKHVX5CttuMZWN0v9wT#dGB(cbg;YKu6+KCYie{S zs5K-^IhdFSz?5+u_lLU4AU9R%JP5MDME_IPQ`t|nnlzW9vm3k@_NN@yw39kL(e>n>S8)>aj<8<1>#_h=$^r%W!#lMbk92r8)t? z*oNoc@y$Hvi4#Ca(l6F3$ zwxWfQkTlV5Olh+!6^B9LOCb{r1!xLNq!qZFW#KFN9uLBrBEk;xeW>CrP^k=l6Z0+f z2}!h9;tYPk-&CkST~M1;bXK`wTuSK&)`wo5T&`IpN#+1`a?yyBKr;31cf;lJCfi18q zfcK$@6eGJnVw4sQQdan3AX|+e5+OgS*E?3r1D<+%iPDak0~eQDy6uQI4y($rF$NY3$7;30 zB&d!nZk>o`1(hUpPi3r;fXjk{PBIK9;`B%1Rzi%-|y#L7K=J z6_G_Jr9JhmwJL&H(OPAl3le(2GRl+=O06X9FQG+_Fwp=Hl%S%t)LkLT|0#N`aa2Z% zuH`T!;#ubmz8AV#YfVrQV>R2WEsN!nwv|xP$sJ`4wC$YQ*5y9(B=6<>D*c|_Fi_RC zAiAlDORe6A3ChBkisq(hW)h@gY^bzDg@{M`{IqdkOey&mO2}z(!RqO`QwD7{218bc zK8ju~>(V_@7TXw;Bt*9hNqEVilNJIbD|8ubN8gi>oE#aDN<>W#5=y8mQpjWi&d3_2 zv*_`ZOAMvsGbh<_2~%Cjl#;!b@Ls~#=>x}K&stgp`az2AEm@BO{s#YV+yc|=_cecJmG zZ5s|&$AqYeS`%|%vso9KT68|a7w6?TQrB~~muC!PSCHpp9(m$vzWqDCi)%MtM+ULR zm&0ix5-_?DQF|wt7F0I+32LApJ+svz=fg-wzUHnQP|i>_HOu2esg5ez*RJbmni)AO z8dnvH433WvY32D{_i*2njHYC4wR)c6|{2 ztZA6F4VH?VHy-9{b4f^^U;Fi6r=3^)>F@Y9e&g4Fl~2C#0;}Z_^OFTe8T=49IXR*# z;Drwg=W6meGVD6WekaIU(_(GKcDscfaRm{LIg^5P=VB&1i40H^STP-hGLslQ7GNMr z`SG-mmiOc9HaZc(?Ee&k(7qATIx8Mvc?vtGibgbrA}B9ZVpg!}wls}&)6VB}vNCMC zEzt+rbDSl6AVgFndtGG>PRYS5$0%!yleJX*E^$xGmd+MgbJcwYDXT=*R<2Xl7^_J! zu-gqXvnWdrk;P(;vxaOmeG2GV%?CgEaUOf!72o~Nw^5f%bg^A?JYNxW!~k_=Ajc^rHaN}KyD(5n z+;~=@j3i?ViYDk^j%lAIqX3J9!6|ESQ4>(u+F`XPgv4sG#3UGY9XUsoF{LWSb9Hqk z^*PpJDvNWKxCM*AFHkZ`P|Vw!oezvk5^;?(#0aEBR2iQnj$j;nPEJm!D%qU-epkX; zy?p&fg!;;8`b{sJ?kH5^u-RfN$GwYlZk=AonTpz2uDS~mCdPpGK?K|-k0koQI1I(^ z?r~^TNGzKfckbLltpe5C?Y1RIRW^tiB9V*_e(y%h zK~O4J)y18Zq#=7++_Wr$K}A8kDFxaol^{LQmF1Z3CnM)_Zlv$kCaQ1u<=0 zC1#H@q@^U8Wv-xcswCArt05+mfmze;PlN8DSjfvsaeC5X&crcGWP`Tkta0^>7$dvB zFG#5-WTd;ZIB|1KZ2O&@_Kf716?j<=8YvN@!YBz+mC7?)7SCx&Qqy9^lp{^ClN%yg z$ul1aWGg3mH3a#!T{5bN|lh3feyvJsJN!M+tXD!b>`&J%$$e2&nXeAGJUi#sL$}aIzyoJn!q}HQK+mopFt+0OSnAM} z)~psQnzrJ#ySG^`SNzN0{#}0Ow|=v{ABLd7*^0$%iCP)7%3Q54n9XK%yMb}sqGM*; z@9@3na@$cibMD-}%Z+PC(i&i;{2Q$Wx%S0%pC?MMj9O(74>@7>4$blol%Ic^s3xS> zAd-{`Mi(hd8OV|dcqW%&&IzS0su9zt6 zgdnqr7KXrRFo^a|kuYRoaY|=lR+$_{?y`qlvgpO8*MsiD>CcgjDIfFRGx$(wPiY~T z=>K(#p%4__Se3`t%t60^i6NTDaF^m@@2mKr5Abgo1Vd{Eb#V} zb78Dv71yLsM7$sL~qB^ot#F7}Ul%%|;EZt(JoOrdme;RzyIZ;@< zVgbz$aIl5$Lk>dOv!maNQ`` zV3d{4x)4iVn3CS45WG;IM(^nqopY&d5hUdQW$jISZAq{DzTY!d)!zH;Gv1+Zk5scM zilRu76eB{iEjWoCO;Bve3M3#vUIa?)#NQ$QC#dB^itw^h9w}Dl+}3->xTjRGjmIUhO~865 zd5K1xeK*%Pv&zeQ!}ax!qthd7WAIH&94plX)+^zVVI7U#V+o`_lM}SQWxv_u8mFXi zx!=`Dal>Lk>i3)+o{)-Vr=gz*%Qfru5v^~zb8?4A?|h4^n=4KaUSveN{Rc0;&gs1u zDaB)qqw#?|$43k|H*7W=ymK6Mq841WE&Uj!`!AJ!PGTxcp}1Rk+2Tk;(t9oZLP3qh z%&%mXc{?Fx3D?L`Vp3({EiqFLS2?(IO(ZhK-bOiD zV2;(av{*wV`pFPW1Z(JA zAT$~VUuBFor~`A1g1DgOf|4Pr{&2ODjr!~uOT~#t5Cv;J!8vjr7>9_pM(hYMvbndO zg25H(T%~Zc7&{5!EfjDBoHcU;Cod}-s}vXr0!YU;x%ACHpP!2K% zgRh2KGR8`pKq=C!h=NPd2Jge%yg?B~V-+LKQnGAmDYNXB5Gw&I;+d4NIBsrkDCP!d zMdg+-93Gv>I`x6z8hlu=Iyj;U9o85+?}*ziZ@u*m9zA*wbH2Ud)tBz^ z;OvBEx=(0vZB;D@>^E0@<*)uD$46^kd+lYgmaqKDn>;>$#*iXs_g|oRiPmYBOSZ!v z`|KIc!1~}oo(CUjgJcEvc9;*}k}{j!mfa}!C|H9*g4V?}-{2d^YPn<^GyQf)8YAz% z`;e5Si42G>$2bl+XILGbFbt8@4=N%`Y@S}QXj?k(*<4(+SS&a`J|^}9k1sB1nufs$ zzcgk;;~E;{8HdbbvEb_J3g;Zdm^eDQ!$&{%UA*+t1G+^^%st!vhKUDQt;HILDOsKg zG%Bvj`mG{_ms-gfrkFSxpX*wz;u(c86jcGr)JCpbE?MK}jBsy-?uk{tbTJc}uBdOl zEtajbf~wU_CSrpnWeI#A#*v$w8-_TFCshcF-E8hL#e`H^YTo@IAFc_s4W)<{H-7SFu^pu{^E<= zIaslI`jjtz{?GXS@BR?`-In*>eV0d%9`Tt!`U5;h7w61bl91mi2hA8mPC^DYPQq)Q zYoJzs`e%NQci(x$@BH>}Qli8MT;FVkbmw5bUa{Xw^o~)!(-;TZrc*_RARyv`?eRhU zlc-jrRBECYH$&ia43C?L<|4PG8YP;e#SVDoYEATWN!1pFW~NmZDUK$?F&WwEc(TX? znB8r)D_k#;B^Q&arQ+r{oA@wO0Vk-2#mzy{1%dVjrZl?YiAU6QXolxh78N(G##7k8y-A(z~gtGuZBxsQxPp-(KTD?WDtaI{nP^Fmqv`u5caUAj1i}SH=R#Ou( z@mGX*C^?X2l7Cx=Q8(~qYe`w&N7jZE*>Q|?T}R28MH?7KG4 z>!~Dsk>_c0#kR)a+eQ#Br>ABv!e@JqPT_nj%0--vO(*wjCsTlFY`W?e!r3eiQ*K?r zWe*Uwr8R~z4K(e75E^cFTd}!tBcWO18;E$;Ys;!xQmkWje8x){hMf7v+uz`NH}LMm zCp^14=MO$}!_WQ0pW^iBkafG1X4YigKBeGVuGieZf1ej#xF?ffIJ!7E_$9B8r@w2C-oK^MPh#iA( zu@14u2@MUF?S9W9G;B9Fgf6h#Z8^W$(C_wii-rd;zD$XUao=MxTwGjXgXBGyl&M*A zQSaZmFO7o@oSdA^HVza|DV8A(#0t)gELNV)ZpZ!m_j&!hKgf^%=uh!K|NQ?zjqs%} ze~DlIm%qq%bB*g9P219E;RRbOdx29=!7_JUG7j@`b}kU4wF+(Sp@EsA`B@MMN-e_T*A%bqs!>zKXNwVr9-76wb5IaZnH@ zrGzu$H)o89d`6^zo+vvK!f5n&osw2=fA3Vp?Z7(;2G2@!68b~{=fOE%d~lyneEj3Q zc6^A_>+*vi{{cSrgFiqig@fga)3Y<~KX`$cUwH+uxbk%Aw8PF!5i?+D^#BDUJP3;Z zvHaLi`~#Y>;tOxS$=ly}ixdYi4Tpz^?E5XlxT9-5B}Imzm$6I|;&RCuUzOO7QH7PV z{{^u{lx~VvsV!?VQKDmMHC<)NLNmhIcS`!=>YFEYbs^+%*g8fq1l2O zhm+K-(&^7GDz|T3%UB0N#uNZ6+Wi*YsO4d`%4?OwSonT27RtG@TuM<=D+Cu5(G<=X z)>5q_bWWtHKpVW|;Tfr{y+y81u^8WAmtNFLathOhK*e%#x#8&K1Y;^Gi@k*N;_Fcr zy(3pkbNmZHx6SrDVXPaGVsz$9XY>KbzH#a-K3;gGq24NJ!8h{@A+ z$K1X53Kq-x#WSq&_$IK=k&#h29nKPKp=9a&bJh`CN)&5o8}TU;!lsVxbo4TgJFGF} z62FaD35GO|$`6q2OJ~e1^DSxtG96k&8VHSNzwZey%mrl8!f}c_nfzKxEf{ZSPZ}{c zmCeAImOf<)PMQb{wumurXCzK2Af}MiN@qPLW-9KFCQ9gHf(o$QXZu6?pD;Qj?P8MwJ95{v#i!jDnhysJ`nqeWTJ_EOUl9vG6tv- zV+_H1{W~qdN)a0hYawM_$7*q6Rc~C1WXUOtTxua3OR^P@pfanl6a`~wWIU3x@}M<0 zQ}5{*1sOEn;gFy0ou}7ub!Qw+5CMo&`x!}4kOHS*xVqU8+D>T&6Dm|>J=q{gf|F~I zi$r8$WZXaVIst16)m5r345cteu@uNvjDsCgOpCpNR%3 zN__Pze?_}maddLV3opMczgMoj_uj+jRJ%n(nxkX_#s#i9z~C7AM9GeRHxN_8E3mNJ zT(VqBoLbkkjAP~ea!V%S8pHN#gLQDwwL<5xmf!;31{SU1>EkCD3kQosp#=cz^`V4x zmqh5q_b;ezP1PxncY#$WVxUqAmsdBO+__7vnbpY=f9vo4m+UGm0({>`Kg{p__9@?d z`)j0>h(HrMcKu!~myG82R&D65r5bx1casn816SP~v0C8E=%EP%Ex$G{97fUKhMd zeYNY$MHG5MbP}N1O!D$V(&b>i-n*nlfZnI2jxDN{F}p?J=#(o>>*&W`4$L^hFyNe@ zkpofJW<7i?MvR<3s5$0YO2Vko8v*R$4n{3pIS zJ{O#U5sK;qhxA>#W*1c$DG&?!XvCX)9*(y>a8$D30?<8 z)s`Y-9H3h5@auDHyQ*K5a7`xR;f&5z`MX4wXU}SUm72VI>$F*vLoWomrzHzwB~+RT zofWSsV+92(xk&LhE25Emgsh_>tIdd4?v2&;G0)wkfZPu|3YA4KhvUiFU9N6!==+Fw zEeD4k>&=dbkDgM$Pj>B?62XVr|I0W86(RGP&wPd_kDl`RKm07;eCH8|$0uA|T+nqL ztAhg>uX@M&;E-p}F65xEV2!8i9IZ}EhS-ads134zS3~OqtGjoJNqMn3Gwimk50;Al z$@tsWg7vcgSDnx)(m3K=OVccAeGp^nTv)VXk1=e;7Gtq!v5n9L;wVM1_Z}NOX;{=_04-DR8vw}OSNGx_T{7v%pQv+djVpJ>Dc)b>r`@nN`j9N(*Q>77s zTV-}F_+T0P$jSPEVc*ks9h=<^@4fRDsozsBFZkH^ejfnuzVl6Lt-SK`D*!xt^oU1~ zAM^eXyw10mUjM&dg_EOWe(>-7Z9ew#kMikHf0|$ajbGvM%hUzyEZUT+sEQUnNsTCP51q)f8GpmKN(XMTJ#w}L5Y9sz##u%~- zl&WswS-65@kqpMhJACk@5&>DTF-8oArt$PK2?5@FeAChQJ>xjgxn?ewMf%>5#!=OI z4x=1`Ay$TALy1MQ=$vC5qnJ5XDai5|DVjY}bP*ZnXT9 zez|5Mxf)~Wnif-`^?|MtB=YKN!}4H3*RH@;hL|ZilboYE$J47Vm_i7SrCR_6Q^fIk zeX?eCbVxt$IX^#V7zVr--ye#g%rYX#^9aMBOqA?g#W>V@3r#~VuCdf0~G z$X2WY`eCQS7#%z6HLhl&CVHFz03ZNKL_t(ibt(VLT6yLWewsmwWSk+G+pM^u7IGY@ zIngy9ixuietvD~EZEFQpHO6XiyG$ddgKt95Q;E9S*4cU9s2xd_^HDtfkn_&ff>BX` z>>)~xK*;YoXVwQNESeQp7nfXJ2#U2{uX*_JAr^?S%x2YAGf*LcNqqM6f5b2R;y>q4 z|KyAK8aO#P=5jmY7Ap>2OV&}XZCduJXFu*aI9Ot-?D|3Cq^j)8sd#*Cu%=}?q_dGmT%VURPnxDRr=@rm z9%L;lT(E$XVtkse81G)2Z#Lh&-^TJeDJ&ZlhL-1B)pT#N>U1NWA+lML;yc~k+8C6B2DMZ0C-}tPOe>V{TwHS29 z;0>fAQhjf|s19@04_D^G3o8XnjFA|7L8m&g57=z4xxBu{dN%`r>w_g+4yZVlIz|~u zAfMS;`)yEVP(FyYR*@-LSXeH4xj5QE*7MleN%jE&b z>m%u2y(iZ+^8ri|1j-w)D4ImcSntIXMn8Aej(l>E_SFbdg`PX=`dcW(VIW%>`B~%f zK_YZw$(UGGbt=zOQu(xVVxl>Y;<@5nrHqxFDkYR#-T=30^TRlhtDq8sCRwIH>+SWH zVYeqNI}VmB;SR<`;~KnTr`D?Ztg|?kI!{R1Wc(?SP94=5hM4J=E3$HqBsR#=XkOPM zs4KhIREDZS#?E5ZJ1WMA!?54&*xp>T-R__!n)Lxq6F53L;_&Q<^D9VCBYnT4Z4Hev zOr+-u)avvAm(JK2ul!0`HxufEZj?gTRF!WPk1>kIV_?KLON;%Q;_aSNDlX`V+Q^tz z)KV538ct77aW1gm@9DaRX0@PCk&CNK`o8Dr>_nc=lp&)PS`*tdcRN%!fG09=X|UC1y?i`JO!9b8&u! zZ&x@M*lv6NpFjF6Kk}(h5&?-zm-nJZo;-WVZ~XeN^48m5$2rU4@=#Qz#<1TFgf_4r z_Js8T*vfXhVHkRR7R6>T6;lg&ER>k2u}mM7VTi&xRt4aM)EJEBdnTHab$mTyy<;Eu zEL|r&#yrZ%%zB&=@zE4-l+p;wGp0xk&+cXev0}zb+C-dpTwGnVx!e)f4Q-b&Mx4x3 zv!ZKT`e7%E#hiHb=pldn*+1fg?|%bof?Bw^xIhY_N=}K!w|F0jag;(Fu^G~hZQg^c zt=Llk6U6E}6eC7R>jp>#8RJfZuPTN2t&6+5#+%89&&gS%{Kj0%Y;}_nw7PAYHr82wH&s=DPJL!$sv=lpK56drQ$}QkAr-pxr&jv!T$R*R*TS9-$iLoC* zQN~gr_?E?D!TVl)jrYCw8ZRB+QM!WV_19mYjlE0G+_`gy@A)3b8-EiB*46n1ckkZS zpJl-ZKKhAI^4j~}$M62T-{SxNz2D~H!}myeU7&G1FK%@Ua=^4Y?Rx^<*lmgN4X)bzwWF-C(J#7J_JuKCoP9sB_AMM!a_;_bM2&QFye0A1e^^7D@RJx zwJd_<&spQ~9ts&BS`OAhMt=IWR4LMe4H7;Z93eQylE?;JXoXjhi@0tpbUp_xILUgO z)O@S;0c~i+XKWk-)qFD73&te~}-Tf|s6qeak?d6^5HT!P>cG}ed*o;Skn zq!#J!ofP-OnC4N0H31g_)>ullibzy)Q6hPk_qU4$>*FJq$`wOJ3=d9@B|j}^ymd6r zWDCED>PVvES|ptpk_DORA!xE-NA(&22P_%vU2BmbpsfHyv`f z9!J8H8?vC=mWF=FR6Hg)VzKnYK&c5^6RT#0)vNzN&V&7 z76|#U)%{J1t%?|Z&x9FSS2%3Vaw?WgQJO|Bg(zelytP=(@XR@rYh}!dtlYWD#MUUF zAxddO%?R;*t{taIm!7}M-TeO+R?}xwpROum4r?TM+$gHQSae)oU$I=S*bb3{(^HD+ zc<|zDy!6T&9H6{iokFMuIo4T@k51`h#o+(?1(q>}%galS&+f|I$Q7LB==2W%@MnIO zANz?P=NJBuf6nj!{_n9IBiGm07$0a{ASY22744Fq4{c5<3+b@!WcF=D`QT7!5*Y|j z28Q41H65;5m2)ER7WjY8UjnQT$R#S2YQ%F%3#RF2m0A@+s8GN-9hFT5*0&XQ(~Z^9 zqDElILuZ7%uK!Q1bEs;?&iozm>M>%HYOBPdn5in4@m#eQQVYT^v(XJ`8ml@L7?e`MxEU322obmoVjMY)d-5pZx7J#$ zD|8D{CN)k_fl>-V3zZrt0=bY0tr35%rZse{1KLKU%vj0f+wFE-UY)a46V;eUVvdBa z6Y{iUqCd@-Bg^~)@nHgQ3 zxUPmmaT!~@-Y*DF#)dqE{jpV7yWlfz?%amQD`_7;Ee`9I@_KmHLMj<3J- zb$;!a{&#-=_kNdQwJzsnat_vid?|LmXf^yyq2_@#a zN=%O?{hs>V@tR7JqQU5CHX~w2M%YztkBagI^^mpZ_IWAw)^N1iDdNqlhubaq@O)D~ zdDl7T6i@-O*doc%ROh`{_Wo&t#eeoSJp(z8cxUHO>ihTav)%4US={P3yOF~?j@4>S z5V;G%$tEpnG4fu{h@tSPDBNGWz{)wYSS-Xh%X{#XYqM~meADqi{`^1TrB`0#Uw!&F z`0|&(%;m)ui)O)UwVn<4YEkm5Mo~CpAx!DpQdnffxUG~VlJqK__+-y7H<%d`t>l^i zgceHPs8m~Tpktc<8oaR-tHW58eOt{`#40{jDpgUb$(w6JuAYB5%k%(R9c4`9T%&O& z(~YtEt@<#T=|HUVd1@5|YUV^4;WgBfHI_t)ed@oHQlUgOW%U6Qs}z<#us%4FLm(z{ z8X5LUuD3CyF_TKf83@azc0-kZ6vblBQhXYmIPNQo*fgG;Bg@v~m#s*>oyS^F-%Ds` zErRMyh@hWTcSfQ=VjMU=Jtl;}`PC)6-G*@-S#&FIwi_~)VHn6c6RqLu`a&RC549%R zF3@%2y>oCN$XB;qFythBlPu#SYqWSljAxCNk)tSB99az@ty2pHQz==c$GT9c`TReHh@KtTv?)wLE$ zA1K24I9ea_;H8)7mWRCa?jxR_UkcKx>y85BPWV}y?Vdj6*`Fw z$B*9Q>gtL`)3P}_I1&|^%XJi$m5>c zSo(3#&341_@v&M=H0=5cTS$?Dei`P z%aeA_&0?rxZ;A2NdR0ox`9m>y>va7v7yAxFDOw9u<$l%Y&*R&@LoyqfjnJoQgE7iQ z%UL7I0&TbAX1`~9bqy(UarKm!j_&C6NopOLl8Epl=QKC@e**dPpsKRs9}kK|Gb*5RxdIcu#NGONB_Ru@W1GV;t-4dW)Iq$)3p zjH;Tpqg`~=x|IzjMIJnOz_Vx1sJ0UPf>P6r+5T*lNq*eTBw$!90K{7j;Bx0xx5i)_oJgD@|f7O zC8fl+-?JZj+TgWd5=72aFdl9$udun&+-Ya{fAVee&2tX_W)eQg^|e?*4~-N4S+0!Z zKnj-N8jLf9F3epXMn)i2-N40yKul=Gxm+soNp&@(DE0sv!;w;=q=L0UJ0o%Gw@!+b znlg=X6z$|pt!#E1vW|RR2rBtj!`}+ddy(@`${TCQB=V@}E4q1Up`WYz+!@qLKvZot z4$8HPbl&s&tFO|u9q)Vn4XUwx^{uzr?Rzb@Ga&@w++^V(@|;zLaGgXL&<62&8uqH?L5LDu55#*79^rzp?G zc6Y<|^)(NlTyTDQLp7GRTh8X1jWsknPCV!qtehZL#ydeRv_l<+ff5Ui4OnM5TrRnL za>RoN4>&knb9udC7)K0-COG|jWKd^d_va*t}f5HxVq-cU-@$`w-?;Ga~~4y`mGoi=futSn!MjprsN zAk85ea8nIp=e32Nqt%GZ`ed7AroY#H#$d6fQmgpl2|6gTNrEQG*Ow|hCsXqbUbu-L zt$SCk;x0cm(!zb_QM<-K>_ zWw+bW6wCb=USvD=q@m~YZ+?~!ec%mNufo~!om*f8g#c@1x7)GX?Vd;b%y%5KO&isJ z?&Wpknn+&Gi2}~*Xi57>jIsRJfA2?m`|WQr_L1|aPbJu~>{%ZiaC&;m6brH+2b?uH z-;i=f^(#_%m5gtKz@Vxku%?kJ+cFbvYeDnJgf}#fBTaK#*o0O|x(Hkuyg=D@Qi$nD zE~SXc!g-mZN-BCNOa#w5@v`hZGL#SRX18`ZNJQ3Zt(6BXXrbXOVy@`q@XzABoF~Zh zIsYVa##Y$cdWJa8My!*%!Uac3J(m|ZB5f^|#(DO=5KePS^l4Hribqr1h&;9lo?+iJ z_5&fvz0F0&zE;Vl%*)C8~5I0>?-Geg&4LnGWMRgb1|oLz*CsRV0CCCcv;0>(JnMgq>g_jK)& z{eI8&c86;lq#ROyP6${hmK7N3zV_ol=cI@Wc0wT&%izhya`fWMWK$#+nuSaV3t@s1z}nEji?%H6wXw2O`c zT-{u=+4W>SF&1q@K`bA}-JamYvSqpGXq!OPXI)H~tEdBws+&u~H@Yqjn37qv4R>BS zZE9Inn=vbyb$F=D*KJ5P@4X{37+K+I7*>3l2c5Q=bFRa@aV(Yx6mQv%8xBv8c=YrUDOeV(P7JXV!qsvI(nK_3Tu<3q)14fWcb0_YZSMM!#j(Y-Etfa%N)m{3>vLDd*${SXYs~x z`Rtso>%;|pjNkFhmdT414q=QKCwt>`K262)oaZ-u0u9LdTU4kuaXE{w{}2M+J4^}e%TCtV81ZdG-%9~3&8#5)C1)|cE{W_M!G;+H zPAN@H#hF{^CN(7@>;m=sGHTJ|#Ygh$`bG=9!gjNP7zx(!-nZW3jn`h{Tkm|Gvy&qX zj&FYRZ5}^;!Y4ld2{4AweeQE)V|nBC_y0}UH1J%7SZ4I*_HL>xbri3ppZtmcma~&H z-hA^-{`^Z{~>p>Rjgrdbj;QHobHmxtUx zy~pA5kg6oe5E|C&Bl>517VSa`A}jjp)oLNO3ONy63$9>|SJI_)e`A((ch_2KN+Lxz zkm4X7LF(*Vk)k)JiiwdFWpTG{D+i#dv`s4=+89+PFPCB5_jIj{RSn2{mP$@ShCMz# z)D105u(`8DC)~nRr1@#OR>+|ms_tzdPT{|08nI_8j*_J?O0~@V46xMLD@?vRG zpdWTTe)bfMQ~sI}l#)tHBST88nk83HAF{c;U>p*zk;4U$^npA|Q5PIO1ll&RT(1~* zSA^hojY-aFwT2-lk;-f2juh77+fyy1SSTc{6;4b=J@Y0>`TVIQ-*3uAof^nlSzHT~ z>aATa2#p{I-a8tRG+<064g)v48`{-UJfU1=yb zZ;5fKfxaIpbyAN)$%%0s$YaD%8G8vl9{L+r%Z_fjV7KiV`hMm%Nizt}8%i=HYjI5= zI7n$n4UUg}{KG63Eob+R_`^T^LyR??pI@O>-D3gR?7?i&h2~9Ke?n=}`EGPCc3V%$kW+;`RPsFyvg@z|jAJMK3I5|8b#z?nZ z@U6GM!9lyAIb3mkbdS@M`@HzzH6A~Fhny<+@89Rc-}6E4-#y{_;+%_T&)96P32oqe zKJ>keDRR9V^q{UBtk$GjIJl!uIBxx73YlK^zjM-+S6d7kuBf>$Ez^S;O{#!rE zTtrQNUK0;+_PJDEm>}$WGL^}6RgQ40fJjz^4HC&o;c0_cm7w8fdo9g#*YSbx{%(#= z&v@~L2Shn-k~2q+001BWNklX5aHBe+ks!k8;hXmGC z871lF6)IB18SxFOC6kMc-N=(Xd7#}G zMe*hviC{4kOnmE~VyYE)-f0miu`Jkt^%if%9sly?nuU5cWi@k4W29+3!F#;7l(FJF zxz9Fu#+vc11k1MG%jZssU?i}$>lWY}TGwC-a}MCX?-?&LHCsx`Y&SjQI5MWl3opC? z#t|BSYp5ts!wj$QhLK`KHHVR6dm8gO?})=73dAnx!DDEAAeX4i{p;On4Rrte*`Tm&+xlCdO^gm?wg}Bc_3I zzne#IQOTFpIHIcly!Uu#bVRRSVTwwQ(J=IpT8;9PM9tf^fhITth27OtsFqS4yC~!2 z)6-K9504djmZfE#$9I;{HbO3+M&L%oC$foG##+dw;%!U2?5M+lrlQYQE#BGm2{f^)*c^s+UvQGuq1cumi ze6r^L-FsM9NwMc(wWP*@i}NS!wi`~5k9gt!eLnh;kMaKZy`K-f@BNbCl3{%MnBV{1 zdwlhscd(6RU5|)0u{>Jw=v(jdzBfL=>hOpk`MZB#%ag!IKKVl|f92QbahW%kgLXw9 z#S@F7MMf2#(DY|=DML}-F^Soy8XyR|US(gGcD-uLp&n5%|9f6@#_*r~mFj}Z%!9HR z(ln_wMVabm78M8rUui>Nk6PbU1D9>~dtaY}w~bSRL{1`37A=zhy-|Snd7qaEa!^gb& z$8Y{k7Fgf;C7{ji{MT!jzFe*N2mk12c;Ws%KK-wLoiBg+%UoYybAEXtYLkNl4Vn#P zGQ&_*>1TuxZwy0BO1hPsXt49_cp}J6rhlbKaW#$6X11HUUJEQL7gsKPRag^vzA7$a zpAw5gcYMpdC-iy<&DdIZrTN#rH ziPF+|2~u_nVb_`|lTt^7<-#4Rg&5UIeT?{}l@YA9jAPHDX+gclriB)BqHR|A5NNs} zYAS1~rP6PA?E0;EUv*1DyPOf3369QG31)WUVRH9Oke*#X(lj0YFfb;AH=-H|A&}z0 zIP7IaRG?Wc#2Ug{Q2B1t_<4L7brd3ADH599b_-6_>+R8#Ct#s*QluFq-!K@1vq3w` zMn>fmls5=ljt-A$yOt@>pb4tvEyA%|EIMwsJtZezdGG>5E{y6m zC(hD!rhiN$fC=FeBDW+Cpw5+;@!^1UQ(+VoGS}^22wPyO=Mv2t}!?>TH=MYpi z^&Bc8N0rw&kV2}7p(GwXdzW_8l7__Donx-AZ#WBL)lzE3hGyonSmV{B%P_?K%&jXa z6WW%pX=SZ?PaY!|7Z)5J9&)f+^8VM~$IW&_KMw4)2(=~)nxJY;wAiv%u5s3a`g*rz zjES}l^!qLC;#GVj>*@OXlGB%8;)5Uh9{%Y+{hv5m8OWMdnIag+2R`x1SRgmutokjxw{U84ce)ZRWjW7JgS7;8FT%14U@OUi-#5MEu z;+*dAnCty0XO00^9X_=4ULuH<6%mrR_$)Fj4`ivfphxzMP6aiYoq&ireoO%lufTxt1g!|TT#%xS zqD9tod#JpbT93%|%D{6|C^?6Dj&EqKULU7)iku0Zl|b}b8RE$0)t3IrIWNETUA%Jt zKF(UMudjvg*S0LXmX}_7iNoV#e&k1f$cKA9@7^stPO4&xx9U`% z-e;eE-r;%Hy4QVQ*YEoBkMr`&FY_C}@f-a9@Bcn`-g}45W+VEfn4zG#l^^0rSKlU(t9#(vRSM+ zc#JbygHp-2`hhS+f|mu^WSXwlNS6!nN{S$-9k$X8z9FTUL%wC9Ro38QRvX02F$LNF z?xPUot=0SRUY}%4y1xKa6x@MQ%;&OTSS#6--g~CgDMZiET}58 zoMZcFn+tHE{2FHkD47o>d&{pH3DntTWi{USD623|16{j=BqDR|976&%NKT{C zh#0f?7_Bp335-(|0cNy=Q>%$2xwlMzOaK~cmYBM~o_^17}_UADd($D>D&=)0X9PO=a(B^euO zXKDLJh}eD{)5`rjgg{haO(hGyPh2!x&hFop!p16Qvk5mIyACSS?Y8uNPusQ(!@y)R z5&D0ZaK=(NlQol;!Z||J>~=djgq4-TJ-p_O~4m>uA)*@55 zhs}nvC@6}8_P8V}R2prF5(n%f$T;;fNa)ae^#e?>Y$`uTQXS-T6 zUCc-+u-$I>gFpOz+;mDYneoh1Phu5R#|O->-Qx7x4c6NYUG(_dJ*%apUF_P1x8J|R z*Z%C!c>38V0l0tfF3YwRU23AV#`Z|sL!@v9bl~*(h=aw9 z>(zDYvcedR13vr8r}mw1fR|qU1bs+6|NPVcu{&5F*I#9MJI4)bfEB8J-u%izSJ}BBV&lfx}6Sx+!@@5wTy!B!at;#J$v2_1OePi9YD%MVc@c?9F{GFaLPMdY5FUlB zDU-?tP?re4r}y%HbzRS9Bd7^+^~r+u@IfLB5}`5V(`G^oieVTiDu=ex5!6btSuF`& zi|iGgsr6mcd=UM4ndC{I}lN_wOm;hHp=~@vJ5acas;corPqSO2 z^}zA*0fiI3Pag(cW&>%I2(i14Nm)=%CL&~35u-Ij7^v!s6aqtN*sj)~gqbxA0aw%v zeUQ;+OvDr@D@R0vkz<=Eii#LL!;tVk>nfDs08+>iC`S6Xq=eFTf9N8L8%b$}QQ3f@ z6+y{0m~uB$9x6LF3ke5L8e^fXg>_$470n<;f6^MQ9DeAjrZd*t6>Z;Ti@9tZ&N+5% zOR_R9_gzo)VQ>1;Rywg`ZX;2w|C`mC<#LJd2TTFB(3F*=8Vr4ZnKY4|XhuUlDfWT) zHg}EJs~zX(OX|87=i}NiXeRPk-;R(+?`z(hCbNo7Bjple#vmx^C z`*-O3p2Ooqs^cRHS1_^lzSC?ZvD*3c5b=3xEIb<74Fae(!e~hK{)DxfmYN zv^`zZ^Wf|Q{^HNS%^RQjAwKuQ(|q&W-{N9*PUBmqOi4!P5N@@XYm5cf2vHv0dgOI3 zh^LTP!paof9 z#vfHx6-~2cbZ4fNXu3g)r|eeUYq1ctL_`WWWo7SDS%x#d50~``pv0gNqqtB<-KSJE z31<}A7TmgVjVEqB#;wO5=Xk!@8_%q}jPZ#fP)%xKWvTxNn1*pAcliafhH3o5rKnBi zxSGD}Fz!k*f-sSeuifMy{o{Yai!Z*&|NOuFDsQ~`I@|3QSJo6|jn)>U6}E^OfG5xe z=^V%iFpcD~IC3``s>+Z|0TmWS!H^Wm8PT_8NS}ax$I&0em9qzh6q%X34`}kRmFThr|Eh= z{P080F3w0=Q@D!NN=W9CsfD~4{1?>p%Vw8Hh7Oy_`X?p^OO%5vx3_o)j< zSy;-lz!eTx78G^Kw%yV-4N6NPIuwCvIh74)d7gP=Ek-RUjGX?Xms4dj;IyH%rJU^J zrBGZJ;2@4j-%=D4G>Y}=f}QtVyLlT^iLgIu$sJVWh^V}vHoG0G&4#Lw;z0=Zijf$t zlq^=x8FW!d(d^|l%S|FPPnA20MhWJ{BgmFyBs_c+-D+h~S~3`wF3`$ikj{&77LB2_ zn$`~(V{wHzliYO5;63xhIfXT}nRM@*!r(rh|X>L@EGy13G^ZP%I3o`^os zbsa>}hqO&g96WwKkitWTR*I`hJAcZrl6@3@*PCy>OSkn{BTmQO zcakUS6s_+hk|hS}X$5&4-LyNZvLp_D)=^q~5|?mkETxhAJ_T^412fq>P`9~L?7f$J z0r|{li#a|F_!LngGOq-VeDB@^+E$!?q`<*qL5Lkuc}Pj(%zWUbPkkcep`j=gKm9Xb z;h>uFw?6+xzV_N5^B1pwhcp=awxLLhxh*-c6+iUc)07DgN+-FhIhu;>a3*(djLl=^ z9Ossj%Fgt(Pp%l}PAPYj$b|^V9<%R+<=)eNn@^+2U9`#~wYqfwUVTWBr(q279;Gr# z4(6BRa2XShVA0F^KpuN=>Xia1U1_F_^@hs)t36O!kHO#Usqy3FEv7zq{J?0LMCqh4 zI83r=RbaH>f5H$cv$;hfadu8C)~huK2XlFMbfW2YBwg$qG5`M`Nj{Jtd|drVQr0wS zt?BxPd36ZDFa&HyBnTJC@%bP9B0hHfkN?xJ^7gy$i!C?`@GWKtPUr*Ps(q}@c%i7# zx|6Nmedwhq%i*?>ge^)UA`8_Rws?>e4_;Zs9j!Ajn1^cv>$V+q;nU|AoltnUf+ZiDm14olyS9MvE50bWUQhe0-IgKJAd^KeY0a$&%kKtjnLB%4-cuF$wm-4?M`Z;u%|p;cE*yjK_x{AZSMQ9 zca|CJ@V-SUM^)GC);%Ews-j@iHW*jqlc!K3{1>E$1S7X?i%Ahz*Ana;b7wmxP&vv* z+YC}PG`lVXapilI)`TzshA0Cg!K}PJxn0-g1^Bw2whiL1F zAyCwltQS$)45BEVrfoOWh3Fsq9Q<9n0;>&WSu-()reEWf(&H-7xeG)9F+W7eipXZMe8tQC1Tc2Zwz0!TqeCOZ0wV+inRd za(d%>1{l|TbnlG$;SE0Z*)Q_Kr*Bd@m`o4&-T&ivsOlMC{>qOtKbZ63hj%!8_4m1V z?>>v;Q`+_(Q)fiaRh7K|(MSB|Z~qQI^vWv?>lODuy2C3kzr=ITKFz)N?(yC`@3UU+ z7}_9X_86%P(V|vWCF6b~-Yb-eXr-u%8im?_2K~_HQ0$aBe?j7&Qljg7P-0L?fHsEZ zYAN`js>m$7D2EfR>ADVASM+{h*K}xQ387_qcFxJs0;eDnDU`@P3TK(t6F&3uC$DCf zLx3OovCs1(Kl*t-{qoEF_y5Cx$DNNpWO}&3D9x=~H~7+zeUZY*MB|G;@&*3)fB7$1 z=fhk|L7cF8mTjFQ4z1uTQY0lg6iY{4b|tH2?+sCj{t}I-F=US#4O%L9tu9$qS(j|a zCWOjGP29^7Py%%o-P2{P&E-S(QezA$dJ0`ah+_KTa!>ENPP#$P;p0G1P*jeT8!hy=RV{lgG3&Ej^>TAsfI+SX>BN-!6jke8RMiYo^nhauv)D!#;{y2xqfnj z%N@PJcO+(nFyM@68{5>$XYhkB`D%jozmJXegAZ{U{NN+8w`n3DmdY9!WzEMbQ#a-( zr7J~{|@UDq@8AzRZ2>cv8eg%~KT{Cuq~Df2N@ZeymT ziADol&$!tE6E?5c@88QeE zRVk>PA;m~xoy^uT6k5QDF?vd?amEpbfJ$<49$!BuX@fR~O4nEtCS5`_b%N440YKIz z<)ma<7R(QiC?_?sfodWP>~g*0;(W>E@R(b-ZgKz4dz{@rLVLl#IwiV+YH6z2-cfaqapk)>@`@#rgReP8p_?1?#vW;BmU5P!4>g zUvHVsCivWSHJM3fltPCD{_?$#29g#yXI)JhVjv7L2Z8spP{m>2h17EKVT+P#S}}&I zf+qNcR>{tz~SPPv+8PNI0jtd3?;^J67G2dNRSsgmE%TugV%rz*ZFok1-aD z5~Tr(qs0+@RBU!Tj%U~LzGt(Mc#k1y7WIM_L9HQGCT*s@wJ`S9*T-uTP!@`b<>i1Lts@PJcGodqOgTG$Kp&*rP}x#Gza)-v?TW08OSDak zB1q&G5&@NzjCt__o*wXcBiD1UdTc3Ei@s|_0~o?S$eyI-{m+J;x^Vcm!A@(mEm-y& z3S)S9{{hRhb42iwB^yfSN%?%tXTI<`Zr{GeU%dHU+@zunfzw&dwI^=V0Ys=LbLyg& z>(%5gtgG_4E8^oo)Cubh!ysT-LxEOCvU^iT2@R4cB88biGc{x#mKcjLIjW5;8qcPM zAnr2JR3$0IL_7{E8I+FF1c(w`7lKEb91^bOfTOjhPztADw{5@-7+`2yQtT-TgHD!h zv!OmX5Vxy>-VbzQ?~) zvHk}hd#9Zx_y`#O_J8tI{M}#pMZWTtpXAo9$Ed0bKXkO)4W+e&zQ_APY{WJvglDR- zQCYH-N0c%;%Qdr#`(M^-jLkWPn(Wvz6xLF@D-`fNE{j==p3RAj*=G_LA>0ju%$}vK zom;R)|#>`DYI*-be77R%h^$5?#0D zVtK}9v!Sj_(Lq_mbUI_cIN2I$lhadrKk)tscPPq|UDxvNojcrp_=vU} zSR5WQKRBXode-YTVF-kvq;M;0y54i`e&=+4Tpz^+`fIA)8iA260mC+27K4ETCGSaQB@P+JtgS2I|^k` z0B}K%z9FE3CwRdJGYDoeuPNnzMKYg{23v3BUip{Eqd2U0Kjk_0JmedseeJ<(+{ zyE1m)5#2lfu8jEi0N;Fqja~qRqo^CDh$%4mj_r2K5GB~x6$M3IVG2h`F}n(-1EsZ= z0(?9ys7sB=sQpMv5(q+eYhI-}`zUcoalE(kV>F~lH%a9jQ#nOzA_gyC!;6luFg!ea zAfk68d4Gkm`QUaL;UR~xaea{!yi(H9HAW&phN0u^>>)$jpkk2EN2P2!@x&l{v|ZDQ zYZ76F&8rC~M~9R~GpXu*98bGz=(|P=wd}UiN;Fs`wFmcVYvmB83g(L=uHSf!gQIH% zC6QITwv+cX3bSp5=0aq)IK&vYKj@K(=v7s*-R%e|F{x+Vym^c1bWTxKl=T$nTz21< zlx59qHY26PcDv?V-~JZgdHo?CC>KynYTmhXhwr@kJpwR2m=cZQV$;wJk)#}VKYB>p z2$_CyaEvV{1npRDdu}}T1fy5z=;V-3y!ZmwZd?~Uf)^;RvlarVACin=;^#*M%y_e32G3*aTrK@u1 zagZ)iN_&BLy7K#chcKok$n%rz#PQD{?Vq>Hyu)!%x%?#~H*;l!ABz>~Y~`+z%6jLF z5E9&xC+6RWIAC)&tFcn>IOoJ1(DxM1h|!}LPG3<-aU4?I%YCG2Aybo>k60rxYMdtM ztj&x{+?SGQA%$&>$iAJF$Yrkly_6*0s3;1KPLA;@vTGaqVIT+i?f)&mmzi0NEBA7a zzup4t|I0%oR9B>6LCKT!J~Evh@N+-=bNsVk`DgsS|Lhm}#B`Adlt3Y8ArGdq4f>DXmS!R<7lWI!zi7-Il zdHN99bpn%A#!#!A z+6^9i;u%~yW7GCRJkQ1hR|tW7pN)lLu{gwF&}Kqa&G5ZoAnJO`Xd6B}Jlea+_8X#> z&#o#;K|%Py&<#W%*=`$p-(d>F$+csq)0!B1bd`XKQ+MX}#7LQ3qKM%+J29F(@a zwBJvw8Wj_L)9#&T;sA~NLP3Vg9`F0y4bl6BOEij}l#6noBD+qUN+X&=84&^}3_gJO ziKr~~WI<8Zve|1**S74|8`>P2+V(w38C+3uezC%q1wM`f z{9Yuvp7ogeoW!B4FhcoB{J=;eUH;0hWb&A&t_r4Q!O?6=r7bE(juwZqkyy8fo*LB0 zHXW_yFfx8V#u%EuA(@0O#-Q|cWg`$RSkrXEBg@av7{g>*la!2Lb?zYSnho2n#6^WD zBP$8$mT_e=c3)@$A9K0wi&CYDO0)BkKCiJdPS5whPV~WpHcVzyl9F_RloE@@0+6oo zw%O744aSI2JEcTF46@$&fVGapgJWD-@n_%qCg1wbw;6!ChG$=Tne8y}wLke&&Ko#9 zfg6uKK|gq!uH#dmeud{=e1RcE)~n6_xdSMpDJQi|5e$MknU>f^jkn_VY<3$`lCbA7 z-w|XKKSXguH*L>qy%vCG()a0-))E(CV%4y|Fnm@=8j78;_wI49m~t8Xp-0_$ z-nj!^?Q!^1OO2YYV~Wg6dK_qw>Ff6}KS2_}KrCd4iQI2tI+9qS7Z1nPFxkr0fzj zNSDiw`)!b2JgHG&r3jgC7qe6VHEOX1&$3?)vQyILeMh7AhdVKi1^T|1?tI2PtX3=D zdFLHoeeG+!`r2!(`++_wF4_*Q90MAk;O@N#C?&uDYv*A7zdaJ{ojxJtyfG#2Jh9c+ zoSt6iAO3@X#E<;&=lJ!1@oW6?AO8{OXAgPw@IJHo0cGWw9n679hzL$s}q`1qJ&GDR83{fCeE z@PoUQ^@Po4!+XAGv)!^dIAXS#bH2Rb!+ZC!wqQCrpswcJyZ3*LB>yb%b$M<|kSDrY9JKos<|OB66`4M|Qgg7>yAIrGj+9P;9q?aJc>0 z69Pc23ebsz#e##`oQwPSfJoEqm=!Y#GDWj$8s?QC8aB;NG+%8)7)S3p@38ASCX)%L zCr50zTdcJr!uEk#F-O^$GuPr}5P5d+gp_jd>FCH2*Uomkr8-#1!6HP8vY^{_C?lh0 zDdK>Pj8HMr?;6gx4QFR(_!zi(<1va!McX&BP%F?;+*)HMWJoz9GG!(WR~G3s7B~u@ zw2180=yDR~ns`TY@k0(k&kwEC{vK2*fgX!2DT42R_yNWhEZ18?gyJzL1`T5{w#XuU zgUL}^F^@Qc?`8eSYmNK^N?@{F3UbHOxkKSor1z1k5N(Vf`n<--m@|42(b}Xa%7UV( z1hJACSV?va1|MjfJ{R(C|K9s3IxJ%peIIc3j9uSjCl!S?^j(WCWJA|lV8*-Mj*Hcr zfRgS^zK&MAhRtS!GZnLX3PyBHDvQ2T>;wjFH1%|XD@z{Sxy##czs<7yNlr@m~W$j^20DbyU(R4IyE4AO`4zXEvKsSx4XZ>~_0-;mjcG zrhrm&QbLf9=7^_Bxl>k_6_e?Vx)2G(+3JF-teMQGXeU#U>9mG4&^8-p2Z!`AQj{h5 z0izVF&6;n1^PAj%@Q`cQPNldBgG>ZM#2L$@`*&GwmZCM%0{7i*mi(K4{d;`jlP_WM z-2dpkoHZ!Ljxk1@a=~DYXtGoiO`po^exB%MR#lKZ)#NWXsFV-Ed6(Sh`~JW*DrWnj ztUY5bGhXXr8qH)%8aLyUR+smo&LaHrc}T&TB`jn2KJSIS7hH-lhJ@nm?2O;~t>0p^-f?hn z%xho$8q>0*?;2iu{w03mD_`OMM|XMa%{MXczKb*VZ@$2i@m!p21o$|B4Im~ZnhWEIN}_3e zN_zor%={=hmn(U~BoqRZOSvdXI-+vHH0m=_Vs8&0|5Zg2jg|(IA{irmktA9*iA@mU ze9St!l#;M(bU`}^9a&A~>;3Yartc{0lCmlohK{z|$Y+`Yg)gbJ10p&Zh|=eeDKBPP z#$|Erucm|w8dAs`tZ=`IvZh^cB~L9SimK$~+BFu3huI=4u`ZqOxL7Uu+!w#dbUNkj zcfOBOij$KQRD!dIk650a(>FawhlgyIE6&a?@Qo0ptE%MW^axW3pl{Q5lv>)!5ykvq zfijNOuGt4pr<8I|qh`C^%3|L4lx0B-616m)PQ=O7G~zl`n#r`Hs%z?_1>0uJd_H3~ zt2w*pQ7WMdjVIC$flbr08G2?$<5OhSY;f9A)pgFMMD$Tn*h4@j(n}C^p8~BPuwfvn zKu`f?BIr?9q2=#i>9R^36Id(H`;xQ_F{HeCNdUUB;uK6#1gZ+ytd=}_c+Psg=H_F! zD4dMleedbIhQeyPCJ<90#u6!!5OqdgB*$?DN(#T|i9vp^;y}crP08ibd3ms4G=b#N zMYi9{U7&JU8j9ueoYU(!Fv)Q5-hDRPhMTt^XSdr*mZ=)uNaIN5a*QAn0G*?~BHmmU zbl!Vx*0qSnKJ8ENqtzU;05~R6jFhfGlc=oly=rHPgJefEd==AVCyuYdg;{O~J3!3!^6RI@fZ*9-DSPpFgrM*51#3K#%32dDh-9eo^Yk5p4E8dP_d|Id&l2; zy`d;djt);y#?tq#$PjV|r^;aGZs_rG;Pl!tZCi^=EJb=FU9;fj=LrZ}3YgQ=Q?A{- zA^TAjI{!^qNT*rJVZ?{X&<)taapU%5QWUF*sY+;~NLP&E```aQzxu1c%0K<(|D2PP z6E;&mf!2n>M;w-r5;lz}h7nvV7=tk@FyBHVeL)T(vIoTd^`7$XHh#Ml_M>Kd zyuZdh^-@xRN>}bhwLd_U*cVr}C>f$mO>Ak|ZG<}(Nem(4uDF=TxS#QPMHLuH?pBY? zJc$#_FDp-K@?j7_37}ZUmbvAk3`qw8f#=uQG!54l*V(ikH?Lji+Ra-i43#T+{<-HU zmFCg?2h8gU41vOE4ySY8di!l&4gdCUzQ77G?3qj?l}}Zg5E9Gfl4(83T^Rt)WO2Yh z{-?jpPyN(S@oT^SzwwPf{RVeFx`X$F{OZN6p%Qd$D=xJpMb>33ioEeDZx)e6P)Ujl zmG&b`t@S>XQvUVJsyOCTqWqjOU?S_QloDKn9y@a6LWjM(f+QWXn3T9UGCf;5Yq_Hr zp)dk~Q%T&7alBCTXr#}=W0VwSMvLH?>^uyEmlKYt_dizPDWtoSkZ@+BB*!nNL=2vo z7mdDaiQ40AiJ4S_M#wQl+or*X9*vxohE57%l47&j5Xy?uI!c$_Ci!GPj-#9vUpvTa&! z7d6URaT!`m3LfhWF^SVKUR=;_cOn$8jRXV(Wp)^KUCU%rvslb!5m(SOJ8^~)DGJME zTCrPSFr80mhaMjz)pWw7I->U-ek-HQA$pporK;=PL6L|SmrWSw=jVI6v9%T#vl&B2 zoRyW-MreEWYcab9xpLp-J5!4m>*~nrxcznb&pLmHIH*fOM{d;V;Yld-jnzcD0Zz{&fp~saa(`ij#77SgJ zH;|M^HRCu%Hk=R!doSe|N8{EQCR}F37QO~Y31kYqT6~}i7d#>E+=_wz5 z_&&2~&9tf|f3C1#9c|kZqpV9#J9J1K%oo_&F$8f47gH%#cDt=`nxdjAD(cCU%2||# zv$HcMlUmlUdct9)IF7HfIlc_nmiGueOxVaR2@HXm&d)C2mp+ z;)W;j@a{c|;|2HcKV%pJt@qT0=q^X+<2ce2YP-s-y|~cF@wsATEarPgtGzVks_aFI zq$~GT-aA85R7NHw(j-Y&{#>|ssB9`!m!m^c${B}QS4F~;aL!_!Ww+blLobJaW7swg z^TO@-otV4?r0Yy<*8=j*o7(<)hU{F7>gsS%3N7-!JUaWwk!C>cN1-sXB}F#!#M4jl z`OklWPdxhxCeDc>2iUB)%;$nuIham(@4ff9cIy_O{p@G|<_j!=ikYnb_ZhA?zUahe zyW*ril}bD1DmudT$DZI<{+s`num8zw{PSP?UwQ3MzbY2!Vj`kBavVp_vk9bqev+UM z#;W`htFL6Rkh@0GhmykRvb0jUP*J&~BpXz|5c7wmuCye@U2+*zDVL!YXq(E#6Qap7 zb{wCP?X6a_)W!~<9xrCD_uZkC>E9&g*09iB{vSPkpkSi_mME6!hklGVF+wC4JRi@^!)%qxMQVt5(=9a z3V9A%Nc|{=1Tjb?lFPyXSI-!R0g8%pnm9Q;;NbX}E_fy+VNdy<&1%VNdCsR^`7Fmr zbI#80v%Pr4;o=At6Wh&(i}OcRMaff7Jc%B(v|?wGG?0!z+bx z6?Ftxl`PjQHk);Jg33rh8%^{B-7wHL4Fnle80W-onj@4hbtUp^v=diGTHe8Xx~`@3 z9m*Cc19e$)vDu*<5NWn8i`fAO2Qw}%E~G$m1%-0* zxkg#sLWGGcahYl!qeqOYQVfXmRqex9_oq=Lv{)PYbDM3+Bte#h)Z>Z?RXyQ)J;PeZ zFnAWTIepu(S*=7!je;2VnP@5I{*_YMAObKJDx#qvcM|12FMe=pG5!s?Z}YvCrCE6_ zz`heLQ96pg3(OBolyQ{GFh4m0XE-`JX4|ZY(bI>X5G71rrQC&5GLBQo`eK#1xKuW} zXahd@9Fi?XT}+-B2d1-<&1NGV#@rX!YhltAMh}U$@6aw2>GPr=gU2Tk8Cxx}Q#xr$ zGl&5ndYo3cQk=s>*W-tTcM^DHOd&=6m5!Q3J{9}I*(mUc)3!|AyCJf1OW%>P24p%%^$nkN=3xcExtPW-^~(oaVvV1ODI-KjOf`?&2QZdPVA6 zZ1g1OL|oo>tk-MO(6Sy@bU{StcOTuOnoT*j&}?^@VZbQqif`L3%D`^3p;@owU}@xV z<-MmUYszAR%?G?k>ot80BrT{4k`%H-*I}&UU~z=jn)Q0kMHsLda=GhT3S)C>MPQd& zZr*r;pZiaLj-UMLpW)iIYb+l<;;;VlFWGGyOoBJQ`3-*aH~u-xc1JO-@k7V88>bu} z-Q>AvKgr2t%8eWEV2kgNVoOv4bM{JbH6aFqmX4F4hGfJoo5m%2K}KZboh0zyapo}= z(m!~ADXxy@^yPY?uE=LbBUqHEg_LnADyIGaL!|A8JTf1s^CVz|?RH6+W_|9yCZstr z;!yTo+dS%)y(@FB$gX74{&mWM@Up=odc8!{B9xc35POLULhg_4Zbvc&RXyd&r=FtB zZszeZnbr9&hM)!xjuxn*W;U<><_j$6T&7fCzF|tq7*0APc{$WhP9WBTfe?C(wS4|d zKgPk)A@#K4)mQ(R-EN0YnnGI!6>x>`2?rhWym_1~DkV_7v1R{p5Sq@~9E%#=N{F7&+Cs$lF-mJWjRjx+nR^|Hv~E*U zml;lZ;Rgr_bO;hB;br7BV*F#Cr)!(h8Ho19#~`mQ2o;}{aN0<$NGW3P5C)>}K`YwM z)At=3&1|;d@bHlJcEbmEKg5R~l{CAJz&*E{hF#cF*R{CIGGodZ!B3@vp-kmT4IZoGFa;b0ix1AN@!?1in^d3JkzQssO&&h zYVU9hq0QoI$IuV*zTy}{#JUn&IO!zCgwcWv8RL^eFU0n$mQ6K=4(r5qmvV7V%t(Nw zF|Ne>NL14K8hVMYh`kpl5{8S53jzhx!&Bx5hxial%FquzP1B;22wNqLSbe<1lmbeb z9K?Dl`WO!dT1)qqAl)*fWx*BfT|}hexmm2_WSO)K4Wqgo+{b)~N=Rt5G8R8Xs!2rv zc74x-iwov;jZ%W#NdD4TvOg#(i^7vaV6$0W!e%q-Mdf=bk{4cniEn)UPx#=@9p;NED`#-?1#@GV&8PIMGmZ}qIbAGpDRKY&jMc8;+O5aw zx`stv@!SVu{cx$q&7z4 zw6+cB>m{A<2vLgY!b;|3S=IUa$YZD>vhBJI;w?BmIAXnAVU6K%alnlmH~6Jr`X$QR z5hE;~xWyBX-;$dlz{^iP!)sst8oLkP5razMDC!Ac_^~f@dgB_#!&A?_NLBx9nh^HJ zA&`Ue5T)xBGHBFrC973Qp6*!5i_SP?0C$!RjM~mC4&D9rucXjXO3Tj=Ip08E?vcXw zlOL{C0+S~*LGVT{8KN?H-_VAEnLCw~mW*xK_Ttv-qLDz z7%idocRqZdqZ^NpFJDGt`|Us5zCT_R{69a8G5?O(?CQe#@h|7r-3b3m38KVYi1;p3 zWOD&yl%NP=KIs`}bGHe!afn9W@XRM(;OBqw@A1M*pF%64KDXY}$4E1HlCfYd7=w=@ z>h*(IT#c3soTMpCfmKfO0QbWC0C{6F%I;k%CNDlIkl|=X#veK6!pBS3;brxFxnYdr zNx>&XIU%R`u?1XfgR{ad*>4b|i$lvz;r*px*@s@BXDRHh*rTaLibc>V3-FZ`Gd80V z#*?e}Qn(eiBzhSU#=#5eyWQdYUFH}Guf<0%%%jBtllhGK!NDGCsXTPsmfdQbDd(E= z<(h5N$!qtXp>5DHFVH|)S*p@dPaI{HGZs~%v?WIehupYv1FJO7Xr|iK82|tv07*na zRJvWmg9neefA;~aixo!)N6e=SwyQ1c^EH(byZhPM8QblartMKh!R+XWm=x!$B_N$8 zS5J86g%@duo)13wAm?Kl6b0K&%VK`S_F_Y~-Jt=e9mxx_Af-fAI*f*4=%~taZ|g4# zOEoDe>k=Oav0>*}A(tVaUDxINA%}Pm9tAjMsdYi63+82w8Ui-PeGw$WC$VRgrG!TJ ze&FQV4f>SW^#joemnP+Igi=DBPug&?T#D;6d0Z)+u_0%ZN#Px3u@0W5Yw;w8eAN@NAjS-Q5Na2AtwlQ8nSE(2=?k>V)oYX5#H zWpGybVa{r-kui%(V*S5+_bv|~K4iT-r)#zlJPJtykoU_lL_u6QS2BjvkN>V@St=%z z33Xk|>$76l_kGK**|1zLS*@Ixn^mXt_d9ARD8@$lh8=}r{| zwy3yw_dY2aLe#jT!WhvqO{ys=NL)@*kzwf2L~3I=oi4b2dYv0bCpe{+ZG zB?iE2IK6S3NycN0g~!!yb0nKa^rc9AWET>ntm7Gn6MZ82lo364|FgXJAFl-r`MxtK zZDlm59ZEYAiVzZgh%)ua*Y!C1ANTzjkj%3fp=$?$Y~~6#M5&;Mq0255aV^LIbDV3l?=W5E@?8A|S2vEFZJ4dc zJ`7j>-X*#~I;&%)ZO|i^D9QgD3>Ibxu8)wt38N5K&u3fv%wUg@t!AlyA zVdy-|i!~RIE?Awf=yu({kVttZuTl`(FF{Zn!Dq|5j4Y;gjq<{KDQv;P!2v~4aR1>0 zx^Cd+jmM~5#fNu3qS@`Zc6^OVS&@98X&MrNr=NbB!=odTR;*Slbdp7&o-asB995gu z1)=XKtjn9ILwv{{JTLy?SlSvirW@Oe^ek z(oJ>i-nx~mb2nQIZc3&E5~k%B2_hlDZx#%H13~5|vS0#~Z85+!DblpWpr%N6vsj(0 zySnlXC-1P*41O4Mt$nIV3E+c4TH3&=D%^YO?0xp0VT}Ly2UJv8?P!`-K0j@<$4it$t;%6vzwvJ^e;y?;hq z3X`9Ep8aYz+lF@V#AHM=judfaS=0A&P87yw9+Y(1t{9Q2eUUP+7lHziFA^(b89}5B zWm&RVNC7h{-C~qtZxr85CtOCe+P24cK6`d9d~w0&zxV~-fB${{^y_aDfmdIh^V(}~@TY(Fb7*URs9gDt4ahvQIMn2v(H*fyOZ$sICy+NNP!t5UDr`p6)8k~>$!95 zE(XPNHm7zLlOpq?z@$jC-Lc+ocy@j+>lt#?jobq$Sg)^eWyugcLx@!MoIXUJo?p=C zB5a(1jFgvg{qF&iJvVRiZwry&`{~RbZ_?2@{YUSyDO+>2_fcvZVar%s=P%h;@#X@~ ziq~|5hb0pf%~*O2!$4ivxjAAgezg)+WRWc>Vh&Ru*X?+ofgGuy*f;6Mms0!tZhTcY z&YGy?z1Plyk@Hff54|9N#^6jried|t!alNRdd{RNts&%?J(8r7^zm;&fi;G*0^{z; z@U?u6PVrgbmkF^_-qW4GI}*Emv@(16Je!0zZA;sC5?5n1+F6QP2+pHTfyt15)AeX&CUnLsmpf-^SSAHh z+VA%teT)XDqt~6v;prh{4or$-Ryz9Jr7(>F#COV|lZ^beHdBK!?%nbC1F?;WKB1Du zC`D4oN^j4)_f|6SM7w5_0(ISE5+jdliC$wk+79ep=`7IJ~lW;2Q$Rg;u_uFK_; zSyAw|bTqz6g|pZ?ruxn6HMyS(J!=$JP?^J%QL6vh%m zpbrsUR@nK1Q~(y{hbJ`cfWo4aOhFu4it4ntiAvIt z?shxg|M25Ht`)k5PtbW7JZ!dGc5OpQ5;Uw`L9=U#5wh-szHJzq4u&wT7oGRAG`4CQ z*QF%4s>%E)llP5^d&D%~v_kHWWYgYk9!kWgJsR|vrdHf2p8l%ny!_{5gxR!DjA1sL z$ytyK#E}A#Qo?8{oXf&8D;x$h5zqHQ?)#r_R1S+*g3KA2cJ7~3D%0tI6B+gsN ziAxYjz2NZZgn#^tzsSG%rT>|K@N+-Q!-o%PnjM?<6`^lYAxv-lXa+e!idx1Gf(qq~ zz#FjZcu|duBSvx4z3DPN7Ad2{@wiarImE@5;E7=%`ayo_nEoTzi_Fs_if-s>+Mc%Q zGg(?qMS^tpQf-eAXXra2ACGTse$69XKRW(uWJaE*RCA^cR~Vbk3w2(wQaSd0Pv12( zO(R?+H6C1%D5RYnDza8z=U}yBUN0m@$VZ+$JLUBJQo8D-rcQBuXoR0u zI73}l*?vIGHe-aRr>AUoJMKPrkHf=5QTPlJ;OUGdL{HOf>DwKL2TShWKEf#Y`2F{& zj1#_56rNhwHC$a?;1pEWU{b{B$g8ish%<^1I$|8%_60gVIy|N-Ym$<}q9|lkC)Nfs zVv+o|ju8E{MsB{(E?=T;+hc5jElS#Mz_?O~%SrfoS_@IuYRAmgl(xiahjXR8S6VZh z&6v$*_|DTdJ$*Y6gY1zZioegU>xs!wmUCva8DkEi9h;S;h#BG+#1=6~4SB?uM=3E1 zRF4uhU0GFN^u7^6VU08k1|^EoyjF!ME^FT;@nF`ZY;8bZ%WgmJ$lb5hm`W@M;{M=N zu;+dd^XPE@J`1T=ng{t3QuwVqCseaqf~Box=1Q!R21F&fK&>|D06J+ZS7Gw#KpBl6 zN03R(Xxn}uL>NMLtCnqs9+AKVN?DvMv8E(qNbGGJlu{_GaD}0)tEqz*q)*NQWgSVG z>`t!5=WOUHi<+vC*I(B)2L}hN4i2fRio!bK|0S^wA+L$?y(#MoTL}3*ctO=dWNJvn zeqrC?k8aw=7-m(CQkvbaWwY7PW&fb6bga*x@%FdBK?iu?;iE^q{`%|u#n->acYh#? z(9eG9b&hTw@q>5Xq3wIV_+ww@x9ey>)^=tvwk<55eE4&ZXbuHs3 z@3BUF4eO$uikuXK@Mgn+CUS9g#XIl*kee2r#we@pp?5|BXJ9O8M(YKd6jkO%?Hv@VcfE zs;6)=z>dQ(ecNlFdYxbTrGLRc`GtSP;lZ3VH27{yySc(L;H=2a#U+_f6iiLiF$@8t z-85QI>XQ(uFP9w=!EoHcH{GGJ90c&Pw`4}aIohT?$3ZmkW44ynfRFdP? z4S{ZuMIe_QSi@IX9oY8I9?5?j+!9$4DMag_olY-~j(~pRu$LNSkp5?sca8+S! zWPN=hg;I)QQs@efZrzq{Hg8e@SBgq(EO?DEQe3HV)8Dw{jiD?AO&yD6>m053c#yE} z9A-LOE`+~?p>GE?hM+XNVW5qX#1%7QE-17$lvOo_M;j#tQ;IU`HAo>3IoC5uI;bUK z6}YME)YDo`DISuO3Q?FYkB(gDKQ4B zLZtY4Kz$ z!Z0Mcbi&Aei{hB?;~8OvpQT?r`_+bKJWp`|M!3 zVpi9z7IS>pGW2rh#V8&`AZxO!3XV?>vzpLOO(EnFq197iIgXqYfx=qqqMQtEo2DV9 zz-(S~c(A13t@*~Ee~l;4cyI?^difFG{?51f`1C1< zw~n~`+#TNg=v^)@Pw9t-*0&5Q@h5M6lYjN=zr(-!jbEn;k{}SgLM16$ohu1ZT+;_1 z(XN<2f1Ryy#>RS7s})5d;*^x8J!y@h-R@+PkddL)>X3`gHSN&n&rA@Js+>`}D&H4s zQlbyTAmcO0LD~DW`ts_O_dk4(h!mcYslEZA?^~1=kGl+n4;@q0AmEL4udBQeu|1xMEQM{jDVj#d&XaU<1N1T_76C}SQCKDUBk!Eo}vp; zT)z9k`@Hk+4|)3ZDc}44JAd;k!oT)oG}HhY73L49>%`Hva-}Hvh%A;1zVxLp@Yb7u zh8_l*-4>q`U90Fqz=uRVKSZWbK|Iw);;Bxk!jNJRg;ElYk`($9XD({NvA6-I1*0<2 z)=a7lh14(7gPKXrH+q%)sH8yPOodN__;ZaYnv(AwG9o6C1ENYK2FV~ylLxO9hC0fK zL?vR5Hy@9BG3cA(J;kaa<;{vXkjFHjqCq07Bz+#GFh&ZX#OSsw{D%}|?3awqpNnuF zqGfW(jY^|jA>4^1V+%#Zsf010RYJ!^yW4Vfa*Kn5CDs=7!+_BW<4Tm#Y?>X)iXmV- z^sKkn1Oj(%9n<#XfggqQ;yu?F=bW8gP&mzIGhnruJbb#Y;qvkltzXiE3$H*H~o*K{8H?6eZjo zpE7ZK@OUrih^SDRWZF6((yP@9%-Apl8Fy=g&obcqayPBAqr6Ihk#Qf=4o;0j-t!WyuFx(+{!wuFvA{}tk6Cty-OHLzedIZMhT~}C@gppucQ=ZESifss}0`wI3tQt+ToShPt zme`IcC{d9w*j5enJ~H$@UGIt3Vy%o6m5!K^!x_S)@-oKAh?fK=p+d~ka>eE4iAO47K+pyVO6SU@fw}qzX+uwehHp2C` z#RpNGPh2Boa`PGS!86w-)*6N&)*L$RQ4OsWRZ+0sHbfI}PS%AF;zzh`8&)Caf?o>F zqoV_cBp2>>yW`gJG1u4E+&VeIX~V_E#dLl@Jv-&()~IfvQi=V(Q~UdAEWA@l`%!Eftq#c;|cH;q7;Rz{S-L z-w%KD1(uqeVsBc3$y@XveIy{6{NZPBm^@-B>tznF)I@sjKX{%;k6s{kJ-f}CrfIm| zY_mzf=9Ake!~~b?YZ97+lVjHFHP_c0j*o9q z6a}ZJPdPh#2Efs+6T;Ba^c`(KptXb&i#@|N*JtNwjKqsrxj-*2E`+RFS7=*cqg?2Z zA3sK`J+HwT;YBU#*@T2_b~_G_R`?+D<)SF*x}L@S0BZ}v=qHsq2%~aWB`8cep*9xF z_Ige7fo-_PSxZ?}+^%Yxu4l7txVTzV8sTiE(n&WO0y=4yizC9&V-1ZZ|GO&l2d zi1!022`^#2ZP;#hq!7hVOQlR<%IZjJc)#N zq(IyE=-hn%y6hVpn*+@)v#!4QcQWzzN`Di_%MH)LD?+{7aLPjFeh&CCM zJ*gzJ2_;U?P1jPCHO@(Ja`Xd*GuhBINszpO&3Z>v!k05hG>bKccJQDS+7-lolzC%f#@qRQ z==XNJrEe07Io2o+<`pI#aKSa3)to-cc`#(9mn{r7`=D7ZwC5D%Tr$>x4uZaum{k?K z#xwN2c)g)WM52!vt%*7AB<5_%qBN}LB_DtAE^oc{7kuUKy@Ul`ed$HM{9|9@SAXr- zc>C>Be(W>1_|&IPc<|sM|KV$Y&Zj=}Y3|&A$io+3;n}li+`D&=GDbF=mgn!>hquD zpnyO6(?6x{#6CwLCONw&())N_CgD+$?KYDZWw9iuiE`PeJTcPa|Fh2@w0fT+05W|E zK}P!8SlM|hpvOW>>CBTRpCOTio=ENiDb7X|DkZQv0NNT0NzUW4ENM?$%6Td4UuSAS z{<$*3l{z7+(UUTBJd@g25ITc0V{r#l{0`R9#|#<}gensThC$9lNl=ix{@%TNJiPw` z%jE&9!y{Jn1@YEhHuo>-nt`jcbB4C#g?sl|td5CY_?s`V{@Ra`L^PGunh<(XVVJ#* zf6Vo2*EOtG3*LC`RW{exy#4muY`0tHb;WwOMVUl7n^QWMLy1%7O-ScEcp+X(0BtTn zZajY<263`Z>PC0IS8YvZo&oXcP%)22WJAP^9c61>AsUXh8A{9wL5e9kAaVf{)zm?Z z#)lz=iD#9@3moAvNz=1$pLro-saA|yIgO! zoL*hf`kuRW!R56SyH!;&t7<;_@O?tladdP@yIJGC`1CYQ!`-{jQ7@KUTwKV=F57QZ z^#WHqaS-lWfyWalZ7H1N?%lgoRmJ0vKcp&WTsBuMSBDJ4z-+ddewNNf$hK`nLDG3_ zS!Di^CSWtkGw1&0QLxrhyl=K^)|X+#?lx4Tl=-%B21&MJ+_#7D{h992!45z&%MqmSAB${5C(iME>1iFa7v_h1ZVF^*NF zV6{e5xEZ(Z+@&=d)yCwzbh9r5NzK2ZKk9lS^1i7$A1@p+)Glh7D;RB{{9IlQCA#iqfPE}fz zf%CIVZr{DdVz$Jn0w3VxXQwFRh(VBRpOOSxW3gzKvn7QoFv_4580|zHqYR71f=$yi z^n(aQ3P%i@NTev_@(#Y22|^Gd#%ea>-4CAfowvTmM<4woUcL{Ho`cVQ?lb)F|N4L9 z_y6s`<0n7!PpA!i;R|2jYhU{sU;nc|=e1WK^4xRJ^UbG^*=#l(9N&_C6BLhLe3f@z zc#S)E-{R`>oG`TPb~|>v9d%t|oSeJ6-6r!AH9p=n%gsn=R5A)yigxJfn*p5*tC1U7 z*A>h8g0sg@sj7nOUBl{Nkp&G(OtMQ*7?y_%qW44+x9;4g>33M=DC?Rcf4{aRi=w38 z?fBq_@9}%T_j}YuNw~V=?QeaP^=3oi3{O6K!o*Tv2E`;rNW!7i)?l^dzZ%q(6Bx7cr`!v6 zDpbftsqDinzB0K2i)x>}$;j#5--{|2P(M1Fi9hlOwzM*dv5t@;tNDzpi%U6EwWe@l z>oTM)HcN8v7-M8qm;{N|`QFnR`5vEbJVPK&*R~pA!=!OeM%xAfY)17WG3I+y#7M?k z9z1-=Pyf_U^W1aKQ&du*7Wy-M@cJ7Zt`1o(W_3wx- z43qYd)Z`94@zutd0}x^^!uj!0NarKGEyPqo%0%WapK4D;tB7@mV*31YDtlC<5O9Ub z2#3a$1;G!fAcbQHanC<<*<5iD`v$GWExYR*#5YAO9#vFS+G6G_Qp#@CF=3n%!_OGm z^$k@iRt)#=-)A(HHs_bT|J}D)y#6|7HfOWFCVJ0o zHk-PytE)Brwn1ZP+lIsATPzO_gtHVtS%(j!(X3{+T8W>M((Jm9dUnXJkulr088}IS z_2mVjAGkPuMhJ=XZa^tZmDNpMJJ97zY2>%0ku*94@oE{QaJ9PR=%AFbaS|f^;jKFy z9UXCYe$H~al!SsH2d7vNSQfJ-tAhja?*d#^aCmZvGFC=a&XANuy_99i!Ez}vG5tX0 z3W;lpV)ki`WZfkt&ry~oW9M3wZsH`7*Hu+jSmP!ROObg>Nh5`I0-PZZfqGVAOHGKf z=SiGdLzW&*1&slA8+GMqsAUQr}QgvWbLWSU^p#n@2 z!_py0VK`fCF}CLF;u4i2VdzQ9G2UO=Xv(U>#mMRTCA;+oXEjw4OO-eT;aKVd6*Sgp z`nIF#2AZbfYP;dOX?S*VMODr4L*&`THBIO7musBe6QRqpgaF(16*gMh>lQuJvWJtQ z3j@_`!S!Ye8`YU(swf_{EOC>A8J$ zi&tL%Ja2#dJ6xVWL8o>iBHPkZ*A=T-&Ee6D80~O5lh%6=vBg<6d5F#DHOp6C$=-B| z6vR5fjb~z25o2JsT%ldTYKXYn;gO8i&~z+kORm;yvAdYh>G}p^6a^)H9B@Si+L2;n zzL*nI;BwbtP@I4Cl#8cl9G8y56m*-OVzFReu9&$cZR*AIE(Y%3xkXht4y%d-?eN-g zrXoY|6i&>3lMciXXtx`&48i29(m)y=>MhYHVodaLU@w4DV#=M*m4qm-he2p6#_9=t z5SEC#QOxKJ6zsW^5t%}Sr0`LqouU_8AeF?2(GM+HL+1xRP5sYp$g zgj2a<5-W^NP(pwS;W>`?PRxo~*|au^I#Oo@OOp%9-s2RgCf<_g9p6&+G{*~`E?$>bmwmag7u#m1x}AWyg7{zZxmdg z{J#Ca6?;jkF^c8Uff(#LM^QUI`0!)4jVGbmHXV_~d~rw|B(F+2O$bPgjd7A67ZS+} zY&yPsa)|B?%0ecG#yp-&r0MTQ(!3p=pOwxYA!!=1jU8+t2%jZ)_9&GLu#6gw17+C5 z-&zZ@lrqszXSmpaNiqV^X`H)@3>KqNI*+YlhJr^js}lLDG2*!2cO6M-Axn1eV|0-bAREyk%vX?#rR(q`YNfbx-NXV0je=IHQ%!^1<4j*jU2e)^g7 z`JArnxVpZ;I?eI%Ax}R1fT8U;TC7;k=Cp0gZr9QWkFq8!?KJD_EvJv4KrasI$!LZc zxwzW!(bH2(X9x;57nj_=cbChnHN!BlYX_=o!Ms}0_C42|4Q)4Yetro+UC#14QMhu3 zH5ElsvDxfctd=-CCo-U|#W^!w(5u;;cGqEyVL4kedKe`o$UssNWes&*vO2oWLqD49 zSt?gfe7;B$hv^(bT@(c|i5-M33hMa+dxHm}GIydZOG;NTv>o%AcyGC)Bx1#wH7ja^ zAB1yMh?mo-wsqQN(y*d!Tl&70f-!kQkm9T9JCfJb^NP*(T0{a?i_~9PiG7M=nrCFR zVjo8gMvtbUQPz%;?|06iVwwt{5xtfF{-mRG%!Kr$auJpryMEg+_;zyf-|cpyTpE?E zDN$B6hsyjMJ9*V9SPvnGp5RFv`AuJgp$;wp#gBepOoXGq$CEeYP^`-m|~#)SYn zGQ>dF4RCpd#!=gn!a7#-8QuDdKmQM3<>l9Yfuk9`{_2u1eD*W^_P_aEK6>vd4?lm0 zm!4PrcmM5w!*BfS|ATLTtL244`=t{$@ue{7J{`dckU--xW z5a;3l{+-|Bmw)vsyP*+8Q9GesSW7vp8AmPB^i=4=5R%+?%4n=L_(8-lhNe&fECW0QX)EPHd~gr zZqaoj_E~SP*`hc)I>0G;ZI_qV93CIZ1i)#oH*35SGX39z0_*?V$JpVvZA)n#^ZA?? zUwo0{+eh5K^&#JT`yHO0T?xk|!qs{^xfH7;#AF|mIHU(JK0%{(LsC<4q##&&^7KkM zFj_Jc_p;SVJvEL(qC{wrAZE29N@wD-$pO@(6TC>?qZ;{Ad(mMKs;3y$X_c!l#SpVB zUfslNg*!2t!^!K-{IIM)RTGk?vX_!X>clABwXu?d9tSVanSF+|%gl^CQ#Zy)L6?M# zst_noqJlI!GY?ae@Xp2Zkn?A!5ETaphupt^pQ@_3J{R)nFbwQ=J1(v+`R;eW%k$4Y zAZbM(18wxw2M3tC;%c*{kBJyHvto`l1w%VvmEmx8h)H0Lj7|Ee7?Q>(P2b3cp>2tE zHP_pn`1&jk&ZQ2h6DII`6p0Ant@EEr^D!c165K4ZXdhx`ZOK8pZ#dK>Rzaz0&ziiR zV-nS_wU*QKCk!ER@BVXCWlhlFb3tEP$1wEx^;+`M>V|$cV^+-tZBmw?kk82n0zFnc zF0L>5;d}3JadD0@hU3MG<#H*6^vwI4AFf#4x-ILv7w@{hX(j*BS$QpKAO4>FkWubH z7<&4l%ick{}Bf~dih~CE#A{<{a)yOarr7g--ztT&yqYE_yj9lg1`TX)HD= zhQ4KWxFimdzUjFDeR2iM?xA% zD)PdM5Bd8)^Y`TQ_i*RA``o!JOL$RQ{?}hV=HrWx2snc;hpl zV)k1F^{$vE88OP(S6M?pi0#1;272FNw3G3v(F}S0J8k3+A?5th%q7l`q=J|d*=6Z)Y=TaD2MpCT#h$>3}l28>h0?CTTNII|wzZsYhli%JVMNrXpB z2l@2mVliar_lZFkr_rlYS$&q^<_J+1S(Mk7fjzC1$h(#BX|xsvjZsYG$8l;a-GRWT zB*wCgozPoH732h`zmMZH{Ms+vWL zlLAFWg>{Yx4_*|4W6Cj4*5Xy7o@qY+#V-?vp3P>%Vz%JmU?qjO@6q{n862zS0YN3I z*^H_#sj5Qq`G$dzfTS4)8EcIrA+0U0EEr8GK@1Sj&o4P%9Uv;ahWUJnt!i;q$Iym= z(+(dzK17TPgfyVifKo|}W~0Z)z>qV^in>A@gYO2`+fC*$X|z!|qe)Q+*H%Mq3pVR( z+P>xd{G8WbeH~j`y0*o-O8md#fbWDz-D{1}5}#s}K}89BO({)d0~Nj4;p8*|wBq>a zh@!AuU3!{b$1;D8QRnZS)NE=ZNyH@nWMm|2+&gk;%1AD$tgy{p=XltTo%E>26>iE{ zT=&B8ePVsRqYr1)t8HM3>K>FK$Mn5@GWf=Z^S@S!KEfU?Idy`V^sA3qikyRwim;?`4W zL#Zt(dggOMnA=@P+x8GV)uIF&(Kvk9Qq(h=rXiBJeR4}05@U$TlZHUsG%SjO7>3Dl zy{sH@f7hce`$0{D<#Nt!R^xJDeD6J{=ND|dRvLFDhxpL-qH@(5XAE7GC@ZZJLCGW} zAx#@v8vo=2Df5e@R7nVPOk&B%4SPy^xA$@HWipEVdz@P2dt>A}$%ILsShQPey5p1* zUYI0KMr2Ca>YfULsAv$5>nCCj23roLm&Kq83@)$mQyND;}_pF zl&YYrD&BbgbykNb-2U(hZ+-K-{P4XGxxBbS*i@0#K~1uvZIWu)=i)?(B1`2FP4wt& z8ym){ury7w-qh4*%cw)$R6gY*Y$BIQ_dbSHE0tA-`I~i;@!{zI6OfVM=!z9`NV1T- zjL6v2-lr?2lyeV(+~jMeh*9L~GCow(D^m(W5LCoDC%K9Fz}G2eltwO7A43j-6~fu* zXJj%*Cq+ff=%32`7{~^#%HZ3Uc`>7~hWmH!bG$ra+wV|AU|H6@^2+P;BHOt7HRYK&} zT9f=hp|vi}3|Zx}F;?M}mSAk-NZDOJB}s#D zMv-C?WtWPgfGbNXCr;;m2q@>!(a;S&Q6Ad8d0BzehhR6UBEJD5D%T|14-ODiG7 z5K$W1b;C&R7l-jeF4!9e!+qP)HGMuCV)hE!BkalVV^X4mx}Hz|K_Nv^>h&U=83hPs zUC|94T?lAbQ0sz1OQJ(MSaR~*T?TDv16*u(eEh*XJV9cep1XaE-L|E@+VKDU_U~YA z!Owi>8M?e3X#4Uh?(bC7B$us^nJ_1E(l5f zPSooy{Sc_?8Ff9wm@A@Bgw|7*j@pU~c;{FK**$aeStM-|~;^D)kJN5e;@l#Ecigwq8o!o53p zdF?Yl#?SoRKje@8@Q?ZGSHH^HlaG1!>={WPQpJk0noSvi8TygJCke+2GBGaC!G&KX zT}&1TO0l68K6sSNWb@G{E30-O5|t#QCzOm2b2k9wS#-+0u82~SlY~ms>kz}zICTyw z%2pcPx%Wy*L6cI7q)c&}Wa9bvocv{Opa(HVP@2*eVj`*K`$P0Z?*Z|0(b{E#B9L^3 zk|l6c>?*)}IqOjjHn9Kc3% zczBrYMFOkEf@ar&F$_sY-Gcrkj8;-;rU)uzWvO(lDn+asJKMmbTCk`quFubSc7Ddi z*)vjzY`c~a#C#O?m-b&?1^NA#z0{W)){>0@~anuzMwUV6ck|q6#^-WN#)QBUn*u2Z>43lw+I!>`3ze) zj*m|$%aZG>4ZHO^U#6LR>GvK^2?#NuqtEEIhwN>?!+q$yil<%4AgJ zNlCavM@L5-9v;&7p0m?)cDo%hNCb&1^mGP|TsogOt+8SS;)()o49Y+la)ZFWc^$eI ztOzL9mscDf9y6cK>099z7Ilq6;Y`8&;6Q{E&QcdO>#H5lKldDo$Z|1fD+>x&$q3dtj4SD*Vs&toNAThi zWsM?vMaa=2dlp z(hP1+d(egyb2&KPw^5T2(8R}x&c1_v5WmCPl{tIVvbnnC@yGAul*8XT;dr%TbA81R ze(*Lgyzmky$0xl1?t6Ur{s+AI^*^H<{D1xh7D#|(?M5eRgGC6TLl{JoY%Gr+J>tdJ zUggLC&R2N(<=^19e)HG(!S|urZKTRomRTjLr!Wj?B@q&EvwBWhK`4b3T70u)q3z4) z0r5&ofHt!EJS}~-+ysRh-$Gobk>XLS|1s|k< ziZOer8ImEB#Z!(>QbZq6DklIS7lT1DE;^+Y3=JRr;0aHkKIQW2iYHH=iMgxGgnK*k zF+gM*<_40hu$iQ;@+GOY&HM{NPDf84`An0jgHrCcVQQ+z@jM9kLdIectj_PLqwN}e z@)&EG&kyK^LChz|0x|`n7Zcr>J??b&ry7$Qc74b7ui2KCp;vkA*P~kDt`&KNsI;DfwIc)b#e%4yAG)l<6Xe=Diys<7rU?vTz@T{f zg@?TS@~bqvp0l$H;gt=EK1P)D%oi&{5VPQZXqYbxy0l|iExEip<w~5K`t?fh#Kd zp~G5Dkt|&&A@M0GO!mb)J-_6e-~Jw7`KhmvfL(w>$(``t2ambhHbiBK+7goH-48$H zal_3PgpLO+&(y>DlDWNNEtFvH zRTOB{Dt%+5lm9A@1hi6UBg(faNj;+pK5x#O5fUjcLYu=d`@YAy5=F?Pm^_ZrS`;2h zj(auzO%N19iMmo52wKJt>rID=8XGlreaOQXAF?`FVytF}LgBx8yT>`L6!X1C?+ z@`8)=EG8KSx*$&J-pd6al_{m}dJ)-uB?3(~mMk$gcETF_cE(YjA zhaSWxLtDuOOgeFOb%C~qlj@kNE-L)J;E!qAh@Q?n*^H(<4*m=~mKM$F{?;0Kg~gVjt%pIs1j zq8@p8;?D2AC&hunRkTBoMRRd^#%6n!3&FsAQKB`3VD<29v-7o;K}0;v1P&0twWZ}`TtAaoAz9GW%qr*wf8>f-0>Nzid7`5I25}{ zwpwb9t)bm&M+pK1fh-F~6eWm}7Xk7Ol6(gt`2+z38%SUnaRM1g0w;1?mLOZLSW>r! zp2?=z-6V@F*8B|j-gC|#@?x!h?k%%aa3Zr3oIwH%!s z6N2Z#lgF%AYd-ecCwb{(A7^`ck1URR_a8FmLK7ohqao>;%&cwMjadV|O$iMb%Fl|? zL=kFEo01~gRa65orh%A8a1FCrN8fMhni(R(<>e(OCs&v?Gd0W%fpOSrW+&P%G+j$3 zFLc=75nm*?kv@Xq_lIP&(_zN|>2A##0;y!Xz#eBpO~haY|Q zHle_ihY!f3BBvoJuWn3nLZGCm@M+8mlA6Hky~L!-br!Kxf7LU{**zFcpi_)vRn3ND z(f8FF=cyK1#p$Rs<1O6YraT2)QNCt3Iqg7O&P2 zDJH}af}HdgoPH*F&4v>7W2cOUG!(omYUPkM5I2gVS!oKt)6rz#@0hhM+sjM9Gme>O zuAg%A=5vZ(jVk?r`0zfV^_-nuXyl6|2%h<3#-m}wlg))%4mhD{^x8MAhaBxd)Xc?P zgwCt!pDG=VyEH0F z&d)DxBqipv66pelL?vQMj20fP@h*;}MWJm6N4Rs%%nyb6^)Oew7UB zjcb63G=$wak_Ec?jNFf;7|BUTp*4$59~!}2N!g3Vf^OFE__2D1#hfUNbX~*IYE3}c zTwGFO!aK*<_sr)Dw*8Kr5{p*Hbj`dWj{2T+E+mt6IIl$f8v0$s%(dyz@kuV3z8~?8 zqp`zG@Dma&czkFGz6BJGX`4>>18)eCjUS+}K0X4chNt4S;0SF?%2q&^Oz`_0(sn+h zX|*^V1~pfWeL@_BrbAN<2D?{AoMck$HQomesMYj{FsW;u3pmkOrPX|;wi*4P@7Y1j zic$f@VWh;wY}F7>I(Gd=xpmpx=R3V-<2Wjx$o8F*dYcIq+Ac7guT<8b40SO1J9clY zrJ0N)6{^%^{XcYL(Njsw1iM1Z@=+1#5ERUojF=BXxbJDj*^8&GM)Ft z5}AcY6>SdkI4BW3MI?>9bn{sy_otDWS1ziX&zaBXoSj{;S|(187rgM&OWc0#HNO6p zC)|7V5Sh2gFe=wabdUAo*z5-Niz<5Pw{1&hQ#eDr#@)zlKBvDJSgmGCmhY5$u$<2* zc!&c~4tW6~J$CDVv76Jgmjv_Osn4w+1cAu9@v zSd*LfBh6YPRBl()ELs=#;xQ3VPLAMbZ2Lq%>e@Bp%+oPd>?<938RUjGR5W z%MVO8Jvl4jO0Zb#BMu-k1kE#1zS z*I$2~>(Acc_U%{st>5@fzWU`abN_?)DS2RhGUsx$qwxxvH;p>(?k+EwFPDsCkBIuO zh}R-3qwyd)qq1h_tmEH9vHGT~3om4%jZm_Y1+}QrMDIe77Tg}es@ZNzQs1YI*GB=1 zNze*jA=~O@^1X%Ze(rA5Y^Nkz^%APZmNVDhppgZ|lv~E#@zuT}D7uz&byI}awM6qy z>eI;FHN5i5%N(B^(RB?MnASjO0>VXYz1wkol%u|{4iPP#_3 z0CO2}-rHf4XhNVAVYH&yJE5I*llm;Cfl#0ej#=n*{FyT)jifw~YEXBMHsZ~iX<2kk z8%yTBci*8D@TH*?{hYzUjzTVx%gsicA9LcbYEbX0bwj~rNAR8?>RYtiZ5Vc{>hi8I zYg^i&j^x7_O~F#=W;3$+r-cv*-3;df!#EOiVY9j9cy&b1+Rb`20R8fEB$kZxjhc~~ z;%aAHvz+6^OUY=?Suj_iNElAvhXuo?ux~;+U)IF5;Y8V~A)#vvb~vWR<7pC|M_- zNq|&vE+Jzfmc*DcLxes?O34HVdAB2{K@~}9KoypW))bYcXpUQPkz~l`Y&Iu!b9L0; z?#M$l)vNLr+t7e3#9^fIUd>(+hTT@}CyGW-#iH>!?W{%SYLXdav~FD}wQ*|9G(yfl+<(e>M_OJSl!}R z8XsueR=HB8(3=5kN@^~dhMv|tP8JJhi;hg@!QBsd_PLupcyN!S_0qUvAYRRnU%q{t z5AM9p{rl>VSB#R;j{}|4Mn?IeLff{wmrTtHj61uwp<{EgB~jRJdXA4yxjaAT;^K^$ z1{$w|km|AM5N2&hF1nZZea~#xa{s|&Hk(V9U5j(DUM(2Xz_?9FqgE@6^^zBEJx8W6 z6M>SsdgX-Rg&+Q*A7rsu&|Y3LmV%_nr#|@u{AYjf7Y%_){J?9knN3I52Ch+QmQqw4 zjcXWpJ5!g-gx=^{K*xfH+|_fU-dFVzOi^1&;FCkU-Fv=mbUsnhPZ3JeVod!YtuYA= z-g!z2z^JPJF|za-9~40xd(AE##}Uar{dR{B#$~~1F~$Lv6bXKQKri@sfZX|nSW#~xv&fxacvwGGcc^9+CI=YN48 zdi|4p=?}ihzy9st3X8VtA3KFJKM;Mh!ru#6cX0SSop1aAQaK<*bExAQt-y? ziiT=9FMHQqr^TH{tJtAer!;6+xtN!VksrN&j%13rrfDfD5#uGPA9(rpEpFew z&GG3GDfPrOl1pU0Ui0wY1Lj>bp)`&Nv2bjefQ#9j&IiWI7r{7cg36KwTnI`U6;(j> zJQb%m7Gka8DyY=)lE;PO10Zs8PTk?dR?=2=Q$I0n+X9FDUt;&8Xa_U?UW?SuSv=5JPHJtX`4WYXBHYFLW)K2xfJmd2xjvTOJscV zgmKqX+8IR}W^F^)H53wy)sm0D{u&>?|80id8F#+>ZJcvlYZJE{Jhdza%fDwzFs^^%0bu*j`=`T%@58>1m`zS`R64?WLEEJ*eSvO1f9q=>&N{QPR!Fkglxj zDA%==v|0D;#Zb-_e2sH+8ifNgjU~O;T*0=RgV#8moV7@ww;eI{G&oK7$U0T1NMwC~ zLy9askd>=hr1B(fajI0(NbLvranWNyDNx37 zWV;*K^g9-d1@m^!tQB7S_{aHy*FMhA{d=F`AOGWj#6SDL{txcmyT?24yu5HI;Y9sB&`S3)ROk>0JuZH5T+ZVlmzy?6VX1aACL+I_A~nec1U?WsHWP`sY0YakAOqD zD8+bW&Kp_TWnxs%lbm6;Sa5lMLD#hW*r$J-XPAFpzjw??l;E6X&8pY=KO*oYK%>eQ9D%U82b&Ii++k4 zDk)Fg935%s;WX@eQXI5^$B1XHZY-Huw_vy3kthY}}Vijb^a#%SOS9 z#<_hn-~wXA>YNqX)9=OMn~sHjzft9PTJW+Txz&3@If>|~%HVwsIM(mnwT^85Xx=;J zJRll+ZJU;wOa@l#r4l^P&hg&UwR6lEo7sGcLqoPD@3YP7=XWOe_rZ$&B2y7py|2VJ zbCt2X$>dPG*?=^Gj5kC$m6*bFZ z?^6*YsmMS<$B+b^Q~p*i1!)DBGTti}lB_lXUE??#FBwN2;RokHk5BdE8P)7_voq7o zCXo7p-DX20j`^%5=Sa$05$hD^i1nLv$jKM2rl5g z`o#ubP2uqa4@}SRF5U z{OF8}i*v4BziNs&r9E7`ah>{!w06lh=LY=Q8`a{R)7`=LXO&GU%PsR*I&KOv$tO2<_ov}<`-D? z@lhVvp5LXiOjn$a>Z~9F7`8i7KhQNZ7RwF_+6EIKNx*HbrT zMOkuD-*%n4c&dANE|9ZKn|z@dsuZ|>?HOLU{W7c5weq`yuGHlRWVC?JX|KrC(YH*_|6V}EQxdAWa{&=&#=AnvURTn%V@#ud$F0XZPpSvA=;*B) z>lRxN-YN035r+$!XDCG4#!sYJeg8`Q7tvyRD((+9IpzoNTycSkYs`#Xsa>^4# zRhBt4=1m7BHDq5%QYhjm#p7JU7cHQQD=M&X0Rg&pNs)$_g$@kZgR9*^ZfN248xB3m1B-i)hzhx zwd-s)TBtNl$Ljb9x7~r;^4cdp&U#^H!F|N}hHK9~L#EKSEnU~pF6Owlq3^fU6psM3 zvz87e!#n5j-Hb&Om@((#{0TRndzLt;QRy>RPZ8g6_rv!AMgPA3wXgBbuYH~C$ESSo z?)!ZA?RPnzE&0wjze(SZjN{1i=!iS--{<6H!5@F|-|+W;=@)tO{`ly&ZYtNd2&M4 z>^09Ag7TKw6N0Tx5##Ljt_btdCRRFcB(ARX6GT!QYg^yc)cK*lj9XHJa?TG z`@i`GR)rL6*M5j(RR}a^wQ{H(T1u*Lkph?J7x*Qx=pZLziG;@Una_TX&;0D)=3oET zzvNec^?&5uci){{n%h>$V+8NWDOs#cQmL{XGGofj=bavsCao^Ez)J$0qEkcB4b5YP zLMpak)j2-ps5gZjQVm*QSwe^z!5j754vJWLQ()3pb-K-^I%zRQ8#Jb*OR;*5sPaS+ zA@%DL=O>g3pqOk#m6B$}=^86u6|rfYhei+iVb?2q)OhYc_>kRh!)B*Tv+sMHgsCXJ zyxekjv0=7a<6L0Z_Y;a1b28;tHqRTtj6ll}83rw`N>Yl&-Ps!9gWwg#&A*DwsYpggj+X?1j-G#?E>aAuX@4H0wTYLbDojaB0`Ts8Xzb#nK!IxtW~Mv@=td!fcs|<&xFv z2=6pItw&s-=Ut`(LDE+9$x8`Pk z_3Bk#fBkiS>6d;9=NeA0KgYEj&r?L>c+x@hA~ty_MaV9JQC4)+ovg@Kbjml5lC)_n zC6SBQ@gubXdKx2gMX4Uu5;%mQrI^!mG*eBkwb5%t&#^i>jX9Z`P;+=M#>Cm#1-sqA ztZ8i$P?4&vVjbJdW2szKwF&axlg7kf^r+}E_In*|+Fhn9`K+qZCg?t(du?RiEy$_I zxrSlr*$q3L3R%NYkO?@jg9Q+_m*@1mOS;wiZ+?L_k@w6f?a-*K9@-_V(S0!jZ5Hsw zjM_?~-)(>+2tuH-=hX`Rvp@T@eDa4r!LR(vuka^-{D)keZ`f|P+`IRX`C`F*wN$m1 znQ0aWF($@wK%~$(MSP|{!QhIVA^XBufT9^pPG8taPb{X+%IwMSsVM(KiG;@UKovMC zWri^laO7d+{qMfZ#i!0WIbKg2d($+`W^*1tc*6PFr50|9qc^bzRBbkc%1c@OrLyQ(2tNe~ML~>FNpYkSJ zoOp_;xnNZ?O7IHH8AnKAS21)=%xNVMKWGI*!s+?WxL5=bXj-I3vX#sF|yQDLQJ5<1jU9&N;Goxa^GM;pu{a z545(y$2gG25kYM&h?ycfS~gaQj{l85qo$A}LZ%UOv(Ay^RaI3LrNKAqEp(9ZP^yrH zJxW-~yu?J5q@HXXBsX}6WJpr&b_Q5{`sexNwe2D(~hUF(;0Wbj>x5CuL|vxpx^ycAk^d zs}x|n+wtVd6F&U#t}6Q4j+7#oyEAUR{1WYA#-@KljvK!H);pZ67vwSHeMiP~cDbQj zE{u#XoIiQYZhKDS9p`5cI6H?p7SgB$`J6K+>mz)t9Nfo`A2SR)7W0l06J5}t=NLy- zwMR`^_{1lEglBKuV$6lpE7zy}`A2^2M_HX5^Z5Qw{Sapz*?B(wlRwK)3T^1Pa_uJB zH8hRGBAj*1Z(Pu^s5oO3P00|^ow*jvIcG|=II(Oaa}3F;TsxyeOnJIyhN|~!Qh^Li zoL`N-avFzIU>pWRh_&dG6m;TK9Au#(Xda=F%Trc?4kmaRQl$7oac+tN%Q+KVvq#Ae z&wCSyQUAs`!paja)^%5qMU97@Z^XtE1Eq*!EjKynl~3-hK<`JjX|; zTs?h;lrs0;zr(VdaeD1KfaA0N?m9gTH! z!Rh#<#DqtfwQ3tstL2oG1g{cTMGoqrE8?g3TOoceT9n+Xd_F^vN}>kiazOB_ycVm; ztkBdOOFfS=lB9-=Sn|1lx(J=d3w!<+V9Fx&_0et}>M&DplFe>lHw;QJbZSbPvvw$6 z9P8y$uaN^+GDpjmDs;Mzu9<1X60MQ@wiQi1JbzE97g@P_JP{hnj;#fr?@| zp!F?{Ymn?I(fC(D7Duw;F4+h$8{ybFMMx=yK*1GtiO(fcQJ+-Q79gXM6O|96B86ll z)S{LPMLl!+z9-iU^0oi~AOJ~3K~% z(McS~$$v|cj4)l_x{jJD#M({YZO)k#i+#_cVYOy1T1OZu>HE!QUg@ndm^Cf4u4BDk z)3&X>Ue;T}1#p2>`Ce|%DfC{^oqasW{+F{cYyEE>MLI$V%3G_&u?Dbd6Jg)~Zj9{W zNV2hNy?5qaYeI&-qkE0tpl;>c~L}B(Yz`)s;=QmC?1O= zNzi;#@sn|^56;HNI@Z3}Zj{0xsxl32LumBxn$S^vAk5}md-i!!QGVgwyLXAhj$yaq z$)ksS_~D2888%x$Jtikn;nlHJ>u?NHN_QCm;YhAVL6*q;>hOwLIo-gu)M#z z2IsSu6bD5_QdVX07}=g*AVo*gZ9CIKB&p3wDTO!QctepS^JToaIHTWO@_WDk1vZ-t zwu6RhZ*~Ju&Mx@;Z~rz$8o+U}(>N?u33}V_^b5}!(m3wX?^32Qxms|z>7G(=xqX9? zFcAmlo0pPBprr{(uP9g*JjJX=pxM-h_GUER%V;uHP*&+7_0Q+?C5;bsO-u0Y^s~Aq z)3lZq%@sqb_vbe#s;uYWpG^hYR|qx$wR2E%wYIVBL3`b{4V049e-3Cu%e(Kq&&6io zTW^1tCzo4I5b1l~e(O*9@Vz^fL8k!s??2>E{^TpX`R1F1{Sj=x8+r681p)hsgM8!< z4!x7=MMXYRS04PCh<<5@e^&qVsn;ue@?Q0{IxLJPK8O8m2o~xo`}dd;eAAFhp|$L} zuA8&j?dU>-WH*KL7J*?LX=ZcfVblXetosWMh-vHcRM?Y?sgDr;-hc9+^7!n6Kl;*_ zbTdpNd6#JNjA0l#TA$!0&;+61^~%R^%9Y9zjgYLwL=k~h2qNmNY$FN0vjbMuI38UH zI?^nPrr1~}7Xv7ZDJ@Lr1Dg7-+$}q(#ypMvf^(WhB}!l{_I%D^oD#c9lXAdPGHZbY zRhG3aI@ZGDf+J={K8n+bl$`b7x!~#MGuG=hFWkJv^UprVyqn?B(XAE?@c#Sn)3%x+ zS#379<3P0H%AxRnN>N8y!PA&;l^CS0Dea<8%t?v-M4@eF6oGL_>JKJPy~DjmiHw$^ z6+*C>A2VYN8up!1#%E{nu`>f&?fUT!U-m`&bn_#0O=~_>V%N6;axKw{L>&;l+Vz5r-+z!gU%O1@c801BX7*6KC_}m z3aP*@rh|lZAZv$lu$+zJoXJfmW8S(!8-ER$k1qpPai%^I$pb7nT1GsMVl zJ2DKJ<8DcCPl$Pkl!omtF<+lDjOGQ`HZ+5VAB&;!UNm;A4GRi|Ax1)&;oFAUEFeTh zguNpaVZK_k=w{Pe&SPf1KBg4Sv|Fwg#QvO4BA&wI#}D|UFa04e-@3_{zw#w^{UuYN zdy3q>f0tkXjepM1{q3J)j3eKA>l=u7j5&kd3*KwWgU^CXo@Luk!mAfgSTcrC`g=zW*Xh?J}*)}`hH7PGY}kxV8=2yMgF^@?%q z*>1OVKG+Ce&!)yHpE8P50YXt;T(!9Ae6YP$jGTXPre+;aOSWeBpsrBCm(gf)!Ff-g z)LeLsTdgU?5xiPoT)T3Emu`KW+b_S$eBMo?zZ=g!%PTLxgsKV?>*Hg7=u!XshYehW$ySlLcoJXa*2*Qv3_>YrP z=GLtj_`(-{hxgupm(9hF(<=>|?G|x?#cVmj@w?rQuIo&_;Yp^F+C!Lol&ILE&sMmI zcrBuas46GXY%%3rxk`sJ)Jn?>Ej~4`ilRkFYyLEdvba-@mffZ*u4w8uLwv~=wyTA; zdR!%wXJ?8j#f+~~0KDN^#z)c$Ub!HkA*|<5kWyH$*Szw|D_no(8MeEPd0sVKUS4wN z&K>UEyT@vIOxJY`IZ|>WCheRAed^kAdoK{Q5G5JqU+i$iPj(h@OuEV7Z5*P9V97T5 zGgMJgAT31n|0CHxxe`Q`e;_GM0BR9eI{*_A$<$#L>wXm-6!Uu3xqiujt8!?44i^Hx z(Kw8fKcWUhM|hGUNwr`w4uq*db5f(&R5K?{ExGA;%scIfb!?~weW4J%V;rLvU{1MV zprgPnD%vOq{2YJcfT1)&%JJ^RXJ@LH9K_5Pb=?R5{SWO1e1*6*;Ql@!P+Qd}^DvJSA5YUkf%T z^?NaoE8#aDR z_%=f>%;pOnagC6js#kBm@FKtX3xAiCHM{lXm9Xn}WTkX(y=VCc8B(&>&i zHEJVcjD*&FCiTwHe@C6%6sC72dsSqy5p1RN>%CLh#fS?^DG6O`z>ZFsj*gBP$HXhI ze2m$wn@(s4ESGB_QpN!Zf#YYM;gwfkWw~6@ES7)03#?jT{8fsqr~dr`cVfSJupdKI zlCZD2|b=>mz|etkY-VDVeGMM7;^>+p-0d)x0!d9#ADu3qlOVm=1XB zR5dOIhGai!i%V}T5VK*(47M3VE{Vp43C&bjZG8(xusM1~8uz$jDS49PcfR2)CSoZZ zuh(3^etn8ds0GC4a>s)QkEjt8B0|?RZ2OIJ)eM?;#?i^PK?K)mfTw<&%1J8qdV00N z5c8griV!GbkW!+gs5~@7ZIriW#bmKR6G3QDg1hy5sZ7sVuN%3jgF`t$Ud0hHm-}fs znM#dfoEj+3<3!&_vEt6*2*DFf9Tbb|Sz^`=x!C$G7LVZ#{S;q)UmQ6XHvNEWgJugN zG%jcdng&%0S_WegKNTxAVnR_;D_rfMFJN82UaL^YT#W-$Bv$pHB2rfP8w#!xen0UE zo%0i%U+>Ri>sUAVvj4kMxkk0S5F3Y9LaP>0&UwvRq*(W@nS#zW)JUkB=T-|W52RXT zm2BNc1~Iv}KrqE)ESYR0V@jX|M<||HJ9~Rxy-G^{%}MPXO3|pGR6y*5x#G02DaE8I zg-{9!ul$?p`6d`@YHCW`=e+ETH?8ZEMn>gKwsCj?5?SwETcF}Z6@W$Eze6K9g;G^D zSp+domKbqaL`XwI8eNz5yU{hLpUdT<;s_(P2XCWcyEgvtz_bI=xnP{c2G_{sqz{my zx}wi#GgiwJUbuCeKRvm|hwr~j$qv=~DF;j`3`+2C+ZiPUN(e-R()YSY7Ns{V<};mi zNVT)5N=Vy(Q)VoYX4Y{rj?84qWsEfQ1)GaY+BOhG2tjB_8e!G7^l2o_=e&ITRX+E# z|G~6of)jkFU%;n-;xn8aU*+L$Yiqe-b#j$||3CbB-T7U^$6tM&FMs2kWQjHg)=WO_ z9Sg;)tNT8#rvBZ2G%l5YYzkE*D|%!Tk9v>Q^RtwF(?>W&`jMUomZc@F^%?YX)409@dYQes_c(y z5ixYu&Q$Y`bOovpSg9jcl)E*?$mRBeuYBz*oL!u8e0;*~7jIFDQbat3rfH!Rwijm_ zAvIIv@~>@y^;apbp6-1A?8o64b5eFutg?T4BwAGl2mksnc=Zetn`COSio({*dp;#(- z(s58pdEy4_uZgv9vPZxwx=^N(q??|%O1ooJm)&};)M~=M69;9Q@7Io3_BEpMX{ud= zr{+QKKVRcLyUitHDezaXUY+bMVvOu|YUsDwZFzL|gvDY()95Ct=vmNi(27%a@YVvZ zszri$J+#aITg-yJ2OXn0^90gyjH>3Uls99Bt?aKuMeFQ?B4QH!Vn{_je@jI;ZEcmO z$J?+kL=BRlde(?&v*(;43J4|XsDz?Lq4QpI5)Hc7P0t?`YgxH0=;5hrY+vw-6IQDg zE;!Ptyg%nM-g$zk1Ael&B}5KTsRYHmw_KRUON!*|yWL3$A!;#F3)EC1t|;-muBZJk zMVD%GRM#=6sco6ir@e)U_TG8F)~9Q$N<8Pijvk$IeVkLf2OaU*>zj{}b2^@_H=x-1 zp=e%Z5-oPJ9W?IXyY%7=I#aGt38JH4l#f-MF2Y0S?BG0o9`wGgsGW1FJhXdNM|OEa z^t1>qY9(RCQ(cc$93UdN5QxK|D!!@F(fhKg{K^ zar2h7$w~sxm=E+&kf6x(Znxw3`Y9=9ns!EL_Xx^zr9tpX6m^OvQ&Oak`vI~Qty#>a z-7JBMAwRk=74|1$wtGvb94=TXB72k1GA)#{U$fP?vo=O}YZUi;ZWcp|vrPLFr7)kh zlNCY;p3r!9myy}5#rqYTQH^y&2>XIQc>2CaM0u(eh)^_kUtoO?QvH#$J!eg2@b-Mb zzHm>8*0rRRI5|D#>)-qaAKt&m$;pZCo4}ub_;hoiuKx2TI(AK4C* z{fkdsjlr$1(TF#&OiZ&ypF&#O39N2M-_8hK{yX66BMM zbAorq7x0Eq#e=R_a9IeUvFmBF`BHF6N5U#$KPbHGVgU2BX;q=7pTxfUgU^c&u0GhgX{*T#VwUXiO>fv*`7y zh+_yQZFU8yME`PdABtUC*!0iGvLASeD7in>;?2=G zv$^mG&6$z9gVYA3j>APqqQYb~!L-hp3Op^&^JI-8VtlS_W{-75tUVc}C_+bZ_B}c~ z939S8M8W9G5-2X2H(i(<|C8CCh^r$?N6O<<9$2n8Ey^bZ)(*i^5o}eDB~cgux=+>- zZjrh#DZfjXTsH1XMRlBhPbhkt?R$uE)FA1sHWj+sJvEO^Une2ilTaRB97jE%OQEzn znh%x+kh8`%6;lfr(HNmz0z;qZW=o!X{zZQD)1T(?qr3d^pZo!vi?gXXXj)GjR8$~Y z^D(1S>y(lsG4*=iN@h$0t)H2?T*vLZ?Uu!2u1aX{m<7+-=91C{b{Ci2dgcZnesGs$ zS(8sL&IoP8Vm>1TPb{#F1E;f=+aG%cbL3IJsc}N36&^o+2%;RfZNK4cw`0EUINzLe zGC$R8M`BC^#a97UW|uRLtWyl9>#m}*T1@FRude!HN19|+`HFRCQg_4}JBFv=h=Pp? z1vgDBOg!?DGgzBFRmc{!`OyB$8jh05{lKDaDLI=*-_xA#VHhYW;eB|j;Yum7>36K! z*+Fyl)T>X07VOXV!+TcHW`>FOqAj&jI1?p1+HQt#S{92Ve(XnooU7Na@XRyMaC&+| zBk>o;4HoO)>84O2RH$Rblrqj|a26Gj2Aa?y;`qZaevvdrW?e(qG?dg+ zMkS@E7>OJz8buFNr%0B^nYu)83_Z-OWA{cVkG9B*!%MNyTP9uy?3G_&#TDrD9b5zP zYCBMK{SL3^gkYGNoOp-JhBDRz$2K8nosM=IG93i!wPO-{w;y?&KRF{f&r2`9$n(!X z&vLzDySw1tgAeKB$o+?pc=yf+^f7UCG*@#xgL0)Dkg9D2QQvb_L)P(WROD9oIWJDlBESn?}$b*@P-0{Ox{fhMZ+DcE=vpnBQcg6DXR%l?=ESnoz~{>Q8is+~&51daqpC8GRx?F6 z`yEHi1&;*$Vn)*hx>-X4wsBaqLTnhQQoKMndhbo%TTML=aF_&6>z8x zzD!MaIoPjqZJuOL!BKy#Y&=xmFH(%Su9^0*-c*Z96WOub?Qmi58(2RZ#ZArjQ)mAn zVpH#2`#6Uj%K8YQC5uy}aWSLMiTS*nK4%;fi{%`_@q<73DQ;Z9s^7KJ+W6ED{}{2~ z(zUww=kqyt@80FcjTR3u-a6-_ZZRJf7;t4!BoO|9?U~Kx99w2DIG%=y-5X zajRdH7Bvx(NME$Ly7S?8`TXbq1^?!Ef0sM&zX!PxTqd}}D2Whel(E>XSD{MG)gAUZ ziIt3ALENecl;X4)6eHah-H?JaKO#HGs$UO=KIB?Zh#pFZCW5XBG^UWssTOD;HjdJp zN6D+0Ka?{vYbm-J>!$CfzoRf67A03NCG8-II(oQv<&;-neU%$GZV=PJ?Brv}$nj+BD(I<}Ij)0W!oSXZA$ zea>pBaJV*&k*@zwn&O4(6V>aRup&^HkUcTD^pI$*1#d01Gg&H^K@~nyM3quyKQ>R} zKDwx)HDY5l^b_jJ4M7nFv;UAh;<7$R>xC3YnzosK#`{JQG&`)5t^XQ5Q_!xMf)&bE zxY%_P8{K*fv@J!96Q>2A*`eE7(Vwl?wSXSNV#T`C13?3rv+>>h{yNtC`(PwKeNXlN zx7PzEuA`T|je)BiEM($i)usTw6ZOEb`wqm4f?8me31v^%!B%XvoK!_uQZd^V^!kYw zwThAzToV|^L@rtk>b@5=Q_ed5D%jDsL6}JJ7I~7X{E^zA={*-?v=N={AyU+2v|hte z$@)dK;LG;At4&p|A-graS1)8Xv_tBskz$8!o?^#bqrAatq?@x>u2Crzv)2mFP1ZNH zh~LL@>0ayY&uZ~HUvxA$vS&_5*z!nY97&o^`j@Q16tPcQYQ|yRYil zS;xi2`6T@paWq}a_Hsk(gyZ>~7oNFFXT?=6n#q|`!izS@O=xMGIj#g|?VLOgSg;e0 z!fH7;#j)N`p<Q{7st1!n&XAfrxAc_;eo}It&y*^nDLS zcZy;P_u4>L0Z(nP1hEEI-_JOX#MsbOyAnp7s+iSC+qR6T58%{{iQd;u(;>-{OzIwB z(|{^GDRu8cjGJ2b3T=WjDr#w(y{r9HJXVX9O;5kuasK3t=Wkp^3bdx-%78R8L+>(8 zJEtEKS8qH|LB9V5)<;KuhmXIESM^u<*;-K5|5h?7O01M=`1WT!zV~kqM~V8Mk-`W> z{?)(!7yQ8=e35T{^-Z2UIp^`iM^FmO#mb0zo>Hn0PRDMDy3vvmBmlj`493Bc3AE7}3ZSp9?cMxVuDaP?j>35OVl zeO{+#pwpi@u`!5_TS;}KEC#dJ8{8bSr{}FVfmV1E$A>!3RE$l1W5KFdVKyU6k z6m!K*3ZRsV5ks}`mKt(V3MCaoa)jNkXS>r_sBYF$%AUxs8?v894W(G1auM_XYAvl` z0P1sUw8~&UV#Nwv?IaC#Da!1t#Mn|hLk|>BlFXi6fi@R*Fx0_{B4lpj%pKmX#qCGd zm7}C4x_%0c4#ojG{I&1G4~n*WV7SBn-R>#zd#;oOHAXB#i3NOP1->F$T2x!nX@`;v zo-~ZQChFHIswS=66&2bf)3M|O&_@ruAdciT*G&*&(!xPiniajW&xFO`peoQBh?^)= zLo^A5(2#fK77qJsloYjYLZj%LMWE!AXhP78K(v5DlxUwzQOlW>lzZi!*#f92Kng^s zK1ZZT$olQ~eXk?z`5YuGH?y13v;m(XrAUez(tg?Zbe%R8*PeTUmp=9hzWUX#(ls+0 zuX{w(sOmbU#B#nsT%jKZLaTmbkIx@743WiR!LS`TPv@+cN30f0*2@*+s7k|r900Y} z2u0{Zqv*ePTwb1Ye0qWyq94c1a=k`UvZyVNlWCTtXQHNykPX3N|DCH9jFIhCnKWgZ)}}^8 z=?gI>E;k!e9%*NDwwD(=(P+>;WQ-m`i!(#UjX^#lk$vUbmci(xBe%SKr?Uz|ER($b`f5=;J zy~X3lXPjI!4wkV*rVZ#RU#q|5Q5Vp^?PIEbZ2{;7*gsb-gfx8C%o&^Jdy25be^YqsD_0^ZY)nmxB%&J~OqBWUg1R8vT3|!s6|qQ!Y=;5pimiSPzX-D*UWH zq;q=RQc?$Ar+Lj_H|XKWP{iA4)f{)t6?n+QWV9NS%ABhN_Qs7Hy!hfRbVTbXlHrrH z3*LRX*zIHh03ZNKL_t*l19n5?=%huw)1YTyOpzf*wIv9ORK*y{;+TcT{7WFFfmFLI z5=|QvSwJlsu(4aQL%u@ip=~H;=2|;1g{f2Jqic~KWKxFdvfc|6oRj^gk`fW{!7MLw z)|d|~K+>R&wPL}j+su4ESIZEuwhv9{*bSF}%72r>|Gl!D8h9BKmnMdJh3rL4PjGNFI9g?bB>V?*siX(t1Z8 zwHRzg3z+DH&@>v}Y^Zr?s!fG}Btm1>Arwk*Y=+2Uwx$^}Kl~#izA(%;}E(|(Wv!$NjF~*<3Mnp zM-T4NZ+FbQ6=$1E2%go+u{P5&F$)dJ6&Ar0)(f_qC%pHaZ}B_->R%Fb;>DL<;_T5Q z?!5b5?%utNFPV4VeuuO3$2v*NnZECN`&)1E4}SGmdGx`D{J;w@@#dRv^6=q97DsEf zld$z4<2WIKiewjXLC5-aR8Apg%s0wRjI$P1S+G6ash649l%^CUCrWLs9mHsAb8+B< zjm{G}9V!sxG%3=2ORoia+p^tklnaZ31fgw6m+D;KU-axY8zTB#V~VsW0vmJIUld9n zjTdM<%)>_88rQnTOrn$mwP7havDYb&n!wqk zGcI>qzWtr=aOL!v924Vi!-wy^N80VU|KVM5?)#5m{kwh~xsilwo?HfE8fimom_fu#L`Zz& zx4+K6`o?dwIzFQFj?3pSkcy}8$EjDG$y35Y1}TM|ojEzfFfQquhFRM(_G?oF4~+eQ z4-M;ai3^@M_M0j^XL|Ec^sd3%=(nOroHCR)8tRk$yce`hI$JZ4t(MoiActe%?Ug|3@3j3dX#N9^s)waVR=S3q#4 zL*(!(23s&&7(M7PnTFz=$yrnh0H%b^v)Su8XL3@FonS4x;)LaLNpOl_$Mt&J19&$b zTFR-~PNu9#E1Kj`>go-D=?});6iATrF5D&(Hz(OVmHo11V00M_nJ1 z?HQKJ2vZ6|A>)b>oh9Ouw|EjMMMaVqySv<7FKOF3{c^>8K4;ml32lShYQIna)^Rj4 zn)Ep-Rsd@}8jB;A2EvTl?inszdW2i=zsugvKHa=!*{_MI(2oPBCo7x_oSvSNbK%UH zGwkgiaQ@sm9((Kx=g*zxM?ZRlH(!5^<>|4ZSDv<=vAesgUV}r1v9LN>Y0K0VQXYvh zF%wU}TCy|WMTn%hW^ZqYi=trL{TS}abS**}0rCJtiLG#0O!ye1`E5nrK= zVpI>))!K9=WHK*N(0+r;Y!@o^y^3ZfL*dQ6W8AWzYSo^pIAO83;1i$t1m_O+*_ki6 zeCZ+pk3RM|Lg8RBBab~__`(->>7|!={8OLg(NBKrCqKag9;jxg-m$%;6j~EwT&-64 zrbE0L#X49lW(s}NgJjxJfYlW6UV8C+eCyx*9^d`$cOe%V*Wg@WfA0)qfzx&XLldge zZtxYg6J+!x3ay*t1Y$o>qLO#h7p_KOLd98h5J7?`_L1OZ65j*e_?tChL8ShZ%hbYx%>krAqR_M|6x**y)L+pv zmT_v6Y62$HXP2U_H8J;q#@Q67^V4vH-f#1xw6WwMTO|Fwv6vC3@0GSC_o|TW#4(zQ zZ`TG&98AP9>v*;Zm}SoxHxMP;tprEhEpr3agd-KJtipCx(LdJDl#hgn_gx|Ma& zi>rkY(>kq)TtUeXl`ja&v$7s8;wpN99du=Lrpac^NI9+vB&yJ9ijei6^)S*5fv#&< z_e*y6cN9^zHe>6J0Ox+?CvmI z%(;E{KBEmBojZG;C!TnUFaG=&`P$dM#;2dWGRdsG`2FwmKm7Oq9Y1>WI*Xawxh#+F zbNl`4blsfBt6F+Vu)DjNtdcBK+^k(I3$s$--tiH8hkH05Oq_Kj4H~<4=5vlt)z+yI^*M1xJv>9% zvb(A0I?CTv-78-!h6naeHY$h~0abKdlesvK`hk9H;KkzNVrPd(9)FC>hlf)!k_$9l zN26E=E_7VF^boi2-RDzJKE?joGe7wW)|6CX1i}aW2p!%v3@NGnKCtT7n$b2M7Ycpf zbGW~UE>1OFy>oP%?|kPweD~Ym;{A88a{u-{X6>9t0;|)3y}dmsj-ekcNGpN9)ZVvK zLLxn2}@ew}>bn2V5T~<$?l;Sk?v|jh@ z?(Xu~l}CB%)1T(xaF3XK#$jMw_uRXCmmmD#Ro;5*E!x>G^KLdxk;Gx#Bw8>XO8P8S zu0atCJxPia#yBd+%Sp&v!>lbu@tGx zgC=s4fe8npVu9M4pT2`l{cPQLts3>c$j7g>3U!V#s@uHNXE<+K<<5*NAY0PyX@X2X zXwiJkDz|C-`)jab65OoZr20sGMp50IO&Psx?JJq|t@>dgga&89tn0M>e!M*4l#lHKef`lZ>F{2M9HcmTZnbRNL^}8gHMnhIXhBRh5F(W z!M;Z_W%Y{04a1<`Y6?T?eQ-P`^V=I<8W)Usdb2V#VwCNM$pLyy3|}<*C)_ugZbb{k@T6(d%;4!IO+HQ?UW@ zCb3dcFiRRMx?9sar@d=km*{tWfD>1WeRi}~b0jn!tJR8QihI;Sr9pFRDy^|&5>X@CyjL^(^{E0{T<*)rJ z&p-b>Pe1)M=gyv|ZD*X>SAocJ)R0&*{M1i9$77FP;gy&EjNm$U=PkSQUHX1hgc47V zdVjj6rE6LaclX#|G=!|OE57LDZqqcJuGcJ=YYq?3QJorU%p?OLaOIK5aL%z>t=QY? z=!cOD7cTJmpZzN&pb_}Yr=Q^u{^&a#t(WTcSSkmp7So1GNj9p1v&71n>sY~n#`n6+ zgAHPA_*F_LaTruJ1_3JBp-V^;|5Qv%4NB5@6Ku$;@B3+b zvu*7xH=r~)w0JKYExHjD2KpvCA-Kd>hz1*rNyxG0`+Ft8uVuxUoqO3wzdbb7UlD z9cM1knhw-*)f2i_H%Ep%>V%p4FeO}&tpj*79apQ>Y}LZ19cqg(>E;rzD$qJPCInHz zz>N_!R9&D_3X(TMo;nd_l?f^jQ19!8%jZ>`kW3s#npwxtuZjIY8Y8PyZ5z(#3vfCW zH;z4hzhYeX+_`y+^|I$+|D18TgqXCI8-j8$LhBipJ;A95pjc(D-?egOG@)=fhV@7Y zj+o+{&FGOWi*tgb2y>+{*rqLttcVmdWh zRMMihHTCdQ=1#GTNQR&lbn(=CoQf6<;vIb)5gMANVZOV=`E%#!TF;H^S8*>ao=**6A@^#aXPEDSVM8cS?t=@E$QW(=fiiPNs@!4vnU65c1 zXcC*kRbu#RJ&(>kHs?%98=pr+r(YeJRqnZP5F{zt6zG68n8j@!8cO~gq%2Y=73q-&;+6NKH(*9T$y3u^$NpmdiD_Zr$Rk2@Bou>m)!uQ7vD@%IOpgVb8yhjTS6O@yMZSXxq0gbFaO{r zUU}&+c<1dOar6E6xOVkjN-3N@dzSgR9joF4ZQC*o1HB~_-WOWmP9$ls<>92K1nTuh zQ7xlc*Ku@T`}|GQaQFTlocF|%=tLd9bBU}@PTAYrvqN6LXC<~Lt4h@R!zsdK|9e0| zn)-9e-fxpnb)&gWB1)-{eA%j6sZDiYQz_Kn5sGN=5l`bX$%xeTGuqbB9`9H#myB_x z&i2D#90#ogcXxNqD-d#0(!7XM9jBx=BW*Bw&7$py>^E&;Ql@KLhH>O{b&8+Qk*)Sd zkxj)_b+OoLiF92@q<|>em4>KB*hx2V91AC>Cmigb!Mn_=?+J|_%Iafg(|Z5oZUZU#%F1o{}A_^%^D28|gnra#51F zA~QAld$1KHTde_Y-MJ}HPf3sH-m3ht%Au<5gbXB0G)Y(`+H&ULkkx9%$!dwS1Zdi? zc1U-qwY3oty-!fw8mCEQSDTTO_NIbxhXQ5O#KU=(;)U z^_u1B2{@tYW|QOsSi34YoYPSk&=K`%Uw{oZXj?0z)4HYJnv%>#z*>A}FXTjZ!+I%{ zqz(qvyuD;I>O&{(AWbdHQqe4hi>E`Oz9!UB#C-qMH?U4?A!6~tQns8Y9!@dzujEA5 zJcuOb+%OIkU0_Q7a(N&gR8%xmxoVs1N+=o?Q^H#zlw)RRXNTp|_?mUHF(rb_>Y0~p zGS_bkp~_(_xokZ5OeA!SBVpF@$tR!SAO8BUbKzi*pZe^xoY~)FcdvQyazzJDyqTBR zCV+FQcXfJvA1A`Xbg{b7(zcBzz}Afrr&HE>+;A^TOoUm(G_apFDIL};E5@{N#CcpU zc;_L*(cOEbG0}#OlcQ5+yL(9R94}93_jW13@yUJ0bx+^x_0-}Ffs$k+tMSp7NuB@@ z8gk4!>_kO^D}t^?zc}0TqREwRJDE^ajE@(pc&u!SKqw#Mq1IQX5L3}M@uI=`hLj59 z7|99di(QuEDKZZDphHg163N=B&@0ikyqzph$(8-mipSM;U)AGW5Ynjnk>1`}{~5=T zrsy+0Iy&O5x8CCT=1qbVE?l}y6FQbBOTys+iM0rfS

;)*MVRf($wo5nd`rx#@a(e#QyZ@WowLwU#ufb-X}sr=haTb+pZXLJKX!%V zlyim6RAP0m<7 zuH`H7cm#uyL=vPX0-P<;e-}#mKtvSr04P zwj))c+>d^>tylF26SH)h4)szK)p}``;M>XRijZR>yNoa1WJMBD5~b+$?s~ms-nFzr zAUD%gQ`5A>IN)3`M8@>7N=AwaWfrEEyC$8M2v5&UCW2pbnIu_#C%vsUC%6m^o{TWB zHYh0~DpaJCT_h8F+`1{nT6>yl=|NI9Z!laI5wYpQLd5(Bb@8!fVlcIZ_5Y`h!gq?K zIFj-vW>WR{oOwwWmEV=}(PT=mU(nc6+wP=HiHYPy{Q!&5G=aV!$q1`{K=2IxlAZaE ziH;WSAr*&Yhr`=iv%x4vH$glBZUb zgCXK1usm8aYi4xaLJ!{gg4MFeWmVJ9CDHky36{mxwrN#QF1raK+Ue$u>4Y)%6UrTY zW8jePQI|7u9O-;ZLr3R#5p>eq1x*xURtukOk_Rfi;HRXh*u8dWvb>FAO~yE)?YrV- zOaIZbOEFrDP4TLXqOKV!HhC@1JVYz1rFK!?>u^-w(hJo4Y2La;*K{rrx|W!sbslf_ zK+?42^_o~PLuklext6J5;=wkoRr{J-uLoL$6>+vQ$;LjcaMFTkq-sG{`h*Z9K*Tyr z2~S}$YsqnBxgL4<^eRUur(C;sjn6&%G|zqJNt&+Z)mLBT-D~e~|8&KW%TGvxRZm76 zEoQ5lCTFvRs0NPpVA00NeBRNDW4<$EWCSUEaO*>U@AtmR%RhLDAHMn;_wU@JYg*17 zoTu|GZD?pir$~!e{!y6mt^wbW7hAIjd%N7ddz;njl%1U&MH!7iu3R5GT||udTdYNDh?wZaVIw+yoKy9> z^E8-dTLE;~9I!;g2wA}i$rgZ0M+`@x_oXeco;= zo)Xo5t6F6hF~0hQ28hWp=(QE9oK2eIfpcEhIFZcD~U3zXq6UjHJR2uWqzstBVx7a{YjP_3^`G2uml7T!;onkM^)SK zPI1$e6RQ6f^bBzx;=p{q!+f^G$0B^D)~pgN zQpw($WK~Z>Teg;zI7M-{(9c}5#=xwD37evBi{qE|EOFiwlPG7)+aQV)qiX1|NHgoE zHLDtIMW-x9ZJAcnqnlX%uLQEW?EEV6 zWP^0ELAIue!4R|{8#CjeI&E#+A;B|a!E9%j3zr^Zj;Het^VtsT^_s^&`3d%RcW7n{ z%FyFO$9kPPK3Vg_*WV)4!)3Z)>-&FftdWnrYG%5H4o#B+AA9eEndam#C^EGowk!Gi zxys`h5Sg>xeyAhz6`BP5}#Gh~3>?9cOl#6eF`%3A{~cfWR;ej6>qg z*#mNpSP)% zDLGF)c(rY*j2utbG|an&wxh~0X~7_wNTzE&T4rQQaq4Z>s8-YIa)k?lot<4Ce)wU6 z7re`i%O#8X4mUphfa8-DSKqxxzZy6=bC%%MF*>OlgO7-^fJw;NGqd%!gfIqRRbCFrMC$u#w4+sN6psFF2R z!F>?|i=7tOjM=AJnL0<)Xu^=HZdBK*HX9lgo$NlOjIr`phxWG&3Xi zI>>cW(G0sq*RwcJKdM$(Z8K&|8k~d1J7O7_?Y4N=5wr5Sa(0}YESc}^Yzl{90*xYS z$eWdT?iw@TcDkb~U(w-lr4R(x#JhsnQD`7KEayJS@>w^&+|Sn{Kb zUlU|cDTy&^QYfO|Q>5}7m9JJ$wMvl2IdTwNNBUVI1my{CO>+AJz9@RiK)^Ppmb=J$?tXp902Tk^i za#Zs$XfkcZo3_$a*G+=TANZm&F6!!#H95-aL0fX1+KS$Lny%B9Y?f)7wpfu-2Y$Rb zVll12qRG3U-j3e4K%q~WF)7D67De2$7t)wPf=V)=NfjkAq%}Lc3yx3jX`43$l2cSR z+4Sf(n(wipnk@#F<_8-DZ9;3S-H+5{On+*5a?0WEo{HqA#F!GD*CDujt0k*d;nv+1 zJE3K-bDTdH=zHPr-TRbMxOjNL{iB}U!;46`4t_z`9sDF9Se7Q(L1Gvtpb1u;4jR)y zGdn;;7~*IgCOEo#i~Aqm(p5>{hp5jX{e3{Sw%=6%a zvhJENeYczoKmS+1$QQowSNMaU{XGB2Z~i9V`_n(+`1qKdGqastPL`+a?d{Ny2_FLM zG1^4cCi%@-gE$E@+^qvEN|FW@E|of#J{{(|VU6ucwaT%Eqw>JC*4D$w+5wtiC59o9 zN~SaNz68(N^Jm%L-)C=ck9+rTak@MKajg1*n>TNB_wIehlEAwdz6 zx*O4jj$w#8_36FIQY4oBI3aTyJgQBEZNs9sIv9ynH-DMn@%qXoQp;RzfjK0raA_=s z;I`@^g-Wep$rBRjT+m*>m?l-w1Kx@9%4!s-_j|*Ufhr8E%-88JL99I{%A4?(aMhYa zvZ7#PKiZUDQK84834(r}J!eB_d_^+ELD74q);*iTr}9>+8oOF!Y_;E~)`TVu5;HoH zTFr)SWsA^w9mRj330b*2qLZ7tj+sn_i}Ary(h#bNnI1$+o$!;&y_CwyF_2sI^Xqk# zqMXG_?61|ah@0+vvbLAAqD?`Vj4RC~o1x!(bAPhv~s)Gx4v zmXbzPc*K(8+G?(Xu#yq{1Se*r$>nir(@7if8LsG$Ph}Uy7nzUQG4d_O`C8 z>g`#k#3*B0ONHrKP7&CiRlxJ=W|`0&FUeEYk1dFE4(vj}ki-Ypt`nZ;s{u^(t! z&+6ou^*9hvEi%j6xq9^-E?>UHrArr(e#PnOG5)w^Jq|QJ(9LJGUWXfER1Rr!FpiNf zXtL@=SPz53XX5BrJy+j;hx;e@+21{&0d9WqJ`U(lPI&RfKWB`+by*f19Ut@VJ6HML z-~N~USO3M|MRMfy=nlhrsd6l#p#;Ye$4Pj$zSQ=pm|e3X#2TlwPSA=PH;;+UUN5lj zdm7&=>Qpz;w7c`PR{MS+mt+WRW*8$?YtJnUDQ(3D1y4iP<*#^sXg z*;)aa7$bSi6H2XLOV_^?0|7*)b#9bb-T$sIjViirNU0*Po1_5yKm@-Xb7sgC#uO(S z#H+8p$umzp!Oa^VGOm`EOs^S+8F%g;~Y?c8%3)MM{ZT@wljf z@_aUj63pYudKuZ+z{mT)cRZumAIZ#ZA&q+#yZwsUsbQhSz@5h?lqy=+7_1J_+(^L z1HQ9N;l-?tdP>n&nWvqS2b{;b0#PgAX-vPO%4o8=N%U;HZFyl9M5jv)^-&5|u{~-E z>?CWenJA`BYicV&HMNu<<+fU+Seq7x6!A#~2oa~KP6(RrIL}a@p&05`+Zd%V=4i_9 z))uo?nit)V(VP&H$vYHFa-7%apNeuQv`{ld&spH6CY^3tmy=|K(*(}=%9@yaPf9Ad zno8DNV1p8M{fRRr?xH-I;)KzBA1A5PiY(WkvE-o)QLe? zloykwwty6^O!hOrb}C9O9_)Ksu~CX0mK7a;u<^0ArgVJ@)*8>?GK?wVlDDG9`YH9E zIGyq?4q7Yek|8h7?m;qTeC2t$sYqtnC&+|y0} z&UxfP(wlJ?ENHpTkxE30qhCkfdh>0Lk59OM^UH^23L%1 zU$T;eMfp?1pd6%19N(aMnq0a1ohK9`Zv_NR;u`8HRr|Odxt9t6B zpB_Z2=#EWL)=~YGjq70O*93WsO#Br+m^RPg0o0(>KxaV(oop*b6X0a~WY)~|=X?M$ zE%97PMV0%*lo;E#aZr`Pr(jr-Oxf^7ro&xJURCuMsPnPaG`QY};JxLN8o01&O^D3+$`#bSih)}_<2f591b zpb8DDO-!Ap+Ha_6mCC9G~ugOTn`K=Sc@YY8e581_TDLXv9A&+qVfe(%3KlF zV$r8yat1OTcGcmai1KNs-)gN9F$C8YZPiXK=c3Pcv&Oa(M|)lZ6UynFBIIMzgIyEZ zqFQW4HL*6ySlwSrn$9wkRiax9vXt>=@?Ec?J|`U-arT@a+yhQj0lali`K3)WtxG3` zG$v+kOMi02!w+BK%^!Rp)*V0h{Byj2^-WUBq~!^I-jU2#a2$Kav8M|QaB%&SAS=&&$Kp&%Oa-rH&#nx^Y0^UI$lhF-Ye1Um8R~~6hy!PVv zcO7AiH&h|AWHfryh%V_fB zMG?5lWt+`r$jOm%?@}fdMZFtw`geJ=FA8PSgVTK9k~l-nDzaZ!_7pd(#1MLRWvuwK zf`gLSS+wl!&v@>$Pm*F}*Qg#Dxbo=3G<8%s70#VM%kp%E_YLiQ_Ln@t+G^GOnE&|T zpG2$lY#F>(OP;Qsv)J2ZI9<`rJ5H9TynXc=*WS6ty?e*3mpyH}pq)9I&}z%Uwn3T?+pzrqL4!Tur3YG!D`fLfPc`b>!Ynq|*x3R&+!EzgLu{R><3r!;-9$ zY^u-|#zEf~f@5dCplbss$4B&Qo!UBG9&>V}5*1xHC$t^lRD9G#Pg627FBZg&INyer z<*?FzpH(yMteX;S^@6jXGajC^jjyPaCRMfZSx_ylvb_XN=SQ;O&E`Z+hZCu|iSxAm znvgc9t*nw0DJE8{6=dazjMI>cG~4vGFR@@8)sFfpX3v#nuA)9W>$blrcfk!41Y*Je0|k zQHt?Pia<4vwq2XEnN|ZLCdE(;ZM9;v$~l-wh&@qHDe7@4*i>X4@NlB{v6LwpCMUA^ ziRUHu9+kZ@R3pc!1ygb%jk6+Kye22To zC%pX1>pb(+lQdp<`<-{VapMM89)1*nhaY~J*I#=T@s2il2%cs!!@E||zoe81H9l9q zTWEsn&}Asau~^I)hBeFO39r8PGBN!sC%2CX#q;6K_nEgdTCa+U+M08$)+;Vtyv+Fv zmp~ld&JMm&+C`XaBIko+G)jgPnbupL)^Any$EN!9oUG!|UOc(PDL&4cmK;AG*Q8b| zR`Ar8qz^W&8pp}Cr2c@?5Vk(U)}{BNg?iESRAoS-Nmy8GF{{(aFbsBIXE-Y+#Lk{H zCFLKT&=#^GR5fm8lv7(#Rfon|F`1iWNmeO|G-kS{qxFeWdb$vZ=-&3g$?;td_x2U8 z_J#HOgp<<~nxYqQFKkG{?R3Z5Gfl5&*oIN~CiiKNuZnHc&<@);{ z@ZqgnoSv@empxtB;o!_Uz;t>VZ~96-vspVikhe{%M^Q}V5^*7@F(rjIv_w;FFIk1q z)Y^Pi+VLE&?$V#x#v7W@^S(fUc1^Yu5IeRruN=Nq07#UY{+ z0Tn%{!O0uC?^Sun3f zLxxISLzqU<=65)+(`YhH_E`XyjEas}+TxX4mMSnRN`%#;+HDRk&Y@u4*Y+Ml(j5ES5*!|MyR#6m>B8J=CI$`ts>)x99 zDD~PlN;qaRc{fwR;rOCU#88h41bPz-UL;^@Z<*xDwvo46@f zQ{3)XZmZE#eCH?=-GkKi2qN2&kQ+)Z@bs*r|Mh6t8iPcS9 zN+~Hv$dKVuiU~dzN*rl|R{}qUZa(AkBUcC|vOn+GaYFDAlRyZ#(6W1YhWWuEXU?A| z%;v;?&B2-T9G@znAz{YhYFm3n(36@`*1A=Wr#;>c6slnnu{Ysusu>ZfcYxn!E)Olm^UmJkAjq++A1fi5(h zu9lQibRxWM$tb7Oi?85rZCWWz;4n_4OelPfv&As>s^ngg*-4z(3bo^g6_I5}SO_S;tpPOHNEcaLZ~{jN%7)5DWoO)+&!LJtvh zovUih))q+=e68m50C;5kda%If71PgkJl2Wb&o%RIllY!HqiWtIM&rV$M8k(4+~E4# zS1GZunC<9fRLs-;P+b+hA2Dg$P^-v>n1%;eNl|^Msa;~dt=f}UvU)by*x5L{CR*7l zvkB!RfXy%}YUFJ5X&bsut5$P=# zSER2n`4<+cxwWAj6&)473C2vh&jSIsx)D&55mCJySGhIz`9(4zcql>~tSu2#4^7)& zN|LU!0kCO-c^5Vll0^x=b^N~x-bk|1x4^_Z%#`Vds1LDh5Hxh8 zzMzRk88?N3bB-aY)m1?+Q1FNqY2-pETOr!+Z87GqE5;cq_T@;Fls3<+&gp0U;XJi{ z>-Q3rj|UVnS&&4fVJbSXX$em4H^V4JWU>_!OI|}M(}Z>`QSX2=Q*JEz4vrEqL^k77 zGS9}k&Fr~2nFM!Lze}~myd_go-p~&YWqPHIB5_#BuD`?Cs1cHYu9DqnkDK%TcxR7BfEgg)b51fSd-J`3wr|T-xQz zC!eC7?{n|unAu@RDI=ko^Yk;Hr3V&%#`(*a4XIb}TyJr4rD4{! z-1+c*uD$&hXV0GHlb5alBNXBMne!%=s~@xel{?~$7HJiV9(+s&OPKjYqpT^zYUHbJ}c~Yfta&*kC z4?pDO8HzZ`Sjz^vn znzWTrifqz@QiNPZDxC&~n!1;wZJdc@@3KPCVrY~=&WX^rc!~-v+86Onr}{_Mg{y!6 zQJz&z3ZVi()yUeA1<}@?zPBb5`phzgXcJ!|ZZbi3XyPU!L=CUDnH1xj5E%J50#hTS z7}MK1H=(?U248W?5fV$Rf{{k6UuGQ~NU<0c1hPd3n36eE)N|9OcGI30(F5NFnbx%r zK@$b4Hk+wATl>k2O3PM4f8{PY`w8b9k_y#e*%d#v%Z0$k6T#3rtVqgb3nkrt3Enjj zpbBHA97#sL2OR=%&L(qB?m*oPN@W=JFma+qS#~JzvHrXh z6(6z!RHa>z&{?$*Cd-qREvNM8O0o$I%3xsfVxUbgAN%1vqzcN9hsfT^^=~^PIW}!Drmy4Gk;)$o8=IT4|PAK}p?g1%l0(-JrB015uEsnx!wW4d)r?jL* z=;l`N7WyIb;q7}|xcCUcxAn0=O6>0)GM~>0t0lu~Np962Z!FMBr8TIIQ|PqK)-(-q zjHIXr+#4b3t>UdWZs96YvARP6?YP0@%V__+p)qI}bmY&gVi{3!!!KNCyZ zpl7m)BZ6LE@E$CFRA-L$I84`&b7tPnn9XMNao}Wm%>LdXp>0+0mCASZy59h(+(mn~ zLM`1Mcoo68xRoZL@m6wzqJ^CoQT|#ky#L-c)~i#V|LjjAsMxR%#;vtO{E;gUQ({yQ zA}39-Hq$6CgZ-WYME>CS{}tc<_P4q9;f?8_5)l=gEQN6#aP2~c#d4wb0ax;LAmrdR0J&;v ztJSU-nc5zwCu^Ff!3W2|!6DCo>3LrG@|St^sb|bftlp@J6av)o{s(W-=B8$aIrZC4 zf9<{enD+uW!fejp{rmqVPd)V+zW&?)l5hXPx4C`qwjN9l7K;Tg3Tah1ci}waFyeh7 z#!S1_TCL>Um^E1`#i~bxjh$4u-ts=DzE>rIcp*mfl=6Yl1jr*PsiOI~jvOAIMewZF zJu$1^$gMlKdF8d&38BSFP$GL)D-Gw2_?WQ&rli^sg8g?vf{Jj8SPM7l^p3VJ^TZjc zw_0T;s_}DytTGPOekX*$FhsK^(!$O=l{grZlEX3LsjJIf>=+JenK1F)vhmPLp=kms zI&i{ZLY%b~C*E1>Q?Etu^(HAHGm-th7@5|F7C@0C{{X=?Y69fNP>rDPPX#29oouFh zq^hCo8c6!kmE+(FW9(_9*`QC(={*CA+tQ#bm;{K8PE!ow^^={(Bm~~$TY1G55XvOTBRwt86 zn#^A7IuY04nm}mO#5)=PuC}MM?XPUHXlg}E!F%=YbEvRwiHYDHlt#(hPKP;GtCfwk zt2;vofquPaZ*NbBV*r!;nv(IVTJM}!R}c}ppb2lv zMFp+hhN_@@P(c%q4q^zo3Sv_G1l|R59B52zc^pU80!wOl6r`IZQ|{kC=Ji)!XK!zh zc{}H;FMO5N>V#Kbd5Om!zruxc7g!!2^Zti7ReW3mUDy3(MX+?@WpcO|CH!q#WO{Hp z2hMxes}pAPhB)-xy?d8;uD->e{K>!N#TWma+qZ8s43XXWAp~f?001BWNklZ6CsZSV=nZowW^EbaZQVJ4LJ#y9=Xgff9k%pF+-mt*FSil`zI$z8<_9!(smugI1-CWUX0_Y&~-hW-R9sZn_;I3 ziJMlDh>`qFx}zd>6cgZ7K}?*}L&lrup1m)|jd5`!%3W)hW;nqVFl$betq< z;^M$Lo%j@t{9Qnh3CU8jv%XS_mJAp-h)R{NNJcV_6NVUI;mZ<8@p>&bbvCVcuWLP( zXfqKqp{Xe+YYAs&Gxdxk7vm9WVp*Sm%K8~8IYoPFm262*ZNNG^>ZIrd@YLF?d@Lnj zS;DJQDI%UCVfu4Dq^d95vt2-8)|=^i5eTlKaXKYu~Y$0@U;O4ClxNzY$MgS<5l8UY+vZyKifJ zkce*_*WZ2en6ce^z6OgL89UhtFZz{%BQMBR%V~lk31>QPY z!D~{l0~T5Y2%df&S+8#MN8kQq-h2B4W?jR*`#1U1?+ND)4jKB$(dmimWR9aEZ6CY3 z|KDHRVQ|ytP`-_FX^KIb81JaI(Q+CgMP{=O;+lW`JHNyC{@uUh*3H}8xpRkm_wE6X zrfDhClA=(G-n5)DdCZ7!aF||-cSxhb*y*W5XX?_vX<3~vnYA-~7WVcI*gHJK6Hh(O zU;V`|@#$xt#?Lx!2|CEdA@cA0zWQArczx`>d8=o<_5KZBYxhexmh%>DV?=zzSHAKU zo_+RN{`tT7XMF2hf5`hc-ebL9va_?t>G27T5p;KEJEYMN2NCqB)#*buoep+j$#m_t z0&=x-7Xc%;>P%YHD$BA zGPM{gxqGvvG7u2aX%bb}HcvFE&pAz`bBc}JEC1SBeR|j=3eL;KDU+bcfZuA}sm+cF zV5sH21|FMya;~#%!u-b1aq>{@8L~&*VzGB>4Q2HU?*X5Y!<5~pf!PVzQN-*(_Dp#FStptilI66 zacx>o$#f%~f4Iwh*7D3_ zR|t&?7r*xUTU@_>ji)~S1P@=lfcJ3i+Esq^=Ig9Zmt1-HVG@}~AAN}Df9hFoeQ=Fc zKQOM=G_$$#$bw1;kTSzMG7FwD_Bw=-8pI_!?-j{(iQ_xh@vLlqHF4{MYlM<`|LPlf zMntq#H>_8zPEYyf@BRy(`P6^I*sr*G^X6s((CY*rDck-xl#@+S2M>0fDjM#Bx}0c4 zwfEJvZ_&2Kw9UDt1;^&OZ@7hJ3#r=tyi6NLMR@hMjX5#z=30ovq8_rAHCHa5A61?q zAhgcYg+}AL1Tq6zAml1cQ^S}uYD3luK@1f&)c*fr?oEF$Ij=jv&$Cq3U4BdN>~5~j z-DHy#MQs)>m>zrL7_-@qCj%rfU=Iw;V37O`nOB*2L6FJY!2khb#BUGwm-dk1Ak{9PZRkvI80^7m3gjTbE%e{4PPxpU`u{l`D1 zsVX*Ra}FOq{0||(0@(m;IY$A8=y%+Z<>#C;D9DXBKe2}L<_6+~{ zzxgGmCr*G>ewF&yN$J9`75CEZ;naAINy9ByzU}XijMWU34nN)1_3aYYc}|@^&AL_$Av3bxwf;*WMdQGOz8Sv4wJ$YaMIb5Lka$5 zoRbcYR$OJnUn>#)1Y)2bTT=ZJ^eJV5sgvqvHMSZ)L*d1gaW_Uf)P&?LHZMateC;{s z5)hVqv!(rg?0}N*t?4W!;pSjQQfis=`}_OSDjgH3>_+9hSh{FnI6NEUF)@n2UlOxt zu{X&>z$Y7EA`a!DQ3}K;(y<;0mA{?(2b!Q{{Vb?cPMK_r0kV!l&Ju7N8E5>KM@Y0|YjBbcd(FBLf8Zc>qZ_)9zDmZGLHUa47nFK||DxsGiYrUjz?$*zfU?6i3 zzK3e+EP`E5yCK*0e{_#x4IR)jmL1lIu18GtEOt0hLu!F?|W zM%C0LBN|uPnt?x8x}L_8z92q=@Qw4v8aH(DjmJyjv5m4TMX0xE1bSC%H?+Ktn8s@i zu41quDb|@2$%sqT2&I!$;j9Dqa%HAm`lr9rVj&;qaQufay4>2n$K7t&Y{3%X790$X>t@}$U zC6@gZtro8B&mxv=#l%|aAEkg31@af9)>G$j%humOw7U=ET~lZ+~tz5>mE3) zWuX=kITez zUNmm7U@S?c-VDM$sNH&KRj7%>CmgcAkNEU|_23MLq9d^;Ti`3mhTI2?_mC1#oIT5b z_+S46|M7qS-}u58zQF$8j_3=K2r=NR22vs#M$S(TgF&{n!o8wsGKrP|(In}B8Umd> zh`+6Kx>lCm@F-NSH z5@i@v1Tq_H>jh#jn;24hHW{q)XkwPYEU93hRX&Y?RJyr1Ete=Fkd10V)k5ejrCc=N zkVXZo?1`lO93^9B1~u$J;cqDczUV?3Efed#C)K-@4!v9Fbjb~kaf&*p0R^&N$nr(5 z!YCXfhm0Z+Nu&o$_AAyxvNbs+$6GI5h1NQ(dJ78Ds=<89gS3Ioqo87W_QhbjNF>M- z65A4Eh2JOScMW_Mk;TYHtg}UfFkODB=x3QhXU!Q)HbDbI@h;3(vt+WMQ91@Ddzm}l z;cP|U_u^ewJ6toT?K`4H$m7~1)eQo6Of_SU`SR`vOW?6sw# zfp}ZFU6X~ZZy$B8r?P<+L||<*8i^XX3f*i6?mWXP@Kz2N&2`EXYyF*u4s3`UKNP92=}L z10rp0NhlJvvm7~k9BsXjdC^Rv4?Owg$C=i@O*m+=c&76W9(&>}&;6sHlbVlroVx2y zCX*Lw`<}`v-z@~1x>DY(9ZI#g2OMP9nq|g^^%G^qwcjzu2snWt!_JHdmXxOTd@GXv ziq=ySAfrfjS@-lv6H(zbj}0~;b1VcYk9OS(5XqvxSAW7dI(wkORgoA%=gZKXk;O@+ zAne&Fx~gsblmsElFIVD~U{u>>*_g2mP;{{^15##$>A6 zF==LueG8FHzyLRPukg}~f58ji{w6>C;Sbo~-)B0Vi^P96G)+y{w|M6WsiljZ@Csao zbxst8Lu67nBobY>V(0`)41QNRNQcREKIf;O{Vc!s-~SI(^9`_`tgYkLI|V~WIMjlQ z#T6Xuc5c;Q9Y7Ue>my^YwW~Z}>%^q8w8)kmBerT)^E{w9nXK|%PbcM?C5pYwbvMO2xZcA_!mZt#{sG ze{aF&_LO>JWnBi*s)7Q}I7pEcbwf~u!emIXS3*4s2F2K1afe zsjQXSp*408el^()b~WWS(asoeVdyK%8f@txCEZYy7Y>HV3zQ+WI7zPc5SHdH=d5%u zQGzrHkL+-`8j5J2lqmx#29jNe{)-svh^R=%XI4b0@Z)q7(ja2^ef^vRp$ zL4`1)NyQNCXlcU994CTt(#T=FmNy+#l^{xe?3Mg2Ne570oj7!<4{0X{mZ0zmU>P9=1JE z`X9@J!fcmr&#WcC5%CoSv;@u0IdEo309?^0)BUSx;gx%C+m_iBHaBXvHa0nZ{1nFz z9|6i5PBcwLh=C*9TXbzp(^QnQmh)w<3Cfwf7UK=iJ@*{n`opiY`{vt&B^m11m_nd$ zEzYKaLo7<+BO=$fJ*!o#JL(XrfU_Jsew?bAV$3cn1s1C%Cr+H8uBHS6j>OTUN104( zLMM=4LG`L6hUuCyiQlOr#e;yd9Xq}UWM5a|`bkxg{DJDA|1Kr=wfGtkeYU*ze2O;k)1aQbOjDg$c>QDT^tA)_19l#)d%AKKF&|DniaT8REnijPtcm2rSV=iSwWEs*;cY% zfjCmmdN9HOBsJ>P^ zcbOQ29*j;XJW07Qx}l_yuvzQEMgn)|92Ker9|h%Ws#^FbA?hKK$E-woDk&Ac773=D zbvRXVPc|v(d<;Yi%$`i)stF{Y0h6Q&z}FRB7QR^@0)-Int(S7Rnp$T?7Y5xiqNasO zH6bM@GHC$L_(l`!@zsWc_<-Q){REo)~forLZZfyh6PxF{xLdoY_7jL9spy8|7d# z){v|tnu1)($#0FrIvtG+9?@}k+U`A=94mjrDRMHja+gx3mD0sJa_g*g5sIErlt5EY zE#n;~3OZ}mca)e2QOe#`Rk2ts*kA55na(9>FoioO2%Ts`X`H5~WYl2Ym?FYxwTn+S z5lNENcqbQ`739WrT+8#ZR&}_HbQ`k{(yA(UOkb zZ?;kv%rRly$U7`^oD3leB4iAMSaQr+>{1lLM$3c(^m*|Lv_@PwfOgfgScrT=4v`~= zHkdReER)Y}3?glj#AF^tu%tb@WS0?en5u%fB zh>gtYq&tkvCmo9|G)g@z!wV>P7zK+u!1a7rw)XAAZ1U zu}_SdS+hlomPxaX%{5({aJC}kNV{4IGGUyEb;bx;h;znTLfc}U1Sv5mR*ROt?MQv1 zay9dfIggz^%O^kmX`cPZKM!PZ6&Qo7WT>4px7>PxR|la`O8)!TqftLOc7Kzf83~Ls ziPx~og5M$&7!qe5c#wbdKmE@<{q!?@`O9D8t0&zVw3=Jv>5D_WF}mm(pxU8*H;d6q(hWhfW@NreO01!-97;A>V(4Yzsj7GhiuxF+ zO?69fe0w>}Igd?(gawo`pOa=`8nBr0PkBlj{s@;uH!wi}9L2gNA>4<`OBp*WvgWKC zUc?(93DQx}6^|$Bsa9nZ(-5UDT)3&`Ln+~cKv5*nDrm%5+K}boG>+3b zYsFHDYy*<{NBmZ?Uy`1Yc{Qo`nB9oldB{B#nL z2k*VbYp?%^Cm;DKNP&0Xd7I_(fUV6#s%0WM@r}CbDxDh38S%pk<3ZgQ-7SY~k7l=jB=X< z=_xAHXo*0gcg>1{tUgl41t9R}-~Bc}`oW*`*?gEI~DW{S@>DFzh+ zt?0T=HhAaAPQBjxjEx3zMT%Lpj8dX)m!#M+sl5&?5DiT;ualEg+$5}639!S|On`|S8MypK--U#w%tsqLcG-S)BnD-{( zHu%b7oFk+}@lG^36IHaaWMDaaExXBmTB2C#V8|wl-j(t=iY!4$5$~iqVmhhm+bH^A z*0SsqHU)e()Q!g))F-P_@lioN+Fq=RtR$WIY{Y8GNr2w>E79@tQj#e1&=@K2b}?WP z^vQTDB_(H>&1M{|mXIx8kw5fV1(R{!lZ_E>8FDYyS}E&fv?EJOnHWo(dqLFH&#{j^ zCY!;cH$X<37V;p^qxG36W-l)NLG@u)>T@&GSWdqWZOHyKaGQyp*#*?y0 zWVk_uP!Q9U9Z4s*%}MwY+Kgh9lVyx(*C9N0eC@Q#r$ljM)Sf3udDb_GucihMI!;!D zwv{4Q+e(N=5~X8JD+MX%!KX19@j!H0Iw)P% zgE>1^s}4RQykjf;QTvpaqaSDmdh2J8{7E0;fW_6 zXXEG=WVq+eEaq=|Zf8kHLdF?7yU6D+p?>bH%-{Qi%uk+L+_p^8LJhc^Md9heh&o@A; z3(+Ono0Bv;B-QpSWkBP!%;yAQEe#0h^C)7i+1Y_OAGKU>)=>PI!8_?d96bDxvOjnU z+O%Aka)2D9WUA`>#zJU2tTC*X2h3&@Lf=A8gqZ0}_0K+m_o@iqR-m%hlkbLUttdO{HMP;YACOymkfC9dU8vbvN5DMRf&&2&QF zM?y+N>8NPv#F*)Ofo9u26WX55%`Hyeb(%*XeT*lc{1}fv{y34$D)h`vL&1tN9~E5v zSH5o7)B3A^t^h1K@vr{JU+2zy?&kOY;7k1YjkmaX@gno-l$@b&1Fl}n1X9#mvk}cE z3?Nn?qT*}`DIgwWq9K+-q7RAfLxe^S%W4r4P8>0YaMeUk% z4ho7)(NdGwayT`z7Avl74W)ZHr677`+0%8MbX00!C1v_R?P_k`yvgCC$8JGi3t~E~ z@v5SkP6#2;g}~N)ipee0*^K$tCU@U?4~~F6b&`;J4j(=@i}f_&*bv@2Gt6<4obW#i;&n(34_cijKb{rtDT_)Cxzo5xPDxpfFv zRXS!ee^L?-tamj*n;ZtDwge$*&Eo7f&Xd!UIXc&ps!eV4MC9$sbBsSu5Rg`2XNjKb0Q+%kA2SAWH2#v{rYtxz1-ul+H^jf@_rDzj`_w6 z-&(9SA5|hu+*x{aS(5AeB}V`BOGDdBXa$9hg8fDQqXpe zqp$xLzVU}&<-&yzX_qT%Kc}*e$Hn>phFbzL;$KO2VnOm$2B?xSWW+ z!FVN{n?wqMWCfxQp`&u1jg1WsA3I9bH0fd$YBJ<&e>)=x1L#?(0cKHvh*@0eovlcv6l=wQF!n3u6L@S4 zqSKT!##O`weIKz-N+bhOI0q^J<-#Q@9D+1J{3IzudgE}`4RAhsh!tI(tYty5Q$jkw zyuq50vtg9)AgH3EIWd9pn3M;^B;~c{15>D|w<1c}I5m78OLR`N)1h?&arvy7_-?-_RdOeZH(c8N1x>0`yS-2x8G+zTVY(q&7D06 zJxyKXtjC#N6M|k5rCw}vyd{~;d*?3kDc^vBn{D96rE666l<9nnm}Cq>s(9s{57@;p zH8ZN(aC6mTeKpJzhA}V_Z1q{6r>Arp8w7E(8jL9(BbGS&nRGJix-aXv?2J}*1cluh zQc2pJ>is+_Qgol6x`?dNODh2aHi=F7Z{8 zZZ~V0O(u}T@PR{)+9lO<;o^t<{ulmVUVZT|IDhVaysfCK8Jio2FnIc2pt#ug>>ljO zA~9>4G)~lNjq z8UwRt!lbU~LL|l>=PKDOLlQXHBjsJAHX>~z=ExlkeqlZg@*k#;B=rJhg)EQ4qVu@pnfl7Emkzx?6Wg06eRWU9uU5?I_PB;yk zjf#$Mu5gHtYK#HY=YP6l%K)Q{Km-XH>(XeVz>=eQm zNMAc?49Xu;&o2~l&?PM0aE>lzma79&%4}?HDk)t^@iAKwd{hYsDcwgj_s~ty;EWr( z)}jWHCL1Y_gK(Y{(FjTgwJJAZvxvS5BFAu_I+{cIO?W*?iDbfykj_T6Xt70BLC4M* z(L*cSywMF?5$#@Cp1VxoHUQ4T4oZ#iz>Ev{-(k{k0=pg;X?qMyV>#3?r*Q!`wrEJJ(a2^5c zP~e+r&`vrPiv~;tYYW#$xoQeU*j(fota$7>kMlLLPc+kJXqT6gj|_TAsGSDQDRemJ zX!{kb-eH}inQn0I;w7pd{*X^R^;1C48*jeBwW~W^yLp309(oLbRp{B>TXOE=B_@*z zTU&?N+VWJsl83yt%`g6wf5vOCyvmhp*J)y6(loR&aB#2(sR3(QwFmgRBBTyu9Fs{y zN`ba(dGnq3!BnIWm~J1ZUBR&vr?IxC3sEFUY{e_Dyw0D#@O_^9^yi2qZtm`(0K6uE zLcF2HEX4*!WMK=s4iu08(sUDF~J!cluQ8>80LRTo?=#Rr*iRxcUQ{Tvad-1 z9(6A$iI$>_NgOb0?*}lWbZ?j}2Hb+mYiU1&x1#yhbscrxNH-)}r8DE6J#4XAgm7)n zDiVq-d8r=2o=CI0-=XrDSQ3#N*)?w2ZL5 zxrNj2KuCn#l8xmHU;YxWzw#mw1;Aevc04BQ$oskV~AED z%#cRp%ITsn_2FbPZQBysj>dWBvrW!Ec$Rz5+|QFAe}?0C+<~tRU4)wlJ9MiB-D=6k zd@de!RmF&4{dL#h7ee*__az-*K@^dA=%I)B&ENb@Lf7)zYp>CUmJ}m5Z{B28)odvb z!E1D1bdxd>lO2^cI14F?J`@;%+na`ig99#KzQTv+&$C#yY;A23vO>tYWEyf;S-)K1r!>Mr|jQ50SZ4U-hIgth*p0J+&n4znzY(f!ffwu@R#~G`C%&=p5jHsboEz{*p zEF79bGzKZRnIH(6DWyFjs|u$|5Gh|*gkA!Q@;bUjDz8a2t-O*}1w)iE^w~gmcf~8y(wWDAN08I8v(jm|-g?KSGZvNT*7wm)EG-izea@v}K#=>jPN|5XCuuw^ ztx-e`3BpkX&r!On^srMTvW#bG=a)oBo|AQgT9J~@G&3A}1|;Y*T7Dk_K))*)iQo<7nn^dYG1KPnboqTT?IhA1Si|a zIk|C+2OfNt`D~NLa=`@0%uo2K2Or_+<|dwm%aKE~390R<{Y>Xok@1M6*y}tlE5{Ao zHQ`bjwFQ#^S~eV!r(t+DX($yZQ&2Lc+L&U^G~y}}*lUuCa=NsWRS>SRDI&3sRwsh) zS8grv12E1CrAU81X~(f_lexT;79GdnYOu>uL@O&!SrU)(zO@xvOJysZ64+ymv~A0L zYZGfN^Z5oRj-TY-J5O`^*l~^@+2Zi#2ItRxNTlZe`|rn+dFRzvdH>BH^V(~#ap^}_ zSgbDJ8epx*O&@iA)c0@CYzq8VPRf+hpbL{?uLQWDi>TvAFMgjdefbYK|KTOBUcNyJ znbgC^{19974RzR#bV0g%5=J6jl8B8d=PHDxMy#c@Bb|ZXN)0@vgs*G7osb&O@uMfW z@9ujzdEzvO4j*PRX^2?@w8d)0vR&c5p`KJj38;LY(!w2wu=2n5RZ5qCo8MgTLQHt) zdFGjCsQ%r*<9B}Nclh(a_zNyxI!_Lf>EVW*ogJ`_jje6EKH_~X?a(RVyp}yumJAA! zKWJ)Ehdwwsplw^OUAuw7gY~4o8;~o?VYXJ{E%0|~Gd4!Mo`_f>fym}yEk$NW__&!E z(l8TK&ci`I@TBwvxFui6au~)ehs4Ho%4&HaVyQ8*G2i6Sp+oE)v@F{dxvpuujvRsr zwHhmdxRWj(DG%zRHu|K7C1V*@ebhiK3nDYX{vP_=Nmpev6Xmgg_Nl4 znqUJV^wg?{R_3pKb_wF5qJPq8qWs4!o9lXarl1677~f<>D<)Yn8+KWQLrZolVxD%e zJi#lsNX?A9EV?qbaPLeh)2tydMoL{}dl80)G(%X;W+gb01KS%RVy*wa_)s#?1km4; z4ngIZ7$7A&<%Adu);Up^uKe1VjrW!n?Gjxrqa9g#U?iD~HY*CC%@*Z8^4i=k+CsyB zn~_6fjG9`j>2(MeJMdUEKuKA-kKFQnhrLR5^f0=YVzgi&3WR9CwTwex4F8%&#GMtcdV+g2Kw0H{bV?} zH)b2;D2n7=+j8yNHLhH|$nldWq3yueoIH7w?L(XF#YpM{^~CY9$DiQI#~xRCgv`Kcl|04>#47(5MieSHQ#94`5FHmJkwKbc(7MwfkvZY96i`DJ zXSSKx2V#;&n@k)mZouNaVYTQhD3I)02<)c}z*4{n1Q z9Rtoh{4nWYpS_zm*?99U7O5ZOgY`pZFpM2?5j_lm+goWwEXyKsgOYi` zI_TRy&R=++ci(=CAO7gidF_ptxqkgR?J6^AHc36qnk{mliJcoJbc&g5qO@Qd5CwA~ zk0vql!dfSeBF^D$MGPH%*AD^KWKwhd_z8}mILhf$cX9gkX-v*6+rZUp7il&oRI`S~ zYC(*>WVn4#=zESFI?7*9B>$TrTYulz?VP#W@A0p`CyS-+JL*a_MI-|@JoWT5JoMnh zeEDl%<@f*K_j%zv-)3k3fN9;3W0HUaOEw+ZOLlD4nipCd+cDIbzVVj;ol|^18;#;x^jCD`m#0!M&Utf)rWl z)>6323>m#0>h$t{GLILF1>__$9|qc11X8o9Xqtv9RpL7qC65}iqs-W@3tHl1;0u^6 zf5#wP6r*LP0idu&ULlSLViMgNt7R%{Je94O%x7#LKE%$!KG&~b7xQVrlOaZuic89p zESxjswT*WB>YJyWu`1J$OYo{Z0F#UuusVZvwIm)%y6GgJ1#%h?yCA|mWDM1`W;$)S zdHn_<3PK@(qN=XjBB(lUaAV8&7&Miu1Wg42!rFoCUG|4^C>G(tVMU|_(MefK$F?Yg z3o%*By%X(B6v+%TbRdOjsHPksVX)p=H-XMN zW>qE41}2suq6AV_QHWyltoGJQL}$1|DLaCcf3pHT;4-uGT%=gb}K@7>_Ykt4i! z;XJ2L-6Jc-1T7zlW?3osW*EBhY=*N>KgBn``8-#4Z%Vn>8&<7!s7IuPo{b>;IcF;8 z*xHzJ?Rw_5S6||r-}pNJ{Fna)RW*SaNV#W!|0ce6ELJP#&4kK(93r!YOl4 z5hCy1+WHauoU-FP4Wvu*gem;b@#hDM1SM!2Y?3LB8!{hcE)8p7jLFDAR{|Vs)t*c( z$;~J&lXIqO8m#s7ZIBYZHblf?f8^9;T6v)qQF9a*D#6LFjq5{;E4R@bO@ zjAu>sf}*^W$plDvBm3yi^{c$`%1gM19^t-w@1yv)X3B?-P{Av&y~qpS`3~1_Tq8F1 zPXaJwc3o!Cuq~~9WBl(J`>_lo9v$)__4iW-YZHQ61zz~GKjGWo{uXb(`6lN-{D9d^ z+~X@esZC6qIVnI>Pv|>oBevd=W1tNp2O$D|M)+9B;ox0G+qUfP?n=$xIbsOpARK|& zbi($0g9px>;of`iW-^(PV$Z5=Y5T}xu`lFGvV+T>S$_1Adjlb_%}|EK@N*Pj0h zIY`-UZ*PxgI>BOb_2|u(QX*>yly{CphYoT0@L`Irz?G|4=~HB0HF6hPb|}A_lAs}D zv>}012m!Ly1tzuq*>uK6Gi7IgkFIYun<@blgWb(vbrpfRG#rwOr6`Q;taP#TYDbZC z=3uqNyNpjlVh^1lsyHc;gq(4uM5Y{of|ke;CrF<+vT5tFo3 zgT;7DU0GtxwC$3%okEV(RfV;X`b6wIj7Pd_l^|`b5MIUcKvUY1@s|Z}M*_BQYEmyo z&)y5G)H{!WK+mP9DTjEORrHnum}-`|&@!b-zJifVtvNKj`Ohc)Dw za%;B+S;cTiI9QBmVa`K9RDQNxF(*Y&M#RgjK2iy8oO6=3m+>j$xjEmqEy~8dre>q_ zPj1GR!+;Vr%l9kmgdm@!j9%=Side0+mdbm&z8AX?ZI3VW!CFHf0;$BE1rmlyI_kidBlv#hivQ%EbbOsK}QfI7z#BLyAKM!(`#fI#)qb zhY3UowdfBe5)QS;TBCN9PO+RLSWCZJQcpJI-eO`hnPIKSOehX{%bXE}DT!8>bBYSe zf3H?64yuZ+&25eyKgDFS#VbGjE&t7!P8UpmHoI;F-U=JgV+mjG+9 zW6`4NeNTOiQ>X9Z(&ek{?p;Ij^Mvsg6F;R-Ni`WOR?EPw5%jOB8ZKP8zzZ+Dz{8I| z!V^zD4H^2d#F<3wrE?l462!(J$%wIpK2p~;Jvz2U0M=QYk)H)c2fZ1ejWI*1uJ8p@ z*}t;Tc6aF7mTrH^vRz60 ze$E^{dX#(azLUF7ot938?5J&x&5|u91J`ffAmDkpsxT?jR1^Be3X?LIE?wf-(W9(; zn3csWLaF6INJG@UTrHVS#xd*rez>2U1ty+Orwj_di~+`a=TeFM_xASK+}s>quMj)Y zhb*sA7EsAdBw3ULSs={yVpt!oK1{pn@ZPgnN+W@vN@m;48jQEx*tx;}!5))|h$za!7CuXe zl1aqeNvDwb;tT{+^C}h|hfpLKL4EQb=-;V(?D+G}`uGEH#{Sgs$h(rAq_9 zqRe%l#E!>nS&b-sN#~1Yjq)y>6Hb(tK(oyRG86CVlQb(hqtXv56ELxAAnWXqia0wG z+(Smo0|slQ)MX0tXhdhHluE5i1XPs>Z&p=9k>zm3D>AD*fEkm6n4)$x8eCP8Od!UD z@s3KF-^2b81Kx_(lLWM0%FH=XHI1lA8xiV_Q3EOi#>w~z!QYOknX@D;T?nKcsGY}{ zJla4R!zxDlBuG_K$AfId3d(O(SG@ z?>%kX({+K6;pnkDIC=6ezV-F5vsm81H<>%`T#%YM{n!4GXP!FC9Y;1ezOjY$6c#?4 z9dzuZtZpG0p8NTK#5-@j&E?Bi$vM&WfvK5@DSH>`LKIp>6**Y8Os5UA=_b1eOFq1C zfi8?TM)SI6T6yNivbQ)OCFyLlt|2Re6{BcGpddn^rT-*NNY;r)rpVw(b3{(k*dudAipbGhE#XNO3bYKK60>H) zjhok)#Yh)=vNI$nNO9E028*SQ9as?yUWJ~j1nkCWf@X21R5Xk8!+K|_8TM>JtY!XU zWY;g_v|4po6+JCUMc1_)KYoPibjpMGKQQ1E#fryUy;mUOMl@$UO4LfBZ-M?&m+x z_3PK!m~PT{5sPCoZ6pitrG3~ssoC4g;H^ZreTrB`SaR(MK@1=JBrK@CojtaiDSb#x zE6=Ip_wX~%{VeyMxsQX@l77_^L&sugkIjua2M0@H+^3#Y1j5iRYBDrcg9)Ns-854y zQj)@G(5Q>vGG+s;1voJUDS_3~Aqet*8eY1@{%5m?*1F^e9%tzgU=Wz#67i}eXJ zz@BT@uo(2~5~La0PPADNcvlNKI|jTTm9s(Q6}+#9_lhxKZ05iFwO`|rhaTX| zU;Z*Lz4Q_dC+)~fHt72 zbijD97UZexd(r4ITCX3nH7J%3Sz+fSqYyDp` zhZG?l$`yGiV zOcpL%9uD1t-7*+*8)L?jp}dF&yjfjPB$zA>Cd0VsXDeiQYn9uhV;}_nk~{)It;V!G zOkOV++94saR?V_gCgxs|XGbO|H%J>AGNY8o+Wxs-lIpsS<)US_IpvNMr#OD%4!-rr zFJl`^mo4~;oxMHIpZkD~Ch_#yNBQ*A&oHS(rop(9h^Yr132f%$&wh^I|NQUr-UsJ6 z=vK6C&)%ZL*CI%ZvxJn{JFp}++yDR|07*naR1gccWhx=-Y?-jHD57P$zMr6Hjts>It+&{ADUgC$!si1?`&!}pOS zulKrs9_Der!N5XM^B6_z^SF*|S#u#sl_toUn{r}0pYhBmKgp>(?w~tpWlVGwQq0n{ zmpaIqCw}^;=|bR@_s+AtaTT9S=_qGn=vb{*965Ygs8&v744RPeRXqe$Ruz8hy23cm zWHv{f>Jr9BGCk)$e3#wb9S#l-c;ST?_|XquaQ;*k76vQ4TM#)y4sc74d%GKp8TANw2;iQ;E%yJEFa!QaD3z_w9%5f(Y zG(dEQ)+!gbTd;eWFHa0kQ>XZak z!)t5AZ=mf1%|sT7WPxIa3W>8%JowN)iu0Z>4;kla7J$v>^!B%9e~j4F_u~n}Y^&F-GYI^nO6Ovg)d3^bsnYULI+N zp#+F6ZOGc;m9vtbb+IFdgf)g+rqlpomjF$=SqkCbWC@(IEk$W9rP(a#lo2@yL&jt~ zloZSFV~iqq!YCr;K`;>Gs9jC2giC|kV_+fMphdk%nSA!K$*1*f?hMtXdSk^-@EgP)Uf0s3hm1cs{ zWMImeQv%yGtkqHKLu`+{Rn$=f@vP+i!mBFlaX>~{ZyOik#$uV1HOm&1K~PJPX3(zJ zlu24fEYHU|$Exda&S+*WmMG(1P;8?VZODQoXl+F1zA>Qwb%pS2w8Udg#%2A!fn<6K zOpKIt%4Zo82jqYkL^OgmB8uw7$|lERpQI8OIycKcR~iEZQ88KoNK$688n`G~T{ws$ zGFj$G3<0dc`#gA_4trsFCMgerbxI;CZJh-piQjU$WOsL$qnlGso<7B?Q>TP?;~R2_ zT>0<<{oWq$(v#DI_uqMo%a<)MFnfBX(HgTiMB=#||3L#@05Q8(ZuyBhA!d zswv4@x>i7eHUws~3DG!K395R^=`$yoZ6D>;H{a#SCqIF6mhb%VB`)nAu-kUnx?7235!O!mVxoRb6pFpvE_BKBK&w07X|CA1`|C4X-O)gF?6Q`R6@@6_@}cf_*Q zt=~z`(p0Abr%6_kE7^-N31`4%s0^eOa0D8gshpJT>t@FO-jdC&!yN1{X%7}G76;5{ zwZ4n)+a`(4k#PhPeeSVMB?wkV9>(tOE{ny2*>p;qGRv-IYx}Tlej(#rJ#=l_E#M2t?>TlHaP}a=n_p0(0sX<82h1=l?rdBEQPf| zsr=h}PiYi2irjqERa#Oflga4Kw)R?5wp2yywcoQkla0>ozH0@U@SeqDL0wHo{g@c# zb5TlDmg#gV@1I3OXfQv`22uc5@y~zdUvP8h8t`*z+w3%pGE)PU=QInPfu~##(tR~AiHHbAqyI3+Y^t63oUR4w` zVWDkVLJq?HaejDK+3MkAG|O|cn}?vfIdTjRBwK4OPG7rpC}NaQTn-Eku!_i%LEfa0 z*;N$+n-rVMCDRf#tz_3wI5K5}h)M=c6v4lOpcy02C|d+wO<`=QkD>)+81n!@9VDwQ zgj7jh^QbFh9kFDVRs=XP7T-)T)(O(6_nLDSLD52rSCVfm!Q9#wSID$hIV09NMf&U@ zabS%I92#e2E?cXXgo;`yVm_9)1${AVJjSeou#&`&9fUH!3PQZTcGS!psH~99WlYts zM%P)^HBpGKgWv!5IMUrj*oG=3W}cV!e4lKDQsfKdhZBYeUNEX&iILd0fUU>1W59p+rA? zJ!c8X6`{g9eLsCFx;{a)_mYYD+6rGVL_rr##wNEGApd0ZLrSvnasX4DAk+@2sw!5? zj{W@w2g|_L_7P6rbuV|{dxpL}z$Hk_mL-r0dRD<$&c=Q^F%KuaGIA+MOEP0pP=&-LrqdHtm~ zII_LPtAFt_Hx?cHeMd8$aP8`KzW<%?^72bR;;F|UBd-?R*x3`np)NX6Sy9z2c6lU~ ztH_$1h>5pB5~!hL&_L1GlQAt{PkN3bb;otM6lAX(!f(Zo^XT@f7y}_^tVx>djcBwn z`4$~b(d0`5kGFs>m6nDJdR|bjl)$ge-LmJcpQk0MBaNP`=sAJr+bIkBpJT-4#H6Wc zyu+qQ4u%`oZt~4A{c6jTZcUbiu z&U=yhi`s^L?beqiA;z~v>^q9Kh#_kPvc5bq_x5s=s1(TUH6{~J35)f^` z;yH5U2(#IY%h#{abwV(va-7&a!NJ}xt9HS3I%E9+DGR%l!}`$Ty}uvIeDI8Yz(BX#k!`DuOy-%Qq?l$m-~B6>xR2dpT=4te_E@- zUKE9EKv08%oERhsvlTJQq{&(M2*3Jk|C0AUyuhFT;6>hg^KC-k6HQ>YHDNZNP}d&g z9oKK(;L5eDtX3lU=a9{}a+0eAO_OsL0nw1fyDK81Z;4DwBD-O%%m+-u#LTkom^L-e z7gqs<2#+8v*{ITgjI!Yu`GEr5qV3Aoh*+nVC5E=((*47&hplAZBRSkN22rI1c}w8D zRx(UR0y=5YFBwpoSta{RgYaXfWZ)vum`Ru@W8hVRIfq0DBGPDGB_#5pqc;kwp(2bK zB*WJ~vN=0)(sEBycpl~0BuyZU8rBpS`IsOV(lQzhYS4i2rK}#PqDfX{D}+C3QpP$z z7%?Z3D!+@7wsB_I)7SJ4CDBqtaS8r3;92WR67;8%U$ipj>p1WjYH46r;7MIi7Dd`r z9}Ug!a~#XfC8(mHFFEU4G`D2bDUUxZ=$9I28!0gi!PZ)NBpc~yvRM+I(5+NwEDvjc zC~cJegSGtwU1z8Um+mD)OH4V~lA^A*9J~gbr3RMJKo5pShVdP4Z`4tUP|=6-M}kjn z;2=YpJIVvHE<+aKVyFf$+k%|?%8n(&WYoMn6Jt-;2?e2WSxw5AvM(lCt5&_@vLfY` zZ0otFJ5qaeM8p>HzJM$t_{Rdvd_9%14d&=h+LdM$cYqC*4NHly1llYk&I!8qZl%e669RS z#FWWKJTOv`i~Z=)Bi?x94USKbA#I`cV8od`=aE1E^FQVD&p*c*!@+z(j3YNUH(Xr4 z!h6rd<45#kX1m>Tw^?)B@7NAK^ZA@v(=f!Ie%$fJr=RieyYJG>W=zn9sR)&1DW0F7 zb9#D86PkPT`Tg~sMixLn4BD-xsX&9*yVKe&|9y2({XGC%M7@^B$Y#4?))idSK^{fb zhI){sfl@}^c;gYS@#JyDdJk4C*n~K#N05=@uKImdzKU}VF%IIYZXNUGivRY%`S1AQ zU;c>y=imQ(e*gD>pS!CohH=Zh3%vQ(V~jC8fA*5=>l;!j%;qyZPSr^=8q7+(b=2%K z8S@$IC^?c%HHsD64?$T3<@7#CiBrnN8>0xqBa&N1Yt(45)DEfC`{AdsP-{feA9GTN zVkxGK9-QJ>T&7UddQZu9ye030qC-W=`KhX|lu%y@+Eo!Zb#?ci6Y}1LS$Ax#W0X>TUZ;_&nZkxsN{ouO6;&w~)XG73>VkMO8IvU6(uiC1{n*cmo2cDrb+s3u zQ%3+rj1-N($I-yO)`0Jepr4y9OlV9MMN8fvQ&BS^T8a+dU*r2XQ6#2RBuNS&Q6pM) z%7-yWA%Mr%m2mg>1MfXHho3`gswYr2SOxZIn*LL*TIHijpmIg#YN1#^uc^-#ufKog zCkSDAcXiCEloA=m%BXehBip+*DIfFJlXrOV@CoDaJ!~TiJaUmRaX-UE z%P@=>9E-&XeV_Q=_kPIP*$Ib>IcGCFRJteQ3HAtn00f8?FPGA&;?I$mf!rxzsdR2ujm@j`O8YRtCXI#8G=jiy1FTebf%bPXx<0Ed@cZA^i#xH!G^?FOczT@c^pF)Xz zKIZab%{PDX zmpFa+5P;{;o^gD9Ow-J$WV8b0*fR_RcXxN3Ja{P1+!mZ~5b$}V@3+k73x4}Q{U`j! zul^dp{H<^Cd;j`h@!^LbvRcgP8Y#$Ly?VuNh*A(WL3y)A(Ez}rlI~VUdq@gA+*4?& zV#_NLRvIuz=w@v0)|8TIJ5j%8RW20@!C9=$$_at&3^}<8kxH>lW|J8v4igv+t$lsL zYL@S7_o^QH;uJ1_w|X?y0)({n?Nm#|TlcF|tYY>ua#!k{_K#2MUbw!3s8ZI&6 zD>2_#QYG8xz5B6%ZPg4yk(2s4y(8uN`NT0jG%dk-im@CVtl0EBY$=mZRL(}DZD8mJ z8tX9k)TmX$UWw*1?!5QX?{fd3waP0KgI7D5_|}7?B7pT?RO0RQ9qTAiiy=^y#Msx~ zTkeyY-oMza*CT=P(=EB(P}|>Yq1VL%k;g4x^=J6 zyJrDm*dOA;Q`;YSdo+Owp+LQls{MsRYWFA=ijGvymi}84B631GMOovDgkQHuVk%N0 z7+HNzY++IdW1K!;QiwQX>4IFtVN4tyAMn;&PgpLGSodpuu-FutFIqy|;zq};nQ?b_ z$L3~a++K08I>OtY#vigee4Axx*li2#>X>FT(1bZnCkR&8bo`F6tNlMo zk^WN5z2#f6OnE==1%V#NG|?PNj*MeZN+aG|MkFlS7P0;bHpq9=F|@r8QT@Hw^bA*I zc=|{817|hnEs!PGNt_BuoSYm}jA6B!V@+bUS}+MFL9+1CM<247cN{D_o`3b6 zr_WztnvTPhQ+mMHLw|@P%heL^1(NQ%j@jW#Z$#nj?1=M=m$WBmK;r-WxBrIU`JLb4 z)r)i1>kYxrm@f`Em@TAJj+t3AW49d`bCL%EA*LlYOO%`|;asFFoL#@bHkeHN1NEjPuJ2zG2G5TPhSKx=S2P z*L9PT=B%3$Qxw0B`Fuj70B&w>xVgFE=;&zbM5j(y@5g$*=GpVF$T@R(c*yDT8MFDE zo0}WDu4B2>@M%-XeRe8pE^eZgiU3YEjd6*&0p(~tQ6_rJ&0#Vr(vq2=h{h|`B> z#JkT(IH#*J~34M-Hx=RbLsQKd5JxTRn`Cv|tSsXH&v38H% zVGX-Mf{vYXEutz48}G3>i_5w#R94)?^C(I{*Mnq8(kXcx2yFvY^SO*tK*`49N|i;6B`3jmBMb<<9(p(<}^*icIesdcH)bK7AVdMZw~qX z)>;*8h)i3qEf@-8KTIA|AnQDhc`95=wu-=^T`ZKW=ry7+OBi*MMz~U@o)2<;8p^!_ zOOTm57Bx=dl!TlwMF(b&IORIpHP!uDxGH;etf+~tn~DObX!~ob-vX5nIh{MzfBv2w zhm5FYeC<%Q#ME3?htXVCr)3Y$Fzj|T^BGmt(zbz=w5Uvij@~cw?ic=YrQ{it&n@v! z$-Is>$$!aps}O`O(x*vNp`-O$EGuuVauRd(RWqtsEg}|*B~oG$A%wn{y@&p%2?nF%7I%OPbIK|1DeErenM9+1Z|F+gDs&uG!q}czk$5 ziaoJdX3IlDXt5>`LPJWCySq{Efqd4Bs|#ER92_n2w&BT}C%C4=cOA3C1G2R|c>D&> zo_)r4bH&loA@9HcK5xDA&U8QfeoKrIqi9}HPd%eNN7-A_)HKKis*Ro1Cc{Ay%LbuN z6etOU)qSN*2yuN*?&q}b6=45xkt5H2)<&upV^a$@DdSVz3t%c*?t)AgQr}~W#3)&7 zl~*U{fJ48lz9fQ5er*b02W=pv#oVLdMaR#AlBQS~hs1W<)3uJ(YQ@d=mes+6ci(-N z`MhP>%>d8*kGQ(NrD+;YPEPpR+wZU&2R54xt@n7_;%GQM zIpdvo-jNO0IU)iXOPD1zzU5%KBIm@c>mZA*MB8{$6z)`udvN>uZje2RJ(?#z^1ybn}@gZ;T-&;Vb;sZ~Zo_!$Z>8^T7un z@Ustp%8&p0FZtq&uLx#N>t~#vp5Wz_Czr%(wWOVOU?8Uv>jHhh<@oS~v$IoO$UW8b zt7PexWhq<6*pqTA()*J6_IG}XU;f#5xxT)|7{jx#zM^%O-pXT+k!M5ljS}N7LKfr2 zoFc(lB67&&m?jj#+wj_`qF5b`SQ!ODl4N%ywj|l*A51B*d2B8Xe05 z6)6Ql*K#4~I4foCe$j%!7!qlUNy+0tR^>^}?Hg0Xg&tP#(L*?|jX`IJs z6Ot+7j%`G_wi^bD%{q$Fm z<7L|`MirzoxoU&Q1uF=MGbAHw#^Nlg80CSC5ONukg-4KXER8EJzf#=^w6l`SaGGeqs{d>s>9n zq7wY2xOdJHfkCgYcNT9l7(uG6`ZrnEOa`ktXI$RrGgcKG=>0^-*~v)URojU7m!N&( z_hp=gUDhc<;mPA8-hS&HzVj>J<)?r1BR1Qf-4JOOGj=ITp^srcpL2PBO)+TG2)oT4 z!{(0b!y~MPVH_#O(hm`13OjB1oUzk>=9|E5v0%uB(R!hsXt?%RGPk=mu5m1vOHPi@ z`0VzQ*w98X>m3AzSR-jgbzs}p41uLxkRxU>va+p#j7z`DU?kk+~wV! z7)HCUfxKgVb1T!DBq(Ui;~v3QQCYEu#@4;NXr7`J2!VrxB?qS`0Ib({Twb2@(a-*tzy9mL;*(E4;nl?zFJ8Q2921NA0c|^@I7b`> zM)ZxtrGf)?W3O^#2^Jm3r0ViQ9>hd1#waQzbvMq%(2oQCIM6MY93CF>`1AquwwtoA zVvKBdYleQqyz7umh{D0@NIbG)FG|NgLQut)ZbBinbgjjQmh+1%;Xqi!VzJ0#M!$YidoSmL32T93?`hdLk<`YhiPr+M4 z<8jt6{Qf%gQDY-`;jLo zU&9o1{8lC}sH~%jTy*qjk}lk$$AlU(W_c!JjMKqdRdIqW$=`8CVl#@aL#rKD?FXF; zY=<6~9L~#iEGbIyr$(ZR`%L+FTE{6oU%isFqpf~eYA9IA?8et{<}#s#Ngb?nObiSJ zB`A->fYnVosj**?%6CHFsC%>1LTO;MkD8p zv+Z;sN&#NgVNz&C!zB1HsgPU|#G_bBG8nHLgpqY^)MBKXVmqv677Fr`v!7Ih7*U)# zgCHo#sLEM&3-|J8H*0wCsN>!DzQ*F{h~4IzR5CYrw=5P9DJHY+dq`O)2e9pTq%?AO zcgxMqHP=^H93368SS;8LBez%A6l*v7Hh^h}XiU38J`1nyQ$SwvNd7KdO(EU{6q-Msryyc#Xvv z5z`oha4)lwWCCk(MJzi?RUwxo*IV;>?LYL)gQ}K`KL21!!jvS&yTwwnL}(c!o`%H~ zLK_%+ODw_-8%BvsYTF=4FBK6>n4IvoBTalU8C&krIy*JNvVK+XsQZT;8QN4C;jB6% z_s1B+b{uFnJ51x)_B)Ibioo&lF=Nh}bf97mov=Q9_>deEee4-FTiW>oF9(;*^S5`m z%oYuAJb44uJoJzM_>cIDzxWG2_~}o$ygX+dGu}0n)G%vX9kW@Hsy}Cj`go!^cQ7kyUw@GkSt-t*Jb8jKj>E%4x~`*b zTejORpM3HO?|u85=$uG4&T7|?lNiU|&rGt2a@1IiX|zVkv~9y;Hj|>sCQ^!=933+3 zwj3rc7IM-pC*@P*EGDQn>lmOO z61hr~>lmc|D_c!IkZNkL}|sZR2A2z7(Vc+R zVn)`wby<-nONt4bYbRHKfQ(oyQsh#!kVu)>k4iv~>erMNU926V{9KAr^`gNUBhKYs zK1Z<9N#-o1?_A16lCO^S)>&{;j!a{fh+14Ds?$1(uY42% ze+%9TT4=K%iBKk!-lUwLiLhP2mvTRHO5(r{dvrC!#E;XWH*s$yIW+_Y<3uHE)$*Vi z4?`hYtKlLOd^o4JDPA4uMQQDQGl>suDpJH-X|kaf@3qs@ zZl#mnc<`GY_B1ODd6KW2S<$1n^W9-ZM_ zOV@S)T|uJ0O0?dqvYZ|iQfR4ZWX|f+En22sKTJ;S)>^hZH7{)fq4nSc)_PhWgoC3U z|2U33d-jaG+grS`tX3ZNngo3DnxZMsEsS?G6v8VyTqG z;_#4n-g$?I4Cqu zG*CKUW5goC0XgGJkS>}1At~~7_1!{|uR5DIMaq&Q%gz=xWYqUfISNu@>h>e(7nMhq zGuAtTwbOU0Bfc8F5~CnawP+HazHHpH*^FQ%4^GC44&y8GWr*V_D!s6GrM5qK{jzJsh&d9%p{=w9%0!F?ji7jmdmXwS;4vpbuc{HOD%R?&KC6>W zgOPhtGX@o7)dNck$&wSvN`WLrq*!94Y}9Czso?{psC9Daj9Fuml!vwF`|3KYenNFr zWW9{>Fj(Uy4Z~C)D^D?rm_;dA*JUO!nqd7<&zfH|RK84PTX9UcalhMiR$j zD&I^CH7k3xQ7^Kh(+*L=QWyPejRz@{Op<~%i{Fz&k&L>|CbAw8P^V@QgSkP>s!1vv~A1g?pC}5L!fxaU;X%R_z(Z@pYoso zli%jW(=Rx`zLSx#8u5CA?sW;0aEk=67Nn(GwpPPiL7tRw4jLV$zIItDAr)6F4b%FEbDEF^z z+sUE7qE>l&>IEIGLMHuS(;B^3gK6eyQBX+svW(=%W>v`Ub{qcgZ~s5Ku4A)a^ZwV~ zr4ZHLO8JYn(9T*v!;^~)9`S8OJxxEte&Ew-! z#v#$pI!cl1Q7i@=yKw}Si6?#7&Amdw7$XZExhX?Ga=TvBwk>ntF~-ce8?ibI4Mqr# z&N%wbmf36{JG1KtHEk2`uEfZ;-;f6hg`5T9W-Ypwv$Hc?sE*F!trN$DUp35TGctv% z^_o%&ZQC*o1J~Era$v5O7*mMDj_b=Sy2Vm%O)*?uT`~-jhmRh~hG#8l6eGEVg9EnP zE$j7Ktp;S_fY@Mcw_Dn_nKliaWw+f@O3~zZH(5Lky_ldL9m&|!>EClYHj~8o!sEw} z>HD7N&z^F6dWsJ+KJ3SVZZ>0hdCuxcNXsT?X7f4EpFii#cizSr!!Qn594}wKzix(*n=rNefpFi{>AsWI=`UrMTIDeM>{P* zgLLFm2H-tutrSe?G$xB56J=T))>N{$nNTRP@R6OrE}Y6MkT??d-HmS0m9z_)#@Gn~ zqZ00?15gm9QuaSXB5pMADi^jJDXNV#^nEXUfTq!IGShg6%}Vsto=^2wSSyN^V)H~6 z&n4rtr#f_7E29h?(}v=FJE5&(F=QjfmYlO@N;;4lP7pLvz7;C`R*sN_*GBo>KRuz!9tP| zX%W-mF^z<-75ZP6QKld|Sw6G+*61fDXQQFrTBI4HN+gdBp5UCAzh?1PGudEE(EUN0 z7b#Hcm{8{?M$pk*3Pa3`BpSq=Bjd+EraCzHS;D;|(}VyO@!4=H<-|Cx?f;{odD^FP6+)VtsqZ!NCDp zBU8pvxSC^5!XM3IO_0Y?z6TcL1BW^)lzmT7o`e)xjTXAjIpH#uOyhtuDhCj-mT~Nf zanM4{bGyCes~0c%7yt5K^6K`MqvebjH@6T3kT6A31H7KWD$>)vQLnwxv=u~oS5yrs z>vL*9CoepiehKHc3Q&wOQpHpRIp4bvOf9JH0bq>$peiJ(sF$(L#Di@*;S=YW1R;-+ zA&#Uh+)WYtK%^FTGO37Zz}MU&eHBI0b2YNAQCOwEe;w7!Y8?kD|E)Kqgw!HY$n#@P zq&SdE;%7hmfaScyxxlY}=UW^d9rDqqpD>@F@b+78gUx*Q>??*`*o>J)hGZNbMy$z1 z47ckWzW0Og^Wz`=n9bdWHgxzVuv{L{H7&EbpCH_l!~k;`27xvyU^6M^Y2zG5v1X9N zHsXAXb1lh$wVqVq`fe@9ZXz@Oc`%m z2$_-!*PC1VeoHw!<_#UE8Dl1E1EcfgDfBaDj!(~UHn7|6c=_@r);q2)FUaG_dcDS) z#NEX?%hMAsUcBI|r%(CiU;Q;T;IzazaB*?YIF58p!#nT1!)D#H-ENt$8Yq^O#2=mV>%aD0zVn^$kW%K^v*$c~{7}bt5|wgta>CWs6+isp z4{6($rjwa;RS{NCEJ0WjH@7!h1RnC?PydcruP(T_xR8f;9I@6ZI0*XtCXT^kKG(>hGFfTFoXKOH0>05LW`6)6mSe^eLW4J+loaY#j!Nb1 z)e*7qO^h1<>2(5PR^+T8g<6hNGeTAE6x8k9?mfRS#9T<@K*~vrJEnW=Y)}h7Zrq2&r$mpn3zPJ9j6Dtm{NLb~<1yfN}alOYRxu(`I>6_Fm4fO`H#o~k4@suIl zD-7#Bom7H#1E+ci@!J1Vs+X3Xu65B7YBmz6ZH*p6xk&oL_704b+{GAanhsM(rc{(k zA8T}MqP|ehId!u}*I*)*BnGu2#$W1EZ zF76t~xJ|4#8iU9Rzn#9v<>fVBe({w5 z<6r+CMh!Zfrjw#3sl7##)>9B^52hAQMWNb^DNzy6I&R-Tzm=~v{knEz^84(^a7C#B z)RX|xD;9mAMChQrC!3MjO9RGHOx7fgOx8xrdrunzY3!wd&JdG$Up7s{SYS5}tQHHb z^^>S$;y_RPt0QY8v*(}gUq&8HF&-`os~ZvFiH(PLUa*BsUB(fd{{-=NOKl6kC_*d*UTS92Cp<&j| zm~{(<-{s(P-VlNzH9UXCUdb*F!(M|H|>I&~Y zZ#;U0F^1h%gK?GHWQ<|CToRlo=fsO=&scBnIDPPt5CW@iJ{^qCN(9Pgv%$<-X0sXN zu;%vm7GoSM^&_i_j-rHJuU&P0%@zycleI1Vu4lDc@f*MK8@&16dw``MdfkKr7*Q*o zJve3l>=_^b>=Sw4BwkpD$EON4>%m5%??uA@s}zCvh3}Q8XS7&IRz_J9qO3?qRxyFa>_<>KJ~O2djT8f8 zl2O0#MhZAj!q97Wp-Ba6W!@$oW7eQn85fNu60_X%6vg%+rG5O95K`shc3nsCE!J6r zZ-`kGqV<5cK-P`27zqO|R_!X-dtwzVyJ2KZNk&M{u&C4l<#r9jh_!_=>N8onR%yg} zF9=%E5ts2I;_-5Q#<2%pH#@}ac^(xJ5R!NGV%k5$6LHrDiYsIlaKu{tWJ5HWp^v0o z=wl)=P+Y*ffHw~7Wh5?Kzx^0|x~@g*Y+H?Iq4ENAE|U*g$?={Lr&JZc@E{fctjaMx zDybvun%$T+6y91HF^*%B{7fV2GplH^TuVV(lNLjb_SZnCVD3MXV z!M9Avn@tkol14GzPQ|brM#$Hy@lsfSDF>6B82-d zxxbZbsGQ`CayQGg_wDy$?)~(Nn3`!Xw{>z*jG$3S*mTlHHzjmr+S7R_kvPg7bS{t> z#6h6Q*f{;%c`->{qx11at630xd*8D|NrHzGt941c0*l#ff zx^5vcIN8#MmV=W+Lf3M5c*yGD0N=LU-QBXexur3VU@T2=xVD)BI=fjzH#;K^Bc!a6 zF5+T7fAl~Xn*Z@(*r zm33iyc#V;wq$(y|({Om`iC5Ao)>sh93Y3Q@gursSj|~M`TWz*w2&USytrmQ zUrxM$ipE%5rtcY50jGUGMHOxpsuJHCF-o<%mR&LAN$h0xvz6&R(D%q*RZ;5C<6t_# zD^JL3cb$!ln<>iqFx7WSyS6$SQ4CyoEPMNh${kBd_>7GYWUmL2!a~+~Y()c#9EK$q zf(saG%Kgv3jFFL}UbMYyw{aL_@y-KQKdX*K2th0-Y|?A3sj0z*_eV2n+3)iwQl8lO$j5QivGhiLeW;48Tk|k(m1Sp64{yN1X(KmHe zWA2Tz>T8b(mdTQ#{`!=qT2*A}UhbZbW^>Ns5oHhqPJIrlx>i=dtgqXfHF-XxJ2>LK zuYZHLp1jSg=U-@%A@9}9W{mxY#&=j7@y4>~W*Sy3W2-Sm21VI?N`$uIc6}$*kPryY zLf^CA+_Bm2SS}A(E)KZbT!6_e79G!?eMP_CaC>__9rTYMK4cdY^TmwaZYN0?+2ACl zSd^#IRZ@`rKRHXp98|C9y{jvJZez)UTxwHxzd^6W{(SH6Rz#P34euV!+86lMXt(IZ zt0GRhNF9D{HxTY>3#~&%1-`}LX9XQ=t)^f?#44_p{5j_3RJ|clzr1WsbEXZ zlQq-x0nn#WCIdz|iS_%ZRM-w%Oeolf(%W|!SN9f9zGyBuwF}sqSuGfI(ewp>$QY$R}{=yzWDNUaxTPCy8OGlJJxqwW``%!dv3Q| z8BbP1s1ZoL>t@X7bNXSBF>uXftD}gVxw*L_y!$o)KmO5=xV*e#v)(ZbkuevtD*g(} zmvNR-1ihU6OmsA5ts|$As2)GoI*kdjvVj!Y6olg^2UX4yaw3jWjOH9C^=eYz6p5=5 z=-3)bdY3U|h3ZAUBcO}^e3L0SQYsTSLAVEk^wo_+$gf`KGg2JNh9b_-CYz~nwm4N{ zRd#}IJTYUPmoZ4Lq;R#6P&s-C0kRN@qkir#bTS4lg+!!`f_{wZi&LMUY$e07Pg*D! zQOvcQTdZhW2~;1VY~~e-t4NK>$`P_M#*Hctx-TEEO2g@JLXckJ zpz7z;QLU(AEjc@!1>?n3**d@*eDV|ni`9~oe9G7lG~JxdW+P}KD1llcWMYn(Y-qhm z`kO|YQtv&*OW8d}u}HC@!KOlvqvRcG!{WWiBq{DBLBZ365M5q*pnDU1t>xq6-U^;%lm$m8`= zDYGwXQyRf}DcptZD$Pr^%qb9K4T)DpqJ4ecC139ND-?Ws3_krbHfE;03 zI!T9!Vw2N^fJvEPp!1HI6JbD&K9Z?^Rii5CVck^dIH&e3I!>HKQ#s>}>`ghzE}fGU zrTq}GZD7bfpMLq2zxwG147;A)?S}0b2_%jVPk8Iy_Xq&i^U+5ilS*c}IH2!)UcGvS zZ^E3`c}fW2rF#<(7OC{M+pQ{ZGz=Caxmi{?At_2$)_Sv(PTPuW^YzUQJ_P;y;2k@a zA2|R3AOJ~3K~!{$Im^W%-E58su@c+6Tee&Ia#$~ADGVk2p1;Bv!^z1BaUAg>Ok=Z3daa)| z$AJ>#BpRs5Rz@V|>b%6o#RaQ_g)F3;uqIDopl#cdM){d{cXyoWVk|k+wR7$E>!{6e zeSJ-i0&CX-%qUzeuI6dl0G~elk{BaD_`wgjxVWI}I{N+=r=;P1t`*ZpQ0M$uu{ub3 z@+qIVDWyo)YI2#R{`KIJruTK#lpOe|r;2RQqe;^Mr;^+y<8O~O3;HSwI%7r7E!~Vp zP>fkEt&A2@id+@x*HD{>3XV^8w-Tgd*3HajOcqOul2zH7AOtVtsTgUTmn^QN^iS_` zh_#0Zg9;Q&Ka6;n32n>G-7T&O1TTiEW0Z~A8jEXM=8GkLj(F|lgLM)&kqtH{+Ti7Y zRVxkW0#367CBqFmEgtMN(%P$gGls@VxNRF6Iv*e>QWnui<7z?VL_E^WX`7ku9g1#& z{5M4$uzfS}DXg`47vzvkMY9qO%YzjM2M3IKWV_w4z1xtoAbV}oV95+I;+&I1Fcem+ zL#!!`X{2cIxb;%V)XcpM1mDnj8UH$CDTztVmJu5OlLk_@1pD(r?6tUZ#xRb^L8S*> z=z?tIF%e?{ypArC`e_9^ZE)pK)Dd3Fllm;iftdDc>=;L8O~-C0&feBqVk$J9D4$0~ zfs3NF(-_(Xl8)Mh5Gh~M8C9W5f69I+h;nSqbfC-k6*77qNZBIm+QK~taEWI!x(;Q$ zQzj?xqT|Ap61nu!WSC~+{2JYJOXYXvjIrw5X7+0tz2`OmuYSsEMNk2nIw|l?kl^K6 zOTXRm*%zNPo6mUfYwz>cTW^v28#-&*?RMPdNHWm0(v+n%N>=CCOY_mS^t%l&U%X)0 z^>kgwyqjSPLJw(_B9JrIdyY@eSk4bQIekDI0v8wO+}&O>q%~LP7i`wI%)1$3-m%`^ zF_z5oU`0%sJ|%{nXmp>M_;^{G9kEKVph&V+kc1**duxpFj$&0g>dIEmV9qdo&Hp*IKv)YoW_+!VtpEKX`8CT&5$x(kRsL@K}^L(VZ+#`CJ-j>qH=x3+we3YaAba^f8al9`Wg?pYibM zkS{;~iZ|c+nmknF$i>A4If<8+w@yq_8#l*w!ncYQRzuWcIaZr}LrT5KIIR&=!jeU4 z5-eBiwRjgrk*t>@(J{lg(^#99`E12vd4O+P;bIio#QWU_?=3DgkR4IgF)1aix9r9p zzHtPNLNOG&5GW~=#!+PT)xq`tqDMN-S{z2@vTSxcN=by^$awDV?xsi>@5Phq(W6JK zZ*J)Ok=@N5$A=3UWv*7QZ=#Bh+@J0AeNP+)ygoF0>xD9@1IKaX_~?X_lQV_s)heO3 zlKS)K^Eo$HJJ#zp%Y$|r)70+=3UU`XI5^<+>{vKiQmXLaiE%oRE!hk4k+{x#E@AQ1maCB8r`as+6XQhrC|_iXvV@{1xA- zVluXf%JJsrhIu!m@zN<)VlqV2&5=~`TX z*eA+xi}yXP6*6$;C*~rYi4vpQ4u}C_(=^01V#+9LDIK}r-EO$s>?kG@8c_*W1yVx7 zw2J{B0z-@p!=M~S10@lhG=eeTVb+_8hY>S`R^;=uR*FXXzW4ZRDBx>7kv;Nwzk#p? zjo2|5<0(!Kq*BtPN;A&lv;nJ;O2$=Wai8%QLQqaxwTBtFzP;k+`dapzek9mtZwXKm zLzE8R+S=XMGRaJ1zr8hv6+bG38zqgD-s@ro307`SX1_;)pdb@59u+VkT-s>$;4`Aa zG}#=CMo&4fDNsp(25k_d;4NkKUy*-kEECh*5JJ*SvfD9_tW~V zM!c1mMiwG{0<0G#_T~8t-Z(wu*M9xG{N{JQMSt^xfA?>Hk3avx4+w6?>hO^DZp+pA zE4*_u;vSQXmPhotb=+KC^J;j>*~t;ZZUZ@DgP)MjTne-0itH`hJW{eFIm3GFd3kxk zcC)5!JH}iH*3)!L#-VUqmwXMii<+oUkUenR_{!Wv{TS z>(*$ICB%xN&n^=Ip%!9Hyj-h$RR$wt#G*D4I+Mk#t%|jRe5EYFK`EJ(M`o4@*9C?hYw{1TV4I4JnQ;p%`=3hVWngR@hX-3*^Glu?uglj=eb zRpaF1TWh7m%n9ox?6(rchh(_ATQd(Wo3tg38RrcT9-QKwZbFR?j*m&)0z71b8_(y~Ei&jU&7&(yCm2(aqUzdsUf{{it?CFV9C8wv zy>5uR-Hy3&(|8DTpCl@U+|ltNSdk51UthC2sNAVEMRY6{3+`^NxV*f?yLK9@PLE8H zIeN~C_uqeC#sRsg(k!xCEx5hCA;!qb(J47+e)i#q7-RU>uYFfL*Qt7eQn&wb{5LvWx0A7BPpEalFI(GI?i-vaU=KD&kr%*S1PA9Y#mQD!#~xoX4p^#FS|ST=xj!;w9nd z#X5p+)cY*qT!U{sE_hZHDL8RljThYB-qN-$)_YQpIPYKcUlRmY#TB3kg-Y=69Z4n| zB^t|NsGXJkIqhFdscQn+Yf9RW$n%@rX#uIFG^Nb)s_r zUtnJt>L@X3G0>=(DaS;ziDDAgc_|>O_<~vp%cl`BNkdWZDXZMYM~@!!tG{^0i_f0% zlfV8ee)j1noZnoL;y~L5R?7u_-*bC=qhs?{iwMhu(-UUSG4?w_JY(eL%NH2$n9mo? zmkThC_1%_!mpDJaphWS_y1u^T>gt+V(`YcXXNZY@9N7#5-SU9N>Hu#81}93`VyQk~ zxv1KcTJPk^H_@s;Ukww_>NjOj-?JkAYqm(?RK4D+BJ=N~LG`JTIww#6n(BNDYLj8e zMjBqUp(i?fDrqEaoFj-)}q@;vzpQFd`^bDgr|srEdFu_{ zczi}miQBu4WaecFmz}u|f^erwDUvxAJZX^V7}AKza)WC4V~y(AZnuoX$TlLg>nNQ) zsZ3I1ae|iWxcVz)qjGH$P1E9>@RBaiFE~AYz|rb}rfImoxP%O|X2$i!IqUWR&(@nX zNtRuAe!n}s$=xG7A~GX0E2|1D00aueM3G>VXp_ihv(+ZkS5Ql)g?b^GwVAZhqCbLU zGD)98#+^3W$T%4(2_TzjKqLTy7>mfNtQ;d_^5G44(Bho?JhIhphALQAWVri#_uYHW z|NMuo6dGC76)B6_pp3ypO_*3L7Ffg?zTXerKR*}K$r~>;HQQfhSxQkrfMd7^n zv~A0?XV2*O6QBR$7jW)iYKT50uU@_4{NBBp4Ct+g6zTVShJBBBj%gS$#&G%Oir24R z$=_9Z{`@kAo0}VQj#!lr%M3vtpcJLRaIP$9%f-b7x3^omcBK!x5i~SP7b{tNGF6tv z?}$dx6l<{#K|wN#Y)ZExhZ2$uV2ZLZ5lta)%YRQKRpm(+Wv!|JZA6OSQuJssREkQN z$BSh{Dyo~TTJAJ&{z?3k3XYahr)%}%viab(HAC#O4vSr5%s~)f{eDKt$CY)&5J^)Y z8H>+iMudR8plS(j+71sju?vN+clhkZr9Y=$%@s@kzy-{UG9 z_Pf{Y$AQ2xKlsTDzW;B(&3AwBePRx@ZH+UQahy167c8m2aUM?^MjvGzg*zOraV!f8|Xm1R=UC+J`JbL#r zAt*NrtLS>tdnU!M(Un+6wFSkI0?X(lulw9geUQCaaDRJezf?pKW(8&$vzGgA%KI3k zS&r!VIL(OV%(vJ3X7#yi+L{zI-orqmu04dzR*Pt%2t>vlX)W|YMu^E6&4V?nD758U z-dVe4O_phZlHrXe&?F=KuBmXo<^K6QOh{9NgXgbb@qhmDA5nSBa=GL`{pbIT#wULK zW)vIzrc@S5;s;gI+W};@%6Dz%sF$)Oj8iZ zOg9Fv72Y^*gd94KG)>3Z`5Det)OAhWHeBCqFbFF@#H<9!Kp!JhKTvs3U3*OBv3aEL zdvb{6B>p3lx~0b$36lgYd+%kWh-G`bQF5IeL_+wCY7i-*wo?qWi;frrZ7YGvXJ=$H-Ckc`)Azl2xcCv1Md5R_I_CP~g7y7-`ZT1&6M}@$hQ7x)&5SJMl$fTG zx^5AqaALE)<|jY?8Pk~P8c*Mk7~>Ftz|9^zcNckaJtrD14h#{s9mpB9h!g3vWLqX9 zaCamNPosR!90kSDF->_dDRbWLwxYsHDNCW@bTe?p!lRrkda!7+h9F8=9p-hEo3c?W z1nK_`vTtN`6VX>9D@vJ_Cn|YrWnAM8^e}iDD`nDWGE%|FF8X9Ia33 zmMd;8Ll~t=G*;Y{g_uW75R6=p5Q1KdjzU5w%eV@av1bdDKBvhbh$wkRsx9)!qHiAG*6T5NZ*^6iV+wc8=@BjE`bd9C$YHA}qAnzUHpy!wKcQ|Ad zDOtM8V{OIF<`(N6?Q+3UC5rBG9BI3yjOtTnv)Kp;I0a%zEV_m8|D43yBxl%fHtdIi zY8W{=y@$h4JI`+H=c@M5I%ZA85VF1Sz#}o1V%Sjvk+l^-m#Y%NrO~lgGKF&va-?XZ zD(|EBLy=cw^K83g<{K-YA!eznLrQ|0l}UgKg1q-wFKafZfFaQ}m5jM<;R_ywFhb7> zf*R^RZb6KJF@nHp)u;Z^+!f2-eI+9bM;A4bqir~U^pMNjYx;4-RhCy5ule-ZCtO{; z=AB26`0?NW9lM)1eEiFgI6Jw=JCELF*AKk8xWzUry45K|gyCj`kN?hbWYmx`Wg}tE z-9iwVeq_pJ=B*q95-E>F3w6_AtSBl%2n=E3>C>l>q8RhJhAAXQjc%CsJ$)|(Y~v&| z%X{G;v{jAGMP(Icn}Kow#u)Kc!*bPea$>K?nu9L7rH;9zOTN6k zc>5rXk*|OK>wNJ`UlJ8x2;yiw6B`7L+-|SAx_To8qA{dtA|&;B(qhqC!_%iv`Q($Q zI`*(!U)?fI5$n~Gz<@gBP^7}fWF=4Q_%?%0!Wm1*d|gH#hMage*z#Ml0o}yVu2_crQUvA< z#z`=58HWhZD$4lMSiF&_l$@ksp8A1)+>*R!aePEw*WBD}=$ZxHaz(dXadmx5-w&*g z7BareSq~}$IE}H9(X}rKr4cfIsRoM?UrI6-aK$Gq=NU1U{LXTL%UBQ@OHjlfG8zn8 zm0KZ#X2DvkK;g`1Wl-#T1crHSyKujlOctSsqT)b^z(p{Zx4uhR&Gts?ts>$ zs1EEs#nC+FNDQ){__|_+B(auIypjl&Hyr+!!bB=-vs&7_SPL?2raww9;l1Bmrv>{Pmt{^4S$otA4KC}MY z7>QFNi)g}IM+|VZIAYV@aPi_f*S_QY!DG(fd6#Z=%rIQDs6}j1wGMARl}=ye`zE|| zxK31QAd{A}vom(%$fy(;Yb~p8f!BMHkS5w0k4c#r8nQsX(p($QkOIqP2M)$5(6r*2 zB{oEp-kT&vvZ^Od*@`qEJR%BY>nczWsv;l|TT*DG#5HYn4i;GfohDB z#_#O5SrJ?PJINU3-pU$@Mxt^u(u57uh_x_AiR+6olEOp|h?PnLQ<_8!-dK(7I_&*| zjw<25JcH)I$$Fb)FW)m+NZv4|05(%q4r^fY?O>~;c?n+(=f#F+7QBPddm4&`>crD|(Q1b2|9K$;R^97s_% zK{04_Gbh1U4XCv8$&)9i}j9S-*eP0sJoUFEN@=EZY#>Bkw)y(^D>9 zzmYL%A(f}hX0xO32Z^MaGHu)O#V>scDvx&+VH(KEP}MaB>s_ta*iSv%eb0TB-X;un z)5;<(94s9#Q!rAf%k)|vVD7L(3w#E-^kV-ivsu}F7sttBA*Dy%q)H_HXxkvbJS#~2dM zR@}RPj`cOeIMPoe%jJ@!q1gu$J)?Xw8DCl?MZtSF^ZHUyg0+!RWGW8zMb=HNs4M4dtg`G$H^i)boyu9V6$RcDgCN?zqK^~1n_K$6r)wLImn%jm2Z>kZ zV9r^>z)iwY$=EW9SC1jjq6Bfg&kWDf9JZ7Z}>sWks@&#DI6}D2n6~#aejVIb?s=HiZD5b zAyC&1yWLheYf3gR$pR@vVv^!&R{0uPN5V%|j+-95)|3%Z#^iLU!|uF{QEx5d^dOdT zuy<1Q&#}K*NcGNHja!qo6pC`SG{MG8PM@NJqQ%L~l0izt67=^=0bkcrFt=Sz<%C{P z9L%L6EMkp#C+F0%+1#>Pt?;gg{5l=$+JE? z<@)NDuBk;tHuhR1N#Q^9+3vhTPL!-d5K4$l2PV>;?Aw3etNbRLEy+Y_wllLJDVIqA z|Nr$M*ElN@@06)-Ll;*^|jikMLa z7T5#d_O0*n@B47Nexd?7#)%QJ^M)`^RNl_x`nqnYjRT)p)*VO71>+#8EZNo6-HMP5 z##Yo;02FLy3L`!S!46E8ZXjpzZVE{-l1jhD{&vgF%?<05`Z_~S9)Fzrxw>}FG4>O_YM7FsI8E15IVHZvFkft|lPa4_P_M{t<%Y<=$4PivRqc6i z{VVjtjzP(?jpo2vYpIOIWupXYfksQ5$#%DcoN2oy5pkuyyt&5KwRnM931U4tJLUG~ z4NpJ)m~K(i9UbFcO;OcI!2yQMo7XQ{9v2vB z^|mGU-O_oMRj&`f;c0+~d6?rie3E{Hc;SOt*DKATh;2Q`JmSM#NK?h$$a( zGp$%EWHs~4#xmv1L=aNEBAJyjg#8{HB3--SXwhLSwLP$rX^dbz-q(Z>ao!8uue5|% ze9m$f<*}=%oMDU;##9(AeVl}3tH^l@6SdklOvA|3ZCvciXw@tq(oIm`ErTD*)ykTK7G&qp79#O0fp z+&?|Rn8>5YAFx;~31QL^=Ok-)3=HE)HC4@>X_BhTG9ioJ#g@PZPVs(x!flHVz(t+57UJvBl%_~3&Nuogaf_9??|kfNQ)l%TSLY6(}(i=Bre z6lK4}itUaq4OAA6ZOVbl8TCE17~^rZr)pc>Y~{I^#zQz=HfuAckxwC^If|JnO{`Cj zNHKEx>Lu4V8_wT(%;!J+HD14ZL0uVYpRqYowQ>ebqwXJ3c)0DVkz73zt#ceZ$K{(h zjJpkWU2}XaHUPsAghLo*UtXWAu$URWrBXn_iE(yH6+=IAa(s+4!r#ia6QP9_pS42% zk3r}?5kbbS(P@kBuZf5;(lq9jC7s1N34|{r@F>)Qq6F76oJ`jHWT;cX5Fj5^@Hq>T zSbPE{@6#w>EK}Kvlmj7*!hs7SA|V>#+gkBniy>$*ycU6#n@Q_7${8cB_$tD&GOjGB zoOON%R*FZK&?dwxBc-6zk_uymTRP>axsnz)2?{)pVuxZXDI?ou$9~+?wH4WecMVe* zsj7ym5w3GxHH;x($av@EAhg<14^vM{;Hy>_ek6s+`ROUY`;Y%I|JA?zZ}{S`e~mx> zi$CX2{`^lF`yF+=V6)pZ^b>VeaeRD?uh((_sz(SZGfaUOuP$iYhO_mFe0X($os}U; zZm_q-GT(7G5I89Go034J)*9N%v8r{f(T~J3Zd3mxXFS%5s%E)bvDa|rzVE>}R!3`A zs}=n)u)W!EdV0#kd-s`Qq^bobyu7^R`Sa&|c6CHy9572h6VuqwD#BWmzRSyM;Zi#A zq}|JIzoA_$@UGSop;em&LBp=EZfWi}N;H?er0wR0lnsm3(TsY0_;N6e8%!-3Hv*;XQxc22tPGUCYEfqV49N?A?cGQO@kJv+m- zHP4fwHfQb}31)x^R3$0|J&gGhrllq!ZOV~V1VQv$8{3xyd~ zG1jZKSrUhG!7%6VnzM`r%O+sdiBCp>LW&pl$|208$n#~hlMd7Z#>)YZHXBvd%%t7x z+grM(n&Eu7+qKH!DI(9(lo(+(in0`O7ANR8vZb1`)8JU_i%)DHS zx@#r5fJ`d5FH?IN|Gx5Hd-v zAtr64q>xnvO_fSH8)6JhK}gEI!}J<|{v#{m;XF_}Ujjy>C2uT~uIb7n>ztQv=wC0()_p&;jn=f-9+&$QMObHJE`vC?hckoH-cjUftgCxeq?Wd+&dizv;ec$lLlZHPOeo71qgCg#8o*b*^g`qvq$zs;}iuF1LD#Um@I|2Dc3q5;>SSkhSZ{_ z@r5c-7FC{AzP1$V`hIs`f;7vIOKg-(5<&=AScH$=1G7nnT2B5h+H$ za!tz5*?B$QMOl$`oYdt$CY*OtsHT9)k;)2B(&^q8QWi^;Fyb4}ZV*4dkOSUTSd-XX zU5N63yQ6IvV8F+mSkzv~#c{$TUG=!1xVgGw-0pej(F6YA_x}n1?Z5ulGP1FW-~W$) zkH7reZ!=x&+3c@*{rZX=p>{R9+YOL#b%o^+3LQe=cC+R7`clk7jiG8fK`Ux80!@=t z*M;OQ0k?w4Ow+_}x5GKda<#zM4(AM2TZ!+IXgYDus_j78>HH!7 zna_NHQ&ZA1B6#uQ1?%&BU<|(UES4?CiZupV2#w3Gp?!4Dr%#`8yWesCg@*^cSchak z_|Xp-(nL*^Xrv^r>t2y7>7cSIJ4L>3QI!?}l12>~E6S%~#QTb_v1)@58FpK|(L+EV z_M}D1%=fWYP~u#81Ztd@ia(B!bB%fnWn`>Yyi50k1d>mj4@U3EG0a_NoJQ(p!w2twhR-~HkB>h3CI9f`W5y`ToW{sVK8B35 zdY`nDEIfv)ZWT=uPMIr*YEIZPJ}1kDWejNSQOt>nM0dPkdAg?AUXotPfl zi@BXE``BS$ws-14QOM>y`ww$EgA`Fm`A z1oHBF!_<0emx;qb7$?SYB1OxxTk-CL$9(N8U*=!@7yl)4mBHA=z`*tPlFOS*9FB49 z*=`51w=XJ{%1Vcp15MqrShfuNo?+^BqiVUnzQ$GJU>!mrj?#5{CD~Ti5#z*^A~}ny zsA(#8`z^z;=d+*xKp|J@Dl6r{+|8y7of_dASJAmz+<=&34w5ON6< z6_Ry`YZz#s* zS^1YrAq3dvN)F!~vC$mjav}At4FuRv+LP$y1=|7J}TULeY|yAZ+IY%4p2c z%+}M;XsLmWnoa74lmZ6Blp|r72&2I}M~VWQx3!m1QVKYC$j&O=Ci8nRcXQ$$Cx7m} z$4=6Pt(D&-p?HtB;AoS!ZhMcR;s~)Y@D zycB27IXcra?6-svXqt|s95ic{jE_VlCFOaQ=c#n{A|Q0y1j-3nzE4smrq#7(ElMj9 z6h?^B+V@zK}XpsW`d0vD(@NEf1fXW@k{*V@4in8 zk?WgV>dLd*-7<}VUB4IAd|fH>+KD399XSZ!d=$&Exbj~fR4Z@`x`o@K5$iwlGGO_oDgI6>=TZk0Qv#~Sj=1d zNy+u&&YvL@#Mx6T%x1e1M^@C;MV+0s3oQ7(SoD}O#ha%;^V#4GQBm+Y+Y`jX=58bv zDmqF9LN;$T1oP)E`=VZp@@I!VQ+{8Jk^Ocn-kj4Uw1R089$HFFn~19{VH&vQn#MO= zU%bXvp395ZRE?)yu5h+tbA5x)rs4VP3tBRbvs6IiYVMyu;;Uc#bw2#?L%#7_zrp=? z-kq!4NaC-)^DVA7*X)NK_f8*h{;1=4n3(oq9*?zcE7k~IO$tIHJ3c)p#F2g{3c@}m zHLJ^lat#sZD!dVEhH==lT;5kV_E9=l3%)Xnn0RtFv$cNZ-Ml#DW{J1VI0lAcVv2#T z>u8&bZnY#M#;1!_$H~bFezC+k!`1a0;?%R*+~8g0v+uso{nN8M66!cB_MA5~-qCM& z;=1e%DF(LNEp4}&M;?%vrk)T-?j4_jv0U9=&$D7+Rufw1n8s0M@Byo`)-o0ZQO`gm z=mWewKGJJ%z*=r@E@z(~=bZlC#CChj>i8IdNzpAUj8itdTfDKfixo}RGK>>xny{6F zGyx+&{`(*B(Jy|%(eaw9?YOwS0q3zMsvnV{9!3v$XAH(Uq7_wIj56>MB}^^JIRnrOw$basw=y8K=VHpY06eyl~M`w)OZ>hGeIKEME9Hp3QlUW=#0mj zB%+C70Mt7sYZ!>NRF#;oiYihGz;ahG1*I~~<1@Ls`uTHd5Y;P86XuPQxltwC7$&Td zakDdyal6MkL!9KmiZSAgCmG5aQZJmG-8?Rx{c3arX_|%%{PM{Yo>{}~?G`}u9Mi!Y z%2|eC0wgef93@>o=EQ!#rEWX&7_g0S!c5BeMhcmbg*zE_TxpFIcar%h79!hWM?VEB zZFF*wjXuXLnP6UILV{e1g~ELQgKVHN3xCr(uLz7dMSChO)?v)!jK0M*2}h(BXK0Iz zh>aqfIf@@!NSVP&_%x=*nmp@S5|N5Z4#5!SLPR!g^_FuMkEQPiX*#UhSJaJoVx>qj zMvQiq9~Y(|q1VRXDo0~Fk?uzs&l*j$@XmlDd{)OA-boO5%7%UzR9v755{9|Jaf-a4 zC{xzGS3s;ux1z!xe*2ZO+#k~6@H#{=mlF$JbLzQ;{H#F`q$y2e&r*3D>MO?EMxr@K zauoF~DCf!?*0IrhVKah2goyLPqf91B>PLt$)5MB6Mh1i_CmDN^<^tF$d43#6>b9X> ziV*A5Pe0}1`8i+t+SmEcU;RJ){3jQ@di8>3SFyRhVHyL+s}+~8Ua&qp#d^nb+39sm z?518U7i>ici79BqpEJAAlN1rEt6C6PFC5d56XVchy`fmUNZujr`aLW4)FKNP7w!}` zMh3plSR#pBtQ2%F4y9NzV4^&?GTLR{vq@2TTZTh zqI72dd8ZLOIjg`<$Gt;NOd)^~u`*Vgycnqz0?o+SxQHOK8b`;tfJNNJNwXb}I)Ab3ve$N<$Dsb=KJzBM-`skyN z`0n?=$4`Ip5uf?&=NN*-@%cyZevX$e> zSb(>rFkouS7<#5KGVFJBZA)9p2HAB>Sed!&TpX=rKTLr|+mTY@;^LCZd5-Vhr=La^ zO-qudl^8|NEnSyv)J=Pzwr$1ZWE_-4E02s(PE1sE%6m_af~w3Ynmr&Ox7!Wtv$gQP zjG^gTNM#IEadPh-58r>EzVGRG8+Q9!atid@9gD?+)p|{g2jZM{a$tJzIXXJx`Sa(p zKn58ZHg)$_K?D+|v)}It%S6@IoSdAp-EOIx2J!gPg_{!28Q$DptH)TwYPDjqIzlFH zQAeK=w~|t1wN%xld_tZ)dBSeD5n{GA!V8#sG#XV$RiXot$0)Ji59~L$oIk8std3~9 zg?!IAf|n=c+kg2jn!07RJfR;0H#Zxa)dFWLl2=D+McrH(shUE7j$os5J_>SNOgV+P z?X36*Wh1Wdxy(!#fb6~OrEpAKpe@ldHax&aiPV%^TH*i_sb5 zMw4}2vbZ?F_|yf_qd2k)4?{%;Iwmfb5~aIKI*N2wc!p9U zNwGSGVIHYv>Z{cct*(G7BBok z=Y=2~BGw+z;3bJ~d9Ev`yIt*DjNwSbPjbad%vL`$+ejb|Qbmfs@?YZ;lD86^Q- zQ(2zb7$Vtvtdl0cw}y7n(JmIGao}dN;q>H;FMjE({OqTH&t@x#{bxS&8NU354>>zs zv)|tG=l}Pgb9=jGyS=4t7j#VxDa?h?Fa;(Zjae(}w5lZBJdD#@6qIBQnMjCxoPqsj zOU{O>S(2?~8hdg+25ZCsTJ+g6BsZELXoX~c_xgfZFhm`hrox%biu@}ORBrdoVJ*$+ zTPV3XG!|vlOq><8Wu3xds*v@+%YU<{l&e)BpHCaCNie=6c8bpZ@}<_s;OY^*g`M(J}s%VFJGp(q2Cd#59SQ(3se5Ze-+A zX$*oDsD5|O9UsUtD;L~3uSzGc za&;llMWkx)hml=BQg?y%dd7o|BA171VAvvt~0>2s3O>_etO9@@<%l06V&QwmbJB!7rcFh=}{ayqD1H8tL-ax4}k zh=?_nx&~W7B6upH<1#3ESjx9-G@@mOp#`=s@crFaf$qyDH~U1D!_PpwSYTZxV<{yp zyIe*!qNEb;LHQ6ClSE*zJB*M-wNSCzkVKR5O)KhNwJ0c?{z0iLXif|n!bB!Bg#<1t zvMMCvY1BhJC&Hky9G2OlAtfQAS3uph78$vz9@xS94GY%QuU@6 z#1JRVLRD3yXoXOoGIl7N^dy^jg02zLGS<&-`w8LjISi}Sl2}(5F9@$gd3aSLS%V>B zD=~buUX;?-d)lsMwOY|>B81$}gNmsjl*{EpQR!-KJj0ZzG#_=E28L-b&xwxQif0wc zY96JV?Et`%ouDt-N@p+6DdJrig$GwDGGnxmmvN2SBxKZ%;?V8ieHkO&zb$Lj9E@~P z?v&L-Z$if1HY>U@AEYw2t7@^y7^acr#FVpk2cA@(5t2-?lOSg`8!ls3cy$@%#?AOG@~TwGr9*>~UP*S`E! z{;xm(6F&as&w2db`~3I+-M`|W|3|;8-#PKG{_B6qpML8vnWl`lkv<33M;&7bBqvrC zF;4XTfU6zru2I#v#W=(I_=p$;g$X&~y(8sDe5zt(90F6wR9;-`>slI#X)1`4qI~&I zVIe$(gH=I_bG1<#lk#(AWM+yQ)@DK$gK?v#-35k920;l+!Cyvy^BO5*%2Ifh-z}tj z^qO0YszLpHKL80~M??tI9l_Xat6*fDUCgL6!p$@q^E8WN@}amC=XzOlcHTp!QMQOZ z!|is%X1AqVF4*k{tgA4UCnNSIuCm~jI4FcPgb3Jh|Lh@0-81&tP_-*;v&6r?+^{}- zhp&D3b$;)gzsZ+B{}AhCW8UsJm@2cmxny;6OxBrxLdIBaRg-&&Q(&A%hCxCrK}^lW zcSSf@Rwdj89_>frNJN#BidsN6%NQW&NUgXQi}9g!7}i>vrlKf(j4`A^Hu`4v?=F^&?A)YdJ#-EQVRc`F<`r@mcDH~M-0t&aXvg1Ro|jIs#^ z&E;#XBPQlNvjgX%K*|Y+W6m%v{E8?KlaRo*=;P2`qZ|-)JXC7ph-s9Fr!nBG;z+N>fU#ID@U1lxN{^+g9XT0x(@y=M5;2WbwPVpO z*$qA8I1yu}azaYRdO5s|jJJwp9V2^?t1F3PQF5?x!sD@(#6}6ibcc(Qvqqvxk(E+W zRux{Lst~OTL^OQ>edbDvK^d1%K~$XuA+~z0%NRTi!@Pgylo_KcbG5-OT%orhGTqn8 zXP*hP1d$F(5lhCKiO7$Y_YtOXY>+3BI4@BDt4LzoL17m{4R_2~&upFZX4 z=9>7<`#k>42YmSDuk+-|N37SU{J}r{JyCcMTWD&&_^ZFlpMCq=08AmWSS%QWhS}$g zuPfHgLdN_ih&x!8&uKCoAFsH+z7>pxH@{n+qx_ zB9llF_2hZqd27!x8ZV}W)m`;-c3OnZBRu^%BT(iXn(Z{HLC1==OcPwxqTMK6B2gfL z0#1}SoQ=P|a7)Eu$SQYP??*VGu*GMyc3#e{GzsF3P(ZSZ7jjWV>OC$zK}^BI_5Dd= zU12S8oEQh;qK2Hf-rTYu_k8bfzRPcY<2NO+J`O_5Fd$h#D%{GE?RHPobZqw{o88E0 zuJ9Mvw=BG6S+~4=bH!J`^pLRYdG_f)usm9FcDAN&9R2o|s%>x*$;tV>d$jF>eZLc@ z_aP8MVspJ0n7*=lc#AZ-WC}Lzf*2EhFQoK-zoTkukz0omYt_3&yB6^qN<{5c`+h&m zH@mK3u{t8e0}m+-<7`g4TrTN4DU5Oy4;WvILTQ>N9ifQV7ADb8I=)k>=r{&;gK)ND zR5hY@bRU2Ggm>S2A8YJPChe9BZa3Go%a*3CiE$)lOQj*cAx<>4r)?@KCp?Uz^qM=r z9EF%^z&b-)i(`FVwbFIZMOztDIvziM%qO3IjQ5pPr%rabrfFmYW{r;H& z;w#BTv(93&dXZotMAoY#jdSooz}n2z@A%_C`&0hpPyd2{^pAdr`{$3iy4e9x`C3WI z0=YV8lpiJ!eO=d(<7^R7&}wTfKBH<%K{~Q_)*%GsCM(DQ03ZNKL_t(3kgXx7sDw%x zjph=MLsm|bKxN)J0utaYvg3pD&AK}fvoV^fSTRmw1ZZ#=4^xx^56!7_m5v}X)YeI- zr~(LERqVzIoE$o7F5Kj^<*bT8MKgwRe2cUna#Gc+B!5j)P~xv66dr;VQl~f_TY{of zRV9dsq|rkN2cCsB4p0t-9vtHM9x-0jOLg0@TrRM=6eN}@48q~FV2zXOZz{$R$+^Zj zgY)goDQp)NjrZ({?8iNobyTg#RTfi0j)DEYCp$-G!Z=UZju;XyC*m~XvK6j^vF!RC zdmTH394UsORiz$#N|MStrY~gYaU6O5`VEgBJ!093Xkpy<^O}^d*n)LLV@U!;3bHqi zvR=G!DZIMtTjNP7F2`#lj+qIp}gaHVe{~g41LH>EIJsA%aImWkd)8tJN{D zU%udYwGxY*GTP2Y_dzvAwKC#xhM99GhoqHk&4MIYFYj53eq$8b6h9>IB-+a)MA2%5 zcHBA`lSj1$pS41wfCeI0Ys zj6Ml{Hb&lmauA&qULk=`Rz(N;KF-Yi!W`9a3Z%e}Ng|q3#F`qDp>m%6evh@#4?W&G z+E#d`Rud#l$}?~hqSOz@9K>@4Wz4Z4^|F>zPJ}SMHEuraiRBp-l(`_V22oYJTFj2S zu4BDkW3A=*ctt<#_&4AED|Y=gzw-WLPLGZ_I$q9#gx!8(d%I`%X2{=eAGRvN(iT!>rpQmf-^dNVY2j}KFa0qgdhhd-}_cDg?p3BP%>ZW1a_b_Ev z$7}4~)As|{*VmjsIM=bK=QHoWr$@Yum5h=Jk57&`I$8oU5|oeu348GlaE_DHBf4q< zE^9#~uqIjvKvLKd?wy~_d4NKg(8EHzn3N;O$7}8lJN>fiXO%PCexPnznl>;gk+E5H zQUEwrydj&?9A)Dij~+duYior-0}%P)4}ZvCe)~I|Ka}{0{Wvj95;fwqc(EL!Loo8t zPZ|-CR|X< zy5qvtk_S=|EG7I41EoOhGIA=>GZHdga<#PkKfI9~2HHg%EsXa2J?r&ayGto%K^*yI z)T~`tHW)2@3R_NAg?3}u`9LTM2SqjLP?B*%$Ad7$5tD=vZ=E1=IR@f1K{D(%VkB9t z0xIQqy}7y(yNjqEIU0%Ly=S#pa8F6Po@kuF z?ZyzpNE!!*&5nC#r;xHZV=G^&e79thMrDm^F00o~H{di$ZkaJK^`j!@f@)Vz;$@5$ z(Dv@i7)#Il7}Iudgn6^v-*H_Jc35TCIpd)vQ@%{Rj#z^e7Qu z%!N~$XzETT1u4n*b`{(07Vo8bn<)T_dXWyJF>3_fwJ9G^3@LF`#if=9Gc7_!%`$RC z(HD8n3W*v;fy={|3>vzuBXe1rio9gaC}h6B!Y3-8M`g66Ik+6gT4l_X6}6ISg&?+M zHI{S^qm+ZJZu^IRR$cdVrnuLaVz?k?i=!3k(`USR^^!-A&iLxrzs}!$_uuf7@BcOb z%m4hp@_+pAf5@uyyng+fUw-nGv$Olyy2JT~Fo?zSU3;LMGEG&H)5O))C5zPw+kVe3 zZDvqGk|PXpj2gLRs9ime!bJ_6XxoN<95_(U^?DbyI~U};eDC5prZzBSvh%XTenm{q~lj--_$Ib2#6zKEB7obu79Qn&m0BsyJUR+4MK~5CSe| zHv68BpFL;Tyyh#v`X0ab#a|IWC6n;3m>?%@IX6C8_NJ(Yn zmbUI#oOa9stwy|)P96Zh}mXL)qQG)+8x{*1Pf2%D~3inYPsu-onU z$&Y@>dVR#h$B%U*lEpL;uw-sGmt4GhP0oS!@iBGPATCbx5e_8!?S>)mByBi5n#Gck;TIqM zk}rJWvr=%X$GSdE^4OS6-h>4A8F3`nQxhCBLFc;m764-!PVl3uIupL^ZNBmUR}Iq828kbjQSzR*#{xkXWGR{VgLbV~ANzcVMNx2sI8l0gq5t8IVCZw>O*9l_q zX_O;mj3Z{F&eS?WsKlgJTu2>E5u%KNB_q$`>WZWOjA0n@%Mx%yOez83a}P zfrS3{yA8vz#~3(Tt?*SvRXgFAWP__b)xz`1vrqWVZ+w%GEcebHk&~mc4ie%%t|LO3 zAZzDc2!&aAn3Z*OZA%!!fyjpzT)WftG1gn6mLtZEjMFerS&T7MwIpXG z#Fxz`kJA{tq>XIJmb`nt?izY#gI>R~ADTJD9)!;rV$^FXoXsMFNjb@M10jT4il{&p zq1jNxC^<(lHPz2zj3H>7Z0?9rEk-!NbtC*SDyCi%Uy}FuO1^WLCQ(Z38Bn;3cacwL z4hmxlh!-R?&keVZ#S0e~X(r0#-xv*+w-S=R-RvPEL%tZ-FB8UvSau4$Jmsn8co!q9_PM~$ctN=odQCL zBSdYjo~x>(NPb1~F6x$YXtl1=?oJQK3|`5f#Zk7*xJ{O^SwU6CzUSmv9MS8#W*kRu zuC96XPQ$zJzDwJ-{PM}qSuU4+`ss6i{?otX$&-IzeZ1l~e&aWI@aQ4G`1n(vJpBZx zMrQqP&vLO4DSXZ>+YaL$56&Obb`4LT{E{b6p0H?_oSofcKZvXR`J;!t`|i6;)5P=V z&)ILbqDb8L6asryRebvV8QB^>{P05_Jbc89m#_K7FaCj-7q4l2Mb|8N{LVwhFmUna z3TrBS)ey5NOTP83Z}HQg{fL{*hL|I5+tPF$2}|v2#?6jJ+p!;d{^*Zia(Z&au-o$& zfA%d>v^;$09h~*-`n|d+%knjV^QFT?M^bK9H069y<%z<}V~Mz=Dm)__E-DQ!MT7%l z4D@|}P$s%cf=jJ3+qCj1s>+-TTBWKYwRD*0?pj=x0*;iJ6ecf*qNNM8R!HsQN<0aQ z=+I(F{lzddM4og+=!}=~UW$6KB=J~MUTD_8B}kK1WucL4nX|^4WKEOL${+jx$a=3P z%dRWW@3+ly*Q709g#rp73DAS4TZ+;2C`L1(2!&b?^QH)e^jY*3Bt0vnXN4a0s!{j! zu-WWkvuV&Y0AUFf%4Vg%=D2P2u=YNgn8}C=786-{?>%Rqz1RA$ze&~wy4lWNzev|!c-Nr#hiK5usuCydwC`!AZsCwxSW%wr!3Q+pbUj6QN~JXr6bV_ zhsebsV?PYWCytJmLfRO`;Ke$G5Lna|Rb5lr8O{attV!2E3QFON$j>{s&+*YK`k`gH z*kQ4p)Av15iLcr?_B{UhbD~z0a-8NeU!I_CC5ggs(`~Vw+;L!K7za*8UZD%A`Y8oa+U(j!5$@sF5_Z9*+r*5R3?5 zq7)t;D3zH|8l~)4KEvPyUD?~);r#f77e~*zfA<~_9=^ft+jrR%n%$YWc+Ym0bVHBp zM-)-Ukt))*?WAfgkj%^VdMjgTukb3eT-`f*EP%c%CCq}K_dkR}5^|UO*t5L279|+TZ z&c)wX5v%FEQCI$0`OC*B&IktZS8B*{94T~zF^XVns$~NNX3diQoda2CTBr$y7Jgw_ zmeh44Jx|Iroz)d~y*g)aX9ra%E>-dZt+b*7 zT5noWdU@$2#~4tKXHJh;HDssr$z>PMa%Y~T+Z77W z)2C1Q_~TFc(`O&y{m5^A^-BilX-83w4gChKU~jqmm2u_J^_ZkWvR1|x<2VXIxM?s& za;WcH0GdV$voMMqd{fm_RZWcYux{E7gLgDdMOihdYv_$VIZOOsG0S_MBm#$H1 z$~0d-xN(z{lb3w(!3P|j9P#YMQ&y`>w6)BayWqhFs4IE@hlhuB+Z7*w^a-o;j(_oA z{c8>nZW0L-5;z?w)5doN;|CQf^QdJS{iH`RAbf|IcuFxTOun)SD~6$G@Giw8g~|Ci zMwL9Qgll9lawvv4d0R!&_#pv*Vn`Vf#16z+_*w^eZO)e+l4A;Uj!Mu{g2#9!^8D4t zmWZ7ZDHO@S$BKYJDdx)sK8mw9UP$S|1*{SuGU=`bOwpr=6^s(0Lq3G$^IVNWr!fj4 z9hP~E5yYajCDs_uPEPsq^Dl5+Ph|_JYALL$f}tB32MG=~$;hv;n!*&6yNz)93W;4= zwH;kMKv1|o(DfTaa5PoH&h7z4Y1wYK492s2u#XQKWer^~Bjw;_)MRa$(8&>Ppt52H zJSuUuU(`+F1tu9bnlZu{MN#UbVcQOr^&(4}P{y$BTI#X^HBy$Ay3i0J+9za^?Cczf z7EBG!N1PYyhw2&`Hy5|cNue=xTh^E7xZXi6h^Mxqv{lApO-WIT3fL;)Cf>SbX}2rp zO@q;fq6ipk8G~nB^~~y$(MO&?f6jNm_vbRAEJU_nXagx8YAQk|3x?$3rPQQ2zHYAE zb{);Em=2vhYRe$U6;cs}I~cP+2#}teh>W&<3==vWVjd4B^uWlP4>G^H8rdW_`|CD2 z@;S2VOi(c$L#hX2I+(A1<~nKtnRA!;V5Iw+o((DJRLU#W6jmo*S0d-9B3PkOsSq%U7`vCv|B;cy%!r9Yb}MD3HqAyN0ryuLNktoxEq8K z=RI{J&!;seZBE*708 z7)`s~(kvSxTZb!$Xw%f9*hsSM=tbtJjK1pll_n&UFn-#7lAWC$LEoICsta!4z01ztE-zo4 z@cH8}IevA5Qij9*gGoW-V_?${#o`)Y~^EBCb=-LArVvvC6-2J9(JcSh4IfXvU)FXLD zpEq;p+?bkmLAdZz&?&1DeC^UEZIbFUhjt@f(X=Bes-mGETEIw`9fgyjjBtKja1*~~ zG$WNN#2H=XA|q{Hgp^JnWVoEWQeu)Nr|$(dUAwXC>Dz&MRk2*oS#LM={Yar}3hO3m zw+{ohG=f+;@tqrnfjAC$r7^ao*{LDQK|e2cC=2nd3VwhT3FBkO#l;0>)u5xry8%O_ zs!D>F3`pljY!QVUmPW=!DN#!~v3q7CArQlduAyFycCz8CnVy{6=IwwOM;XptCVS73A&t7qP+J?5thf%@_Ted zIE%T^SJ!Mu&=`};e?tyz*O2`ozk+CKLV9K+=#XAdMx%nHTs0N>;1$#*q%o@eJ{>|T zvP8kCLgo$Y37W6pc~~N-a9;G?_i%Yy;q|XPciL{BCztfc4V{J z(hXPnsJQ@9A)9vkOoT{RTc|LyfRguMy6-W{2)eGS)O||il>j+;w3fz#)1)mBQ*(L^ z=u6x>Ad3BlPbjGHKgS7u3<{JN5mae4t|}OZo<=on`i{As6A~S$@B4`&k&Q+Lc~&Ao z@!9uE@Ypzwkn?u?pCVcR$(On^?jHM5as{iBvZ=*oK98)YW?E1~=e)S$SC*&^qX%17 zL=`1fL2LSU!w>_O;Aq>8jFOaMJM^@pyqoX6N zswF|k3R%|{hI%nW7X}wxE_DfV!VwY=M@8|o8vBu=DlnBuBb^J$T^v;K>D~*JZPQ#j zf7Ok}B(9gZMO#A1L6_oeiw{!gX+_s{I41{vRT`SIqV0uSqK)Uy-9z?o9OAv>K`+eT|)_*S@k&_%Sx$8y>Lk2M*Gesh(TUoea1Y4vM&Tm$+n&%3GC~j1JhfwoQi{4LQNc5e9-_wwHATgs z4MA%LALxR^M}tL>g31VyR!5I53s8!_9|VmqErTB^VnD?at2C7rWNlPJRy8VM2;c`| z@ag`msb~y2*!vm+DF&``pZlT5sN|J~r?8dWQk3q*PUo~Ds0!qM?79^BdIo8SC4j~+eZH@|q!cGIHkGVRZb#cVDOlr@YA`Wu`~ zW5(E`%ZjQh>G3>$^^)`Ln!UvmNSr}+HS!lwBci?VnoL!q%R0VNM5dxIkvh;33T1Fn)_b)*MS5NW&JBbRC{00GCMzlzsAmhhu1mbr4uztwDuVOWRfS|> zM^C%ma&U0KYJ15L6usmX7hrw z(4w}nfoYQ{ND1(qqlhTQpj1T1k$V2O=ETF#csH%d}R`@g{&S;c# z9749a0l&%B;Xw_pt0ZaalY-@1JRs}CS}KL6q)!Z={7 zl7rnn9zJ>_t=xbr3OQt>Pf&OO9Q}4fHCup{96~9sl>96*Y7!XVP&K7I23n((g*eLZ z(XxDrP}C*gefRrPtmPInLGMcE#Ut5X-+brow1lMUzW>?-=F7#DO1{}xx}oQ6ea<`Y ze3KjZZprv7B(pR*Pw;-gR0a1R-bYa~{`4P+w&Ja~-(ie_&FKZ3)ta)Z6OxohFV|hH z^Y=6BnmmGI`g<;5ayFW%^c*qedSvu#%9BJeY^@C9F;q+)jNn;1b#a+jq6ionair}z zF=+%+&Ji|QqOMcnA6(j`JlQ=uF};NBTiD4bDx~)(2bFAyR*U~o^da%10$Lfof}xlA z1QoNi*i%)dgozq0h=jn#=$Me1e7!;hrIXM)b&&~fzuvj!``}|D17q+h&c(%m>qnYl zCTc^^^H(B%`N-Mh<-WA)QFI&D%3>OQ(TX_$03ZNKL_t&|2Ax#ZX~dP@o=%78^=3s>lp3!D z>W~9ip{^_grFc+rDlp}HDy@y{dlS=r$!Ag1%-G%CP3s2kzxIglzx!i8{@{I-ip;7R zi{%U*Bx|;5cG$EVW>qbTCCeS*CVR2wu`1%D>^s}l8k7D$jw3}`3W^mRDxrLZ(iFC$ znN`@T5--WVpPErYc&_708O2EjWTtS$D|9C-B_&aTG(~bKErqyqP7FEIT9Dl**};&p z6DjbrU5Fr@hM1nQOudO-P&Sg+WC*en%0d!Mb{0!q^64ALk-D03zB&_iueq8|*Mvkwt#BztEZJ@dtaaqw)~mQOzUkPrUwdw%-2|DK=! z{AYal!H0bC!AGpuTXuK$X=XF3x}qBgf&R*pm@K@DvH&NBYLza~UfgM`s!BH=tP!YQ z$<;$eg)x@GR1}3}Ruz;v>{M%%_oxssN@o7f2PiC^8|2m-#o(O8?s(zsh+@W1N&@E{ zZNFu+-7@qYF^;tDitYNG?fQa`KKwnOeEcD=j*svmFu0MAKl+HX^AlF<3x4tQpYhY5 z{1xl<8F%mAz?6z-M^E|HZ-34E?|;C_@e#+bo^f>al*OW^tddFt$HnCt|M<&);JttP z4RuqnzqjD*{D?pN{#VqMqM0{j6zkJZ|H!X@`)kH9P}L>cM6`A&<?MEu zv%g`ss8}qPbgttcfBh>SKY32O?OE*Z(zY#^>kE#KUhvuHpRn4Tuv|7YvjXBEnCgV2pZx3>yf{AQYj1y@8@F!o^zj!--BhHpLkcL48fyxQqMAlp3XM-_ zQ-}$0j}DYLEqgCAd!nanH)yRyX0C5Y22+1*qBnMml-# zAc!@G)FD!671p8?cSUI#jb(zc3xE=Tc&jZ#*WrC+G2g)y6=?C&(b`~=^3fQLRl;2o z-ylI~#MRiMw4o_VLU4Tk<>#CnzoJMRNOoe@&QSoy7Pug)Nts4T5pPTJK{B?XcM+`$ zA^nFyZ7teI8f($ox-J=pOBS;#6|-=)-=(K!)ZsT6NS%J@`*yx6Kr4WJgg1|M+4NWa+- z{YY6AClLD_hl|T|HtQ|TyulVVwkR3BWIJLsPDwh3^SL%;qJR;bX^M_CN4v>_kGImv|@E2M`QUNO|q>@G(=Yy;>A0+D|MpW>G zl#Vj=5u+`;yE_o0FvWPjb60{75VH zfszQQjNnPgL!u@b;q7T-82cXQM*1|>60Vvim)}~6MGMxVv`y(EfK3Igu?*f}3L)kj zWwArQ5i)iw$kWbzho}mIDJYF$w%q5{%S+ra(DyAD7b_HoX1& z=p{UIXjizlWl=4u$`XgDy~NLBOx>!OiE3@Jx@%Lvjvw!J$ncxRK3vMOF%|FE=7JPaEdTr(g2XA3tDpJ#Gw? zb;WA6!Dvh0b<%pur2|98;?Uy7U$XpEV> zbbu6)E%)Agmlpq3E|*A=Q+Ji*?^5Sni?ql^6&WqNiYB=(yM`cqu&KDpV?B9hR4VqS z$1-NE6(qWS+APvxL=-QckX1O+3!w!~awKnko=V)dh}cq$hz(9zUOHrtN6tg%|5y==1Eb`5bz&hj!Q82Xl?5)lhp5W{io z(Xn7VTws+Ude3~;uvuR)j$0OsIUx=ZyaX6quv$^oQe?}tvS!<_C~yqhGn8r=dk4X@ z+}WkEf*73kEB1CO=1onRLXx+uHS-iq-E}Rq*-T80QOx!hVtROMpY!um+}JVtNKsS_ zPGU*AvBMM^=LbUH69P08$!5*GshBN1L^xozxXK5Y0-{aMW(!GG zm`AOoqC=r|LGXx*GbW1)W$|gf07PZdm^N8Aq@)4zXfZu6;hIf=Mywu!l2KgL3LE8n zhD6Nv<2B`?6gMUSJwd|09fleGAQx^bQ-hLsk@A2|D!I(Xy4ojXpOG+dbuAVLuKk{% zrg$u+AnHujU_xL9AF$3dTP)bFTTaf;INV=w>)r$IK751i<^t~{z3(BJ_>yc!l)6F# zJrR4&!CXXQ1!W^-bX|zGi1#B3DbP$QBC~ESX(L$4s15mq|)bFD0HT#S!MAmo4snepV1{npqe7Vzk;1bk4VMBq%1duhzX=9 z7vi{V(c<#%yJ2FG8B<)H7ZIvL41F`gS(YXBtfAd(vH#IXP{gp24DDslw*247(*^_) zR!HiGPCk3iWprBt!bN;V8bAv=Cm?Nd$)6?|;@KD@X&+ULF=DL&H@0lI1AV(sdE=IJ zSSX^gYqSGMmkaIy)EF%;q)5ma>qOxmcHErA7yawxu>=4(gIBL0o6W zTjIuzLw0v}8HSN=(v#Cy-_$qDO=b5`q1 zj6$TQ!SUkxv82OWOHovuhBNW+A#k}~vuW3oVW-4DNMmT4MsfhvV+sYsxFsZb^jG|j zy`5b-ki5fVnJt$1sOh&Gf*%;h4oCz@Cy;41t7w`zg_RCzcd^7)HFdS1na`*SiyIWL zUY$^Ag|V8a>lN*G&34;~6y8{TaO~~vu)4V9*^8GnvjhI@&;Fc)-928tdd20%n#E!< zbv@IFYEq`C$+`c#By;HQa7wp z*Qk||pyiwimq%SH2=5G0z=+wQONF4!_ib4*4j!w$bfX&S%n7L|i<2DPCG*~>Q?%<1Y&!@-KsQ0UJEtU8#CwG* zE$e>8VrLh>=_nU9N=LeG3j}s|=9I=_Xb59q9D9@sl$E6_4k)XFwr#2F8AdIzR%4A~ z+qP`C9n0lHkUr`s={!vzr(`p5l2Tm^!Tu)s1!R( zMRXgAasj20Mo&kYref%~=mOf+iuJ2=ViYt=A!t@NcC5QKof}yi2r7+>ih^T zn%9iZQQHEQ3h`-#lMt(-D)BK$V|A_E5mY9R$5bMg%d_T@XHwRV*y!k>@j(oa^C(J) z;CWq4znrhwIb^Op=*5>r*P)E2s6?z4f)h?6DY_@^86tMC4Iu<4mow=+=XjUAQZyXy-(WLr z#fKyrX3)sj{QMPd+Yq_ota!_|cMuW|;pd#^5nNcVY5SjWJ06VS=kAY9}Vdid6im#3i_PIB>-s(<+O$nO-*&^5eBns$wL# z0c*<1)*++^(h(r&lyR4eya-x_1fRzg3N445o(>O-A04BYwJ9S~Q5}lsqa*`}lsv_0 z7%6r=^6a@WIj?&mYG(9CC(90Xr&H02Pkg0x_-c(cnz}4mtyUcD)@<4y=OPOm zd2o1>?RJYxxp*i~Q7ZQK?y`4yz~$wdZ#Ntr9WkpLv{DqtaB#TCd|uIY9q+yOK3a(#L|G^n^MW7#@P}NUo%6*PU!oT~ zL>CByAT_nIL;|kcaAWt78~Zge8rG`~m#1rXW(D8;=65jF4rgb_{OR#i%*~R8o%79a zy+w)U==m{6uQmi#uzqohnN{o`Ecx;Gze(*CUw-;0n)yBlw{LQEd`cfi%4W{!26VJk zRn6G@qz*3WhYdw(8M_`g^b~1K8=~ZiZu>1>2dY`aIQBT#5!@(xK}Zv^4V>FJ8Rh%V$rybMt_&z4L88`RD_l z{OKdAs>YV3jJT7Vd|4G}=cQOB%DBx7;*rHa(FeTNfbg^O&kEXP(S?y{CTnR&X$(xt z_B5st#4E;0@h5w5;$r5zp|kksit83a6aiR5_O4%RB2z<~@8`s$O=z5uR8q~Rq`^(D z9kO>O(UPnwrq7#SUu#2Y3koafyw1EtaXu64oivILPKr}&%p?dh>iX(s`n_Cxzt=y{ z^`Fxqf;$j_SrjLO5SW6}r(zI!wysu1Dy~4N06B^%h;2zs(OF)B&DA1qq)?i%Yf)80 zr4&0=#b5rbe@#>VE0h}9T`stL`!=)1f`9tp5Bwkh=l@Q-xuh^wDsS)cuE&}Zt35#* z7K<7EIN+mPw7zerz(z43i!@~|)nYfw_;EHzDMjD+_~a&(2~AUWzuQq)1!t?kA$E!Ff^6%x4Yrd6N?21B+S1 z&SJ*R8@Kt4D z&sd$E3eTgN@%E!f{Ih@d&$)H`F3+Do=gIRYeCIpgEtb* zGS099vumz89}xbNPaR>AHc*A+uKL6uM~j1TNdGo>UQ);haw(mIQZvk~(b%Z*QIM+K z>4oSf$QVS;rlJr-4F(;OB|yyRmq?3s8VM+J(;%6Tx#O3qhIG~vlOeAaylhxS)kva2 zM8<S8A&MW9cV3h@MtoazK#1Bp zQd>(|C~oZC;>OKeTwGibT%@uEJLQ~n8#wDndOxx|pV4)f+?XFytAT^N`}FHG&Mq7U znxIRRGHlit^xY-5ZtdXQEuJ5J$-_5p@bL9FxY(TX`0;Zd-oMQce*9hfPRw>MzPMm; zSL0>~XbZ!*;^gEB_wVo1^^wbq4Z}E46pH`iKl>4%e)dP6KRKf`BUKS-yMg25XPloM z(-#WjTM!B=8w5$-4D8)ovNIQvO4(QfUPgs!MCgVU^SNS-t%=;G{z zqvK<2Ww>$c9<^=I%1&E;B#kDlNukdM<!V6w??z7uxv{)>ah3AvtG5E|Q`= zLqTjpRQkS-X*8u^@}}a-MnW1zu>;6_rb5XG%V;UEq{xx9i;&E7vszU8wB#<2N+T+v zp5$Unrw%U@@db6h-tJvBP%1?5UdH@N& zO~akn9`f3wxA^?CPwAZ4ZkW;t-}jorSt&)rD>3Pw_$aEhYS4uuxF0@jObIs01CB$6NvRr_KWU5RmrgS2SXC*HrgeWzP zQC(R|h)=X2+Zi%a3ZjpK{rEuio}6M4qHsP(?@+;_Oew0}q#SffE!Z^T#TQ2LJDk;X zDwBj8d97V5jjv6qCwqnbEj^u6Bt#TJGNVFa!N-(cY0~FUYa{K``StQT4r0WnJ*yci!gP-+Da_ExlyjDY*OaHU92rf6LLcr|d3w zSg*IN&d=ytaS}GRK-mIaXx@D5>pXt?f=@sB6SH~EY}R0crmjn|q<4~urgubbBMZy0 zTt+Fds&e9v#3()(+CYItd2qvkOMST3P!(k&F$?LwsKr}kZ*PY;UVBJYRbpTY?Cu`Y z%$MA}d7G+k*lfgEeSdd{`CUqOo{L8-}wFrPEx)D_sf>!y+Yp=b|Yp=b=TW`I^!-ua?)eT^| zd-pa!{P7Qys z*XAcLKfF2-YNbGuJUQuWv=Y8mUDs%1a9t3xp!1VwlQKGWNLT((Ds8ZSx^D7i(*5uu z0^>A44=Q!;N*)YDAtI><5=9o6)ivMv#+x)v#ooMNHk&bT z77VMF#ZJTVN1tM}rtdbit8-pH>G|5%AF}4OmkwNvjNnkeMl4t;liqr zy#?hn+e95ottl>w%2}z1*Anb*6N(Qoj*f{_7L=$-bKK}{~$ZJC0zKE7UrwL@7M%Q_CDFl9#W)S3}-pKc&5u7v=?@a{jqd3hPH2t<` zKJ)m|;f8^s*SviGoNvGLI!OYMUs)bVYl%KkYJ=(>zH`LEK~&7@ImN7|_kr`{Gip=u z=;74k2H^0O|0MA8@GB5d45P5}Z5?j=~1^c9yIz z&Zz1#9qbvPOq+^IAZ-lP^M<-isPZkrk^Tppx25g(k3wR zuXK9c5*na1a-xK(Ba{T6D<2=}&g8%Q;K)h2CaJFE{fXL!^srrv<(iE1LL%sj;i!z# zBoD9rE8}^u z4QW6_fpD+{KKG11Fh+&30c!%bhz#R~ve4K@bM)i|m)le3iyayLTR1*h^YyO<@QxT9 zo68M_shKsFt{WIf$K__t=pFOIOwF7&60R2?8Ahb1|_12d{BlMgdDAfe-mTk z8ftY_Oa(c-^Ox3|G5EwCk|#+l4ooVp1gX&>6**cOmXOeG0hMCnP^rldLhH;^%Ayky zj9664PRygJ)G#D|tx5i401g?`X>x>CzQ5ud001BWNkl={qP42$-2A_ZWN3^jR9q}F+?M?`I8jXb% zZzEJE#?j-oPJVMK)AG7?Oxhd!VHDn~60WaOn&3pxm1)~5LeO#g9b)>K(D5h)bsZu5 zluZV+>2+kU6W&@t%#ZW7k+VDH^pX8n_OEMuT8!kOvyKWkp?4aIO0%Fv`L2u>zcQ=w zM&Y!0ZIxw3yJ^8ofv>dW053;RQOX$34I^X7IkoA;2A;KbP?2n{NvpSNS*GYkV21*?lo7CZa&<3QVY zoL}@je*Bo={v54BVv~t{_k$1L=f#T`qVyUa>-Cy0ae9Iug_IsD=5@u*yANnP$E#Pb zsI6ffI)<*NA3Lh1l*}P*&={QS83va+cX@y`W+H)GYm+IUJV@Ji&HCaJRhQKB8MdfE z1-y$%owF5ZY412aJ*De9N%i)D<#NereaZ*ZC~aw)8Jq2jq2FROEM_%E2m0-ngTp;; z?JQFZmWnGkN?ww4JbU(x*=)vQcSnk_+y*2PvlvaaeDTG{)RpD-t-DavfI%Bej6E?H zl%*{AAt@Dc`(Onz(b+>xg=EwxtLfzACCjBqh4Uc19a=(gtkx@3P+VS$TB|4;Fy(YF zW%S|%4)rY`e(-z7vFG)N52f(Yrk7COzLAWXTTqmQrw1o$*HU-&0vJs)Q58ew} zq>F;6Je8@LVk{DAJ3qF{Xo9;|9HmiURB2>@BKSBxH1c3ekz6HKN)SfahOc;Y>F`fL0)rFq*6yLJgxM(NIa4WRby%_ zLI_kz-D#~QC)SI-gP^j;SVC0XzdPsd{kyz6eZ|r7OE8|oXhO0nskEW*dqC5VLd10{ z5JSZG0aF&>g_KJcP$_}woeP9mfi|>l%j3t70jTR4j~=~=Dl7*FyR23l=EW{u=ee<8 zP*gMOYJnRgMNy)Q3LO=j?LgZD%5r>u$%8w$h@s%KPam^dJG@gArQ|~Y;r)-%TCuaU z%l^&{ie`q@H7CcXTwHW4mva`21)GEwB&xvf?k>A~2bA@kq4(5vIgLaH=P{K*YI=n+LbAS2K+h(Y`R_i;voS^? z600cYkxG$7CURJ2Lb0fTNxv_vYOfC1obxF~Rz#aLa!>!(sAQ1>lbNM(eJ0k^goer1 zrl;rqtG-u>?CQ~Ch zn(7({IgvAyvc3?r-$A0o%Ccl=+jJ39d`t*pa}Y(HpHW1VsP#-5!;T3JOVTw6S|ZQHXv*kk8lpL%tH(y~y)=oou(kMH}Q%S(x&sj3Dy zh~cOBQy7WLF%sF4-CJD{Xuq@-$89$e;J24T42~WS_x3s5+eHJnZrvaRN8h$A7K`a- zWCJl&pzT&1y*lB0@BV=AefM3q+bzHSr+;GTS{^>QM+}ZaiT?7U3Zaj>`G zJsk*tJR7S9iM&n32%Sz zyXk#tNRbs<1z@N(wA}zYGL8eL&}f@;_w+Pg%-!hq%_;vq#7Jp{VD6HV!x%#top_r>5jhCF zo!xgGRav5oWL1^yNTI_V@M3CWA% z6E?XBhaeUiQTcS;Y2Ht-AZT9!~sOyr8 zi!&+uoSVX8iGivr(q?5aMIoqxw6f_w%SKcb1tth;&H4;16o_cIIuIX(J0Q(TV9>E zj7YeGwon!g&Pzk_10*%vRU>l)jP6i4T5+sJlsplZAd_~3CUu!Y2G6g8!>R8_^<=`mwGhq4wF zy_1G_Hk)yIe!>27!8`=+-G4~eZIkJuj9{u{IgwSY)(X0BtYy0zu*RUG@Lg5z(6a(7 zjqz1-YPVJsO(YI3IqD<6KWRJ^LOOtbLIaGTx#Q4c3$b(%k0U81N~m=mMSW7>Ox=WQ3!tR1JDmoozDvB$7j53B(X$)$$aLPsk(K`ko zC>Mghmu1Pe8)#-VBo8|oI)sFdP zD`F6DFd(V!T=KaR^j#^j!_g{vQz?xK<|>LcI<(Qm7^cJxDKsN7iV7~Iy_P5_p1e0v zo+ewf$pl(>V;*BtvmL{fMI4PN`3EPi=gJt)PA@sQbqGe&k0ZJ)aZWNB`=Lc^iRrq1 z_x|)5Gxsi=jbFFG@VPOb#2JatrS)Ws;Zg&en-ZPuJCxGG87?ZZVF{8D!x&`>6;iB} zPs(j8_eX0Pi<+`PAp$F(1R?;oKx2XE9l;HhRt`7kBYlL&Uq0oJAAKkVmP-Udt@zp- zud}Uk}j2a(n4LW%phoAjDzx~~NeER9fygYg;1q*^uco#Xmd4s?F@BR&c z`QQE<>YY9Cfo6BXO-8yg(6!t2U}gz!AWLNxvf0L%M{xl^v_eWwXwvTfa$2A-AAia2 z;SH+)pRV_O()7&E`+j$L(wjQY^aRWR*u`QO*dAItZ!zy zY=t!`OH@%y(j<4e$e2Nz&@-L8-|(b6_`|uM=j|cwMh!5S>F|a-oO7KkRC6f;1_euW zeEG$v{MBFm71Q~Io!wn7FRxgwR#F%xL4;OH?(Sj38I92?uEa^~OHAAXo4&?J&{pKZ zt@9FLluOXJc(=%c_pVFT)Kq#)^%S5YdUV!E7&;yA9f*nE)W-yVe55G8iSYK^(o9W#DCXaZT5 z)4Cpdc};xp#!h_*)K;mBA3|Dv3<;*!oSdC0LlDzeClYMuI&pMQ z`lJC-NF|>fBA%@=Z!`oX;^XpaL+m@w&z9`$!m}5zsk=Z~mRy})()R&{!Now+b(~)= zdHT&?Q+GX0(@-}7W2MM3z}W>XZ_dbb$PBn1jOnHD3*a0{WFR_{^`zmT7qn(~zd!+- zWlOVxwhclHwH-UNJnak3-rk(1>uG#L9|5Ha+K}hMQ}eE8b#p^*p=+U>mUOPg7|08; z!ti~=TlWDSDDx>OL)UM3`Q0e9r6B6Alj#SuU64HX{TmstLW5Zhto4p_)#li?)V<#2uMbXb4gpN3M;v z7HbTB>;LZJV-Wd*7EaDBbV!&uiFZUIw<}pC!}ktRr!jI$T2NuMJs8nmHJmHriC{;c zDp|)a$@ufK60Vt&q%n+8P6qK+mSv-Jw~Kyka$OL`T?m3isM}ejF{DuOh|O%GQY2xD z7Ort_b&6o|s5p3(gHEN?mdwl>DD%LloR$^S=~Vco0UkVl%-iq$fahO-MZI2PGeJZ# z8Wln!KBsYOAiV*DGC37iax$dRnodZh!B{;OSjuEHUCXAa+1cAo2+IKZ$@!$M!3ND|nmbz;2KZ_&66Ni{0q8J!Qm(IqB zu{l~rLD`(cx}iz3?WDF=UxV8Dtuwm7Kl)?;WmNu2q_R#G%=T zH-rah#gOPRd<2!$gOTm$4c|B231~ToWhxRAd^aS9q_0W;vC+BF4 zlMSDL{v}tZ7wjJHqCyW^@w>nCbN=Ul`9HC_TC=m*BTGIb#>(ctckdoi%P8^F&%dNu zK4U)F<=&mUy!-CEOlB2mg)MTbs^Z?!16eT6^X$d<9KU+O*I$3ldc9^gn=q{=QY1yG zYPGiP9Uic0)_nQ(Q_jvVh*1%{$fPW>){ zUEgzkeLZ?vOePbGqF}vV6JzAgojYVz1xeKqZyh=)A@=X>@6fj`_3DbQ+wkJqw>*9F zgunT#zvipYzu@`v=UlI@u~ztDu64LhMwH)u{T)xfe9FK5KmRTN{Ga~!{NW$|6Ye~I zi()>Zh>Ce{~YO2P*PMfAmMZI6mgX_kRv1()pfMy#ZygRhbS>k+?eV=zLFEmbVmMi8~M@p?9FR zn*DF{bd-govxHr%V7zg?FNWvdX4hGud3?>YWbg z0hvyhTAFHXH*VVGR%hczcFv`-k{9x^QX_Ofs3#wFU|nvO|X zLF@=Yx?2gym36D*z`00c(P-<4+^?9J#yk2ZnD?t=Mz&Ze$uHXU{2czt?Jo+}OycbQg}X<6W1 zC)OPS>2BK=V=Y9Ft~{C5lh|6swpkKf{Ec|q?Q`YsTC30U&{fI#G8xgtz6V#w)xgUU*Z z**<+RpfZ%Qw9b)R5pCoq+Y)uvU{4@u;=IV|2w0QjoG5e)Eg`(E@6jlX%`j0EUdj4O zitJ&%DMfB9ItE-KX5a4AhpS>cM!C(NVGK7PNa_YfP=Wuqu@e7K;Tho*#2^ zdc(szJG}GWkNEU&|Az0MUQ#7{6=F=Z2`87iLe8?0KHyPt;EXB=!t;sAhfdp+=^J`< zW=FfCU?Qz+8LSs#l#@kxa@%pRM7SoAP83ieYDT|39rbXyNuiq1Lp>5ALRvf#`P6OU zIlM-Lx%1eRCX%~S2G1F=+@c@e<|y3c=B* zJ31<}rB6UA`coecBZ4Ie?6ycA8U=3snKUR~5MQ+&Ao_81>(gjZ)QeGX?Jh)(n;P*{ zrrR_zu`$g_tIUcSn2}sEli742D^6dZ@XeE_{NmvEKx@hRvzCAI-~M-;9>2y~%cHm7 zmIt3mm&sv_AAR^E!vFS1eDmcu;8UN_N`iDX&C!{VZ$jC=4P>!chpYY_#*VL<;qy4-5>}Nk?zP|$o{`J59SN!>3 z{sq@JH*{S`({vP*N(w?0Z6mf4C_}w&SS>d~@^hX^S#ouCMF@fEbOuHWvn-Ri5mMI{ zgJhr0cV_r5=hKgW%@<#M&ZnRJmZzV8$*Y&gv~5q@cUYSf0xT~#VmHw%+9qH!5gB~` z>1Uk0dd+8_f6V{z&;BVNee^S|Eh+ZyLFh-{6LAU`707bAWICCUWd#H;94w{SJJ=`7 za`D+|9c5W^eR;*s-hv^lSyXr~mHm!SKKX>jVwd^u4p~uf{Q3l~CBi3!fa_aSmf?dG zx_MO+5w4XeQ01VNi$FSuAS;;OIkLRq-kl=?k?)>A8~In-DBCx*-Hr zT%OZGk}Nfpu-~Nu?*tAGIu#sBhOWW;q^8-9D0L)p zr?v%3Rpe|X-*SO?C(2fUX*HAGufiLboOC}zx((5x$Wlg^Yy_7s6nSlif>H~OFYyAR zRy3WAlzd3tV%H}}VKwq?oa@j=3Q}WCLW+`+UzSTUJP?zoONcT~iYQQ;%j-41ZkZNh z{(I-n5z6*5I`I|3M-J~E;CzGDVy}XM*=)xC{vpS&U($9<-hTHHRW;?iZ(rcsfXg(t zlx8Kf6|-5v{X2W)7ABL4Jbx5E!1L!Xc=_@LhX*_S@ZHB)E$hB47F=J~yjJI|nk8LV z^E*HLF|LKrzx)E7!@Z+Jb{2QJJip?bZ=W-nOgNZN0moa99`NA)L%#Xu8NdGZ-_rN+ z(MRvIyHi4M+1WW_I^E&P(__B=`Z@3Z;B9{J-uql!->|M7^Z5}?Z+UTcg()ifUJ--F zc|iht?~*#!j&A8j8_9f(9v|d=EXs+Dp3|jZ5?Otu1B5iDQN!7%Q)80I=fmgTYPtt2 zns}?5S4!+l#v@lDX1xq!6*U&&Dxp{0D&od8f++h$6n;UXuf*~n$(ogjF`w3ASW;dVOlDJhFMOjc%SOepF=iBi6uFUNOAY&SC|V*q2m+^4 z0T5h|G8PpB)@ZV{pNIiwC7KF9Nt7q5;vy1U@fyYF)U z(PO^-<_S@0>b4(q^yGC?T*9k$kO70Pr&~};Z>yZEwqi`9cio%yp2F&aAiV~gP zv$WsSn304m4YmYY3GXv%ksWC*O=0j`??*xI5^9xxKX8_eQsd)J{~Co53>l9`$^D#= zFQP=~xPZjt1n4`5a~*kZDa#!1C8{hl7HcKC1}$TM?|d@AZ3)52&rr#=F9fvriN5jw z|1o$c4*%6`4MiZ)I@B$9`k2(Lacfl~aficRP;Y#H!=Nr_V%6=2s>o5fCa-eHL^3aM^YH2@NHIG<{NWF9 zZO6CYe8b-Ul=u>}IweHK^Y3MR z*EHQoh-}-Ix^0-nfX>9&F3YkJy%KOj0-d{N#it*C%pd>BFM0CiSC}9$cD?DCE#?%H zg3YF(SvPnGF<2J!DOsUd)hl8fIevAog9QoXpXV_kA&dq`Ub5<734#oE=D;-`nJVu zLl%9C&=9^x95%DIL^Q=DqjepHHf*|{{b|PC`$rt?y~XEWe!=nSbM77O^3xAK;Kj@D zxVku_sB&ftMR>KQ>u;D&6xMpYTVv?SbjEx>XT905Zff>*&TO93Hdov%uPDlr#bOt9 zPS@U`d`E5-!M8MB!`;I@6gfo2<>e)N`J89ZPN?fODq6B!b8>ykZ1N$#-JtrO&^tEE z8w%~&nO0ciX__kzkM=owaKJa;oU>eC@ss!NGc6-c)6j>W%k`2vv>ZOTOWm)zT%MzK z#iNIBv8*+h8%NUzoFl^+S~V)rdr6|`Vq~#cFqy2T*FvW}+yN2PYKz=xl`(@Z8RzGhoL<-5d;Ey^Kl~j&`S@=M{R-!#*s)e)(u8NYB9$^I3(4RPr3MFii4*Ec zMU7UdC@7IpV!bl0Ch1p2eZ52(o5sX!Q9R`P4DVY|1M(h+M<57WvYb(=U{<_|;tdB~ zOzP9y9N6?khEKe`f(9}aUDwm6B2Gazd-ly$T9t>_% z5YYB>6Ow9WV+2AJ;#LTb=sjqGbnCiCsg9h*?tbwgQ}G@BNa zS!|xCCmFe3-B3 zuQ5uqySqnOmaMO@xVXNOSI%f4XR*5{ghVAiF4Fk)tgp`a%fI*wKKc09eEsArn)QYv zt59U@?%e^SdG%WC4ys~;%`vTC@R!!rz_A;~cqXPf{jl-$Hj9cV4(@UY$t9}8pvM_dD>*n~+M%vb z@?`=_S#&xObe7BtQxNWua8KBp*a0axSVjq5*U15s4x<=F5Hch)_`!u$D_bTzBZHRo4rj_%J`)t4L`F1T|zVY89K zF8H3!+T&e=QAxh9HC@-Sypka2O_rh9$7Gh*&(3-F{FI#?!_PkW8S`0AW{ix_I>+wr zJ~!8=eD>+*SX=V`kABJz-+hm-o_>i^5;Jt?@PN<0{0i60`k7}Hu>%^&rv>X(%i;b$ zy?5L>x{D7vpMCZPySs|swP>rz$^u(ftTv9i?>W2jL~U3%ElO)1$aw?CqSIGFy9D_YjKCXA}u;b#pl|0>O5Vj`TI1X(yGsx;@E zD6#U4o&BBB+fHdqk(FqzWi%Lr*f}VLvZ-M*i3^mFBNsebo{h*{o_L9YNR=h8uQZYz zs0F0g%!eRB=?q99WLlFcxlAoy42@GPj~U(0lQJ%nG7HrkXF=48&Vwy22L}fnpSvL70ZUcZ-`O2L>kHc^yu-zH%gBP((oP-2V>QA z!zrDFRDr4}DGqY7qM)s7j7nUpNJ?gqbO%{uLYyC(TSYPq4T%A$G^{NZ!G@WyjS0e{n6kW>4^fm zqzWu*DTb^zWSDUr=-&jD#t)s|!|^c>k5Q>N3PqKQP@SeC!(Zs5rc_0lAU=zy zr}hosKmSgo=S6{5hDlKg!V#RHSI*&lhf)PYo!zz#ld2$7NZ@A-yn6Y9ax$f?CaDe= z+k)$>OX|Aj-o1P5?=3(HVS9DG;`2{GX0u+SoVd1E)fBX1)3snE+9aQds?Ehf+Y6df z6b1K=?r?oM<-6~m3Mo?|CZfqwLSgWs!)OnoHk*Om{-=1TxvYqw~SwU*pwQmkkTy~im>j8Y_p5EEjmMn#GmWXz)td2Z=@c@JYC z#ZGAq0oOy9nwh4p`R#9h!_PnZh-o<|HzoKR={&O%(KslIykvK#sk<6$720OBA;+mH zo9+~|v3&B`Gj&}a#gZBJH(kt-5FlKzNDPIt-CiXIVxJKAnrQ(S0Dv%}Mc78t?j4P)m%6j^J;R#0SNgP^rc3dyq&FAx1Buyu)%- zVMIKFO1|PMLQ-7|`X$XRDq@Eys&VAy#Sq$9cJ_9-bMFY(_w;SLQ*K{?%2HWF3_*~s z7{|3eTu{d7aa1+%KgC^M5HHvD$<00SW%O40s6*I>p=;TH776y%8kF~tC6c!Sf=20p zm~qMo(kJKlA$u+)RIlwjW<}2aoqgsn7F^w2vufbZ!w0@%$(qh3biG$SnO1ls0wU)+Fjl|}4Kbw~=pX_r9TZ+fsi|s^55+d0aIj{$ zU0{V&*(u5p3AgJHo%3O!)firxZob{@o*D@R;$nFhI}E z%?-c$)vx%?-~2VfIp);_Z7b^a4L&MvR%@1ZBZXXW*xYjR>V!!#V>Vq76ilZxVl<#5 zyYmIB&~tsUq_di{=dZasIcKMwq>YdYfDo9@cep+|C$t+(HWfKe9>^7huI1)xO?dE@ zcz|7wB!p zFk1YtY>`tHCBZ0MFUro@w4$n}?C48X=5byzuB6F)GY7ecREtqN?c zht4f^tG8zCa)gN?X-qWV-t}lLVc)qa2s&W=HqwP*oEaJYS;W6Z{yejV95k*=qZ3IT zD2ifqk9KaWPw~ScO-KrPwvw)Cp2X2@(CA|-9)-`Pdb=^T&VNHR}!8^;wIoe)< zDao^fyj!!bYns-vssqsG>D3PCzrZ&0z|)%g;2+0!~h z<1(JV+EDjT==zLi16LO{pMCZ<^`__1<9BI&ASlObU8Csv+h2dd^Y5-C7p<7k^zhk} z@433U#@Go5`wvm3!kUU_-@oSJqepZxN4JJ=Uz~7uaU)3rMgn?;qa+1SlZx9IC056H zDFW)I;bytSsYn+cH=7NczUTB*L<@b}VU(tIk<2E-wi3~Wtfe%nuoh!A(WPQ8jkC-k zm>5)2>A)X;-BwQ-Y4PQ9jwCUKTq_}c$xs;Sq}GUu?5@-2$U3s19IflIN+(+!Jr;&q z8`+0im{vkk?@&%SQMM4@F6TOe(&U-sl(w!PQM$pFM;VRlTCC0zK#<1&Q4D((i5HX# zLldNekmd-ngYZreq*OpiEQ(yB@|+dkJ7UzB5Kz&Ilpjr(QtIwGYdMPM^I2c-xx+F)!lA?*WsDf_*y zYfMbx@j-&`l@eNnPTqq<$UD~JP?F0#pfGGbp3-9BwtD+EBsC(LQI8XXfrmFBd?A@L zt0Z#rcygQ3Z#v-&8wJ56)u|YVcV2jUK1N(G-xn9bAz|rCGG#}*o`GYg1_l5BH++?9 zMXVNOtGY!qQMbo=X{2h@pd3tOc4TTm0-A(;u^scu`+`xR$r>9dUVi$?r65&v{I8&faT{Ip#}eL{5%Lu|2(tK(2GQ{^d24?|&lY zBd`}BH34OBWqsXZ&e8i~hiHzPfiEq6Q~2-MEBTYxStODIbs=~JY3gAJ(Inso|9_dX zvsW@u_S{Y3&y%7bC&E6)>UZdW%-w4aw$9nVqR6)TczVPF!z(M7S#?rMzl#(Is*r!$ z5b!18S;row=JSS0ej^ZWWW`w|%#fd5)2rcsdG)K-zW$Luy)N{(_c>kEOoWL)@J9G; zTlAIT^_t@~D>+$#J~<%p0`v8|pG^EYBl}dHwGMh?x6jVk@1MG{9&6rn9GaDK2{;#7 zS=A4~c|1%Ck(8laCcP2mqEsRM8X3E;6gcYrm|H1%tgO$VslQVtCbh4vN}?^nnpp@Nz?b=QnYvV8iW#% znUhi3n6Nc0GKP0}6+Tvr{T1Ib^-<Sy_hhpFno?c(*%o*mx1-!@p^+|MpXCY=ruKU8ct12Z!)v`UIpa@q|vBI7- zM*eFT$;c5xCdk7`Chy?47Xf_Qqen15zHlhR10g~;%^@85egtzN8%#5zhiptUPOz<-n-cRfjpq0RNQT|8fn) zqNr!jJuwL1>#6-*nPQ;kxEy5;Tp(cM!j zQ!0rig@zSWML_$AxKM%(7hc~J~C%3n${E(2i;a(aJ z^B*!(@PXpD`TWL;^xdI=!24G}A%E|D-fMRcg%WdrzLdO^Y`V-aW{z{X;dK{+gt=i_ z-x;E`dx=$oO3#1m<(WBk5V|!wh5`tIk!U(T48dN=P5f_CO6^vrxDG>Unp(ZSK%(V% z%o>f|JX|Jb)S#>J6ef!|igsnV` ziWvF%y?^!PwvI+Kolc-vo#1Qn;8Pc)%283%=y8=_G(iMF4(EdE+5(v5N|hp7H_C$Zu3fEobtme0kCO3<#cxMRKfZ!e^AMZ23o|I+Zm*e(v{(;LD|D0*(+C{ z5KtD>yx+31PZwBuqddIay-NKpWNlTq-QN^V*FuecD+KS4c6OrZbPJn>0Jf`3==cJU zUSje=+SbRjP{=)Cm(ul48}OZwpes$#nc@g7l1Ui(cop+Y!V!yw2DqnKe>mC2&VQ2Ioy{M5!QproTMoP9F>xg1< zH=e0EVM`K|RwHmXo~zRrA}Hgz8QV7e*uCT7CQMyhr&5dJIlSXMT!{g2^}jaPqY_9A zKpIOTih=oYn-=@|d;X7L&`Sem{$^}0$xvj9e&1y3#L(bKQrR$ghY^w#P|{TXI*&{> z+D47-D9ltemod{RV<${Z8MA3D-YKpaS>&BFv@3EN46Jke=_$)tszQx1lub1$UZr-w zF>YbcWr)1HhtRsBiigPD?l9hZg`z|vtsJbjmzAZJY&tCtS*uR-f7|f`88~};%l7F0 zca(&N3X?=jBFb%xz3d(y43DH_fr^Mr-?;Y7I}E@L-X5FvZa-CWln*;TmYk+FR_qq0 zm|A4FGa8QW;;%^He&fvq*F^IkZ9J z;UIl1iygK=EKupEBacnyz3W2>IcA!Xr=OT8L&TE&@`I&f3duGl7Z@Lwi3Lb@!`&(WU8Z3kxk+jp^3yEnMcnsBni-5TDXVv2M9y@8vJHrgKH)lDoOUG`WE)!qn^MC z6%l{Y)Yil!|2`v_&+7})g;^pj?{|CW<#UibQr=KJ z4;OmPaCW;HG`cvEC5m#uYrVS*IUf=lg~s*ZlX=S+^StVHfptJBtu zL8PZL!h{K%i{!g`1WL?tqbc`bo{|12EHv_P&(8Dh?ptdVYP(CgDcy$CM>)0Z6`*l@ z-l7$UjNhgGND51alE^-&{6a#-Fye+nN`%9XJYPNBj>rbF?>zOw6sZE_<(~fNIlaAbn;b{(m4lm4Py|fb^LLD8_H33Px zSdASj9!Q=k^_*>rxy?h~dM+6p&dyMl=go#MGqOrcDR_HYB;~}ErArJR?x%g?ID5fj z?1Ijy{#a#)tNTvxE{yC}(}wJo*Wt#8<}~&n(gUNq>(popD(yVx*FC*^Dk)fn1qjsI z(d_)5mpKDPorasN6-F#}KYvG!{ctB85x3?41ty1<;G_(vaa(%t)y{PO~y*Ns(WjhT>P?M~%om$+?AP=8?nbo6?eaFy2#-S#yu2 zlL(?~S{08G-*PekeZDpq)$m1v6EMv~@$<*TOOBo)HR{wyJj%TxEm0G|9#JQ79l_WkZ=E0VdEIb_4d_pKAH>dxKvn9k63(Cs#(U}UTTQbhN>ZcFX zzaB2{`t9Xeucy3uJNO;1G0JYQo2D}3_LglN{LS91xQ$rTlPcQPTh+&6m=lUhd=NQf zrj(h0EQZ?5dtV+|JHiw;5pnl>#xwZ0rn%m5x8L3UaTN#Lx3g2@=k;)bL~*$_V>USz zugAuxnM@>=HpBEI6#>R*Fa4DhFZL*>!y+Dt2az7GQ{w?^3(AD)sx}3Vcj92Ach#1E zU-}4w8q#rv(jrX%`C9bjrkS4^m~uAI{`uLS=W=zPQv?quC(>!YMKzJj7=wkVjP9oJ z&LAe?`XvDCQx4YbE^8&9=94^hen^UsSw|*I7ViR#*A5L)P+nJirX0%nhna1`Nl>*K zulD1!$o}r%Ou585+Noe9gK@pO)g zhNOwo?dxX1y(8iel61da*J6WjZ?$saNtb1l(K+UA|$`Ed(R@4Ukt!ea~XX< zOPq4sb~uWam!OQ1O7*?Upyz1^#s30Nb8A&abbH}K;ns^FMNiqyN6J0%a`K(slG_S9 ziie5~mm_=Kp@hoZf+2^KqOSeBge=VC+#{Zxme33>jRGg1w z1H*e8wX5(KZQ%yQ&d$yxxfO1-G%O!upm&;7{(RWv4DL_;l!)WB)`hK@JsF99gn)>I z1XjJeq>*xX@9}=sgzLX*e~zNLxfm9E?F1dV#b}zQ864)?*i@j&5{Mp(N#eBSj&(6P z^CWxXd$!)IB9iIc-1E)NUx+{kc%dzxwQeW7AB00+Lya(x%n-k>fd(ZOk42Vn4esF05Jjfs(E(P668VYZEsDvZXi zbt4inO2OPRAAyy*QCDMj(Qf-!23ifbp7D={B&7p^&)vm0s*3x+3EZIMS74zgBbK%N z23iCeXW{k<-G66^_;h2sAcKShy4vKJ!OBQ&^a)p`MuN%XUjxaC0!)Dja>VT2lBO8I z2Lh-d@!_XM{Xf1mcEb4T8$R_Ovg?o2QJ8nffG&~1-kRgn+rX6fifh$owrSJ0yXefR zw|?foaZ)mV1%GJlKBL_-GTc+5H+KeB1%6S(+sW9t2@M3KN2C~2hjP2Xt$N~R;*R&{ zOl^Q}It!Aj<#mJaAhW=7TA8DZ2PT|&pivis_Cb$m9CvUKNMP_VIH{E%s(xa8ddZ>xwp7@#E=G-L=D_mEap*(TAYTyXy@zkir4t zX_NJ~107HqZHIxNsh`SFDVH9D9vSlw^LC90%3?jUE3SQK!lZ*+ALbDk)a6Wn4 zFL@;0=kDHv3UMsHLckb|H3ESyzny}vNM85e?m2c<8NO@n2o!}nLr|}4_jYz5Be1UA zyi&7fh|MQgr6t3v(lRmW`(Mx?ihJyN$tdnp$F7 z`)g~4E&<)+olc^rEuGnT#2By;{!R(o10keNr1FBnb$#`i81nOEKcdE-3izX4Xqs&B5ZIII5TT0b?|H&o-o?e|?&n=A#r0jE7~z zM#R!Z2kScLsg|;r5ADTEm=qj$9cxg`y_z*dx@$(M;8M5SWg`^+wNqmlfykM0{Qu#m{xgj#lHS_SQc~Fr!v$9~M9r zX|vpA>9h(c@q^1-%&^<#V+VEJgQsth{e~O$7O5*ai3B;?f{qP`Qp_gQV??aE{M_ByTtHN2*MtoD8LXR!olqMM?&<;<; zWlwUCmLpZUo>AIKqBde?fpfo6;;OBrCD%t~Y!&x?~m-bDWxS1$QylX0agIzy+989Ks(1WxM(cN)5 zR7sgTT)7TqrU(?q{*Oc|S7xz3MhulL$s}9*?}5GWr-6Ha|Fudkqz&GqJ3+^yVrgY< zTaZ{RdOappZV^?mf?QK-iH)MIe7JA|bAUZ^aP1wQ6g|EtJ!(~pqqCBdaf+sov|IN+ zG@0XJ=WqPOg-Xz%uiMbd9ub388GI9@HbFnwvcJ2VDm23?kwKaUmlNM6KS1Eeo!#9~ zIDY>QHshn5W?^V->4$>P-%C49FevLr4SCht&N$J~X z3j8J2G0tp zI2eG;;EpBo?2e%@g-b(>Uq8MQ{g%=~E|;W?2TtFR_1)oFNE>V4w~Rb#k9LkV^afED zxz|*jWMv4-nYpewk1q37){u0`$7>wXnkhTqZPA!Dd&5F0PbeuzYZeXi2Gji9V)!`S zv&86z5+U6+&1UYQ1wLZnI<;M1TnsQKxYQ@{mlcf_wGRuEK)7O(#z*|4&k^xi`yFY$ zFpZgi!VgWwCkRTwAy!0QlBR}!jYh=A6;=;efxo03JZfy--ls2-O1Rrn3=?J^S7Qbl zrF`EFoIG&Dz`!{ClNBFyWfypr-TSTG(Dh)FOs;;4wdW!wCI>Un?~;$(eHXVhrfZm7OwN7bOCQJvZp*>gv;H1ZJ23n@>mW`dsKZG$nL3Ynb(53yay zUL6@5!Y{niEJC-WIka=hs7^8!k3`izg7Wd&gUlF36{e^+AdISP{A0^#0UE3ZV&J^<8QbmOuchXRmZ z8BrE!c!Z77bTwkqnW$W=ng|fIa00X9-zPzYTCO(+0ee&7cQ#uMrEr~uzEc32)XEpA zY!%Os8-mo|c|~b6KY676AH%__(3R5WzFp58Wd!PgNW3UzAf-)f(Cg++o3B~-3t1L) znm_dV5hM0JB`yiuJdSXjBNA#@_3?}^jiftj*Dd=4;ZD7z8uIUhPnDIjj(5?9b}q5G zDefK<>jMF|cb+zjEI-4KHZbx`g%AUQG*Cxn;aU?Ql^F=0+>6lN^v z^f*+M;>U$AScbHq<|Y;lC$tFzJ-l{O)}JC7XF;aigN(bqaF=T{9S4`ErCTMdm5)cP z$;Px7nUqbRAnydvifJ^Lut~SzK0LB+%w8wZE^ts-!DKk*&>&#+U293Tl`Q^tb9;Lg zmXMBU#ivuP&4)9eE0=ySd&`NUtQ|@_lN#IH+B#wiq`=e)8zx4z%c*~ z&fL=mE)xh1>$DAm&8!%~Mc~Y(r#DZ zFG_IJpRLb8JZ)b9vpi76_xS?@?HuX>ne<+l#~ZNI?^6S-nKs?PXyKqG(J*tR>zKV& zpL-7_hddap$CD^aR>E`%nKj?lXMbZPwpPpoGSR~YY`Bs}c!J7P#&e%X;6thZ^_q`N z<>O|fkH9DGm%g#6iOl0D7|yS6dnesltmCzxdpCJUjMH0~8~qImOuqc!fcFby(o8_Y@x;IgCMezSp#a+g75c0ux_jD z=2tj|jYoIYQ3&{u%2UFYIT>GZrKlQzXr7a$dR~sNmzPY~fEl1zl*UL1m|^H`&T;M8 zI=s*zh@ZL;H0#`)X(5~Q6}RL*bsXP(TQ|8PeA|B8e|^m>#4o^e<9mXzK- zW9Gub*WO$1q4OTGY_;s%>4(K;;dCuyU?bX>@bRHh#U#7_R>@9=x09)ko> z4zh^pBPK-4+2&6#130C}1<}C-v6~Eoz%d4lSQR|FG`F}O*su$oJY8id`6+>^IRsIh zsT!KZ;+f(<4*(AD1W+Pud&|}D^#Q8W3J1{*t1f004j$W7LeX-&umF#^xhsi|SUEC# zP*KcS^7%}8*LPuG3X;{z={Xq3;S754Ro()DGCBV9Zv0z{$=jvQno)Pj z38_UQG-DdkHTkdjmu=kGt#4iUW&pCo8F?%!j*mbo%W{xHX+k5<@pX^5eAJiUkh#Rf zG9lT&0Xq*MoX=W#O}@|nq%qR`Inoy)@>b=_+{nqxBg_~=b9Y#?P2?Z*>hY{Wj+3cU zHa|wLMZU%$orDAj@l@*_kop*x?#O4g703qKWPR5a1V)C>B0K4t6g5luvJLXTwiBV& zF%HdrHJEMg=H4CU*COHJ%`*!|Jp8^EO!bZt827i2l8g(8lJIk142XZR##YzneHT8) z=)d_+eg5}>8+k4{L!sv`d}8~2nH~f;+XX3aHVFkhrmXnO3+I=HY`jk_J#wDZ&??Nb zSxtMYVj-}Kr}U1CiwiF`#A2tlzNt!0E&790bjed#ZnSax&a~m%d#=0K$_YvmZ-h zRc(?kSwGgl%TQ(*Y_VwU3h@9CJ&3Id`gTFv2M>qpW>++AVbcvBxh;hLIFn#DDHd=8=}jPqUhF<_)pQu(NDhv4);fY-*-b7KHsjxfhu)Bft_ z9i4+*=kN0p7vkKm7sryNv0x!RI~O(DhvLF-yBj_nlV{SX6z{Ezph+)L!?YpFxr&NG zqcsojOgN32XgU!4NzhE6mpk*i7!TbUCVmp+jh{OqOx$m$bK_z!@t6-oKK^3v_XiCj zG2F6lY#WAdB^?WAIulsz(4*Jk3gpjW5~Ff$3+aJzshgmnLSR$v08^|B5zyA&@@IP& zgGC^qlkP9yL*pT0;w?};9Z_i&KEI34&vA2e8+ZvA>7zYZ7|C~jzK8eJShjYTHH9BF zm6GuX9skhV?Y3gOHo)G{&He#IfTtYjndOt!4iI0AtJw|ch@=3i}WYQcal8xjePtP(PE)KMa| zbAK3RiWupJqoU8X_nxeON77>iTJbg_IT{RP^DoXK%ez0jy0*PX2-Uf_<=}Xce~7jNZ8(m(F1&>Wx)r z(o0~Hg^Uz~sKjEvda{RuPot#`N2oD|UQTlX%ZO9Z87havj7i(l)YA4|)2pFy;%Vr; zi<`%QS6%PErw?@h7VPZtA)Cy?xWT3s2VcVyME|cu0T)+@?Y~vd&n+JbX<1ix1s0=2 zdrkyX+~kh-1^9(`uNSzMPpv&kUeC+&`r^W2?k2x&Vi74|MN?Hcn$RS?gdTlS?vnFN~$7>Jy;=DjYeRtS@>@J^KpYIC|ewP z-eSnq<%{g$4ktO98mgDO@+!P0J?`$1EzTF z#ndz&)rotPC;OOP+(q1?L;>^Ce^9Qy{AO5k}hC7fYEmBI3;=9zZfMH~rcn zy@TxV^O1Kv!H9W#ISuUW%sR`G_L7-!)ScdpkZ|bdTy&TWvRIds?B5JVnmyTK%)D;9 zVRpgcFOE_T@Kk@2Q%qrjfmZ`&?D?iDHN`MMEGOU>Bg>Ex#i;#9^09{f{nxmF)lWcf zG#Xl_jMYOZ0HQZ^uF9^Ex|88M*0JT;T*?`odm`ZX0I90_RJ+l$og6Q+f0rj@*=_80 zaf_~}R??o)ADEXuLV~?}@LyD$rQ_jXmKd{GD_aCtVyhb zY$BbQX)kn0g9#1?^3Zr(U}{s^8m12n6{RH3kVU1JBx8m4jban&Tzoe~PfwJWk|{+G z*feea+G>&ZHwExbxh5y5gdorGTr7(%)ZNh|4T0Jf>7i#pvYcLA017D_ttpU{#|D$j zJrCO|Ce9(L$cDbH=^HL-?3->WD26q`&TE6q=e#ExSECqzH#p$VhVKF6?Mn zp&K#Kj~6gC4x+{Cn;sgTv7PD`ejF5xnm zMKgt%F?y`>D30r0lH$H@dU)`Tl=lz6D%t}bJn7>mX**xIM2u8%r1)Jo^G3lK7r=IkS z1h;B!FV<2nc6JWEd7iiXY>xZJx7*%up#cvzcp9In*6nXtQ2LUd(UgpIF-{#Lv z*vQ3tV6T;6&5C1d)06NJEt4~rp5J-gf-T}Ne-Xm?a_z48QluE}E0uo%|IvlV>*(mf z#aQONG>ImInB(Jn^kTV*m5eK`=^M*Ijq7TUjduAMW!CTR8yc!#j8_7 zlM6Vs|GJOr)mu90mUS9;_`de!9!lZgf4Y~n`E;-Gx<6irBB;K=lY8RgAaU4zuWcjn zyDL3m^H7+XzE+!hL4e_7lwc!cjZId#QqPa0TX%lTpxY6=l3*K@Oggw+=yJ#ws*}$5 zZ0j?jY;Y^Wxr~s->#C{Ug{?j z_9q%M>W-?U*6O}?h{4s90#}A*jJ`p;LxBh#Lx@0Zu*>b*h^AVH4ngIBLJ*GGl})eo z6XfLP0y7ocx_Y*bAAL3Dlq)N+6f|@z)dTGb5QgN}b@7~PsFs+SQ-@R4S*6&_@?^UReo3`=LySZ}*bz(B@=O(kq(<024dA8D}?y0PgmBR{*_DHxpV9 zA%407PRW1E#W}M_-{%%*@AKe?*hfpK$!o7D?jZ@kpkRR=ac#Onmh`;l+)+yQ9zJZN z8-G$m@AAblUhcljEly6$&EFXUR|OcP+*Y@G`QHW5a;5F!K;a?gOW?xId;=Y**q znMUF7$%ImvGBGA@I#tbm&?jYi6Uz3L(_Y)IKGx-uIJ?Da z=^s;NmMO2@3~(Efi$F(A`&ChAmfOG&H( zR$O*B7%3l%w@?J8=nFPOJo(ko0^(DEgrik~DTvte`FFU=TL5BqMsT=`(h=j7zQRHt z@sDc`8M<;ja-jDhL?|w{LY-bM9DQt*sIaDhN0MPGFJUb-rNHx1I3@Oe!w$cDkum{* zU=r?q#C^?ydh8sHfkIp5WrT)>Rw}$Qj4sa^^BsDSO`*T5U=8e>m0k(8m<;$N zYy`VAF^34dS%FX(W9a5Gjic8Wz2*ZNFFbgDh_V@QCCrg0dN42*h=7omzU2S5&k{$G zJ9en1Knunc*3vpZUSOe5mb)ym0ZJv_Q@CO&mTBO{O&sUFSgOd~bQw z-!^rdCL-nc-vs43D{k^?ot7P!cFt>P)}4Z&8?CJ5WINo?5kdC?yKs>R_sKGfz+XL`2NXT`Je>g}Bk+`ejMY^8>YB^V8F<}ypfC%PQ09K0 z)^ak41(c5Npynf>@ZG-}p}BK7WPYlpnsP(UHfzX;&PGo-E`&xPR2IU$xg;uU&@SS+g+40#OhA#1qPs z%DMF{RZ|g={g&b|&S=V*$=>%NmLj=bc9AaW&T+d>CNgLyn!7V(t4e!@xa9xy|;5x4qC_`Z+vwj1lThQK&MENO!)HE;u2n$}#xW{1*@UR}lV z+IV*#E>*ibqL$fm634=%aYDAP*BfO8x-(WS+qb&cT7l|@)H=)W|0Ppg-L5*V)Oq?p z?CF4;h}m|Mu;3^Pd<&tDVMWnqunA$5M-Cn`6 z`|q~v@mfQ~`yu+sJr0W6Kuvfh8oFj*4I$6!VbH-%>UFz43TedIr-9dak&sd^K$@5Vz6X z%&9*3N|){-4P;C?B#xp_mO@a%5@M1CF;RO*GH6z@3R6Y6R3shr>deh>)ZYd(u}ryj zjV9@1-u>!K)~%r8nuZ`={+c3wU`vR8iTLCr*_Om~rW=7yYVObbCIW!qK0zi|?Q|L5U}%OU3R z(@S!*BvTG1z9BMW&F&Ab$yR9{wac}mldyqaCZ8nhw3W8yzE}dpdIT|qcvl>$ug!Pw? zDVlZB9!-2AB-DJEyG60=52rLKcw9=Ld|Ds%XM%JS)tKE9wmWpL^vNW1Q${eHJ zXjM*RpGV@lV~7?=77aLihiOfKd@pVLC*r1hmKpe%kEeD{=?_pjj;PDvH!{O5kQ5_U zFCsCujmCkwbWvz3=I}+)C3)n45hJ)m0rel$u(3jf_YiG$P>#`s|Cr<9EADf_T`zX* z8$Ej$F$WbSYIyL1YNCNN16B;iF{0!Lyo5|k2r%rn<$nV0#`LKbrPw_`B?Ve3q(vA zn|@ZQ;TEuQTt%wJG3%eavH3^uqun1hb}m2Tr?Tl=IIHV06JqPyP2ZXZHI1uu)$ZBj ztLxo%^%)XC|tW3hX)of&H^qq_sc>=yo^gg?7^!QD{ zHvA`ccYz!xJ%joaFE7GIon@@34Qmh*Ll&C-a-eBS$sHT9lyPcPjeCU!Q{*ORKV!75 zCZl>(xXj?F0DcvQaz*eK! zdWN8+FsXCJILTLwc1`tQo`2TGoF7DA4Sjk=O5T}Y&&(lm%pUK4D@u_+8xP5D{g>UR z>GZt{2}VRH)YE(uOFZbC+e)Rv^314r008c`z zJ{*T2-qa76XVp3&pJwgt@v(Anw8QHgRazK3Z^BDYGs#JR!h{YurmTfYb8}1?G&-LLn@N4Hi{1o-04M^JbI5Cw5Jhd&2Z# zj;hhMPKUSX^EfBmvn=4{u-##K^LT8r5E5461n}^8thQzXi4AVSXR%E|JVQAn9`<$j zzQJ!oMOgFtnyitJ$Ua7JrOe75 z`exuAzDjSv!8p!B3Jm|6Jw1~hU6x+E+$1zFXXjpUqy3}h)^nPk1P=#Czwd6V_j4B23Y73|& zAy=^CSTcHv?Z8Sqg&s>K@zfJ1>C3I-AU^wN*%j|9jzXhs}ef#|THy zGuvj@OWYD{<7ZslYV8k~kHUIi8*@%Qr#8mLJ_`%(EL6om?A`^%!)g6&JIAxLhph{) zyqx^GTX<6{4;2F37#GHa(hUL;AQxg>i9}b{Zz^EjZd2(cYG~4RTBZP)!1^ysn{Jh}V54}=2vq+cb$e_ww;Q5W$ zro5W{9AatGHWO1X%fnK6U!L!lw6*GmFyEb+URb{=09+e#wKJ1!)t`8YQS%9`=1mT< z;z>d*tHEd21~;I9kIMmlk+22JM)09aZ4joED~DY?%3a4CjDL-p-oubM?t#cA5|izwqaStzGO6tlGJwhyOjH zo?kcu`z%`r1Z9lVNfj|h2|zmrHQM$#!CvPivC&GH#MbK$odsbCc z)6Tv-Dxyf{jt#e7-)LtW(poehyGR;TWLLb@Gud!oqA{(}H^UHo1I!AbT z6soGLs5isrMCs!awiSwrn`3w%mZR_|(pDqRNh%T}Mb3~vMtlZFYw}kf9U~_IzrEdir1!1&mCYpZ!l2T3c;PgZjUHi@@C8i&Yz2D~8QVtibo#X$yGL&5%HJ}zE}4=+#C4AY^V zF>r0M&Ss>S^o6PMN<1O=72(qL;qLi#T<4^yIu8Oow-)58)9+s2QK>}xi$x?QmXR7n zoh7vCKzK$nn1Of^AaI(e+r5ycU^W<+#sMd+|K$55mmthpXgZl&Uix1m1)ebVW8%eE zMWW=Ha&A%z)N-V~g6aVz*VmAKP7J)kdVb=m{dX6!bWJ zS;v=oCK9$k$&LiLyAM8|>63_*)DNA1W&Ig|~Xj$Sp49Fa)==x2m8P9I4ou|LuZn|{na!!=)YP;QDL!M6T z=>If~e%f##_B2w_RyxcMq%^py^cj;))qN~!vKr|-z^K6vnKpWo~Hd$xT3i5YQXNyGFX-195o zb*G@l!9+*MSMhZI?x3?i+j%2KMm6+zWXFVnjIs94%#N^8WBNm9s!J|ra8JCqB5|3) z1?tsKpT@!v|Ar<4T-GvE)M#!5fB2A;a7r_tk3gBQ($W`Bd|eVB^o z-EB(9MIFA1zMr955OF#DV`k2IGgmx{LnoUR?ZQ39vlxffEJK}18_G)$uH%ohJCKgA zFDDui-;rg_Z^kk-5Lin(6;BLonT^V!5bk0aAk1$41^;gEF~9>iWPCa>>svplRkadIqsHoIR54oFAh z5lTe#NRxD$%dwYOv{%ucHUp<-`cj6(*renIC2AIQ?Uo&RbyFG4`5CUiKulG(sf|t! zbIKg_vjQSupTQVw{&!?2t(#n2S(ri3L`ZW)CpW@NUUw_cKk%}71fTUQ+IrnqSOS3AafUa{P zzXbCktQx_jG=QQ}(8bEd52S_*Fy|u`nh;lEpw<)Zfr>VrbQIH`^E-6+@81yP!xlM{ zwy73TOQZvreyI_4HTaX_nHMC@F4>Lla(p6W^i6>c!KRRNX{HqZw4_^(Sndvm_Bc6% zIweVBfDL?u=Pt{(QSYatepr^`cTPkPz{#(mJF_uK5>lVMB1lOC(Tr~4m9PHsS*l1_3K@@5`gIV$T(6&A$+)GGbI$a_R8_duRUDLI9Qm%h4Px z>>}Vhw;z1A>1v14U7h@H$X0MgR7&gbqi{B(c*VLU2YU4#bes(m`t%#%jzxk_MxnV6 zqtSQ^VqAoiy-sFm^ONYYScmD_EI*I->C#alGUGre>0{e z{Z!ige91b%r1Xz;jM>rxE+>h@C~X=?A7S|Px=k1~(96gTABo=ICk#QcpPu~K*=zZQ zL=Y`FrI}acgh>`yH-p}UMW0rtGAKx0&kuozzigX#?)hbGvOVLJkme~r#@RiE1v$nWhgSaodc)Pvt#eh#JBSn4@>tr;5v zS?nysEV5EbDTE8BSRKy)bqWW)#rN*4!&gn!I{wcqWnFNOq_N+IVRwm_GUOJk!5#2G z!ZhEMdLeb94^ICu0~qk{!J29s^kW%+Z-M8qDSR$Vta4Jk%9&Y$89dF*utVc1{O>rosFs;>>vKHJ z_pub;G2!PqP%bsSWq$eMd%=H55fS$Q1e^M#P96Q28FAvJ08#!6&SlPzxx76%?h?O6 z=`a{2T^^S{%ob463~6RY-hsdGWiBI_>xm(EXCVE>`4i@B7EW|B5cPjFol{sO{NKi( z&32ou$(wDvNt;u3t_;phz3(i`l_`Dxg=(#ATun4@-xsGNwQF5A@CZ{A|uVzM>w0)alXz|$E0 z8=P(MsWk{Nf(wqk%ndGVo!w%^IpP$8J*N^Sc*Rdtotag{L5h;H0D+ zz@&9`OsV)X^n+15JDDV2ap#&%t#saU<7%!5siOlTtO9FOd4(wU49yu&_HXmm8gw<3 z)>O6*mh*g}WFfAPs1pGZ-4|2H0R60iopiP%efWK~NmF}-{`Kj2^9ZcmXeoQo-@edw z=Es54X@#&3dTWZ!(v-*BANQX5uOOZ|=#f}N?p27=NcClaGzzL$swj(I4up%;dDibn zYo^p$oCK)2tPYFEp4RZi8fn_sSR{v1#0v@wyNj5FvZeDkQO)lJD6ENb1gv(e^WCkN zG#tJ=G1uyK=sk^DANj)7k)fAVs2arB*yJ*GOS^L-3DS8qd=aK7S`$aH#idmYX@WN= zkbhYr_l+NUVlR7Q6;<><9Y%p0Mc-;8kh1R<+XA4mCD$fOc9yNakBqZgI+ZmK51$|H z5qo>ME5SpCqA~?|G8s|9-%?dWII}5dsxkFk4lGsmmg>N-*GCSmN$XCsI{ThRiV=xP zM;U)~4A)tjIu#mr8K46DB_v~aCs_~?%J4tqZ=hd)C|G{bqAyh^O06^PU%~Z=zr`jo z1*(j)XU4c@mr`FuvQSp?ng)zHKF38 zdd~fO1n1;cw}_nJ-ihZ7Mc@;aUWUib8*JZJ-P8U3qi4g>?bZiPM@L7i=oR!o57aP; zTeO}Y$?X7`3TDrh>k?bUjq8?WcH8IIz@eGdq&(O;n;9+A-V1de5%G<0~t;-npzQLZxiA^J9wD0CEcn zyl?vg+4FZGPxe_4JhQZ4d$8WlAZ0dQG&T(zd{N(4h2yW{7^dapt*VNmP-#Mn2s-Jt zi`UqS_n$EWxxRx$!QTL~v>1izQa3h%T%>@&pF>R z66FQblT}H{-k!|7RxI_wn8a0eT17Qfzl5*50GHUjIXQpGIEU|+NSGnihsJP}mKkeh zS#jhgok=)u51>y)KGGXpyeI38Y)RFesG;{|^zLe);zkczXm--~ga`yZ#HcK!M9OPh zudlEF?CLIGgJj_m&8n%|3eIl0gC0H#T5c=x{ASj5^B}s)Hc&`Cu+F*~_N)1%`b=fj z)NWu|6;nc@T2(D98#}w6i}x;$6TFdoz0`pKy&wvFIqzTIp(kZah>?_89o|1hD1yqP zzDag{;BgJT36hn`Gr49!RE|fKe>QNO%*=D;ieQyobsm;V+xl4iSDv(dAAR*cA&NnI z%s*(>-fL{~tJ+m@Y7;UY!zICGT|ga+?8V-Bh;Xr;|TTbXoVi9Ds?T#52!{W7LGAIKn-9 zOYYoXB136hw&9E{0hM+gB<+trSg?tzs?d6Q-B$x5SmHSaWLr*Dj8=?&*&83^UBj*L zfeoXf=aT(J28x?`o5JgdjSkNXk^HlNE$b5Hc=Ye=(m<{ss@@cmNSHvn*_ucp#Y#7A zB+Pw>of&%$UTqK!v!W*u?GuDFo7a}hcPkuEIv;6|p61S3nvDVu_r?bnL@3znY#x@S z+cHQORKUVio@5PxOT%xwgg&X>KvaSNoem%6Gn861%a!Acig+S;9ePR|V<<408zEg; zery&}n6&(_v$0q`&GWx_9@+C?EKi;C04gl#J4hMn_tzm@%n~@#)#85tcg zmqHJ(ypjEKU zRl>GVtE4D1{v5rz*08z8H7z)HDW-~LW|Dtk?|OdzLBtZCUoH|$(+CMG0L9|Cn>>Ex z5gQWL;8OqlRNNXpRY9U-ZMQq)#8c5|I=XerCKT!UzxrFx_k;?EUu!JY_2sP@Sfm|a z!Fd~7$Z8;;Vc9V9+5^@L@3Cuh)$AkBjRHda+*h8p`v^Y)8=xgW^#UlYE5}^r;|mO0 zQC%^5OnmIV;+}Be8z>Qg8hzN=-EUJ^6avXZ;(uW6L;!P7P2za?D=*tX{rlH8YcN`8 z5dy(5OA`Ra5PY=(&AMbwuN=asH??+?8G*m#&qhTd$)`2PtlVMAL@dG7A0wr++6BS_ zi*HFuXnGx@jSXwh6coC*ijMWRw&J}3KYX$kX>c9f(|nEzLANjv_-q!=9ol%55n&qH zk>ITo73l5jdqjI~7~OBgTeVX1v~*&7{DZ_}fB02#$}L?3kl(z5Bj5{dGL#SM8g9|^ z5T83o(*FF4)-?w7Nf=!qaUS~ZYW|eClog= z{m;zK{hfnZA`7c2L?bi*n>cyt&061u)wl8Nld<_+7*o?1J4Jv)U639g))s)|{ADSv zmc5Lhv_9oPQ8~57@)NFnh5%Jr(oK^5nY^=koaam;ydm0euL#-_4(x;E`_FB|)gxN! z@g*o~(q^bq3-@q%yw4fM_^Hj*FXF&7WqO_qZ&=Z719p44e0LWMygPpQbX=PGm{n0t z%<$^B$5{exD$y$?8aHY8wF-%6=^q?S*P-D>4JC1vu=3Wm)agwiBpt?LQve;pNVM!; zsa!cdn7DL2jel9u)xPY6IL)JV`tz0(WA;yzEqB32bvTR!HLA{55{svsNp?U?+)yd} z(b3VL;93ChEnw5AM}l!=*Hi)tI!A&#Gc)s3dql1<@b|_A>sD{4Ws5OazRD*KW9F7T zXeM7(Pa1luLFq;k#wrK#=;V|f?moVTF0R>Tgj04yzsT~>hvj%0a5NeZbt>|=G#?t3Fbfg)!X;mN2JlX z2f8$n)#r8YBlOTs*6YFen3TqO>DEWV{MHT`ZzhK9J?UBNjoP;y<~H{4ok8QMm16G% zPz}`G%?osY6X8Sf^|u^g(sH{X24QOGHaS)Nv(GLZ2uXUB6gorPkO{QNh`K0I=VYYO zgCiD9KJcK~YrrC_!8A0Y$1nkUbQ`AFl=sk=R@-RS5Xwd07G)84iCS`i=#=DI^((CoBIRK3(RZ zbaP%cJm95H%}m+#A5~D{r*teFcu{0Ar0?#*;>PKYIU+d!Q6MRr;g(>xQR~BVB;TZ4 z*54b^RK;q5mbKZIKGnO;L|;gl&4F&P29KBdTqb!I6l6R-=&w1r%lDCZ<6UL)8H%WwR1;LkTW}8W?+V&4=!9C;>vGAc zP&A0!D2x3Ha3xK0qGn#)$Y2EHodNm<#-tb0mqGfK@8b@)W z)QtHpeaXkH^T@Zp$&$^Qkj0JxY*$5+5ADSz7B~-CsYmXF`;5vl-(xtmMf z>S06Z*Ua^w$o_wbV1dN60JjLVuqkInnG#JH`kkIL~Y{`=JNyb^#=x6RxNUFG?Us&Zk)}Hs_xVaBi~=UT zyAN(oV;239MN33duE=5NLm~dqA4uNn7G+}A(N<9OPz7q~?rBi-(N#G%d_1*G4lRBH zdQP7UP_gVDK?SG<3euCMv@cSlgi{u?E%ws5h8vyLm)|t6HEYg;+FP9FaKcwyb-Vxu zd+JsgC)$QcJl?vnMEgZoS0=d&anhbSzDPtBwFV5Clq{k@Zc#l>)*Y* zu?87$D|QijSVJ&c3fsi?XMi)dilV}P#b(BFLXD}W^Ivuf;C(a@L|pnSED#bs!OWSD z8|3cC&QyWO6`J6vV^G3*$F^MxV{y`Z>6dTQSo{AgA|95A#7ptVD8rL zj0TS>9f!-z4s%|nwPZpO322GmSbj#IPR?#iDvY`#8nT}~!vK}huJ4hl^!R8c+h&Hv z+x@;ck;TA7TN6KhgOeYQhNWRi=9Z0UsIGo= zy821~e-y$D!&xJLz)c!xH>rrryF21IKQ1Zs z>a!ek?B8uPpgujb?#6lv`z3!q+11VSC$Z;uvF+V^g7u9aY=eY3pc=!;yMa00*ARy? zdC%y{zX();4lvoEriqvkO=8p+ElL4uQ6On+CYn6H6-K=wRv0}J1fzaI_eH|V=8rFn z{rwjh9ZBF*B`$xtA3y^M)F8pBa*$kht7IUrc(UWLohnX>?D66gylE0*}WhkJR|HRG-clD6SU@Kf*%Z#oiLfQxiQe5=y=(+weGb z5bU4+vpAdnUm5hZZ;O1!b1aXkwz;O;U%ZqAJqZpuT1URf5uWaO9@F3L7fEgd zjL7Tx13gLY6!o)zuC_BwMrdNW^&Rb>JMMq$4fc!oL5Cg}laoHeuXmalxkjPu?tU%Q zFf#O_qs1$?PrJB|j5pv0r(eCj&}8`Jk6NYwpizQMFrQ;bKy%5yt>92*LA(KU(~_BK zNP)`L9|D*}9;>vegYXui$>^Dfa+~NI+~|QWoX1u>rc`IL$XOX{LhW_1W@dH&9cG4A znENa%$m$tbI3|4kM8VxsLoGdK9y~k`YT7^M;Q`7yCNGeBpJN0Bvh$)8SD&20szDnO z2hcgaHOPC?(3;YEpA6zG=qAc%`n!*dNvWu>as_&WgKN;FkLY{a*6Uy<6j0UJ=a(3( zQRO>Oj4E51ZbaL{8NW95M@a8X#Rh+jLFr^ws%U~agMva+8=neJr^5lde3o7%as!k6 z7~!_aF|2?jnesaUM?y=>ETe8bT2?20{@7Eu$Ong(X`!2*N$tqrT+;sfMj0;2)a57& z&{bh}C}fy4o<%6!;I*zjHuXIedKyA~(b60G^nSH%~ty$Bvd-{L^_Ws)~Vuj-6 z)hESpsU{!H@@Jc_IcQg4m_toz!vqFU_s4g5gI_k0m+83|K=q3m*|DJ);2I$bt1$;B zf<)6OE0axYk#ZYJxK4IyX&v|F+tKxTI zMYgLM)r(myr7l+6Zuu7djn^C+Xa1n&YC6Q8w~S)$JD`Cs`LR?|^H+HD{l&Z($>ew(%MCH1|to6+$oK z5MfnD|E=WAP<<=CjI0&VLVQzS)xwFYVv%eMBIQ~aM;Z{Tuu1JPS;5OwsH7j?I%=lt<$b-QQH7wq=a>1@Bf*vJ?8xz z9D1Y@?w|SW#ijoYP>4wJ9uE;%_~v&vSb%?D<9$3qVfF-K{}4YuE{O^D17E-OByg00 zwR1+q?Oz;at$Ade$8I?|V*<7!4^d*3pxU80SU zxWL{!{mEM_9Q{I_)b)RQl%Y76U!$sb( z+ah)rI8CjRJN!bTLqbq)!&%PJY@vr|uxK7wI)z}hr6~hCTiLwU@XP;SLgB|X;%86tEBEi66^X~J0s+#ZP0}i;0WAwkG6a8#sRW;mJ){w*e z(s9L`I!gnWFM9L{#e=c0fz-{rQ9PUw$&d{?dInp0y;0 z?WSGAmChvX)8AKplx=XEPtp!nuvg{xmBC)zeIs-o=A~Q>kOuyo>86RRjakt>U!Ch- zu_sX*hRV9!43oZRIzItex@Rv6vEb3hE>`l{2g>0o%z}{d>l5VsGr#^Wvz9GTm($O2 zBtbv#Xl`u_qLE{ZD=(@ z8$Tev?`^zP=V$##UtpZOIE}K}HjP3V*&{TDv%EM0eQz0!3HQ41Xs%B)2T@*9Gt@XEnda6l9$fh10ea%zst z<01YLMQqf)9UaA->HyBFB0r{l6B2Z$<9&J7)a5zLxJU$^-%r#Jl=wh5ttGp3buiD2 zz-7ZyXoaOl7${cR=^cd+TWRGZFW^Gdh40oq(U)o_|de8J!p_UUD^hD>+ zvEFCWfPgim9Erzwe~$i%RxeOyPp`X(Oq?&%26f*1;t@O1{bm%LH8bHd+UNZ5!M%~N z5fDdzJic+y0}Yi32#Aeku^1KIeAr$@4+`71!_8Cke44P$7?a~xnY72%6V?#^_Y^uS z`Y*5lJ-5F|$WsfKL#9oCK46SCbFc(rG*Q2lMR`J=lk_BUvpUMHhoZJo)TX$uqIUJ? zi=37E#Q5pg^3k}cg^ZcbK?@`M`hgp?@p7QOV?~)6@bMonN-2du0)4B!Zo0o-n-T>9 zh3i9@dy>`4uXKO;@+&*a*}8IPVvs@HwWzEza|uZf+rFL_2<%j6=H|GK$n7o79*Lmr zQ1ZaJf0Cshn9d8s1QbrO*@2aP4Pp(J|4G60)G^N?)Tr3-wZm~brm|9wB?d+lFOP!# zX*YKE`MUoD_apM(6~%Z$!oh7lws8u_w@m!CYivQL7yra*r8JN(DOvo+rejx84by`I zRn6?t!ga3gT86m>-F*@1pB^SNREm%{4tC?7ZG!$69xD5SkQ+w4g5~z*x6P{fDrj4$ zsY=dpfWiHGWP~dae2dvq=-$>{VrP$`qLM*$=mBhN^OAD5lG9ZjER2nuFQ(xuufwroOi z+6q98{25&yp0o&6c%3t$s2nNHmJP@?Q4l%z3|Z&(dA*9c3wCJ7L_8 z(LEz!8>*{ssCjfz%2|!J%<)v zb7ej(&c-@#u5vr0A|JBFYobp(1s6UBp7ellAM_^#TzB_HO=7*To=!jRzrTBr*?SFH z8!RwGC4+W;SuoA8=jv9qc5U87pNWKbB>O`xY0h)!7Jc6|eY6=b zjs!+u?xmufiJr0XkA^nBN&sPh-+V?Eqb;}obTf3jA3ydiJ{OA3mVN=Nj zIGBJ0_I_%y)TOaFf1Eu>9lI!B;<1)ei6GmyVunS*>ZX+yZv0%E0TD`M!;or7Ko7EI z_VOo7s{|C_+vmv`>c%VimIA#*1+v}K!yE#W_Z(>F&cpK~&5ozo$w3xY=R%I{WG*o7 zYbvJu;{_&^lGT1oQ^OeeaquVrP2+ByHJ<1v{z-7uC~18Y-j!u0^NT7o)ZviVj`pEF z*7j$Ylz-poZC39q36uFlB}AJSsv{wL965jYT_sqmhu&LV&E`E3Cc zcwJ$G8y*m4Jo2i|t{>k{g0$!GhEk29G%G3jw}&#@jg)u)Y`I<3)xFhHN5`-?=*Oqv zH}-${|30?f9R7FX2^^UOvYGIOGbi+<5c=KUyNtYd1HLFWZLZ^_AK3ay>P!!hNitK_ z&)A&v21FG!IE_UgO`m0w7UsEnz7T%fytm}F;l!7jdF=ZK3zfH_;#H6Db?C@V7RYk+ zIh7N8gH>?|dMufQyz@YznV>)@H{LSp(~0SttB+4)d&Wv2sC1!)L&GxbhCzGedBp)lq4Kaxd(Lo2B;K6YpQ!giDHLp|1Lt5I!vx}FL?eP zT#)qnKNEKdng$FR1#G{^HjZ1O`MFxvt?Rm{{DM``-qf75<*6m9Qp$$ zj*1_jcg%6U7tN@`SwsS~~GU)W3p zVEiy4NA-LYGIrX1E}ZzQ=TF4!+aUzzsyn92`_u%*7`0t@qW5p()n(iR+smZ5XzU}J zI&9HWyLpzoGAhYOcz$fS&Pbl~vF_s&`hUu_Oa4$lJxqYM6jUHdo?>{_$HS__j|soE z&LQ5O@r0;_!lI*xxXSd>OU-AUJ%NezSE>E~kk`6d7wktj4hQ_f8)}X1W-lMm8z%1U zO<708i2=?()r`|lRC_{jGF>9J2w6FT6W-W{-)e=IjDEI?Qzh9>*>=UaZ}=&y_%{Zq}RDn9>sY)V}>#rnGo8>2$PB3MSTd@%H>^|sil6Wmv`Urf1G_wHV zmV7$!Qekp!0Q>K8@)lHshxClC8o#CNq4bBc6T#D$Zey*A&3X#U@t~L8@pNs zb=WQCt734wS<#o(?R1J_I!|SjXaIqu=Wx z`of-EX^p3?zPUWuS$=}6Ty|fN0ecY3xMyW>7p?F19dax8Z?}Kv-;0>Dz&WqwN$*r0 zly&Tmh*gG-BpTJGhP3yh!%$wK7T7MH2WigaRYJ+af`eDx_Tr`!i*Hj{KT-v4 zn>jE}i^;~X>fRT44nu;z)(2N6YpjE}v0y~si33sg2AH+5(={;nQx^oTk>g2%3j-Q5 zxZ6M#RAB?=ecQK~g}2u&41v$R>`xz$qI)NMEwlz|>_B%wdfK^V^AQX*O{7eZAN!ov zt6&ePluh=Bgg^VJaMH6z;7 zK`mb$*dV6P)XyIU$o7+k{dg_m5wdv$x?9+hv*s|7k0duW0So)z0R;Z#B z{)rL^dJAhb>80h1Xg>jpx^}F3__vDN2)q)`Ev2ZSVgMRm3z)&T_h!@Dy_K3M?n)c2 zJ-tRvTM$s|!O()7rByg;GMjInPF9JzAa-H{xDmQ;=Mp9HCfRk&c#~Ipk|LS8Y&+hz z^SspCW=4G1gCRb1wajGo* zmEPXpN8{+@*^O~#(aVrR!`Z-vl|3L`jo6fFF4;YQo3C>0>g<&8=aFbF(YS+C&{2z$ zK>E~($2(C>(Yy0kgu|$!hF?}34Vz~OLyR`%NM*2jetZ}E{qL{C0k%gl`@*N(-keO#&r(XLELvwk2yp&V>~=PRcBPr zRE}Kb?DTY93pll{@?UXPS*kXFyECRYGBSI1e+szei+b1TZ7R?sX&tko*bSmSGJ zZ|7G+xb(rerB`}4EU8Kxh$!hT7c>+0&=SncTWIMDsTJo^E`G1i6oIDdA$}voISU{E z4v|(XICPrzu!WsJ=;af*md86dE@#HB?JDW>ZOlR`U5hD^SUqiYgCNtfeT7ptufKLI>iA zg_Tj0E_yK4BSgllOY1O#ih#^1jTCl8IJ3MYi1p_BWDno76ux+FR7|PY11h;{o>PVn zSydMPgFg=N(o-hYwfOC8Y%a(U>M7KdDyup^igVWHRWd-@7gAE^A+Vw@PM$ zbBuYMf#{<6@bomLvYRz^-oA8_2`DtTpb*wz;z{Y+WwdznhY!2T^qkP3kL|x2}Q1YjmiXsf%AKF0N%1RFW z^Jzy(_S^hxn0@7=`?ivsi!{k7o3eU+r7Pc1@hEr@w1;#`*wnt$49XG7ENW+c^QGhjMVfK z4$iH=sp+R+-NblCKgR%LZ#Y_@BJzIlC*RMeq!kP<|{^?OSTZVWXn%qEwysg)j1Ycap*ZW5z^>3E!3 zscCY~7M>+!s-VQKula%>EnFEm8CmjCOf6mL_mnI&^&4H1ZE z4qcP<4>9ExGWTgKVY1m{^6b!yHUG?b=^kulk14vFR%GW_K=+}=`2$S^Fy2CX6x0)w;z zb(ySctpKwygb8AnG}=-f@EcE2Xh(=5B$6dO9G5h*qBu)=M3pXTOojV1*zZ(o^3+=e z-2Ueqt{o;%YR&ffaTe6Q)dpT4&s%u@Rkr5h?XH(z+9zsoQ7;~;io+}rm8zCE;~teG z`rBH9n#{}OUy3Yiu02s=&YA7j%5T+Q+iBdm?9!o2@@1mQ2YuA~*S55PO<7gs_lQ{(HHEU3 zZT$rbwaskLFw)HZ+~aPIiKC@i9(#v)F66URUqxCa(0msZ$10BstF9=Ka^~+ERQBBo zUWarjbb4q4$oIbF9}S`9h}4B!cDq9*F(te8s=)PTagJ18QFK?3---%F-eNcD*c zeg!_tI{K66w=D9Gl!le5LV&%BkJG&Y!O{pVqE>jL$9B|OD1C2(kn0tj!rLR4EgTWM z`s}>`Ih_o1?|QmY_DL>(a5+R}{eT1o`Q)QtKs2 z=Pxb7cBNxU&`Io57UE*D3rG;`Rjn?4zg|gRE+|e;cKg$<`UlyZmIUh;0M-^v=Q0sh zHBwsSje>lXAi8aom}nkjm?N3<1O?ts^1NsiG0VPt+0%v-*J@T|;~g&D1FSR_tgC9G!*rNO?AxdjA{As9X5F*nzE3F{ zYEm*bht|D?x#qI1A}+MK!d+5b77?0wIK?YFThJe=7wrM!5qY|pQnRprb0pg>j(r2t z*BcDHiWY|^$QSwocM-&%I&5)(hDfA)mPb||%l+y!C5nwE6XNjxay;&~7=Se!ctiaHIFTk|>YNqQ45+?6OHe5)pO zgVro3ureJ~^bYrVOE3Lnrf_;w%ytj{o$vF0VuDsC8&xW1YF5Vpu2x zq*e?P{g9jYH2?E*e3v(JtHy7nmB&T^C!E=lsf#P1ugamXH1`X+dLQ&^2%Tg59o%0^ ztD)*4U^8gpl%Vrs&`tu&FsbjC6idx8c|U%pv4qmkhN6L$+EfZ`u1F+){=n7BBT5bR zJ}|NEP7o*cbClYT3i;xsbSE!f>0h+?QxIod{12=-u@NlWH;FC2ucx2>F^Q`CaICu` z^AL8jN*bjs7NKdg`3mOgijIHJ?fd^MfTcitm8%K^LBOt|Kf&0PO1T!!_u=a^rGGW* z`X%J zl$jkkzxy;w_PJ#DUNCY==w)Pj*){*WOTnDo-Ua2chg?YozxezMZ{Of#WHtm(iq8qw z;S+}?t&WJd`J@n=A*5|>2@U?cBzD}EK%f1_jZLo?R(42(*3)LT81%36=0n7l<*U@8 zgCbp&xr%uN03c4sF{^%7Q-W9i_|saIS0uaXu3>~&#(JcLeiYDCh1KLo4?;lZS;&UZ zMdoALn2!j1t6W?s^ehZUrpEVMKCdy`%U`;;woRyW9D*0M5zNa$DGivj8EQY90@>7`YY^+ zn?Z56x2WyiLH?O^3ISdoGJ2|j7}y{P$df*yPhUrvmwC=fnPB*;6mIqKn}|LPqof?; zOJ8M`=L9Qs39(Dys-^Ial^#Jf_yc)*BgS1oZ6apexns~eqM2m`f3wXsiQxM1CFj{w z_RN3N*vQ>8P+3QQxh(AR@Q%v;>N|lCbFkmNv2Y{jHERxs2w|s64_i!s@e#b~_G*>Ye3$5na$D zGvW8m&3z26LnpuAl-q{6cR){qC&$g@qQho?zqw!F=vZOU=Ds(V3OB8ucqk<25WU+S8Qv|jYxm-9Uo7O7UC@;oSKp=>l+YrOIxY|}4p zCLFxq%a0YHR&az@ku<8PR2QKF5d?{-(sAyq%zcG!8~eeRJwG?d6*PVD+*&v}2klpb0e9DTKpR z#u@mUqO2(bX*v-6*sVa*S=B_|NZIa5D#JG#Fp*!nh4rrFrrbDZ6N+t4L37?05m9Rm zD`*&PW@DNJTDpF^aOqD*MN*^C$0G+{F0c1gj(bSrT$Y#@fwWNGLKKzFS3bB{!h;I+(_#+no0l&aO8Ieu36|EmQ|=Tu%3)%J zmlDi$XUT2~c;wuA9P~{Ns}wczan0_J9P&Ss*o+9Ic3Y8}nQQ;b&qdVbG&OdZXVptM z{O~9+B!NPftQPbXA;qMh@fhVdKxc~&1yj0)uAVANK>322#a&FRG(x7a?f*I*UmH@v z@)BqTYq`ui%p9enL7oL+3ZFC8{j2qmX1SSqHiAKZXs|^ zazcQ0<7>?lNvOU$7cOu0=f!aHR)9Lb|CTFq7#kJnYd3_VUJ0=?6_&|HMKb<1I}@EE z;#-}lZ5$UAb=6w-{C7y-5a7gEs-76)^0N<#sRUN{2nJ&eioZzJ8~HeeF0|tl5D;j2 zXQjagfs?-e*%(8NRCJj3?>%&Gv+fgyw_u#)bSo{B`nZqXic2_hT42!HD|XAb=FFWS z`F_>DI`sWHaK=$Iyg}{&-gnmAZ))h90f9)RjZM$X#aHfb*38Vzu&Srs$38WVZ1=V< z%l<8#(xc;J>`j5dt(GkpJA-J3FT6){_dVT#YUuKxwzZ|s zCqi(f=KFENAYJMg5TvlNnC6F}zw;8sn{68^TxGe-OUX=`y6!GuA(*dt%k?sB2dunL z0K076yj(yJDuko9XTp6-nw?8p+6n~*5!?@v;SzWT#w@6D z*vSfG%Vy@7x(-NeyS+3E$jOA`!xK0^0x^&Uekvw9_u7kpGNH^cW~%hHxh(emQ@eE7k8fj^1@zZa3oZr~c%Yy7t2h)QupvRpv9C@<<#b$^KI z8U8E)-4$Lxgc>znAKzR^5;8p4*w~gGd07rU4qIdijl zLmyMG0MNl=fZ^AcPNQPjG;LLZOe|L|$_`=+rR=%3C1$Q%_e>kC}d?k zkasVTvl#PxL@+1hj%)ktBLB_|O?fMZF&uIVn{x7!Yfc=f&t%@Ug$srBC4aICwm ztJO~y>Bg{qrpb82t)uT?{~Rw}o&6dmExk7ytCgFpWH3c`?lHkmyU0ie+`8_xJr5%q z7(7_H^_2vzX-UaKCOgYNa=Hz;|Pd#`k{Nxyz*BtOBYIx zA(G?{zoT-jumFT!COflg%I86R^A$&lO$7;xQZmgK^7fZclxRYX6$<7>O*?S~So@hl zUyi#ifmGA_Z%b;`X@tu$WD(>fUEll6g&=@BWetXN!$`oGb@$Gl za!>8w<(&z>lD5y|y-rOFadj**@D(zl8{CLc1AFsvil7_jZhV&D>A+-PhJ#-DblhM^aFpPm_ruj%DMmO z+Tz;;mWdqThD>*Ff1el7I1?=`UMxgD{Kq zse3JX0zAfcDxLw@?_73x@r%DRqc9-DUK?K2U;^&1F_DJSyImKOgrEU>{1HOwmFoBk z7JBY!C@_uDNj96n(`)Ept%KWZx-RQWwlcq1$kc73ScWc9IX@|}KE-l7&kF4rn8)ZY zYyGF4PaxF0uWLJh$ZbVPEwt;{TDXtLy0Iv`5DB^V2~jat^}V?ZT{~lj<~>RNbF2`! z<7poUO_HYBg#0R1QMv2dym|pcmhS_|3q^k41C;+*>Q%w^(?$L78N=-9&zR>K!6}dagblyP#Bto`Bbkd;1?TISK++qDDW(9PPY? zntyX-Qy{k$Wc75m-Q0 zROHD5#0RihAz{cm$@!H+CkunYoN_<~1gRSDXp{=0sx@*S12V1?N6|@&g^KF_86Ad# zgu?i=mI=t^u3SLpLmr&`9D^J_b}0tO!qM^=x4R=RCb)VL>!5NuCL^>kYvSRv1u~`4~|Xg+(tlGV!exf$PinT)%(E#gk`DN=Y|~ zF_PtF0tjSnI)+{cNvP0DvLa*eSlwK+TJ1SoOgTD%FMt0J`0AJcz|Ffom67~Zd`w9g zVm|7+p7Gj6%xSZ%82!VBkAI@FOSR~sVlKw?+ADDz4@lN)M33rdNGq@?b{A+dI2e|J zgKGI6&Xm6vhyNZPrPOE$zf1%L#&ksAqoN}Cp5EQ_0Eh3f@B6XF^+E0q*mxwt+KD@i#c z4<`$oz8~woC#!@!_VV3Jym2_!^4-rqqFgQ^Q#6}3o7)>sA3qi+?&Ryz)-~2zPEJnc za*lCWs;76zlIeUj_-s|fbXrkPOHR+vN52S@6cfW9xA%@b&za697-P7)x}v?h=F9K@ zo&{~x0kHzEscUY^xW)rBCpSKqOs(YDU<0O)PakO zr&Ps+%;dC9Pv3c(E|BL@4CSn)?>+ndUV?6$mgVso+x-FOdQ3T^_lnhaiw~AV*O8S4 zN^91;4X@s>C?-oT9-mXUj&0DqYdqzy;cB(v_1%WsL(RoU&-wK8&&V>%^|kO$hE6_D zp|rz9hZ>|D$tZ6qkmsR$>6D8nPuQ>4 z++N?1WjUGAoSmHD`z?uxDjMP8nu`#l{ zTd`T)(bjva>71&X;QEft783ZLzQpF4w2jPPT@nTZxy-{h6W|i2$48CPiC-t0H zDXL7TwI6BqnrIAZ+c~(kr*~Y|ro_bO8a7JbmWqcMB}Pdl^lk zV2#xMsEFPtzU{DSxJObIV6~4dswtm-`Z0g>qu=M}zxfIO`14=zzy5Du^RIvWC!8G} z^V6UFjHdQ{^2PVk8o~*uW>S#VqTDe_dU^k$hxV1Tvop%F;4XBuZOum?eI$8?369lS z!SF3bAj@)$j<~*KzBuCgW<`i@xVc6z4^b$HL+x(gQXhIAe~=NKCo5+Bvw!|Cs9ncb zzkLCS-_^c6NC@rn2xUdVwrg7y;y&MX;(i?zbiSjSOu4zck;|gl^Zxx?R=2ktHVrz< zQAI{EoniBgebYCzk;KgdgUMc?Yi!b=- zqv!a(<<+Zi*zFEvc}ZTBWL7*&hGKw9j=MgjG!L0qj*gEh%Ti2M>keg;5oVULJJh^= z^_rWjYeMox%8dB^l$pg4$+TkMG%~3NN9-MiwsO(xBz!ee3{`@4QA#A~QFiHa**jbe zw4Fm6`L}h1!hq725Dje?*whVu-7w8do;})2 z4a!Slj~<-o>tFqf|NZ6$tu=>61`*$MXl>cI9V*MId+{TS$q~Hst&p}&M(i9`8@jra zSd2u>k1>+jBB|lT8p5Tl!{N*m0##koG#&HlOeS6oeb-BtS&^g5q}mHHk(1MM!saN% z7Q{J6p4+4>4n$pwYRV=@Y6C=x0dh{nDxI&<#g2{)b7-WvE8#45E=XXwQp~1P3M{3~ zFeaB0=sZO!4OAa`6kd2fY5E=!25lJ91d6P{_l|mhpx*68%C7FE>h~L(dq22AHsAH# zsD5gltaojZqnifbI}tf(S+RHqviQ&mMHpB0DPUKPu0|u$O`?f}5EF+f5v0}qx(PM- zWDS=bW8>nzG`bj2I@ywVFAZ;c^jvhrEmY*x2y*BfTD1xJe|o9%jR z_EZv{sE}^6kbXZzdK}6crt=wf-EwmWkB{JkkCy!K4}Zkf+gIFNzNGUGqNfX9L`L{z zAgrjSbBq;#y|!%$T90SQBSGSd`xTW&lx{^Pxw|2HjFMGXjPkQZFMj+XwZ{>;3u2If zb`?W%jE|V%X;Ambrcy&wlU8%-eGf_}TZt%ZJtuWjrS~Z$u|tTd`O?y4jrI{rc&53r zvXxL86Yr5x3A!F;&N!l0!}Bn30b_i?hfRO(hR+=usu=I1!(v)dBCkO}Ng7g&1S9C} zu-Z3DCj?9-E0#onNBkdcl}m&4`23u+rx*O_$nuXr`&)kd&1>Ghc}rI}T)n^Mi!Z*< zfA{bI9h7DAaYHa>#G$nU%upUXejcMvYc>eI&N?8Fghc%mc?|&S;|Cw{rWXURT33^^Y$%$-%=kW zUgvJLp=lf@cT9>U=NA{$T}$74bb!{wFMjoF-o1T~$t0uChaT@E(=ul|o%89SBPJ`TD!G)Zsv`8B!{H!gbf3}bp7pk7`{p$_S8sXr z?1GOz{e<~^%BJ44TW^TYGnq_f_uY4d=qXH*_QtY?lX#aQVnDJR^IS5`b~{hkwYU(- zs|iilvEJ^vyW3!+D5nZziM=3@F$A`ojSx^{AiAE#e2O41K{71s1KJGShX~FSwZ@n% z9kP_WqhFjSRTSJZXQZnwwe1yxqj0f)Y&3lcWFKQw3z!OJ*ivO=Wpu_rnQ zMhdU78K>vxm^`CyWK~sF1%108(ODNfSxTo5K22xCG(Dg|4=zFR=#p_h1~>j)6qq!< zfvAFHauS5hg#f)wadM%^bup^DkhxLT0OI5imrtU@GHkB3$DhA^{F+$yXj4il$`XO!SxL)02Q>e1G z8O30P7{Hbpv+0ukW{XYcnB`<5sAAm+I_G+_Ldf*F5xF`k#>B;*#bUv1w!pc-=5CGe zdhF6-vjQJQjL>^eS36Yfsk@eeGt_LFy?J8Z& zq_u~R37OIwm24oCLPDAo2X;hew5(4E4-kW4&8qHc@cQA!mp)_-rioUfQ$p|VSD-~g zw5%jExJHmmqQhwMHWZg}#&aj;pB4~H6yZQg7N^o0gRMa8J8qi1aCD5;1%`Hmww56z z(2k9d^j!~HvokX&myIl)qL`Fu6$nE|RF;)*a0FTc)&35*?i_RP{(XFkTwY$%G>zz! zv?BNcZNTYTYdab)i+pOkTito#rVxY^c}=Nm!}Gw!LwX%xXNL>UAtj_XM&0` zQxD=_1VPX!C5YtJYQfRb5#2Db-fU!YCCE*!G1#0>rA$em3ykCgp%3^WppkeZtu;gE zDUGJEj+r%bO`Qe{)5!#5RgN9WnQuzd6H%^UXI67{b&0Jkm#ZZy2a~4KqH4?4)q=k7 z#1qVw7)+k1QA7>OYVmflB}3cMwF77+2woCMUEt-oEvjOY&mw48?xI{lh=^bn*%*g7 zFvO0OEE;jKS1Dnvrs>5eOc}lP_fpYhgFJ;Z;-eD=kFwd13m6hI8D|_Zh_+5?jrZBV zML`T54ug)7Qj7T`%2GImvYODfxTKg^OGq$tYAXuXAyF8O!%~zbF~YiC({uw2G9{*J zN8u(oW$<0gv@EC!O;HzgL(gZvI9EN zcP%Wv28Cf|rBNVyRq3bW>LS z0_S9>ZX|9103ZNKL_t*J*GkDDtiqO3Qkia6F^QXXZnk9jLyJjhN~9o0$QrTG5dWhb zRieg&HltT)#2HwV@DxgK4@zUiZY3p+wSq{Dfx|{SHk%ET-8pS@iPu^J;L|{91R=G0 z6k>}Ga%)2n^ZAyEvJ{4V(29PmDm2}YsH%D!2)|lwD5{E-1kp}-iJZz>8kHiI)oeBk zUcLN`FJC<1&cpi*L5ioL?=e<90fUaHRKNhG6K$yYbScmV9|Eo{xLRJa8TL>PZr?fP z_PzUj@$(;ZesRIh{!FHI>j}Q=Q5dulYYe9>!w{L4C9C!dn{`tu2SrC9ras$k41_q4 zQou)zD+_{;BtO!#15u@Ifi-IDq$md!!Kd%-7r^EG?I{!Qet(vf+&WxKD+O4b%r5qC!JHsu{7D(Ii+0WX4G4w#CMJ? zYENw6uhM!;=N6?ShS55xC-@d;E3uIX1GcDWRvW6a6yz#;3S|lOByA*COyDN zMsooXxxaXI&iB6eJ3M*(79ahUuS4({W!XPCs?{e#C#?|VIpZ)fq(sm8E z@4Z8ek$?UF{vP}L`#kyD`(QQB74(-&U=J~49MHyW-HL}8`26$Fx%JlDqP$g*@-)OX zq%5UV*L7P>i0q(3^J#0arpUEer0*K$(;4^Qy35&{GoC$r#>00X2?R}IcQ$8#f1ltL zgYJky645WuuNb@_LHFN&i`%#Fu(!9*vuDrP+uI|AK)YUZe0&EL1MABr)|52uz|q}( zf~#q~=lpWX=G7a#_be`#w2k;F4KY$V5eBc9R}6y}nj#D`C1WjJiiDWho7A8T>!#;w zv!ah3L05$ANmY0Wb=6$kRjgMR%&ew1GpvT?a>hxr`PC(#eDaBCJE|gocPVF~ zNfG3SKngMqQFX_k?CJK^c$nLz!pi^S-lISj* z`l#KCn8GpN+hsPN(|1=$)>(HU+Ys=yv&PBgzwj=Vjx{7CN%Q6hhHytFWad2GQe` z)?r0X%;NG&P(>wlwkrx!l2K!;bY^;lA{*LnD;8JEkc@}RWo%OgFybq2~|^x1JQ7WCY*+5J|O)g@#0lp(L3!+IJMaEH)lpKs2nM@_g{wuZtqjMeG!fcG72}v=j zDzq)=W5f@hNmZhqXlL}OC(3T&BS<0$vEEM4C54#uDzTl>WUne@EMHki%274eWhyfl zY$?gKr$!-Oy#t$N$Mff3@aXhwy#3ZZpJRD~Opho~+#-E~Tp38CF{%9pb}Km8d$`N>Z?zj#SZEw9er&~zP# z?;i4`uKt-G@`1!{_=gIpYFuJP(yng+fTL%Z@m4aMY-24D3M!K$JQdss6 z4>>=(6v#b?QIE!7-bYA={k?;{=@_~;aDI8ovT5mtKuC)DbjID=cX@sCTHthRm`-b4 z7UFlkCn`+{hLju%!`0=IS8ra6t-p3u)f8hTN~j4QWgN;CB$EY?F)%GEh9GD}IdSaY zIv^;`)$>=BRmI|}#VbWQ*(IU~%Aiak=#$Embe(78BePngouO@(^i9LN58vU**FIp3 zwK;urLh^~CE=W;j3MU)Q<>YXTCZ<4Poj}MwFsm!36Pb?LY&IC@s3wl-?hcpFU-IhJ zD=yAXh(1s|%a8=#cTOmmFbo2bryi}r6%u6I4J}0}oBj1>kP#|93eM%G4#A5+H%b>H zrgE~0#j&uk0^DW^842+(tLiCT*9i(2a>uN>zL}K52hR{?^m#g+^5n@A`o87z@|?Ea zFso{;vJ$V9P5lH`7xAxn$cT8=Se@OSlN>C0vkxgsW}X>6x&kpNjCL4p2`NxmF|->+ zlQAhV%C!iy7T zoE0&)5@E8jhTYv=b`R#VZhVhZj?_n1R}1>!+1;5zq3K2!Y@g^_p?#eZpQLJ1^Y+6> zyz|Zz4vz0iJPw-Wa?N6~K$AE+JmA4Q_c=T~>BpGnVPBrmP&L zGgy(>5mG`YnG|+bOC6ArP7$$_shw*Lq{?E!q@|#bH;f~bR@o~=ZRtQV9j?ZMdHZKV zTgTiGN&zMb0*Q$4dz>*S?Xvh=3cHlUei>0Ht*ECH%E^?_E*N6O1VMv^QtUy+?O6WS z)I_%``%_ug+s{%I7J^~3*mw6@_+r_teG4JreGs{TDNsoK72_1KzV>XAuUzLSC+#Nj1f-<5b_D=~2JeTQ*Q#=+A^0Ryr9K9tl7AybiryCIeK(+s;+i%@ zK}>`}rjb*EsJAmm&*$!x~E zj~?^lvQZ(y^V5O*=@6U*6+QCCI zw0&ggBVCNdWGSnu+%TdzmBPWA?Sy1CsYM*T*$>?fd}Db3&m z>$cmXG^22Or1!m-sGeb1layj-XU43qcyscau5GDYfini9Eqy!SeZV-2Qd;6|Le|dc zAd_x}Y=D}z5n6(iWrWz^gLLm2jW!xhLWPvg>hcY4EJ=%xk!*HJbOFFHctK`?`}f|W zs7n6iM}H)GsTjcM?Ic#)w$hB`f;t9JS`m`TVWtXFnroecbtUU&L+L6W zy!AG-qGEk@iPn~`9oP&#w{G3SDX6q&e?Ft%G%OYi<~uXWvJgEG(hb&?_?}JclGi6E zOb!ktQfBDsVqi9%VyhBY)hyO4nzpA;36~Vd2e(K$cByS!rn@_$r%H*ktSF0Gu4RA} z18E4ft2OuT-Jz~)hR(CTTrspAwXWH@wa<%-Q&bEDKcLVQ*5bRw(02?uhb(pjvuVxk z<3mEybX{OJ>9})zm#eD_?%lo3x4!vpo;;p#aB#p+{_MxR_~J{Np~V^~ii&P%Wh$-jQ-o4APTH%bPEK7=_;HFWpEW~VQ zv$aBCt92Qtoo;sBqXDB*Y8$2=vo2?JEWc@Tb@MrI{@Kk;xTvmAzA+Ef`*B(?TpQ*l zIb0RUS_aXrPUh_G9?-8Y>0^r;q!81H_9u}t%*+K8Qm(g}qns)4qTlwM>TIzbplQ{#~a(-;-; zNmvRB`QBqjB0Wh^n9-VpYj|fg&-}_msqIh$DN}0#lS?tKg~AhHQf-mE?O=owcXKIE zB&a$?wN27cIo_!6BsD@r^P-y@tsO`@Bg~?$yDnlf3vvTN`^5q)Uvz1})s6r1&l#W( zV*@H@u`!aLI;0>vwj`D=!gVN67E;!QZW%VwxRI{!Efm;3Cd#5__uwx32X9f9yX@{4 z{QZCQ5yT$sRDL=Hj_*I@Z~eNAu$%G+ygoan={w$>U+};GAODQs{LSBFGO0MYwa-8O zr~f@4e)x6nKYWi*KYhw)pM6H*O1d`47jF`z0dR!iF~)6gNb#uA93CEGjbXiBGn*GA zB{abJ1sgN=O>la8#@X2!w~z0$cX$g_%)`ftrjc&GoJ}cRMatTatJRunI^ms154pNn z@X05iaQ^y)J9m%8$u|yYTTm1QbzL)?$@J3T<(c~cSIZ4u^e9&mwKxZ-B*=nu@|hxu zi4*tb5Tt7jc?3Nr#bUAIp!LirV*9XIH}rkaY;R78K@O=HMZ4t(tac>d(KRizS&haE z9i$Dn@7(3V!$<7w?z3svoSvQ%;y_)Nf}8+$>@s!UI7yHq+Bhi?LS$z?rFIslG(ky* zU*`u1f#um5FJHdo)ywBB7nkhp>_}8fOkgZNcN=vzrO?7#J0}j-eLvueLQFxu$10PH z9)s2~cQJBGj+>JRJ>*8wNjed7-<(YLxzXauvuQTcWE&?pPRNLs8Z{6yecB}vaF3>f z+FI`2y~}33Ci<|AC|N8P?CtF5QTh>bk7#W~q@KKN2xJr1JYAwQLJ(6DbOlB7a`5R) zjg!PO03{CjUDx5Jj+hetFyIrE7MAN3`|~-jFtlCAY&K)IzbiHgd4(C3Fe(Y9tFz5Q zM(LcgImtmf#uQ>Uc9a8MHU$ZR7(=Cvmd)2#h2MB46U*M-9>;qJeA%_xCn|vj-*1TC zb9DQdckbO`aehWJxQONW4?ZD>hlEe8s+&Z|0A>rqqSLdf39Nwaw%(%J|?c$`K zadhjDFepviOG6NPpEJRvNS_pzi7S~F1x>Tz`4>+~N-{}R z6eL(1!^PExJBRma+7)fHq-$EaE-ptXbsg>b8JoR1-RhF{)hX3%UyvOixVRG2)8%@> za=oDU6Pz=Yg(dnPqZ4h@5Qd(rD49=Z=&Gje#5hp_R*UbEQW~9o1&va4-d_u&wWe^T z6eqb@GS+bW@QAdt4=GWWPBJ`wp9=yR78*Uqq%prPysWaYMW?Ps%BU@SDQk2*<8G*w zQ*I(f3_psBb5g-IkCdM~+pp+I(lMK>Ld^F zOqKT{$G4z>+X6sK?qSz;Vpb`U3yiTuDX;Gk!`6$-drwkO7PZhq*+;9e*FCQgWY9c@DgIKbJNEo`Dt*7x(h7-mqYhq+lO}SdFSuEBZ&ZkrkKK$t0 zJbLssKK=C1Y1S>yW=Wz2rR5Bffq)0U=JQ5$1tj3RMQ<5ygvB^y7 zy5QK7$D=m`xgbQIdvtBzu7sFrZ6yt^1c%ELjwROUZ+4@b7#Ea?%ALziYrhqekEnlA zLTir=`KS>y$`XCbX0_MrQmjV!%0p%PPvzI#y3i{roIsJhAW_y@k*c6DPGXj-s$#ir z@>#Cvhae8{-U~j2#^l0F?h*YJ($XqdP}Os~ka&G^&a)S%Os03`%G)BpZ7on_gnDm} z-}sOJQ}*uM=f&w8e)nJfK0p4`KcPS~uPc&H6h%R^Uh@0D`#VJQ2XsS1$CArK!8ty@f|Q$S@u3xq@0 zqB(i<<_%9Ce{Fk}HJYD)_6h6Niqc7uq_u21%dTb9G|cw*cyw?`bG+f=w=S$ z6OxvjedvRD$n=rIRcuxlSR-Specz%qSW~b!pRrtAa(VU!jbV3ZM)ICjyU2mPaQo<( z+qZACv%klSpFZQ{gQnNDJ{ZFopnu{t`#3ES7Nlo$2M;$T12rjl804VECYN`93(hYp2T-H{I%e75uTYRP@ zBKb*GixvQ(9{b=~|LLD@DYa`~m$Wsb9H~U_Jyls`v)1gHl@CRut_@FRVk$A3&niG0 zEu-LJpjmHNTwQT%HrsmfRL=79`7^q9!-Ly*xqtT_)9I9}^D~OFWICNvPpA04$D{_| zbg1CDwYwuht*+p$yZ0#S2{FMG%W}D-OPZz?9jHbThYqJAZQD>!c12I36m36B*9)TRSvM=%UIgEw0_aFdi-0x+>RQ6Xhpx{d(22rI zHXczj1u;g}Dq=FJm14bKZ&M9Yl6*DsoJzTA5qEZzeS}PMTgrFTIc+=r7$puz396b2 zZ$^r6tD8~R1=XlSl9e6vu9`>H)tCi10M~hMBLWIvMHEI<)F`2PhGDpFLX{qsJ6R-? zGv<;Uw$@d+VnRPONR*8rzELTX7NcD`%caPZ&zTsqJwg};ir@*^JxF45Bva4#!&W-r zvk#WDB}r+F(_17Z#z8C%1WU#q06!0)^X-sPiVjoF*q~0L=?8qUn zk~Bv-Z!zS8hLC3lQx=Km-c=hQcEgw{#RFzt6)F9>JYDBpJrAG7B z@y}$cStsO-vv&J=x?!{3&qnXJzZ7-N><>m*jGM6AHJ&s=FJJw$n`=>Ly+;i4UX(KQ zIXK(tnutt4x9tY41zeE{dyCd4i|zgOdt$tP*Vn@Keqcy}b=ULdn>WlpR-B)G!QXr5 zA3*Xzo~u<CCIoOd8w6n9r>({S2 zIeo*<-rjZbq-CUB=MTMDEF|Q%l%g=D#A>tT<%<_|?SR#W!Z|@LbY!z>>4QgWMcb{# zFm66&Xb0}zzem!FP#R%Sd=Pw31DgZ>G{Z z7(Z%t%TI#6rmIMTqzngafqals9c3MNs3xOU`q$S!*}3R5ci$41?9H0hW=)w<4G?SpfON$}$Qm6bnSU|=xhWjFbdbL8$t}AB={7au-Y2kT0qEQJnFR;42pML1F2bF{_t6I>lL?A`^j-63hEmOHl z$?vr?Swj{HVZaZOs;=pktmB>8oI)Ay9^Rr^t$Fk2l(=cxpY1TMXT)T1)f_k9!!H(e z#&TX5^(S2VHAlq^T+OY+V>Zi$jP5fK zwM?}(UcBR!5j~@PhXX1OIAd^lCMJisrh#?aa&mq}-ZAywZDx}xg^6q~ zUb1X2NFfoFpzM=LMduro0^bK#izS;rVyYRKQYLK)B%SDdM@ZlbjVq)8y}Z0ctHh+L znN6lb87pznA3`AdARW1O7!=kzDXvJ=u4LG(ST8p$mus4?M;FC40uY5Fv)QCH#)uzn zJyez{q=?R&{mAYKT9&Dftgn&708*4DAPWU^@O?&z1mwP^lcG%hf;22))LJo4mDE{Dou{ZR2_u#o+rltw|MIaL z6lkldCN;g*V6sW3lPW94z!0vB&!{9bZv+L(Uin(v}+5xj4=C3usc3b(dnwX2iMhP}eAyf{bbkGO19RZqL_4$v}q6 zky;_M3FDYT0)on|Z*GWHOz3c}pGr~eFH(pyO`54^ZLj_RRAwcty+&DYMl{9f(d3}} z9J#c8-1z;7+TZ-^Je-^x15hboHK-tKEd;SLNj`3=#p0$8EEj(&r5u=^r>K zC<80jSaBimfXk-k5B}(nIXozM@c1ph`ODwtCqMo%|MGXgN3&e;xBtdp=R3drOP~rs z@xkK{AOs3y`Qnq0`RSkk7=W^v@z(wK_{abGe?{y%e(SgY1^?GS|7}8CQB)=0{`R-| z+ItVFClx>X*-u%mR*<`@F-FH)an}tQD)0MikCJgQY|Y&?G|ie@xAqykETsfOzBs>v zl&Fe=(mG=FY?_9v#e#Y^MXAKz?heheW$$306e17bdl!`A`Ky7o!JZ__t2YTdS=MW5AfRybGEH7!-? z2%Y4tO=^eMkwP2l%CYf1!~tgwvq`~bv7mO2Znfg}(K~$WTi@dN&Jj&G^oT!jI zEv~0DQc75B@KNANvW67r9aCv#j#p#)JdP40pbUjgN zY$3J<%OnSNVWeBq$;n=<6ulpqR23)ZCrqZ(?M=V+k}~2HuR_>v$fD)YSn}kd%I@Ym zFZw|!in=JNs%oo6(PZIx?gW*RIMeYto(tBH5`?hD-BOA|$K~{Pf@B>!YqLq6Y}Vw?aqRTlwv|+Qq~q%Q z4(p11AYRiyy&nWU3qj}tqq62e-iOMkrAiuCSgwuu0x>FdF7%W!w3`NvBKV%Vblf^P zph){X{q%E6rFj3{$J{zPWHQ~w)^k!l<@UoT*qwb+8mRVWOr7EUg>_nw{I8f9wkz5Nb{?|qGv(^Kx>b_b;MN@;zWbQFw{J6SHnhtNe*E-f zPEXF6&*ua$4cKgFDwY#U=#SDCZ2EvIB1sM6!xsaE(L&Q`&{oL-mL#dD?uOI=03ZNK zL_t(xI;l81zJo3t-Y5C{Ak#=vM2H23ib#_a22_H&EV)`P09bD}vKBKv7`=Ei8Ef!^ zXz!FZST&-T8I8gteo2Cc-lSmUwXd~PX{%Yyg5NEZBNKHd8nUZ0GSllj&d?V+Y&!`f=>+I6PzGxW_;h{ zYi186Z5%~aT+0ozT|&wqa2N(zSNR}!F1z06rpspi)G$b5geyy&HdJMac8-3tVY9fR zSugQJq}?>~nF@y~9Hz2cB!B$eR-24s%7E8+fNuiKEBNSJ-{c$L_y+&tpZ^7$Wy|5g zF3K8w*MRZhyX_tpGI}4=NWog$XdD z@o`fB4uUkIl)2xO=5x#hjQRCqLdSqM*L3Zue-kDs`=IGud>JzJovFqk5)BD_{!8Dr zyq7Jim)HD_;$7trt(7LKBpzpe$O9bGtZHQlDN$6V%o3!8(^BjzBTdRyTQ{aVX3AT{ z{t1h*;=?qZ)4CGx9iRT$$NcQm|C(=q^8>Vo-~0XF;otnLAM(%sxBr>H^B?>*e&av- z`~214_=lLNc<-$TsJ_QVxO;SmlamuxR}Igep8*bC8UD&I|9gDz_y2(N#e(_Hl&^pN z10KEqHPDIsUwdE1dSgW8FK{}U0)f6+Z*vJBJa|CcwiIRcl`m8reFaIGOeSBs!2A3A zJbL($FP}aoO!Ss=S}Yb6ML}6tgzPorve}rcN|F*Y&nHjbV{dPV=P#bJI6q~zUeNa~ z^ZAr$CS09gp{>R!P{9+TxDo4=u+EVB(eo%`N=HAm7`H=Gxm$7xqG!_x`u67K3sUev zHr)#nWE-QHnsw_Hm9^WciJhGt=7r(p1Ui>oTIHFqA6S< zoO>KYW^-4TH|>-X+8T7>nD6i53D~-%ZzU_w3iwsO6Mr8BlH7Ak5VJ5B#2elwba#=pcGBhurr&px3kM^GG)13O0f|^+?Cu4DZqwV-AesVkSNE6{sca$UlE!W) zRmM(Q`Fx-%D9aMx%V(0wGKtk0yYS3S$cCr21cqy|x3JlfADyIW*m~QH(`3lOWpYqA zVw+-6)Md%-qg%}DilV4Urr`LUcd2*xG1WvY8QywGRcd0h;q|l6DC;Tjz4sn_lL^jf zo<4obrtNw5>SG>$^c`-`=FAUnF+aY?!Oj%DzJhi`Go5l(R=hg7lIyB9W$C1#84r2m z@WTcldWoJXr&N`pauuhS3(9KBz2jRPzWtc@zy4jOySFg50HaVv%V%GH!mE>)1no(7 zL^?{|TwTyL8;)+@Aw<};o;&v+aJpPj7BUH08YlJ`@p?}ZFT2RP>#=1))CQvqtPum< z!CyyxgNHY@H<}d;kd1Rk?m3QBrbN-` zBymb6%RC5@De1J4DaTAhjm?u4^`JgDo=UlYQZ=)mfWqMAww><&;FcUY44sZFuwIIZt=?n9t{w z^@OKSpR!mic=X_H4sRdJ$UjhMOIAu}x?W`@-7uZXwDYEg*%anbXNpX3>Rh~v<`fM+UPnuf&k=KB3({=rXvOy`M(SKhHcdk^8GTFvXDn^A zK^*j*&EjQNUnh|t?v;-PO8lX9cTdPb3LPLddob<}(NoDWNat7v?~Z~xBk z0TDm692{0WdvVJD`oH|2{OrdclPLJLU;kUs_uMmrX+ajRBh(%RW=z_N^$${ z9isPyz9%J#SkT7u(MKQgqaXcr7dVTT^4SGEetvr?#rx7~el%r1%ow8puLuJ2hc zmn;^G+4Puz@DkHpRBOz%WchNMK>gOUj+QjP#o;%_AzWxw5wMv7KzO<@a~ zuA|74i6IP>)s)f|=t&Z9v2p^&Qp|VoxsY%goDnax%gY7p#ge1@cX;cqw}|~fyJ=}& zyyo=s6!rWW2k$-M&e3h^Y63>HZaSG1oKD%9%{e|6y1``qh3`9p4|G}v7`*q{6xK4^ znNulCQkMOCPQPl|d;2l(fBRR!PEkb(TJz$~OJ0Be6P|tcF{{Nng;uov8lPl?-QVBi z>FScc?`Vgf)oKGMrd3TlbWA2SeH1;(X0su9@}45}ELu@k6O1i|rpZEJfe-Wzq$uH4 zB4*Ku%IiWXVsW~@4!4(rT$PoW(4_0ac>5St>PhEe2Km{#uGwZ`W{Pn1NK;xf>aj#y zlcz|n{YnPh_8?1%lr*IH6^dr0C%3=Pl(V{#ZwmSUr|X79Y%&DBO-c$6XAMoZ#qhzi zv%Amo;)EfHcze1tXSEipT&G`r4}ozOKcys*N=Alhfp{4A}w_MwWos~Y!^5e>UWrNqKObbvr+Hl(4GH8#>`G8rlwPffCx-L9|xd7Tmgh4`T*So_6{K+3PtQLI!OQ8^7^)x%2QH&;>vG!4J4~bjXL_`9K;O zr@4IdC0ENgtkzcyVW8_9{^FC5`NoGIQtpYqMJSMhuRM}O1#H&qZ1o@q_2-{`&Vz^V z5Hm$Hwkih)2dq|0PESv%stL0lQT=OWM5x`iVj2h>9p6G%Q~EqHaB+S`vs&}y$rJ9~ zyUVLruh?u>y!i40y=UlpLCT_s(1GvSfAo;U z<74K#J3K!*VQ59%T@;0+gjkW$w3102{0UITHW(Y!$_FczRD@<|%paze@2~DXIA@qcl<1xhlL5xY;L3B0R zh$AnG5Ijm7ym$<3DGrSo+V1V_(XM;yx+VqanvQxpVN#b2U7LNQvi2wmrJ|B%@I7Jh zxS~R-jQ| z16}Var!x-j+(Qq6ld~(lcHDpXfLjkgAlaIjZ7iD2l8f_KJp1hDEYDstafaEX#uScr z7|?1UhRD1wP$^J4!)!KzD1!>6(rhjlIU+?dbe^FbwiIt1`kZY!&G)#_fgwh+8HpG^ zDnXsZSQmm;I0MlrVz07?nFOUvEKJNzix%6D>}NM3UkP*LU{TqXT%xv$!fz=omk$8% zrC?WEb$QCvPe!8bxUTX6m{C{~s4xzl+Ix=KjKp6wxXUT<;qC-K~ zdDhEIVgQLjcD{tVuBoa?wjNPb#xb4FI6A(KEfOJz^Gar-+-u{cn^;8zlz0~t`T>co zDX>NfRjxJ8SZ0$cXBU@}MVB)OyG?_hX_>56*T$(rXN?VEVsUv!(|255zJvEYMdg^z zC%CH4V)BFzWa=n;Jf-o7OY~W+?VO_>T9(}mUBcHt`jG$Pzx*ehzWgz=T&`OYRowvi3M#I<~LY|Q6?952%OzWz#5d@4?3|+dRw<22)U0aNd zgnT+|rz~rRe#8Fm9^d-rH&`q#`Rl*-?{mB}=k?21 z{MK*%-~8~0Kjd%!&0hy?c>1%CdH&)hAtvs>_Z~R$ir72cM-`gFiO6q0sX0A8%^ytO zZP#^JQ|B&9#wSPLk=bkp-h&l7@95}=^?IFstj3K*V{OTFnt1X26ON8VQv~9)s+7ut z%7OXL4#pMqNi#ov1_LK9p1O@qth!dOKycrnv6jugp7 zfRxu(P+zFbu3#E6y*juufx~SSE}R_}IPc?6V^`>MtHI zBYGwDNeBV$b9R^#ZOF||Dh7qI3T>4*3LA}25tkBJvlUHlOE|Ti>y-^hi9LnUiWKA; z8D#|Jh%%pVRle3}bW-A(lQj>c-@HmG*N`KMCI6G6#QFH->4$-)Ygn!>*r{eros)?u zols8b%=6WTloAJ%g2}Ar^v!FAwxKkdVYA`n)oWSDJ{NFF^lg!VQi-k~urW}S7H4Lp zbzm}?u<9eR%kJM!XX^o#lPRQ$0ulc1?j2ASHNl?JDF^k8$<7W}ZHsbZa;Q_nC}@_K z=s2)DoieK{Jc<-W-?3h;BsktVHmzt8ZQ&T2mcm#}sc45DYc131R1Wp*GA*1zU|LTw zT8g2qHbv$9HZ7ZdB;k>m6O%w;Nyd_NPmEzp5gH|fJ%VQ{5%?w%9&2?yamDsERHpJo zvM_YrR`cX+ng5OW^o?F@DIX@IVW>f6iu~F_VMGr^6i(KnjF{MnT;0?nUOz^}%H;e} zYb{OJVUv+qtD)z!FP_qF8t&e`%e(JBM#V%~l=RIKYc0pe$2843q3_t5I>s9_k>l$} znS`yhB^A*3Vp?1{jkA`)dtw-{8dC6Vnl-cOZvKpNzl_LXx~_`QNs0lYqz^3D3(ikp zk?`ETdzWf5!?}{A%#GoKC`F~Zz78XmRo5lMFp+!1O*nXa!ruOb$!yAB{k31=Xy389 zTrepdyY**0eSQuWQt4>>Ku~0}&K!cmqb^J;=|iM?sXhfm(6t}8zL`Ujv4tT+7N2YY7%NW2vM$gnVNH@sKUqw!_*Fh!wF0LVi_M0oPoJ_}E_v_$CmbE!X1!Vw zhJoGPU0U1GZaRu;M$%#fp|oOBmx78Ju#B{rCix^I#WCj5UiFpleAEPmC?UZTer(ZN ztO}wMRM6x?D}{k!kV(9{o^bc}9SMEj$XI)6!grF#7((Fi z_zu(Ql->{YzQYv;A7d7Q4k)Fiurrz>({FkdDR1SWH+Yh9^(D#1QyGC$F=fL~5$4~d zM@GTCPr~sxgHRfQ+-WAg)xpW;Fls5XAJu4AF`{Uw9Qv%d8TJd(y+#bEBq)ecxIAH% zlDJTZBE2{l{P>Qx~zz3>opRy!YC9;RY}T;Gv_;iY45B~FD^Bk9w58yT@G1GemO?0HS+F)T33qXE!S4P(RaFy0 z#AwHZ2M@4XocOImqL3Ipy=2;2DQU3UW|Q6K<$fd*UdPiBIr#>D3h)y z*zzz*Sr!akM`;~eTUM(T%P`@eW(62w|`Lmb2`ttMtkE=KPku1ya`#xv8TSR2! zR!i5`Ro$}>heHl+iWCV`hHc2w*pGfR>?Z?;{}973{!jcM$TlDmqHIBwY+58ldY0~) z>1DdQ_R5UR*zR@~Km5*(%yt4jnC`5~h>UyhIluE=xp(KB(~}jy{`Cu%_fEL(J0R=Z zv?j(tf?V?>VYOqtk)i9nBg!x;hL#W#A<02%ieH)Xtdxov<*?c!I^4-kI_Wy|QSu<8 zn1&IRv6FPrJx^=Wl;*Eu4r=D+Uc0G}y4k-IH#JhgAvQ$lWw<@`qd4p-)6ba@Cw+Kd z=^L-9l_BQ7R=64b!RPybl6@!<{G;;TCHL`|zdvabr@?BHg4p@d;*dr0?%g{=nDgZP zl=-6%Dd;d5Hmem)dB(-7uQ_}05Z~|ET&=*5B*Ii-#M6(SarW?$q{SM9S5=YK`#1Q0 zPpLJPas2RyKZL51J5+ISeNDf*RvPjzeSCaO-}hAWT253}tf|i4Dtyi#?rzs|c6NuR zndff^#3$J_nr@IJZ)Y_sB(AsDC}aSs3P->1xVpHcp4TX)*zfmTuP%A`@BrZ}7*Y9!0P&!Lt%fmo7x#%PT zKUcT-0NK%!63k|^!|-}_b;V}ClO96nxW2yT?fdrnePL>^RaIlH#`>POubu;PPn|V$7R?M50x<;ob|eMQ(PD;HiD4KH2w~rC@%=#9?{I#= z2YG&!t1_j1Yk|~?F$M@;Qmu!P_0=^_Io`j2$JMsy*@F+cUSDBtE#le`XgfikPESwS zcYB=Dlt$9{2S2jy20EW8XG=VmVs?zJ8v0SPkf!I}m2*K&XLEEmaS#)}ADGP~YQ{_2 zt=vl~k*1*8LrCIujq?DKZW$l6V!d9o-fkqX&KNK{2NmBsU~;oD9qv`K;C5P|V>;-$ z4u401!jN=AL}0fNha>~v1XJA5%;~URB%?Bua;pn4(@m2G%WCPYi`;CGN@>Yy8YQDD zg%V>8P1)eIqbf^Imq%P(T^#~bi=x2HW~^7&`5p|U6!0i?%DHq2akeEvcD2@mSZYhz z6euOVnHVUFd;rmw<#Iun5w4UEB*Pe}Tpb32DZa2O*hh^W<6(t=e+qR|CHm?nqj}@`u#h`{lK@L zJmASk&)9A^tlz!m=*|P?M@tq(Lj?Nan!ere?)_{2<-hm~-oE;prl@GDhWmH#%l#ER zXq)v{2lJ$y*n{X76tLUv=!eMi^i=G#*4sDe}Pw4>3i-1T3WBS+B+JTve6) zIiHi1W1=h^dbz}REti*<933rqvUrNk{Y_=v;3GVK^n~wx`@0m?oWK5?pQB=cF)%0x z#>y!GO;FPUA`jFs49x19p&gl3wS2zwC0ff+TNDNRzN4t-;^-pfw0DgOihyjy(T}9$ zgwOV#l!8>(G?vFtA9LryUA*^PT)pM$>JpWb&<%0o#*N6TbEcP2OOi4!B5~ ziE`=;>4qy0A%HR{tFkCE&~-Nj&=L zyT_fo_bAJf?RvxIBzgw_iWoOK8@JI5^{zNh>pOjsl4^J&4BZg8TJI^6qblc;k5)N947O<~>zebs_j$Kop~jJ+ z>xtINL8&OPu0pGdI}e`n(YJqx$B#c^Icw;58}_>m#wZqNXBg*%0#4akmGZ?lqPaHxAUY9@3~?GQE~xD0PJELRj0cyg&V6ng75%MsSaT3W=n12zX)1ymFgr)P+OgYSp|g=fOdx_j zO(n)kDMHK|un;k-03(PRrqGw_7gXZTbB3H(c+woGkAUGwOvO5A%9q9VSJbmeO(`MVB;%yCx(uB9WUV zaxU9p03;pakYb9W4MZq6**E=-#w|&fm6$Qi;WL+QSr`k^cABiwlJP15F-q^|MB^zH zq}J;eilvgqx$;n}1UgGdqBId8OYP($)cF~U*$F!x*i=ebZ4T?>M9XWf#f6O_DXBx# zr4fW*BfXu9Omj~Gs(IZ{vIZMt^P1}qZgP{OfHVo4LSX1UW+sc}e&2EV{+jsYF%KVn zNVmD*(_j2GfAv?NGPG;(BR~1kkNN3O{}F%q_y2@1Uw+MJpMA#B+ZE5g`#l7z6)Wt| ze*G)H`105Mb-D_C7gE|YO(CP)W1+ZC@~f5r87!+f#8WXtJOZj`+@$3Pm>fQFN6t9fBl9 zjO!umZ7>O^9Z5y3HFW(R#zZ}zLs8MX1b+|YTFgl(kA)o2mWS{am*N_laJ2a-;w$T)h?k^^LN zev|$NijXLbB_$_7LoSH5)`CGcka$zjYjTcF=7dlfbdubq6sAGdGYsPRlQ&7$4SHg- zIY*34A#^yhmMJfO(+QFUQAhf5IA|FF%CZ*I$oUkZL5++xQ0 z`8~?T8P(#P`;VUTt?zuFv(r25u2*y+a(;RyW!$brPm4V{x!)M-StGQvmi5r+slPJ2 zqb9l~NnCVG5x$I%6$wclS}qhil&UK}DamwN5$p4*SvZ0g5~KQoVB!F z4@H?*cM+XWqi@PtQYwFNag@jirxm;PhTb1jSva}-jP>sSX0?ehboh{nO0#YE%$s@E zsNPUJ=5<-sf;QE7%^t0={;&v9P;dv2RbFW zZ^4Ux(x&LJx4}AUd3;yZ<`oEw; z$4~z3AAqu=15ipd2?*+s#{<@K9)2kI||kWUZ?sV}S51*gl?!-Jf(;_~W> z-#&j%Qu(ByEHQfe(X-v{XsQLSsMv4z%w{u6UosAX_wO%x_~H^z}r^n<6aDty~>c5;q!nzFDoWs&KP1x-`Y%xkvop4IxAUw`%mSJyk{ z^^&q$Kum0}*OazkjG&85dv+cD*fE3wV+#_AqoWzy-8FuYP)%*zq4?RSh%pN9V|MRp ze3o*LF=4e(fGH%#42g%Bu%;kHPfUrct80=fs7@+^GPKF#v?8d;Z+`m)NA&`$4Xbx= z8N(=+{=!ieB~4W`j-vz@X4FR@->EoPVQfM4A~=@KQlpGw$OY0VFYX6aI#-=kg*`y= zk;xq?$|@B#Mj5nn94%+K(SvgYCGiM83|K8z_z8Lrd4Zh@oC6{h9(+$#i$P=(^P_lhcL2UU5R1DRZtbQZOieUC0Fm?vf8Zq)#slvyK|4-Zbw}fm=w9QT(Y`) z$Agn|((aP0%^JeMs63@PlFvC)rh#;m1*H_pSibwCA7N}kJM=vN`X$$2ennbuASTWq zeuyyvgAwF%y<~N~;5T3Wn!ejoFOGP6`k2}2J?=jKnDe`jdGz5^o;-ZS`g+B7*fF1# zSS#zMSJE@tkDd@XY;?0`!Dh1)J&bXAjZg%o70oi#BM@t~}s^MPb6(OPs-vcFo9qGz~jIX*s?ys2E7 zb+E^0lwztZNlE1vgOu-oP+`CrjaSlGkV^+-4UCedl)}x)-}{&YDCL+?ISCrJS#+*T zM@W({7tMqpOGL|<5@XU}Ym%-AV@Kb5no@{!vRl!FtVx>Q%jf|K$V_3x8fi+lS`+=q zNI?1Au8<;Q-%>O+i9B%lK%^8mDBqYQvBpqYBi8?R$JOc`zTacq426`2rvO%gtsE(M zoU4e@iwVdW3L|-50C&#MdHeP?Z{KWKK3s5mewQa7{g~C;OJ2VHj6#*1E-ibb(bf{$ zkrc>?vpB?4Qe3XKXhTlW7bpA$xLEw=3*ok4;WB$h!bK~LkYfajD#M*QUd9LGp$ zi~y4)R8rD!n#9y&bRjE86eh+w&5*TwN=>L(!21EO5`BoGJx&5m;0FqmWePq)3LXdj8u^r#(|+5shg6rs^~_^=UiP~QI(Fu8v3@StQ@v18bXvZ(WDjL7Hl>f+P>r4 z-}{Km_a%|U$4|dS)0F)5zxdDiqd)!+IeYpTx|XJy^Sy6>kLNF5!05q=nqr6e)fx>F|TWm@0{_`4}TZ3(_!M~l~Q7(wHBo`V<(}ET_-fA zo+j`pc}7}^kX`6PA*7YkES5(H+G~B)%ME7?sqKk=vTF+M6g4>yMe0S~y?ev)*(vMw zHGb&%`OkmO-~R2t=eNK8iqC%glBkYxTC?9@gEPc32g$+VqKYUq5YkAT`l7Vr?gtNe z{rnYuFMWso;8AoWA5l?LmrepYwMGq|tMxU@^V2LsmK)diBln)&=i48Do4a@KGlYTN zuEqOEQ%Y*RCW%X?a46^G#F9j~r?oyLeRqA&ylANFQVui5pivY>C7;P=&Bet9?=IdG zytplrGFYoQK0B8rYa`r$@B;}jWg$qOk_~>0G6*OHMGRx^+M9G(6PK-|k5Eo!BXv<8 z7C8}{YGP8@lwB-{F0CpwO<7SoM>qBqN={}bDO8MHZ+4gjmVlcK7(Q}*d@K)H*Ro!( z2_e!n4MkO=5{w}MUTn)#2x4A%VhCBdo4;=5U&;TEhZA#5ISNvloTx9SK$|#A54rn^~3-fs69Zb1zE#`r497j~npz$#PQ3g*HQC4L`Lm=jW(!(UEMK_qxa>7O* z^kETDTGKQQ7Z(>aO(V{_c27W(t-I0VW27(=a+%sasw{EkC{%t@RAq^Z0aF$%PL2f? zFq+-aa=p7|jDg;dRHb22IS2!#f%^1>GVIX>tS{dag9lqMhJZ4fs%m(Dd4X-JEP|G6 zrCh<{?2PlXyIgP9w8Mz{`OjHjyptYBKXU)UQ|fv_;|yI@aC&;oy+`+1U#~bjJLCNP zl=A49Z$JBpc1SdZWA*kGyUhlt6V?^Dx}hCq2x;4vuIun#5E|#)0YTaK9o7~|@^lu@ z8%IQRE4C=5M-b7jB$d&`q_TN0;m3jfZbQ4@qUt$DDXcc=LZgh4x}{8cs3duCN{dc$ z2;zQJ`4A9Dhhfw@hbwK~_=JX;1k&!7kw{D>(@{1Y5RH_?$u-&Er?roKi^TgwmrDzRHnk@{CpN=Nk8o6SwdlBJj9ofqh3%Ng+1(5DdkQ*YZ?7O+irRB^;dlS-5+rG z!2;_gq}RGqf{Fbg?%tFUmRmNskm-Bp9EGv$He33*z*#uE`K*GXk|M09{*GQix@V@Z^XOy6DC;hZHASj=iRyB4Do z#1WO_N#?T|%6sA7^-(B$f{RPiH`iTGGzyI%e`a2(k8e~T-4JwtK=n|}B90!~c{#qNu ze0~Ik{O~x25UCmwQUCSd{S8NV&-kyOJfl87Jq%1H4=F?6vtMl~YN0M?vzct{`9VH7 zhoSqsJ*hX`FKhea1uw3_}O|z;?Ul>gozVj5Kwb zlbMrHSV}R(fC|!$7GuIW%d9B#>j@GRhLO>aS+7NgS#_>$5fQvBo{4=IX^z;VtpwiLy}4xpAx?9u_;knD5B6rhvZ+zUXfB_d3?dok;P_Y zMeZ*-pHG+AW@>!5+p%6<(Y7tKW+Cw*6I~Uj1nO*MpN8*z5F_M*;H;~Xf?L_-oGYm7 ziV#N9LCBmnMw-L#Lf&A7f)>r|M7>P3OPu6a)1Q||T(o7#VMxUM6P+%Ig3%hrAH13)q6Pvmt{>oo6~Qvh;bBM85u7`mz1eA3m7nr0B zAk{iikUO7%Tpgz|crTr#$&0K&sN8)0)8svpRcz|A)Jlv5XhHcP2^yybotHzIxL8w^ z``_k@t}#fgQB_E9=JjSnjFH)Fo{>f|iFp)JYoa!&tTl`|A5iFCgV7Fai#*Kb{Xv;; z(1Ewz#xd&^$tF5I4O)5F)Eerl;^OUyQwr@p&Vtn*(mleKG`W1z#xOevvv$K1goSw4X?r`%3jGh=&h9DD4Yfes1c>dLwlsF#Vf5`Rv zlBS;Fy{F%IluaesRSC3n6uRc(;vL;Muv{)#E|*z+c{7RLP=t}i@se)0kDoo`kN)V7 z_~mbY#XtX-f63Z^$$sBbHl<{TSkZ`tC&+E5u`09%<>AH^P@(kxB52fuo z=JR=WY{;srj7AxYii&pVDNBuWhA{@IKrm7RM0S^q2i?$A$zupA9RgT$UVtD+%7T`A zBqVw03sn&MUNVGqKA8le)Y9~@Wp|VQij;Kn<55E6>hHi&Rk-pt>wck<{mf2!X z*|i*>owDsmHrE$?{;N;$LyvE_q;`u9o)7MvgLQ0odzyNI_7Q6&U4DuXa9O~rjKS8@ zqd8__Y*7?E`|v4WfBA}Ee)4N(^HZ)CZz;OK{?%)qK04>&@|2x{yYm@M)1Zr*RLmLM zEl2Z){q~A#)?iFUBvBNW-EPaS?IfCl$T*&fPOWgLTr{n0pl&LOHV7&U*K^pYP880< z;PWAa95;||K+t?2^nEX^LfhuS$Q|NnR7N8Ji55A82#bb99j>d&u@B}z`N4$5$i^xK z+L_7;w?Z28d(nnWL5Ub&WZcvHm4H!htgZ>sr>1C@A=(6-#+gog^nRROKNrO1gN;!(9kT9K#t=sVYGqwtaUP zHsmkfxBw^T=On@o$z#%u4yxa7`Q+1|aqsaXo_+Kke5Q=$U}=P=jS(xVlEc6zuP4KI zSv9QQuXw+@V!1qFHgC9iE%|NENM2Z>6)r|btw>QSua!c6XiTImxvBsD6#{U z6tff6WVA_!$(;`n24T=6LmpS1>Go}Z67{(z_58o_u@DF#lQU*{FDFff9H$O zU-A$C(|^o=`O}~BtZ=x~yUb5d>9$)^RMd-OV(=srSu7UJ<~4Ej)XjoBM|b#x-~9>y z`9J!{EY9yTwEe9onHy_x)>+k!RB=o<`}Dv|*`q8j)|S{(s$3R}MGi%i2WeK#P$@99 zlIDJTdP-5sa5oK>`+bXZ1rI)W#Fx*%L(|IvTUSFf-5 z?VByvo0rs;L^`N^GsQ#riM(BF425;Xv8O(2m{oJU4}uRTh0Zr)3JI(sYD2G~i-~@a zl=j79h9yxK1#jQHXWq;>J~`vzlMiuq#nozk=&I9NlC+%_VMjp15mm}Cu@|BHbSiMJ zq?s?MXH_oRRG=cRw3KDZX20R}>(^YoUr`q&v#OR8CI;_E_WK!vietD|I-*K@tba z@P4qpn z@3?n*%Kqz~&8}rPCR|b+)eDNM$CU+}-G&rB=!B1vXcYUtlbS58*>xRp^gMa=ggd9d z;nnOdI)EAze$%nL+VI!E{C}y7#Bx#6EM|=JhSLuoaJoEV-3NjNQ&=88eMAU>>+5T@ zacC>9w)JjHG~#p{{Kz;AwEZ9sRFwmG$B++)f+7hWtC(VJVo3R9eS>n6gxA2n)A&G%Q;{Re*WpNIkrMEJ8LM6CTU9-JU)0*-V?`|P}-ucVHgL3A1F*g3i3KB zDM7MwiM?p+g#Pt8abB_$CGUyoGfm1t-=|V!jAIU6kc5vI1id1EUo%m%Nn%H=!G}@W z2z+F>*)d;M#26WaphL6<>q4G7VK#kz!UtV+f&KY;k?@hZZ)>`)aJ${UYGEx{p>ZD9pZony3 zcG?8Dn;qw863?KlXbKMY(@9q~40OXl+jSB+X&qY2_X=Z3UdoHLGJOAsKj8e{U8<^N zwOX;?i%`FEmeLi6L22}!!WyhHL>~YtR`uS~_dVz5OPZ!R6tcR);De-BYiGH--thX> zTS5pN9UUKZYT87q!csOu1xkif#2L#tWHicVJxV@h31t!wB5xUfIBY87RuUR6_#lH& z2o#8xVlsXwiHJv`GVBeD#e$=wBl?^rHo1MQkwI2Xh?t7fUY`_oJwv;Kei&%mR<2E6 zqz*0b=2q5_iloD)k^hsvg{dkDiPUfyvO=yy30gM2m}EATuSwu*f1)-Za#@OPXfJZoB8j>sQ=6JH`8fe%Rx^XG|6!(;-W!>-M~Q^@5?>vAVio-|ul{0Wr{D zTv9d*X)729_T8TSZcXJZ)+pYrRy1Y9IJisv001BWNklF4z zB&ah@2LbYslF^sxT1x#!&Ph{}O%(fV+?h-hDPpWSxUMGsl;Y+jKk0>RQ5>@DZU;7p zAcOmaxN5B?p~B&3$o($=Oz%-Lin5z=(kL<^GxECA&$;=M{5P#N%Bq7dOy6>wS!?r1 znhx)=?|bTUPT?Ayn-fD%P*U%tj5(MvG_vNP6-+&NArO?2aM_G{`keC9_akU?sHz&r z5mLky^4?QQ2gGT5&Zg%t`bbq(1Z7G6Koy2C!ABZ-ue1%8>^|*$djXrEPm=iwH{NRbmL9I>(A=H8F3KJV(}48UE$|)Cn<} z9qvbUpzM=UL_e~al~h&1`RNir?zw;ei0g|lXc{;lB zJbU;H?jCvm;eYZ|&d=`g^2HmToZOek#u%Y5Or}FJ@9vDH-R()Ik&mA}<>P0M$%Tcu zx&~YhtUEl>B5d#b!=NM&xIRF?#yH?64!_T7-EG@bHDj*JNp$1DZr@>TQPvg8SvJ>OSrD`=*uyZ0e#wiQi5PN5QAN|tnayUb zt}oec*R<_U#O*%b&@f7t5y@7O8&uGpZ*E*S+lGiVr!T8DLFMpkK=(1fzXOe_WV34fPMYqcK_XX0tr{kD0vT?dHj;^y z7bSd;G#(<9_%G7xs z(BKt|YC)kbMk$)5BaEI|S@FGZe+Rt6fAxa0upDVa;Rn)U#x{01TNAb7-Q}9&&7M@$ zsMz7t6(^_CL+T?8-9GC_W;ka!UCtTeh%Oz*Dy*$2tRZ@jGxmT8#woya`rnu&OV4Ec zJJZ23<&7>v%vnaG1g-A-4z%3s+ucSArIjJ3#1K8>&|$Tc1EyAjgib}dx9(SK1x+CL zyh#j5-T-s#jSQ`_9!!T7q1*i7=S-%gl8w@+qRbW^wmh87JSKBT3!YL<9%e&)qE?<1f^_#bB+d$U`a28|a`S;_1H3g-K z^j+>a^`q>U`M@;goEhV&)htJxs4RQ9$@iNE<`9$g%ubGKE$g6FqFueAVRHzp)R2ga z6Bb0j z(D+ROw|U^#Dz_%6Tf+s1Yi_huvpsq8l+D#U9(?d!2zz|{p6zB&Sro+3QV`GezMNRZFs3fh>&Qg?yVHg+&&-3Rm z_#gkL|CvAidw+m3k#Bwceg5c=|BR1+_(QH<{gzLD{Rt1BeFrm}1Cq@YhYnq2XCI0E zX3zS1OL_uFXG_%CQAWLD78~ByR3RtSd|G4*c#HyDql{Qw^9Sa=XTr0dJb5aVQtl!Q zIUQD6hcb?Uq^7H=*|#l2i1_F!Ou=e>MejTIT}x3_6jhDyTB^Fn8Oy)^KmQf~>fih& zzy9SXgfXYTCXbJS(MS4z#Mq3)1dnwVA7qg`IX{yVXHFnbTA`dqMadV$6>r|Y$CWc?%_1+@iQT@Zu1lfuQpl7n zhbRN*96E`xvdq0_Daj(^TuBT;66ebTR1hjH1~Ae)7^6q2fH4XXH-}DEGKUlb@uqNC z_$6dikh_WYj=2n0d2wqw1uBaE%9bVPXLku<8VHoK9p0X$ygU30CD-2^!E1phA zhf-u91tl3U`Aa2kr~^5OaS*wyo1B&#dLmNTEYJ+SpdzEkpcs>Aeek!#9J59uJ9{EX z){3=wKghzLh0$UrjM7WyrQL&Cq+A#(}mRpDs}bzJBwP zwi`G)IwBddoyP#C*36ejT&=}Ae*egWNp^8sgVz%5?L}KXnyP&#~!UMW;T<*KYFaoXkexui=u+0sj4|4 z86uWZ=B3=p2q`9f48lqv>w|Nm3!Sdt#9$a(2-2f8IFyny`i|!T~QqVzPd#RPS;89N1X>OeZxBBnL{U8KaElN zv1RC6KKspYnAMv1@2~ja!2*&cMaA**45tdTs<^n^O6)^`&6QA@yIs%R)(4dA=;%oH z%ar2-in3$&ci2RvL`r_|bhffA=?h@x>Q> z>vw)En~STsx_Ha+`6(IK;Ns!}Z4IM_%k33@cg>sk?})MB{-dY3x+KO4GL`9bxjdn& z8rJJ;j*d>`qY0vSm^N0WG|rY>UA)CwEs5wriXkV~!fwB(Zsw#Ydakzb(6$0+*tJ`h zXHxLl4=t~MJk~|ufG}Z_L6VbS$VvLf)E*VAQjA`2) znu5Yg50j6Am|gAG3^7nCp}>e9KMus9MVmrIu*##gqHq-|Cg#hA-~as|b9VQHi0Aq9 z-}3Usa~AWZxEze5?|U$sXyPFoC8}JK$0SRi)_IuH1&hUk^=i%8-80c%MPcegjM<$XvT*WNfM=Abfi!r! z&}F((+*M;gP#A|ZDpL-!fErtntPC2HD86s^qWLh8vQy9*gU({hz8}!qvRoWIfk(oK7n+(~>DC$fTrCFvgePE7)1PbUz86+_hx3Jl5a~gTYtXUA^C}@X} zmlVb^_#nZTv8S@)n$%>}sP~{1MO|@qeZkLu_A}1TPWb4_V;2RP?r~bV#jO^Ci!$C$Ius4w_##t#Y zSN0I(sCDi&&6#YsO&LwoFtlAhgrtnrM$zP`DAbuT5{R7N)1)H=bND%=jNoQ^&VfUw+P$XW!#!Ip@{OH)to7Kd!Wb6j_5p6M{rzC~NS;ARV37 zagaDIqY9u zU5XqeAK+|0Eyj@0I^k?V@S>4STCv$}0C1%k04Bly6sd4^eaUPgb$h$r4yzs3$YBR1 z$gR-5LP?LK=&e(bF4!17^F_nmg7~ipS@3Ce^h%b2a_JY10=-VD060@ShCh6j>N{7)B0bzZNsBxqlhYWQlx}m2j z9B~*?A#%Jp!c~rs{@{0Iw3TN}o-V7|wR;r;N7^}E=zvAwLMSk!^&ovco>KLdCN4sySn?|UObmN?vKHRo#51SL{ zY@hdBuHMVWUsgC<%f?Yu?AsBaBJ;(9x~_BbDr`0zit-YlBD3QoVn4FlY;Z3l{k~^t z2TJXzN{bIrxDr!3;?%LWZ>gK=;MDOkqK#p@-&0o$#^5QP#TJI5E*OS^q!j%)kbFd^ zh_i~;_tJgXdu&ycx{g9CzWeR(@ZIlzhkFn1@bb-Tu2)wKZHGNN$$EfrfU<`%U?;fW z2a2LZBi7)q?ha(P7Gx5N;r8gW~mo}RMXwQRRrUcGrs42kM!2HMhY*7WU`qSR=Y z#or+MvrIFksmdb=-4J75yfY84vjDfCB4sL%l=T8O;`=~QQktuP(wS_L4jAkq^T%3C z-+Ricl7#AEq_9#aq;p5wr13LGV~wGWQXgWil}$K}?6+I`wxcd2Ot2^lIq^;!7$pnA zbb2?+$N-e7k*IEj#wKae7vy0^2CHlzSDEHixw;~MSrhUGq;6UE1$i(i2C~*_l#}f= z#HT4l?65gUvE1hkk(jSRR@qNG4=!7e#Cb@Zr|bDmaZRZ`+=kkMOCt0_grl^{~up(_A5zt-}!yc8WFkO zt@f(kyUA`+5=oJiNQ)Xt#*FR3y!(CpY{1X{qXq^HLr(&1K(;_qvKEp}HredGs%yJz zuCbiO55E(6ZxI70P^jfr<;}{BIOli1D=`h_voM4{vTS=!m&>w=A)?tV?FL#|`Y@1@ zzQnBH;)~Dt?Ps4z9*r~j+RM5Xp{^xF_`~1)iqF3IR8EhTr|q^>)-f?PIf{t5swx`e zN;XoE6LOFqNT&;hlfhRLZr^{vCtp9tSdXoIK`$arQ&ZIr?`p{|ns}ak^#!pT_~pO- z3Zq@w?9|?Qq*OWK7s0to*YvJr2TF(9NZXCWfkNuS;t&dond9LhC*?Y@#rYRr?$H-3NfS}Q|a(O=!9V8*5>rOMYB-GI5o z5|q6IF=k|R8>P#JFyPzUu)b8@vmLJ#pyf> z^0Pcw8btFH^7Vml2;ClSryP<~7H4kWo_pyRO5zYXAQk2jOx)gB;P?&{U4ozUSiNoYnm)iwa(U`!()9e1lIu`h79i zh(RdJWXv!KB0XyJPzmomXJ==4BWs%sLa^ONNM$cAh8=5t$!(K$z4p}}^$Z~}v>h=F zSgz^j5G2w_YmpKvYeZn*cWk?DLAoT|xprdO2>n3Vb+CxEn{`>=dc5~sg@7@N&1Q!N zoGoi&Naz%?s>17%(`L;cH5wnX$H*HRiiu2(v~xk}H9}3!>zdj)o?b0Ed-0N|Po8o6 z&Iz^mynMOhlTV&<`{WiT1-|&|3=+)ew^^PSLkLgn`(1^s(n+eaT0ko%4VG?f=H#{Kx+RlxFk%oaxCCL$~4fonsMKZnv1p z0#Hn62TZ38L*Mf3$=B?5J9*P~Eg${ncig*ohadj%hunSeCS99~PG>)5D~~mP&ke@XMK=y~-upeBI6ltL&)IA?@^$A$Jh$Gl+4i`)Vs@|~ro?vJ(liZM z7ndk)m@E!(Rn5WTi0$PiUwrkHufP0^b|d_7>^efASh6K?JS)vGL?&poc4(~_Vk`7j z;hp=w=hp25PFH6nB3aK>YlY!b#e5gn%VO4@zQVr3Pk4!xhT@%461JF1AYdOPA81^3C17=cg4U!M z5UUvtpoO{=xkH|R3(#k3zXQ=$AsYo_+DFs(HvOK72NG>8_YJhw51NFX8IdZTdF z6bgJ8Wa#kTVy#%oQ`Zu6*wd{#mFERg>8Tu_r}mY&gbQq*DPfEuBAy3Dh!WfiTDr!v zh{#ilERGgT=QY-8*4>7G`}HqaOc$(nYbh!(uE;(PY&T0nFI7iFF(_DVu&$goqabNH zOBIg{pJhNV^uf4T=A^`JYjimcgLYE$;k_7DoGBGdDdMdrSlDc?IJ-C(Wox*mvq-r_ zY-p5mRJIb$qqlonrfqv-j54s#=2%~Gwp-(x3H^}RcGBUObHo*DHzmmf3qdri2h$nP zpFgJ?dUWO?jcdU^SEz`&>&op1^l_s~#mJGfdS&nu0dbi#%g`o??>DIO zJ#9EX^!`>-DB;ly1*Nni6&149vOd{l3j#fAhe{!OzNV}UmdR|&>|nuewH5TMWD<@d z=ds^$e4W56y>e0&6ER*iw5n*SMh)vQNX?8y2RIp23#I8x^v}>qn!b02F`mUZgYFWi zr!RQ^;wj6`lG(wGvx`e9t*!+L8U|?t83$3RhmrM7C#WmO(cyyCddq4B2NfJl;NADW z$;ZF^HOs3@0uq=!^a<-UIc8!(?kVp<90JD&i_)#wGG9y~mfR+lN_>tO(R4Np!!^A~ ziT#l{290YJM32)-X#OmQrCdI*I7q#YF=A3{W{rRcN$6^FWP7zFD2+wojKw-byX&x( zAzTe;rx`Y#eC8yaLi!aIc%vm;Rm*;-vc7iEjtFa6du5gwzb5-hM%{>($mpyIyMfEI zOF}Qf(M>&LGCM?>DPKOmh|H9MWI{DfBf`M)h;bkXDeE*^5xS0cx4}8hqt_nr!3Q63a&khuS+iPS(QemF zr&DqFrC55Mv=nhVM<(ruDpDp50gPp_STLJSL`$OO!t95EW-3tb<>fg~o;-mh@V#-C zAtou^MTy-SMF>MVg-W8jNqYZ&kDuq*EIuym67rVN%8-gJJI72IlAN+!ErF*|k+YPs zrYtB+%z;=qknMH@$;#_1CqrF?wIL?FccM`-GJqScD5)|`8D)~5iKje{< zqK!yQQDjUmn;i(m*8BOcu0554oTbA<}gnqr<8T1E$ZYVn)%{ptLw7V@hInD1)-- zzGUOq*5ZpRP9ej{WLlTN;z0&L1f{KvE%ikfWi?KDQZ&TaQYIKGE#8Kt4U{&3gkc*3 zhK%<$)5V;=?+H244FiKx3?#hKIOAAU9;FPS>q&7CT1P3auCCszpHC0ZNl7w}Nm9OZrT+L*<;PUJVIdse_kvLc_orcm?t6q6s*V}_!ccYd_P(5K( zoHO)8+&5iFsc|_-^gT_}>_eGjU&4vKg%Zvh0p~2kka_m(YtGM4dHs!dFy1iqk)i7) zCu$=1Ud$yCU6+`PSdd(0I5?QI*=^ZuHmF;oO?&&D_jvQ2clqak{5f7*LX?AnwQ_LI zy$tSF$?(y(Ewg4q&Y6>w6VecP{`47-9zDWUMN1V1(K2T-WaTVv4HTVVLQG{!N$9JJ zft(aW346{e5wcLUTFdJ&#?bb?R3BMOziVlC8)j8Q-yP8QLc@wKZYzkWHMmL|8w8yy z!(L8ID^KlwXhTu(|-V``CtE+|C#^&@BRxtnZ>~&@4Wqx$#j96P077jR44O; z(i!Nu_wWtwKYWc3fB9>gs=*tBPLb_u$!5FeC`MA2n+&D)C#{Q%3!2GM9G!6Z(6|PzvcA*z{p>=e-9ZGBJy5h}u-{JMQ-(s;?@Wt1k^5pX`#BEhs zd|inqAas&<w6j7L^mtL<)R! zjC4aNLyTM<&YG@uJ@7{&ll zD<|BHY{=`~mc!WzO*17WX*Tx`YUNpWoeZ5NNEV|=%3z!{4cxwa2jetnXJ;6#nbyr% z>Vfx-RL&%5nwqwga8057@?JnP)`^T8mI#SqJUvO&L)dR>f)tw)`Y0Qp)PRW|C!^6t z*eUlwF2$xs0{e`UM02BvIY@A2&KOmGMiX-^u_bgO zNXg0Y7eosd3f($7?0lglNjDO`Q+j2&90zHwHO^Xzui1q?a;4NY`m+yX9CHUTG6)uJ zAy9N<*Dl)8JS)Q*s3K$^pL<-Z_y1mrE;EtQsZf_G?FTrmt%L?+&^qmrCDG|pRPCM+ z6(%XDWPQ-Zj53V&x^2-l@B~d>&h99fUz6Vle*sNCgrY0%*^>(=uBhs$r$ybjVl9*$x z5krN|x=?N87GBTHIz@8G%5pC2f|x{_fj+KXg=8g>wRTx@H2v z5PLrU_+!5Fy&s^BmAg)99zJ|XR$|3}?ZHDHJ-o;J?|+M1ufGGzqH+;58iRF?ln2(E zjpR6ak14q&Bi5_6)Du`M8_|9d;rb?|Z0Psy+#`emr3~xk3THf4OK@e_b>tX{G0}H{ zlcU>IVL+9OeY06h?7yp+E)IxFV_XAjExleEh7d>!x}j&{9mA0J+J(wW4pgrl!w`uv zb2yt4h8zLJ*6k28x>$d$)1g@oQtZ6DXn+@$|O}E>kmDCZW6hMg!(wVYI zCFv6!*E-QDY4q4BWd&9q7k61~O}X%;KdsVsFA6orm2kVFr!b}rxIt3dN9R;okVL-% zbv;I4WLBFkRplg6_rU|6J$pvq?daP;$QfIlSqDdlgq(Qs;sq9q^Nt*0=mJJmyG2J3 zh#{9nzMuwCtl}tzijti+MpY|hSO75LPZ1_c#D!N8F`He_KEU1L396F1G zsvkPER-_>n$CNl_;2M31N%GGi?qg1doUp}#>55xeX-n7jg|U%gE~i*j(`I`nb>y))uS zEW=*T85P+hMsnB^XK5;%-~LdNtD<8;>bE-TSosj)Y*bcZ4+xC;7OR*?l3HBO4($M;Stg|`;n4OrmC z)33R8?;f-1G3}-mHi2tl_8v7<Sn~Agii0=iR24jY?GbnG-Q)M4 z{1#1;FzZkjn32OR>+a|nHz;0w{giIAV^%j@oSm_4Tat?Oy%@PB^@O9v0ahE%&dwO3 zyyuB=pq2xmwVK*D=xj^Y)=<#J$WZj$)=A7rJM^RozGz%yKag^yscMvxF3-M~x}@#Z zsz_Z*wqlkj6Kh4J-wy-2bm5LruNXM;ehn^z!2Y3cpjVJ&PXmX}#B;$~lobDa#v=I@+z~ftt`oLG9M7El-|2VK$p^IKRzuxy1TJ_6feOi5aHz6CS+r4!0h@QBIk{f0u-u{Y`yva8N|x^41u^)5}#% z8Ls3eA&YhbRXF}!3fNFAW;2Y+(#NMg^XUwf!D&hL-mF&yM|f` zAZCUb#2r#kWaH0S7PhfQ$QUV~PN_r+h|^1xAqih^6=;(oOQ@+4W6Nypcy$q7jWqdJ=cutc&gbv#O( zx;86f+cWVKcB?gAX!inGiQjNcsv7Mpx|r$ufYz=Y*y6r|sxlU1D=DHy;cUY&1iB&N zl%g^ks~wZNVp2CKCGNW+_Hup2h%5I_%r$N7S$7+9&QwO@a>j-Tec<+;yL|A$w|Vc) zchOq23oYnEqoshiQnj%w`E4X|a;l{0+JVc!kNo}L|6ioOW7uu+)`8BXB1XG>J!?M5nMZWhbue4Pp&5!6RXXJ*cYb{eU{EcOengvvMC?U&Ti z(MSfJtToj@5F-Vm8Oy>XpGl zXuinoV1oCa_0^JTGhtCrNL?h@K(Bkc6sYT(5CXg17M(K(^Mf)-+3RxmuA>jTJ*wVR z9n*Ry)oCgahk^C#lHGPqHEI-%T!(EhG7D!byq7$?rn%PX4Sn2aWlknSXAUK^Fp!I+ zQVbiW(3U8@XT35-dzEj}frV_y*XyxjyoN=#V7*}&B!g|#MoycCxl%Q|vn9Lrr+oeF1e(06lNo>Vo$v9^JKx~JYmeA2FM0m_DUaTHZ$CO7AKwC9ssN1ayKTFrAGTCZ zXsI{ecnfSj-r4&L0(I?Bna>Z(>0Fhxc3*NU9DN^((@O@^ltt7H5QYJ3%P>{~_d-9= zhnAD$Da~{$H}N0~{+!vo;qvm7s3hN} z>vkw@@V=%pR@`XL%A%4ZIz^l}Y&TaB=MuJ>kI@)nKVYi{?Idk`Amb`8!%h_8Zt6wU z`oTBflYFrpS*}++fB9nXh?Jm0u^kHyXsN8220||aX;qwaDN9Djq?w5htk`*t5lDEo zTCrKK`TEPR=yxrX`IKxFaVSUwvB1~z#vAK-RpXEtQ_#J)*uwFLt}nEO3L3OJ?q!JX5CIS(H` z#5u!@7iZ%B2|d9$>Ux5&9o{=>rjJovLSssAFa3AUIjly89VMEXs774}r4~g5Hq!5v z%jq^r7MW5qv}sGfZTFPO^};B&{um=!8==p$CdU!6O$E(+H6J@8T8JS97+Rs?a^5d8 z84BDl1D$pSpBY7Q4i zD5Y3!mh^3h!D6(>`56$Xs+xo2qp}%;&H$%gq(WnSBg`DbWMEayVa6InQJ= zW4+$;{Mk$H-oKBZOu2RYE_WZ?XFfZ?dJ&Int!b=Br^xx)8IQmCf?3^wH5@*8Ac2TE z@$S2Ca(4QhU;p}73|&v2<$V-`1aAuJK8m`PDkbbW6QbDB$)f$yQFN$%?73R6SZ+6L zb~{}0@}v}s3(V}PuD!7(rB~2R8OGTE9b>MA`XlP35jU(*+PToE<%C<1g8dnHkC4g6 zmlXSu-8~hf0F~wXRYC!hL8XG^C6N;(1*XJUh}mKwMuT?Zo;9WfA_vjUi~+XIY);=E zaCru4*WsqMAQnkjftbp{2=-{IQfB|!lS)*!V#uMGS2BHwrMgNqtBb{ge%JHz#FX=+-UH&(DkgcS1^mfj}%}?%I0UTZUqQ zas#35sV5D7(x9peHfv%W_Vs1HX_(BWESF2^q%^X3G}=-j6ykWTg;I;=D^2ArLuVm4 zT*;*)XJQ14rfF)F6^Af7v+X--lX2EkS5DsRgZUm!jcF)MmE>$`D75TIq5M(fc*wn(cz28>o(s@ukD@*6}TNyN*gj8F-|`R9MaTIvH}Bu& zt#7<9FLaMWQ8*O2VPgiZN&+>KHw8!%IpDnA2LLLKh?jFLbY2NKEnIM=Ew%S7m*=Fz z1S&9uo~$zK^;!yEo#XQI9Pd4TTCp$-Ui|(U7|Xo5#lzc2RNww4jzAwe{_g+zIjWgK z$V?^&q!3UTCdy)lR5mN|m5~EhXBG!D4i`s+PDHxZq#-M$XQ?a##>wKMFkD`UIR34- z-sHP~@+aKCdxx&?dHnb>&z?QQT7#)AwsGV^7CxsXmrEtkNl|$(SxreQVhpOB9weF~ z4xwZ%NsZC7XD@j9{FIl^&Z+%$pP}VkNyvASe4CV*5j+a#Et};Pi^T$!HSKPP_hOuw z9UZV-E{WTM;3!LsK^6_I>4siDbEU{*;<1uucAb-GFG9dtPi1R{D1%7|J8I{trxSc# zvpGA*cmvu>E><>>gH+cz#cF-UFbsqgSS)7L&T#tTDXH%S!Du9f*H(@`b!a2Kh%pOY zoN^Mn)>^cdf?=hVP+z2?3os;|=<;Y;E`rdM>H7g=q!uK_fXC7eJB)K=rO^>wu^eY~ zF;58UqKn~Syr!>F3)w_e&X_D(h0V5Q7nMRmw)xw>^3bw{ptVB^XD%Kodhy&ueLa^n4qYt8V?MWgzq-f z1u1Hd?;mh-_YSk!jN3;C^xF;ncEfJD#C8e#0hDr-zhnjA_+lTg+Jqr+7f7omu(#!%XkS1d0#XL1&^ zM2fLEXp6|*Ac4Xu?gh$3F=^x=dY!)Q@RNpAP>WI5ld@?4GSU+r`oPigF{dvc6Qjke zir5A$nYyyX1Sl$7z}Cv^OlYVZ=5<5pJA6Cg)-8>9Mo_J(AW5c(-nZLUB2r>zQZ;*L^RC-6pa}%# zlPPmwlOt@>rUW31p6=>u1>SRTa*T4GYSLhW7NdYpq|~D;#nt&GAT?6nSiF(QoIV7) zzQQ`eL_Je)-*(%8r%t5GN!E}XMG^LJgEYCh(9Ee@WI1+g;Lvr4UlRYFV z=keY^HuMqt6xr^!81J!O2Dgv`%T0%^oJSeK)pnaT&WP|kr^KXgxO@M8p?@5w=NEkN zjc)@^Ea7zAx^;)o{U`k6&wobFhHrlF&kK4LL`bFvGCiMv_IoPl7`hF&j^_|ta56Lv zDPXmKWzZ7B=tj@mf9;`=6V)i(RU+zDO5Q@^00vSPv1w&p$p#TY4rf!UN)WFYhkY37&?m9&8igVehrn`q!KAKv^xy%vPL4P{T=4SZ zlCQpgLf=Ue?uc3`Btyv*sdg$S&oo3#NyLvavY1J*XuI1nnbhQ%=tIYRF%=lN?OAQM z7!1Cyv9pTpuoFSDx5OYR(_=52L$aOf#+T5-(ef;)Mi`R7-i3}q31UB_Qj9$={7HoC zNr}@-PQbEoTU$h}NMY`7yCX$`ujlhQUEdNZuAiu>oaBo&&XaR5<_)d!biV@6%0#x|qO(!C zL}iE$DwVGaC1mJAN7%ItDKeeRA&ZE)8$@%L(vJCb#-whze|(#}_wTW4x13&HF@#La zhBx1Mhoh5Yw0DwTp94DfG=9On_Jnmud%4CN%g}8ZLPv;-ezRrMb;Lp~SFWOsom^Wv zQE5$|BAaeQDEhwja>?^2Pq;dJfi+olYtE9iqKyMx4CE};JJwGaQYILSpDsAOeIGxY z(Wl6>)0gbF1C!YT=WCvyzGR{el~$aey&w+*0lA(x+bb@wu5k4MnTT~x++A7fQxd7T zT-6>Ca<-x^Yru%!7l8z-v{h&~x=^K`vg_qubXJD_DZ&1@! zRS|j#f7}~3kRL-7&6%cTz3ow{Ld)b4#gbSL#fX%Ose!$qy$HF>@TRgVBIA+=7b)7T zqWvnyhnNEfBhm*HMms=|>Xbz`V7$XOHB~dCU2d5+4p%^m6atj%f4t&_B9bn>Tv+-s z{1OBur|7pvgfa9bZbTcRiemC8?}I5BVwAfvly%D}S*=tIq(1QC@nfDpe$2ynrdU6A zvJO}SF(|CIqJ1uOs4=>j59GZxC7xux*>Qf^Gr8-zeGG5B`z{ARyT#>tjk1c$Ik^O! z!8Q$M+p@e`b9{VEiUZD8Sf{ynbi&2e8nbOhx}q~F1WZn-EPBIH3nd3S#bh!N2U$l9 zQm>vLAJTtvfJ(W;;S$D z`OkjFpZ)kdP{HxZoY`@SOTeJ1I6A)1AAS2f{KMH5x9{GSQ*%lv9f5(&hL1n_4Odqe z#58bqdB(r};-C2LPyQT+9x4wimvfNlgq}TnMqN#~bL-yqYVgXVY*J9d5QiHu-?-r9 zqEiUO+~aG+f7dWnfhk@b2*Go6rf zPfk)7V2xskJ+Hs{8pp@Sv~AC)pMJ&{pFhU?2~9o6Xi6WTE)@u}ID`;O`KiQiXe0Jl zS6AY8Q>tWRU28x>PPAd*#px-=%gM=PPvs;fSrci8UKYionMeuR5HQwBU4)hbW0WiD z_YziXwWMF~GpwS7Dk?1z3?T<$#mgyobma9ZqP-_Z_PuCb7-ZoupZTtBQAQP)=0Kk! zsf&0muQMhI0L-drztF5VEo~oYOImu~UsB3!;k4ODTA z>6EbLz%tfQl@&l1L9NI`EDM&`vGpqNcw zr$76ei_>SUS7)Ty<6OCZD^F9+s2b0z-GYW82BOmVdV=+iv$Hb}s|nMpCbSz~K7LF) z^h_30f`+r@rBv>OL^h6y#ZTtUj&5_m4Omx`23Yr7s?@MucKE5LsXR}gzaVbc`&=re zHBDU;a$?uEthZ9r{^U&@YWT|E?-wPja12g8!3mH8z+6C|H?2`P#9(O4O*p8h)G`uqe?34{yDN% z5XWq-YZfAxRHCd5*8>)y()G%$H6&Yl?Nn(cC>LX)(8v0qm?aNv$dn@I5=a~o8Z0HI zvjvC8CwzJKoQ)3PG?ld&>%~c3w7p7|(a}g$jMf>2CG|lJ0!C00r4{ImsU0yTHoGm; zsz&8ZWvoO9XbHwu+7um~#+gEaB5PY3WMI)L@$B(qKKRAO0)r^%^yu7FVeu4n1|{7&?gr zYKH_yvE8)PRfjj0Jef!>k0}GGO1LsiI%A3qLcQ|Yj|h5{4Vb846C{hQZ##6#XbiPA z=n$xkrtieuG7kf1n@e(nS}Af0G?k-^t#p>AfKi#*q(*~;9%qU10co0Wu0n-e(*5;~ zp$Wzel<~S#TpN(GqBtMfI|~is43B+>A`^z59BOHGFrJjPtb9s=$z(66@(_iFt$j@w zT6AToy<{_nQZjyU>rh;Tlcu8IN{HPMTH4h)-EPhE=No?hk3Z$R-+NbTLsG|Xc}{b1 zyq{rEip6|JQgCp*fc@|oS#8d^x_ruKpZuPykmX-zUbfQMLby%DMbj0g?4)iLac9K5fOW z8-$%So@5+J$tLftVTgf?iwlT}*<_Bno#?kKPG3Ibz4#WW#Otr!qqdN`4LbMuFca}F z3PqH;Zit0;3HUUS(?IIB5PFoYidM?)6QtX2%fZotUE7hvK)2g4oi-dF9P|GB@3UAe zc=6&Hzy0lRxw^XI|2MUP@9&&zaU5XJiqmDo5_FH6?KnTCiy5N0{ zK0~ND=B(1PsE;U<%5s1%Cv3T*1;rcnJmBc? zkb~Kr*`(&==zyy6eEiApn9rwln-#zL@LzFSadCOZ*~^z$GS4qFv-yNrPcV8yHJvc4 zkGS{X4XU%dgwH_DK_O7C~mw`Vd==uOzD9WS51v&&Sw`(5U zyU+RRiZ7mg$#QdvpEN9-M>SS-6Dbpi4eOVYFZ#&&%TuAIyvM%x0gshsdbr@^B>2~wgIDn&xuqDuL0Q{r7viBvW{p`28qLayC_Iu*BkL7#wqe`E&99EyUROGu{( ztw&@{C&k!`xkr2z`@mcng~g)cy1B{8!Yo6}r~(-U$MS1Q+TQC0iKM77QE0qLQqp;948~;8niw;6U9;T@ z0zRu7$*xigSM;h~7#Pw($Qh@KL?8!jD#&oi)Yk18lIKsKuvsm^doC`{P)b6QjZ)kU z*M@{jB9D>y1zBT+DiyQKh^Iez?T~MO``di^#V2%|6}2rDUrKaBecMqxk4hrxxx8Gl z-L84@;*`l`LR8{j*H-VD1g$boyAlo@1$pNhMcU^XYC{(zrt$=nvCc`SrBU=J1h~KdT}x-4JuM;jk0o* z!AM3+Q%#sJX5x@@jnup($*J*|24aRdh{h`hAZsXrb>oGDm2r6};i1Jyd8+9g8Hq{gYRttnbbb)@?$pR6DrW%pJoHKhVXNlfW z<9t=Zd(^(;B%_iBBh;q0nlY@h57ODDjAk-zXbvjA`PN$;A0Dz^UGck*e#6zpIkTe! z4(2l$4?siDu-#(%6?GOPNE{MjwI;U_TPMEy`U}4G-Pcf)h9m!o+e0t9qu&n<+Z8$i z%0bqmmoa7V)MBkyTIhp=g98o^4{6scl((n^E;ZD%3A=v7#5?Yv+~V-?kjYfEQf(hN z-}JoP4m|(#cVq=ex9{-y)87&L9rx@ToGZn&mddD2yT;mzF2Il^WY^bK(XSb*rlFqJ zv}YUX`HZ1t!-<(7lnl(Q6-J2&KdFRC3SIP2@^KlAQ>3(_Yg?gll->_V{VSWrxOrr5 z&NhEYp^Sf~tdW9rYY3@`%vIPAKtgVh4lI|qLY;aLoNp-$T!lp<(j|NTFHi3 zVor*?7TD8qAP0mPa)};@WdL9wUowiBa}t`ZnpD)2hS}i}%NJkM15;NKa!b6iKjb8b zILiJoJ`dy)zah0OAnu8;j%Oy%F?%j@inMaI44m6a*n^8DtCI2kSic?h;tJRA0+T(% zK7ArJRYRiRZg5W879<0&)Zb;bUqi<*<*|Zoyy!<#7>b;t96IEaE>a1^Q7cHHe2*Ll zDyOhUIvM*IMDI98aHM?gYAyG?(TbP^wW=#eRlcXyk{f4h2U;iC^)xo&Q_sD-3;yyi z{}YcM-6O^wDQ@}2FaMR_|L$X!s~w;G{$t*H>rJvsJpSqnKKblZzV*l7rJ2s5l+#Y9 zGp6$yfAiP>k$?H8f8^rX6`#KREyqVkJbd_&pZw(C;ZN?sfVk*NCdJ9|9rCDa`TrfR z1rJF7q$f#8jCv_nVbEc3;buG`TtrD|#kFH?$? z0`vKt7zd_x!|L=Lm0>!a@{RZ2=jh}FWnj6yWVhQ;HzF=nN)b^qd?=v@Q%0=VB@fG5 zOXwp9hcmplh08Cxplk?11cG?w9n`O1bJ_gDkyCpDVof5 zI^Bo$*=!&R(wKV5DpO@MQAO7w;K5jNA}%kLM|fR+h@2$io!NJ_DJ9V+T^Kk%I^kPy zzsp;XUZd+eo;`cU>GGLSbhl49I5}pB14?JEUS6_ZoiX>GYCeT9fVH$;X1i-yZMK}P zci4lwykTqR$9I^W+~rQ(a&>jVizhuXc4Q1~AH~A0C6rVS3sQc(>ss1&C*6I0i}N+B zt8=WYxPA97IdvEfCkG22+`Y}DcGPu^@fA-`FZt;4Ijf6HjB%XQj^k;K&4H`)bNRF5 zyCfGNL~;!HNlnbT1ZIvXjx7GxTB!^1m1r`w93)aow4tMNo}5c>86{lRT4eB$d&N1o zZ$fCdJ3>D|is(|kHTDW#Um&kigz|Z+(nmPX6D32gB{}K&zOv|ZhvUe+LDK!)OD;cFZk;7&v^TrHSsCFby{JyV!hpB zUEaX3!h{RxJ08A%hrjykAM)eB`AN}nXkdWU3e932Kl!VFM^=enfAkTTmzSK}y2tl_ z_}^gsjEpK`MfqTkPTu0b{qJ7m;^mUx|LV64edPUb{R!{<;KvX&I1gDu2%U39zx4;g z&Hw5n?SIvWUXpW_#5KeiamCI~&im>XRq9ki2+ZbF#w6Zu=!F{c!tZunPav}EJC2VJ zxw`n8^Ye2)`{-lddi!lwFV1*)a)-OK1s21!s^rvA=m8N&OT@sY-%5aE9Oy$=s$OKX zveuG=lwcZPp_Cv^p&w{`!?!;8BVK#$4W`pMS63^ZK7Gn&yP}y)N|Lkads0>+h&37& zvqbmXs;q&AZMVaq@K!eS7^A$;N-~L1j+f_GT&;VQt4PYy%sg5v+J2BtqN(Wn09sz7 z)``@Q=va+W37r(ySwh$2eGSU&^SOp7`Angsid*Sp6V3O%|HK8cWh)e{*V0 zS?Ie7#w-Wmk5c_pN5Pr@800*#gKcw1tA$Iuw>3WQ&xk za5zl+&Hq4u&axe*AN*iBq!1~QHmPEf1*pJ6n@D7To73-ZHGY_DpPOY`&WMaeB!HWF z&pCUoImaCH8xc@4YD~Z(Ml!Yv@_-s8z74H7q|)0w6ZTE|bAlJMyao)(08dQxcKLIB z+OP^iHu-#z2#(!)1E!=@CB5pU>my=Ss_VuJQIX8cWh9 ziuL6s)>`JXDb>-8*H_T(k2pP9pjg4c@WeH%#gYnSy#!$ZL|Cw{eU@df#k<{O-3Kj*cuU6ZOCYCbR6izi=w#fu-mL&ZR*Gkg?e zQKoaEcUY@AIbE<`Z3#h?Z*4Of;5>i!Z~m08KL3Jmzx|GWwPl)Tv`vo>-642-?9_Y+BJW$v zq)gE()= zmD0r2;TBmT5J@)(Vb~Z9Q4WSQH!sVQtE)F`wret*b8-HVA$mNP!6~$@!4`B~gU)lb zHNt;#F+oYK6mv14R1aRIND~Nybo2@d=|12DVx&(*{_zqbbxKBy$u$H~eYB3)6#EfF z5X!q%6xLv^p>-Wuk+WDV==%W@^sY@`pF+ZcD{FDcYvDm6TC@W3&NWV!Q}Q*JK7|B+oM> z+BHE`1`(VRxi}_YP2y?+2QE!!GOV)Pyt$#wN^CUvF%E~2G+o)c^(sLY8Re=GKq;s5f-|_gL@AbcV*H z=d-{^L*)ajq35!76lFy}c=lb7(w6DbDW`Y#WM#!LbSSN9I$^`*c}_$wk->{}dkh0%2)w+yq~C7ICkqOt$b4XyTP|jE7G;66 zIaO8>21oQzRAP9p>q0z@NrALV*2%5TXl$|8BCCC{qTb1w{hMrlrIWMt@tJWLZWq20sj} zRyQ=eJ!M(5SS&>0@#04_d4Vk}eB+76Fr6Mr$gq0r4hgqgZ~=87hLbMokYK8%$z;rK zq`7hKw()Y_qXw{9mRN2uL2& zLqE{_9=m$=gl_qY`rbYMv(G-`cYpR-`in_XCB;=Q?R;i<{=*O4fBZfu!{ZNr#_DR# z`JHzVBd#VOomiGS;Fzf2%jG58?GiJY;>L{;EaOV77%WoidpZoZ+byWTWHL!aV40=1 zT}#t66h#3#Fqu^JUCX}d*=#l_6*)edr|Du4FG>hpUtZD&&B^(_!y)B5ks^27HFZ7Z z;_QU^e9q?P2H)*j?$)&H743S%pZ)qv`hCN*XU|w|8c>>`m8eNt$;O_N4_aB)bly?a z6UZ!uQml4+9@Q0nh-7)mcDF=Dhf?y8S_6cL>wE4!dY_Lz`iRBx3B4P5^8Hg*tIZ(` zsr3WK3Uo6YLpYOKmt`3`$^+EaH$o}htM_GfmmVS^-yQ-?hj}Ssqghlys%F_*l;5dw- z8wN6K4~Ku(^w?+#UBER?)VJsp<{`1+R7m&+a4w*faK^^b4Mbrd5oDVRBpxR-2RLO_ z)ZD#$A7vE3{_Y!m2=p%Ev?Wk5J)UrKaR(O$Ci5-tKK_K#cl_kynDhCJ+-hFGd`0IS zy6JfFY|Z_5-lv+KV2YZkGdky39L+Gxg1o9(udWz^r|TO*skBK|8XR?5f{T>7<@L)K zT$B|>rg3iI=xEO3Xo|H1uB|Avtc4Sv^S>q3?| zvVziNL}PHBL}g9til*7)y@XsZ>N%M)RCz^okeiH=_^+cd`Z_OO4sAG`7a?#6YB!LS z$ppu(b2+p-$IF+`A$Zz-b6B>}N|Rl02#+X8Ov-YzX202TGQvWG_+ut1=h9>u(HB&+#eoD*7$*wqu!$UkLPwpZG76hp z0RwptF5;tu09BrIdUj0TNt2+Op3(+iG| z<`hQ@y4@Dnblkmrm&@fwww{B-he5nsK-Uejz>`!Vn@s3sozr(yHp>nB?T&!Jx*tBA z^Vw&g@#`-?XS2RxTGbLeX9e`!_r1Vevy9oIBr{T6`9aKpQE5Vu=(1?!-qg85g@6kK znXw5QBaQpuygY+Zp>xfUyrarTRHndtQHcl?Mx$K9Vnk0}<}}R~ts+AhnB;S&OxUeg zDa&-i&31{+B%2dsMa4^>8}FR(*#<{u#x2)022{7>WSx|Hl@=sG&Wni0dq+`b_;yXE zJwvl5_@2Ratd<=rD5@f-%w&5wGm2rq$4AX{I%7JWQ)DHpn`^fF6-~e6=y<`TDp;@A zbo)Kkw8HLI*O(Z%I9c#}zw=wne)0%`3`tk(yu(^CWOQA}bhbz}qM^u3F76!xQr+3C zU`U;`4+BaV{4abWG^<)Zal(^-fAM>}yLP06TY&PTVQQ&A)8~rxh{g$(n z69QoC9L9Iovs%aTWr9&vVdhP8&}^^)y&PuC65cqQ!E zttutsC9SC{i5l7O_c-U6OeO-5GdY2bPk;NjnV+2V^zw>dfAck_C^1$x;iB;vBbzqy zF!UQ4RTeTaRXf+yH9cijN%wgmjfZ5%m(7gPu&t8!NvRa@8f1G$6Ot!Lm{!9upmU8; znx+-=W0n;n)0^>q*5p}+b3^h{7+f#o;^-n(DdUeABbQgN>3xsKGn>s1-m4fQE_&HE zRbuqldVGKrK|0F!V^qo*R7S>or0gu@BC#ri+#JST;EhF9vgxI*;4!wl9YtAk@9qUQ4(PVQm!*l zGH%Am`#S`hT|+saVzUC2VxMBLKr?g#?j5t_^1NgSJ+2?b6DS%XCSgcI;_s+&d-E`w z*4SJwlq`*#$Ec)X7!L38XpSCL9-SIA8UJg^98Cp9j2w!YQE8He4ozK@G)m&7$}Gof zEv&l`enb5keO#kbJN}4i%6#y^FdjeZH_r99&GzDbG{THa&e@m>H?4(tWTU3(WGl{E zi^(h(7Z=z&cPX+meHHNz#wf3MQPvOw+Q@h-(}{f*6;TI?@=1Qns1nCY%h!o2Cht^` ztW}aSS>$Z@EmI>AQO$nO;^>IJ9T?moqgEt2L&ClFZDd&ts4OSTb571qsgKSmih`zV zDU&Ux+Y8()l6pe~gh~h~&mnmL6ymKxSmk&Suh`V?1vRN-_ znuaRHx{Mw=@hB?-p5ZV-Foyz5r}r{IQY%Tfil8l2km6qo*IWN6N@KN567ZswMdQIc zViH`4V6CC53K2GZLx=;Jp5TT~vR1QoAOrM6s$hnZWq4wc|0gv zN{~M`-Lc~)q)Gl$lZfs%Q&1TG+yDNL>6$+jFEOyZUa`KuVsmrJZo6T1bA@w(pFDcZ zKmCLMihuZ@|6?A%`yT)MpZqWU$)EhMtoB>-y2jX?yLT_RbAFfm4zL;Bx9gR19hPNDSyo64ui)uU@j*?+9unD|?KxC}Yw(FQ7%=8y^s3#F3|!q3>JfM->Le(01S> zchB#zSe)R{l+!tnK7PQYgwKBGcli0w|8H)(EhdLNQ*^y!h!UmX`d-F|DN<$MHP|e% zLNY_&bsWu)2r;ISM@ZXo>Eb{UloJ-2AIET{OmOL94PMwMN@(yZ%V_rk1I+WB`TRVe zd_n*KAOJ~3K~yM#Hr1gp%d(OOckeODYm5@O-Rn13ym<8*;{^scErecwb9G7Iw}(qW zK4)6;-@HdF$sY@;=pq#yX1rkDx-3En=uBcRLO=-cNoiFvt-dFqs?CI3b~j3^R`4 zl_w~LMvP)1M%ma55u=O)HtP*OI@+P5={l4tC~`?4m`-w@ zzj%uBf#7?{Auk0A7=r*k+o7lR0wR5W`I-}sImxD6K7WmIdlq?49%TuIsHp3jZnvjv z8jKO2N7FYHKy*&VMJl7|dVJI3T}Rd^=Cc`9DPi@)FeDgiLbjxFt{O+MS`<}fEheT7 zXq)f>DLTfdEv+#NQ#d~|s_`MP?^n8JK`V?T(<^?HnN7SuqySM~nj-HrX45(I#R7=!5AYFkCN1~w3ViV zT;frMG-4&$R$_X;r%KKR)63 z&K;`hF^-Jown5kXq~3cmSij||vsP>p@`xw(J3<(Gtkp~=6<3$9Y1=sKsoyMjY2Wz&>ZYm>%^n#@?n z{Vr<@CX)$^<0HHqm{bKJz;@ZOUaoM#)3iOE^SpZX3PR8B=88Hq49ymt7baGwWi!QQ zDC5&yI%4wz=OblNW0Xj;MVT{r$F6C)zPSOdS;ySH#~Xr9amRZ6h$Ro1Di91fFEQOAU3y=o}6ApEq;JWT|w|n%IeU;9vvMq zt!LCnXKY;HY;j6iipKHq(Yri&=OMexX9z;ZCwzfC;9{^2Xl2pX%2-bY87F8_V{D$u z%5LHf_&CP+h`JVn5j982wqqbdurlIPZ)HOz!{U&#sEm<_hpZ^b3QO1Y5SDP$2Sp5m9I;tOw4zM- z;Ki^T5u>s-bVH9x#PXn!k#6rqZA|}ZOowQC+OSGgIfKIMl%=RrwjvR0WOV3~FD$x9 zRtrqHXl%C~YM_e@E^xKH;rXlQeDlp$%oj%- z9iLO(xlc8jF(^aV?TB;z5?fXjrC~mu2r+zGV~z|OgH9t9AQAbKcP0}PwD&=hGZ=S>D7c99R7*TcM8^z+P71q5 zMNg&${h^W~GASo?-N3x47`!J0J<2{=O6OHZ~Z=hsH40W#MInMPT%Rtg8LVDxc}%8R3&#G zKID_nJ_8i??Cf0T?_JL8>m~o&|M9Q5^UGiG(=R^f_kaKQdHDDdU;XNHzWeq|tbre& ze8oGT{0!*0xw_)(ufF8f>u0?G{$qan*>9oj1W^3yZ-35YTJi3q_xN}J_D^~G@)CzWF;c1^3P_*zFsJ{T7qfXID2@JbU?q^=8L*zhmFF1lMy^RX7c^q98BDu&Rt^ z-*+@=p6yX6V;Nke=?AOtEOSOS=04B-Oyvx_{LgIrVV|wXXs?s>jxP6j(#WO z!H+-qkc)d4m`t;}S@H7q3)*(i+1Uk*>R99!E~o{3hE7G6zLn(Lw&i4TB#4M+&ultn zI+>s`T&>o``jn$H0mph^I@6q<9my7Ea0$SvrJ&ND7zf&>BgU4fpq$R6Bhm73jbX%P zS<2j738VjQc8OpNZoL=5OR{A^0&acU-t#1e6@hl>QN5$ga!irobpQ*6E+BX|t2N(z z^9`@dmlVcebU+7B90qb*a6CPt%t}_*OZM9x205VHUe@Jxiu1`bOHeAUMJxPpYhw2) z{^;#dM{pjKO!+PZ2%e}U?L8=g`>FJPj0LXAq}UqzE$nuTU6P%Z3X=^KuwC)~exkEZY0wH=r1HC}5j z?myt@?iox9ys@~fU_S&=9Q_WzcD#D^hKt35Fb#f?&$v+Xr9tyi zp>$GDolgrLNfBklyU0)BxOrR%MxqN10L@7g&SHj~P z8iE_h?I@4m-o&0U9!l)~Axd7IGGN7-Nas6Ahe&tLq^@b2hG7sdPuF#cpC)VkT4x0B z5971mNd#6=)|8VuCwJcA;@(3}@7!aufH&9hjEKA$wQOizQ zQj5k(j?mp_>~=er%MC~M41o7P{*(_t{*=F2uIammEQ{sK|1B-_!fy zwpb5hes9{25Y+)>t*w!B*(-Uy4}-1r*-3t^5rFGsz>brS2qC6z>KN&V7N~glz4v5- z5hEH|;=)Ii)!+hH+3Y=3e`8(J3;Djta$MKb?Dm|Tp0R0Kc3lrD!)hJbw+%1n>Cn+i!UK^a+3Q7yq8BE?6!1T;FVXb+zQllPCP}r2YA#0Smm%N2c4^o`?x{FnbT>zg&7eEKOW%b70b939Ohp6AI^ zVpM$e(MKHLxdS24?RIzN8&ZUr&(?=nI)giI97)ONi8u-4Fb2*5olL%FYz?;UO5;p2d|n%1}J zatnuxZ5$Pf8mZDxljH|~xJ+Y+cr7C+7em@ql#$kKam>-t5v$dXvY4T?7Q?<#EEaR} zQZuw$UR}PT+idu8d5!A!l*(~Z<&@K!!WdTjE&JZ{cVB&tuaBwkTwo?O6RXLhqQ^kr zbGA5Uk`+v+Q+(4gn;tWtFL?FrM`1}hQDOFN!zUmAj8A{(w>i#hzWBw@*{!aLVc>W^ zqiHuX&Q}&?E&IMFb{!{Co`ueN`D_}^2cLex-FM&R==dF;UhZgz0h3kSyLTUjp&1&w z{hqez+2}1@H!!O1qsLPU+?cv&!vN%2A>PEq($NtHmvr|-`yNvOvnZKay5zn0^a(aP zUPK;Iy)soW3S@Jpw@LUIn^;QHwDf63UnwOF!lXDEW5{hzp69rv?1DVE zqw+aY;+0lO6;*%lGwu=4>HnLe{kE!g*w9TL$2g7^^=(EbkYZ>?Z>|FM7C1CrbV`W@ zB{)Tq6`UNMu)cah-*;4bE`HqfcT|VxAf~aVJmZN=A_9d^<3}Z4HeyW1eA^*W|`BAb1agY&vFI zmUX(WVekPLZ>>UEUJ|WM4XeZ>^=?2%Nj!-0wpsZ9`Vphxd3+4$q*A&lKH|YSY>{(u zaY2YNEf}QNSSMA|it22}A}fe`DNl0pYIGaZ?6l4oaf z9)0i$?S9Yl`UTgkJ(G#&+i#!q#g|X{=%bIAOwM`ra>DMl6i)@T2SNwwgM zzx|&1;z-uy%Q=J{Z(cXNzPjdm+cQ7C$8NJ_z3q7V{R`@1Mm4W#_j@j%Kj-`Jzvsn^ z7u>yjALBjy|L~WD5ZG?lY`1%6vm@@^lT0%R%;!^JbLtqJNF;Z4+GDh zz2NflHQ#>wB{!GXtXC~p*IT?-+*~iYyu75_4;Y=xy1#dvoGln)AcP64t80ug^j$~~ zrR3!W4ZD3qQPyN-fdlHv1XGmUtT()ReaUve!5Bq7DN(s07{d@EMOBm809`&^1dcEY;t5-CA$E-Rgq9}?=4u}*yDbW%3U`QXwghm;RHcX0A zLZ|y4ZG{=+y@2?#N>-g0)6pgl%^o)Er4)n_@p#3I;3M8?V$>*;OHqSoT1^>TL#7Nd z4g@F6mzcWv5FJ5zoKl#mB+%InvaO>8PUwPoBS#YS_+X5ynu?mT*$a5K?1$mN(FyMy)bR;he@=3+u9oN^_q8gc0sHngYoQyqD#OP(jtcBqf zyc{ZlagAW40?Q>}tYjNTkX*&I1!asu$8g{vX=4s3k`MyDgTaMF3N{B-!8w=gQG!*- zt)+Jz+x3dR?SGTBh+c7qzH80)3`QyAsjxs!zRsmvuKcx5HJBuvLSKt@daPBkXZ9nb53O6jerv(f5u{Q#NYh<-{bm**Viu@+LrUv6N)Tnvs}{- zJy{`RCJa=wf_JlfTs(ZpXPI&;{J#0+lpX9fVpg%7OU0+I`1vwZ%09UDGg`Oqfh2 z3_~aHQ=TzjEO<{vPESuMCp9hvjEPvICGmL68wkdtqTm4fINV-V zatt2)g(yiFc-!-m{u5#p+ki=m%Ppuj9>S+%48)*i3_e06Qzqib%Zggzyx>~Ks2FK9 zWMn!x#}LHxl$AMkJ!LkTvV0Q`OtKIY?R&JFjIxJOG71mKo^W#Oi$5rl?L$Z)Vrh)a zEXS5LMOEWfB)7>Xkp4fdBj6b5nVlT5I6Yx@e8S@N0#!iM!_GmGL0wPTuLO8Jjy%UL zW9J+;%cPi1jixlOqw7t4$ktlc>n*F@8H)*&3O@PdXZ+23KjCkeE1G>rS=1E9N)Zvo z0~(@yPm+YNge6odru_k@r0@%)tmO?&2G~m3v7TU-eq>~_E zP*@~=!kAu)#Ncr;B*c+SO-$kgcEdmw9ZtzeIA`>4-!5*vjRhLHS=!u&cH1<42#CRd z0Lp5DQW-L=)wlETRCj|+9MVTN6_~;lqi;aH_1qhccRexJbX_B{Nt@LggJH2)P}UU} zckeTsPx$uN8UOD8`b#cOzoTt?vTVlj@jZgh+3Z_ZyAEtYSyn90?t(IG_AQq;E0l)1 zns9n{k6rtctK~CnK4G_Suvv|A1N&y6>w0Q6W53_?=FKaCmY$wdRTVc^*YvJqwYmXh zZFRHRuwE}YJ3Ha*^n{^RynObAUw!en94{6qHSp~>zvgdGX=}&3?;vyC-;y zH3gf^j@5EQ-}h8iO=W7@=8DC1l5)7DFqqHhWHzU3T3N$S)Z}_n612r+C0SA8+Lq1@ zY<63kwxx>$4!P7DA5bw8v>^-utuoF|&ZR&KK@MS;MlwEoG| z7mWscAHZmfRuYm;@+*XxR{f;H!jDFG)Pc{EX;J&oN>oIQ6fY`*3q&oOj0VtJva5te z)nurUMtDlh{*$WW_~?kqY(|W-z2?#-oE7;&;ug8hLfgp(=xBmh zN{pc6sD@kPJ3;LLS02E_;hknk1FJLyJhHmHtRLH&M7A~F*t6nFWI>rO2K}; z;a9)-CE7czl0U8MI$pkdMb|ZCO0(PS88Ad0`2O2pv;Mr{`22!LFJEzVe9q+PnBBf* zv)M45oUp%Hb9%Jk>C>ld)@z1gV1B$n7l!5fh9a-nZnuOG*tI*dy5!zF@ACS^5B%`m z3o->4CnubroKmNSlRge)rN#!yYpe2tpS=4Hp&yu)HLsR3#FWqdTBGoQ~9+k_OwJYMw^Vn;7h+X(GxPY4qxNC0nOTii|(@|}e;zq|b0YDg6I0qy=O%(8L z>gpe@=|hG#zczv)gq7{!#|- zJ5+42)-tI}PS1|%+5r=M1TA<5Z8NmV+4U_`Q?l9YFj_uX#zt&}%$BT|8CBIF49G?8ab$3AhVWD z-}CD7hHrm-!FJ#9;m4nHb$!jh`B(oZ%~n>}l{K{6J%jIYUIIo#l<(68FD$1RSez}e z+R=3#d0t3H8InJ!q7)rtYQ=8o3EmT;0cAz*#b9*`Z`ESJ9GpamSR*c>=TCni&oZX< zgrlRm0P+xi7AecEcLNd0c^f)mMOF2T+2WY0s_41~V-(GH!|Cx^GLtK`$_NVj6n8PM z6@xr%UDruAWLc8uvL+l9NeT4HKh;rZHJj~@llh$JWP?&nsgk?sTrU@%*Mwm}4}-)G z)pd$6Dha-mE-xU2`_7ZwjI;aaJa}-AyexS6;x*6PmxsTH$ubF^9XzEepzXyE;d-zJ zA0jz9Mk#hFn7ciMxCQ~KY8jjO7*OamDh1;sZRa3}p;|aJJw^xWT+_EJa;4}(WOv=5 zGfSRZFa^K$vwy&}p2?`obv*h0Yrg;bYkvIxIkVXjSzgfgLpn@hHZAG5Ykv6VE6y(( zrqdNo6YvqXS6lAhyWsWn7wF93qbDyjR=X7^)iHhV&<3{a4c~qHH4n~?Szf;;t4nM> zrKlF%zjML8lVgnXym|2yr3YSKy+*}IRb=QOOFA!}Jf(Ng4d0R--JvKlw%eYpgxzin zNnubbGMU!wb}M{HYwBs*YO)OH2l`#dyjn1=YNEC5H|rGUZ18;~&jdwcLh@p%gy2YF z;G&>PVdA1An#j%ehNkOM!JrR@_o|$5=k7z!&hI6^rzOjzsP8-3)IvkFqVz^}3mkQ5 z9ExZxg8}@Il5j>3rEC(87b-d}PK2atCr@P@(GyXV>4d8>mMo1#iQ(W$jM^mCSX2dx zLy?O(WR4JIn|S2vS!;1YnjCFXW@i*7cSz&^X`T~wlD*7}cmg3qa)jYR`82n+pnpY*!YL=@N zr)L#23$qD){OM2m^FRAjF0WqD>{b-^45gyjRWeKPJ=zE=!+U?oAXG$D5EHvK77giK zjneocqCpHnI^{TEVx+JJ?;O^MRUy|}_>g!~4hC5+Dq4PgM7wWjyB*4B?E99W1BN_} zdS!&J4Z<8GrI18VUY4}Gmfj5q1vb+brGz3NML35oa~ItKcQHm9`N83XBUgsPkai@E zU^342_?fWzuF44w{>Sk^kadx+Bc=RsAc0<%T^{m2Z`0>RHo;`gkE0ED}es(2UkB$HUAOJ~3K~#^Z zG(UO&L*6VmJbC(ps1;dRVQfh?U67SCdRjW?2+H7MBrhtmykytD=JN8IdOBekJb7VI zN@VP-t1JHU&;Oh!-+jaK`iAB58dP95o5{Gv%iKB73PQ9flckPP%ORr-&PUeU4M(#h z+HTKg-_wS`z8zTY_NXAM+eFP|eoQ%$bnh_`^W__%ss|@IZZQP<&@%*&Kqn=9w(SFX zR6adOJbSFafQmLkh( z_R<*(TvN#3KFQS*LTmA{7wH%|=(D_J%=OBPf?eCoMXgeqRtbz7VlU$pmuyob z)!hjvCeJmQ(G*rTFNp@_fH0si*eu8Sf%RsGeSOJnHcP6KN+<@6Nza9Ij%Kr!5epup zq4Pb#YkW+bX%WWEG_6H-Q9+2^KCQHCa~nY+5kfhgcI?}p=sc52jZ%?mT`*V=v7^jt z>f_@>{#!O*P?j~u+Qi4{*>89J_~Zv!#g0ngjaumSIxDHN3~O_Wyu_gB_6>DCr|ScK z2&~pyjExMg7q5;2V=YZLkQXIaS2y%`dS1SK$(LV#NpL-7nS;uB_a`5cp@}BrC-1*c z)2``b&wJBa_*E`2^gXNV6^<3#!BDPx-u-xn!eTWvn-#0!hLA@3ecw{l74vCL-%0*q z2xnBK#BhoIBpwLwj6u4@1G+?1$J9+L0Fx-^3H3oFrj&xgJMyYZ0Om;VZiAAgu>y=m zrvQ0_7>~#J87Y2zQhY%IHIo9K7nm%gbpvM56jq_FkjTd|ktiSP(D?(0F)A%eEjX#ULJhUCsqj#!2T2I$hxMEE;3z_FKxbJT#9sw+HB{#AJyIGqT%eM{}n0 zIc>KUl~x;+_rl~dvPmh8Lo=N$iR-?%WIWhHx)q{O_s~KbSV0irgctKa4SLI z0r}~CB+DzZye23ZyqNxT3qudDUcTg)fBg&Y-nqm52M<7NcDtRRK4N)j?By6zI07b0 zYR2fBb1sl)vOslp)iS*^A{*}W&QBik)mLAz+wG{UxhymUhZ`hE(e*uJzMoD8h!Hew zB5395+QfX+k{sf_hv3PK5@bbGvgJH@qHFO6V(8_5h%!DaY)+XMV&V_ds48Sa6NVP7 zK^K_-tewDZjY&cFN(!qGQY6vHa#QJZ&+W#!8NGRm1IH^S#^S9T9+Zv}s;*-C8sYH# zNwaWUT-|=w$6xi|`*kd+TuAX&=_e>`OdYn8x`U_BpYrDBnuibHr5gsOM{{<&hF#Zl zx2R})&o^IxPgdugpPsTfUGV138;<73Eb9&3uI2Ts8)nm2+<*9(lRHP;efFGR{!-rP z#cYl#3kIcletC_}0-N1HQO(e{WV`Ede#O4&q|0juLg$!Y%vs+o*|&~KQ8Fnj7V~4e z{eYh$7=H{gYI-N(nny=9Sy2MA0RzwugJ1)+rip>D+t9gzCOFyvs;HP(Q|6Nyrzhvk zXA{b@;Ogd*rrqIsm=q=Z{hpx@tS^^DZSa{ERYn`Mkri9tMO07}dC7L)$vS?P$pf!S zVsvz!fIr`RaG#%i_yK2k@6dV2%QrXt_~s2ZE2!!T+Gc6}K5e3nGv-lFO(n{B;K?SE zK8zG|qk$2!2UT9s?6%yzc}>$g+U<@Xzt0#3iSL=tYKg<}!W}Wn;*c)e#UN@&fU256 z9B@OxJ4G>@9R5t_TSg0{m@H!&?Ij$C4}{Q*0Z|KKcQo)T0wD?*b-UfkAyG^*M;TQ$ z!3|(ykS)x9Kr1EY+yu4@LDZPCs5!kjC&tK&S1-AI^BV6R&2~$c1MiQt_ zMhDi2*JqU0wUIF3f&47$}p08uPJkFI9PeGK|*bwi1fBGU!Z@5H5&m zdhb0hMBH}IdcUVAb5SzA1ZhVV$&?~jhTuG_)r}NP7IKveD}8tyH72+Lu-hLf4g;s}NignFwZLWm%=Km~?(?N$R?kr+ zitLeedvk^115}9AuApxR2w+ViNI}x#u{Fx#wS4xV#0M$lQJGIkochV43u`6>r!XQ| z2|nh6L5pfw-yuCJiposJ>DksM7bj!GG*X^Y5{K=gDsg2VNqJ9cOM0KJ0rK9W6M3EF z>L_!Y$X{0(5he4P#6VRJ?m)WZl8;6S=}w6#zocmy3Joz~NAh<*SYt|g^SCo#c$ZXGdJTY4KhnV3L-`u#bUgtu&HVg{$-4?7QB$NjaR@DubEsML@?$8hXY6?{Tb{2x3V>L??sBL-gn#yyxcKTMlhc*YzwG3x0q21E)u)C|6-j$-8%Nc=r4~&d<)#R>)}H!)kRx zC}ecAm><&*f!>SyDJf|Bj(+fhplHpDSFdT>ElLF*JbFmfmSz~(H3t-mCr_WDRbsQ* zp}&32@#>h5o!7HMQUZCCA{7qp3ijKMl;nng{|BG&{P}ZKVOj5Yyt%sK zcDHd`3vcG8-x0L%06(R*h6Pl$&m&$0U{o6zNO&tVv74hPyp!+f@wI^?6{ zr4&(KP@@>`tRTodG_*uYgrFFLn3)<~pm4&wuy>McA<+usQ3|T;??fa7$+;W7Q&I@{ z!RKO8eqQJW>6_IHA$6L9=Fs82SV8#gZe0{sR3b?>+P3WoNwGSuIX*qY$AJ)p$9J?^ zpn{MRg%hAB#giBl->HTa_jw88iKDeBuZG}r(G_G&ITHJ0BpN|~j2^Q9GkI3dRkTfL zoEOXA?r`BRLSTC2f zT}M^dREs6gKKPKbELqH#!e?;~Z5+#^6KRHoa6!A5#v_n8esBi1M9o$7H1S?Vd#d2XCHsU(fK*^vJ$ix z#iP#i;2~v05CV zqCCfA*nEuO&?0V05fRSBJ4G8K!B|}X6%teAtOyax!m>XcI7um|P=x7u8-F#%5aQ?& zbjNv;gGcU*OF~Q*v{DLHmk%5As6HtPoi{cgIH-wSJr-4o@x7I-8Lg(mN*X~eNbY?E zESoP&y(Gq{LcAW|JtJ7iDW?!6T^KyE6ia~=l{BkK8Y62hDkgjw2ti@%O4Mhgzg#z9 z3WwDyBW8J@%<96FB&lL7vP?>t+;t6+W6Cz{dD1Kd2fi{|y zewSPL&t56rg9PT-G&}vpjqMeGZ47cJLH^U~{vf zfA|39Bm1UdeRad_&4#L|dHnwSEEWsSA3kRA@b>zWi`#3Iv)HO+z29+se2OuSZs@t* zZ29=(k2pF#rSDq~Lr2#%9Is}aojt&JJr{2;Ss!+kvzpzZ<95BH?GjDvIbNLzNmFTx zqM+*r0zC@D&>S#mw%aX4iQdu1fh|ZRv|A8aaCG{N4?p>gNAEr3?D0cRPETnL2VT7R zitF1OUVQU{&2|eavfnps4;@`Uu=71f)m#vf0DXuAgTzb>kwRMvHmKGa&dj86l{ao< z6s{0M%c`m%24YMsmn+tr9T#t3a&viwj)Bm%l=Y0tRScn{=~}e13@Orf(mjR*5wT{l z)}oDUJUVEI;suq0_`{UWqE!<6fP2LIF;YXyhd@j@*fbXj5wUr&T2EZ4%)E({RDRnLO zC&$ZU>T)LgPF0EkW61F?xoAKc1|R8y_&})?*{@$wSQ*b+SI~!UvI&{ZDpsonfBL6? z!eTb#_V$*x?*-lT9_tig=x`RguBDjGM8t!pE=t)j2N}B@ot&~dI>nTgkdrkG5lkWb zZXe-r7zlkw=sV8N&X_NtuI;1CSVL}!k=q#2{K-77xA&Add90|c*XOvh015yg@Q zBu!nue2?(OMwCO5QS?0aG{y-gq6Nj3aQcvWS7OXLz3=#n;-_R0kG!fVr>4I(m_VGYOngivYtgQvZ4VsQTg-BSo7Y4y+%cmBtC46F@tD#?K|B)ZAZp^?i^rH& z5-8to2g*6L&6eH1p=mmXkoj{)izR?;^^!ST&oEYmGypE!&TVgQSzq7aeaNbK*&FM+ zrtf>9MAQ{^HAg8kA(7K1l0J9Z3x#9avD-GpRgDIozJJEQ`Lln=%WuAA=z6Rk5pRd6YV}wpPq`+RnM}j zRzj->-(~w7P4qn~c$&kGYF2YN9602-CWDaEM?XO4T#oojnQ$&evic`vsZqfymo3|c zs4Tn~QNS1gd_jZ0G0Fi}xLWt#Vl;;SmtXmY9vyvW?TDA6VYxg)p|E`?8(LYGY_@w2 z?SQt1)$*9L^9Mj=e`vY9`~%*5zW(|JH`i<0eakO@@hh6a3*pQdLW0%N37>rW18#5E z{Qj#iX+uZbb&|8zisE9w-_!R!$Hyy9&Q35+=i;v5?c2BPwi}kmGwS7n-@W=r{_3xP z#_smO>FKEiM0P!K@chHj6T60H*Wg@vm(CqW_hK0@blpHdqB7g<*S!4Z1y^rh^ZM1d%w`q6AJ`tYtT#I%dGt4QxubHFr2|*d`hkAv zg)^2rxG;D^FQj|#J$;aer|DWg{^%o~fApN=vs08(yt}&O&6{^rRW-$Kq>LzxU85{I z_0Mkm=vq5UqDSfKm@Ve>!rE@P++N?@vj^zu{lLC!ab<-r3w#^t(?CKIVz}qhoAUe} z5fBWK6cSDwjFQmnA$XdmVZK`2jSw>7J&j|-%+*L*T$@!)vYF|OL@C9PRg5n4(6rWq ztSRnt2uJ5~WpNVWCb3C{}>YJ3oM)93C~kBey}!g8-g&o8GHlh^W?}%AJmBQU9Yw(dF zM20>xUoGjnhKqNv>AGx9kYj=BN_ctSe)A=t|HH5N^W$UcvSi;hjFNw?6(M=CPf5}& zjPX+vzoICd%U!bN@uO!vdeV@T;V=mA(UU04l4>@Wv;qRIG(=mF@c7_xUx#`X`c@%@?eW&$zw5WVdTs zx{Afj2oDaSR-_p5y$37A_o$@c^7w3!DTjO82eipNw;)K7X*)rNqsJDO0Wk(0vIWdo zIG5Gz-e(gIR(pW;%`E^&C&xT{{vqcNAJeu6nIx%!zL&|%FbpUo$n$-JV;G-ZX~fRX z&UpFqrT9Dgnw5ol1)u%!$NZ=N>p$`8o3E&f#k8(K5XzzJg+OjaVVp9jDy2m9DSJMO z!}(ZXr4%KmDn&sqGiAYhDXfMdwhQA~oR8eVIgkxn6x z%eJAXk+(EqFwUNJF1DiLu3*pmnHc;c>jFXaQ%YQ1TnKtKUenyz-8Jw0w_n);LVlZ@ zhg<|A4TMyrN*NCOmffMpl@&)TM^(*o?wpvYef`x7PM0S4?^mlF5;9O8krB zcg^(#rGeTNxJ=$Q#t|aS>jj^F`YBJJKBX)jo86j=H*eW(w&G<|Sco2DouE7^VYCq` zs}ka2?hWr1RiKT?lC4(wu4T*!+vl!px7*RSt%QQsb0h$Cz{h}9ie~6(e4ibh#SuK> z$FvD_48$M-z&grEvMNgoYjK64Z9805Ob;!|kg^0iM&SWztqDFC2|>KQ^tj2!I|uX- zJWfT5(&B@-oTn7%eUfohY4Bm7DoP9z851+-xm?&Pd>ng(1W=`@j1;bb|G6i*=5sX(-E*NRZKs)tQVcu~y6Zf*7SKu*R^MA8~y2 zfJcv?kuY>2q9zo~v05%!E|)|<;IyHvWVG|%(+}8ew*35W{*HayV2gsNrMOo5F265j zO6O<~4I%TA^!RM#O?&JNAn-6-)Vqhxw)5Jsh7Hn$XaFLDDMiJ96EgN))v#4RcF zowX=xFg>Xyz4th0vqzW|tszCU(O5)`l9XY2bi#abg)${6YWm*O9y&shVC=CjODST4 z#-|}0SEj6Q$pu9cbXjSQD@*hc=!2)(?@>-nMXPM*Fhn7MTWc9Y$n+08HC`i~>h`wb z-Me?Bl=$f5Px$^1KA~O|ynQ7~>@o1U?>%kXN^W9d<+>-?n*{BQ^r4rS8RH~GdcWu9 za>o2|g##Wvdc=G0y~kHy{8q#fX(mW>_z9Ici)Pf?WRUEho0aaOx)gtJ@MHN78l;Sui<_{BHNm6l=OqOGCnJ5fa^E9Cx| z07DGWnJXuAU3N5jFkTvL&n1im@YmSc|2=(J0X?{Ej@`Im$ z{cc0RFigIRN8)bs{+qo}wyQ&6YT&==MAMp(Q4XeHcO_<}r)+9%Bnq&i+cqq6-Dq z()fX4zhk=~D9hj!(cAw4;Snh{PZ&kC^Tr z(jn&$YOPt!mej7mBt@Yuq3e12-uF0tZ~{7Ub92Myb}dmZ+Te_xB(z$~c)@8m zjkL5jIrnKyHWxCd&FZbu_)-?Q7}st0JFYJ;2_djtF4^uk>^j5pXoZVTHozo&4&Sv? z)}huC_A5fhNC*Rkv-obHZCb3=;*MSv9J(Dkj~|98u>6?2Cb?Qt7>*mV4>`~@qf{}6 z;#nhxf=9>4oSd8xhA_>%trbL~p4A*S`)v83rp4=hqRR)-)zuY!KVb7l)VBT9VVS&a zzT-GO&hK-VE!QN^@>TA@NhB@N4dXIQfyp@ZzKivAV2qujx8pDV^1txa*I(jF%YM6~J;=yPYw7-X`wfHl7~|w1I<&a5#Ao+$6+A{m zU6yo1N05q|7zCAwgBS&AV~CPgd~cuA6h)187FU!wTcWig#voj-kT6HbTwh&rbA3(Q zws+g35<)rmH%>jqHpxg#5C37fUT`MpA%6naV5R$)4o?}L0 zwK)9eK=%=ojWJEgl5Rsr%yOKD`d2)rbupLjI?cwEec#IA=gQ%EHt>g z49Uflh?rIUIIa?PSE+-_b6N zF~T)P5xoc*WIqF(BZWxY9cT}Gj#hJd1~U3Cq8~9X*BWka*DRNF%Bow7cuuWz3SQLm!-96Kh z#PawE7)SAz|KG2B=CI?rG_4a9)<>!8_lGT~=TGSdMN!wZ{lKB=n9VCLu5LIxd4N-e z%;c5D&6eo0rX5l?1)K}HF~IBBuhB`yDyzkk>y2baU0hsXlEqlVwmIo^+YxH8<;9;U-we(0Ocv#d40!qceH{03ZNKL_t)wmNpG^ArW<= z4Fj$$xn19~TpockbUA9^;`)k{<0BrNoYMC_N-G8*(Du$@yPj86i#Z`hHoF}$d7RZm z9~pY++JV_@#d_Cb${JTBc1>iql<}90dqiC^Ws8MK)9xu3b7s|&-R+tXB875USvtCQ!bV`&tFj(Izz(3XNZG`q=Y1GG=1pBcSvhO*9%^jkuI$h)+r9n zfX1P%c#qh^;ggsMT5Ab8>(8o8{#2U2Z)G!T8d6GBbwM0tmfsCMRb5YAYh9F7uA=iY z+jpkG2ahR)@LAR+rM842OkLp7(Te$e&ThAp2%9L;7k33%mXrPv4&Phv=d8W^p`Zo?NP^QKHZpfgFf?AirZuyAh0)-L4vi!D z0bSIDejpXKT;n)U)phQ)1ATYMWFG}a<7`2Sfzpaa$D#97S`Iq;fU3nNp>U;)($y%+ z2mRUCZ45Ax&7vd(6QUhai)s3a;74rvG?mmkF-W2Dts zK!qS&FnLA1kJIxk{{$H?-4AmQ-scFH{OOgJHE9hh+XAGNsH%#t6WWFEJ+rzJbITwk zZe-oALj(pa2UtQOT2i{*^M4?Tp0wVH15GEzs;_u|hNNoW-b zLDss~TGX=IQj|44J{P}L9%tov9T1Pcq_J9J>vHcd`LumcJ)7a`8AmfX3{q_N8G($( zPCU!0h|FfSQ6YqMlSg8a>6#YSvES}^^~&)5_fM!DeD>LAeD8bT;~#$Y3l4`Ji`5*Z zBWDjE-L* zI6phaDwtO#Dh;Fn&MA5|&}PGDqb)k;4UekKVmXIw57GO;Nm0@F9<*Mg&FyZF_W@%I+M&l-%hhHl zq)8>X6e@e4ps`BK>%>(!;+&H?|IoAB92kay;1jy2NTwtxhpkIN)0DmwI%tVYKt)_K z1T-*(w<1^;V8HejDUcGunNRiW%Gpe#?RMSXBd}o+9 z@ptYGiB%G^|9!rL5by-O($>;916Q|e4u_U7s^iohdZRL5LQE*Zr$AvfT^QsrMRF5| zuEAL&q{002`o5*@D`sjg8)Qr}`ay$^)4x}~U;aFJFEU}3M?FJF9AvQg=IYID^XFPzr%KBu-9F(7=Azu)f^_Fq_Q;iS&5{qNG3_4;h_1`tfsx5OR!1 zn)q+&4y&K8v!uamY`S~D(Kl^GB*xD#95dOhce?}SY&k9DyKX4u1si0Hq#`^~Bp)zVP3ET{)-{T|y{sq-R>vol^_(Gz>UW4~Ld z;IQ9eoaVuU2Q-}&GeeMbd_JEu^gXc)_^!t&D`#AgibVX#5{>Vf&1xaF`$URjyh|Ji zp{Fzu`aK^#f69}Gr!3|rL%S0z2W5y_(S=B1G=t8(s=Ri6%+wl2uHcZ3m)l0j;xJrTeTK@?&k zCN{eRpZw?nXXj6NbNQB^|LtG1J?z;x2VQ^ul3BUndmn$w(+}QbcC=uAv|@dIBZz^v z93L&Y?yh+K`Ypo{c=Eyfy!XL#F4tGozyAZ9n>8^;$#F^wkK(JZzhSYQVe6Xpe#h&} zH*A_MH=8whA)xNt13DRERP47xaIR-1hh2x$1IxusmUEQNt?zqo-(H}tn;^uS^+wD+ zlNL@!KVYoIT5-WPwvdahB*%>yiP@?^nS$CDERG%!v?CdZM-+1=L!xQC$XOCvDh1i+ zD8xirRhXPBSK9&|#rx`$?|;a0Ij8Ge$z8j-qF&57njed$g9_h$Fh;Uz)^+PVS|E-| z?tI7NX1w7hv%ha{Z~6Mg3)Z_Wv$B#gj82)*s)+Xr0i_dU0y{aPCI&GpR3V~`6j*l; zn3jH2Xaog)0jDFwm!f!r&McIsb%nmA@_<>v%oXbO7BM zL>k##^c|WwUcV{UX#D$`EvJ-5tE_$sfwC-fQb3P!cf}q`h{rLKBXdF?{X{{{5aPNv z31Sb?6a7H!1A`hkcuh)14s}M4Awh6_)RS>w@;S#+L&!#q$&AEy#8j}XW~|a*dXQMAli?2~w$apeQuetRw|buSL92oh$)SY(9MW zkO!ydyuG+&-*g=M0aFx0AJB&8&`}%5(ejwFBRyFy@%=!dvl(lUgUz@Cw5AUY^}Hg+ zz@hEfZubP6c>eSwj+V!iMa|jbm_7{j(TgoaJ>#%%+3XKAZBJdx2((WLQ&b|lKt|Ao z$-JPX#m~pb%-6`Gh6p4hF-3Wej0h3g!etm_ES!*r2%~AbhPFGPlolFB(@y-W#2p84 zEdJAXtDT99BE?iz(P{M^p@kFziqW4+qogUxBYu=3Y8m~eF-%!0L}?*owuB(Nq%nh# zsel^egr@a&Z#19spT*-()Axf!1vPs{)s`5z-s5bgy8|+%L|uywfSXk`haJ`wls;f| z6qJvwK10wZt#V^b0;}D^Vo&F*0;Lt|%pbatJspo@UJ; zLYEYR+@m1Hn=+8b{a4*ro@Sl_ilio~ku)r6d>-6g0}xW?Nh^$Y-&q&`T2u0`y}H|5 ziK@zDY_UnX%fPfCQsNK-ZQr4_W;Ux>F2x-1`1qL3@`kJ8Elt<(;QW+l?>`|p8Swm3Z4-5WfF!1=T1Jbd~dN5|*bdd|zsYi_qY+P;SzY8<^-?-K%wgh}F+ zWR!Fn!cPcvzNa5r=5xn!Rl^@eWfsb>pJRSq_mC&kF}PjYkB$RHQ&5?N$?Rfvr|W^5Pz^~vqMOl)>_)O$?oKm z38`biWe7XQFpb}=EvAA_{Fo3jc9cRO$!;(azO_NTf>Owerie3Ed}pi`HC~DwEf&m{ ziz(M^M5&z9!pTYzZ`6eDS?wsQnnk_9Y2gZ`B%?3yy=;V87$9M)DN`ZCG@F;~zB{@6 zIN}jv<+O&S>yJ9~$>hr+kE24CE-Qq5IgXNHEP`cjU%Jc-^9jb}b}ihe80|E^CFcVw zg#4UB%BVn=m&cG1BaK!Cqjg7$LKGH4Fhr#DkLgaOrnPWp{2=$rY8hkAODiLb2yHh= z=a|Ce&s7$4PEQ`_QuekREj`Dv z(D;y9YbAO{2`^{Ntn}Wq+wDl{?ohb%!MpqYf9t@QzK1*t&rN}~md=N}_ssyb&INbK zJeo-zJEGr8nuigol8q!yMcnv(Ir(xz?51$xjF^4*{c^*i^>l!V=q4+L^<7YURJpXv zg-%sfRI?eg`GVWSmVwA1_WGzC50#>z;30b1S5t0clqk(&ZqdgBTYz2#1av=0lbE<0 zZ*@K7;`w&F5kZ%LWK$s}ME^8>z7CiH##w3Ttik1GuFV;Jqbg6kf)K@*P$h}Gnvis@ zB&w>eh=D0^IRGDg^gW(E|A4>!o1alv4yz;k-G;)*S}p5}KFS_xZGrCxR0NB}X2q;z z4za^pCH`nZbG$l5tH9<~tSg+=94~5)R}1R0hJj(|B-=HK+FU6~0=dsilV?Td4Wr_bi14rzB%cU6;D;cTiKK*s zsz%F)yEppR*Uw12j_meZxyLD+=|)A;V*qr-8ts_Rmlz{a8}Ht|rJBtM!SnRdV^kWL z7Zo=bm&|4hKKS4nC~+w6hJmK(v4zVWl5{1;N&JVknyZTocIyp?%~oPI%8DW>9-f}C zT+HeAJKk-tdHv=q%F0q`Xm?xYRZZhNQZ7`(dWAAicT$0zh{!{ys+hGx%S{k1%cv(qEFZoS9W zjxKnfy#I`ko`1mGH*eTn-EelaVlkVemCR@&DO+PeQjsT59#fY!Uw!!{!%fGN9*FZ>hW|XoWHsm1ApE63%8yVs;ydQt+yjN6es7qH9`FKL*gsQWO=tre(L?vfuB& zGvWhz4oohXgwUSvWsU%m(Q+Z0au9u^LB3nY3Iw zj!#cGK0W64@*M%_Q;;Nv{5?hs>M^=}j|ZsE;qm1Byiu6M_O%UYX-2oX|ArqI3V(F3AkqdsM?y9gPt`MjkgZAI^ z>RYj10wxg2RC8kVXr-}LCD4Do_6>{bnD^d)&Y%6+zvJ=4CtP3M(jFRSvl&V$>Uz$D2M=gl&sSglfu`%3 zEf*wh_~DO!M6zP~w_R`O`<`b{9=Cx4gP|&7o^4iy37xXEs}~TrSycHoSfN zj`N3)IeYY!U>r@`v2R-rZ9_FLD2>LeyKZgd#zduwh~iL`P-a?GA&A1_!P6&v_`MIA zEoU5>j<;_vc>Ve<=MNu?%y$^12vAH&gvuM1%0--PUg9}qjKWzxbv`=7s3}HlM)20V zE&JwxEeeR5ke$Xyn}X46OT|cx11ScEt{40Npin_!okmB4R*|9*+shm@F}cNq$j%F! z6&6WyqI`-ukW-U9q>w0#&1esk^jayomP1yI8fWn#&}3z*Qld_ZF^WsGcAzxIiL;`dcJL)20(#oXDLJh~%q_~earyv{0fzqHDM3Mt)<{PMXWo#@@7Q$`E4 zoq0Dg^QBPZ<{}F|#=z<6DI}4Ro3fflXJe7$GO<-q45p|gk*E(iYcPc)1uxpyNOo?A z7(zZwWBxZtR$EXClm9sy>E@$~r050R@qsV|3TNq>MmBmK7((EaPe0`+Klu^A{N>O2 z;`86~lh6Ky_uqTY?y%?b`Wnz#Rt+Y~K>>jfC9BIhu|zmKIpy^Dgl2!>?ChMjZ8;nc zY}Xq$+dao8C)je%5TFZ@{oz0g9p1P2zQZax#P{o4++s%8bu8-{N^82I=g_tM@|VBF zlDNDmD3pv~(NcV`W(!j0w_LxvU_PJI_dScMMwx;l`xo8Z+|Wf&QJ3JvyQ*>pi^Ytl zIZ#=N1#+dVu@Hhp104&3FBzgaBzusS!Q|1pnu_{y&j?e?H1bEv>=_hb^402^R<6^{ z4Jn9XTGm-M5=mKHk(FO#5jM)&O_IF8@#iG@M`RI(G)QgV-*c$WyfGy_oN>qd*E@Vc zAyUdCc4a1{O(*%_As1C6C1EVV?!VtymyL+BjIb1kuAyGc(Q5pE<4`geTS^JP$yny| zn)zypSBcgSxL!mO;@uR9I!!8XmBf7Y{%2EGabL_T2^kiheF%*)=m>qg!&W7_bo4_{ z9I|MjZ5ipBF*2#=k5@-*HXC-^Ey)88W;4)*qi?$jiAy08Ll9r-kiEn5m|wv?QGtB_ zkSPZW!}aZk)uN_c%K!iAPyY>n{Kr4#&;R59Nz-&x%UKQtmvoOnpzqpTyf~5$JUBVS zYQuVcL*F*ILaaBO)huU^aaPm#FroiLh`6GfY-6_jmeYqCscA$fd?RGHH< zj&}Ye zPI>$PF)qwMaHN5FF9|7bme&jsd$e4MLvgen(L7kH7nz zlp;glA{d_M&8yek+}wzrKulOyla%Gb!>3d;v4gNq6H?F6@43Eu&DUQ$y1wD|_L|G< zcf5M_iu3bx7K6XX*`S(^_GlbggX$Umyv)r^u4EVduC5& zeDu*rJbn6<`C`THa6#MlEbArCID9YaAESgsI(jlO{+wJCOq?t&N)>@v)x>QuS`#us z`S$jfH*Z8bUez_jzC&qC#OD4iPB6V}gb-rjuvzCZk`mOiX>ms3tQ192JA}t4e}4!) zbaHUr_fLUr6@Z3h1qF%{`ICk|=iPc#4#qXc&>lLf*-ZFj*3s?{Sf!;yHafJdY(q(Jv+e99ty^e8Xda#t2?cU!jm17<;~k~==wcv+p^s^_@IbE#te!`Wei4vwL-$R+OS`5*j!$+yS`;HTTzq? z=Eo0Fw`=tLgt~uBjGm*XkND?qcjkM@294{?E=+o zCjNJInQxuq&~)sYmJ~Ey*O08H3rO~1(l~2KeP9TK#O75(pAgD|$_18q%E_2b&WNHY z?$Hd$mOqlIsd6T!8mDM!MCk92&E*^wiba$J0i*xB5v;KRNg-$82Kic1i6O2vRRKEd;ck`lNH4r+oa;_c=K}#e2`?va8-?OJ=J_h??dje zQsy9J#0Eu7YKqk`SOUVWvXv8LUW7&f03ZNKL_t(pavo2Wr6^&Hz1z6O>o5`1knJBt zW-pvHHNq#-;dzfK#<+qgn}!lZpvntN%mKyZb4X%45R}T!^ise{&0}#zg)JOK>3H+@ z75&gk{EiYtDXBQ|0)>ny9r9=-nqqd$*HKJeM*@6AA|u8Tt&)N$CN<@ok%_sOOtREK zz8+~Tw(`M4f_GO}oSr>lQI_b;U(;#i1LUsPXpxrZm=T?1#N=bloRB!#StK9mjo3JZ zAZjroG>^|@<{N0xQ4un?!5D)nN_Z255Jz}eYg56=uelKI%5CWUcEip!}*Oyt1 ztJoa^%9Na+KhFM4IXc4++}zyo?YH0J3d3e|%gb+GP%lo{9y;oyGmalVZu!g8>_v&*krRT{j^P+s%f) zZKk-K5$Ukj=21(;6$YJz7BMzWV{tX^D~3BXD0YwLPZQYs9L3a%Hxq> z947=p-`lfB6ku#Z$FJpNIk?v>rh98hMOl}GB*br(O)6D3NEOUvLX(XWL6H0aE%qk~ zY+129I%auvL~L6^-^iNEV|Zf}#6;&BmW6l__RWFjAQlbU$dz)1qFOBJhMtRy3-;TA2P=mIPEIO@rY0UbZf>vHZ}%vr zc=F^4_^j+JY>pXof&nJ*BHN`b3cQcZ=X0*Fuh};Tx?zTOf_VM-Cx6V3{^+ONTwGGk zO6+3BaM2TzFq+p@E;KBCXt=)Fa53Dn z+wJ)D$De|-_@oFiVV&Gdw4$gBAV(a9Ks)sKA!3UXjggGdykD0293YM%*bbF*a>uil zM1CTooHdLbtVl=!trJ0uI&oBUhbW{8VPD-%n*Jqp_McF_5D|(@b!0T18)q$zY5ITp zdb20XuI#+;x2H4RA*af!LKO;VHi#b3q$p9LkV4^CKiL1T!ViA%Kx?v0io%WL9O}JolWn*ZS5skg-&jAx5;4h@50Brt0wXo>jGG zU9V2g@DukpH=J*3hNGw3Zn)p~Vv^`8E}vbJljpFz<^2zPu!gIvD=KIC`q#hWmw)@W zyn6MDfBa{E%9me$NzRd*n>&H(o0=Fh72?xzadl28hH4?qIFm8S@X531gpk-jK2p1y zweYs2rp`<}bI2Na^_I^Ui%PXlu)YDyVWnhC+4udmr&oHK`sBeXr^~oB-I49xVSqRKSNMu)o8;Q{~4trFVgM4>9@b>l{>(!Ppdio)9{`@mO|M4%# zZo~TOId!dg``vH(_BVgSyWf377za?9ei-m6;orUE;_5l!{RjT^?2MPsuIbidaZuNe z`tl`*$9rz~k#Sz}?)$&zi_br!?+2<%vPrw`mL_TXaFlRz46g2I>J{gkOH@v*w;Qo? zm`02iOAm)82T_0B-rw^X+O^{21do^N>Z>NzPX#>w;e_=ssL-rd~tvlrLczQ<{a zg<4icMmww$$8D`DVp5DDF{MDOqa+sCjQ1mCQL8B&y2@NaJr6&TqTGSHD>drVaktumXX~biEiVYEhwZu&2 zEDe=#opL!0l^6)8P)Nsxk5~@YMT`>`m87!hEYDI(L8uf`;ffeU{x22Ijx(0z=aOWh zPKdKX5S65YpxajCLnK+tj3(L&*KJsD&e=~N@N)udi7`=E4*blj?T9HBCGo)Pit590%&!aX0j=Rx9E>V~i%J$n3@Vcl15AtqCcTNWyt4=BCDGT%{O> zBg62Fb!o6ZdHpFr{n;=0`s=U7hp@IZorJC*_Xm!L6=2XXhMt zd**p$ntQSlQA^H|)-|M%F}h`YcFpm4q)`@EZOGL0W1#9baue4c9SwD=Nm-D(kOQ+9 z5sk{4)-~9WMg6NFOe1yG630NCG#Tq>YgVfjdiGRZM^@tM zjWMiNYm`n91BS@s?jFOcK%W6^OZaV$9Cmwt`OE*p!_5cw`#n*?=4^{nnfLGCb94Ka z%*6H82BQ-XyGL$s?rEx)?e<(`*M6q%B!G6*BfH%W0Ba4EvEl(z;8yRw6cr^T$Es=t zttqB<(=ai(f!bBfc$9J|6=fZkg&QOD85nJF77pV;oM!ycQ`Ze|KK-1lXU~W+b9ev9 z?d|=E`(Ta8MinJAxU3CW$mm(zpq0^BWr~-IWsZ_5C6l`nPbj4bNt1D)8>(hQ&bPGP zhO7dQ$DZx>k`PB8_j|V6Ew$BR!k9AsI8oJNdr{T(Q^I>)lS^*k!ns<)leLl?P~2>u zR)Z?(vKAEOWsF|zFmzdIlu5-JMJjw5ouPIOjj5SOF^)~Dj1k&0&Vjn>N|30a9^Q+I z=z6@M)5sl=>DQyTDe6cULh?yZd7sRQ|^a{lF_ha#bMyTmp)+7`s;l+5dT#Lnl zJu6Ctkdo#wXAB6Lz93Y~B&|z>7eWBV>6(Th1lq-HQ9^XpX<`SctBO@!(eESEFv2uJ z(~v1szLrFLqa{BwBS`DQ-8flu6w<7yn<6U8O3P=(FwU|rY+NCdLfds@G(UX*j+EZv zY|HlICAQt*Hs^F_&vBb`5;MtKZf@_mf4F7awA5A2<@se%g250o=V#} zXR9+z7BsqU8|gcypLq2y9}FX}f1))~xLnj9mX z7m1>pMbr>e5l$59Kv_4{Mpk2?_|X~bKzmWN9Yp|wlBao5#(q5I$5^_tkIjh{rmT#kc%>;%|5UyJW)~kWn_HGr*s3W6`^b%f zhOTaL&d7G6n5HWIgiNL^#;NOd$Npi@Zg=EryTSt7EqwCoQ_e4*@%<0K<9Il-Rv9~r zrHX4>lr}h5W4oHwb|qP)$}o;I*Dqeu_Xm^?XlI$`8KV*z!>Zd7szk!DKD*@NnZsD& z^W~g*cKw2^GwEGsw|iiO5x=m6Txchu!Xkwq|lkkPzRkCv9&&HQj2NO0tLwa)~7iDWR>! zheV?-)>MGTI<4r(fiRAA+ZAV@4o+m-~aFdV=T_qr#03S*Gk^jg~X6mA}Iq# zl@1$1NVv*TRgT^L4adWQi|qx*wHOSqKKYb?{LlV79`*lkNaCkR zDu+ZWPP-|E;#j|MmWo10Y1*d4xr)Q%9-S>IWm48?V^0Cr#yG+}6+=>KRO{MtcmK%Y zu={V|UYUxORJ-yZE{3ZLPO{%zWXqJ54T_WX!U9c8sGK?lMXQg zdGO1CVFg}a3S&;iV<=~dB{CMte^Uhl&jrhrpUIix6g~E&v?y95Lm1H-u@A`+p@9lP zS-1kyyvHIs5G9(tH##ePVGL)KG!@)Sz;NtonpO;s zgNK}0tv9^>>~mB&(C_bPSCV|NZYmN1r6bm4bdDIEA$g{Glr?i(Q`HR<6Mhr}OQ)kzT zY~>&8t<)`(?@++lK%o|g&8c--LA;MyMD;`8KiTZg_XHgI>Kl;Ma`iRpdJ=q@&PL$_r zS*2$!&s@qf0H`A5Sq2BOq>~X@t z;qig#xI@Ja6_A2}IOp3lK70KcU(dhd-Mb%n_wHw$UAEjm%pCT6Y=(?xeYO?h7vjq} zkE7gAMus@IJi8weNtSxI=~ndnp4;17t}a(xc2HaR$*u5#+1)>!HVz-x#09;TCQCMAF!VEiR*Ze1ZUVc9 zJ(uT~*c3e~2Ao#JdE&+M=gj?)&H0+c;~v`z&u4wsqO7J~l{~CGu^aZRww*YHM^6rd z1VlW$!%-Cn^ro%YPxguY9lL>V(RLw z@F22M5Wy>HfW!bamjg+@;XDrHSUlXcF1dU9$t<)K07^l%zNWJHB$h@vgoHB1V{N(5 z7A}nzgsZ76eJ_OOP!2QWEKSqVwP##hUUT``k2!n(DXzO9yPEwpkyK*U$f2)tVzuh% zx`vl8o^ig}^7+fxB#pS9|HZ%I_q!dHHOzi2{2s9+vDRR>8*x>?8z72Hx3vcEhvM#^ zAbT0SaxCwKnCSL>&%Pf>DY0FxIbUt5jI5)Z)kefKmF30NHCGpxG);?+f&J|*R%xbw zV0(EfLWP(LGR7%#DHY@=2T7S|S2adEbk=lTM^#mX7-0z|R*9rEdG?@PiEGk@V<^|W z__`CaSb->`amt~!D2)3tu;1^+EuJS*uQ8^C?|S;aXB=h4w60gu*cBu|YfYt;D7BPC zYzcu`zUG{xT{RS3Kn~hM2$q9S{w;4}sR6RqHas2n3-7BqC!89*Sa?>;Kq3R=NBk_M zFlD8AN?G{mYfc-cI7xG?HK}}l7zV!oa6?9O{_GjHs#&i#R9Z9ccU)dR<9GW5pqWFW z?xaykg(R+xDg#q7Jx;Qk$4h5qHAH2wR${hd5=wvqD&wG%pQC9+2vQ$sh%@`$BXNFB z(~9@5HE?<9c=hTPHy?iB;r^b#`pf^DPv3kl)QcRcjV>{6YiOl|Ra#!R^B(Oi+Q?A5 z2y#wHRzU@=wKPq`{p}qO4+E>FrPlD~%_U!b^%Z~d7ylb!_6++2s%b?vn)OMsr%fhC zPcABSs~wMzkBt3+v-35s>e%o191lH>sgZ2ck?a%BC633Q7^E?KdHs^@dQB>%{H|^| z9*@KvgQ*JR}mwW_b4E|+*A~jQ;)72Q0gISo1|KEPz*Gfhw$g}U zxxc$%n&jshhgk}lvy$~yWc;=?g$mF{dTde_W58*qZCk$l$rt?mtDlMqYxaD&zhmDY zsoNFn^`@Bpm5HR73u>jwi_7On2R|$^IEltp=$sjbk!c+1k0aCMadpG~*t0pi6o?;q zehvTq|M)-fpMUu`9CkagQpi#A?c$8d37sI1GrZMd0$0@n@n^}Bt83xz81>}I zqTwS~XH%wiQQw_XHB>=lltqPwFkZff#wUpuvUSC3v&PR+_(6q`np0#7UU+9(5t2U@ z=c;jR&bC-}g$?MVy;XP?FF<7qa5*R8xDozJMQWBdH7U=neC8^?p zRbKrG1uNRE(pcqOoc57{Wzp;{$iw2GtrKOzEb6Zmf*@<@DNaN!6I+fbYMg}>J>%F* zhi3&{%sI(>kqfGlIT3+VmW27mV@nr;vnrKjF@d#8iK#A$i}Nkf2g2m>Q(zcI{1ix7 zn(aB8>*plZFnd`)tvXTq9FC9VG?QXa#_+iNKoy~NhM)}Jy?ciy^5Xi6m^}$kRu1nc zl+`$AiDN2O4x{7`4xW$$m6dSwq>PZg7nIRtve7&o_Be&ChC*Q7HYhFa^4Vs~IF58} z$JMLngq*m$yJPmAvt}iTV<-;OMzby}3yb7+3g<@=0>zykQp{y7DXTbJe0l;R3{X&_ zp(G$zkW+a*snl&)NaP5|uRK>uTb!-2c0i-p@5SWs^h~LzCS;*oJU%|kf#%v`51~#7 z$1=n%_u(8v3Es7YNz-;UaTJ>tXT;|#MNZZZOFT%941N~xLLVmXA0K#s|AF;t%Z1VS7#W9|rUZj`T}O-= zr!%u_z@Qj|EW?nxoVSrzNwqauu##o^2s~E2Rk0bL{U$ zF%5X34N*0)Io}X`V*jw`vAN^b^(UO2o$=zu6*o6`JUrfsO^Z>481X^QnJkQVSZ^4Se+{zu;#-{VDs04}^ZCS#PMD_M}prW1zAXRMm-s z5t3)UT`^7v>b3fi962o0%H1FQMW4GJWbse9)c**rAFJU;L?p_=|u2 zZ}|S^mgd=Wl&d6hK^xw^d&d+8?A#BubpvGzyuZIk83m>kst{3DK}xi(6e(9}hQk3@ zw`2t&J;~Zb^5|Nz?pAm&Qp`*srcpZU6v-h#3@9ZBd(+h95ak9=;=`1)cmSPWUdS}A z6?68aG~bAq9q^=d&-q;H$5G z&X-?)LDSUqKJmNnf6v4H?i7`>6d^&b=It0kI32%ve%%VSwPMZ8ZEF*475{`u#; zeEE`urfzDKTbKoc8NGZ4Uw!o_+`Rok%v}9Q%7NNd)Y>u)GiTdvaVd`_I!H+3^DGG0 zus`73lf+f!W%aa7Q;^ldFVd(O`8dfu=SB7`lG~JLiBF1|*=LltG;N3XUJU9=lM-TN z_8y-S)~#g4qBvcT^Ye2yn~g*~9eR{fG_Ij(8acp9Gbrj5k%4E$M^+6&;w{F%OT1NC z3ocd`Mh?8f)1Vv@V#o0G^DTyvCv_BnN~Z=im3w3&+Rqa@_9@1TU|3oHeVa!MU34_MDr?8&ZzE`{8@sRpNWCxO(x5?W*JK*)_M* z$h7H%w3`FnM!fb8y9fH)J4pwK32Pm55Ch!kWxX7;6wwfZtPZrO?X(fKmn$nLtuj_d zQF8QHr5T5waW&oS&P^eZP%hx;;`Fe5TB}Hp78UGu@zaz zvL=#i`gng|hK^-5C`eDT!skjUlm=?KM@r*U3^1e063Cn#i=Wm~7mmjxkB^T;qyb0; z8A6FQMBBEUot;tFBBK}n&>|L*?_-Uu-9lO8Yb~z&ei{hTGWZ=jih-rvFRCbdB`Qp5 zBaMHl(WkTiL`0Y8YKfdW)wrec`sn^!UQ3NJr- zEo)h8nY<(pY*rVn&$c4&QG`OIYwG$ytntiEVGSpjZ zNhpkMP|gw3jQ5d*1aUv!-!UBb7!56uO35?^UcS8I7r*#Z{=>ihcg)j7oMtv{!|Uhp z?uUu*zWa_BFJEHoN;s7HV#%@mewk&PrV-WYeoxD&t=o$C&z=_vJ+zyepdyo>P*rASYn)chAQ+Q$^3FMNZw(%k z1Q{@eFA-B<9!9j1|AW#H001BWNkl=vZ8i|b=z@ycFFeaf?YqbKHu`~+wW1E&!{`7N~87Zo0qh;VN97h z%(TwQ0?9eT7-*Y{)oO*aR;0wkK?vm53HVnz5?P{cbS|jCQY4pKdhw51f`$wKNOn=D zMgy$~UgNT$0rM27s=BC9XNGBjG+~{iTdxU8{GkN#@uYb|#emV8&1OSYRovd*ay%YM zk-|YS3N6qI6F z<1A$Vi9cc03N@%7z5EFFk4Xf1(C@X(!$=MKm!bgR69o^~- zl%sJKo4UpsjUwQjA^Ct-@bc3)>?+6mo$$$0Kuj->NA7PvFdYu^T78LeGBqeGB9D0{ z7*V06kc)GajI3GW(zKQPH!Cq#CFhdm8Au;x4(g{i3zqwMc{Y@i zjfOg55wgS;srN1@A>xY-(pna?xy3{zx_2nCq_ThR+gp~!I>g4k0Y^Zu{g4^rwsvF zno~u>*fOMN#cJL1aQDdj+Xw3IoVA7R8ov7KEB^PhD~|W~f|Lg<&!sge4dW#KYaxk> zcC%gKjOFF?7o^|`Au;rm_%u7(xzDDp)1T7_A-SI8v3c+Z5!`p7PATKLTJH%cgZ)oS(BF4h-Xw+SSBq7B3H@ zNiid~D&kQ^j%+qkAOYr~M=M3!cC6QH<`g*$d!{LH|F~znI-@cI0Mxc7%`?d-rej~+ zcr(sflm;IrP@WJx#6cWM$f4i8d&h7XXq-gz z7+p-yN@k0;i!5KAra!Ii6ZEVy*2rq8sicWZA@ifpK9^=W*Q~SXwVk=h(wN{q0-Y+VIKsGscHKD#QM9hiz8`t??Ni9(HJ3 zk;*iDe{(|(Xz%Hdd%DWvQ3#e_4|ngWtB!v6 z$g`_6rhSs=pvmJDIHzgXE4F7Vg3-99rm~v-eh)d~D#MzVIb}Y)zbzS?nnXj}w$dPz zB}ODY1+HW=p#<_~TMosdY;`OF$MPYoIpJD5bG)#i-3--{t} z<1i|st(bylrKPb|mXJN(OD(Fh821|6;3`Qy2!3V^k>DqkuCdWzLt;uZhrY*FlG|Ff z72kjJJAU`uuX*$T(j7yJUl$GJMLJm*X;WvDG5rOU6A|MYFUqm zKvgYGaLH&4rH-hl6>v(K?b#W}ea~*UqwmjYw%~x*uV3@ipZ=8Nqj**+HDQb<%oDDz zsOn+^gW~*RTPOyZ@z@K8&spZ+>6)74#e`N_8C+FP*m4H!`y*Ow-re4Dzu(c-4YhUj z<3wFo_@Xjg)Y9WLVXZrvDuQ=`+*P=o6Q+*+fsKML5VT6O+}t226|F*U^<#k5tYRUMCgL1 zt{jRa4OUZ0)>VpGcu;M__qR7vaAQ$2CGb-qE5mAiPD+`>Fp#t%d&%O_8m63Og3*Np z8B$TBBvdS155)H;644R5y5?{=(71|Wnut;M-@0&9FffOi$7AF;9)~DS(kKO$LxhyHT45lY0l0zEXoe7 zLD|f+=U3eR{s)W_QhZwrp}4MV4v#y0;Q_8zE3CER)f1#RO(CDmM`cl%P+6TG%1Sv> z@Y2|-CsKJ??E5<={Ys4q8!FLLv>`wpX}qN4r{Mtm4(D zuh}!w_pDrv4xTr!KEVZ%e?Pyv zL~G5(*%p;W9Xw3~SFc`Sn~I0~N9K8CzkkH1%(~lHUNicLS zR1D!q>5`9XpBkF{WS3%!r(ESKVhkrsgj5E;J_MdWe@>W%4v}KSPXTR(_BO zG)N${F2lZJk(EL|I>_g%MfMRijE&REnp1;+#7L%zN*NMTwq=UJRhE z#VC!dGfkTFvlS1!2j-$^QyHaHK0KnMrCWDYI^(^V+Ri~5r^>pbz6MvzeMU+c>zI7N7{xUE zvZ^j#lST}SwUPYDxIdCoVzXMaZd%5W>DG=|!jk3B`9kTLX}b=q74y)uu2)QB&#K#i zf}8?5MXafbSnHUmUS@94v6)9P6Z|^y~yv9_m z@VsKAu0)5u-fr06-ZFYm-L5!BQ4(5fPlBcWeoyoPt4@UDjJ9G?-*gS@^_Ja!F9D?# zU!$xflEg^@= z<`_;vs-|)xxi^VCM~0k<-cngd$cdODK0>1`OuqlmheA zOZL(nsT(P_{V>S1QMY2kS8^DGpH2at8sV6E@5xzYzY=0wadB~uK`{kiJa-~<6u%Wi zW*kSp`Q{q}3Y=lnt?}bra{3HsXJ?$9osn~77>*~{d0B^q7*R>49~tt67%7r)L9dn~ zyW{~{bP+izOjIXw?!qxkSsvg>l;G!7SO99_XDPa_lN`BY&wln~@5NNlx)bM48kbNG z1Stq1C-N-IyNV)}&XU@`9Fz(zQ*K-;jEGRI0!t>87>Z@mMM-m|G9;BwYlo!7o?+qA zNz*AP;<)eeNs8w*_QWuAdA{MxFW+!{zF{8s^dEjl+}{&jL+B5*+h>evVtaOhYaOOi zn9531;62yp*EHRl5F*WahiX;?V;H>;n9+wlJKELFX7tiR<*L?r(E&InE z_jfl$4bvzhlHFlX+X``gX%6eUCJsj_#?DY#;S)XEZg{rZ(%42O?c~Wm(VlO4etk*X zR8-Djb>gspgm^=jSWoMQ^2{#Ky?lGABW47j*9V^XJ^}cHBSQa(ujFPMP<2J937~tZ=S)F~wAD zSLAiZ7}-q<;|#0I7t}f6oW)j7)T7GLtuE=>4W@FmT}NA@W{ibt_GqQ}@WT&iXQ>*8 z#L(4bBZKRzsYyx#?rU4&5Rr!|d_k#Gt_=2y<8jYw(+NE%EvweDB`8ZX;jbC0%5Z*h z!8lFq_j|_cOBw~MHGKZX7p%|D(Qn`3nwC_WG*?$Ltmr3hV9u%xn(~JfvW2phqOM!! zImm)a*NkJ&c-(P*c82$!s;)^fayT5Y+A<$!>dH}9D~^Y^vT9VaJsHMPhMbEFc`eq8 zuxj?GTGpXCrPJ#;-4jUWrQ9&OP%Olr4n}GExVhb5IDP+pE6;<7$`hkR&1o9+~$CxGa z&Z4t~@Ge5!Q_MroC3j0YX{{wQDyEVzq%+wdQd2T11gd7k@i>&jNr`t(GK}Lu-C9Aa z=7`c!kcFH`YR22D@SG~K^`8T|@9{n}#mHsX;bXu!i)$TtP4*Lm50DbIb)21@Nk-M& z6T-}Kh#dNfaSZIoiP6tsgx{4z#A<_&5R#T~ORGz`awbPb&QZhxF>!r;&Y%ALXZ+|# zZ%{fj4ij(RzvJQIfvacFsa!47Ur7d+!dqm?&WPt#xhDEVZck{P3x}qJV9jo7EPBBgaV7tx04F;w`Jp7$veqSt%ge7>>t*MdqEdG)m(zv)!IC51zUahw2nM zKKtTF#2EQ-caQgxIY^4U)H==BOS2Y+jPYWLu{6i7ZrGlmald=yaNOhlO!R@2BI3Q~ znfqA~j;fZJgTl3nNHm9hP8HU>60&ZIt+X zVx@}#Bm-8d({yQ+tQyfz>q@OPQ42x6XoKbK(#v5fT)i}j$zqHVw5Bpv9OdB@5Sx_- zU5r&vlIB<}vU17vD(c6qpB&=LznkV6(==GEsh#HRlPmt^Kl?KdcklWB>)$Z!M!xy& zHynJzt*?0f#m~5S{*rw-(BDN4AHHY*c!LikPFs=@33XF9Tt2^MYF5IN8wchvad^CC z?t65YX{_PP&t7wRv4u*rd$gQwT5|B{+KDev@d`^ZpA>^~ILdRO6;zd_TUDH2tajjFhPf5TxIdAK`ZyNb=lrL5Sz#}6a*+2)kV`Rw^MT3g0$X0tuVRV~<>VVv0S zj@;bsWGKp+i|rZ5+dCW@r!>h>6v6p)kXPE2>`4jcUYZKYSdyk8DNf{FrSxf19_GMd zzh~%st}ZXAtYc0?iKF@l0*3#ekBF>HWpGe`@b`={^!)+bbu4D662==?LU{$95;A*G z3-9vDa|^ZjVE+R@IwicvB)M8bWd0~FE0=~%6~!QhERPZou1eLQG9h?U5!5*A1UXCP zEYgY)gzVn79jk7`v*({k18zi7F6*|6&H9Y0s!l)q;s}lw1h88*Y&I*j6CP&WIIO7% zA)-x-Rx+qN=T7MoF-@XmPQ`t^uBe-a7>n&i5*rys5}S`4vC7HWs6Wa&sHiLBbyh&K*W1_AD7_!-R=^5CVbp4e)seG%kPQF+U;hWLudn(1$Db2b;_dhE&?$4Zx#05Z z8jYL}qI!2!){-h+Y;(j@%sD5|REUsdAQnMdX{O~JEBDh=+m(4D`#;fBVp-G|-!tnZ zyE4uq;L?`$YJ=WL&oYl5TRF67#YUGf70s7DL4j!e$g2}M~>qlYMi#BUN@oy z@iQqWhG|4;!!Qc(svi#2ZB5D^t)M?1S#=H5G@vommGHi-b?grUeUdVbbwC#P*mC1( zt+Cbeut*T&;m}iAQO4Q2;<)cY8^(F&I0p9P%(0&dN*Xnk#7QV^@HsR4h%pYINAbWa z2hm*i$tsB*#g~8lV}Aa#FS)ps71uZqJRbJkKR$4Neo1Akr*)4O2l+)&q?I{!-wSU@ z7xY9MPKrfxrm{6gTdD@y)rRv+5exk0SHI%hZ@#1IHni(CSu1WIcjTD3y1HUpInq2a zPk~6L9|zJfl&L;&adAOiHB572@`0NVcOrPu5p7`C_a%CThn$l?-HBD}2tF%_9{DucK_DYKM%A`vhCJXy=sq?9@tD~g+) z_^QR6P)QX(q7h#L)UAG!r7x>hF)&>GTFMH?Eb1`zlWiQ(>#z}M$MVt5BL;WZ#T>-qm-be>+Km2!;$^tBPj%~U%X(oYMG`9 ztsG6=a&>;r#b(X%IGqN!x~|1{uXv=jRZY~1DF(5NQ3xLn;q|0{fG=gW5S4{2E(gBc zTM1dU-`w1kHTp-X3d@k2moVi&M5>+?t#Tm$!RN|hC0`bF#ZQ4?3s)kE4AQ$z>P=4{KC-Ou31UtqMN-K;??YFA_(BeQv zmV^m0hg49kT?8dcg6wPAMjVcV#3F@Eib3L?&|F?VqpBLlG0?4BoRhQnYI6Z-?(cT& z9*^WCXld;lY$Zmr!!WSEyg1zxi(xKGVT^-CEvb@tBbEj$W_3D4m-kI-^Ao*KDTQ)Y znyVDKy?-S6z`EPg)eWR9V9Rl!BGa@TVfO6Dfog52TFJZhDPo-D^!g|}B1tRIY}Om> zav+8v#daKLiNQ%4=PF4qkJ4c;yKtGzQ*jLz5*lU7%1d`y_VGqr>2j4~+pQ$8&WI{2 z&K{!`#yRGYWXcAt(;WK=;}mUMpQe|}ItZSu6_s)LIpOC_Rt8r|2B1a`#h4RH3*_6@ z4JpO~B`c<}#}7U2dQ-e%GC>KCX`BNXD^1uiLuJ8=2Ukf>K@rJXQ#nC$3>j0P)Onr- zq9?OiulYxR@)bY-`A=nkPUL=f&;7%Ln07ix*LGOzJ|Z(qwqGi)vrFi&()!7#C}*K* z>5S1&*8V9$RW(>!aejWu6f)1AYi{rEi7NBq{X2XJwCgoL`|^+Z{Pib<;lOa%Gmdk) zsV70|{7jgqvI!In^a*k>Yf<%BYY9GafB#6o7mI|pYq9PONKDhnFi7*G z5GUX0J@eEPy9TY{c*wZ6pbhp0r5Ritg7^D9-h0kA z=cnmKDTQ&Glnhac^fyIWx5ZR4(G(bE7seGaiwaNd5I#DBw75O1Y)@yBO5!1=^b;{Y z7lQwZT%0{a5<^TmunJO@{$IY{Y{`=BI@A01TeR*bK@!ABpr#yRj&qI=d(y>P?hy$#btFxC z;)4b%&bmN=nr?i{`MQb{pKq^c=?RJzhdRr^h04d?s;?l zn%nyWegD9Ey&@G6>3AEU7<_2d)jb9mr9 zO$=4yUrniW-I~L`=WsY+o0k294t z@79RQ`Phr!;86u(=i3wgH!C(K*H<(LFU@j+`~9AqfB1W-mYcgC>pOy9VenXEXhJK9 zwywR}fDbLkc{2HtPE!SqNADXm7YjP(UhX?B(okh_WeyE5?1zDVoH*T{GUg<9D+mXC z7JVI$N2V#!c!y~mVH+@w)iJoygc?Vwj+_j&I=XI)4>m|u4Q#h3Ob3BdiIv!A4&#Ao z8sw(4Ql%MN=`=IXTKUlO>;qJ#x_4F7W!r7b7^SQCZ4lXU9x)D9ZAXrg5IW^w^sLuw z428B0q%?sIj8o6cmoG6@HnEgY<%m@FT_fh86j3SG8Eq($k}_S_Fpk1aDAjO$*i)uL zip6`Z001BWNkl`qQ;Q(=GXxwtqNe%g91Bey1SvTZ5l0&*fxLgp5O zNEsK#ejvw5j5w^bgx&d+<|Fv)wW0-we>3a=#H|cn@r=1}b^E~m)g89X zf!&2^EUdSuWGB`o))>6={Qj%&aBblF{*J>q2->k-V?v;5TPR;+ecr28w^~+ z*?{#tTwk)`8B=YRPZgihS2;y7@3bImvm zJb!j3szX>HcX9DixLnR$k@r_Ife=qiX+a(0@j;zrR2dbC5DyIL){g^K#RpRw*=;sd z+mUnPVSixU@5$qYw=!CDwNjkA09!Hc^WI^DWqrDn*E(f#EbQuv-EPfcItmgJ3#X^& z49Ag&>pS9@*mNs_x=p2&NfaB}$xaDUi8xzGC| zBCpLriV5c()mzSgiYvs~ z+DcJmX7a6h+{|QiG%QMW)Ik^t+0Gi%Bgk*W7*93A^J?3mO~Ru;k$0YwMB;386ts*S zt9wKuvZ@}l@V+KhM$Sf(vcVTE81+!AvN`5z$fhteKTJ(n4M=s`JwlamYh!gJtxsGG zaa7NyoVmTe;rD;|nwy6srD-t1NfEx@^6KK8O2#>8T2CR9ztK9`{8)&hRCrTO_hk~ZIo=&yL*bQ80R<+10@I| zF_wWGMO9?I!#5tYAEe7Jk>fBCYh^$5oSBMuj+8Ur$(mU>HoDncBc1g;&X7jRU~O1N z*+wZC-ZfAnQ$KKc*ppIK_2H8Osj~P5{kI-QJAOlzkx!MqZT=Zn5kBE~CNVq(L4Hd@ ztUdgH^Jo8y=g~jc*#>@ojn+$!>C8(rI)bW?4T|_3u{0Pn#k$stZ37b(;>6lYD6=VG zj1)D_TH&i!%~3@{uXB{3d9*<>`g&?fN|DjxQw0MvvX>RnnH!^=l^#)qV{DW@U|q!p zhc)W`^V9+#r+c@=40T>IaSz>QQ4^agaYtSW-cB3B`Ccv`X- zofOQ!=CDC|r8=J1=Ec1KdCd1jRHV0UTcHvKd4tYq%0{i2Vwn1@=!U1_vAz>Uf36GP z^Xbo>n`rMU)R?H&arNekk3aa3nldNtiu-2G=imPfG?_befqoq5$Edkm8SgUF7#VUT z*Gh0!>;kHc6=yB()zNPA|pC1Wy-XTCl^B;M~LDUziu18{LvS@c=3$+s=s;j zj>~sfG@)a?UJDtnX(V1l38R9L2=pn=299cqM(D^W$LK8CQAOcUBhCe0K0CvAVrZBO z3a1LR-L!#W>^U4BSa&N9cejueq(Uka_rtUxk>faOz$n7s@owRXO^1>Gc$5vLX2QCm zZ3F$-bA5S3nX*WvgJa4g!*NgFA6Ttc!mX;XKMoxFf%Uq>SrI7M3NaQ=wx?`18(zP8 zLsJb|_kM4^8WxIFwy`al%6J^4=rVBr{G9uPxa~h2dm1O1e6`9(+c=L^3lOZOTQy=; zpaqTWr&2iOQW=Jk^=7m1IfR5Pquz>Sx)}mOTGow6RflD^8ZnhNNI-VYnWU;n-#GFZ zHDA$_G>)T|D#($Q=#^N?a-d+V^4;umZ^c{~V`PjGk_b1@uD{fRwMNFdMa(26GHHGX znU!yFMKaZd94x`mrHbOy8|bX3uT?A{if~MZe&S(2@b&8}_IF2|Yw@cMK3K78$&r#H z>n=$6u5}!Gv7M-;kSh4~hIOq^Vp9Y?$XS$XV&?%}x26pZo7I-}>Xe(qNN88UgKTKd zvN=29=Jt+uwc;=x*_~}!Z#P^#e?dJzXWg_sKR@G>Prt{j^9!Dxo?%L4IzDiFdrPg3 zc6~y%o@1`GO~7q;oSd9cYGo`FSi{HL4JYSkOeN#H)$+R6+a0#)I8K?n!#&5l2Xc-y z$`#Ey;%O)~k&4F|!+NzQs^|hmU5rI73*@8Wm%tft^vVT145YuXQO%6-A;*nD1)6;W&-zb0kEm@9@wen6&A!QMF&H0bU2%1+)AuI1` zRtP&+m+M&7YE;lbLF>A%W3$Fit(*TEccCTxP2gMM&XhF%&BV z^r?!1*)JXuh0q4P^K7@L91jP42xJSplQY&S3Fj~-8r$GPN6cwyUX!WZ?;mKIhGxCO zAiS)_>Phc`RAx>5A3s!GSTmR+;o9!8ICnBy|F5v~!+4?5vn_JC84^ux=Z9J<64`75>ei{ez#)fU@iE)G~a_bLXzTo=$nz5glrU=$>c6NqwhTHpl_Q#|8 zMI_QRGNwquU`TOk+=I18Ee9ImXPx;m9y1Lc5`9)*KFd`oobfbl4CX zr$RqYct5e*Y{*08-8bLLW?(bMWQHL@wOl-VMYpL8qvN-~`;OK2gj_6Rj!T;SY_M61 zcyZwhF;6&a2+niTtw}@ApM3Ty|L$jh$=TTn)rjxYo44<{yuN31aeH)g7Y#;2q7%hcW7IVDGQm_iXYE(d|9PcN}G|6V$GAa}FDX1(Pi$fKiTDFo*@-))I0;jAj2Os33DsL1cIE~(d) z6riyRng@cOQPW~s5xi&80;PJO@$@lq>OH0k42~6a%3AT05p*)*yyRWhBK8g9Yvfeo zUOC2t$bx!9&Em>#tkXjT5hXnCx_G>(1v5C?;E+yKrx65eXsw4h(s)l_3!8OEEroU4 zaesTm-Erb>sMytxX0-+5X^oR88ValR85d{gq$DHOwq4P!TUqZ(4;;i%*_2A#Hf&dc zX&SJm;o`+}*6S@&KKhiK`v+dXeobxVz-!iP=#Nxi`1q3#`RJ1m`QJbJ z5B%;ozmr22!`aCRpM3C&v)z`GBWWD5I%Yc_Mto@TZAU*uf^Rv!ct+a_0-8#c2%e_p z^x~B5$xgUwuz29aR7f?^t}NfZw*1KtKjZH8H@vubhHC;D111oY`2WTJ2vx>t7$tkSr)E%0nJ9ZxfFs4y3Yuj zE{f7eH+SDQ^!o!gNYPuW_(K^d1-YML4OJdXGa~9fv9u8~veB_gHIG?&xlWHoosP9< z3WRY%)Yw%Bkc-)_dJmQ=Ndp4h%KkM*dCo2bayBrRsy@si3FI_^WpT-uB3TdzhapXo z;n+hl+}vJq{`{OwVcV^j&l=rxYZi38mW;7}5yDs_f$z0c;Z0JBxll+_;1*HG&HjMr z&tI@UIp;X^Bn+`aN|DB^3OQ#HbC^O-P>C2*ao#LNGDr};$+Mpy%UCtf_DR-?g}^ZK z_U#Ru?Kv%Qc4qnV%OCUd#Rq)-^>6ii3)KmUJB<c>F%|D&iaow{lG$1X zO`T%FdExD0Wu3QHe86l#nl;2`Xik?%DdD?7!DwoL$5ew;1kEg|Aahe-<-HkMj~S>r z(He(y!UxC9kxPZ7zH`P~raaL&%VxdODO4p*k*2Y@&~bTrOW*gjUB}t8vt>#&O_Ppm zGXzUARmO#-P@-6w*p+8Ej(AfOaT>8sh=0f9UXtpK<&%#-=C|+O@b%l*obFEX-t+d& zC6`xMY)_x_=_lXguNZrbxkDijH}l zr5NFN82dP4DJ2QmZRXLA(}SgAs|+$~HSci@q|g%LF*#yXYyg#5M7}Oz!m>__Q%+bF zNxUtJj?U+=m201B#-+$ANP)gybvTTmfYx*N>?NOk{wHjO=a=~?cro@-{Vla;)e*j9(@8k? zYV(=$IXz=~!kJ`_)lzgDQA-+xv+9{`TC~d1LU;Z@St$p>>V97hE_hnA5yMzBBbV=U zJZmwtwwG!EKS9904Nk3ZB-No{kP(`0PWo93UpXU1bJuko_XqZed+zsVtUANW!;ilF zlArwKCtSY!j#`H&3g=8UY9ebD2&j({MmR@_NbaC>xF9}X#aL}_AJx$rF}tP6EWmk3 z$-?cf21&x0qsZnaK>t0dv8-^UWJ+W0BMMuU*Jm|Nz*I3GFFcN^=Y6x5LecXhxQ6v= zC0VPvF!U3Ld%35!CmXN^?;UOH=pV$)_Ukv_3h_P0Cqfk2yXS&`N)b z;VW|WJRBn?B&IAV7uImC#KK$(=jZ2awkux80o*mVO~i3hrCKHgS={F@p5vV3tUxxI z^M_k1EY97<2+Gml?-}}@U>(&O?(XjyW6v-~oPj}i4jUYyZOBD0it`v>s6=v!YBS8w02UU#fEE1Wly z^Je6Low;3)Tiv5%`SBqcW5&$HQNx%<3Bfjy5UYivuq8lBg%Dc$RZIyDO0ZW#BUMaO<2cbZjn3OGDMvNrtg;an$QW{!%~4*hdP`Z);W*&N zf_I(Bk%PmA07HginC%9~BsLeqLos5^Xi;*htW;|urAkT}?_18!E_iHt$RGS2*+SX2gU4FI>%Hqxyq3tqpamp$OayDG*TTnHBvQ_ z&*)_8Le1i{(~mL^ns5Hr2RX2`zAMZ>U&bHCO6MuuMh!Zh?^RtF!Hefr86#k58|luH z5<`;~goa8oS=DOF&(Q-gOW&vCHbJ>cEkve8a&9pUeGeGC>-gx?PdPt(PS(%2X&U9U z$bFZy9B?&Ns`}vpsv@>3XU_y9hJfA~jLA@cEhN)wnD4$PAKxqQEQlVVWo2OtY11y8t2MGHG;9GKY!Ox9^J23s7pII?kSc${&* zp>36und0*LjqV9^vFyF0^DUtix^BIU&#I|2Q%X}k>=HlYRps6`j+5Pn`@0*4Vc_=m z7XR#=ore!UYWVWYFZr+k`9E>Ei^Q?uJ3(lSa}te|QAMQi*9ukQ@#r}mj$$L>L}6Po z7$^M8g~zD?fiaItKJ$cQN3Cj>op95nbeBj`VnZxZ+}NG$8>KisH?`o^?zu9X+4H}}F{H&RfF zzhPx6nLbWj-{0VeQRccKH010Vr=DSw5574)69)a|4UG@Hdi82iXEokarjdtOxVn6Y z4}mr~4o8`ve(=Eu{OVV~V$*G~#&L0R!EoGjcXuPOVkigy7fr2ilcvexe!@v}Lzx*|eVhy<3dja!tg$fngjV1dNju_&jF(B%!s& zIzlK+xiC#V4~HJ-H^M=2o>()b%Btg0Z-vpjN zf6n1Bh`FKFK=|l~CEqs} z$WOR0R?xaQO_;{gh7PCh>864+j=U7qYNMdtwiuq8E15nHNQZA7u( zNLlg=4~K(T8yH7UNhk=$P{@qav=IF7Z?45OIAu~Es5J|sYyz%nIrIaiK+KbjtdNoE z?d`1=!;UF6;ZB*&1S>>?HxBaH@tiIj{C!& zPmVq7(^G7akw?MO50fIs$k z2S&%)D7wUgqRfTD|KFn&MfxME2^qBM zdnC78Ere$EBTu%;c|QowG7Y_|^a9f`EZnC*e$1bv7+K1mE_`Kq`G%slE`slP(@;<^E@y;hpx0s9XRVCS zM41}^X;>uKTCazB^j{Oy{xO@dX&QFB9k;i)+}_@Dc6u&gg@GUc_{V(y*$?^0|9Z>u z;lQ>%!J>X>HIkAPp=Hjlv<_=L4#(6FthPIh^@Pwer6hJZ^B!m_PR}~w5?k3b6g4zP zuD6_LRlF-LvL9I)Ga7YXp992AR>M&pgU)M^I;&On_aboDEEJiqRU0~L&XBukDJ^a4Ep)!->31Oi;D|UYI$`~){Ups z`s79yk0fi2+Cj|fHgNzqdT^8F`%00nm>H6;!nyePgAa)%(}f*x-@YS{T6E;Hj7a5$ zY71ipNt1f0sx5_V%rYsQ(J|q>7$?yb)xgd5HT(M;3>j}Lxl~c##EDqMZ^#=fA;Crt zA7>xOlY$`0W>_jD9oJQ3G0079saS7hJZ#kZK#7y4E)EJ*lwVM@3_Y?Sp|(2qiAV>3F3&aiSfqBNYQ#3OBj_*&&G`&Loh%pik{hpEL^Not_)bbdLsbT`2YYQ z07*naR3M4MFxNuKmBx6ePD#ZDU&XCiM$yt>c(5fNVq^IUh8FbYz?pdcosOD~jc|6@_)C(od1LTg%8Z1P;R>imL+q{z%)l;@>p) z)TQW%#|k1-A?0bwE38?H9PcXLi!atVid6|Sm#I|AYpvQ?s6ueAgX$ctY-Alj9TEO< z!6gbpHKbLu-nrm0T4X)eG4=6hJ)sxK?}`kU$0E!aAp~OzxtOK6nn}Y|3n8j19p_&< z&z43@IFtQw#8M;*DM;?)lqPJ@g0s}+;MHl4G*0=kX*Qrv<+DYFjN;CACpf@5$pV~X z54;yjhE%^8ZzmkgF7vrYA=YkWhsM!0PyVH7{N6>?H4#=JLI*^j77L#R@K z7q!bsRz|Xpip|0sHdQ?ILI}iBvN|`bj=Q_cG$zJzBJRXT^7Ah~;L9(6%&-69=S(q^ z#w2E^jS}58Ic3U`tozpEh)#?~YpuAp5%b@w5nOX|sqlS8Y>SNbn(Zp12I_AMb>hs9=ONWV5iZ;Hxpq%(p)rF<6HFKtCL~zq#h(gAd6H6R+1R zQXGZza(>3;)h%%tnOtELJf=(>?=HD7Vxrl)#CBzQxO>aRNnqWz#BooKJ!6`lsR+X*v$aBmLK3;X0W&KkTph)vs@vrb#*pW2kwg#GaDjaOjCK zFB1Hw^?2tPYja595*l%$?fa2-wZR9&Y84deE;Q7Ip5qMUD1}w61qbx|J;7F{ z{>aKVeDd-4_@Dmg|B>e}UxF?4ea|m{`D@<1e#hy>bE)(-h}Bvzd0xzr`X9mMx(Nw) z!l`wG_!G@AcPWAhIV0r7ZoMTwNQNRZ&*;#`_3FlVxEX}OEtB>=3?d*--=(!3UU5mjR2Suz=oObfIvY=JQ z=z%bgE1s^6`S)T~EvNzExe#L}yDZ!%AH)z+IU|pozTm=;9#x4IQE{nY#TBs%khCjt z?DuV8z3zB@dC9kb_s#o-%H!FAg3&sDWGRk}QU0O`w-&B~wJ=7gF5{iU*n)9#fTlE$ zkB|-CSuvH3k&?tYdjB8?MrlTJ66yV_bznU%bebp;$x+C~u5&a^i^U*HeMe|p4hLx< zt+m9MX&Xn^tqIK2Hp3g+KRSw<{1 zMO8|6lv#OarMaL8Lgb2n4-I;{H#iH%S(+dO|HJWtG>z{SKOjYGu1PLH1ynsHnQ}8S z{(eDK%%jQ>gn}{Y9x_|3yr(>@b=j-lUkr-amhvy2XHg24_Y1bHoUAer^s0_H=a)}? zvYzC*ofA}JyODtSp+C|!YT%1m-pf)HE=awM9>v;1-}}N9dVHVWL9^P(w8Y9iZjEq| z$XU(>ZH6C_yT@q&#ymOPGqqZ|_llE|r*mRrT?K(D3&%+~sx@Va5LNWjS_>}VtcdvuufHC*X9@j-9B-OJk=uCnoGW^idWM8EvGME;+^I0 z_KI<6*lk*|SU5gl>qHj{7av_va^&XbitF$0r21S*tc~{$>nk^xUy)C?>~<}$-`?=+ zfBqe>UcF*GUQugh7{`UcJ!cuY(1Jb6CK(H+sl+^ybK!W94P}@zA+&f3d76k(x@PAa z#0yM1@)#pijTi^sEW;l00V;_a2W;0+iec4B+IUv8v=j>|_1Gec7B@S=W;p2@#^V8| ziS?@GXaD_Q@spqY1cG#CheOZtIM6gJPEVex&xx9*S%DMhL)91-GUwc-7^B#RR{kh~ zPF9*gZ=@{dLG|ppTI*;aRoD`XI@2Q)pRX1VT)b&Ww zO;a{YQw$q##mKV=_d^O3<(rfu$Ws<;1rcQ%*Jpv52qrv zpMEVyiQbt1pS2dBg~)D-95ksS#kodb7+XbyBs7 zUa(&6@U9b^j`dcW%grfP#~>+=c;$}Gn|@RS(X1*q?=5eyE;$SX2}rdv?)P{n2?S&b zqMeGOG)0i4nOpa?GZz~GC+bj(He4c{aMf^qeZ~F5t*A}SW8<}0Hq;_i1~oG-x~%5{ z09h8w-_b%}tAaUxrwJYVawMgqdzkvWVW~9Hj%J%iPnDvTr6h^3D8OSSiC zM2r<=ud;N9^7+k(pcX6@vHU?4bz-$)p$eg&@`y|uXV`AHT;JSrcXvnp@RU~dHlP3C z3x4pUFZu4xx1^HT28Xrc@mI2Ne4UZ-d1nnCONyhQi8H^+$@wNHiEzV=7QG@0mG!uI zdznWhQK&tSaYb3pb%o3?-eC@n88Z^eBcG>uKuVJj#yU}WDhM+hpIBqD&f$S+IMP|m zWaRa^`pA2XInp1FSW`&H1Jp_!BCU5&6TusyUKlB;yakgpj!Z*g)3$i)9WePW4bI2|#)z8|U95PZi+-A5b`4_x28U!sbR3C& z#MXdsR@7{vWE$%j$DY<%UOjup|N6iEFMRyzhjIufv1TYZw!3rMb|tYxP85#b{Ocxt z?{}_Fix%B5u!!(HV~mq@?txK*3A5aYP4JxVHk_Ys7>`Fvj=G!6 zR4cXQN3Mu+ux7sC9EXupLQFx0*Hp1!W_@(UT2CrzaV0hw)?LTF7K00k**qcd>J-Ew zhi^s?ym_P6&41y@rNo#bC>p((0_upVYDlk0^#v)BJkdf<5#ym+hei#fklr$)OjUC8 z`tgWwJs<3zK0NYP`eBgbs%^=+&^9ZEA>q7dDoDX@J_o~Uu9GIGnFm zEPimhMvWFI(qzf2jY%5yrQx>b5rNX8ImWmk?qK!MuF@dZqB(l=OP^^5a*owfNK0X9 znFFn>mA@Ngtd`ZPz*>#SvEp%wxk>m|gF(<1iQ}9qN*;G1jC4015 z#w;eE&I_`*UavVhIpOwU&*fE5^J+x{eDC`weEH))|2@<>t%@Z!A-Pgb)Z#$9CPazrW?-_KHonA*V$DFyMVF9Ia^}4|}%jEkFCqzu>R_ z>Zf3Yl$}cE>h_L)m^i;U!}@?T5-vF#usS#2bhG5uXkOWjmgv`2wk%zu5bp9+n5Kzi zKe8W2-d^8fY#ktwyXx)jChp!Np827C~sL6?G!s z3SrqIMa4Wq&_XSzL_bAB2#ad04NfGo%GDB&5*d?N_5BfKM39LoMdf*9QI^cUK*n-@ za>@@s`5tBLdHwb8xw(47dbL`{h$YKd4r9ngiljLLf+%B3Zye4@rXg0mqpURqnY+Zj5Cf>EVgMFlOWfP7tTQ~ z6UXt0_l{B%r9|3bXuP3GhShGv;qbu8>6Vp0C#I3EX~7y|Eo5Vaz|(z`eDMlmJ}mrHqdozOoC58_#U|*CE+0$HqDx;isxLnJEsi|>rKb){WWjj zzNVziqzA{@*(o&@YECjHtW|k{D7sqTD_)B7a+=^7$0&zym62}Ij?lGy@ZraFn>9(tZrNnDiP555*Gxu;zt&osRmU_`N3AF3#=~dENGz|NDyVGHF;l5!;cAX~qHTg8 zRYeLefK;?mvWAKy8*~q-kge=5&Z}6;QXCj-Nma<|#vp`jH;;+)a{psJ)p$xZqQrcX zTQiSAV@?jL z8YroV7^q4HaR@=w*~aM^SQpXITzt(%d{ESNp8U*c{Bm#12yYdyHX5(?6%EE@u$EdX z>vhK%NA~-khlhL4Pfpo2YffLiFv$UB3nnQ81Htq`Y6#fPP{s??H* zBb2NiQ5y&za*4dVev5Acpi*Oi4~>K?(~fN!!5>HTDRieySH3iTu`Fk(AEo4v~9_$kX0qo`j&3h$XFl^ z_-4fr6PwM3k_zq0Qx(B@%vzG>L1gnnIE)cuKeBED+pgsh2V(3g6s9~;Q>3Pz^W6*n z-M{@Q=NCKOCoI?3x4gT)!B~%P8#&yq6Xyo4#*NMf%^!7U@RS&-y`hyZ!c>QIf#NdQ zz&MT!W5GB>Dih-{@$Gk)0&^;ff9BvQuTr=RPLxd2C1xRfD*RjL#W(W^lrWvMxNv9X zLB%R=RE}LP_g5DbIl|qu2H8>;k zxyW5QqpP(lcP-1$%ffU}=7^mc9P%}t3{dUDZ3`jDX5uWa>ktz@5n(v2T$>^R%^@^Q zX@qJRr-`OfBuBf$X_y#>Y3byvF?yJRLEn>p2HqQNbx%4>C-uG)9ba%oy94SS(6DOM;-N~9~FJ5wed(SU^@hiMH z4C4cp1bN`oPd;QA*95=f=4#;Wn@fh_h;IYaG!lYm)p>@aIN(e9zoa^k%Tf$JT-~wRtT;d0^7_pif~$0mWz~sS-2QOn2S5A~ zAAj^Aw|BoGr^1*rtFY4jM9`a3iYN&!Y&L6ZlSl<7Qy6o?Pl<6FAqfKd{NfpByA!&u zqhx3r@xH^!c>cX{@8imZ1*z6UV<}z=E{Iv?>`xS$75j0|H1>@Buy7WQ5wtl3PfV6y z{_>Z+{`Ol!+Y(dZvmbsT78y+^VavM1{0qcM|L&Z7z{r)J?R3T_HEmRocJ33;n zh-tGtd8umQQWbrvk0aYU7fP@k>{Ajkl{a4QTQ!U=)sRb7q(-xG1=f}V2QgqR7QOaD zJ2BM>cTZC+ghTciQ)8UhI3e+eDk)-%&~Rpp8GvkNv|aYM*=RjcaW(5G&S6Z#y1?!2 zJr@_}>^8Cmym)cS7hinA*I)gH6pu{PBoq^4#9~Lev||zrhj}dRRB1j8vL2hJ!4^Sz z`e`I9Ey7ug4Ps7S5t@N97IIR-ppf@%mC3_wXl|C#_Pm~ETvMCIc^y3&wTnV~R&wfP z&?R)(?>Sqq>Drdvb}fR5UhF2OB*xUy?F7wioFIHY z7z-w8r6(A1j9HBDa$-E(bF#W1mx)*=Qppl^n5RCcV>gO&s<;Z6}Cl>#dzNEwrhxU%OY^LFbnSuGKq{r?zy?(1|U zU1mO0Rb6ezV+Mm6fWUIWB}J|_v=71)}iSUunc2WS;f zR!1~WnJu+NohjHLUAP!CF{)RkydfN-t3^qY&?cZrx40NhsERn<*Niq%$j1ZAwqeXuJFdd6S=#ZP(ibj|O7{TnVX*L?NEFZlbv|9gJ@n?LZ?Prl@nFFxko?G1kFFl`_T4Sp?K@t+e9825 zq-|UJn|I*Aw~a`eoW!l5Si>ZMMYh{5AARrSol9w8g?PhGa``xD>1{EpMz zfv#J#S}o@ebrS+Z9!cZGk)w2KtsJrfBap6iLAw-+e|k8Ru{fNf`Cn$3~(oKV3T1U$zi@8%I|BHqDv}5fBx+Kgi$-A>$vucAD;rLWTw@5%0MfZLX(Cy5{xCru z7FxF3Er&xdX44iPJ%XS8>}UMbFaLq>{`5PhA<{K+ZE6xPIHjoLXSx2)iI8{W!#u^v zM)arJW})~!&O{L{?yU`?qF)4u7!U{tQEa?C(zL0V-{fWWRMoKxgR84*UVIN{;ih)^ z)QXS7qtyjILplu{%7(6MAQrMo#Br2K!)d}~Lt{NQNh~A6upx5!#vuZjTFC8UYn1vT9g+;Y*o%uRt{+`;*dA$} zC%T5?anEA0Aa{+(Kb!_knt1WzQ~sC#{Ga&p%O6OfBD2}u^XBba04^^tX+o=GBwZNJ zVRX(uE5TysL%LF+vk~1JUsdXodmj1w2`+;1mCg5hQ^9`sca2H zv5u4?F-sfKC{C_YlZzGngvo`?{Vm)34UZl@;_=fb#3ABrP&08I8QQa6nN{kzG@)Dt z(VZ(fD_~rcg(YYTn92$zV-W@a1Uf#d!i=6FO5w3+BszTi@+DvX@N>b?m4vrK;f^s9 z6C6%QcDtQoFAUQZSuPh0L&O@(grU1!a~yk0?xA>ghdrr??NL8Qt{+`+8Vax9Z78F%UX6N5O zW3u?O=l$0@SC!>93sLH$b})*mnqa7n)Yd zFlCXT&9hXEvVm15!x%$9ja1z#W28W?{}wR$c`TSg^_C1p6Ap?|`BNeIRBWlFno2xC zWne%V>qRA1n7i-qUt=98monp)&*T>wUsjX$WQun5BssN+41t(o3-j+{wdUq{Vz=9I zanX^2Sa^T^lOOZN7eD0n%Rdq0iE)gCwwb$C#R!ftB^hkJhyVZ}07*naRGB0h?dVwR zby77-L&69V#Cr8?)X_jn4v^n1r7)GOd_t*f7g%S%c zMLR_#9vm@^O1CxQDYpo+Mp6Xl8OBk@3sz+kl5Dgn9Cy05V~B$u94&^zIQ5hSi>Bq~ zW(U@>Uae@9X(qUd^9FO${=!=%;3&v9mCTq0yJUlbtkyJ2nKpxv0EEz4=7b>|1s~_? zvR3d4*0mTtC&lV0XTh))#Zv(E;~+K<&4SgsRcQ>h&M`%;S3H-iHUI7}e#+|dg5UoB zcSKD_MdA7Eitt+e@1 z`y)1jOOD&uHyk$iq|?CUk8EykDP!hh-Qs=2-R(|{hInPuce;4r5QVSaP>L@T=ec3!BG}h||dJ1}-iGzx~6vYMih z_ajYvg|(OSf#rjxS9NOV9Jlv3w7_BLxxKw7#>iA(O}pUZ zk3Xexomzlh;cTFBIziBpUhVUiB74zl=em+!y!Wcb<^$|XqZHM`l5m~$Ah*Vzf%wMC`!+^c>P0(SNudN91F%K+Sk@Fu(*UblfEa}^ zoNs^amCKl`sAr_c8L9R(4(WPIqI+_-=F*8ng+yAB7sMDlK%oAgZOj+-%#v)T>-Q+60 zpag+N2{pk5HAr@(9LXulx{QuuCPLGklgkI}*;) zO~Jc>2@QD~n2f~hSmdm*&eE;dbfIH7o)}{07$f5}vY#eNu&qSUDG6kzErwzOxmdg? z#s-Wjvqp;bo;*z)k0(}(703ON=4w5AzHN4U)$g%tBXeGy-aC;G8buFg*{xZ&E5_l- z{r#346W7;IB&o1g>C#3FP(wr4Es42@B*6H7j9e`*80je{^6bfTe2~gI=ZJBhaU8k5 z?MdUHo^PTMyW4MpJmV)yobaZhj0xk7Fi4z%l*l&Btzlcli_SYkj)SlcDDz^OhLLzW z;Ebhh17CdkLw@wtS7HHDBFPkPZf>}}z2%Efzocn846;cp-lD1+8?A`uRRpRUuBn(_ zCu>Ebpl0f>R<&Bey}o(N&E1A}c|mA9Y$Jim1p%YRNyRX&2o}a%$f*#sD%Kjs0XUEE zBmu2;7A9kTqO(DRptRn{apckZu~b4;o}safZekoqaxQq=VzU#fbCD#ri~!uUyG=v~_}4ug!NRERF6q&S8$w~+H3WaQcw zix>`@B1vwVk2pPCr1J!ln8+b$F~-UWL2*`24-gUaRAhz8x;JEGnSn7*O!@5fn4=iz zdMn^~Qwm+z@%+hCUc7iA_&pnhjabTjpg99EMHLoJYDpu9mMs}W#OwA<*3IKjIi#RC zFi8#pZ)E-HaY)I!#(W^_7;Dk3*&lZF$BCEUe8;ovD_-3nxP5ca+jsX2DdW2ZW6a## zZrE+NIAk0_cHC|^?E1)Z)$yy}{*HC)C{s^h!w1jhdS70yzy)^O4Y#+qTrFDqsFgVFRanzlr&daaqE=**{A5k&&f`>(xhQixuoh-#5V&@*Rj0|QosN0%^TyU> z3H^Ne?63gpSqT-pH~XsU{U}9DpRE&|Y0iQr!btqHDFG9~h@p040=vzY!{I<-!Bk+; z!Pj5^gik*H0l&K6G7bllPA0N(q&(4&12~9Dhzw2FVuL5fBol!AK!nqY&6B3t@}32) zEmO`SP=&1b%{3Cdidqpl!>k)vb5i?Y&DE&QgXKJ54_!lOXRsC%##)-yf@GwD6Vu3c zzr#18aTOX__sg(g(Jo0-VHkS8ee;$vC2Z4bEH|W57>9|$1=`$jx7i7cFl)vK+QqUW zK6y9|TnrN{rWnVuA1TIRToEaMXN1x_MWz(Vh$?)^GU6);%fvVf zMO4|xoWVNj))+7|Em;{sNrd`99L-}YWLwDIlCxLPd_vF-><$GEJ<)4(|D$sAr-8b(OG}&DJjy0mQ?fe1cI-fR$h^0ifV~QN`?tvl*KrB=z4aifOBX zSi0h(!E!qBi(mYLcDdr%OCYPb7;C{gLn#w6Nrw+>$VF+{F+y;dn6Orug1Nv%Qtg(6 zO$J{AHp%$X>%nNP#}*lth?kgjXpFHmp<@{q*kst=?bx2go&I=tPqSL!mrM3jWb7wO zgzx@z&sSf)z!}HYYE3_EWfXlJxb7Ztd3{ai18-h_$EsWL;)fqGQZRe~DY6PJ3lGjl za*llR$w%yV8}4>{Ru^lHLmk~}jrW1$Agbpc&*N51>z_Wp;&Qp-xZBG8_Ry`D?1quu zaUyxg*!QG7QHbK^V3LenlXQ3Yn=S8*W19=HAF!@rmv*$F;rjZT_0^iD>u_DeVK~yq zLC4T?J&g;9(zVeM>7L;bT@EuLj;Sac#$|IAt}*RG~m#wfN& zi!fs)2}6^ySryC*`{?0E5Y4Rf=*${PQY7aSy(X)v4Ms3d7ppb*_xJ4gdxr5Tosg0F z@S_j;@lSrrH-Gp&Ig1hUV%g3L|83ifjE+~wb1&~N=7iG%qOL24VN~X_u?FKjAhcXER{rmUrVX}^4etl`ED!x#Yf01w!i?Lvr-6(0HPciGwk1wSN=XEtS#}FzjxtBp3o%V2 zVg&a9sF{Vz>ue&6oDXrFur^?dr9YnV)^WMI#1#1Kv(NdsB?+EJ87`7oWnvzsW8odaI>u=dG6P08rnI-K4ouOC+Zox+HaILn zNTg_Ws9;Y-;Q;FdVE+*Jk+WKHq(V#+YMV?ZQ~k)QHjwvruAV1ln$*Z_)R$3k0D>u- zk{E^0;BBMEvKrJM22iOmC7_#9HHbtI)jLb@o@rG7Efn97&jGg{8kvGI(s`gHNkWaN z3&$MgeJX>m`dSWyfcUMI&t@^giVY1o%W0hG;}-9OuvLrz?OpJau;+;>4l;Jq4NlHv zlkq+X6I6#2qBU0J5J#%qCM+c}bWX(i>L^0(gqRYc3#w2oBAozFuOD-_z2oCgKM`qh z3d@TNUfUA{SC~<%foT|VK5*FgxDdElTwxp>hoiP$ zEsM)F(=e$VgXQVfH8G8hX;fyP!(>FSB??ZXpL)FU80#4((OR_iBRRrP{_@|`wbzuGXxqT%?w)?P!v@cKeIaeeoY~&raoFv7{OFQqwP3$Lu-)&8 zIgyOz^3gRtuIEanI@vc(Ggov4nLiipSr%O;+0jQSmk2snT%+N$#iE zLI|zd+n~Y7lT^U7+T)~Ln2ZryqEeKdshB0LP^HbT>gqf_`%MoM7`LpVK z=RL=9RQk9CMrVa?+_fEP8fH>J)3)^E3F95EitSlTw$hRGE>EhnJ5%|2xKcA2P35#hD0)HHtNl$kf(`^VH`Cf%SjAqjZq=b zgiYYQ5fgC-?YiT|Cm+C@%rAcVOFsDUIsfIq{O`Pe{g&ftM-u{Lvb;SUp@BY5{P^P+ z+-&Z-Xac*G3B}+ulq~(K4?la%M?7YCzvuNIeodPuPGgTT1=ol?$?0^U?|ZHut@xY2 z`WY|3{gz+<{$CiU!qw%Hm=HnT?C>^lbGL=*G>=d2_Z$B3$8Y%Zi_iJ|lMm^0<`1vl zGDRT}#F+6&kr9g%g1Z-xf3s)^ZOdsm;JSqrT;8*28iv!6(_Y>i-tzLBKQS56NAso7 zHUV1_%cfz-5eszQ5KjqbAK1wlD>yvoDMby5wJ~-8EnpeF;P&D!nRdGM7govv z&*3y;z2|Tm_~yG;+-(kI8!(|`xxT=Kmc!x5@p!@-aRk3uKca1xXG09A=L)V=>;%^n7cTAb{R04aPO#<*0T) z-pwr1hZVmZI|bi1s<2&XgN(ckoN4nqN-j}+yTp{V#X3hnio^s-7=o>}biw1Tqp^<0 zdVH{i;1uIyu-@QX9rq_q08%8610@O`C}uGMzr0-I100WAe)G@&$a>lE*FXRFeDv%Y z1Kt_d%LPWgAK$!vC2^r~jB()clSlmIs~>TFdBx#ykk9GGuWh^C zbMxko(|&-IdGY)?tJMY5Bx__C2G;9KR;vq~^PG+otMw)QC@j`77K*W)22qb+E!Kn( z*zb;jp+qSfhG9@;enYlSy0HeXt{?Hy4?bo6=#pp(p_LBR#l^+^`coVkPCe)z?%I}B z+tE5N9Uv?wMHojKkS}8h)`>5sCIeZ&T#$|m+EWW5uv%UaLaTB*g_L2l*>HDvC*7$K zbZriD*dxUo=Ir(P|MyYHW6n9cuH$mOrfC}DD2C!DpVw?%;}0J-Zq-Kx#pfKgL!tI5 zMcK^hY?|vU=BR2qJsAJI_x#q*iAPFl{;FdsW6W7UslG?Oz;*O#jRTcpsG`a>$*Y)6 z(2*N8-m11zeclH#V=jcLN>q?drNroaFL^Gc>qyYL_hZg`asR<{*S|ZppE~2bYL`qs z98;dZYD}%#O)+JLIB|+2wh62*u4qEXX0v0v9hihK#N+2HKL61Vxw?L&MW|fc8vBmN z<2(fj>X6X3tt2+Vs<^UFFQz1nWhA+BCP5zOYt^`*;rABd|}e40T26Vo)%G>s;AnafAly!h}FuAe+-xm>A2L14XJ>sVaQjBy+Z z)?xKU`(C_A<0J$vgLIbtFbuTKf|Me`2Cc#!5fNwW7BUhzoQ|YaXxjzL#hP7zhqsL! zZvNZ>Fj0u_(vnPU4|~zva1B_;R3gJPGG)OctrwR}!$7g(_xJe4BXWY?I{IP6wSnm1 zFbyomfk#(Q310*bo6UPN_=!TmVSHxs>;=wCQYUR?u?6_z%O4S(rSE%A{XtymyTuID zvjyUqXquLbZb=yh8&rw}mk=xmp9waxUaa}~zxx?K{_$7y%`+G_n~mt^eEb6zO*hfrNH!Oi?vrgNTu3aTS=8 z@-tPuX#{^XOg+E&#V;661E2rkM_jGel2E7ySxyiqu)Y&pF7KI2!FeGi9JeP{s}(-1 zIrfQfUcY6;^7Fs`TOx+d{g$p>aq<&yUf(c|6F2YfIK`1^vKSgpN5T57x+RG| ztrjfW29q*w$}HQCMcc61?}#Sz*=L{NmVuYAzol!Jco(!mkqOA?#Fs+w;Y{y0Xt!7r zDY+LAqgaCk=ky*IR?8(GVObx1V3-nz?VjCcPa45>;>}kJ9bjfnVT5KQUW$4CKU>Fc z<-yM)*us=mKoaJ$$acHIILp=5)t@Cj4<9+_IrhkFJ=j|XJvi$=Gjp*~<4n=`VrCNd zd9Mm4RY#6SFq~z^6HC%%ar5s8n^rEi{7jxZQFW&J{Y0k9Le%Rq|9^SE0ITDudM_zu z{@#1n!_@mAU*_TSDv8M&(H|6?r<%Q6iP=_#JikARJtukfTAyF{y~0gpDzZw}q$JvZ z&IJXO8{XaC^62qnmg|-QxLCs1Uw_U2^T{W?`Sy>ZbZ-rzZNw@nOTv~-))8I3M}<5N za-XLNF=Fuq*HB7g%FG^#MyCtL7{N$89g(N=`+1`KsYeWdJxMK6tT&7)Vw(kb_xBVM%WgrQL^RVDNPT2F4vcXNMBcu8 z4P|1r2)uaugrEKNr+obJCv}G~#few1UIB1*b){G<-3a9QP=45*61Kf^c1oFN^>s@a z?a)-5LG9KEL8(5sBvHkfIY2r@Cu=s~)M}0g&pmHYG^iGXDPq7XmOcuUv?{Qv@55l{ zF;e4$I;1m$ZtM8a09m__sNGDk0*1|5un^G{lCkPU4Aq#EA{C$0FoQEc1G!Nuqs_oX!}4EWs}o15?II z(?F|Xizyjn1GW@~NpOD|Be+6iSS(ia&&LGnI7r3g)z_=C3s^%=QT#QrG)6ie5A7mC zyCB%WX*j8=azl(GrpSIXrdos;y&Z)qM_e%iDz(ZU#1L$uF={JBp&us>r#+ZNo-RpK z!MTPM4LKUTYx%`L{1bP#CqDb)Ypn0cHi%f{>X`rlAOJ~3K~&dcSddlP&loSj6F<6{a0A83NtPN`?LTJiebjo=ukELwC)M&_d#Wh_O+JQxd#s3>}G z&&;&{(L)4^#geJUgK3(un$XvNZe`=uwTpJdA4Z&-I8_&i^Z>_I^ttN@ES2)!`%s@_ zDW3GRRIfx~$STkt=6zH$bBD|#zh8?*VD1{$Lbl{0nDmrM^)u-kf0%qd{I`Iq&(~m1 zb~xi_>%RpG^59G1G{q=1;d_aZH5R9zX?6=W=k)0zh#WYR1s5S?v-2s3}zNA z_TJO?M-GPrF+L?GXdHa<*=Kz9~KOQLLxtZe<1Z zQD*kIIWJMYzF}@4xTd8b=F)8tYps$Z`%{nU&AbMei?!e{tB0=0S0q*nvRl11RK zUXZK+<>j(tzu(KqXv)%3EP{h-7p+jxli}Hu7XX}2Crrq!E*8Xo;O6j-jH6v&Lh3Ph zmi=~z$MWMZf5cz?>@P**Uw8H0-5sxAzh=E&t8)8;_W0bMe!r@z?fl9b%r(I>XW_Zo zW}$9qYv$zYyt&T*uGN<>MVLed8I_p|;1*%YoFm>^rtgiy4AM5Q)ktl*rd*9#nJdkd zb%dyuYD!5wq%?>U6E-tfiq@(i2bDn{&){0w#K@6HplJaB`I;MVLJoQjS zGDTYA@@Gm3tNv?pI0+J@adJ4vlJTwF|55-SC}tv+gwF-*4b!p522XIF_40y3B2Vz` zH?K(3$au(D-;$=0_38=tyOHny?_ZEZ$6!2RvF7$T@QZ)^wE*OcXW3nlV`jhUNr?aD zlth=OZH_d}5@V$Mx7kmW6lr{eZ!g(yd-^znH{2YBHXefG&E1asQ^dQDoDCBWT*sna zalh~BfA zttUO(?rtdFvsf+(T`K~nRyq<;L?f&2>mnl` zTgv>sDMf;Jw4s?LV#Xxnh_G0&a4U8P!NE!lE_jb<`xMzLcJ|vlKW`nS@IDFa&mMCJ z+bZbTIegR5bnTf*_@Ik2cb@9`?Hr|?$MoO-n%xgj#|O0NnGZwR(IQ7GYgqQSbl_&Q z@i|e_IK!FFKPP??eBUczOQ{_*J10r?A&Thb+_A#U69EItBGYjc(uuU1;e3A-TRT^V z3WdOBD3sdmx0Vz$)_N{3 zE}5o@?RLxYIIvo^MBve5$5&tfn1A^AGk){W|3u%9I2UM4AX!*gi!YfpMS?TLEFJbZ zMJ4|Tv?V7;ic!XdUgUd%^D|zq?@zPcPD%N_E~0A`BU)taIH^33_68*VG*wziI=;2o zN3W-;L>?nkg<%-Dy10<*?u`hK79lpRmVx`*cii5-V~i6YeDDFTZ7_|c>DsxQYg}NA ziT&|FyI3)$5#L^5Ou^@pNKsfFF=wz+%?iL-Mm4DvVuAgBkL?6Z9dqF{4jhk1mW#D= zD9lXbC1sk%a~u+VFA3FY6wkq=omuAs+v9;?GF@lcY&Lk`@ZFzYvc7yu(=KRM3qsql z2%cmOzVWP=OM(?mmNX`8r8-k)%z#{cuyK%^7Yqgw$%|REa;lEe)F)yb=fv^d{+6*H zh*QKEOY0i?(}C;jCmeV8ymn$gN1kR-Z4#y$4{TmdL6aGIM*Cz z4obj`VW@R0ni1Cuw(6arqrsY7o!isr1WOi>JfG7;#sM`* zKKz+8j!8y&MH8x=BA^DS_I-SSRGA4sSEUM=j}Pz-+8wHTJf-UL=zB;>gk7b}W|fv~ z=0vJ8nPig*wcRQv!xYu5(eaEtr`76JpF@zd2=^XBvNvmP9y8piq~)6aEgVnzF;f^KD5NCXDX5V!wG8&UArd6L>uIAcGhwldX7V+ z?bfU>p0Pikn8t(;f&DIWxmpUgAx3QIXk5!^5=|o=zP|5inl;;9q?iNKG!cBudbMIW z9thskk4Y`EV4M=cb?o{PuxxI2go>R@iFa?_^5J4hvk-C2)p|*68e$aVWTU{=F^=q} z1KxX%N5MOhGV8^W<#Ns2+Z%?d$GHyI1YGblgDqM!?+Hg1mNP}}t1JRAG6_gAG2}r= z5ni;Rh8V>vs9OBQ!n=3xI2;ZJ2(%zI-rcMBHdc^Fxkji z^C>-#Y=>zP?uerIfy`#14!b(Cay|M%(`{wz$*41M^1 zOvb4Ho;k-u9$eS=<5+dfc#w1zxt6mMzO#5d);jL*w`{jto;`m?209BbKKy`BKl>rC zzx$5u{oTwAJRJsB-GYFSA4(}Ky9LKy_D0GgofLCn90rDAz?4Gc9Sz#Wj|q!dpoMV8 z;X1_nt6&Je<=Bsqvx<}^f_HkK&r(xvPVglOH@S%ZSpkXJa)uZy0RL&|@xh8T(J1Tv zm@*Xc6-{|$9DBwzV2fpp1I1*H{XvLMZObqW*lwg-UJ4ARBo4=|SmhX7NX0Vc5e%d# z9y<+&)&_zNq*&PRkC-VEVwr+Ixaj*G7N*9p zjzh*=2q-=*%h^BO^lr@K^Mkif$?!OE7ejz!@yYW=b-UCwYY_k@LiEw-XS5 z5(ez39Wjh_qx;Ev5~PwRkbl3cYB7RC#I3rYQe>F zML$N-nK1^JMVca242*ST=SW5{I3QkhatNJSW!8f6MwE=PA|hBMnaoB4RUYN=Kb%fd zRN=UO{2|L2F`?r)CQLE3-30;h{B+J>LcRh<(pBxcKu!aP!+|H)k6Cw1+QouCCiaID1BHHym}AenTQl}2>E5U+c*Ial zAR6d`XBtkJD2^5rF!U3{VXyjroe(pIiMDC5UPwF6iYJ-%Qc%Vi#T8;2$)|zC7`fkV z2}?Jk)ha=WE+}+=EdwO*YzmZ3rV^J=%{msK7 zObR54kueo~sBVGfOyDTzF(ew(oUJ28N6rWas1))X1M>`HfTDS3c~IxdUuIuD?JAWl zu_h)-oGQe?)*{cm-=Ufz7FtlwiJ8$6Xx0hBpFQk6Labe+njBek{+`&Q6|m*}y;9~* znK9@1{a)fq{k&O{jVus_YL;y^EEUv#s3v4lMq9_@fz4*a>GX`SlF$3($rFC~)mQxH z*T3fO<`$A#z8Q!2%{+~fNs_K_sw4*zN4+D^KvrC-o;QL$ll>_79E^4=ohlqy?}#bk zb)@NxrHWzaY;{ztI%HHlmmxXu#m>#zY_hIJ$kWL7v}e%tdh&U=#!X^I?<8=4jt z%N30W@B2Q5$$2gj9MRAtP$IrQX`Y|7Uh5%}f$A&<+Sg=|zIh}UIcw~G3 zj%DLnG%a5~dc=Mwat|?$Y`6F9?>3TP6=7(#p~W~$KO7jQo@_G9^$Lr${epGcIS_v- zlSTWbQPW%*pE#m|NtfM%#bUuUM27x|rO+)pTq%rd7QMaO@%Zs`e)1Q8$(KL+8bSaB z)O~+{&;9L&M_1Q8y1c~d%o%iamCv1-x-mhuUo?mmbR6}tNSS}FoHuc`RIpZB)Oo6aNJ%f{AXB_vktY)q zWMRt{9SzERQtS+8Q&Di*(Gu3C4?%qCQlx1c3{E;Fn(zf(Z}RgZdN_;`*SJ|}zS;`S zI65TB@m>y80rDDRo-irXES6&3a(64q&6Ej7b!O~?u7eS$gp?);TAIv9B_veMEN2{z zM|I7_#-(;Y3KBpvhB1ndVkw0_Cq$Fhu;`YIQIy3GhaRR8V*@#5LTDI{y>vFbAr6u# z7H4P{E!)G1?RHDoEy=ksj(ZH%OxBVkN{LSNr;~Jmykp;=@WHaZ+wjq+pD>J>ahTZb z4lGuyd9-r3*)jGt~<9R|UxrsEOYTW+>HV$3X>mabbeO^$;ZQM{oq`v36@o3?vl=K0X4xghS_S!J0}cqTe!NsX20KaJRW)d`W^Q9 zQ~U*7UBTyHe97bMC;YzJx|MRqX@{12%l7-db{a+J3?~za-~>BWr93MBJ6PHCi>Bq! zpXS7|ltR*Zth<&{GUGVVwM)9D zlP;UHJi2-;)^b8C7u;9YZn}>8OG&gUYMgWAVs(k7@Z`x8e6W&`blno`0)3kBA>e2j zQl>GEAr*oN6zka?j||DNT0NoIK(P(0%S(Rn#gF8@r-b!hR9c&kZh67Q#TDJ+0%N4Z zba`<_+qR5pBAbb6I!QK|Bh%OuV`Ll$QXY8w>N|e>n_qE%bI*7}_Z7c4EQN>1GXho5=6poGO?(U9pN<4r5g5|{;XA3|0{1e{2 zdd>cB!=A!tpMK8IfBql%=(A7drYZ3I?b{oMVc_E8LO`L$&uo^G#9Coi-K||BU}gy_ zmEWQpPFKXNH2wgqVCy&#qzW-LP*ra%q|;LrLsUdHJUwjZ=Ok>kl5j?_RI-3Q*(9>6 z=9{8+IyudoT*MzN);R$MW&s!$3dVVS(?Sw|N8>!9ZHePZF&5`NV;mXcBp`MJq(s}c zWTVm$DH5Doq}C1>^W_rr*&;#)GaFJxIK6SRT6L}LQcjdqv1w=Jc8j>Q*Lz`%jKZW6 z%5(K)b5!Bin!J|zFi0tZh1PpwN~9P?fG>;bxc5O5I>8LAx&@`2@J);JjU;Bl>1UCW zGE-=SsK^J`Fiur<+u=gMI7l|Lx?JI{r@!AZH7%yx3rO7s#&M*S!f@(mzcsj$ zDcVu7R)MMWNCPm2eH5%(Njs!nELv|^*zAwkvYCThiV@=-O%rfy#~=RX8)7nS4+rQ6 z`rCUcZYt0u%ShO@Q96Q?h_7M-EY@V8Rh-!{3=Dn5$AlXuhQo=t-BXOky9Vbxn1Bln zCKx)ePyie&C!Nofq2;^=bIvrr6&7g{fyu6Iao)?p;}tiD+E+zM7#^A!*KlDm^C-Cq zfy3cI+Xg=S{0IE)fBcU;d+~xyVN4?`3CaMsV)>LFGQlpUv^JKM?}R-D{}brg%}$60H&8WK>qHBtc9wI;DiI_4F_ zl$7k`%=zb1O4{L+JuQ1Pk*0~O^#z;Tdp>;ejFJn(VDK$`_|YeP{=+Z%=YRS~c83k? zwcsUPXlc3yV@ga@;$pdGd)U)1IKx z><1Q$71I<6_MG4uz*}2~fBM|a|6hw(tXyBg&x*azP@q{X=)90P#+cdnky1R?2d0wg z+6#fSq{KKxVkq3-Y>AT;Kp4^ZvQ}h!rfDD)vF-B4Sh{Y-=5Pep&@R^WL*kewCq5YQmi(r^05pqwjj|kB6qs;hg%5>AlRP z@oXqTHiPIL``sm_DAfOu&V&%y@3x#yM@5ijOO9uT!E;w4UFZ4qlaKl3FMp{*YYP2w zdw0w0*RR>_c5F5q^=A}C2dEVUJlbFtqAsEY%Zfx*1fvFw4-22VDSbmb{&gP38m(IY zxjusE=zisQ6@F5j~#>q-mrIgXXj(D|Pd9LvK^1TIC#0N9Fo?OqxL} zS^=tSMOA5cw9AAS6AC3*K_aFDhPGdw5LO7D9!z#XwV-89Qrms5O+`W_&(;Ymv8qSC zt$gEf)k>&dqMCI2PEm|3S&g1e#XH#qnYYR`%_;yZ;z{*BmdD(VN~on2$g#C)M1(kv zoTf||dM(gH;2m>;i|i2R>9-sDzQ-eay^~tITwh-Une#L= z>~}nS^@@bx`%X=8leX%HZo_VOK|gGfK2UJ@UdOP#>ri}Fz0r1?o@_$0x-UH9JuY;r zN!Imv@71VWba`u=?Fu1^=&xjiosGfYR^?MX~p_o|LOUyB;>tnD_Yk>rYe)Lv#LI#mZ!b z3?IbA_FnLcF;{e_J-0N{`x^0Td@ZcJ(vH9JEUgPrmiN^}J#(Q731^D&cQyH{T3xdK ze7Usvu*gv?$cnRet=MO*@2}}N)z4n^uIc2jCMWrWPDX7_*6Un58EeFAeSe(2UgdaB zF|p|fT!Cp++pEoXi--zs-hOk#cGJU?=SYU_7JmHsPx;}GKjW|e>OXKkPjrS<#Tc35 zY%N?z?|Y2_*+EITB6yR2iD(Qg=7n3)rrI@W_pVfV)b%fHKuN=O`B&ERhikK5r))G8 zXD!a-IjY{4INrQ|%hTsCa0$9DP$by8b8I(TZg1~#E->3rNh!wp7NL;Ts~C9q_B|nH zo$3nR9ti_?_h({u48t|2aYD9RMz>+Vd&(z2`Z3R5zJQ>WUf=hekM|rNZn*vC4d2|n z<<09a`R1E%IFBP)9NXOm-`w7FfB!(vSR$q7$<8@)oOt&11y7zl;dDCla6Hp*Ixa6S z88$sX{Pbh4wtK$#$U->VJFB9MN7FWfZNv(FTE3l&ZJHW9S^#;xamy;OR1K_(o|X3B zw;#&4Dl}12XV2+0k*d!ZOKyqP`gzoz`VY4m6k4tu+7K*MN+C|_65yO3P^Z(8F>0&D zJGC6Btw~pO62@6D7P~5rUuNqRPIpT+&-IHhh@vr}scW=HjPK*+dowWmNOT1(?R4q0F>d<5mSLiy=w)brM zj@?EjQesjYpTkkxjPPY`AfX z+W(eBN$;KBdyn$>f+1be(8S7XYzO74HC77W+8g!xYy5F;rHfao3R&GDT%!bF2kvs= z)&}Nw^cqs4ZMM0T7MqqUZpo6NI#?m=YEjen;N$mdKu?R0S(Zda+f)!S#Ld7{?*=2l zXVbY-;c3Awd;dEU*E;B=uc?XCn(|QxmpsK1%3}AG_V17BBvuGY<)2ox&nAxx>f8`j zA-(H5uCA^)98MhWkL)&kdcUFDz-K@CoF9GmIlue6zhwwQ=YU}6sQ>L027uC|RGqC8;nsam;y>@HS=hkYiBHgCVSX#=yh_|Ylc->vOO};m9qZB33 z5Bj|Qup#D5o@R2K+3xosbvQr>p~E}RlPAx3{ra_{yr$1HnV7aWLF_IBPRAo5JI}-U zsBOKHi8+7-uC8D3s~>;Plb6rg>@P^-!8zWW2FB~xZ@Ig>;qLAox8J;DJRON?;&6Y% z_;9D6b?6bZ$x-rGhYt!z>&2S!ePBG@@OFM+8YANzaSx8$_pk9@c=P*z-tTc9`nd-mNY?Ip`t&Kgey|M?tevJr_^T&Z z91aJ(_w2SCVlFTzVwxF?2Hqch|NH#rH@{)`^l3vnfM$68{P}Zj4;8IGe30g+wBE0^ z6{Y%NbphDFwT!!>R|{0~sA{RLtnUb1>&GKxhs5(+mw$(r+<7cEA72#u(FVyql#&gOhc=*wx_d1 z%oQP8;Hl%x?Yi56Z7p>p5?53)w@vIs!+=(N3j>Q%t4td`7nMzjQN60fT9E2-Sm=FF zKSw**VocT|)(fSkwu)kUiW1*zt6~K+lvpTUHQ`E0OmpJy{=}<~f56M{eL|d1)VAex zo{3SdCAzL7h_d=(?dP*H`|W_hO^fs;9TvY?^wv_xk?ZYdF)|3);@_ zx{m5OH+W5=4$~RuJ$Skve`p4fYLjfviedd>ph=Q z?`+$K`gO6yXN9^thZ=ty=qsYnyFQdl(bpGyu4$_69Zjx`Z~W-tf+bk$5l%uo@Kyds zc~U?soX&?OaX}UiQvF2LF`*vr&fBM4#2$+shIRkxAxJCiY64p&S2`AsO#8)SRCfIk zOFkUB_Fb`Lz*5lo0s5s1aitX>HOW}I0T#y!%5}BDl7gbyDoEO1UBB-;3Q`>=v3ti# zazZQ_&;YZL^+j6iv?6A;y;pxuyknhQHih?6C!=kBR1Ox>{8J0-=UUX^+b@i_hqgQG z$7A(#%b%UK2v-SK&IDfv4GJyppMXgIt^uZBCI6gcuc;Vrjui18nQfbpKuISAlZ-n`F zkDEs>FP{?ULf;3*IMVe!52qt8h>~AjVH~4Enm}<%4jhJ_u;1wsHb=(O1SPTAZAm4X z=8$Kz+ky7gAWzP zWHHfR-&kXU8g8{R@U$J$vhEtFMGsy>t!nGAh)qyfKJr~-!RvsuUZApCuvMA7R-kLR zc8N@X0L99cFj*Israz8s_76%p%}K}phoH&Tc|4nWwO)fFl}DxJd#yG~F(E=KaTD|Q z(g_uu5kqTLzDlOB_Fg5-dglr9JWW*6r7^xhv|XA7rt^dkOEFN;wNQ!>Q=#|D=jksl z>HDC;Kk7aLo50Ddv1JkCkElAf_d*w(CM<0QI+6rRo3bo65o_EI`>aJ^j%rIH=AV{} za*#@aG*86iSx3PwIotHQPBIRc6Q{#bMNzwsuJa8B#3PHq!k*jdSDsv&!eEWlsrc}Z@hO`Q&ec!sctA$d|dHD<mgQWRoEK?qqYFl-6OGI#t(-UAOS5YRj>qG{9Ogwjw;`gZt>$@0q2LPgzyS zOODL*tgaQo6I_p!#BO)N={PdYGvk!#JI`i-&wly^Klt0f<;&my7xJvq3tkGTM5Z+9 z#9xdSE^T^Vq`mi6z@!AOC^yRPRB?qgojD$lT<-Vwoo4B_k_)L0CX~mglK`&hwE2?k z7fVEo70yan?_7qc10-XdVLtI>KX4q+gnUL)6`=CuI57+x-oAZ{cZHHB<&9;PkkGxU zpKKgQdW7JI4IjOFM%V9fe&BFA^H2ZzA5>jhJg4zUl%fPwS2!FV5YZ{6`8;uXd5QCZ z@pM!p+gzBPj?vEZ$k6vBS8NP5lFQ6Io;ZwW%XBxmA`JZ&*E@>&0>$Y}PBY}hH}BtZ zx_@B1zvk()muxQflmv6h47(klKGoMe$G?B)c%O70w@vD#c=zAaQb~T61ufP79d7gRx^i|t< zeF!?8K{0MYt>z5IMJpjMYPwksEoy5>|Lj_iSu^;hMO7=x?}FX`&<6glzgH;!TNPn@ zFUI|7Utf{IYXzUwPt1Eq%EBC@wr0`RQzaPcGEau0XiyFzFj+8^Y?Y!_w>7tGQ#ds+ zdk50&V>L*iN#0x%QjMTXqDZ#n#wz)uiCAV4zjscjs5-CqK}C@qSImnosfjn#Lt^2^Xi=A1Krcqz)%#$dJ7pg34jkl& z^Lo9j4N|e`uUrLq3yAMDvFO4=bd!wagv*Ig1Rq>Wup-)at%oTkH@=Zh(0HA8ONq_U zvl+IiBZfgZMNOy0YeFRohs_I#hAUHKEi=BW+Q8KuOKEASseLKa9Fc zjod7CUBy`?1Dp`%9Mc0JhmnI@9 zRrIow%PUG{3%BSYQ)&$&-%c{xI{zR+s$Wz4Gtap~d-l0qZApFLe(-HBlyNoJ*v5a z6t*q|MbN7CnL+B`x_-_Q0*wcnRO;Y@YETA~8fZTyZV5qITcRap6+#wgx#i;|cKLn% z86V$6=Ugk`v(Z`lzPI54oi@I{zUKAoFB!*?hldAtyKADr4}biMkH7x|x?#gc=2~U4L|1x8CcVvub~e@a);M#@mXf^C;eIt8%6TF0L;bzV6z9fJ5xh6=l?p!S&@O z;r=wz?-O6&ea+3y4d-d(_U4`(GsAYnun8Q;Gcgr>r!x8?Lf>!LZ+0*}a5$Z~{pJpF zj!oa2k!`kig=VBBfOweGL`)M-Jbegwyk+B=d5V;%@Zz@HBEyEx!@-PW&(p}iy#0!c z`3WC={5_sNd&X%RdGqFVYmZ#*_w4t3#*=Ch`98E!W8Zl^j%k`1=MmpI4u?DTS38^w z%Hzlde8hFSc;lou^~H-9eDTE>cD89d?CqP^ynFYC{eI7Gw=*SYwa1ZMc~uLF(-wKD zj0;`hRhUozZ8=P9B~%kE-5FN3St8OZIE$8bT)H+o)T3(&3`-JaNeH>M-!#yA%;^v1 zFf2-c>j2iEZFJPv6%CqmN~9ch)1zeFIVtZdk<{kKscNq1NQ+gaT5Yxx2O*{UKGbgt zk;ZM&5NtkwS=$JdqIx~Xizr@s5qd#1xuU4PRmmEdI_*Mg)@b0%Am(rqOZ};vDg! zexPwaw|1p-8t4In@0EY&9Ei%E#5{w~txy`ep1#}CJE0^s;VqJJKIr|+QRN7V9!$-! zI%{bVY`X6}jYQ*lbQpy)?yDA4nnBz$U5=(ovltRjhRAA`(hUk`}?IbS> z=R4zE1@9={sr5|M&|6J>W1K*8e}&tI1d6 z7D+J_9b4q&l_%!f6Ref4i2{OpI< z|HF1=Fv$c&7zS!JjIpKw_wsF$vPh@F;gFzg_l=(fi*FzpQ}(2yle%katGHM8Loca zo+A~j8P@7u&_I-fxT;~Z@e%+ukyyn0HqgEok7)^hd=6oh`W=i=%aVIC*` z!~gStE3EItv{yPL2y;B+W{)cg;zTL|F|VNUek2|r*zGQmlG$xK_M0u<2kvfe$r-kr z-bRLJrcssEedpN>JFVK{tl8@v8IvwSSJc}u=ZvICj2bA!2`+RT&XKoo-w-yQVZUV< zHaO?mZZ;eq&h5|ubmC_vw|}^MpcGq3PFq&mu1o3-CxMhET#4iemlu0(A0BxA^eKP- z=YP&${^egn@W9OZc;N5<{_nYcnE2?U@3l#<;5;cQxjVSPY=@AOWm73}dubbFgM+0Qt^-#j9sUYM2WP<1&qiLwOKu0d;s8uFHkDfc@g zQ95fR)ZpSB^E_#iTdSw638!xEK;3_8cAPCyRH4#}G`4f8CaIE}Ic{(ruBffcJkJmu z-gKi7ot8`#f@lk8DiI{;K{`jM9&z8gXS#+{o|)rB7tER=#Wso^ylNqB`VFHbLJ;OM z>V2^GjiLiOSW+b_gkpk-2Ypz#2YU zIB6!vY`iH)s;wleyrqaHjoy=`5KCOnebED4$NWtqz(AOk)Lj7|bXw0TOHR8G)?N~! z%!wEa-NvKs>r9$vvWLF!3^~+fXy`hecjR%#NnvL;Mo8x2FyXz!1%a$IhT6`q!jiQ* zmu$kerrRcHl^$n9Y(>p_Q%c&3u>?hTbZXH+e-l9OnTS@%Ap~NYnn7ipE=6khtaN zD@U(nX>F#Om{mH3CboWMpQAX5_@DxnRZz2{Du!^>=fP=gNtPVd3*uG?OyydM)BEPF zi{Ms8mtGkb>c%RuDRv##pHGts?OT9?0^UK@$@8q7DD1V1Q!@LSORAhKZ?YRkt8ikf z<yiR z>@MhtO)22LV~R7yJ7x+6M|P^k6z91SpUDuq&h)5s*`20QlM1ha87Vs2oeQpWjPse> zuipZNi`^A3pFbxZkDTuA2t&`^;enhobIiC-$-OA3hM>$;aSE+(hEBO0UI~6((8DMQ z#M204=JOwa#{c*~{5wAVqc4=T>V>y&Uh})({U<~^e(=c;={s$8Wc2-3)%KdDyNXf( z6h()Mh(4cjDk{fDoWuLjrV)KmLb4WFVyfEueO14TWR1pRe5aIXVWVicPo;Kla_tmQ z5T>ZfQp$;xqA4h6ZP8jHRkA9ROHs(&*>s|>qNWsLQYHVSeLzYoq;WL8Ez>W`MNy3y zHIYJz-{cAvN7bfr1##XIOs`s7xwe`W@p3NcFhUK%swaSmwy#v3Jky0hDN$R+q9U82 zQ=}%X{2{bfS*nWzWMqM=i>u$p4jd$7^g^zdLY$xSPw9bPs;&~Axv!w&N)g{ zAw>$N3#HXYF{Gf>0!b?n8pp_rvz#J_E4o9REl{d*sBG-f)Eo@zAQ=Xn$=V+TUCf#?3-43xa^txBrodR@mF<7$k|kdyk6ir~B!Pjv_;h;=?h+iWvMwc4`sd5WQK z*j@sS9c}uqD0L$OC8($9x)b2Va=P6G2dAr2J|?>l_oGYl7WU9aAqcD*~_;jO6B)}t{G#X3IX znPbG&Q3Q)8NHMj1A*al+>G54h_QE(tW-HvY0S*tRBM-+j7grYyn+?HxUjNJQ`Reso z9LE#*z}59rLbs)e&~G*jUC&1^Ul1z9m@# zW+l6lBa}$j4|LKo8R@ckXE!=Q)?|j1Nhxz4=cb$;g6Cqlg_N1ca}&r^m|wXQmzy1@ z5$i>F)dcvVPB(I02k zl^~Lvey9{_WXKQu<)suRYu!-11$GrR^EMq;sH5<;lA^UWYL?w%IL;QPYc?uk)i|z> zrLuh8K`BnhaivZ$>V}x(M4c*3EbqHyBQ%Pql$mOegH*em1STawHVmMor62(#x+)I_ zG}%-ntr9~8Y|c-N2UChxFH%(CQnI!tl~ZF+?DgWrG^u1jQF5YkU6enRvFXoTC_b5I zqHEXK)!~h-31E?gr^8EZ)vGHYp;Mtew@gkR4hJr-o+G7_mP^yJ$%!^eqm{D?*$FEc z9HOU1TGerzSkv)UR{2$yXJrbwzn5xn#X(PCq+1#_>o=5h3xr-~J7M|GU5C>C>nD z$*+G+M8DUCfn*-5_0Y?!y|v!5rT$k6hp%rL=fuUu1-so2iX-LJ5}juHEUrC?M_PLT z4ngt0DOsy;o=^Ptx4-3gzxy2*7Z>C?^Z6G)C4>)=5~n;ZuL)` z*Q)K;^`oxYVw?dly85zc?9xQUwS6Tvom-oeie%X!7OG$_BF%zk&G*SDlINXkD7JY0 zKDFp7k0ySr3{HFhtKWeoiG;>g^F@=s!sGZ~(Wej31brT(XQ&yk62>vGH)mp;>3pCj z{ThGk^{H*LWV<%kE2_)TY0Rm7#SnT8Bd@>u z&+6Q8n($rL0!?%%Nj1F`E>*-)g>@y z?qn6UI5vGCxPg*|ah{1;H8`qlf7c18@yy|P&-KM#RbJ<)6|V0HKCtaJoF2~HryG9% z&;Ny=ef~pUy?Dv(;hs`-(oip)j;i;eqwhS^Je&G{m*W{;i2FlV3Y#V?1 z<*fzc?54NLxAMW}T?**-v)Kr`$(X|GfZlmH=DDU$BbW4#T2YPL?&)ZXNvE%Bx7AU8Bn1 zu0;AAM}>eb$qC+(tg_Co9zcpWBCd^j*RN%2CL!vB=nC2E^Eunx;=Hzz@CHAt%Cfki zZ6)oO;JxQ;3fRiQs*{a6wWd(E-TNTz(~3dbOBB%xj1tKyFXrOr@s%8uS-tOm@{^zN z{KYfw?(VpMIM8<;-fQCLeD&^nRA?@ToSxnkv^87TY4v%`qW@&5hSeDn4V7gu{deEW`qkc*C0SEX;LNR|e#YVV=UTun7&oLkGydrvnE2u`_p zPBdAq6H28l;;Bhn_0z1a%uPRVI-dCL-~Byr-h9Qd+3?ldH~3-0?&6Zp_sv+mIvh|6 z*+%Xg|EK8MsmRouckel$CslP0{i>~Ig+tX*a@NMOA_SDvv)gR}xcTOe`o&}z$x`Lm*rUcu`z#t!bj_tw+VG7Q9D0aWfllXy;vXkH zIt^Hn{`#@yksejOJyK&|HVF)BJT{)->VDUJsx)-zG51NN7Mq$76v4V0T8wDhv2wKP z2VJhwG?2suL zqXig0)TwMtRsC1j3t+CTzTEEbhsl^CscwJh{4LJ9L~TPnvXe+BwHO&%|kN*|>Q13>rrr z&r~v~X6y5Lgjri`eYfHB&p+qS|Kh*3%wHk*hldC5?(PYpfYv?7@sqYl5|&)TyfM3drap{)0S=dQ6sDsA|nfpm$E8MC-nr3DK)ewmfY@}2GClGV6E6{x~#z^m8>lrLuQl~Sc8Zj&{@FcCGphv zo0gzjH2G1!g-&TzEtvN2rQn^S0Mhx!O$qeYA`pE(BM<8v$Q0+=;6W9z(`3$&oO*vP zph`9^E=%At*^oCq$i3^#ip1eU4^c;=LkPH8)zfn|Wkrz(DVnglDw0$WWY7fA1_WGD zB)NKBRx{|{l*G52fgk_qhrImg1^@I<|E%1Iloqte4urZi*4H1=B)23M#LN;Fa*eRT^$;YHgiaVi{7XNtflpM1)*7cbcCw%j}%%_1g2&dT|+wJer2E83Y2 zF*4+%LT+{qYf)25BDkRMXXTqlDrQHL$OTTP$i?N3m=kvo_qY&v_3`()e)gQrc8`j3 zg?8XH0mnikL03(+dI5DxO8@%&0yt+rlgF6&z{l*L3y>jYOWS~xy`@q(`27elTpa#rJFOR!e4#W|;Z zTKo5Dn%M6JkwD1{0#-`F+hpXjhZU{R#L7fY8zQa#i#66MGQV1wt0b+Gr0bNJ&c0R- zrdnX7c6hTSRmI9n(LXEsU1<$jDk4Hd<-J*U)viEYd-ZyYxYgcS6VI1l_2=vPuuNLo zv()dg0(_0`t$%&jV{Ncp@6+-0z%)%(J&Z;Xlr--5>jyTQSee;%o z_)n3a{?TV3k*lj6_xA@L&i6P8c$|)dJBRo{Dp6I5a%Mh{^n=PZ?=~Bxz<4;4#>A5+ zPx$Zt?Z4&I&pv}ZL(rb~-Q69x_jl~~m-PKcFS@aw8^=qGG+iq{SvF9%!?wZA&^C7M z=hup<2A*8S^Xe#Qsnw@$*wiY7xTp7GTE2CSRzz(;n&jpkvVCbpI-uE3vQa` z=yPO2vRJ?r0}rJAyS^1?!PUl#T{5A?Y=m1=JTHc@IcJk;HW_H%e~9VQ6p*YsOinML zUelsbc${YCqh&*^W}7~;K(C3KwkEUGB+(AMQn?VO{#ao&NGK1a-p^!7uUMN! zHE2A!sM&Mq)#FM`+a_m)#0w~_Zr4@CQXMrtMLZS%$d>dtaV9uf&!9qe3()oMI8P%t zxA)v09++}w=(iLfm}8aP%Yp?3*?uV zmu(s6I%mofPfd?Kk}V7eC|6-+#q+yXEDx=Z02fJ19#_ z>=qOZ(<;p9{IoQLu{h{1wfF>xm{hC zx`*o*j3SVhrs`6(xL~npfx+~w)ggeARX0xCNWLKz-Z%!XUdLRMspXaHByOQFbRBc4 zh`u6NS`64)ajv!dw5ZUQ^%_<3mLOGya#uAA(d!i4QZx%yRCPJzeIwc{k}1NYYc7U# zVM#cT{`7c+LEM7$f2-AM9TQC!O~23XS*5nLD$n!{yFNfkZ2FGpPoHpechCL(Et^eG z*!6@CKKkfme)dPd;D3Mmzw!F3e*w|_!H2L)?Cojm8G`Yl+~fCITeDTbwQAa_+)uKY zPz#hnYQD$K}-?N8#%7 zW48M(r}4-so>kp^w&x<(Kx~B1xg7AOy?2F!jFFNDSz=7e*v3*RRRe&H#d|l zJbn6nsnk}aL||$8)ymgI&yvVu2eX1W+s0{dZ{-$&>jKVnMVgtX^LA)_dx1V$tPM58 zNZQs9Uu~qeS#48gXg`;V2B~^*w&yeSBenOxYT?y3VHVp+y0Nu-MuUkHLyjJgY1d#Q zbu3(3bkqibacG=qCGLw|r9w-9Orp$Mg+&RftE#$+qLvboq&h^38d*D#LN>B>mfYT> zNYMls&}l8m;_V(RdOj**xS#-Op7BO7o~D_8qc$;3joI2)*^6BoMOakfi zmckIgI&CUW1G&lzXmT}dw21lVfBt8>z9)+ix`8Rqkc)n;at2EQ64<1hvNo*Bu1Kem z#x?)TMm(k6y-^=prV!2 zREmy~izTtaM(6tw6o<7nAoX5nSokKjps}O^2z}3a9@%vrS5KevBN66F?SXdtONQOf z)~&Qrc~J`liWQ`59lP2xs!3LG4)0ZJqnbEZep5!;I;qJ?{c}SQa%o7>t5>hsZT5}( z)b_e@pTrgFWR(=J)2>-%_=Tvg=6>%L!4iaU#m^}SJwNr61R-XA`q86?;9 z$9q*D-)x5FUs~JsA6}pJT6^4KsYU;C{rj%t#q;MpJUnoGc;I|_$#&=|JzQRSe(_)Z znm_*eulVY#H=K?m$HSTZlM4eIq$ODT(bA*WceNlzkhb3q$(N=5CL%4tstzQ@3R~xl ze+RlZS)CiMo~4zqRg`v=6A#BTS65f`{f6x(bM!N~iI^P`&ycM{4Q8AZH@EjpaVF&ADb5jwomQD~VhEnT4-6MOTnJoTT=4xLe!^}) z@Xg&f9M1=)n7DfKgkau#B^4fS?>L`MbWWY&rPFB-4cFU^E~t{!f6NCB!1IJiK&C?I0>Av_ulV`Te{SW1-mI_Rz2oNnEt`#IwtD0B z5TEDS&>n3psl#`rW9sjoB>?NzwmPI%fHknKg2Z{$mWp~UE?K&BjvR9f#p&juB}3nB~=YBX~UpCz)5-Hm56%D#e0|Xl! z0CBlpgJ`Iy9t@?e&o>B7zZy{fDC9XYCoQwSYX)M-gg`-&By z0$Gf-sxgLKO!A=9c62+i9VHqXkTW?;yYEW=M%$lEbeoPCBR4lU>^B?srXF4QcS?yW zQd{gkI77<>wf(3(uhLo}ip(ftZ1=`1h9pJBd6k+`_s(ipu#$Evj9M#_I>2EMd)}J-Ix9>>Dncaf{qeysadp~H_n0`LNTrj6 z8rs^Otnox&wic0YiDT>QVtWnebxPCKHg8ShYms5sB&WwkxUJtBwwx#$C|N~Acl!+w zhm(2rCdTOLHt^|ZpYx}G{%`oJzxpe_e*ccs>BPm;%T>beTd`QrDFKLC1$doKO~*8& zgK}m9Z)aWz%E2m0;d&8u$*mrTpy$r|vpi1fip6heXn4}I?Qj}7KAbt;KX7w%r{8N{ zt7Cx_wRqn2Tf_&ZSvC5^2Xcg%J|B-UQFx{h2=N0r2elDZlxXUvu%|xo+2#aNhIw?OV?0 zGoL(rsm8RTEexIXnHxIP`tKRzsyq%7YhFYB`}+5~1*Q~v^X3gxoO${3C0CbE5fSxx z`mSot7FR{1YOUa?$cjFiKwGMd&$Y@RTYyWs5PYYfDT7$>g*p&imbl>x5?Nl;xH0Pr zb*U(`O@kQmJ=dy5E00nvF_VQXU(u}k`YK*+n$R#6D+l4x*RRf8JeK8J_plu;QCnQCdDO|5fhXyI-O=+M`Epb+a zw6ui8`^8(+0V26}Xi@SsB$IfkRk_}87EiTOO?<`3w}H+FVor)YxeUcIj-&b)_8lpz zoI%c2Oft78c6HG?wU#MaCsM_H2mwtTv-0U`+jrR?h9HR|cjv>AP2WNB9FHfQ6Smte z=ku9u2u6%|EddD<@Ig^VN=@RHU0V@1hx&A;7}aMDD8?_T)p%GX0I4PI%U%v4Fpi_X zpJ^n=Vu^q!!`qj@?hm$^x(=F+f6(_I#;_;N=Iz|iab;|l{BF&*d+45zHCEq$1 z9zVJenC;xInp*1wd3nDdrl|J%MHWP8^*Z%BspXg6kG}7D`SK-)!#@(oiSzl)rr(nt zTtD-C@$+Bs>f`Tocf2R&>RhoxXp15}wP)*!DAgero8rur9Ld%NBV|h{tEEvk@oB6; zOeQb0JZcB#@n`(*&kl}hjGWISWzwm{O+TodiwLLbM9Q=J5hk62e)HxH4-ZE`6Yn}j zSS2^6X{7g_LST*~q4R?4f{`5u{NTyC5c-}X9sTx-+vCXnzr112Gl+1W&y-l$Yyzhv zgkF`DoeZQ>IGv*rIW^Plr6Wd@HYgt7^^9Y}ZwF2Z2!Ywi)Wr$RSw*}u?5>}4f1DZ1 z8R<5h?oNc>)QaoDTHx8U7u?+*xgG{W=y-Cm4 z<8YFhVj^Z3=V+tJb`VtvH+Wps!`Gt-V9tqo9tm|?DXR;u6AgaV2QTJiLG^J`hy~tU z1l7W-hoK(Gu~fuU54p~DOV#EgX__BT?qo5G5S<{&DS;QdLDyyy5a*bS9@*Z4U9`k1 z85herX?(TdyfyNQO$4fyOXrsUzb0+=K59G3Rq|>gPBZ)6B{3y7Lx(Gw`@7qQ$HzD$ z!IM%}1lT4HwQ4io9IkOfVot;eyH1@7R1c{z&m-Ok`XQ*1wp05Hin9U=bx+8O++{;G zyzM1t)p$a50?1qtM5Mv$D&L?12H%^ZvF*lOYIa4*g(*#{*<=m}&IMA|b>f1zF>`GT zcS8>d=W(Ps^;(pQRIDoD?6vimO#XtB$$2K2z^Ary7J<%sXryGL;Y}yYK}j|&qVZ?w zLX)T&hJifS@eI2*Chi)iq*cDtO1h#ht*|P3C^->Tqc=8PVQrnIK|WQ)wyt4I>T3(E z-wbU^vbO2Px&TBq*{z(xIuTci)hRtjQEeK9;G9i&cEpNumO`j517b+8U)r7+LQv2% za@cNon2rp)E#q|N;^IQvO5WCP$;7O!u97n)E=OPGUTK1F$RMsIYnp6{4yd%E&Lk`> zf$eC06w80+GBvWmrDy5=oBx+0zCR-rV+4n7NK}`@di(-ET!NgEYoq%^{R_=^X z3pAfd<)xMdva%98+jC2OqUd-Iz z-x0hpk0Vkbl}I;uQl6N`1G|e$QXW;iP=pX;Wazi5irx1rz8E9odtwppjw3NA(yYis z*D2$^bcJb5i0e5|iQ|0IYSYN)eHZX9(0R`^7F^gebOX~gA#T7);(U&HCo1IDc~!)o zBc1Q@eaCjc<#44Ue4hRES`;5t3!bQ;-s*lq{LVVn>lCUVt>J({OO;mHBJpm4(@Jl7|&;}FR$2bHkv8RN{MXTih8}h>+nIX zPo{Y$Q%w1|9*&9PRQqO1G*jdd0(qXPoFQ+Cxwa4VTKP`!(&>GOnIxHPO6t|46LHD` z!}e0vq#&iUl8i%VTok{m>I)%sDzd1%11YI-CX~Na51e^90E|Gd2hd~1@Qi7K7?&v( zMUlLrWU02?O!8rxrZ(d3ybcK@vRYk~h!6}tsjZ9HkQ4pa+t z%wz?CwpIZvbn5dIL+iyL`Zc$-*z;9Gd3cQDR4~PT@HyM(6&91_>c?rHe~z;v=dvW# z4Z+gYOBI=J_Xvt9jS9hdUiX|4ex z4}gofpogy)G{v_IEt2$eAetb#3`t0NrU+bIUGnSS{KmAe)JWC&pgga6=Hu^~FyB1e z!EUfOt7N7vZoAR8Sn~%#uWlArlV?ld)P=U+?-jL(ss)D7G-H;gAGT-;kDr}Kn+29u zguOw9!E>#Coh3b0lST=}jbGD(y#Bq443ev8VpgjlDa1Gt(`X3YV$zBIKLgIz0$CPP z=SuuEreu>y(qtA?*1~J{RDlxijCt?+By zC_@FSH42iMXXQ{SY2WFrmJx=XweMmqinxjrigTJd+@I(MH3jXrJN4~?MZO_;yEmN* zTox506kB7}x+6!kdqU6wkWP^})0iPAa-J9TO9GYmR}okhzO#e3K36HkIkiNxPW$+J zh}fmA2SZ7VeUMunfZmB3xKf=ObWLS}D5@~OUZ3^AsvD^o>Xfi5xU*_EX`vD4k>CX} z2^We^+)imG#nRTN3%;$d4A#2R!(~lGE~T`jr|)~NudnI4j{SDacDrq8*E-qQZnq6B zS|&qv4XbU2wmasW$g}!7)jJ1Aye;9f zuh&9Fr>k_(K}6UL14G}pH^xLOix`+OE_>e{Lui8kdd8b5;bW>#(2fqK8q(Ll5V;M~GB zT3V4SVCsWMJry3IVY2vKDr&tvk7t=CE?Fp8i&mjAO{hg%bGzM!_wV2H@bI9LO}haG zxVnNr{j)#gr(gVxfB%2|AB?9nL%&zy+foNEdeR)NE1k6f?D`E|7dWLviiK_0b2=O;NhKI4!r^e> z=BqoVcxJonn8qW$c!Qdwg>+Ht1vAI(`hj7);c&Reb$j|0IGvB|w>$i58UsK|R{lbn zR8qnhGX+-7k3ahPAM>j}`IT)*n^2f%Zf|cHhJoG1o+^e|H~IRpj0G!t$J{>rp&-8uI)zc^R7kj2@;&eXgd+P!*&!hw;t7V6yXrPXzAwm?$ zcDQ(1ESf4GOHj##Bn3|-i6eefiy+E<|JZqZNheq zK9y3M4`6N8^qWC#F|v+-Z@ZrH!vq9Pu1ZnOyAT3#QqGAEmMpL3z31-kj(MK7xU*QJ z*D){*+tvOntrb@vaXK&WR~Ce|wu>y4*SH{}2~On;ty=DnQ4U$SJtiqoy$mHRoTz2$ zwa|sYFbt2lJ8hqeQVr7T`D=pYoN5{V|E#_1mn6q=<@qyrkBF>iHyR)ah@>b!h7d?m zBk9cl|8;kE&)JzXyPAh~X7r@^0J_oLRh5|$;qJB{%-kcYx|@Ww6Xz5PU6qv?4|jW9 zyLN3DQy(-QBwDZu3?X&|4zdqzZ>1~Px(_X8)`_WI+Lb?-Jr; zwES;n7m)d07EJ%jl*n2-w(&Xl=e57T(>O9r18JI^pJxG9lHdu7pS!<4b^^SBZ1;By zFm?Cb+RwM^Mr4P?wY~EA8GYz@r^2!Oo9Y2ta6c2nhwlmp=M>qM7hKl&@dQ*RZC$x&rEUT_WFj)s{?snc=_@x&d0)%GqWgn zWg*YT8(9}~#HabpshC>)@w9L_OvEIFVI=258WPpz_8XB?%fc`v?jK%r{rtkRgOpsG zNF2~m-<;68dFJy>jXPeEb~_hXZRV z+r7al-z{@&YqS5JN5Pf3rlvb0k2Ght%@`h$=!!$_ZBrE|fiDXXdiWeZ(+$z^uj%6QRxO zLzOWE?@FzVK^UFKHP+a?KzZUV``@H!bJ=-AtlDK$z&Lc5Qota3;(;u zb!)*-3eoSQYaRK|*V&qBI;!QR!rV(LV}GBzTWBKIad+s~Y&N23?Q{YW>z3Y^>YD#< zXiDQg_J)G`lxpA(eOG#HNbp+AJKcg!V7JL!v_z`?u6O`rToy~R4~GM5UYOlGB=yt) z03ZNKL_t(P#2C91Yhuc^BU#eRi`K+qc5XwYfWFhV5>G?9y4bFG3AGfrr_#qhMKwlX zaHrc*OKiWik7e+%{UmU-<)@lxErz^T0Nwf+jWvsmqGE%+8;ZYw-gZAsg~Q*AZJqCrCQ$G$w)Lb`=C7#I&iyepe3M`CvRklf!jL9H zR6hRrV}A3S-!RX!={`MNFC~-bFOc0$pw}b zWo6Fy93NgYMAL10cz9r57t0HDW?-xJ&M}5jb;lhtTb4m z7}+z^(3Z`hD4qca7xk>o5O0QE{n-V!Q9O^bx)8l7z)Gs>ow6#ygA5CPj8|;;G?&G? zF`JVNv1_h{A@J~UN3C#iePvEQuasH|(_o{fR9JL&r#jd@hOTSWGx`|Kq!b@ytA%-< z8C?^nmyeS3Ns3UG%n~!?NLQG~=aKqavC?9DeucFPsRi$004EQ#gZe$3BBg{nA}Dt8 z4AI7{5Q7g5wr3{6%Bv|21c@YsDMl-WQi#c#6_O<4I2eL1g^+yhxO0zvep;fHbflpw zF)$tu{eE0u9tcPeu&VE;rzlVK^Jqa^E0PNC_O32A%QQ9m^#djI=&ub*mewIJLkZqQ%1=g=X$Mv2&hH46yyY8|CszwM!m$}SKV zu{F@7DcJG7LPOFUM;C80d0d%Lb=e(%#{2XCL&yF#A`PMU-`QJIP#1evPmY|XW5%?9 zW(&-7&P>yUs`B>D8=H+;Ap=8%FTVJKFTVJKU;WeHb{?YuA-WIKm0=l}E=G>WBeiA@ z7ZbG@;k^`Pt*a>p#EttVv2m%T2Y)Fga0!Wq?Cs~qHlf){?IqFuAz|R|e&!z@e$AWf zE1q3l6A|9Nea-9FubGzi1?E4>cb9L?HvjYzg54NF(#Bz1Tnw7f;Lz*tGZpr5(|L_n0KnaQ_6A*oPctDp0 z>!h$n7E~D}axBFmJ!M{OXzFl%1vN8-$iu^l!}9~BE=<#i4uSd7=A|upMptWJPvc<3 zR-c8aC@Boa5s`qTKq)KB0*6aeW>47fP%C3vrcjVz-Cgx`;&gw{G+pwifBL8V=tn;S z0T~9+%KiO4Z{ED&_V$*;)ur8+7%kB84Xk*?-&U?~nn%K%w&HEEI>8t=gWA5#;7E^# z+m^5_*t+Ao!F@9Ct2&Cc@Am0|m9p`WdM4G#tlRr!wJyTqC{HCA4bYXuC2Vc)DJAAL zyT}^0WhGLvaV)4KB^ZaPAwhdX9>Pwl!83mVb)t7S{MZN#D~DBTDVtGKar8@lZlT{^ zRlxM0)OEe21V^=s3km`n*xgDqe4;+vdvjtS8);sI5C+8gMF@m8(`giq_J*QLQ{Q*gdVm*I%|~hGf?(jr$k_ zNI;4^X46{fqg7gIO+td^AP%YTLzTefD(YIr zk^}_itY7|zrxt~dF2)%emVk^70_ioqMl2UsgYbH;_Tsv|muclWP1kLP1#h84VeLPUxwdBY_V`Rot)IN6C9v(D zuGJ8XV|HA|=(Fr$Y<@94C3>IwtFst+|ZKad{*6b%^`ah<_dA@XOb zE+5qb&s+oZ>48`0GvACOx7Sw$Dz9I^;?0}a3>O2>pS>VbSsn_*s{_l!iGpzsYgDup zh7_1WB36^anU9ObE4c_&BZ5f`tml>WyxOp1!Stfm%>8T#MG)g0Xjxd6BdccU0gsTz z#1MjUHr5%fnK&44DTKtltlT^wS#$O5zA~i9l4r&-dDIuE=j_=CNbwqLtsKS!=XthK zY{3R~)@X3?ysngLa+hNpwc(`aK!dBj^;@mwJkPT^Tq587&Zqp_U;YIzKKtA)pe;g+ zvMbMSpIcy6inVK(j0}S<%OH=q1G)>K;5|!U8*Wk^{&u$2KGF%+;(eayExWMkxqb7f z*g|_>H%ZGr0aLkcO1Dy7E2~&phOIQHoq%htvbF9saza1`0WIWgnM{YwgV)20ZPC20 zRLwRBTLZOZKatH4v~!CBHG~ea`U{Oe)Ve@gvjUZheg3@6TpX^fAwnIaQV4`D&(R#4 zunqof<^;AtRm4Ozvw!w>e*sbtM0-ZuX2>;&UHqAfi((q7sq?E;)m4{=R!m^dCVNsa z#CJLzdgePHPh_o}i?#et)5I_(l)|!D$QwdJsg$))r4rQ);4oOAF^r0bkB>6nbzQqm zN05OO+<2nKP0W_Ln(GPP_Ta<6y-Z>nbg>)EnyZoGs}Pd(U}s%tcVg8~*3Hj88uKq$43v5bxp? z-AL>rg2u;9CqXtsd*dtimiZ@p8>(|NHwSNgw$0hJ*^I5(X5UE|M99_VibljW;Tn44 z!+ISh-7=O9`DtGEqUA%*|XvR2kt0mpg zWs8KuHX+0I;gSm~k)>4bU%upbzxy4ftf&^!5U6Y9ycXu;16NnV`JaB}v4sz@kC4wN zYA%#DQ)FQ|o%!l_zu_=O(*5zs_3d*`=auvM4V1z#47_>$+Dc8LMsBSNA;Do{OaodM z){+?x6B;JQWB~_x_02j!8mwc$PpDQaT+Q>5>}{sO36H~JVxFz@=i%_CfKJ~S3`jmDnI^{ zpYm7#_TSNl*AgQ_<*VO)%{WXvfBt;S2DFeoqF0BAL_cWl@st|(n(2Ai#ni|=*cv;vS ziD@$_hr`HP3!@C+x z=A>j@JAPjRke8W|T&E{l&`?Ae#)(fqGY-YuS8pg{+Tgm*|c^it!I~n=2_c5kWjrszpiBO2Mp69$+vbQ3?LOP;()sNJxz%W97)9310g3 zhqyUL3zkjvFqwdr*|0cR2eHUT2xfCqCYtQ%M}e2GUh~zfmy8#e6l`xd!QbXsD-A_7 zN0~K)xV{r!lI^x)BYC%ml@00kV5M>WT2R{7yKaFHu*p}jVI77R+uF2JnK>t7aHnM* zkXzY&L$wAf#nC{3Wr^HeUlZyDHLvcNEfFoXkktZ;HUqRdIFV?HkOvJdD010a+h^5! z-&*5df zc9s|kDH$@NW(OL%8Cu}8@$JHHHlW?R?fHxE;a-}gb@uJL$hESCTSAMp_wQ+6HY3p} zp)H`59=taRkv6|HN^3sw0373<36|`)B5kSFIxIUnYJq6fBjFqee)GV2uxEZrAUh6O+F?9KBb9eIT?59@`9JY{S7zM3(^4N zWg<)AY8*M8P8@~<>%0((tr5lczped>igkX9`?D^|;N?w<4>fO%KoQn#6_}+eWF>`> zX)+o@sqprpa(nX;>uNNH>*vq-?LYsD=xh6s2Hw2fxmRbtVQT83lp{X973dM6O#0f#Fi~3$EEp|e1j*@Aq-nHfdUR7FmO{uFPSWdtdS_ezD3?Q%8!miHC3hFg=wT?44 z{#x7EV+%k{9pysVthXG4afpCPcaUj3I1-+yLIyg#n8jB zsgi>Q3mbCs?iy@HTD=Tl5)7>iOA*aTQ9>99z_KhRa*4I$n*;WeK+gQ*KmMaRjK$E< z1(!?s9M&JTKA^$zog&6cLht{JsR&1k&Xrw zUoed?q%E1m1A?#>XoL+->WE-S2sX0oyWjmT*UxTw{^FzFIoblGMjC#4^nLFCHmvW- zSe9>b?8k&Wz2@2x9LpYByw}l;-LZcUi{p2Rp1&nko@#&f6MNr~Cr9Jnw=x<>>*>)0 z?%nI!Ya3eL*0K*tv%s$*wZ34~ZDQ-<41W2~pFijI>(|`h-xCB@JunJfUc>i)_{ThZ z{t+*~`W<1YMp+0ZPK^rzH)_bbu7n5|7Z*&^g=+y8#$g~vvuVRHZFad<8}eS2Tnp8a zR1+aJ+qBkoCy!zLUTZWmF7aAdj;Gmpzg4)pzU6Y97-I59mBQ7{bMqMlL<{3!6r@tu z?hlX0GtWM{rpXoEzj@7k|CVu3l4>EO#NlvoQl*t@hG`^dMib!k1iO|+h_*pWC21tr z%2G30S5kzEiR$IDGUpj0o#&yd#9{0Y(R5-GLbUFpn)`;b(wVniqb3lD8SN69(e?5H zku|SOFnCm9Nkuf)K7I^5c zbsAGSSD?1?OX$x(rAnSNb#)F?jEER#DTYAF^%23fYT1=M8V6*1rkjq79lb;YUh;0& zYgy|s1lCe|ux#CtrDtv-84}czBN4n+z6G2%ba)eLtkwX?)^&z%0bmFw8e5AaC$p8> zlB2!>MQer-2{bWWQ{3L>Ic^TesI-1_{kj4^*jg~uwIvcLsu_qB%#c3qihX)ST94P` zV=F_pz@c^#R+A+O{cLPWYcJP$ywV*m7()8u#S3nA;}DioY@`k}{ocptpxbk94(xyR z(NI@-yjS}5KMAqA%7Ab89t7;{SeJr9sowa~e!eUV=`cCLKR7pYYi?$08!9V={-*GxW5Qc>`4xLF8V<2lGjghHL%*%<> zaqj8^6nMBha{Fu|xc^v6wn|D~S=W_ux+jk>zX@0UNfykn4(K?~}7t z;VuqW++N=@4Wm_9unxwQ664_t1x^oVQV3ifB4s&(E(}BDbUvdYGK>et!zEWC@%o#u zk&-F-Ov=Y2!_^II%~mcN2b%-vS}$fSTz$J%uXB2Kp+b!2zzlsVW6o-PV+Uzk60>#Ic5GlHnhLQ96NL{nd z?-KP6BtsgAfgvP9h@4L|Ll{YE;zvLJ2|xeEFTsiHC_EfZqiAprOjV_|Vf!llR!2h) z_M5yd^#1SN#@zqD1wtPRwDudNe_mDNKeWRo5uO@YD~CnDui6#U+j%wAt6i!#q|Eh9 z=%;Qav7o`pu%=N}iz6hS4JNVSwzXCdoK1&DgAj*=nJ%00){IZ?O3v1qr?r(#$_~xi zI*>v~Y3wMq5^Hd0wuvYz0b+8Lh3!2&y=y~NQ?wG0bt$%t)3lOW5+Kqz8QaJe@UkaD zu2^G$xZ(10Lh^vy?yWtyrmX!gmjx%2^8IZmq~3)KnY?sbS-2_CRDYGvf!u;FLZles7RF9MxS-|Roz?;j=He%|eM z?f2j2*e6NvOH7}xwf*nk@mIU|6fyrhO%uoYM0zmc(HO6JKEY?7ea2t?<-g;<{Pln4 zZ~yMUlZ$dWU6@d-!ufpe-Mk?L@=|zscp!wxI2<^i7ltsHxNj*o|8QNnoJOKx!lUcL znhQBEy?a}+%G-H{`E=s!8g@l1!<4wVxZp5dz~R8*;sR8OY9-(?O{RE&*|&K<6Jny_ zuqh3crCL=i1?D_+b$N}7No-tRUUR&Aja*#t`sGVf91@q82Q*oEZC)1;t4qcZD9cKe zz!WSqFHO8rjjXz!j@CI5vN=sEQfz)(sCJwr^dw;Q%l zOC})~`P#57Dqjnvr;<@L=KfBqN$ zju)SQ#=gh42?*ZY+#(`ALTEFfRt7V!kGjTI+uIuo^ps>Q-C^vrc`MKEvXzFwe82#< z;A_7L8aF4i>$2+(ADZseqYctHB2NOa#u2mN2J=iN0%nv%LXa*Ma*@qKf}W`a?)g9PjDz)0n)CSa-2 zkdtP(Y_wqOTC84@voSNM*ZVbejvJ!fogWy7X!hN^xTvI`UuvjsJ}|Gl@W`TNjjdms+w?Lo}{mElzP~ zbHviJYRf=PZo=0|z|^g!4GgdJ7AaaMs*Opi-jO&p`3KbX%{=I=*1^<%d_X| zdPdqLBH+E{ljb;jiRZ~4+K>m6mTkdW=fE^nv*Td(-R$1iaU0#FYU{n}$o;;cZ+|rO zcmMCkt$KRAkNEz+WcY^G(dK4?ZKPnjYU~31_Z=qY zVGSlYI;6I6>7r8o#lh{rT9cF8(0&aq36X|S`+BQ&7a+IB6u^=8fCWt*1+zah*_9p` z`Rq!G{`J_7YSEeneM>DE2O+)9J=5@6ZchiLA1+5F&L7{bBS(k-1SH?6E zfWzSuf-rc8Zx|8;WgM)zV~nHuonqCtD3)C2ijDJ|jCY<=BqyJ$vdoMraCw+GjETBt zvS!v&D6HJAN7BXR#C*CVBczL|D^8bcnpg+1He1b$IY716(pobG7=u87K`RoKnhQEt zYN+IS;UbMz)*}!@vi8QDSxQDFGKh5?nrg8N2&j#52x2{B;+aqsgJ~^&6~Yi0(qys? z)yflxG%|%mKFyr(PiQC(^9zG(*+e4ww6dI6hGFEzN1yWZpZ}RH*`235olXE;-QM&7 zB7|s~E+H7d>0h`YRq0M*|MM0kyf=G&53~=>_&?5m`}f`dZ>{0m&$hoQY+4T=HipJK z5DzxYFjdixGKgpKB0?!vHf(|2o_x7CFe2O7nW9!c)S|u~EJ$iigsKX~cyEAr2O0Y2 zScf~&(osLEl?eL1b4t||{PmR(1Zh~Is`1FGuiqG)uT(AIArRuu8K~b^ZM>r3fvJ=7)yM%z z2evvFr=bqj(ULuP1U4k(4;>xVsN3Am)}1AuShRa*_q~yQeGl5o>S#}29*(lK(&>KR zM%Vn?CkWr>JRhN0|0?(S``-HrLrr;PSKfDgD2Uq!0nrKN?6jlSb@lz!rb#qB>fQIC z219N|X>t!$#BwAFu5KXgb+UrLW5BfXo}xMpF(O)t-q85aku3|t{CtbeM78#R*`J_y zRzF5{-d9Z!&sfCwPfKcoh!5r7l?Quh=U*W_vf)qH%e$yE?|t3V8r-uL*~&wj>V|L6akw-0X^rVHb=hQ#gdbL&Db zE6c+PA@H3~zRRkG8N4IVHT`Pl;o*UttMSCEh32RGJLYv|KAl;Xnd+2^6bGhppq9eL zkr|HMq2i22~f51VTvNFI#NyO&@CWkyW6UwbPs|92ju&1c`yeFmXJesjuI14g$l-;p)Pq2r$E3O5uDylUG9mhQWx9 zW^O0ZKZd}VWYan-m36i5l}0MCo1wk85m9omo8kcsF9au_CR zUI{=_VUU3`XILw7uu&~_t)wy8IDl$F$K~MwI`Gq<{*3Q`{|Aqj=c|`5IUeu1y}jn* zV%jaX;`{)Unds!rwg$Bcp>%l3*Rf~PT`Ayc(9|}PW$GSlS^)GYUvVSRn5%5+?b%Vq zcI;v4zOjVf@@ud6prp5;HzFsS^Qo4ImRdXizycU?vCS4(dAUSgzskiSDVswxK@e{P zuEuXsq>m~xfqp{??7vPht+f2ouOFH!v-)|P;dp$l;;^^{Vm?%L2bD*4`9l@|Oze8q z0-q4PoTw%ZP{f{isU{bJRO*`1Y8cJ3n5OJ9auTj`6cjN`a< zz*TcxS*#QjTw|!0nS+`r<)$TID_FGi)D)Mw5DV&32qqdU6{Q%G)tq(3veyH{Iaw|j2? znxi+zJh3yaTTh-i&CdUkC;#sEYeW=@gWjC?au4t_4PjFtR+YL z&wt-G6VHf-(SoJdZ{Dyjg?edXyJLcnUL5%0kAKAH-}@fpE1M%aO%tI6uCEfyd`82- zcs(#(TtWzFw6gTY^%c3UfQgzuJUmdVk6*%MTE4k|AiFl-bQrk0xiv|fVK5X~!~&}n zyJjF#4QPo0)v?=IaR5N1I&H@F54EtYD|uOYRaWj_f5ZK8;o&rsqsa*^>ltEVse?6M zSkZ&DEK6Vb%kju?bKUh%bTu{AS}Y@((!kB_B__(KeiDX&=xQ*p)IeS`OEu~EFisvQ zRah4bAcDGZo*C@5WVFUE%GNe|j8uzbZe}Tj7+aDWqYr ztkg9+TATj2J!}zg8Nwsy_pdgl_MVOV)8|!rS5(igpz|g+r=nX4LqB{Dk91<*gO-(w z^H8viuNEZPl=wJA*XGr2aemqw1t~MMX%#GkWh(jA``d z0Vmow^=egu#zy~eWJdb4Vpmq`XvhvxX=R9%l9lpWmZ@sW@7_LNb0G#BHPd)U7AW}t zs}L)MWQ_%gT9=jw)=9Q?9{e*=@vca^@L&y_QLb&!HR8HsjWBLbHU)?=xr5ruv#o^E zkfV+^g|L-3RiPRJ89Ora`}+s?>+}(yNnIDu_ks;Hw-$CQ&DrzrzE7=Ow@+Z&^HH@@ zt`TYTBMw$WTt9RKZJePG?7iP>U_ShJ`@er|WAweh`V4?B_bs2#!`(58AeX&JODw1eNG} zPCV}4?0P4e%j3i*?hwIN9wb;Pup_~=_uB<`9tO6M$CVDwBYtp zaP=)ew*^;L)=S*n-0+*hMGslN}KDvFz>EXn( zWYfz_6PJ@Ur_Jk191ndk0GjOtRGj*vg(z_M@IXabviY2cvT%QVu*o*p&$(OfI9y(^mO`XZ zL#4_}NMbsD!!Q{!F;_miyfNaL3X&^xne9XC3Z<~9LTvSQb1Z2HtjpQPzZH;Tf{Jxn zO@3jXIehYhVH`Q1PONtikODW?&nRUjj){wDu=Yu;Oc5I|B(FrV8fcP03fn|;2&}no z`YviW_WpP#4Fk8&UU0a$=5)?zN@xr$t5O%Gt_#ckiNiGUgCG1cfA(j8X4mCJgjX-W z=H*wvdDnHJjnBTfkuC786H|p=ZA9x{_CGLv9(f zNn#k1Br%#c+*(XWD@2zj@xUQOQm|)2psU~G;*et+jAxKDDcSoHU75ca|Ef8aRZU>l z^rRg40TNpWuxhoA&|>o?Lr6#ntn2E0OC?Dnb)nI%bZh&=_EU_4Br6@MOE}1G-kUh; z)*Z9Y;2VM^a0*)kjU$&-L86y4L+f_*W{T3#8hQ|E0d6ZXSbO-ou87|^lpd({ed~@C zoII}fGn0Iw+luzRHmKA0ZN%V6Z5jp_X0~-`S@$NlA&B!m#nFY)0?ft%b*g}s^_(x+P%g0URjFQ1 z^kSh}DLHxxy5EBqq}x^4Gw7&3+d2sro!=uui zm66JBrtkZbK@U=7qX)pd0VZWbvKnvF*1?wW+Wqy<^=FvcAnLBu5?Q@jMI3BpTzM{-4)Abd{hm}=beL*Yd zdA8{$$ING+d`vpTfpnOdPiG>+#q|}-x^jDUMXnbRloIG_=F3{B^9muN%gVZ#OQ@1K ztt+UZ1_d?6@oD0GI&(gqK%#}T3dhr#vKXOWQe-#`c2gv|BDjgX#ZbKzF`-LkIWJsX zTtG;y%c&1BUDtIpI0UY5KH_IT|8vq|;?3P_-ag!OF%2+h*3*&W-5miNO!>2){fw3k zp3i6g=l}elEX!ibwYzLuymRh-b?K+ahhY9clo`B_clF_8Gvd9=%I)%pG-37zRh`&b zwDFQGVCnDa*kQjgJVOpYz$JM5$B6% zwi`b~)Ywx-xUGm<0Wo+fz{EYxF}IAw=IFJufo0NGdh%>0Mkg!iHp{JNvF=}*5MNNV zsG~cDB$Xf#)y_guC)Cp&9b!T2Rvy4hmS$Lk2b7e$LDWtbuBannbVs+Jnbw?W%c||! znp0~!WB|!E+gg^}L`FNII|YAE+3vSz;6Y8EB84q@6AZ0V^`07UR54@jIz+8eLmZiL z2a)i{QX*B1+fY?W(U83Aj#p40%VXD;-2ny{fK(SKmX6f#91(Nq2v@ zyC46WBlud2-n3vp6vB{tvfSXm=J=r@R@+gX&)I(A%m{oZZ>Vug%6g2_2;vNd_r4as4ML=9rPRG_ zPUmoSo6-{e4H2vUECe1k9@+jde~Y7!LyC{?+rA;H*7{D9&C`qNL(T=RuP=H1`ZcHH zJrBocTwew<@X?FJcR&9lp1=5n-~8(D$+-|FVJTKU6W769^4go?TEoOJ4CHm8v_NP~ zLY4DC4Y~QdSG#F<(<_WgG@dDa@y{sShkC?-#P? zd^+A!av`rX1hKh_BHTQ?B^?sa)=xMsGwNe~&ZiSm3zvtHysV^~%aMTaots;Z$0O(Y zNXdmrU^j8?E5nnS61{6bGhp@^LjQ!w_A5-!i-?CWcy7h{J*F zn~(YQ2YEgUQNjsu>}g?o>8M zN=T^AR0%#Txng6bnjTe4pIcDX!Y#*Gygb~>b+y(_#MBD}HlD{aj;eUw+blqB=z+9y zQYC05dMVE`bYTpURm^|}wMK|qAz+!VU59iB6UF8{mQuTs*pzfD`1Nu-(72~B{*!^ zeS7w;e9+HDAk@%Nt3E~ukmv!Ow)fow*CIM`~U9~DxM-=?r2jQDMh;=^V1To>UO@WJ|)Cn;AQIe zc^(Uagl9L`KBsGCNCz$^a|oB0m#Amg-}(3xUVQv1-}(IeeCM+t@UT>l%gUSc9jh8F zcRHO|PiM3g*P%Fao@YV`9OpC3$s<+`?vTASQ&;Yecf7s3BWEL^)x4mmGYliajdmPH zLP|bfq8iE-EjUQ=V8UX{!Z04lRr%f5-!NX^^7ZR)Sk6bLF(FIg{PqnOW8&vO|2hBW zi!Zk{Rju@Ld2vM@3x~tO487(~=Cs8Z`@mfNK=J%3f~C8k?_VQNOzposxU$1YquYBl zXg!K-BT{y%(uf6NI2zG3u&Qsm(u`d<&Ks)LjjQcS|I~m=*&!^}s;&WVS2x5858{GY z?Ot;>U9)PE9H^mFP9>)eaV@lnqP?GQ{tyi1@bX<0E4c(!^3HIm8=r>IwNk7hUB;c* zdlK zJ@|RGfUA|&#Y@ipNwz#={|v*nYa7A;>AqI~E>+(NiuRlsZK&9{I9eHS_mh5&PtmBp zZ$E&Pd>a&g|6c9BZ6WsdKKpZvgYAbk*DV0~(0hv61w*85jkf^n@jVk-;;CBuKC=L7 zyM|8e-+!c+g7H9F{P+7ku|EtAj*m)lwpUD^rFAE2u%stA@2WqCEynY|e_YyqT59`! zK$c+Cfky$Z+p4DlTo15X^0-UrLkJ{%c)X7tN-2?Iq~x`uRK3jj(FUg*8ZBH* z6UT=K9v<$vx;Sugai9eF_|q%?%@;r8Z~x!F;p^Z0ie))-eRIj=4I%3~+y1Sx<8OvO zkJIMfs#6Hurbw~5fMsS#S6p6RalW4&#S`ZF#9miE)0wK7vaDOD zdaX|15XxGuaW0yo`OJ{@pwG)>dkA8r*mI0>$=$cG$lT?%P1;Olri^7ic=^YKiIiBJp$nNMe)T|DO(zxV|&KK+#5CKm$p zX{MIKr{DdYlt!CRBoRUr6lhyNxMO~7q5_sngrZ~ENtdvMaWm6ag711qpIIAG%~wsTUS@z<`iIT$nQ>RFiS zw5cdTi=C5T&RmTP)xR}Ey1~jC__q4u7A8Lm@@*o)3v&~`*YC%>jyHrPGt&QH-T8Ok(T+ea5joUk1 zRS{ZAQyg*89)tyhQr~|w!QRld?b`LWHEs^fvaxO3N)MR!jx>suqna&ybnNb@(wE=k z=j#7{%Fo)Dq3Ff5$FKQ)j!}iyANS~WZS+Y?()uTOP}Mm>E$MO_5n><|n`{t5WJn{^ zGn^e?(U6{{!wAc zFpO}K;7|VKPx$P!&v^OkUpdKqW?mPn@5eywD3qNytWvB@>l;ODaSm?c`Y@4D#t^ug zMh+=a#Du{mVe^$A?#Sg#T^CBVQe!R)xn{If&Zi?OZjB4c{luCx#c3?r!2v5>4imh|}a`+7~Zg@Z%r< zgkid%BHZ8KbG*OfVj2iiS=J+e|F?h3t5>ghxci1>NsQBg!Mn+7`IwrudX|0|CoaZ` zb2_6rb2`n8YNK_YKYz|AFFwWylTLK3)mlLd+}u1P4imbZaY{1g(!I3BW`v&}d-Upk zneF>FLfZ_FZIS%J^j5VQ_+2LXSsx4J-=hruxd+T(nkb<-Cogm(qd*ZWn~G;)u6Npl z=3atu2Ui@m1IvsWk+!I^E~^RR*@->w4ApHt8IrS=o%dOEsisX6cKq z3@wN?jh^DN9*!=Aim=W1@>qz3kOc4CQX)QV6*ayl!8@#)%C&Q3ylLTScV6`vu5m}~ z0sG4GzkiAhc1P|3z<%fK_d^pRZs*W~90~H?efbXRyhF7b;w8J+wfkxVv)_O8cl;Nj zNRKU!$o{$?-wS#2cl-0VHM7~N{m~H656w2*2UjgoF}{qwco+t*u5Vc8v)>PW=ljOIswWmZd%aI6 zTS+m-xFgBiwe8Wcr_Ueg#G`9X4*k8N(F>Mk;r`)) z>w`%ewBhIdy;T2TaJ4@N#KgtN%WK9oa6Zr0h~o*p0-t~W2|xYmPx-I^=|8e84~P^` z1Z^Bv&MV>r$74*SDKXDVOjyHCF>&IYS4Nb>VMNGW9|pz%4{u*_|Ms4g5>l1Z=|nB7 zjpV5-%W|gFwLg<3FWf%6u^_utFDterGMEsxMuG~f6CE|Ly&F|4tRWCv9m2^kY>Exda5k{8dPTW4G}0n!*F(==JsnHPo-na?Ncx-t&JAr3rz^M;yd z{^W<>GnG_%I)5J7FlXX{n|Y&#qNi_t#=8E1ums}Q(?%)?}CH&$tU8gsg$)ka`d*_?`i zIEQVFgNc)7)2s_AFpML()I>)tLcu3o`ZDyu)Df+uhPD{m<L_d)bEPf4cXY%f6&kcM_V~hV~hEPrlqwnTQ!G`e?4_Y4MBM)h#Q(ZuUm`SwWecpDqwVG4o!Y;3jrCr-c0pbqefMa3QC6-sRGgOd`1Wrc zr@c;F`+jwG#rbq3YqfcP??G791E3@(*|Uj&THxEVg*J&nr9!A3rBWP0j)rzM!)u*_ zJA|(3Z0MFK+CK38ks?&LZ)sC$7l}yngl&gNiEaVDh*$}0C$9UheQ)<=`?syR?hzi% zPJQ$o{4+n4W497;d-ffv+x_fAJgQnN%d)TpVVb6nwDt4#y}KW^_5O3PAc=}2=E6s} z&-wMQ|CzhHJ1(DHu}%XCxW0g2{^Cpi!~ga<|Kq>?HPp;>c_0KOs(@Cs*!ZuxD3Sux zWnzB&fHfs~bwq@9Ig`u6MG~T9q@I|MugUX?^`T&+_cHhQ_Y8vxi>fDmh7(v2XJ}nP zw32J4O*^qQt^{%UsBHc(0Ge%Ha#1>Gc1p2x4lBZR7}0P+N@-+WvS-SIh|SuWl6BAx z!w4Y|hk<#X(Pe?V2fq6CKXbUcWP1LLGB0FZ2yrmyoeL=?;xO{|cqHe{g(FtD{6Nix zk}Bu25@Iw(XM%}Ox{zGfOpLLl#=0^*bjhOm~Q=sn&ty=m(;jIVxq=UN z@c?QICe2~>!nH;AyDzDZoM6OuRYkJtjs(FvSETxN+JY~%Ypkpu5GjpJy`g223{MQI zR23W0DqFzPx*73Jl5=LwmK6o}7|}~WwG>jc8HnN*uLW4aQ&Um#mi(3p3TUuE!IKiZ zCjw&UTPVgU*=5r$xau8wjpSZUG1vmN;-Z7rHl3WG&^b?TT(n)gRF|;OUXp6_{2)-o zIZV4GA_OrKuCs>%5vj^jmz@IlxH;y*f}R#rxBak{qk@(8By26*Y>uvKQ?FM-C=4Qw zSP3eHVH((%L|Sm%oTKPt$JI)$EoPEX%sI-|O}U9zVQXSH5TrIEx#Lmo%Q5Y9nod`f zErI=htwa*y`eq+G-iHu9J(~4++FkebJ@z&rv>>6|oGlp(PA9OY8EfEB6)TMb4N+Q?Qhf1WqqvaqlqJ{d3=&4OsY4iB$V@+ycb?(R11N98Ux4e(mjd?LBL&(70eThBWCoa&b7=jNo08 z(E{-5T-e{Uye;{v>LSFYOUgWZ_Ke^D_P4xwbI0w+&zPoxX|Of(`S-rZ4}bI{{^q~^ zKg`D?N8k&9E^(P#g?vs+pi_+G@lWlTmv6=k_fq4AGu(E_NQuW{f=MFcd@0 zLw4B)EoiRRC{fHBnc!z|w9O5qX7m4Q9d0!lso&zPY@>3jHF;F4V?hXnXvSd0)=HZ{ z89gf(OnJVBNCn1W*aBb;CY&20YsutV7{-Y-jfO}TLl$dQ%4++o5ta>@EZ!*xM6J3+5gJ!!`L19LZ@L-ny_hl;$bl zt07AbnGo4frQoRe-XXVU6D0Ohv$kMNL5ekSNDCmgPeL#qrx>@OB`KXa9C+O2*X&zG zH*S-f3&v#M)mfR!%TobGzwn>RBu;>3v)87d%$ zw-jFkK}%o&+`KS>so2y57;|L0Rrb*oQE2jw-dmsa#paGgh5%XVxV!MP73v#FQs;01 zrB<$g&1hnsOOu_G1o+xluE~@PQ-X8$W~^3g7SBN3X-g!y8?P^A2KLb$9u`5A%bA2N z&ylG>C&!B@QuT2jqhfJxuS6@cZfN@ck)4A&w`H#g1W7!w5+N9nMkh~}tj5*Vm1hG4 zR*O?ATqsyQNFKg(O!;bu;P}~^1Z^%jIXOj2z&r1~i+}v5f5K){AOdU}aH7EZ1@PII zzsA4+{lCLM{^9R%wmZREGqSLErIj6ODJWjmo^!_8>XbaoO+f+m6<3LA!1`*7=kxct z`uG9P))%;WwL?m0$SG03ugs979%Or9QP?5C=0e>MMrzLQTDp<|z{#}gfI=&VVg)%* z5XsnXZg6%Q+IqlTZJD1UsM(NPG0Xr&xFHMR8x=ac{_gGuDNQ&zIf1l_tP>twUSUe) zhjbKCd||pXB90h{CZHAU<{4tl)91WGfuY&Vn{Ebi4_IZ<-?`nm!&aB76jMQgF*TW^ zFI=P8j{1aZ1+8#_ukwUi?kIp}z$c%4f+s)w86aG|^E~6_%a^FN;+-c?peee-!=qur zF|fa<$9`-XP@kmekw&c*FJ4~b?Cb)%nvhaPYHWMc8lldBqeUB0TB^7(cc894b3GQiV?c46>dx%DQZMwrj*F} zG6QmEs;aROb#sz6gicm9UUx0-$ibslNlZ>9-|)=&SG8hxfm02kNKiVU)*a|Vk|e7h zy_uI1X}=~okyaNU*{JTM7RY3zAN!8j??1#-biM352Ug`=77~CvZ^t=oYMzocR?ajT z`#}=T62JC15)ztmGhMi6oc{uG(Mk^p(0uc+fGwMyf{u}Tgbt(A)62m<%IS~dWge;0(F+IWb?HJ3C@nfVlFbk`%|LpV6@#R;)#kb%56IumIE0Clp z+bv$a_<=f?zV^1enRb5?SRx*&;y_FVo_+fir>E!m`zrY0<4^G5@*(D3L)pzJpdZqz z(?sSOIf{O&+nQ2PG$`2BZQ(NULNzL~PpuiYWyV|$o6Qb4H#eB32}s%Z;=+yw%B);& z+rk{X3XmrvLaiVhFl9x`2~ry-QKZ#`-DU@fVp?Z5coZ5jm~^9M4ag3~Q(>2pMeuBP z&B(VxMb(B-{xhTc^XSYN8X#=;h(se(YC%ehZ7oR1fEB=i+%lTqtnIwPw%if5Lc`|v z7V~a{&p!GDpMCZ#KpJW-NZ#V&`488acNGsFJm`iZ1Rvjayve`necEJju0*_iTk!Y) z^pAM@?0dZb{?GB~-6zO-ArMD8=5Rrb|BeO@V1#TfNO+V!5KptI0d=&P#`I2tO9l`N zLlJI7#cW7P@qVh$Jrk4etYX>n9T)N||LH8!`RRy_h0sD^l`!{*}7lIyOh#-^e@9U0>qq+9ZAcn%?k znuJ_3Hd+Ki{o4SL*u@RHRzOJC=lVLdfyM!`|%7pCmOqpUvQh?SK074Rmv8`}qBWnjW<#2Sj%HI&*^9s_k<`J%!jl=(Ev%s8=IC{2z1OB$pef4_ z9Z$p99C_af8#g7+yV&@3KzhO;8$6{dzE(Sx(qCt?q=3iwx^ucz0Y|ViIJsD^_0USi z{jWZS!qKw+HrxAmJen*vO?{&|M%Iu1iP7IPI7uRcX}!Yj?JZ9H`|o{Eqx?zeXLTDR zK4!j=F6rK=612VVheU8AJt!E1pu>X>89EAMP}ijMc3to>HU?JB7_g|YYFym*Bw;Wi zAPu3qJ?lTtUmBgQV@}eWI9sE0zKD&+-14~s7MS$ZsJ||_rZ&teEKe^fd0pmp92Smb zeBm38@f=kZrB!50Y+JKlW3$=d_T~;J(frIqqG?^ zDP}ROy#iV#Bd>f9Rza~!r+sdiE1js@>zBCB*GPGdyPI2FJ$Q_}yE|+gwX2%Z>JDh^ zd2E(2iK3MGo~SDS_O1s`Q<*m#M;xh%W=^pH1ey~zn+*W~HR^zZ8IzVIY;vXp)3;&} z1{J_mu`4qP@Qr=CV2WnkF!Jddo6=CNAX`Gxi9|%Niju0VzblMfa?WgzQpo?&oKPH@ z%HDN6Qf9N0i=osKT6Y7eK&@D>&jDx`0ac(2LBcsML5d?EV8;2$DgMo0{S|)w>tDmH zAbEOlyWQgU_7A|g^*VlN7K34J!fjM!+sNoFgk?(Br~sW6~a?B>?5r8O1?B>3hwR4a;c zp)?rg)*v}U69ppM96D0r*bqTWzKQp?K|+!~Hw$s0K!?4(Nh?s@5hS_Wgs!6@`Q}bz znZWcWKdbFI!Lccf6*!`y(E{K283`G9iA{*$ag%Z63`-QgMAwVcD}pYjm{Q#)Sq4xxgb-?9;Xb7%7jU`CIt?-J!AiG8dplD*cQpp=gnox{wi^9R_X@-M&)}4_w zJU4Ki#9;wC*TeiAej95gy073Q_24WAA^gdsrE| z=ulzFGz@{K+Wz0MegS7)3LPdzVz#9_DNg=B;uwVl3-1>oDI)`WcA}Jm3fxmczZVoA z{C?w{`@&!ym*1D zi&NOj&qaZcKmHgWe*6jkm*4*fZ08D{b~ryj!^wjOsI@SN%yigms{xlHfxTr#=vdn6 zDgODN{~0>1P_5y~FFwSyKEd7HU9U1`%r9)`WPq%e(TFu4<4}$E*Qz_8$%87lIpRj$ z4A3kHnGO*_%F=^fBAYW+sH0x$DVSmRgP`phSb%8fl)R^4TQ(zWv!Cxw_T2zU33W&QSVSqB z5-k8YPfMu~B|$vFx>Q0ZeY=u72Ll{ai7{UsGwMtb`5U=6+E`}5Hz<;%9zB^mhjdhy zdFHZE5Thm+kpNrj4&32N-cM0g97S9>H~h4UaKIu+38Ngu>b}7Up>rZKi)I<%*Mvkg zLZXM8S0S0tt1&_r^pvc?(?wAX5Dty#QpMzH?GTG)u#)`!%cj-&n`W?_T=ru@0Q5kH zp)0VPBaAAbVM-XdJlr60|z2D!f}l-?i)7xy-kfy1y>jCUY9Juf>ib%fojA0 zy}v(pWa8lQj$X;Z1}{rmu-|*!KMt#fE75ZLB-U|#ux3Q=An%yr- zS;VG~r4nOoeuOX8kEL3b1vw=gSW}czpb$KK_z=&YJ;TfAFYxN|LjWg8XTS=;$DjTR zUw!o#_&@*VZ}Ifm_c(uefnBS}tBksf-llBBNbeMJWwc6fbUW@lW6U3Ge*!=V+*`G(zhW zo(9h$cqgRt<||gt#IL0ydwT+=6I+MQ8IX|Zx}Ka{(+YADqzcsA9o82sMjxU?WqcCt z3O8kX(=*o73Uki*=)({3tB*cL3=u@oYQ@W!FOgEh<>lqxB#Ox4O~>1wKU`Rc2v*Js z=lL7}OFmVnjyR0MZ?F4#9mEWv>vh!D(CXl*IZ>Dn5a_|1?0s%*kl`fcl;{XG@)KIA zRLI?KvCbLI3g%rjHbu`zd+fEOlK@O9Bg$wi2;Bk-qzq}HH{)r_xj#=nnPl{CmrWwphU453b`U7S7EU+HtS;-La0j}gKzZihSp^d$0BmLh#ji8 z(FrKN#lK)GHQ;aYjeF@CN$(?cYa(S;-SKS}%J;D;GAByde&gW8-zV8ISI-ZO8I*x#eX>ahJ4ef4pn0tV~CxWNeNCN<{ zTCY({!FIF3?d>hr>oqPeE?zsHF=of?__5dS{~r6~;@BS^duiYUr@wzr^e%nF_x+fo z&tX;PFAL7kPVw-;13Z860@p8IA`5VJb^-vnI2HWni!bo*yYJ(_{=?tn^6?cra8`C8`3MawB~sx zhgiVCQ|Ui6<79k793Wp8htg$So0ZQlpkoQpL(S3k=X| z=i(GJY;1>?CfwEy*4rCAv;|q2+l;xjE>ze6M-9x0zv5g}A|9m{WSMB-olqSs-7GL3 zzkz5tS*?J%QvG^YAaljZY6a5_F;+#T)6<^r1Ay(_2CBfLN00FJ*I(nk_unP#P#cgG zudZLBl!B|Pt0j#hjLlMFnf(5&4YXl#`S+r?gPA_^6XHMEk~%20GHuqP87C_qOhRMk z7>RY6)aJeWmPn41u$jQM)B63XL#l8;&1hY*whWq43PEkg=v|g#hKTy36#La?gXV@P zI29s}L?uOwbT8mlEgXlP0joUWwiMq;fw@*1Ja5qyleVCsr=Y|U4uIStTb!YY{6!`w z50j5nYT*W#ZQ&JZL!KsBtw2x#eE~P4GpVW_YVN5EGZaUwD#RHv6YgK2X3NR|;IaaaOo}@QEoO2c2-*<@ zXIgb+>Ha3Tzk!MeYVmxMXbK&_qZ8K0jkF_uYWx}68XY=eef+U-^*RDET(JzF>s~>B zzW3VmO;xu zx<0{Nc3op>?_5;(L|S9b`R?fxfr$5b$U(}K>l1VuMO^+v_LVw>Hn)lMm9PXdBF3>a zgDDZ@l+xmKG;@DTnbiSbpOh8D(=;L4z9m(htxxc?ci+Qivtd!#fwLaxBYmANLC)Sy zj(HHz5C0xs*Wq)=IKhX6_dp)a%qyuEnTOGVKRo*U=;z=LVpL7SnI5en=Y%Iup5XfB zOT2pZ3XdLKpaR{JfB4}?_|+$$;y?ZG{~NBauW@yCLDWg8<{pJ+=7E>Ar3%z)MQIf& zDb6m=(Q?MOPrt)2KKhs%nA3!-OU3o|D+XbjpwkMFirRKaE9zkFioqnY+S*uMu1VN| zB=L&1xzKH^{mL1vhYbUw%CLEd0s4x996jh1f+;7gM7^4?B1$on=aP4|;jUKHW=NYm zTz2Op2z_i>k#i=D=g8M)x5W+(>pWql6VMu(5j~janJGh!ikBsnYK?i=?L6aTO@yhn zg0r(TOrlujj9qOI6koIzQ)aKYloVEGtaHLWweF4`Q&z?Plnc>l+ zN8QLWHL>K?-+a8?(|;YxB+ZbO7LNA|;El1eVq})nx#9e+vvGJFA!0HdQ=*@d76&CwTbq;UXrxUU!D=t`$~~CZ@m4 z^XX`8GE8H{9$>{q+yHfbBLGQ|p`B;ZjEjwZ{@iI0IMLh%?FuK=UEc(+pq1bK4QdkSY49o4cu zXKK7pbj%kc2-o4Mwe&Pc|6C{i*4CgJXuu#UsRB`NQzTJT!41t^Xfc%X!^qR{@jH{Z zyfR1r#!9MjZg$=#42ODDej@$e!LPfyC*Pnz119nIK920{IaL04N{J$@s(^XQvm+48 zd67RCj-X38M2nySz3Sr#+L1j3W^c_I)NiO9?mP!;y_4GGKKq>TWbg7?M|oM`8x8|p z6@Ean-inNAJ?1z!t2ohl3JxL&U*^qgCNZXCO)#5+7kBD8L!kDx2# zdC)oG?@1P?4KY@7JPWa)*kc$lAY8*7&f$oA)nEgEPpUA_!sL|DYJ)Yy!-o$U6nd(x zJ2FT1fnz^`I4y(xhVvhPSMiGCVT|5@j&U1|dFhV#(W=zfA0k2qf7aR@1qetiX^WXd$@BRDt@Q?ra2Rt}Gqs&Tm83i!&5&>0px=dtPQlgN! zWWnlWji=v!!~GnByPFL@`|R_DQw@QojAD0~tM_@zKY>0HqlWu!8IBS9tpL zDOPI|%vY-w=9xt02o3v$bAn57P-0=%wxCw=*xmv-aEdq-0c*RCRv5iTiGgXFh-?j? z6Prpc`wkUNN%iQ#uq(yWJ&FdV%&IXeFlnf5O9vWJVMVSTk)KlI1aDv@b}amqy5i#-Rna*w;8+%w^y20bM7V3 zN=3-TD_lGy)4Od%`iqbi9s^yu}szIatE($~`}A8}UtiXV>F%11q-ZD>YzKQ~f3n$%QjD5av70$H!IUQrKzofGD} zTkLLcusc1)qsNc&`DdSEnxe6815(1x%?$wH;^LyCH1Y44rg`0=VQ2({0e=1O|E&kd zW$%&xcxVF+X9sT2uIelc+DL-nz5qqPFTjvx zWls*4%KPg=voIh*-nEMvr|f3cq-6V`CO%AxZ4#>D{(mk_47<@{o&CT)6N0)hj9cd zdkvtpWm}bIixwT=f|_ZpOy{+MHo2L2^_DyFjYRI?F^Q=2D*3K%nNOg8=qDk=^BI)_fy$^ z{UY8z<&aN}OqrDet=(r#8;Pmu%Y zh~zPTjrq+D5{A=;AV5tfgCx;J?_K0X7j?LTb*1c=^5r0QEqT2(%rl{yuAw3}4 zn@%a=biKy&XWygNig})KdVU57bqA|gg7mOe4jtL$diph~kW&}|DHd*HPjC4cC-vs$ zBU&#E;Dgi0`N`~!=rW()bkCzuH>iSp=o4aY`W&`|qFP*|TSO=kY^aK0N7R$_F3)5?_7w75<;U`5T}X zw7I}ePMod+m@$wRQS5d*78E4G?rwuR&uC`Yl^H1kC#yBI33i(;uCK2FWUSU_IJ*6om-Lzd`KZA>qR|TfB|JQYslLzRd`D? zym)nk(=@?k!jv+8{=u(cD#&>SO&RBx4{&~Y#g;e#%52a?QZ~~C+DW@CK2#L*N;MZM zjLo^i5rf%bNkuoTgaeyH;@tRWG-`W$bzmhngOn6=scijXLXT4>F(@vyVT* zZ@>6rD4SL6?(XpH*>mK)!qwG7h$PD0`{oe2b+i2l@$l$q!-!&yzhmEUgtz=tj>8S+ z*yFEz&9U?C5l=VJ3n4z*SfozE4RnnEMW4GM8)`RHv^eBFQKm!DTphQeMMNdROY*2P z6TxBXk>A*?_K8}p!5SAT@6oQOdWsc5Cr{`4l5GvrVl(wCRgX?xza;wiQ2>=MNt*ix zS*vra#I<$8$a#drUUUg53j`HYzsH$KROQA4xWV_U&5h~cKmfcYw6~fGr^uk*;hu1R z8!!!EVNB6cvv8h_n}oJV6$l^(Nlfo$WZ!fEF`<5)U@3+7dmo#8RN#c8SUq*CHk<;y z3d@vZE^e%vPzl{JtyU{}8UFdvGE0!ybwL~%1sz`Tbc~uip2LZbx>ZSZ;G7-b9O89R z6}W7O@aH&}l8|f2$2mq0AaSm=w!fY|glA(~?dWdG8LKr1=q2G?_ObjUf3an6$W=0(Hn$2I2NQODTm{Ka@jfEb^xAPkOhJ)=q3#i=SuS&Oeg@8RuMBhtpB2j(QqtT< zMYzW&p9%TF*%igX)+?s&3W>31hTC0X>jUHC<>f8zDv+l&CuUNt&rV@R9!7PvDT#JM zYA7kkM32p4^!NopHgYPO_bw52jTAG4OhhP!Lzn1qc9=D1GXJ-8VH*_)&>Akz&heW+ z`wUkPu3)yn%`aZw;BLFa#pMI6*XzC9^N&ZJqE!0zUjLiWtai^d+&^AxC>=o>3GVx! z)%qh#q?G{YtFZt9dxkUm2aexi=6tT#@X@G0W$3A^9>^F=YIAbVa^)2pod|#%DdAOz z&KA5F)fLhogI3uSeB?9$| zV9lL}!+o)_O^t6-S;;Nb6!HV%)u8jE;Nzi57v9vtS{i@GSP-?c46<__}cHQ#|JPWaMIv!Q4+pvJCrNtWnW@4BQUS zy{AMZ$kGE+7xO43R}k9=7N=Hv1@k?OcN zI=uJL3B z!aI*vNT9O&XMgrNzWB{=@y$Q~5ycv&lQpKysy?P)E3^S+bBB4m#mO|`3)2lD49}mxfSKUIgGZbv!wl<)%o{5B;<SjDGsV;0ew66K+DKqKaQp>D1PA?>ZIkV5APAYCd6 zOK0asq=|Elgz99VI2{_%5F5&DTZ6QUmOPbaTJE3DURM{=CjtTYU+Bmf{OuCK50hd=xQ0PttO`V{A9XYl3N?c;bH3ys220pL1m3lC3( zmDuKOoW$)xq}aMM=AU}lZYREHeDu&3MaO`>_ZjY;dz|Y&cP;Ka&uLn(FyG!{y*^=2 zxLv`NC(PAbn7M#(9qd;)#3JIPGxW%fYIN~hRz0Ucv>N(Yg~NAqLNt_x^S(}eAI#_jC}r|T6i z&$x>|etd<`zxV?G^Y8xyw%a=b9;=MGRwNOW-Hc{4E-x=(wPN0Gkx$k*vj=D@xVgIp zc5GCyrD3z(K~=HJ6Uugrm)Fm6da}aFbb{S(1{ynk)LL0J7~>Z{NT2h9?cIjw9?hUT zrNqNPF9sq7hOkl>8bCw7x_E%AhY#^;H)Fdg%y&YeX~OARSuv!EvIo-|m?(p9J649N z6QnioI}j0N1zAiQZ+r92E+BVnG^8TpO4z(Xj2bxEvwA3Y- zS493sYjoBkRhz&-A-O?k&r2WA*04$mW)<7*9RS7Y$vMt1PVwU9OFVn}6sO)qI;D){ zg!|*k?==B6g0Rl*Zskfjp1GFJp@pPV=3vBjD6`KK;fKj}PF*%V@#5G-X*=Wd# zbEig?sY4Y?R2cpO7D-}Knw-wDzY@DV8+ z9iu}h>DY0sL&33s@rI9yv@u_|&%p}hIOmL?{p@G>!yo>D7cX95l@;sh0;>sFt$^Qr z^(8+1)vxgP|Md@OFr2Q}SeaqFnQ?h}g41+wb^Z9nHh|myI16oi#v(3Gy$ieEJ2`BS-`dH`yuba zI%QHE1U_#(!vaIA1$nL&b5lHg@&wy?#?AE&G-c$8ReLF~QLSNH8#GT4P1tP{2Higz-BL=j&KunR+#7#&9jm4pW z2=o0ec9~ZRzxePM_|2EU#`Xf^|ANJdJ!f+;-NbLHq_HxtZo{*`a)+8u&1El3AI z8l^j`TO$LT0kg4hW5ebeYW%=#i@_av2ND%|?$DT{O^gB)8#jwUG<7X3Rf?Mm;F1xH zW{HMLZ=M_*ZWLCSJ0vPW-IjhHlo8+!sl`yr3~Q`>nWhX)z`WgIn$}oNYs~YEyUh(s z-C?`k0<9vgI2ScBgpMk?;HmNEdpgdTszYmF^;gBDneUG@h_PzZ)Vtgxs_V4RH|cl9 zoHr6Fmf%F7^Rrr{FFWhaN$t&g<5O`&$OL>&myJz__0g=LwT9iSn014lIizmpMk?ky z=rBh5I3+Y;u|gH14x$qT6-lOhbDJofU=k%C4Z{Z`oFH4I7_g)j4=WjCk=={t`{#_m z-*>dejb}u*V*MrGq^UF4aC&-%kAC?PjeMT^I>GR>pO)K~@3@}^^>ZGtgPz2mZ3w-+ z;mwHjJMa3z7-KO%F&=c@{P~cTh|i9I*%p)t00nH#Tu_(S6Ya|+CERW|l%2^;6-AX* z&g49@00N6W@C}TylOgwg#rnLUH)H4lV~id4?QIX}RMBD+rBB*Z;Y^cL%Ep}c2RNGQ zwk`Nk9hG)lDdIx8!|jc6>VfX){EO_NO^X)SeJ3jH!7}xIe)kJpUf=KiaQj2Kef(se zL!Tb|&B@30Vf%$8`|D``ni|;UfGYW|a~J#jjIu+MW?Y?LAWOo_=P&T?yYD~}HL)^) zpMUrf{`|LJ;7{ND5wBid<773#Ej-F@#-s`9>=Y`%Tz9yw6*f&ck#nrqYltW|n>)yk z!lamqbe*qOSV@E3y~NIDq%>ikcPIs@O4P|jp+Z@S9vn93B1`r_J#Mi(^nTw<;rCG~ zL1DrQN>mpbEe$YDC=J+dXXN!7tCX?X?C23zc88w5EL>c4YnmobpvK5e8)05Fnt~uN z7N2mFFs;&JmbjHEZKgxglzo59SnBIg9Lr^wXrvPp9qpR(s)K67b^13z#OHIeZ`F_a5y>737aRBFb4Na5e@)YBve2^3$f> z5Qb1IFeXNNeb;i>@)(KLM_v=X0O4}4BNAXyvdi}oN#y&Bw^tE!v{JZPgsjHssB9fI zERJTuz5dC`n9<&4@3ahF1?c2+pS%`CLNBd11DzTFev)IEerUo9!h1@3A}r%C%{PBt zsLU&V#6MK2HXn>$G-=Yd-NDl2#s}O`_5HdNA&rG09IOeI)DW+N+}@=rEgZN6)Oq1 zJJd$!YRW6FsTNW*gPpXc2Po2^9d-oV@2|Q&3ecoGRxW*D;9Oxq4kFm$#2M)d)ZAjP zQqDz6m5dHG7emZ1u7wbLtuQ1X-?V4n&AE|_4PP8GS=Q;1gP(Q$@e#3Po%nKpdyxv3 zf7|%Czpl?Y=Q+J8)~{F^(=XOYmT`$|bvqtw4iJ4b<7mZgXKKuTAeEC_j_ z;Gx^m1u*`t-dP&~T;tF#Cf$!%&7xw@IY4bephUP(iOdD-gouJUYJ+g*dQ)5e&c?tq zH>JudzPS}5CP0VcMH*Y}8IY3!pg>+!?lE!^6mk9)fLaZ!BxnWLl?|`cbx!8WCe3M5 zSTZDU$z#

4Y}#07n~&8IULiV(`cpa4xqI%@pdR)5sZM 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%0A>T9<9NebZJXSYY76 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

DNs6I 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 z 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%0DvfUcwij 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 literal 0 HcmV?d00001 diff --git a/bench/makegrad.perl b/bench/makegrad.perl new file mode 100644 index 00000000..6d902222 --- /dev/null +++ b/bench/makegrad.perl @@ -0,0 +1,41 @@ +#!perl -w +use Imager; + +=head1 NAME + +makegrad.perl - builds a large gradient image for quant.c benchmarking + +=head1 SYNOPSIS + + perl makegrad.perl + +=cut + +# a trans2 script to produce our pretty graduation +my $hsv = <<'EOS'; +y cy - x cx - atan2 pi / 180 * !hue +1 1 x cx / y cy / distance !sat +@hue @sat 1 hsv +EOS + +my $img = Imager::transform2({rpnexpr=>$hsv, width=>600, height=>600}) + or die "transform2 failed: $Imager::ERRSTR"; + +$img->write(file=>'hsvgrad.png', type=>'png') + or die "Write to hsvgrad.png failed: ", $img->errstr; + +# trans2 code to produce RGB tiles +my $rgb = <<'EOS'; +8 !tilesper +w @tilesper / !tilex +h @tilesper / !tiley +x @tilex % @tilex / 255 * !red +y @tiley % @tiley / 255 * !green +x @tilex / int +y @tiley / int @tilesper * + @tilesper @tilesper * / 255 * !blue +@red @green @blue rgb +EOS +$img = Imager::transform2({rpnexpr=>$rgb, width=>600, height=>600}) + or die "transform2 failed: $Imager::ERRSTR"; +$img->write(file=>'rgbtile.png', type=>'png') + or die "write to rgbtile failed: ",$img->errstr; diff --git a/bench/quantbench.perl b/bench/quantbench.perl new file mode 100644 index 00000000..9ce6e28f --- /dev/null +++ b/bench/quantbench.perl @@ -0,0 +1,105 @@ +#!perl -w +use strict; +use Data::Dumper; + +print <> bench/quantbench.log" or die "Cannot open log: $!"; + print LOG "*** $opt ***\n"; + close LOG; + $ENV{IM_CFLAGS} = "-DIM_CF_COPTS -D$qopts{$opt}"; + print "*** $opt configuring"; + system "perl Makefile.PL >>bench/quantbench.log 2>&1" + and die "Failed to configure Imager"; + print " building"; + system "make >>bench/quantbench.log 2>&1" + and die "Failed to build Imager"; + print " benchmarking"; + my @out = `perl -Mblib bench/quantone.perl`; + $? and die "Failed to run benchmark: $?"; + chomp @out; + print "parsing\n"; + my ($image, $tran); + foreach (@out) { + if (/^\*\*\s+(\S+)\s+(\S+)/) { + $image = $1; + $tran = $2; + } + elsif (/^\s*(\w+).*\@\s*([\d.]+)/ or /^\s*(\w+?):.+?([\d.]+?) CPU\)/) { + print "$1: $2\n"; + $bench{$opt}{$image}{$tran}{$1} = $2; + } + elsif (/^Benchmark:/) { + # ignored + } + else { + die "Unknown benchmark output: $_\n"; + } + } +} + +system "uname -srmp >bench/quantbench.txt"; # is -srmp portable? +open BENCH, ">> bench/quantbench.txt" + or die "Cannot open bench/quantbench.txt: $!"; +print BENCH Dumper(\%bench); +close BENCH or die "Cannot close benchmark file: $!"; +print "Please email bench/quantbench.txt to tony\@develop-help.com\n"; + +__END__ + +=head1 NAME + +quantbench.pl - Benchmarks Imager's image quantization code. + +=head1 SYNOPSIS + + perl makegrad.pl + perl quantbench.pl + +=head1 DESCRIPTION + +Builds Imager with various quantization code options, and then times +the results of running with those options, with various palettes and +options. + +The aim is to run this with several options on several platforms, and +see which produces the fastest results overall. + +Requires that PNG and GIF (or ungif) support is present. + +=cut + diff --git a/bench/quantone.perl b/bench/quantone.perl new file mode 100644 index 00000000..34d7280f --- /dev/null +++ b/bench/quantone.perl @@ -0,0 +1,90 @@ +#!perl -w +use Imager; +use Benchmark; + +# actual benchmarking code for quantbench.pl - not intended to be used +# directly + +my %imgs; + +my $out = shift; + +# rgbtile and hsvgrad are both difficult images - they both have +# more than 256 colours +my $img = Imager->new; +$img->open(file=>'bench/rgbtile.png') + or die "Cannot load bench/rgbtile.png:",$img->errstr; +$imgs{rgbtile} = $img; + +$img = Imager->new; +$img->open(file=>'bench/hsvgrad.png') + or die "Cannot load bench/hsvgrad.png:", $img->errstr; +$imgs{hsvgrad} = $img; + +$img = Imager->new; +$img->open(file=>'bench/kscdisplay.png') + or die "Cannot load bench/kscdisplay.png:", $img->errstr; +$imgs{kscdisplay} = $img; + +# I need some other images +for my $key (keys %imgs) { + for my $tran (qw(closest errdiff)) { + my $img = $imgs{$key}; + print "** $key $tran\n"; + timethese(10, + { + addi=>sub { + $img->write(file=>out($out, $key, $tran, 'addi'), type=>'gif', + gifquant=>'gen', make_colors=>'addi', + translate=>$tran) + or die "addi",$img->errstr; + }, + webmap=>sub { + $img->write(file=>out($out, $key, $tran, 'webmap'), + type=>'gif', + gifquant=>'gen', make_colors=>'webmap', + translate=>$tran) + or die "webmap",$img->errstr; + }, + mono=>sub { + $img->write(file=>out($out, $key, $tran, 'mono'), type=>'gif', + gifquant=>'gen', make_colors=>'none', + colors=>[Imager::Color->new(0,0,0), + Imager::Color->new(255,255,255) ], + translate=>$tran) + or die "mono",$img->errstr; + }, + }); + } +} + +sub out { + my ($out, $in, $tran, $pal) = @_; + $out or return '/dev/null'; + return "bench/${out}_${in}_${tran}_$pal.gif"; +} + +__END__ + +=head1 NAME + +quantone.perl - benchmarks image quantization with various options + +=head1 SYNOPSIS + + # just benchmark + perl bench/quantone.perl + # produce output images too + perl bench/quantone.perl prefix + +=head1 DESCRIPTION + +Benchmarks image quantization on some test images, and with various +options. + +The current images are 2 synthesized images (rgbtile.png and +hsvgrad.png), and a cropped photo (kscdisplay.png). + +This program is designed to be run by L. + +=cut diff --git a/bigtest.perl b/bigtest.perl new file mode 100644 index 00000000..1d45f448 --- /dev/null +++ b/bigtest.perl @@ -0,0 +1,113 @@ +#!perl -w +use strict; +# tests Imager with every combination of options +my @opts = qw(jpeg tiff png gif ungif T1-fonts TT-fonts); + +# each option gets a bit +my %bits; +@bits{@opts} = map { 1 << $_ } 0..(@opts-1); + +my $perl = $ENV{PERLBIN} || "perl"; +my $make = $ENV{MAKEBIN} || "make"; +my $makeopts = $ENV{MAKEOPTS} || ''; +use Getopt::Std; +my %opts; +getopts('vd', \%opts); + +my $top = (1 << @opts)-1; + +my @results; + +unlink('testout/bigtest.txt'); +my $total = 0; +my $good = 0; +system("$make clean") if -e 'Makefile' && !$opts{d}; +for my $set (0..$top) { + ++$total; + $ENV{IM_ENABLE} = join(' ', grep($set & $bits{$_}, @opts)); + print STDERR $opts{v} ? "Enable: $ENV{IM_ENABLE}\n" : '.'; + system("echo '****' \$IM_ENABLE >>testout/bigtest.txt"); + if ($opts{d}) { + if (system("$make $makeopts disttest >>testout/bigtest.txt 2>&1")) { + push(@results, [ $ENV{IM_ENABLE}, 'disttest failed' ]); + next; + } + } + else { + unlink 'Makefile'; + if (system("$perl Makefile.PL >>testout/bigtest.txt 2>&1")) { + push(@results, [ $ENV{IM_ENABLE}, 'Makefile.PL failed' ]); + next; + } + if (system("$make $makeopts >>testout/bigtest.txt 2>&1")) { + push(@results, [ $ENV{IM_ENABLE}, 'make failed' ]); + next; + } + if (system("$make test >>testout/bigtest.txt 2>&1")) { + push(@results, [ $ENV{IM_ENABLE}, 'test failed' ]); + next; + } + if (system("$make clean >>testout/bigtest.txt 2>&1")) { + push(@results, [ $ENV{IM_ENABLE}, 'clean failed' ]); + next; + } + } + + push(@results, [ $ENV{IM_ENABLE}, 'success' ]); + ++$good; +} +print STDERR "\n"; +printf("%-20s %-50s\n", "Result", "Options"); +printf("%-20s %-50s\n", "-" x 20, "-" x 50); +foreach my $row (@results) { + printf("%-20s %-50s\n", @$row[1,0]); +} +print "-" x 71, "\n"; +print "Total: $total Successes: $good Failures: ",$total-$good,"\n"; +print "Output in testout/bigtest.txt\n"; + +__END__ + +=head1 NAME + + bigtest.perl - tests combinations of libraries usable by Imager + +=head1 SYNOPSYS + + perl bigtest.perl + # grab a cup of coffee or four - this takes a while + +=head1 DESCRIPTION + +bigtest.perl uses the new IM_ENABLE environment variable of +Makefile.PL to built Imager for all possible combinations of libraries +that Imager uses. + +At the time of writing this is 128 combinations, which takes quite a +while. + +=head1 OPTIONS + + -v - verbose output + + -d - perform disttest for each combination + +=head1 ENVIRONMENT VARIABLES + +PERLBIN - the perl binary to use + +MAKEBIN - the make binary to use + +Any other variables used by Imager's Makefile.PL, except for IM_MANUAL +or IM_ENABLE. + +=head1 BUGS + +Doesn't test other possible options, like IM_NOLOG or IM_DEBUG_MALLOC. + +=head1 AUTHOR + +Tony Cook + +=cut + diff --git a/conv.c b/conv.c new file mode 100644 index 00000000..b69a05ee --- /dev/null +++ b/conv.c @@ -0,0 +1,68 @@ +#include "image.h" + +/* + General convolution for 2d decoupled filters + end effects are acounted for by increasing + scaling the result with the sum of used coefficients + + coeff: (float array) coefficients for filter + len: length of filter.. number of coefficients + note that this has to be an odd number + (since the filter is even); +*/ + +void +i_conv(i_img *im,float *coeff,int len) { + int i,l,c,ch,center; + float pc; + i_color rcolor; + float res[11]; + i_img timg; + + mm_log((1,"i_conv(im* 0x%x,coeff 0x%x,len %d)\n",im,coeff,len)); + + i_img_empty_ch(&timg,im->xsize,im->ysize,im->channels); + + center=(len-1)/2; + + + for(l=0;lysize;l++) { + for(i=0;ixsize;i++) { + pc=0.0; + for(ch=0;chchannels;ch++) res[ch]=0; + for(c=0;cchannels;ch++) res[ch]+=(float)(rcolor.channel[ch])*coeff[c]; + pc+=coeff[c]; + } + for(ch=0;chchannels;ch++) rcolor.channel[ch]=(unsigned char)(((res[ch]/pc>255.0)?255.0:res[ch]/pc)); + i_ppix(&timg,i,l,&rcolor); + } + } + + for(l=0;lxsize;l++) + { + for(i=0;iysize;i++) + { + pc=0.0; + for(ch=0;chchannels;ch++) res[ch]=0; + for(c=0;cchannels;ch++) res[ch]+=(float)(rcolor.channel[ch])*coeff[c]; + pc+=coeff[c]; + } + for(ch=0;chchannels;ch++) rcolor.channel[ch]=(unsigned char)(((res[ch]/(float)(pc)>255.0)?255.0:res[ch]/(float)(pc))); + i_ppix(im,l,i,&rcolor); + } + } +} + + + + + + + + + diff --git a/datatypes.c b/datatypes.c new file mode 100644 index 00000000..fd13e200 --- /dev/null +++ b/datatypes.c @@ -0,0 +1,255 @@ +#include "io.h" +#include "datatypes.h" +#include +#include + + + +/* + 2d bitmask with test and set operations +*/ + +struct i_bitmap* +btm_new(int xsize,int ysize) { + int i; + struct i_bitmap *btm; + btm=(struct i_bitmap*)mymalloc(sizeof(struct i_bitmap)); + btm->data=(char*)mymalloc((xsize*ysize+8)/8); + btm->xsize=xsize; + btm->ysize=ysize; + for(i=0;i<(xsize*ysize+8)/8;i++) btm->data[i]=0; /* Is this always needed */ + return btm; +} + + +void +btm_destroy(struct i_bitmap *btm) { + myfree(btm->data); + myfree(btm); +} + + +int +btm_test(struct i_bitmap *btm,int x,int y) { + int btno; + if (x<0 || x>btm->xsize-1 || y<0 || y>btm->ysize-1) return 0; + btno=btm->xsize*y+x; + return (1<<(btno%8))&(btm->data[btno/8]); +} + +void +btm_set(struct i_bitmap *btm,int x,int y) { + int btno; + btno=btm->xsize*y+x; + btm->data[btno/8]|=1<<(btno%8); +} + + + + + +/* + Linked list - stack type +*/ + +struct llink * +llink_new(struct llink* p,int size) { + struct llink *l; + l=(struct llink*)mymalloc(sizeof(struct llink)); + l->n=NULL; + l->p=p; + l->fill=0; + l->data=(void*)mymalloc(size); + return l; +} + +/* free's the data pointer, itself, and sets the previous' next pointer to null */ + +void +llink_destroy(struct llink* l) { + if (l->p != NULL) { l->p->n=NULL; } + myfree(l->data); + myfree(l); +} + + +/* if it returns true there wasn't room for the + item on the link */ + +int +llist_llink_push(struct llist *lst, struct llink *lnk,void *data) { + int multip; + multip=lst->multip; + + /* fprintf(stderr,"llist_llink_push: data=0x%08X -> 0x%08X\n",data,*(int*)data); + fprintf(stderr,"ssize = %d, multip = %d, fill = %d\n",lst->ssize,lst->multip,lnk->fill); */ + if (lnk->fill == lst->multip) return 1; + /* memcpy((char*)(lnk->data)+lnk->fill*lst->ssize,data,lst->ssize); */ + memcpy((char*)(lnk->data)+lnk->fill*lst->ssize,data,lst->ssize); + + /* printf("data=%X res=%X\n",*(int*)data,*(int*)(lnk->data));*/ + lnk->fill++; + lst->count++; + return 0; +} + +struct llist * +llist_new(int multip, int ssize) { + struct llist *l; + l=(struct llist*)mymalloc(sizeof(struct llist)); + l->h=l->t=NULL; + l->multip=multip; + l->ssize=ssize; + l->count=0; + return l; +} + +void +llist_push(struct llist *l,void *data) { + int ssize=l->ssize; + int multip=l->multip; + + /* fprintf(stderr,"llist_push: data=0x%08X\n",data); */ + + if (l->t == NULL) l->t=l->h=llink_new(NULL,ssize*multip); /* Tail is empty - list is empty */ + else { /* Check for overflow in current tail */ + if (l->t->fill >= l->multip) { + struct llink* nt=llink_new(l->t,ssize*multip); + l->t->n=nt; + l->t=nt; + /* fprintf(stderr,"Chain extended\n"); */ + } + } + /* fprintf(stderr,"0x%08X\n",l->t); */ + if (llist_llink_push(l,l->t,data)) { fprintf(stderr,"DARN!\n"); } +} + +/* returns 0 if the list is empty */ + +int +llist_pop(struct llist *l,void *data) { + /* int ssize=l->ssize; + int multip=l->multip;*/ + if (l->t == NULL) return 0; + l->t->fill--; + l->count--; + /* memcpy(data,(char*)(l->t->data)+l->ssize*l->t->fill,l->ssize); */ + memcpy(data,(char*)(l->t->data)+l->ssize*l->t->fill,l->ssize); + + if (!l->t->fill) { /* This link empty */ + if (l->t->p == NULL) l->h=l->t=NULL; /* and it's the only link */ + else { + l->t=l->t->p; + llink_destroy(l->t->n); + } + } + return 1; +} + +void +llist_dump(struct llist *l) { + int k,j; + int i=0; + struct llink *lnk; + lnk=l->h; + while(lnk != NULL) { + for(j=0;jfill;j++) { + /* memcpy(&k,(char*)(lnk->data)+l->ssize*j,sizeof(void*));*/ + memcpy(&k,(char*)(lnk->data)+l->ssize*j,sizeof(void*)); + printf("%d - %X\n",i,k); + i++; + } + lnk=lnk->n; + } +} + +void +llist_destroy(struct llist *l) { + struct llink *t,*lnk = l->h; + while( lnk != NULL ) { + t=lnk; + lnk=lnk->n; + myfree(t); + } + myfree(l); +} + + + + + + +/* + Oct-tree implementation +*/ + +struct octt * +octt_new() { + int i; + struct octt *t; + + t=(struct octt*)mymalloc(sizeof(struct octt)); + for(i=0;i<8;i++) t->t[i]=NULL; + t->cnt=0; + return t; +} + + +/* returns 1 if the colors wasn't in the octtree already */ + + +int +octt_add(struct octt *ct,unsigned char r,unsigned char g,unsigned char b) { + struct octt *c; + int i,cm; + int ci,idx[8]; + int rc; + rc=0; + c=ct; + /* printf("[r,g,b]=[%d,%d,%d]\n",r,g,b); */ + ct->cnt++; + for(i=7;i>-1;i--) { + cm=1<t[ci] == NULL) { c->t[ci]=octt_new(); rc=1; } + c=c->t[ci]; + c->cnt++; + idx[i]=ci; + } + return rc; +} + + +void +octt_delete(struct octt *ct) { + int i; + for(i=0;i<8;i++) if (ct->t[i] != NULL) octt_delete(ct->t[i]); /* do not free instance here because it will free itself */ + myfree(ct); +} + + +void +octt_dump(struct octt *ct) { + int i; + /* printf("node [0x%08X] -> (%d)\n",ct,ct->cnt); */ + for(i=0;i<8;i++) if (ct->t[i] != NULL) printf("[ %d ] -> 0x%08X\n",i,(unsigned int)ct->t[i]); + for(i=0;i<8;i++) if (ct->t[i] != NULL) octt_dump(ct->t[i]); +} + +/* note that all calls of octt_count are operating on the same overflow + variable so all calls will know at the same time if an overflow + has occured and stops there. */ + +void +octt_count(struct octt *ct,int *tot,int max,int *overflow) { + int i,c; + c=0; + if (!(*overflow)) return; + for(i=0;i<8;i++) if (ct->t[i]!=NULL) { + octt_count(ct->t[i],tot,max,overflow); + c++; + } + if (!c) (*tot)++; + if ( (*tot) > (*overflow) ) *overflow=0; +} diff --git a/datatypes.h b/datatypes.h new file mode 100644 index 00000000..1f18bf51 --- /dev/null +++ b/datatypes.h @@ -0,0 +1,122 @@ +#ifndef _DATATYPES_H_ +#define _DATATYPES_H_ + +#include "io.h" + +#define MAXCHANNELS 4 + +typedef struct { unsigned char gray_color; } gray_color; +typedef struct { unsigned char r,g,b; } rgb_color; +typedef struct { unsigned char r,g,b,a; } rgba_color; +typedef struct { unsigned char c,m,y,k; } cmyk_color; + +typedef int undef_int; /* special value to put in typemaps to retun undef on 0 and 1 on 1 */ + +typedef union { + gray_color gray; + rgb_color rgb; + rgba_color rgba; + cmyk_color cmyk; + unsigned char channel[MAXCHANNELS]; + unsigned int ui; +} i_color; + + +struct _i_img { + int channels; + int xsize,ysize,bytes; + unsigned char *data; + unsigned int ch_mask; + + int (*i_f_ppix) (struct _i_img *,int,int,i_color *); + int (*i_f_gpix) (struct _i_img *,int,int,i_color *); + void *ext_data; +}; + +typedef struct _i_img i_img; + +/* used for palette indices in some internal code (which might be + exposed at some point +*/ +typedef unsigned char i_palidx; + +/* Helper datatypes + The types in here so far are: + + doubly linked bucket list - pretty efficient + octtree - no idea about goodness + + needed: hashes. + +*/ + + + + + +/* bitmap mask */ + +struct i_bitmap { + int xsize,ysize; + char *data; +}; + +struct i_bitmap* btm_new(int xsize,int ysize); +void btm_destroy(struct i_bitmap *btm); +int btm_test(struct i_bitmap *btm,int x,int y); +void btm_set(struct i_bitmap *btm,int x,int y); + + + + + + + + +/* Stack/Linked list */ + +struct llink { + struct llink *p,*n; + void *data; + int fill; /* Number used in this link */ +}; + +struct llist { + struct llink *h,*t; + int multip; /* # of copies in a single chain */ + int ssize; /* size of each small element */ + int count; /* number of elements on the list */ +}; + + +/* Links */ + +struct llink *llink_new( struct llink* p,int size ); +int llist_llink_push( struct llist *lst, struct llink *lnk, void *data ); + +/* Lists */ + +struct llist *llist_new( int multip, int ssize ); +void llist_destroy( struct llist *l ); +void llist_push( struct llist *l, void *data ); +void llist_dump( struct llist *l ); +int llist_pop( struct llist *l,void *data ); + + + + +/* Octtree */ + +struct octt { + struct octt *t[8]; + int cnt; +}; + +struct octt *octt_new(); +int octt_add(struct octt *ct,unsigned char r,unsigned char g,unsigned char b); +void octt_dump(struct octt *ct); +void octt_count(struct octt *ct,int *tot,int max,int *overflow); +void octt_delete(struct octt *ct); + +#endif + diff --git a/doco.perl b/doco.perl new file mode 100755 index 00000000..dd195975 --- /dev/null +++ b/doco.perl @@ -0,0 +1,76 @@ +#!/usr/bin/perl -w + +use Cwd; + +# doco.perl - 24 Jan 18:09:40 EST 2001 +# Addi - (addi@umich.edu) +# +# Extract documentation and help from the source files +# +# -f list FIXME comments for files +# -f list FIXME comments for all files +# -d list pod comments from file + +my $comm = shift or USAGE(); + +if ($comm eq "-f") { + if (!@ARGV) { + getfiles(); + @files = @CFILES; + } + + for my $file (@files) { + local(*FH, $/); open(FH,"$BASE/$file") or die $!; + my $data = ; close(FH); + while( $data =~ m/FIXME:(.*?)\*\//sg ) { + printf("%10.10s:%5d %s\n", $file, ptol($data, pos($data)), $1); + } + } + exit(0); +} + +if ($comm eq "-d") { + USAGE() if !@ARGV; + my $file = shift; + getfiles(); + local(*FH, $/); open(FH, "$BASE/$file") or die $!; + my $data = ; close(FH); + $data =~ s/^(=item)/\n$1/mg; + $data =~ s/^(=cut)/\n~~~~~~~~\n\n$1\n\n/mg; + print "\n"; + open(FH,"|pod2text ") or die "Cannot run pod2text: $!\n"; + print FH $data; + close(FH); + exit(2); +} + + +sub USAGE { + +print<<'EOF'; +doco.perl [-f files| stuff] + + -f list FIXME comments for files. + -f list FIXME comments for all files. + +EOF + exit; +} + +sub getfiles { + $BASE=cwd; + local(*FH); + open(FH,"$BASE/MANIFEST") or die "Cannot open MANIFEST file: $!\n"; + my @MANIFEST = ; + chomp(@MANIFEST); + @CFILES = grep { m/\.c\s*$/ } @MANIFEST; +} + +# string position to line number in string + +sub ptol { + my ($str, $pos) = @_; + my $lcnt=1; + $lcnt++ while(substr($str,0,$pos)=~m/\n/g); + $lcnt; +} diff --git a/draw.c b/draw.c new file mode 100644 index 00000000..6b1f5a66 --- /dev/null +++ b/draw.c @@ -0,0 +1,859 @@ +#include "image.h" +#include "draw.h" +#include "log.h" + +void +i_mmarray_cr(i_mmarray *ar,int l) { + int i; + + ar->lines=l; + ar->data=mymalloc(sizeof(minmax)*l); + for(i=0;idata[i].max=-1; ar->data[i].min=MAXINT; } +} + +void +i_mmarray_dst(i_mmarray *ar) { + ar->lines=0; + if (ar->data != NULL) { myfree(ar->data); ar->data=NULL; } +} + +void +i_mmarray_add(i_mmarray *ar,int x,int y) { + if (y>-1 && ylines) + { + if (xdata[y].min) ar->data[y].min=x; + if (x>ar->data[y].max) ar->data[y].max=x; + } +} + +int +i_mmarray_gmin(i_mmarray *ar,int y) { + if (y>-1 && ylines) return ar->data[y].min; + else return -1; +} + +int +i_mmarray_getm(i_mmarray *ar,int y) { + if (y>-1 && ylines) return ar->data[y].max; + else return MAXINT; +} + +void +i_mmarray_render(i_img *im,i_mmarray *ar,i_color *val) { + int i,x; + for(i=0;ilines;i++) if (ar->data[i].max!=-1) for(x=ar->data[i].min;xdata[i].max;x++) i_ppix(im,x,i,val); +} + + +static +void +i_arcdraw(int x1, int y1, int x2, int y2, i_mmarray *ar) { + double alpha; + double dsec; + int temp; + alpha=(double)(y2-y1)/(double)(x2-x1); + if (fabs(alpha)<1) + { + if (x2lines;i++) + if (ar->data[i].max!=-1) printf("line %d: min=%d, max=%d.\n",i,ar->data[i].min,ar->data[i].max); +} + + +void +i_arc(i_img *im,int x,int y,float rad,float d1,float d2,i_color *val) { + i_mmarray dot; + float f,fx,fy; + int x1,y1; + + mm_log((1,"i_arc(im* 0x%x,x %d,y %d,rad %.2f,d1 %.2f,d2 %.2f,val 0x%x)\n",im,x,y,rad,d1,d2,val)); + + i_mmarray_cr(&dot,im->ysize); + + x1=(int)(x+0.5+rad*cos(d1*PI/180.0)); + y1=(int)(y+0.5+rad*sin(d1*PI/180.0)); + fx=(float)x1; fy=(float)y1; + + /* printf("x1: %d.\ny1: %d.\n",x1,y1); */ + i_arcdraw(x, y, x1, y1, &dot); + + x1=(int)(x+0.5+rad*cos(d2*PI/180.0)); + y1=(int)(y+0.5+rad*sin(d2*PI/180.0)); + + for(f=d1;f<=d2;f+=0.01) i_mmarray_add(&dot,(int)(x+0.5+rad*cos(f*PI/180.0)),(int)(y+0.5+rad*sin(f*PI/180.0))); + + /* printf("x1: %d.\ny1: %d.\n",x1,y1); */ + i_arcdraw(x, y, x1, y1, &dot); + + /* dot.info(); */ + i_mmarray_render(im,&dot,val); +} + +void +i_box(i_img *im,int x1,int y1,int x2,int y2,i_color *val) { + int x,y; + mm_log((1,"i_box(im* 0x%x,x1 %d,y1 %d,x2 %d,y2 %d,val 0x%x)\n",im,x1,y1,x2,y2,val)); + for(x=x1;xabs(dy)) { /* alpha < 1 */ + if (x2channels;ch++) tval.channel[ch]=(unsigned char)(dfrac*(float)tval.channel[ch]+(1-dfrac)*(float)val->channel[ch]); + i_ppix(im,x1,isec,&tval); + + i_gpix(im,x1,isec+1,&tval); + for(ch=0;chchannels;ch++) tval.channel[ch]=(unsigned char)((1-dfrac)*(float)tval.channel[ch]+dfrac*(float)val->channel[ch]); + i_ppix(im,x1,isec+1,&tval); + + dsec+=alpha; + x1++; + } + } else { + if (y2channels;ch++) tval.channel[ch]=(unsigned char)(dfrac*(float)tval.channel[ch]+(1-dfrac)*(float)val->channel[ch]); + i_ppix(im,isec,y1,&tval); + + i_gpix(im,isec+1,y1,&tval); + for(ch=0;chchannels;ch++) tval.channel[ch]=(unsigned char)((1-dfrac)*(float)tval.channel[ch]+dfrac*(float)val->channel[ch]); + i_ppix(im,isec+1,y1,&tval); + + dsec+=alpha; + y1++; + } + } +} + +double +perm(int n,int k) { + double r; + int i; + r=1; + for(i=k+1;i<=n;i++) r*=i; + for(i=1;i<=(n-k);i++) r/=i; + return r; +} + + +/* Note in calculating t^k*(1-t)^(n-k) + we can start by using t^0=1 so this simplifies to + t^0*(1-t)^n - we want to multiply that with t/(1-t) each iteration + to get a new level - this may lead to errors who knows lets test it */ + +void +i_bezier_multi(i_img *im,int l,double *x,double *y,i_color *val) { + double *bzcoef; + double t,cx,cy; + int k,i; + int lx = 0,ly = 0; + int n=l-1; + double itr,ccoef; + + + bzcoef=mymalloc(sizeof(double)*l); + for(k=0;k %f\n",k,bzcoef[k]); */ + i=0; + for(t=0;t<=1;t+=0.005) { + cx=cy=0; + itr=t/(1-t); + ccoef=pow(1-t,n); + for(k=0;k (%d,%d)\n",t,(int)(0.5+cx),(int)(0.5+cy)); */ + if (i++) { + i_line_aa(im,lx,ly,(int)(0.5+cx),(int)(0.5+cy),val); + } + /* i_ppix(im,(int)(0.5+cx),(int)(0.5+cy),val); */ + lx=(int)(0.5+cx); + ly=(int)(0.5+cy); + } + ICL_info(val); + myfree(bzcoef); +} + + + +/* Flood fill + + REF: Graphics Gems I. page 282+ + +*/ + + + + + + + + + + + + + + + + +/* This should be moved into a seperate file? */ + +/* This is the truncation used: + + a double is multiplied by 16 and then truncated. + This means that 0 -> 0 + So a triangle of (0,0) (10,10) (10,0) Will look like it's + not filling the (10,10) point nor the (10,0)-(10,10) line segment + +*/ + + + + +#define IMTRUNC(x) ((int)(x*16)) + + +/* +typedef struct { + short ms,ls; +} pcord; +*/ + +typedef int pcord; + +struct p_point { + int n; + pcord x,y; +}; + +struct p_line { + int n; + pcord x1,y1; + pcord x2,y2; + pcord miny,maxy; +}; + +struct p_slice { + int n; + double x; +}; + +int +p_compy(const struct p_point *p1, const struct p_point *p2) { + if (p1->y > p2->y) return 1; + if (p1->y < p2->y) return -1; + return 0; +} + +int +p_compx(const struct p_slice *p1, const struct p_slice *p2) { + if (p1->x > p2->x) return 1; + if (p1->x < p2->x) return -1; + return 0; +} + +/* Change this to int? and round right goddamn it! */ + +double +p_eval_aty(struct p_line *l,pcord y) { + int t; + t=l->y2-l->y1; + if (t) return ( (y-l->y1)*l->x2 + (l->y2-y)*l->x1 )/t; + return (l->x1+l->x2)/2.0; +} + +double +p_eval_atx(struct p_line *l,pcord x) { + int t; + t=l->x2-l->x1; + if (t) return ( (x-l->x1)*l->y2 + (l->x2-x)*l->y1 )/t; + return (l->y1+l->y2)/2.0; +} + + +/* Algorithm to count the pixels covered by line going through pixel (x,y) + in coarse coords. +*/ + +/* +static int +p_eval_coverage(struct p_line *l, int lc, int x, pcord y1, pcord y2) { + + return 0; +} +*/ + + +/* Antialiasing polygon algorithm + specs: + 1. only nice polygons - no crossovers + 2. 1/16 pixel resolution # previously - floating point co-ordinates + 3. full antialiasing ( complete spectrum of blends ) + 4. uses hardly any memory + 5. no subsampling phase + + For each interval we must: + 1. find which lines are in it + 2. order the lines from in increasing x order. + since we are assuming no crossovers it is sufficent + to check a single point on each line. +*/ + +/* + Terms: + + 1. Interval: A vertical segment in which no lines cross nor end. + 2. Scanline: A physical line, contains 16 subpixels in the horizontal direction + 3. Slice: A start stop line pair. + + */ + +/* Templine logic: + + The variable tempflush describes if there is anything in the templine array or not. + + if tempflush is 0 then the array is clean. + if tempflush is 1 then the array contains a partial filled scanline + + */ + +/* Rendering of a single start stop pair: + +?? REWRITE + + The rendering is split in three parts + 1. From the first start pixel to the first stop pixel + 2. Area from the first end pixel to the last start pixel + 3. Area from the first end pixel to the last start pixel + + */ + + +void +i_poly_aa(i_img *im,int l,double *x,double *y,i_color *val) { + int i,k; /* Index variables */ + int clc; /* Index of next item on interval linelist */ + int tx; /* Coarse x coord within a scanline */ + pcord miny,maxy; /* Min and max values of the current slice in the subcord system */ + pcord minacy,maxacy; /* Min and max values of the current scanline bounded by the slice + in the subcord system */ + int cscl; /* Current scanline */ + pcord cc; /* Current vertical centerpoint of interval */ + int mt1,mt2; + int minsx,minex,maxsx,maxex; /* The horizontal stretches of the lines beloning to the current slice within a scanline */ + int *templine; /* Line accumulator */ + + struct p_point *pset; /* List of points in polygon */ + struct p_line *lset; /* List of lines in polygon */ + struct p_slice *tllist; /* List of slices */ + + i_color red,blue,yellow; + red.rgb.r=255; + red.rgb.g=0; + red.rgb.b=0; + + blue.rgb.r=0; + blue.rgb.g=0; + blue.rgb.b=255; + + yellow.rgb.r=255; + yellow.rgb.g=255; + yellow.rgb.b=255; + + if ( (pset=mymalloc(sizeof(struct p_point)*l)) == NULL) { m_fatal(2,"malloc failed\n"); return; } + if ( (lset=mymalloc(sizeof(struct p_line)*l)) == NULL) { m_fatal(2,"malloc failed\n"); return; } + if ( (tllist=mymalloc(sizeof(struct p_slice)*l)) == NULL) { m_fatal(2,"malloc failed\n"); return; } + if ( (templine=mymalloc(sizeof(int)*im->xsize)) == NULL) { m_fatal(2,"malloc failed\n"); return; } + + /* insert the lines into the line list */ + + for(i=0;i (%d , %d) yspan ( %d , %d )\n",i,lset[i].n,lset[i].x1,lset[i].y1,lset[i].x2,lset[i].y2,lset[i].miny,lset[i].maxy); + } + + printf("MAIN LOOP\n\n"); + + /* Zero templine buffer */ + /* Templine buffer flushed everytime a scan line ends */ + for(i=0;ixsize;i++) templine[i]=0; + + + /* loop on intervals */ + for(i=0;i (%d, %d) yspan ( %d , %d )", + k,lset[k].n,lset[k].x1,lset[k].y1,lset[k].x2,lset[k].y2,lset[k].miny,lset[k].maxy); + if (cc >= lset[k].miny && cc <= lset[k].maxy) { + if (lset[k].miny == lset[k].maxy) printf(" HORIZONTAL - skipped\n"); + else { + printf(" INSIDE\n"); + tllist[clc].x=p_eval_aty(&lset[k],cc); + tllist[clc++].n=k; + } + } else printf(" OUTSIDE\n"); + } + + /* + at this point a table of pixels that need special care should + be generated from the line list - it should be ordered so that only + one needs to be checked - options: rendering to a list then order - or + rendering in the right order might be possible to do nicely with the + following heuristic: + + 1. Draw leftmost pixel for this line + 2. If preceeding pixel was occupied check next one else go to 1 again. + */ + + printf("lines in current interval:"); + for(k=0;kmyLx=left; + ste->myRx=right; + ste->dadLx=dadl; + ste->dadRx=dadr; + ste->myY=y; + ste->myDirection=dir; + return ste; +} + +/* i_ccomp compares two colors and gives true if they are the same */ + +static int +i_ccomp(i_color *val1,i_color *val2,int ch) { + int i; + for(i=0;ichannel[i] !=val2->channel[i]) return 0; + return 1; +} + + +static int +i_lspan(i_img *im,int seedx,int seedy,i_color *val) { + i_color cval; + while(1) { + if (seedx-1 < 0) break; + i_gpix(im,seedx-1,seedy,&cval); + if (!i_ccomp(val,&cval,im->channels)) break; + seedx--; + } + return seedx; +} + +static int +i_rspan(i_img *im,int seedx,int seedy,i_color *val) { + i_color cval; + while(1) { + if (seedx+1 > im->xsize-1) break; + i_gpix(im,seedx+1,seedy,&cval); + if (!i_ccomp(val,&cval,im->channels)) break; + seedx++; + } + return seedx; +} + +/* Macro to create a link and push on to the list */ + +#define ST_PUSH(left,right,dadl,dadr,y,dir) { struct stack_element *s=crdata(left,right,dadl,dadr,y,dir); llist_push(st,&s);} + +/* pops the shadow on TOS into local variables lx,rx,y,direction,dadLx and dadRx */ +/* No overflow check! */ + +#define ST_POP() { struct stack_element *s; llist_pop(st,&s); lx=s->myLx; rx=s->myRx; dadLx=s->dadLx; dadRx=s->dadRx; y=s->myY; direction=s->myDirection; myfree(s); } + +#define ST_STACK(dir,dadLx,dadRx,lx,rx,y) { int pushrx=rx+1; int pushlx=lx-1; ST_PUSH(lx,rx,pushlx,pushrx,y+dir,dir); if (rx > dadRx) ST_PUSH(dadRx+1,rx,pushlx,pushrx,y-dir,-dir); if (lx < dadLx) ST_PUSH(lx,dadLx-1,pushlx,pushrx,y-dir,-dir); } + +#define SET(x,y) btm_set(btm,x,y); + +#define INSIDE(x,y) ((!btm_test(btm,x,y) && ( i_gpix(im,x,y,&cval),i_ccomp(&val,&cval,channels) ) )) + +void +i_flood_fill(i_img *im,int seedx,int seedy,i_color *dcol) { + + int lx,rx; + int y; + int direction; + int dadLx,dadRx; + + int wasIn=0; + int x=0; + + /* int tx,ty; */ + + int bxmin=seedx,bxmax=seedx,bymin=seedy,bymax=seedy; + + struct llist *st; + struct i_bitmap *btm; + + int channels,xsize,ysize; + i_color cval,val; + + channels=im->channels; + xsize=im->xsize; + ysize=im->ysize; + + btm=btm_new(xsize,ysize); + st=llist_new(100,sizeof(struct stack_element*)); + + /* Get the reference color */ + i_gpix(im,seedx,seedy,&val); + + /* Find the starting span and fill it */ + lx=i_lspan(im,seedx,seedy,&val); + rx=i_rspan(im,seedx,seedy,&val); + + /* printf("span: %d %d \n",lx,rx); */ + + for(x=lx;x<=rx;x++) SET(x,seedy); + + ST_PUSH(lx,rx,lx,rx,seedy+1,1); + ST_PUSH(lx,rx,lx,rx,seedy-1,-1); + + while(st->count) { + ST_POP(); + + if (y<0 || y>ysize-1) continue; + + if (bymin > y) bymin=y; /* in the worst case an extra line */ + if (bymax < y) bymax=y; + + /* printf("start of scan - on stack : %d \n",st->count); */ + + + /* printf("lx=%d rx=%d dadLx=%d dadRx=%d y=%d direction=%d\n",lx,rx,dadLx,dadRx,y,direction); */ + + /* + printf(" "); + for(tx=0;tx 0) { + SET(lx,y); + lx--; + } + } + + if (bxmin > lx) bxmin=lx; + + while(x <= xsize-1) { + /* printf("x=%d\n",x); */ + if (wasIn) { + + if (INSIDE(x,y)) { + /* case 1: was inside, am still inside */ + SET(x,y); + } else { + /* case 2: was inside, am no longer inside: just found the + right edge of a span */ + ST_STACK(direction,dadLx,dadRx,lx,(x-1),y); + + if (bxmax < x) bxmax=x; + + wasIn=0; + } + } else { + if (x>rx) goto EXT; + if (INSIDE(x,y)) { + SET(x,y); + /* case 3: Wasn't inside, am now: just found the start of a new run */ + wasIn=1; + lx=x; + } else { + /* case 4: Wasn't inside, still isn't */ + } + } + x++; + } + EXT: /* out of loop */ + if (wasIn) { + /* hit an edge of the frame buffer while inside a run */ + ST_STACK(direction,dadLx,dadRx,lx,(x-1),y); + if (bxmax < x) bxmax=x; + } + } + + /* printf("lx=%d rx=%d dadLx=%d dadRx=%d y=%d direction=%d\n",lx,rx,dadLx,dadRx,y,direction); + printf("bounding box: [%d,%d] - [%d,%d]\n",bxmin,bymin,bxmax,bymax); */ + + for(y=bymin;y<=bymax;y++) for(x=bxmin;x<=bxmax;x++) if (btm_test(btm,x,y)) i_ppix(im,x,y,dcol); + + btm_destroy(btm); + llist_destroy(st); +} diff --git a/draw.h b/draw.h new file mode 100644 index 00000000..3856733a --- /dev/null +++ b/draw.h @@ -0,0 +1,24 @@ +#include "image.h" + +typedef struct { + int min,max; +} minmax; + +typedef struct { + minmax *data; + int lines; +} i_mmarray; + +/* FIXME: Merge this into datatypes.{c,h} */ + +void i_mmarray_cr(i_mmarray *ar,int l); +void i_mmarray_dst(i_mmarray *ar); +void i_mmarray_add(i_mmarray *ar,int x,int y); +int i_mmarray_gmin(i_mmarray *ar,int y); +int i_mmarray_getm(i_mmarray *ar,int y); +void i_mmarray_render(i_img *im,i_mmarray *ar,i_color *val); +static void i_arcdraw(int x1, int y1, int x2, int y2, i_mmarray *ar); +void i_mmarray_info(i_mmarray *ar); +void i_arc(i_img *im,int x,int y,float rad,float d1,float d2,i_color *val); +void i_box(i_img *im,int x0,int y0,int x1,int y1,i_color *val); +void i_draw(i_img *im,int x1,int y1,int x2,int y2,i_color *val); diff --git a/dynaload.c b/dynaload.c new file mode 100644 index 00000000..b5486a53 --- /dev/null +++ b/dynaload.c @@ -0,0 +1,301 @@ +#include "dynaload.h" +#include "XSUB.h" /* so we can compile on threaded perls */ + +/* These functions are all shared - then comes platform dependant code */ + + +int getstr(void *hv_t,char *key,char **store) { + SV** svpp; + HV* hv=(HV*)hv_t; + + mm_log((1,"getstr(hv_t 0x%X, key %s, store 0x%X)\n",hv_t,key,store)); + + if ( !hv_exists(hv,key,strlen(key)) ) return 0; + + svpp=hv_fetch(hv, key, strlen(key), 0); + *store=SvPV(*svpp, PL_na ); + + return 1; +} + +int getint(void *hv_t,char *key,int *store) { + SV** svpp; + HV* hv=(HV*)hv_t; + + mm_log((1,"getint(hv_t 0x%X, key %s, store 0x%X)\n",hv_t,key,store)); + + if ( !hv_exists(hv,key,strlen(key)) ) return 0; + + svpp=hv_fetch(hv, key, strlen(key), 0); + *store=(int)SvIV(*svpp); + return 1; +} + +int getdouble(void *hv_t,char* key,double *store) { + SV** svpp; + HV* hv=(HV*)hv_t; + + mm_log((1,"getdouble(hv_t 0x%X, key %s, store 0x%X)\n",hv_t,key,store)); + + if ( !hv_exists(hv,key,strlen(key)) ) return 0; + svpp=hv_fetch(hv, key, strlen(key), 0); + *store=(float)SvNV(*svpp); + return 1; +} + +int getvoid(void *hv_t,char* key,void **store) { + SV** svpp; + HV* hv=(HV*)hv_t; + + mm_log((1,"getvoid(hv_t 0x%X, key %s, store 0x%X)\n",hv_t,key,store)); + + if ( !hv_exists(hv,key,strlen(key)) ) return 0; + + svpp=hv_fetch(hv, key, strlen(key), 0); + *store=(void*)SvIV(*svpp); + + return 1; +} + +int getobj(void *hv_t,char *key,char *type,void **store) { + SV** svpp; + HV* hv=(HV*)hv_t; + + mm_log((1,"getobj(hv_t 0x%X, key %s,type %s, store 0x%X)\n",hv_t,key,type,store)); + + if ( !hv_exists(hv,key,strlen(key)) ) return 0; + + svpp=hv_fetch(hv, key, strlen(key), 0); + + if (sv_derived_from(*svpp,type)) { + IV tmp = SvIV((SV*)SvRV(*svpp)); + *store = (void*) tmp; + } else { + mm_log((1,"getobj: key exists in hash but is not of correct type")); + return 0; + } + + return 1; +} + + +UTIL_table_t UTIL_table={getstr,getint,getdouble,getvoid,getobj}; +extern symbol_table_t symbol_table; + +/* + Dynamic loading works like this: + dynaload opens the shared object and + loads all the functions into an array of functions + it returns a string from the dynamic function that + can be supplied to the parser for evaling. +*/ + +void +DSO_call(DSO_handle *handle,int func_index,HV* hv) { + mm_log((1,"DSO_call(handle 0x%X, func_index %d, hv 0x%X)\n",handle,func_index,hv)); + (handle->function_list[func_index].iptr)((void*)hv); +} + + +#if defined( OS_hpux ) + +void* +DSO_open(char* file,char** evalstring) { + shl_t tt_handle; + void *d_handle,**plugin_symtab,**plugin_utiltab; + int rc,*iptr, (*fptr)(int); + func_ptr *function_list; + DSO_handle *dso_handle; + void (*f)(void *s,void *u); /* these will just have to be void for now */ + int i; + + *evalstring=NULL; + + mm_log( (1,"DSO_open(file '%s' (0x%08X), evalstring 0x%08X)\n",file,file,evalstring) ); + + if ( (tt_handle = shl_load(file, BIND_DEFERRED,0L)) == NULL) return NULL; + if ( (shl_findsym(&tt_handle, I_EVALSTR,TYPE_UNDEFINED,(void*)evalstring))) return NULL; + + /* + if ( (shl_findsym(&tt_handle, "symbol_table",TYPE_UNDEFINED,(void*)&plugin_symtab))) return NULL; + if ( (shl_findsym(&tt_handle, "util_table",TYPE_UNDEFINED,&plugin_utiltab))) return NULL; + (*plugin_symtab)=&symbol_table; + (*plugin_utiltab)=&UTIL_table; + */ + + if ( (shl_findsym(&tt_handle, I_INSTALL_TABLES ,TYPE_UNDEFINED, &f ))) return NULL; + + mm_log( (1,"Calling install_tables\n") ); + f(&symbol_table,&UTIL_table); + mm_log( (1,"Call ok.\n") ); + + if ( (shl_findsym(&tt_handle, I_FUNCTION_LIST ,TYPE_UNDEFINED,(func_ptr*)&function_list))) return NULL; + if ( (dso_handle=(DSO_handle*)malloc(sizeof(DSO_handle))) == NULL) return NULL; + + dso_handle->handle=tt_handle; /* needed to close again */ + dso_handle->function_list=function_list; + if ( (dso_handle->filename=(char*)malloc(strlen(file))) == NULL) { free(dso_handle); return NULL; } + strcpy(dso_handle->filename,file); + + mm_log((1,"DSO_open <- (0x%X)\n",dso_handle)); + return (void*)dso_handle; +} + +undef_int +DSO_close(void *ptr) { + DSO_handle *handle=(DSO_handle*) ptr; + mm_log((1,"DSO_close(ptr 0x%X)\n",ptr)); + return !shl_unload((handle->handle)); +} + +#elif defined(WIN32) + +void * +DSO_open(char *file, char **evalstring) { + HMODULE d_handle; + func_ptr *function_list; + DSO_handle *dso_handle; + + void (*f)(void *s,void *u); /* these will just have to be void for now */ + + mm_log( (1,"DSO_open(file '%s' (0x%08X), evalstring 0x%08X)\n",file,file,evalstring) ); + + *evalstring = NULL; + if ((d_handle = LoadLibrary(file)) == NULL) { + mm_log((1, "DSO_open: LoadLibrary(%s) failed: %lu\n", file, GetLastError())); + return NULL; + } + if ( (*evalstring = (char *)GetProcAddress(d_handle, I_EVALSTR)) == NULL) { + mm_log((1,"DSO_open: GetProcAddress didn't fine '%s': %lu\n", I_EVALSTR, GetLastError())); + FreeLibrary(d_handle); + return NULL; + } + if ((f = (void (*)(void *, void*))GetProcAddress(d_handle, I_INSTALL_TABLES)) == NULL) { + mm_log((1, "DSO_open: GetProcAddress didn't find '%s': %lu\n", I_INSTALL_TABLES, GetLastError())); + FreeLibrary(d_handle); + return NULL; + } + mm_log((1, "Calling install tables\n")); + f(&symbol_table, &UTIL_table); + mm_log((1, "Call ok\n")); + + if ( (function_list = (func_ptr *)GetProcAddress(d_handle, I_FUNCTION_LIST)) == NULL) { + mm_log((1, "DSO_open: GetProcAddress didn't find '%s': %lu\n", I_FUNCTION_LIST, GetLastError())); + FreeLibrary(d_handle); + return NULL; + } + if ( (dso_handle = (DSO_handle*)malloc(sizeof(DSO_handle))) == NULL) { + mm_log( (1, "DSO_Open: out of memory\n") ); + FreeLibrary(d_handle); + return NULL; + } + dso_handle->handle=d_handle; /* needed to close again */ + dso_handle->function_list=function_list; + if ( (dso_handle->filename=(char*)malloc(strlen(file))) == NULL) { free(dso_handle); FreeLibrary(d_handle); return NULL; } + strcpy(dso_handle->filename,file); + + mm_log( (1,"DSO_open <- 0x%X\n",dso_handle) ); + return (void*)dso_handle; + +} + +undef_int +DSO_close(void *ptr) { + DSO_handle *handle = (DSO_handle *)ptr; + FreeLibrary(handle->handle); + free(handle->filename); + free(handle); +} + +#else + +/* OS/2 has no dlclose; Perl doesn't provide one. */ +#ifdef __EMX__ /* OS/2 */ +int +dlclose(minthandle_t h) { + return DosFreeModule(h) ? -1 : 0; +} +#endif /* __EMX__ */ + + +void* +DSO_open(char* file,char** evalstring) { + void *d_handle; + func_ptr *function_list; + DSO_handle *dso_handle; + + void (*f)(void *s,void *u); /* these will just have to be void for now */ + + *evalstring=NULL; + + mm_log( (1,"DSO_open(file '%s' (0x%08X), evalstring 0x%08X)\n",file,file,evalstring) ); + + if ( (d_handle = dlopen(file, RTLD_LAZY)) == NULL) { + mm_log( (1,"DSO_open: dlopen failed: %s.\n",dlerror()) ); + return NULL; + } + + if ( (*evalstring = (char *)dlsym(d_handle, I_EVALSTR)) == NULL) { + mm_log( (1,"DSO_open: dlsym didn't find '%s': %s.\n",I_EVALSTR,dlerror()) ); + return NULL; + } + + /* + + I'll just leave this thing in here for now if I need it real soon + + mm_log( (1,"DSO_open: going to dlsym '%s'\n", I_SYMBOL_TABLE )); + if ( (plugin_symtab = dlsym(d_handle, I_SYMBOL_TABLE)) == NULL) { + mm_log( (1,"DSO_open: dlsym didn't find '%s': %s.\n",I_SYMBOL_TABLE,dlerror()) ); + return NULL; + } + + mm_log( (1,"DSO_open: going to dlsym '%s'\n", I_UTIL_TABLE )); + if ( (plugin_utiltab = dlsym(d_handle, I_UTIL_TABLE)) == NULL) { + mm_log( (1,"DSO_open: dlsym didn't find '%s': %s.\n",I_UTIL_TABLE,dlerror()) ); + return NULL; + } + + */ + + f = (void(*)(void *s,void *u))dlsym(d_handle, I_INSTALL_TABLES); + mm_log( (1,"DSO_open: going to dlsym '%s'\n", I_INSTALL_TABLES )); + if ( (f = (void(*)(void *s,void *u))dlsym(d_handle, I_INSTALL_TABLES)) == NULL) { + mm_log( (1,"DSO_open: dlsym didn't find '%s': %s.\n",I_INSTALL_TABLES,dlerror()) ); + return NULL; + } + + mm_log( (1,"Calling install_tables\n") ); + f(&symbol_table,&UTIL_table); + mm_log( (1,"Call ok.\n") ); + + /* (*plugin_symtab)=&symbol_table; + (*plugin_utiltab)=&UTIL_table; */ + + mm_log( (1,"DSO_open: going to dlsym '%s'\n", I_FUNCTION_LIST )); + if ( (function_list=(func_ptr *)dlsym(d_handle, I_FUNCTION_LIST)) == NULL) { + mm_log( (1,"DSO_open: dlsym didn't find '%s': %s.\n",I_FUNCTION_LIST,dlerror()) ); + return NULL; + } + + if ( (dso_handle=(DSO_handle*)malloc(sizeof(DSO_handle))) == NULL) return NULL; + + dso_handle->handle=d_handle; /* needed to close again */ + dso_handle->function_list=function_list; + if ( (dso_handle->filename=(char*)malloc(strlen(file))) == NULL) { free(dso_handle); return NULL; } + strcpy(dso_handle->filename,file); + + mm_log( (1,"DSO_open <- 0x%X\n",dso_handle) ); + return (void*)dso_handle; +} + +undef_int +DSO_close(void *ptr) { + DSO_handle *handle; + mm_log((1,"DSO_close(ptr 0x%X)\n",ptr)); + handle=(DSO_handle*) ptr; + return !dlclose(handle->handle); +} + +#endif + diff --git a/dynaload.h b/dynaload.h new file mode 100644 index 00000000..2007b93b --- /dev/null +++ b/dynaload.h @@ -0,0 +1,73 @@ +#ifndef _DYNALOAD_H_ +#define _DYNALOAD_H_ + +#include "log.h" + +#if defined(OS_hpux) +#include +typedef shl_t minthandle_t; +#elif defined(WIN32) +#define WIN32_LEAN_AND_MEAN +#include +typedef HMODULE minthandle_t; +#undef WIN32_LEAN_AND_MEAN +#else +#include +typedef void *minthandle_t; +#endif + +#include "EXTERN.h" +#include "perl.h" +#include "ppport.h" + +#include "ext.h" + +typedef struct { + minthandle_t handle; + char *filename; + func_ptr *function_list; +} DSO_handle; + +typedef struct { + HV* hv; + char *key; + void *store; +} UTIL_args; + +int getobj(void *hv_t,char *key,char *type,void **store); +int getint(void *hv_t,char *key,int *store); +int getdouble(void *hv_t,char *key,double *store); +int getvoid(void *hv_t,char *key,void **store); + + +void *DSO_open(char* file,char** evalstring); +int DSO_close(void *); +void DSO_call(DSO_handle *handle,int func_index,HV* hv); + +#ifdef __EMX__ /* OS/2 */ +# ifndef RTLD_LAZY +# define RTLD_LAZY 0 +# endif /* RTLD_LAZY */ +int dlclose(minthandle_t); +#endif /* __EMX__ */ + +#ifdef DLSYMUN + +#define I_EVALSTR "_evalstr" +#define I_SYMBOL_TABLE "_symbol_table" +#define I_UTIL_TABLE "_util_table" +#define I_FUNCTION_LIST "_function_list" +#define I_INSTALL_TABLES "_install_tables" + +#else + +#define I_EVALSTR "evalstr" +#define I_SYMBOL_TABLE "symbol_table" +#define I_UTIL_TABLE "util_table" +#define I_FUNCTION_LIST "function_list" +#define I_INSTALL_TABLES "install_tables" + +#endif + +#endif /* _DYNALOAD_H_ */ + diff --git a/dynfilt/Makefile.PL b/dynfilt/Makefile.PL new file mode 100644 index 00000000..fe48c4a8 --- /dev/null +++ b/dynfilt/Makefile.PL @@ -0,0 +1,92 @@ +use Config; +use ExtUtils::MakeMaker; +$Verbose = 1; + +$lddl=$Config{"lddlflags"}; + +@plugins= qw(dyntest dt2 mandelbrot flines); + +$libstr=join(' ',map { $_.'.$(SO)' } @plugins); + +#print $libstr,"\n"; +#print $objstr,"\n"; +#print MY::top_targets(); + +WriteMakefile( + NAME => 'Imager::plugins', + SKIP => [qw(all dynamic static )], + clean => {'FILES' => $libstr}, +); + + + + +sub lddl_magic { + my $t; + $t=$lddl; + $t=~s/-bI:\$\(PERL_INC\)\/perl.exp//; + $t=~s/\$\(BASEEXT\)/$_[0]/; + return $t; +} + + + + +sub MY::top_targets { + use Config; +if ($^O eq 'aix') { + ' +all :: dynamic + +dynamic :: '.$libstr.(join("\n",map { qq{ + +$_.\$(SO): $_\$(OBJ_EXT) + LD_RUN_PATH="\$(LD_RUN_PATH)" \$(LD) -o \$\@ }.lddl_magic($_).qq{ \$(OTHERLDFLAGS) $_\$(OBJ_EXT) + +} } @plugins)).' + + +pure_all :: + \$(NOOP) + +'; + +} +elsif ($^O =~ /win32/i && $Config{cc} =~ /cl/) { + my @libpth = grep /\S/, split /("[^"]*"|\S+)/,$Config{libpth}; + + ' +all :: dynamic + +dynamic :: '.$libstr.(join("\n",map { qq{ + +$_.\$(SO): $_\$(OBJ_EXT) + \$(LD) /OUT:\$\@ }.lddl_magic($_).qq{ \$(OTHERLDFLAGS) $_\$(OBJ_EXT) $Config{libs} }.join(' ', map "/libpath:$_", @libpth).qq{ + +} } @plugins)).' + + +pure_all :: + \$(NOOP) + +'; + +} else { + ' +all :: dynamic + +dynamic :: '.$libstr.(join("\n",map { qq{ + +$_.\$(SO): $_\$(OBJ_EXT) + LD_RUN_PATH="\$(LD_RUN_PATH)" \$(LD) -o \$\@ \$(LDDLFLAGS) \$(OTHERLDFLAGS) $_\$(OBJ_EXT) + +} } @plugins)).' + + +pure_all :: + \$(NOOP) + +'; + +} +} diff --git a/dynfilt/compile.txt b/dynfilt/compile.txt new file mode 100644 index 00000000..e0e3e6a5 --- /dev/null +++ b/dynfilt/compile.txt @@ -0,0 +1,2 @@ +linux - solaris : gcc -o dyntest.so -fPIC -G dyntest.c +AIX: LD_RUN_PATH="" ld -o dyntest.a -bhalt:4 -bM:SRE -bE:dyntest.exp -b noentry -lc -L/usr/local/lib dyntest.o diff --git a/dynfilt/dt2.c b/dynfilt/dt2.c new file mode 100644 index 00000000..9806cefe --- /dev/null +++ b/dynfilt/dt2.c @@ -0,0 +1,54 @@ +#include "pluginst.h" +#include + +char evalstr[]="Plugin for creating html tables from images"; + +/* input parameters + fname - file to add the html to. + +*/ + + + +void +html_art(void *INP) { + i_img *im; + i_color rcolor; + int i,x,y; + int info[4]; + FILE *fp; + char *fname; + + if ( !getSTR("fname",&fname) ) { fprintf(stderr,"Error: filename is missing\n"); return; } + if ( !getOBJ("image","Imager::ImgRaw",&im) ) { fprintf(stderr,"Error: image is missing\n"); return; } + + printf("parameters: (im 0x%x,fname %s)\n",im,fname); + + printf("image info:\n size (%d,%d)\n channels (%d)\n channel mask (%d)\n bytes (%d)\n",im->xsize,im->ysize,im->channels,im->ch_mask,im->bytes); + + fp=fopen(fname,"ab+"); + fprintf(fp,""); + for(y=0;yysize;y+=2) { + fprintf(fp,""); + for(x=0;xxsize;x++) { + i_gpix(im,x,y,&rcolor); + fprintf(fp,"",rcolor.rgb.r,rcolor.rgb.g,rcolor.rgb.b); + } + fprintf(fp,""); + } + fprintf(fp,"
  
"); + fclose(fp); +} + +func_ptr function_list[]={ + { + "html_art", + html_art, + "callseq => ['image','fname'], \ + callsub => sub { my %hsh=@_; DSO_call($DSO_handle,0,\\%hsh); } \ + " + }, + {NULL,NULL,NULL}}; + + +/* Remember to double backslash backslashes within Double quotes in C */ diff --git a/dynfilt/dyntest.c b/dynfilt/dyntest.c new file mode 100644 index 00000000..e9916446 --- /dev/null +++ b/dynfilt/dyntest.c @@ -0,0 +1,73 @@ +#include "pluginst.h" + + +char evalstr[]="Description string of plugin dyntest - kind of like"; + +void null_plug(void *ptr) { } + +/* Example dynamic filter - level stretch (linear) - note it only stretches and doesn't compress */ + +/* input parameters + a: the current black + b: the current white + + 0 <= a < b <= 255; + + output pixel value calculated by: o=((i-a)*255)/(b-a); + + note that since we do not have the needed functions to manipulate the data structures *** YET *** +*/ + + +unsigned char +static +saturate(int in) { + if (in>255) { return 255; } + else if (in>0) return in; + return 0; +} + +void lin_stretch(void *INP) { + + int a, b; + i_img *im; + i_color rcolor; + int i,bytes,x,y; + int info[4]; + + if ( !getOBJ("image","Imager::ImgRaw",&im) ) { fprintf(stderr,"Error: image is missing\n"); } + if ( !getINT("a",&a) ) { fprintf(stderr,"Error: a is missing\n"); } + if ( !getINT("b",&b) ) { fprintf(stderr,"Error: b is missing\n"); } + + /* fprintf(stderr,"parameters: (im 0x%x,a %d,b %d)\n",im,a,b);*/ + bytes=im->bytes; + + i_img_info(im,info); + for(i=0;i<4;i++) { printf("%d: %d\n",i,info[i]); } + printf("image info:\n size (%d,%d)\n channels (%d)\n channel mask (%d)\n bytes (%d)\n",im->xsize,im->ysize,im->channels,im->ch_mask,im->bytes); + + for(y=0;yysize;y++) for(x=0;xxsize;x++) { + i_gpix(im,x,y,&rcolor); + for(i=0;ichannels;i++) rcolor.channel[i]=saturate((255*(rcolor.channel[i]-a))/(b-a)); + i_ppix(im,x,y,&rcolor); + } + +} + +func_ptr function_list[]={ + { + "null_plug", + null_plug, + "callsub => sub { 1; }" + },{ + "lin_stretch", + lin_stretch, + "callseq => ['image','a','b'], \ + callsub => sub { my %hsh=@_; DSO_call($DSO_handle,1,\\%hsh); } \ + " + }, + {NULL,NULL,NULL}}; + + +/* Remember to double backslash backslashes within Double quotes in C */ + diff --git a/dynfilt/flines.c b/dynfilt/flines.c new file mode 100644 index 00000000..95d982eb --- /dev/null +++ b/dynfilt/flines.c @@ -0,0 +1,72 @@ +#include "pluginst.h" + + +char evalstr[]="Fancy lines"; + +/* input parameters + image is the image object. +*/ + + + +unsigned char +static +saturate(int in) { + if (in>255) { return 255; } + else if (in>0) return in; + return 0; +} + + + +void +flines(void *INP) { + i_img *im; + i_color vl; + int i,bytes,x,y; + int idx; + + if ( !getOBJ("image","Imager::ImgRaw",&im) ) { + fprintf(stderr,"Error: image is missing\n"); + return; + } + + fprintf(stderr, "flines: parameters: (im 0x%x)\n",im); + fprintf(stderr, "flines: image info:\n size (%d,%d)\n channels (%d)\n channel mask (%d)\n bytes (%d)\n",im->xsize,im->ysize,im->channels,im->ch_mask,im->bytes); + + for(y = 0; y < im->ysize; y ++) { + for(x = 0; x < im->xsize; x ++ ) { + i_gpix(im,x,y,&vl); + if (!(y%2)) { + float yf = y/(float)im->ysize; + float mf = 1.2-0.8*yf; + vl.rgb.r = saturate(vl.rgb.r*mf); + vl.rgb.g = saturate(vl.rgb.g*mf); + vl.rgb.b = saturate(vl.rgb.b*mf); + } else { + float yf = (im->ysize-y)/(float)im->ysize; + float mf = 1.2-0.8*yf; + vl.rgb.r = saturate(vl.rgb.r*mf); + vl.rgb.g = saturate(vl.rgb.g*mf); + vl.rgb.b = saturate(vl.rgb.b*mf); + } + i_ppix(im,x,y,&vl); + } + } +} + + + +func_ptr function_list[]={ + { + "flines", + flines, + "callseq => ['image'], \ + callsub => sub { my %hsh=@_; DSO_call($DSO_handle,0,\\%hsh); } \ + " + }, + {NULL,NULL,NULL}}; + + +/* Remember to double backslash backslashes within Double quotes in C */ + diff --git a/dynfilt/mandelbrot.c b/dynfilt/mandelbrot.c new file mode 100644 index 00000000..09d88fb9 --- /dev/null +++ b/dynfilt/mandelbrot.c @@ -0,0 +1,103 @@ +#include "pluginst.h" + + +char evalstr[]="Mandlebrot renderer"; + +/* Example Mandlebrot generator */ + +/* input parameters + image is the image object. +*/ + + +#define MXITER 256 + +static +int +mandel(float x, float y) { + float xn, yn; + float xo, yo; + float dist; + int iter = 1; + /* Z(n+1) = Z(n) ^2 + c */ + + /* printf("(%.2f, %.2f) -> \n", x,y); */ + + xo = x; + yo = y; + + while( xo*xo+yo*yo <= 10 && iter < MXITER) { + xn = xo*xo-yo*yo + x; + yn = 2*xo*yo + y; + xo=xn; + yo=yn; + iter++; + } + return (iter == MXITER)?0:iter; +} + + + +void mandlebrot(void *INP) { + + i_img *im; + i_color vl; + int i,bytes,x,y; + int idx; + + float xs, ys; + float div; + + i_color icl[256]; + srand(12235); + for(i=1;i<256; i++) { + icl[i].rgb.r = 100+(int) (155.0*rand()/(RAND_MAX+1.0)); + icl[i].rgb.g = 100+(int) (155.0*rand()/(RAND_MAX+1.0)); + icl[i].rgb.g = 100+(int) (155.0*rand()/(RAND_MAX+1.0)); + } + + icl[0].rgb.r = 0; + icl[0].rgb.g = 0; + icl[0].rgb.g = 0; + + + + if ( !getOBJ("image","Imager::ImgRaw",&im) ) { fprintf(stderr,"Error: image is missing\n"); } + + fprintf(stderr,"mandlebrot: parameters: (im 0x%x)\n",im); + bytes=im->bytes; + + fprintf(stderr, "mandlebrot: image info:\n size (%d,%d)\n channels (%d)\n channel mask (%d)\n bytes (%d)\n",im->xsize,im->ysize,im->channels,im->ch_mask,im->bytes); + div = 2.5; + + xs = 0.8*div; + ys = 0.5*div; + + div /= im->xsize; + + + fprintf(stderr, "Divider: %f \n", div); + for(y = 0; y < im->ysize; y ++) { + for(x = 0; x < im->xsize; x ++ ) { + idx = mandel(x*div-xs , y*div-ys); + idx = (idx>255)?255:idx; + i_ppix(im,x,y,&icl[idx]); + } + } +} + + + +func_ptr function_list[]={ + { + "mandlebrot", + mandlebrot, + "callseq => ['image'], \ + callsub => sub { my %hsh=@_; DSO_call($DSO_handle,0,\\%hsh); } \ + " + }, + {NULL,NULL,NULL}}; + + +/* Remember to double backslash backslashes within Double quotes in C */ + diff --git a/dynfilt/pluginst.h b/dynfilt/pluginst.h new file mode 100644 index 00000000..3ba9bf03 --- /dev/null +++ b/dynfilt/pluginst.h @@ -0,0 +1,17 @@ +#include "../plug.h" + +#ifdef _MSC_VER +#define WIN32_EXPORT __declspec(dllexport) +#else +/* this may need to change for other Win32 compilers */ +#define WIN32_EXPORT +#endif + +symbol_table_t *symbol_table; +UTIL_table_t *util_table; + +void WIN32_EXPORT +install_tables(symbol_table_t *s,UTIL_table_t *u) { + symbol_table=s; + util_table=u; +} diff --git a/errep.perl b/errep.perl new file mode 100644 index 00000000..b4ae4cbb --- /dev/null +++ b/errep.perl @@ -0,0 +1,96 @@ + + +use Config; + +@precommands=('uname -a','perl -V'); +@manpages=('dlopen','shl_load','dlsym','dlclose'); +@postcommands=map { "man $_ | col -bf | cat -s" } @manpages; + +print <; +chomp($a); +die "Aborted!\n" if $a =~ /^n/i; + +print "Generating info about system\n"; + +open OSTD, '>&STDOUT' or die $!; +open STDOUT, '>report.txt' or die $!; +open STDERR, '>&STDOUT' or die $!; + +rcomm('rm testout/*'); +rcomm(@precommands); +rcomm("$^X Makefile.PL") || rcomm("make") || rcomm("make test"); +head("Logfiles from run"); +dumplogs(); + +pconf(); +rcomm(@postcommands); + +sub pconf { + head("perl Config parameters"); + for(sort keys %Config) { print $_,"=>",(defined $Config{$_} ? $Config{$_} : '(undef)'),"\n"; } + print "\n"; +} + + +sub rcomm { + my @commands=@_; + my ($comm,$R); + for $comm(@commands) { + print "Executing '$comm'\n"; + print OSTD "Executing '$comm'\n"; + $R=system($comm); + print "warning - rc=$R\n" if $R; + print "=====================\n\n"; + } + return $R; +} + +sub head { + my $h=shift; + print "=========================\n"; + print $h; + print "\n=========================\n"; +} + +sub dumplogs { + opendir(DH,"testout") || die "Cannot open dir testout: $!\n"; + my @fl=sort grep(/\.log$/,readdir(DH)); + + for my $f (@fl) { + print "::::::::::::::\ntestout/$f\n::::::::::::::\n"; + open(FH,"testout/$f") || warn "Cannot open testout/$f: $!\n"; + print while(); + close(FH); + } +} + + + + + + + + + + diff --git a/ext.h b/ext.h new file mode 100644 index 00000000..ebd9a750 --- /dev/null +++ b/ext.h @@ -0,0 +1,18 @@ +#include "image.h" + +/* structures for passing data between Imager-plugin and the Imager-module */ + +typedef struct { + char *name; + void (*iptr)(void* ptr); + char *pcode; +} func_ptr; + + +typedef struct { + int (*getstr)(void *hv_t,char* key,char **store); + int (*getint)(void *hv_t,char *key,int *store); + int (*getdouble)(void *hv_t,char* key,double *store); + int (*getvoid)(void *hv_t,char* key,void **store); + int (*getobj)(void *hv_t,char* key,char* type,void **store); +} UTIL_table_t; diff --git a/feat.c b/feat.c new file mode 100644 index 00000000..ea848394 --- /dev/null +++ b/feat.c @@ -0,0 +1,10 @@ +#include "feat.h" + +undef_int +i_has_format(char *frmt) { + int rc,i; + rc=0; + i=0; + while(i_format_list[i] != NULL) if ( !strcmp(frmt,i_format_list[i++]) ) rc=1; + return(rc); +} diff --git a/feat.h b/feat.h new file mode 100644 index 00000000..a8d50b1f --- /dev/null +++ b/feat.h @@ -0,0 +1,25 @@ +#include "image.h" + +static char *i_format_list[]={ +#ifdef HAVE_LIBJPEG + "jpeg", +#endif +#ifdef HAVE_LIBTIFF + "tiff", +#endif +#ifdef HAVE_LIBPNG + "png", +#endif +#ifdef HAVE_LIBGIF + "gif", +#endif +#ifdef HAVE_LIBT1 + "t1", +#endif +#ifdef HAVE_LIBTT + "tt", +#endif + "raw", + "pnm", + NULL}; + diff --git a/filterlist.perl b/filterlist.perl new file mode 100755 index 00000000..69ee1998 --- /dev/null +++ b/filterlist.perl @@ -0,0 +1,12 @@ +#!/usr/bin/perl + +use Imager; +print "Filter Arguments\n"; +for $filt (keys %Imager::filters) { + @callseq=@{$Imager::filters{$filt}{'callseq'}}; + %defaults=%{$Imager::filters{$filt}{'defaults'}}; + shift(@callseq); + @b=map { exists($defaults{$_}) ? $_.'('.$defaults{$_}.')' : $_ } @callseq; + $str=join(" ",@b); + printf("%-15s %s\n",$filt,$str ); +} diff --git a/filters.c b/filters.c new file mode 100644 index 00000000..51d26426 --- /dev/null +++ b/filters.c @@ -0,0 +1,951 @@ +#include "image.h" +#include +#include + + +/* +=head1 NAME + +filters.c - implements filters that operate on images + +=head1 SYNOPSIS + + + i_contrast(im, 0.8); + i_hardinvert(im); + // and more + +=head1 DESCRIPTION + +filters.c implements basic filters for Imager. These filters +should be accessible from the filter interface as defined in +the pod for Imager. + +=head1 FUNCTION REFERENCE + +Some of these functions are internal. + +=over 4 + +=cut +*/ + + + + + + + +/* +=item i_contrast(im, intensity) + +Scales the pixel values by the amount specified. + + im - image object + intensity - scalefactor + +=cut +*/ + +void +i_contrast(i_img *im, float intensity) { + int x, y; + unsigned char ch; + unsigned int new_color; + i_color rcolor; + + mm_log((1,"i_contrast(im %p, intensity %f)\n", im, intensity)); + + if(intensity < 0) return; + + for(y = 0; y < im->ysize; y++) for(x = 0; x < im->xsize; x++) { + i_gpix(im, x, y, &rcolor); + + for(ch = 0; ch < im->channels; ch++) { + new_color = (unsigned int) rcolor.channel[ch]; + new_color *= intensity; + + if(new_color > 255) { + new_color = 255; + } + rcolor.channel[ch] = (unsigned char) new_color; + } + i_ppix(im, x, y, &rcolor); + } +} + + +/* +=item i_hardinvert(im) + +Inverts the pixel values of the input image. + + im - image object + +=cut +*/ + +void +i_hardinvert(i_img *im) { + int x, y; + unsigned char ch; + + i_color rcolor; + + mm_log((1,"i_hardinvert(im %p)\n", im)); + + for(y = 0; y < im->ysize; y++) { + for(x = 0; x < im->xsize; x++) { + i_gpix(im, x, y, &rcolor); + + for(ch = 0; ch < im->channels; ch++) { + rcolor.channel[ch] = 255 - rcolor.channel[ch]; + } + + i_ppix(im, x, y, &rcolor); + } + } +} + + + +/* +=item i_noise(im, amount, type) + +Inverts the pixel values by the amount specified. + + im - image object + amount - deviation in pixel values + type - noise individual for each channel if true + +=cut +*/ + +#ifdef _MSC_VER +/* random() is non-ASCII, even if it is better than rand() */ +#define random() rand() +#endif + +void +i_noise(i_img *im, float amount, unsigned char type) { + int x, y; + unsigned char ch; + int new_color; + float damount = amount * 2; + i_color rcolor; + int color_inc = 0; + + mm_log((1,"i_noise(im %p, intensity %.2f\n", im, amount)); + + if(amount < 0) return; + + for(y = 0; y < im->ysize; y++) for(x = 0; x < im->xsize; x++) { + i_gpix(im, x, y, &rcolor); + + if(type == 0) { + color_inc = (amount - (damount * ((float)random() / RAND_MAX))); + } + + for(ch = 0; ch < im->channels; ch++) { + new_color = (int) rcolor.channel[ch]; + + if(type != 0) { + new_color += (amount - (damount * ((float)random() / RAND_MAX))); + } else { + new_color += color_inc; + } + + if(new_color < 0) { + new_color = 0; + } + if(new_color > 255) { + new_color = 255; + } + + rcolor.channel[ch] = (unsigned char) new_color; + } + + i_ppix(im, x, y, &rcolor); + } +} + + +/* +=item i_noise(im, amount, type) + +Inverts the pixel values by the amount specified. + + im - image object + amount - deviation in pixel values + type - noise individual for each channel if true + +=cut +*/ + + +/* +=item i_applyimage(im, add_im, mode) + +Apply's an image to another image + + im - target image + add_im - image that is applied to target + mode - what method is used in applying: + + 0 Normal + 1 Multiply + 2 Screen + 3 Overlay + 4 Soft Light + 5 Hard Light + 6 Color dodge + 7 Color Burn + 8 Darker + 9 Lighter + 10 Add + 11 Subtract + 12 Difference + 13 Exclusion + +=cut +*/ + +void i_applyimage(i_img *im, i_img *add_im, unsigned char mode) { + int x, y; + int mx, my; + + mm_log((1, "i_applyimage(im %p, add_im %p, mode %d", im, add_im, mode)); + + mx = (add_im->xsize <= im->xsize) ? add_im->xsize : add_im->xsize; + my = (add_im->ysize <= im->ysize) ? add_im->ysize : add_im->ysize; + + for(x = 0; x < mx; x++) { + for(y = 0; y < my; y++) { + } + } +} + + +/* +=item i_bumpmap(im, bump, channel, light_x, light_y, st) + +Makes a bumpmap on image im using the bump image as the elevation map. + + im - target image + bump - image that contains the elevation info + channel - to take the elevation information from + light_x - x coordinate of light source + light_y - y coordinate of light source + st - length of shadow + +=cut +*/ + +void +i_bumpmap(i_img *im, i_img *bump, int channel, int light_x, int light_y, int st) { + int x, y, ch; + int mx, my; + i_color x1_color, y1_color, x2_color, y2_color, dst_color; + double nX, nY; + double tX, tY, tZ; + double aX, aY, aL; + double fZ; + unsigned char px1, px2, py1, py2; + + i_img new_im; + + mm_log((1, "i_bumpmap(im %p, add_im %p, channel %d, light_x %d, light_y %d, st %d)\n", + im, bump, channel, light_x, light_y, st)); + + + if(channel >= bump->channels) { + mm_log((1, "i_bumpmap: channel = %d while bump image only has %d channels\n", channel, bump->channels)); + return; + } + + mx = (bump->xsize <= im->xsize) ? bump->xsize : im->xsize; + my = (bump->ysize <= im->ysize) ? bump->ysize : im->ysize; + + i_img_empty_ch(&new_im, im->xsize, im->ysize, im->channels); + + aX = (light_x > (mx >> 1)) ? light_x : mx - light_x; + aY = (light_y > (my >> 1)) ? light_y : my - light_y; + + aL = sqrt((aX * aX) + (aY * aY)); + + for(y = 1; y < my - 1; y++) { + for(x = 1; x < mx - 1; x++) { + i_gpix(bump, x + st, y, &x1_color); + i_gpix(bump, x, y + st, &y1_color); + i_gpix(bump, x - st, y, &x2_color); + i_gpix(bump, x, y - st, &y2_color); + + i_gpix(im, x, y, &dst_color); + + px1 = x1_color.channel[channel]; + py1 = y1_color.channel[channel]; + px2 = x2_color.channel[channel]; + py2 = y2_color.channel[channel]; + + nX = px1 - px2; + nY = py1 - py2; + + nX += 128; + nY += 128; + + fZ = (sqrt((nX * nX) + (nY * nY)) / aL); + + tX = abs(x - light_x) / aL; + tY = abs(y - light_y) / aL; + + tZ = 1 - (sqrt((tX * tX) + (tY * tY)) * fZ); + + if(tZ < 0) tZ = 0; + if(tZ > 2) tZ = 2; + + for(ch = 0; ch < im->channels; ch++) + dst_color.channel[ch] = (unsigned char) (float)(dst_color.channel[ch] * tZ); + + i_ppix(&new_im, x, y, &dst_color); + } + } + + i_copyto(im, &new_im, 0, 0, (int)im->xsize, (int)im->ysize, 0, 0); + + i_img_exorcise(&new_im); +} + + + +/* +=item i_postlevels(im, levels) + +Quantizes Images to fewer levels. + + im - target image + levels - number of levels + +=cut +*/ + +void +i_postlevels(i_img *im, int levels) { + int x, y, ch; + float pv; + int rv; + float av; + + i_color rcolor; + + rv = (int) ((float)(256 / levels)); + av = (float)levels; + + for(y = 0; y < im->ysize; y++) for(x = 0; x < im->xsize; x++) { + i_gpix(im, x, y, &rcolor); + + for(ch = 0; ch < im->channels; ch++) { + pv = (((float)rcolor.channel[ch] / 255)) * av; + pv = (int) ((int)pv * rv); + + if(pv < 0) pv = 0; + else if(pv > 255) pv = 255; + + rcolor.channel[ch] = (unsigned char) pv; + } + i_ppix(im, x, y, &rcolor); + } +} + + +/* +=item i_mosaic(im, size) + +Makes an image looks like a mosaic with tilesize of size + + im - target image + size - size of tiles + +=cut +*/ + +void +i_mosaic(i_img *im, int size) { + int x, y, ch; + int lx, ly, z; + long sqrsize; + + i_color rcolor; + long col[256]; + + sqrsize = size * size; + + for(y = 0; y < im->ysize; y += size) for(x = 0; x < im->xsize; x += size) { + for(z = 0; z < 256; z++) col[z] = 0; + + for(lx = 0; lx < size; lx++) { + for(ly = 0; ly < size; ly++) { + i_gpix(im, (x + lx), (y + ly), &rcolor); + + for(ch = 0; ch < im->channels; ch++) { + col[ch] += rcolor.channel[ch]; + } + } + } + + for(ch = 0; ch < im->channels; ch++) + rcolor.channel[ch] = (int) ((float)col[ch] / sqrsize); + + + for(lx = 0; lx < size; lx++) + for(ly = 0; ly < size; ly++) + i_ppix(im, (x + lx), (y + ly), &rcolor); + + } +} + +/* +=item saturate(in) + +Clamps the input value between 0 and 255. (internal) + + in - input integer + +=cut +*/ + +static +unsigned char +saturate(int in) { + if (in>255) { return 255; } + else if (in>0) return in; + return 0; +} + + +/* +=item i_watermark(im, wmark, tx, ty, pixdiff) + +Applies a watermark to the target image + + im - target image + wmark - watermark image + tx - x coordinate of where watermark should be applied + ty - y coordinate of where watermark should be applied + pixdiff - the magnitude of the watermark, controls how visible it is + +=cut +*/ + +void +i_watermark(i_img *im, i_img *wmark, int tx, int ty, int pixdiff) { + int vx, vy, ch; + i_color val, wval; + + for(vx=0;vx<128;vx++) for(vy=0;vy<110;vy++) { + + i_gpix(im, tx+vx, ty+vy,&val ); + i_gpix(wmark, vx, vy, &wval); + + for(ch=0;chchannels;ch++) + val.channel[ch] = saturate( val.channel[ch] + (pixdiff* (wval.channel[0]-128) )/128 ); + + i_ppix(im,tx+vx,ty+vy,&val); + } +} + + +/* +=item i_autolevels(im, lsat, usat, skew) + +Scales and translates each color such that it fills the range completely. +Skew is not implemented yet - purpose is to control the color skew that can +occur when changing the contrast. + + im - target image + lsat - fraction of pixels that will be truncated at the lower end of the spectrum + usat - fraction of pixels that will be truncated at the higher end of the spectrum + skew - not used yet + +=cut +*/ + +void +i_autolevels(i_img *im, float lsat, float usat, float skew) { + i_color val; + int i, x, y, rhist[256], ghist[256], bhist[256]; + int rsum, rmin, rmax; + int gsum, gmin, gmax; + int bsum, bmin, bmax; + int rcl, rcu, gcl, gcu, bcl, bcu; + + mm_log((1,"i_autolevels(im %p, lsat %f,usat %f,skew %f)\n", im, lsat,usat,skew)); + + rsum=gsum=bsum=0; + for(i=0;i<256;i++) rhist[i]=ghist[i]=bhist[i] = 0; + /* create histogram for each channel */ + for(y = 0; y < im->ysize; y++) for(x = 0; x < im->xsize; x++) { + i_gpix(im, x, y, &val); + rhist[val.channel[0]]++; + ghist[val.channel[1]]++; + bhist[val.channel[2]]++; + } + + for(i=0;i<256;i++) { + rsum+=rhist[i]; + gsum+=ghist[i]; + bsum+=bhist[i]; + } + + rmin = gmin = bmin = 0; + rmax = gmax = bmax = 255; + + rcu = rcl = gcu = gcl = bcu = bcl = 0; + + for(i=0; i<256; i++) { + rcl += rhist[i]; if ( (rclysize; y++) for(x = 0; x < im->xsize; x++) { + i_gpix(im, x, y, &val); + val.channel[0]=saturate((val.channel[0]-rmin)*255/(rmax-rmin)); + val.channel[1]=saturate((val.channel[1]-gmin)*255/(gmax-gmin)); + val.channel[2]=saturate((val.channel[2]-bmin)*255/(bmax-bmin)); + i_ppix(im, x, y, &val); + } +} + +/* +=item Noise(x,y) + +Pseudo noise utility function used to generate perlin noise. (internal) + + x - x coordinate + y - y coordinate + +=cut +*/ + +static +float +Noise(int x, int y) { + int n = x + y * 57; + n = (n<<13) ^ n; + return ( 1.0 - ( (n * (n * n * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0); +} + +/* +=item SmoothedNoise1(x,y) + +Pseudo noise utility function used to generate perlin noise. (internal) + + x - x coordinate + y - y coordinate + +=cut +*/ + +static +float +SmoothedNoise1(float x, float y) { + float corners = ( Noise(x-1, y-1)+Noise(x+1, y-1)+Noise(x-1, y+1)+Noise(x+1, y+1) ) / 16; + float sides = ( Noise(x-1, y) +Noise(x+1, y) +Noise(x, y-1) +Noise(x, y+1) ) / 8; + float center = Noise(x, y) / 4; + return corners + sides + center; +} + + +/* +=item G_Interpolate(a, b, x) + +Utility function used to generate perlin noise. (internal) + +=cut +*/ + +static +float C_Interpolate(float a, float b, float x) { + /* float ft = x * 3.1415927; */ + float ft = x * PI; + float f = (1 - cos(ft)) * .5; + return a*(1-f) + b*f; +} + + +/* +=item InterpolatedNoise(x, y) + +Utility function used to generate perlin noise. (internal) + +=cut +*/ + +static +float +InterpolatedNoise(float x, float y) { + + int integer_X = x; + float fractional_X = x - integer_X; + int integer_Y = y; + float fractional_Y = y - integer_Y; + + float v1 = SmoothedNoise1(integer_X, integer_Y); + float v2 = SmoothedNoise1(integer_X + 1, integer_Y); + float v3 = SmoothedNoise1(integer_X, integer_Y + 1); + float v4 = SmoothedNoise1(integer_X + 1, integer_Y + 1); + + float i1 = C_Interpolate(v1 , v2 , fractional_X); + float i2 = C_Interpolate(v3 , v4 , fractional_X); + + return C_Interpolate(i1 , i2 , fractional_Y); +} + + + +/* +=item PerlinNoise_2D(x, y) + +Utility function used to generate perlin noise. (internal) + +=cut +*/ + +static +float +PerlinNoise_2D(float x, float y) { + int i,frequency; + float amplitude; + float total = 0; + int Number_Of_Octaves=6; + int n = Number_Of_Octaves - 1; + + for(i=0;iysize; y++) for(x = 0; x < im->xsize; x++) { + xc = (float)x-xo+0.5; + yc = (float)y-yo+0.5; + r = rscale*sqrt(xc*xc+yc*yc)+1.2; + a = (PI+atan2(yc,xc))*ascale; + v = saturate(128+100*(PerlinNoise_2D(a,r))); + /* v=saturate(120+12*PerlinNoise_2D(xo+(float)x/scale,yo+(float)y/scale)); Good soft marble */ + for(ch=0; chchannels; ch++) val.channel[ch]=v; + i_ppix(im, x, y, &val); + } +} + + +/* +=item i_turbnoise(im, xo, yo, scale) + +Perlin-like 2d noise noise. + + im - target image + xo - x coordinate translation + yo - y coordinate translation + scale - scale of noise + +=cut +*/ + +void +i_turbnoise(i_img *im, float xo, float yo, float scale) { + int x,y,ch; + unsigned char v; + i_color val; + + for(y = 0; y < im->ysize; y++) for(x = 0; x < im->xsize; x++) { + /* v=saturate(125*(1.0+PerlinNoise_2D(xo+(float)x/scale,yo+(float)y/scale))); */ + v = saturate(120*(1.0+sin(xo+(float)x/scale+PerlinNoise_2D(xo+(float)x/scale,yo+(float)y/scale)))); + for(ch=0; chchannels; ch++) val.channel[ch] = v; + i_ppix(im, x, y, &val); + } +} + + + +/* +=item i_gradgen(im, num, xo, yo, ival, dmeasure) + +Gradient generating function. + + im - target image + num - number of points given + xo - array of x coordinates + yo - array of y coordinates + ival - array of i_color objects + dmeasure - distance measure to be used. + 0 = Euclidean + 1 = Euclidean squared + 2 = Manhattan distance + +=cut +*/ + + +void +i_gradgen(i_img *im, int num, int *xo, int *yo, i_color *ival, int dmeasure) { + + i_color val; + int p, x, y, ch; + int channels = im->channels; + int xsize = im->xsize; + int ysize = im->ysize; + + float *fdist; + + mm_log((1,"i_gradgen(im %p, num %d, xo %p, yo %p, ival %p, dmeasure %d)\n", im, num, xo, yo, ival, dmeasure)); + + for(p = 0; pchannels; + int xsize = im->xsize; + int ysize = im->ysize; + + mm_log((1,"i_gradgen(im %p, num %d, xo %p, yo %p, ival %p, dmeasure %d)\n", im, num, xo, yo, ival, dmeasure)); + + for(p = 0; pchannels; + int xsize = im->xsize; + int ysize = im->ysize; + int *cmatch; + + mm_log((1,"i_nearest_color(im %p, num %d, xo %p, yo %p, ival %p, dmeasure %d)\n", im, num, xo, yo, ival, dmeasure)); + + + tval = mymalloc( sizeof(float)*num*im->channels ); + ival = mymalloc( sizeof(i_color)*num ); + cmatch = mymalloc( sizeof(int)*num ); + + for(p = 0; pchannels; ch++) tval[ p * im->channels + ch] = 0; + cmatch[p] = 0; + } + + + for(y = 0; ychannels], tval[midx*im->channels+1], tval[midx*im->channels+2] ); + + for(ch = 0; chchannels; ch++) + tval[midx*im->channels + ch] = c1*tval[midx*im->channels + ch] + c2 * (float) val.channel[ch]; + + + } + + for(p = 0; pchannels; ch++) ival[p].channel[ch] = tval[p*im->channels + ch]; + + i_nearest_color_foo(im, num, xo, yo, ival, dmeasure); +} diff --git a/font.c b/font.c new file mode 100644 index 00000000..5f11121a --- /dev/null +++ b/font.c @@ -0,0 +1,1176 @@ +#include "image.h" + +#include +#include +#include + +#include +#include + + + + + + +/* +=head1 NAME + +font.c - implements font handling functions for t1 and truetype fonts + +=head1 SYNOPSIS + + i_init_fonts(); + + #ifdef HAVE_LIBT1 + fontnum = i_t1_new(path_to_pfb, path_to_afm); + i_t1_bbox(fontnum, points, "foo", 3, int cords[6]); + rc = i_t1_destroy(fontnum); + #endif + + #ifdef HAVE_LIBTT + handle = i_tt_new(path_to_ttf); + rc = i_tt_bbox(handle, points, "foo", 3, int cords[6]); + i_tt_destroy(handle); + + // and much more + +=head1 DESCRIPTION + +font.c implements font creation, rendering, bounding box functions and +more for Imager. + +=head1 FUNCTION REFERENCE + +Some of these functions are internal. + +=over 4 + +=cut + +*/ + + + + + + + + + +/* +=item i_init_fonts() + +Initialize font rendering libraries if they are avaliable. + +=cut +*/ + +undef_int +i_init_fonts() { + mm_log((1,"Initializing fonts\n")); + +#ifdef HAVE_LIBT1 + init_t1(); +#endif + +#ifdef HAVE_LIBTT + init_tt(); +#endif + + return(1); /* FIXME: Always true - check the return values of the init_t1 and init_tt functions */ +} + + + + +#ifdef HAVE_LIBT1 + + + +/* +=item i_init_t1() + +Initializes the t1lib font rendering engine. + +=cut +*/ + +undef_int +init_t1() { + mm_log((1,"init_t1()\n")); + if ((T1_InitLib(LOGFILE|IGNORE_CONFIGFILE|IGNORE_FONTDATABASE) == NULL)){ + mm_log((1,"Initialization of t1lib failed\n")); + return(1); + } + T1_SetLogLevel(T1LOG_DEBUG); + i_t1_set_aa(1); /* Default Antialias value */ + return(0); +} + + +/* +=item i_close_t1() + +Shuts the t1lib font rendering engine down. + + This it seems that this function is never used. + +=cut +*/ + +void +i_close_t1() { + T1_CloseLib(); +} + + +/* +=item i_t1_new(pfb, afm) + +Loads the fonts with the given filenames, returns its font id + + pfb - path to pfb file for font + afm - path to afm file for font + +=cut +*/ + +int +i_t1_new(char *pfb,char *afm) { + int font_id; + mm_log((1,"i_t1_new(pfb %s,afm %s)\n",pfb,(afm?afm:"NULL"))); + font_id = T1_AddFont(pfb); + if (font_id<0) { + mm_log((1,"i_t1_new: Failed to load pfb file '%s' - return code %d.\n",pfb,font_id)); + return font_id; + } + + if (afm != NULL) { + mm_log((1,"i_t1_new: requesting afm file '%s'.\n",afm)); + if (T1_SetAfmFileName(font_id,afm)<0) mm_log((1,"i_t1_new: afm loading of '%s' failed.\n",afm)); + } + return font_id; +} + +/* +=item i_t1_destroy(font_id) + +Frees resources for a t1 font with given font id. + + font_id - number of the font to free + +=cut +*/ + +int +i_t1_destroy(int font_id) { + mm_log((1,"i_t1_destroy(font_id %d)\n",font_id)); + return T1_DeleteFont(font_id); +} + + +/* +=item i_t1_set_aa(st) + +Sets the antialiasing level of the t1 library. + + st - 0 = NONE, 1 = LOW, 2 = HIGH. + +=cut +*/ + +void +i_t1_set_aa(int st) { + int i; + unsigned long cst[17]; + switch(st) { + case 0: + T1_AASetBitsPerPixel( 8 ); + T1_AASetLevel( T1_AA_NONE ); + T1_AANSetGrayValues( 0, 255 ); + mm_log((1,"setting T1 antialias to none\n")); + break; + case 1: + T1_AASetBitsPerPixel( 8 ); + T1_AASetLevel( T1_AA_LOW ); + T1_AASetGrayValues( 0,65,127,191,255 ); + mm_log((1,"setting T1 antialias to low\n")); + break; + case 2: + T1_AASetBitsPerPixel(8); + T1_AASetLevel(T1_AA_HIGH); + for(i=0;i<17;i++) cst[i]=(i*255)/16; + T1_AAHSetGrayValues( cst ); + mm_log((1,"setting T1 antialias to high\n")); + } +} + + +/* +=item i_t1_cp(im, xb, yb, channel, fontnum, points, str, len, align) + +Interface to text rendering into a single channel in an image + + im pointer to image structure + xb x coordinate of start of string + yb y coordinate of start of string ( see align ) + channel - destination channel + fontnum - t1 library font id + points - number of points in fontheight + str - string to render + len - string length + align - (0 - top of font glyph | 1 - baseline ) + +=cut +*/ + +undef_int +i_t1_cp(i_img *im,int xb,int yb,int channel,int fontnum,float points,char* str,int len,int align) { + GLYPH *glyph; + int xsize,ysize,x,y; + i_color val; + + unsigned int ch_mask_store; + + if (im == NULL) { mm_log((1,"i_t1_cp: Null image in input\n")); return(0); } + + glyph=T1_AASetString( fontnum, str, len, 0, T1_KERNING, points, NULL); + + mm_log((1,"metrics: ascent: %d descent: %d\n",glyph->metrics.ascent,glyph->metrics.descent)); + mm_log((1," leftSideBearing: %d rightSideBearing: %d\n",glyph->metrics.leftSideBearing,glyph->metrics.rightSideBearing)); + mm_log((1," advanceX: %d advanceY: %d\n",glyph->metrics.advanceX,glyph->metrics.advanceY)); + mm_log((1,"bpp: %d\n",glyph->bpp)); + + xsize=glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing; + ysize=glyph->metrics.ascent-glyph->metrics.descent; + + mm_log((1,"width: %d height: %d\n",xsize,ysize)); + + ch_mask_store=im->ch_mask; + im->ch_mask=1<metrics.leftSideBearing; yb-=glyph->metrics.ascent; } + + for(y=0;ybits[y*xsize+x]; + i_ppix(im,x+xb,y+yb,&val); + } + + im->ch_mask=ch_mask_store; + return 1; +} + + +/* +=item i_t1_bbox(handle, fontnum, points, str, len, cords) + +function to get a strings bounding box given the font id and sizes + + handle - pointer to font handle + fontnum - t1 library font id + points - number of points in fontheight + str - string to measure + len - string length + cords - the bounding box (modified in place) + +=cut +*/ + +void +i_t1_bbox(int fontnum,float points,char *str,int len,int cords[6]) { + BBox bbox; + BBox gbbox; + + mm_log((1,"i_t1_bbox(fontnum %d,points %.2f,str '%.*s', len %d)\n",fontnum,points,len,str,len)); + T1_LoadFont(fontnum); /* FIXME: Here a return code is ignored - haw haw haw */ + bbox = T1_GetStringBBox(fontnum,str,len,0,T1_KERNING); + gbbox = T1_GetFontBBox(fontnum); + + mm_log((1,"bbox: (%d,%d,%d,%d)\n", + (int)(bbox.llx*points/1000), + (int)(gbbox.lly*points/1000), + (int)(bbox.urx*points/1000), + (int)(gbbox.ury*points/1000), + (int)(bbox.lly*points/1000), + (int)(bbox.ury*points/1000) )); + + + cords[0]=((float)bbox.llx*points)/1000; + cords[2]=((float)bbox.urx*points)/1000; + + cords[1]=((float)gbbox.lly*points)/1000; + cords[3]=((float)gbbox.ury*points)/1000; + + cords[4]=((float)bbox.lly*points)/1000; + cords[5]=((float)bbox.ury*points)/1000; +} + + +/* +=item i_t1_text(im, xb, yb, cl, fontnum, points, str, len, align) + +Interface to text rendering in a single color onto an image + + im - pointer to image structure + xb - x coordinate of start of string + yb - y coordinate of start of string ( see align ) + cl - color to draw the text in + fontnum - t1 library font id + points - number of points in fontheight + str - char pointer to string to render + len - string length + align - (0 - top of font glyph | 1 - baseline ) + +=cut +*/ + +undef_int +i_t1_text(i_img *im,int xb,int yb,i_color *cl,int fontnum,float points,char* str,int len,int align) { + GLYPH *glyph; + int xsize,ysize,x,y,ch; + i_color val; + unsigned char c,i; + + if (im == NULL) { mm_log((1,"i_t1_cp: Null image in input\n")); return(0); } + + glyph=T1_AASetString( fontnum, str, len, 0, T1_KERNING, points, NULL); + + mm_log((1,"metrics: ascent: %d descent: %d\n",glyph->metrics.ascent,glyph->metrics.descent)); + mm_log((1," leftSideBearing: %d rightSideBearing: %d\n",glyph->metrics.leftSideBearing,glyph->metrics.rightSideBearing)); + mm_log((1," advanceX: %d advanceY: %d\n",glyph->metrics.advanceX,glyph->metrics.advanceY)); + mm_log((1,"bpp: %d\n",glyph->bpp)); + + xsize=glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing; + ysize=glyph->metrics.ascent-glyph->metrics.descent; + + mm_log((1,"width: %d height: %d\n",xsize,ysize)); + + if (align==1) { xb+=glyph->metrics.leftSideBearing; yb-=glyph->metrics.ascent; } + + for(y=0;ybits[y*xsize+x]; + i=255-c; + i_gpix(im,x+xb,y+yb,&val); + for(ch=0;chchannels;ch++) val.channel[ch]=(c*cl->channel[ch]+i*val.channel[ch])/255; + i_ppix(im,x+xb,y+yb,&val); + } + return 1; +} + + +#endif /* HAVE_LIBT1 */ + + + + + + + + + + +/* Truetype font support */ + +#ifdef HAVE_LIBTT + + +/* Defines */ + +#define USTRCT(x) ((x).z) +#define TT_VALID( handle ) ( ( handle ).z != NULL ) + + +/* Prototypes */ + +static int i_tt_get_instance( TT_Fonthandle *handle, int points, int smooth ); +static void i_tt_init_raster_map( TT_Raster_Map* bit, int width, int height, int smooth ); +static void i_tt_done_raster_map( TT_Raster_Map *bit ); +static void i_tt_clear_raster_map( TT_Raster_Map* bit ); +static void i_tt_blit_or( TT_Raster_Map *dst, TT_Raster_Map *src,int x_off, int y_off ); +static int i_tt_get_glyph( TT_Fonthandle *handle, int inst, unsigned char j ); +static void i_tt_render_glyph( TT_Glyph glyph, TT_Glyph_Metrics* gmetrics, TT_Raster_Map *bit, TT_Raster_Map *small_bit, int x_off, int y_off, int smooth ); +static void i_tt_render_all_glyphs( TT_Fonthandle *handle, int inst, TT_Raster_Map *bit, TT_Raster_Map *small_bit, int cords[6], char* txt, int len, int smooth ); +static void i_tt_dump_raster_map2( i_img* im, TT_Raster_Map* bit, int xb, int yb, i_color *cl, int smooth ); +static void i_tt_dump_raster_map_channel( i_img* im, TT_Raster_Map* bit, int xb, int yb, int channel, int smooth ); +static int i_tt_rasterize( TT_Fonthandle *handle, TT_Raster_Map *bit, int cords[6], float points, char* txt, int len, int smooth ); +static undef_int i_tt_bbox_inst( TT_Fonthandle *handle, int inst ,const char *txt, int len, int cords[6] ); + + +/* static globals needed */ + +static TT_Engine engine; +static int LTT_dpi = 72; /* FIXME: this ought to be a part of the call interface */ +static int LTT_hinted = 1; /* FIXME: this too */ + + +/* + * FreeType interface + */ + + +/* +=item init_tt() + +Initializes the freetype font rendering engine + +=cut +*/ + +undef_int +init_tt() { + TT_Error error; + mm_log((1,"init_tt()\n")); + error = TT_Init_FreeType( &engine ); + if ( error ){ + mm_log((1,"Initialization of freetype failed, code = 0x%x\n",error)); + return(1); + } + return(0); +} + + +/* +=item i_tt_get_instance(handle, points, smooth) + +Finds a points+smooth instance or if one doesn't exist in the cache +allocates room and returns its cache entry + + fontname - path to the font to load + handle - handle to the font. + points - points of the requested font + smooth - boolean (True: antialias on, False: antialias is off) + +=cut +*/ + +static +int +i_tt_get_instance( TT_Fonthandle *handle, int points, int smooth ) { + int i,idx; + TT_Error error; + + mm_log((1,"i_tt_get_instance(handle 0x%X, points %d, smooth %d)\n",handle,points,smooth)); + + if (smooth == -1) { /* Smooth doesn't matter for this search */ + for(i=0;iinstanceh[i].ptsize==points) { + mm_log((1,"i_tt_get_instance: in cache - (non selective smoothing search) returning %d\n",i)); + return i; + } + smooth=1; /* We will be adding a font - add it as smooth then */ + } else { /* Smooth doesn't matter for this search */ + for(i=0;iinstanceh[i].ptsize==points && handle->instanceh[i].smooth==smooth) { + mm_log((1,"i_tt_get_instance: in cache returning %d\n",i)); + return i; + } + } + + /* Found the instance in the cache - return the cache index */ + + for(idx=0;idxinstanceh[idx].order)) break; /* find the lru item */ + + mm_log((1,"i_tt_get_instance: lru item is %d\n",idx)); + mm_log((1,"i_tt_get_instance: lru pointer 0x%X\n",USTRCT(handle->instanceh[idx].instance) )); + + if ( USTRCT(handle->instanceh[idx].instance) ) { + mm_log((1,"i_tt_get_instance: freeing lru item from cache %d\n",idx)); + TT_Done_Instance( handle->instanceh[idx].instance ); /* Free instance if needed */ + } + + /* create and initialize instance */ + /* FIXME: probably a memory leak on fail */ + + (void) (( error = TT_New_Instance( handle->face, &handle->instanceh[idx].instance ) ) || + ( error = TT_Set_Instance_Resolutions( handle->instanceh[idx].instance, LTT_dpi, LTT_dpi ) ) || + ( error = TT_Set_Instance_CharSize( handle->instanceh[idx].instance, points*64 ) ) ); + + if ( error ) { + mm_log((1, "Could not create and initialize instance: error 0x%x.\n",error )); + return -1; + } + + /* Now that the instance should the inplace we need to lower all of the + ru counts and put `this' one with the highest entry */ + + for(i=0;iinstanceh[i].order--; + + handle->instanceh[idx].order=TT_CHC-1; + handle->instanceh[idx].ptsize=points; + handle->instanceh[idx].smooth=smooth; + TT_Get_Instance_Metrics( handle->instanceh[idx].instance, &(handle->instanceh[idx].imetrics) ); + + /* Zero the memory for the glyph storage so they are not thought as cached if they haven't been cached + since this new font was loaded */ + + for(i=0;i<256;i++) USTRCT(handle->instanceh[idx].glyphs[i])=NULL; + + return idx; +} + + +/* +=item i_tt_new(fontname) + +Creates a new font handle object, finds a character map and initialise the +the font handle's cache + + fontname - path to the font to load + +=cut +*/ + +TT_Fonthandle* +i_tt_new(char *fontname) { + TT_Error error; + TT_Fonthandle *handle; + unsigned short i,n; + unsigned short platform,encoding; + + mm_log((1,"i_tt_new(fontname '%s')\n",fontname)); + + /* allocate memory for the structure */ + + handle=mymalloc( sizeof(TT_Fonthandle) ); + + /* load the typeface */ + error = TT_Open_Face( engine, fontname, &handle->face ); + if ( error ) { + if ( error == TT_Err_Could_Not_Open_File ) mm_log((1, "Could not find/open %s.\n", fontname )) + else mm_log((1, "Error while opening %s, error code = 0x%x.\n",fontname, error )); + return NULL; + } + + TT_Get_Face_Properties( handle->face, &(handle->properties) ); + /* First, look for a Unicode charmap */ + + n = handle->properties.num_CharMaps; + USTRCT( handle->char_map )=NULL; /* Invalidate character map */ + + for ( i = 0; i < n; i++ ) { + TT_Get_CharMap_ID( handle->face, i, &platform, &encoding ); + if ( (platform == 3 && encoding == 1 ) || (platform == 0 && encoding == 0 ) ) { + TT_Get_CharMap( handle->face, i, &(handle->char_map) ); + break; + } + } + + /* Zero the pointsizes - and ordering */ + + for(i=0;iinstanceh[i].instance)=NULL; + handle->instanceh[i].order=i; + handle->instanceh[i].ptsize=0; + handle->instanceh[i].smooth=-1; + } + + mm_log((1,"i_tt_new <- 0x%X\n",handle)); + return handle; +} + + + +/* + * raster map management + */ + +/* +=item i_tt_init_raster_map(bit, width, height, smooth) + +Allocates internal memory for the bitmap as needed by the parameters (internal) + + bit - bitmap to allocate into + width - width of the bitmap + height - height of the bitmap + smooth - boolean (True: antialias on, False: antialias is off) + +=cut +*/ + +static +void +i_tt_init_raster_map( TT_Raster_Map* bit, int width, int height, int smooth ) { + + mm_log((1,"i_tt_init_raster_map( bit 08x%08X, width %d, height %d, smooth %d)\n", bit, width, height, smooth)); + + bit->rows = height; + bit->width = ( width + 3 ) & -4; + bit->flow = TT_Flow_Down; + + if ( smooth ) { + bit->cols = bit->width; + bit->size = bit->rows * bit->width; + } else { + bit->cols = ( bit->width + 7 ) / 8; /* convert to # of bytes */ + bit->size = bit->rows * bit->cols; /* number of bytes in buffer */ + } + + mm_log((1,"i_tt_init_raster_map: bit->width %d, bit->cols %d, bit->rows %d, bit->size %d)\n", bit->width, bit->cols, bit->rows, bit->size )); + + bit->bitmap = (void *) mymalloc( bit->size ); + if ( !bit->bitmap ) m_fatal(0,"Not enough memory to allocate bitmap (%d)!\n",bit->size ); +} + + +/* +=item i_tt_clear_raster_map(bit) + +Frees the bitmap data and sets pointer to NULL (internal) + + bit - bitmap to free + +=cut +*/ + +static +void +i_tt_done_raster_map( TT_Raster_Map *bit ) { + myfree( bit->bitmap ); + bit->bitmap = NULL; +} + + +/* +=item i_tt_clear_raster_map(bit) + +Clears the specified bitmap (internal) + + bit - bitmap to zero + +=cut +*/ + + +static +void +i_tt_clear_raster_map( TT_Raster_Map* bit ) { + memset( bit->bitmap, 0, bit->size ); +} + + +/* +=item i_tt_blit_or(dst, src, x_off, y_off) + +function that blits one raster map into another (internal) + + dst - destination bitmap + src - source bitmap + x_off - x offset into the destination bitmap + y_off - y offset into the destination bitmap + +=cut +*/ + +static +void +i_tt_blit_or( TT_Raster_Map *dst, TT_Raster_Map *src,int x_off, int y_off ) { + int x, y; + int x1, x2, y1, y2; + char *s, *d; + + x1 = x_off < 0 ? -x_off : 0; + y1 = y_off < 0 ? -y_off : 0; + + x2 = (int)dst->cols - x_off; + if ( x2 > src->cols ) x2 = src->cols; + + y2 = (int)dst->rows - y_off; + if ( y2 > src->rows ) y2 = src->rows; + + if ( x1 >= x2 ) return; + + /* do the real work now */ + + for ( y = y1; y < y2; ++y ) { + s = ( (char*)src->bitmap ) + y * src->cols + x1; + d = ( (char*)dst->bitmap ) + ( y + y_off ) * dst->cols + x1 + x_off; + + for ( x = x1; x < x2; ++x ) *d++ |= *s++; + } +} + + +/* +=item i_tt_get_glyph(handle, inst, j) + +Function to see if a glyph exists and if so cache it (internal) + + handle - pointer to font handle + inst - font instance + j - charcode of glyph + +=cut +*/ + +static +int +i_tt_get_glyph( TT_Fonthandle *handle, int inst, unsigned char j) { /* FIXME: Check if unsigned char is enough */ + unsigned short load_flags, code; + TT_Error error; + + mm_log((1, "i_tt_get_glyph(handle 0x%X, inst %d, j %d (%c))\n",handle,inst,j,j)); + mm_log((1, "handle->instanceh[inst].glyphs[j]=0x%08X\n",handle->instanceh[inst].glyphs[j] )); + + if ( TT_VALID(handle->instanceh[inst].glyphs[j]) ) { + mm_log((1,"i_tt_get_glyph: %d in cache\n",j)); + return 1; + } + + /* Ok - it wasn't cached - try to get it in */ + load_flags = TTLOAD_SCALE_GLYPH; + if ( LTT_hinted ) load_flags |= TTLOAD_HINT_GLYPH; + + if ( !TT_VALID(handle->char_map) ) { + code = (j - ' ' + 1) < 0 ? 0 : (j - ' ' + 1); + if ( code >= handle->properties.num_Glyphs ) code = 0; + } else code = TT_Char_Index( handle->char_map, j ); + + if ( (error = TT_New_Glyph( handle->face, &handle->instanceh[inst].glyphs[j])) ) + mm_log((1, "Cannot allocate and load glyph: error 0x%x.\n", error )); + if ( (error = TT_Load_Glyph( handle->instanceh[inst].instance, handle->instanceh[inst].glyphs[j], code, load_flags)) ) + mm_log((1, "Cannot allocate and load glyph: error 0x%x.\n", error )); + + /* At this point the glyph should be allocated and loaded */ + /* Next get the glyph metrics */ + + error = TT_Get_Glyph_Metrics( handle->instanceh[inst].glyphs[j], &handle->instanceh[inst].gmetrics[j] ); + mm_log((1, "TT_Get_Glyph_Metrics: error 0x%x.\n", error )); + return 1; +} + + +/* +=item i_tt_destroy(handle) + +Clears the data taken by a font including all cached data such as +pixmaps and glyphs + + handle - pointer to font handle + +=cut +*/ + +void +i_tt_destroy( TT_Fonthandle *handle) { + TT_Close_Face( handle->face ); + + /* FIXME: Should these be freed automatically by the library? + + TT_Done_Instance( instance ); + void + i_tt_done_glyphs( void ) { + int i; + + if ( !glyphs ) return; + + for ( i = 0; i < 256; ++i ) TT_Done_Glyph( glyphs[i] ); + free( glyphs ); + + glyphs = NULL; + } + */ +} + + +/* + * FreeType Rendering functions + */ + + +/* +=item i_tt_render_glyph(handle, gmetrics, bit, smallbit, x_off, y_off, smooth) + +Renders a single glyph into the bit rastermap (internal) + + handle - pointer to font handle + gmetrics - the metrics for the glyph to be rendered + bit - large bitmap that is the destination for the text + smallbit - small bitmap that is used only if smooth is true + x_off - x offset of glyph + y_off - y offset of glyph + smooth - boolean (True: antialias on, False: antialias is off) + +=cut +*/ + +static +void +i_tt_render_glyph( TT_Glyph glyph, TT_Glyph_Metrics* gmetrics, TT_Raster_Map *bit, TT_Raster_Map *small_bit, int x_off, int y_off, int smooth ) { + + mm_log((1,"i_tt_render_glyph(glyph 0x0%X, gmetrics 0x0%X, bit 0x%X, small_bit 0x%X, x_off %d, y_off %d, smooth %d)\n", + USTRCT(glyph), gmetrics, bit, small_bit, x_off,y_off,smooth)); + + if ( !smooth ) TT_Get_Glyph_Bitmap( glyph, bit, x_off * 64, y_off * 64); + else { + TT_F26Dot6 xmin, ymin, xmax, ymax; + + xmin = gmetrics->bbox.xMin & -64; + ymin = gmetrics->bbox.yMin & -64; + xmax = (gmetrics->bbox.xMax + 63) & -64; + ymax = (gmetrics->bbox.yMax + 63) & -64; + + i_tt_clear_raster_map( small_bit ); + TT_Get_Glyph_Pixmap( glyph, small_bit, -xmin, -ymin ); + i_tt_blit_or( bit, small_bit, xmin/64 + x_off, -ymin/64 - y_off ); + } +} + + +/* +=item i_tt_render_all_glyphs(handle, inst, bit, small_bit, cords, txt, len, smooth) + +calls i_tt_render_glyph to render each glyph into the bit rastermap (internal) + + handle - pointer to font handle + inst - font instance + bit - large bitmap that is the destination for the text + smallbit - small bitmap that is used only if smooth is true + txt - string to render + len - length of the string to render + smooth - boolean (True: antialias on, False: antialias is off) + +=cut +*/ + +static +void +i_tt_render_all_glyphs( TT_Fonthandle *handle, int inst, TT_Raster_Map *bit, TT_Raster_Map *small_bit, int cords[6], char* txt, int len, int smooth ) { + unsigned char j; + int i; + TT_F26Dot6 x,y; + + mm_log((1,"i_tt_render_all_glyphs( handle 0x%X, inst %d, bit 0x%X, small_bit 0x%X, txt '%.*s', len %d, smooth %d)\n", + handle, inst, bit, small_bit, len, txt, len, smooth)); + + /* + y=-( handle->properties.horizontal->Descender * handle->instanceh[inst].imetrics.y_ppem )/(handle->properties.header->Units_Per_EM); + */ + + x=cords[0]; /* FIXME: If you font is antialiased this should be expanded by one to allow for aa expansion and the allocation too - do before passing here */ + y=-cords[1]; + + for ( i = 0; i < len; i++ ) { + j = txt[i]; + if ( !i_tt_get_glyph(handle,inst,j) ) continue; + i_tt_render_glyph( handle->instanceh[inst].glyphs[j], &handle->instanceh[inst].gmetrics[j], bit, small_bit, x, y, smooth ); + x += handle->instanceh[inst].gmetrics[j].advance / 64; + } +} + + +/* + * Functions to render rasters (single channel images) onto images + */ + +/* +=item i_tt_dump_raster_map2(im, bit, xb, yb, cl, smooth) + +Function to dump a raster onto an image in color used by i_tt_text() (internal). + + im - image to dump raster on + bit - bitmap that contains the text to be dumped to im + xb, yb - coordinates, left edge and baseline + cl - color to use for text + smooth - boolean (True: antialias on, False: antialias is off) + +=cut +*/ + +static +void +i_tt_dump_raster_map2( i_img* im, TT_Raster_Map* bit, int xb, int yb, i_color *cl, int smooth ) { + char *bmap; + i_color val; + int c, i, ch, x, y; + mm_log((1,"i_tt_dump_raster_map2(im 0x%x, bit 0x%X, xb %d, yb %d, cl 0x%X)\n",im,bit,xb,yb,cl)); + + bmap = (char *)bit->bitmap; + + if ( smooth ) { + + for(y=0;yrows;y++) for(x=0;xwidth;x++) { + c=(255*bmap[y*(bit->cols)+x])/4; + i=255-c; + i_gpix(im,x+xb,y+yb,&val); + for(ch=0;chchannels;ch++) val.channel[ch]=(c*cl->channel[ch]+i*val.channel[ch])/255; + i_ppix(im,x+xb,y+yb,&val); + } + + } else { + + for(y=0;yrows;y++) for(x=0;xwidth;x++) { + c=( bmap[y*bit->cols+x/8] & (128>>(x%8)) ) ? 255 : 0; + i=255-c; + i_gpix(im,x+xb,y+yb,&val); + for(ch=0;chchannels;ch++) val.channel[ch]=(c*cl->channel[ch]+i*val.channel[ch])/255; + i_ppix(im,x+xb,y+yb,&val); + } + + } +} + + +/* +=item i_tt_dump_raster_map_channel(im, bit, xb, yb, channel, smooth) + +Function to dump a raster onto a single channel image in color (internal) + + im - image to dump raster on + bit - bitmap that contains the text to be dumped to im + xb, yb - coordinates, left edge and baseline + channel - channel to copy to + smooth - boolean (True: antialias on, False: antialias is off) + +=cut +*/ + +static +void +i_tt_dump_raster_map_channel( i_img* im, TT_Raster_Map* bit, int xb, int yb, int channel, int smooth ) { + char *bmap; + i_color val; + int c,x,y; + + mm_log((1,"i_tt_dump_raster_channel(im 0x%x, bit 0x%X, xb %d, yb %d, channel %d)\n",im,bit,xb,yb,channel)); + + bmap = (char *)bit->bitmap; + + if ( smooth ) { + for(y=0;yrows;y++) for(x=0;xwidth;x++) { + c=(255*bmap[y*(bit->cols)+x])/4; + i_gpix(im,x+xb,y+yb,&val); + val.channel[channel]=c; + i_ppix(im,x+xb,y+yb,&val); + } + } else { + for(y=0;yrows;y++) for(x=0;xwidth;x++) { + c=( bmap[y*bit->cols+x/8] & (128>>(x%8)) ) ? 255 : 0; + i_gpix(im,x+xb,y+yb,&val); + val.channel[channel]=c; + i_ppix(im,x+xb,y+yb,&val); + } + } +} + + +/* +=item i_tt_rasterize(handle, bit, cords, points, txt, len, smooth) + +interface for generating single channel raster of text (internal) + + handle - pointer to font handle + bit - the bitmap that is allocated, rendered into and NOT freed + cords - the bounding box (modified in place) + points - font size to use + txt - string to render + len - length of the string to render + smooth - boolean (True: antialias on, False: antialias is off) + +=cut +*/ + +static +int +i_tt_rasterize( TT_Fonthandle *handle, TT_Raster_Map *bit, int cords[6], float points, char* txt, int len, int smooth ) { + int inst; + int width, height; + TT_Raster_Map small_bit; + + /* find or install an instance */ + if ( (inst=i_tt_get_instance(handle,points,smooth)) < 0) { + mm_log((1,"i_tt_rasterize: get instance failed\n")); + return 0; + } + + /* calculate bounding box */ + i_tt_bbox_inst( handle, inst, txt, len, cords ); + + width = cords[2]-cords[0]; + height = cords[3]-cords[1]; + + mm_log((1,"i_tt_rasterize: width=%d, height=%d\n",width, height )); + + i_tt_init_raster_map ( bit, width, height, smooth ); + i_tt_clear_raster_map( bit ); + if ( smooth ) i_tt_init_raster_map( &small_bit, handle->instanceh[inst].imetrics.x_ppem + 32, height, smooth ); + + i_tt_render_all_glyphs( handle, inst, bit, &small_bit, cords, txt, len, smooth ); + + /* ascent = ( handle->properties.horizontal->Ascender * handle->instanceh[inst].imetrics.y_ppem ) / handle->properties.header->Units_Per_EM; */ + + if ( smooth ) i_tt_done_raster_map( &small_bit ); + return 1; +} + + + +/* + * Exported text rendering interfaces + */ + + +/* +=item i_tt_cp(handle, im, xb, yb, channel, points, txt, len, smooth) + +Interface to text rendering into a single channel in an image + + handle - pointer to font handle + im - image to render text on to + xb, yb - coordinates, left edge and baseline + channel - channel to render into + points - font size to use + txt - string to render + len - length of the string to render + smooth - boolean (True: antialias on, False: antialias is off) + +=cut +*/ + +undef_int +i_tt_cp( TT_Fonthandle *handle, i_img *im, int xb, int yb, int channel, float points, char* txt, int len, int smooth ) { + + int cords[6]; + int ascent, st_offset; + TT_Raster_Map bit; + + if (! i_tt_rasterize( handle, &bit, cords, points, txt, len, smooth ) ) return 0; + + ascent=cords[3]; + st_offset=cords[0]; + + i_tt_dump_raster_map_channel( im, &bit, xb-st_offset , yb-ascent, channel, smooth ); + i_tt_done_raster_map( &bit ); + + return 1; +} + + +/* +=item i_tt_text(handle, im, xb, yb, cl, points, txt, len, smooth) + +Interface to text rendering in a single color onto an image + + handle - pointer to font handle + im - image to render text on to + xb, yb - coordinates, left edge and baseline + cl - color to use for text + points - font size to use + txt - string to render + len - length of the string to render + smooth - boolean (True: antialias on, False: antialias is off) + +=cut +*/ + +undef_int +i_tt_text( TT_Fonthandle *handle, i_img *im, int xb, int yb, i_color *cl, float points, char* txt, int len, int smooth) { + int cords[6]; + int ascent, st_offset; + TT_Raster_Map bit; + + if (! i_tt_rasterize( handle, &bit, cords, points, txt, len, smooth ) ) return 0; + + ascent=cords[3]; + st_offset=cords[0]; + + i_tt_dump_raster_map2( im, &bit, xb-st_offset, yb-ascent, cl, smooth ); + i_tt_done_raster_map( &bit ); + + return 1; +} + + +/* +=item i_tt_bbox_inst(handle, inst, txt, len, cords) + +Function to get texts bounding boxes given the instance of the font (internal) + + handle - pointer to font handle + inst - font instance + txt - string to measure + len - length of the string to render + cords - the bounding box (modified in place) + +=cut +*/ + +static +undef_int +i_tt_bbox_inst( TT_Fonthandle *handle, int inst ,const char *txt, int len, int cords[6] ) { + int i, upm, ascent, descent, gascent, gdescent, width, casc, cdesc, first, start; + unsigned int j; + unsigned char *ustr; + ustr=(unsigned char*)txt; + + mm_log((1,"i_tt_box_inst(handle 0x%X,inst %d,txt '%.*s', len %d)\n",handle,inst,len,txt,len)); + + upm = handle->properties.header->Units_Per_EM; + gascent = ( handle->properties.horizontal->Ascender * handle->instanceh[inst].imetrics.y_ppem ) / upm; + gdescent = ( handle->properties.horizontal->Descender * handle->instanceh[inst].imetrics.y_ppem ) / upm; + + width = 0; + start = 0; + + mm_log((1, "i_tt_box_inst: glyph='%c' ascent=%d descent=%d\n", j, ascent, descent)); + + first=1; + for ( i = 0; i < len; ++i ) { + j = ustr[i]; + if ( i_tt_get_glyph(handle,inst,j) ) { + width += handle->instanceh[inst].gmetrics[j].advance / 64; + casc = handle->instanceh[inst].gmetrics[j].bbox.yMax / 64; + cdesc = handle->instanceh[inst].gmetrics[j].bbox.yMin / 64; + + mm_log((1, "i_tt_box_inst: glyph='%c' casc=%d cdesc=%d\n", j, casc, cdesc)); + + if (first) { + start = handle->instanceh[inst].gmetrics[j].bbox.xMin / 64; + ascent = handle->instanceh[inst].gmetrics[j].bbox.yMax / 64; + descent = handle->instanceh[inst].gmetrics[j].bbox.yMin / 64; + first = 0; + } + + ascent = (ascent > casc ? ascent : casc ); + descent = (descent < cdesc ? descent : cdesc); + } + } + + cords[0]=start; + cords[1]=gdescent; + cords[2]=width+start; + cords[3]=gascent; + cords[4]=descent; + cords[5]=ascent; + return 1; +} + + +/* +=item i_tt_bbox(handle, points, txt, len, cords) + +Interface to get a strings bounding box + + handle - pointer to font handle + points - font size to use + txt - string to render + len - length of the string to render + cords - the bounding box (modified in place) + +=cut +*/ + +undef_int +i_tt_bbox( TT_Fonthandle *handle, float points,char *txt,int len,int cords[6]) { + int inst; + + mm_log((1,"i_tt_box(handle 0x%X,points %f,txt '%.*s', len %d)\n",handle,points,len,txt,len)); + + if ( (inst=i_tt_get_instance(handle,points,-1)) < 0) { + mm_log((1,"i_tt_text: get instance failed\n")); + return 0; + } + + return i_tt_bbox_inst(handle, inst, txt, len, cords); +} + + + +#endif /* HAVE_LIBTT */ diff --git a/fontfiles/dcr10.afm b/fontfiles/dcr10.afm new file mode 100644 index 00000000..e1eb535f --- /dev/null +++ b/fontfiles/dcr10.afm @@ -0,0 +1,751 @@ +StartFontMetrics 2.0 +FontName dcr10 +FullName dcr10 +FamilyName dcr10 +Weight Medium +ItalicAngle 0.000000 +IsFixedPitch false +UnderlinePosition -133 +UnderlineThickness 20 +Version 1.0\(Level-B\) +FontBBox -55, -250, 1054, 913 +Notice Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\nBaKoMa Fonts Collection, Level-B. +EncodingScheme FontSpecific +CapHeight 683 +XHeight 430 +Descender -194 +Ascender 694 +StartCharMetrics 256 +C 0 ; WX 499.89 ; N grave ; B 107 508 294 698 ; +C 1 ; WX 499.89 ; N acute ; B 205 508 392 698 ; +C 2 ; WX 499.89 ; N circumflex ; B 115 537 384 694 ; +C 3 ; WX 499.89 ; N tilde ; B 83 572 416 668 ; +C 4 ; WX 499.89 ; N dieresis ; B 101 565 398 669 ; +C 5 ; WX 499.89 ; N hungarumlaut ; B 126 511 420 699 ; +C 6 ; WX 749.83 ; N ring ; B 263 540 458 716 ; +C 7 ; WX 499.89 ; N caron ; B 117 515 382 640 ; +C 8 ; WX 499.89 ; N breve ; B 98 519 401 694 ; +C 9 ; WX 499.89 ; N macron ; B 69 555 430 590 ; +C 10 ; WX 277.72 ; N dotaccent ; B 84 559 194 669 ; +C 11 ; WX 444.33 ; N cedilla ; B 129 -205 369 -22 ; +C 12 ; WX 277.72 ; N ogonek ; B 9 -194 226 20 ; +C 13 ; WX 277.72 ; N quotesinglbase ; B 112 -194 233 110 ; +C 14 ; WX 444.33 ; N guilsinglleft ; B 94 26 330 457 ; +C 15 ; WX 444.33 ; N guilsinglright ; B 94 26 360 457 ; +C 16 ; WX 499.89 ; N quotedblleft ; B 148 390 466 694 ; +C 17 ; WX 499.89 ; N quotedblright ; B 33 390 351 694 ; +C 18 ; WX 499.89 ; N quotedblbase ; B 138 -194 456 110 ; +C 19 ; WX 666.5 ; N guillemotleft ; B 94 26 553 457 ; +C 20 ; WX 666.5 ; N guillemotright ; B 94 26 583 457 ; +C 21 ; WX 499.89 ; N endash ; B 0 253 499 279 ; L hyphen emdash ; +C 22 ; WX 999.78 ; N emdash ; B 0 253 999 279 ; +C 23 ; WX 0 ; N compoundwordmark ; B 0 0 0 0 ; +C 24 ; WX 388.78 ; N perthousand ; B 55 -56 333 347 ; +C 25 ; WX 277.72 ; N dotlessi ; B 25 0 243 441 ; +C 26 ; WX 305.5 ; N dotlessj ; B -55 -205 201 441 ; +C 27 ; WX 583.17 ; N ff ; B 26 0 632 705 ; L i ffi ; L l ffl ; +C 28 ; WX 555.44 ; N fi ; B 26 0 528 705 ; +C 29 ; WX 555.44 ; N fl ; B 26 0 528 705 ; +C 30 ; WX 833.11 ; N ffi ; B 26 0 807 705 ; +C 31 ; WX 833.11 ; N ffl ; B 26 0 807 705 ; +C 32 ; WX 499.89 ; N visiblespace ; B 42 -107 457 252 ; +C 33 ; WX 277.72 ; N exclam ; B 84 0 194 716 ; +C 34 ; WX 499.89 ; N quotedbl ; B 117 349 383 711 ; +C 35 ; WX 833.11 ; N numbersign ; B 56 -194 776 694 ; +C 36 ; WX 499.89 ; N dollar ; B 57 -56 444 750 ; +C 37 ; WX 833.11 ; N percent ; B 56 -56 776 750 ; +C 38 ; WX 777.61 ; N ampersand ; B 42 -22 727 716 ; +C 39 ; WX 277.72 ; N quoteright ; B 84 390 208 694 ; L quoteright quotedblright ; +C 40 ; WX 388.78 ; N parenleft ; B 97 -250 332 750 ; +C 41 ; WX 388.78 ; N parenright ; B 56 -250 291 750 ; +C 42 ; WX 499.89 ; N asterisk ; B 65 320 434 750 ; +C 43 ; WX 777.61 ; N plus ; B 56 -83 721 583 ; +C 44 ; WX 277.72 ; N comma ; B 84 -194 205 110 ; L comma quotedblbase ; +C 45 ; WX 333.28 ; N hyphen ; B 11 184 276 246 ; L hyphen endash ; +C 46 ; WX 277.72 ; N period ; B 84 0 194 110 ; +C 47 ; WX 499.89 ; N slash ; B 56 -250 443 750 ; +C 48 ; WX 499.89 ; N zero ; B 39 -22 460 666 ; +C 49 ; WX 499.89 ; N one ; B 87 0 421 666 ; +C 50 ; WX 499.89 ; N two ; B 50 0 449 666 ; +C 51 ; WX 499.89 ; N three ; B 42 -22 457 666 ; +C 52 ; WX 499.89 ; N four ; B 28 0 471 677 ; +C 53 ; WX 499.89 ; N five ; B 50 -22 449 666 ; +C 54 ; WX 499.89 ; N six ; B 42 -22 457 666 ; +C 55 ; WX 499.89 ; N seven ; B 56 -22 485 676 ; +C 56 ; WX 499.89 ; N eight ; B 42 -22 457 666 ; +C 57 ; WX 499.89 ; N nine ; B 42 -22 457 666 ; +C 58 ; WX 277.72 ; N colon ; B 84 0 194 430 ; +C 59 ; WX 277.72 ; N semicolon ; B 84 -194 197 430 ; +C 60 ; WX 777.61 ; N less ; B 83 -33 694 533 ; L less guillemotleft ; +C 61 ; WX 777.61 ; N equal ; B 56 140 721 360 ; +C 62 ; WX 777.61 ; N greater ; B 83 -33 694 533 ; L greater guillemotright ; +C 63 ; WX 472.11 ; N question ; B 56 0 415 705 ; +C 64 ; WX 777.61 ; N at ; B 56 -11 721 705 ; +C 65 ; WX 749.83 ; N A ; B 18 0 703 716 ; +C 66 ; WX 708.17 ; N B ; B 20 0 637 683 ; +C 67 ; WX 722 ; N C ; B 56 -22 665 705 ; +C 68 ; WX 763.72 ; N D ; B 19 0 693 683 ; +C 69 ; WX 680.39 ; N E ; B 17 0 637 680 ; +C 70 ; WX 652.61 ; N F ; B 17 0 596 680 ; +C 71 ; WX 784.56 ; N G ; B 56 -22 735 705 ; +C 72 ; WX 749.83 ; N H ; B 17 0 704 683 ; +C 73 ; WX 361 ; N I ; B 12 0 321 683 ; +C 74 ; WX 513.78 ; N J ; B 37 -22 465 683 ; +C 75 ; WX 777.61 ; N K ; B 17 0 722 683 ; +C 76 ; WX 624.83 ; N L ; B 17 0 568 683 ; +C 77 ; WX 916.44 ; N M ; B 21 0 866 683 ; +C 78 ; WX 749.83 ; N N ; B 17 0 704 683 ; +C 79 ; WX 777.61 ; N O ; B 56 -22 721 705 ; +C 80 ; WX 680.39 ; N P ; B 19 0 609 683 ; +C 81 ; WX 777.61 ; N Q ; B 56 -194 727 705 ; +C 82 ; WX 735.94 ; N R ; B 19 -22 718 683 ; +C 83 ; WX 555.44 ; N S ; B 56 -22 498 705 ; +C 84 ; WX 722 ; N T ; B 37 0 686 677 ; +C 85 ; WX 749.83 ; N U ; B 17 -22 704 683 ; +C 86 ; WX 749.83 ; N V ; B 5 -22 716 683 ; +C 87 ; WX 1027.56 ; N W ; B 4 -22 995 683 ; +C 88 ; WX 749.83 ; N X ; B 9 0 712 683 ; +C 89 ; WX 749.83 ; N Y ; B -3 0 724 683 ; +C 90 ; WX 611 ; N Z ; B 56 0 560 683 ; +C 91 ; WX 277.72 ; N bracketleft ; B 103 -250 255 750 ; +C 92 ; WX 499.89 ; N backslash ; B 56 -250 443 750 ; +C 93 ; WX 277.72 ; N bracketright ; B 22 -250 174 750 ; +C 94 ; WX 611 ; N asciicircum ; B 117 461 493 628 ; +C 95 ; WX 777.61 ; N underscore ; B 83 -233 694 -193 ; +C 96 ; WX 277.72 ; N quoteleft ; B 70 390 194 694 ; L quoteleft quotedblleft ; +C 97 ; WX 499.89 ; N a ; B 40 -11 493 447 ; +C 98 ; WX 555.44 ; N b ; B 26 -11 521 694 ; +C 99 ; WX 444.33 ; N c ; B 33 -11 415 447 ; +C 100 ; WX 555.44 ; N d ; B 33 -11 528 694 ; +C 101 ; WX 444.33 ; N e ; B 28 -11 415 447 ; +C 102 ; WX 305.5 ; N f ; B 26 0 354 705 ; L i fi ; L f ff ; L l fl ; +C 103 ; WX 499.89 ; N g ; B 28 -206 485 452 ; +C 104 ; WX 555.44 ; N h ; B 24 0 530 694 ; +C 105 ; WX 277.72 ; N i ; B 25 0 243 669 ; +C 106 ; WX 305.5 ; N j ; B -55 -205 201 669 ; +C 107 ; WX 527.67 ; N k ; B 26 0 511 694 ; +C 108 ; WX 277.72 ; N l ; B 25 0 251 694 ; +C 109 ; WX 833.11 ; N m ; B 24 0 810 441 ; +C 110 ; WX 555.44 ; N n ; B 24 0 530 441 ; +C 111 ; WX 499.89 ; N o ; B 28 -11 471 447 ; +C 112 ; WX 555.44 ; N p ; B 26 -194 521 441 ; +C 113 ; WX 527.67 ; N q ; B 33 -194 529 441 ; +C 114 ; WX 391.56 ; N r ; B 26 0 364 441 ; +C 115 ; WX 394.33 ; N s ; B 33 -11 360 447 ; +C 116 ; WX 388.78 ; N t ; B 19 -11 332 615 ; +C 117 ; WX 555.44 ; N u ; B 24 -11 530 441 ; +C 118 ; WX 527.67 ; N v ; B 19 -11 508 430 ; +C 119 ; WX 722 ; N w ; B 18 -11 703 430 ; +C 120 ; WX 527.67 ; N x ; B 12 0 516 430 ; +C 121 ; WX 527.67 ; N y ; B 19 -205 508 430 ; +C 122 ; WX 444.33 ; N z ; B 28 0 401 430 ; +C 123 ; WX 499.89 ; N braceleft ; B 70 -250 429 750 ; +C 124 ; WX 277.72 ; N bar ; B 119 -250 159 750 ; +C 125 ; WX 499.89 ; N braceright ; B 70 -250 429 750 ; +C 126 ; WX 611 ; N asciitilde ; B 83 572 527 668 ; +C 127 ; WX 333.28 ; N hyphen ; B 11 184 276 246 ; +C 128 ; WX 749.83 ; N Abreve ; B 18 0 703 891 ; +C 129 ; WX 749.83 ; N Aogonek ; B 18 -188 740 716 ; +C 130 ; WX 722 ; N Cacute ; B 56 -22 665 895 ; +C 131 ; WX 722 ; N Ccaron ; B 56 -22 665 856 ; +C 132 ; WX 763.72 ; N Dcaron ; B 19 0 693 856 ; +C 133 ; WX 680.39 ; N Ecaron ; B 17 0 637 856 ; +C 134 ; WX 680.39 ; N Eogonek ; B 17 -188 637 680 ; +C 135 ; WX 784.56 ; N Gbreve ; B 56 -22 735 891 ; +C 136 ; WX 624.83 ; N Lacute ; B 17 0 568 895 ; +C 137 ; WX 624.83 ; N Lquoteright ; B 17 0 568 683 ; +C 138 ; WX 624.83 ; N Lslash ; B 17 0 568 683 ; +C 139 ; WX 749.83 ; N Nacute ; B 17 0 704 895 ; +C 140 ; WX 749.83 ; N Ncaron ; B 17 0 704 856 ; +C 141 ; WX 727.61 ; N Eng ; B 24 -22 676 694 ; +C 142 ; WX 777.61 ; N Ohungarumlaut ; B 56 -22 721 895 ; +C 143 ; WX 735.94 ; N Racute ; B 19 -22 718 895 ; +C 144 ; WX 735.94 ; N Rcaron ; B 19 -22 718 856 ; +C 145 ; WX 555.44 ; N Sacute ; B 56 -22 498 895 ; +C 146 ; WX 555.44 ; N Scaron ; B 56 -22 498 856 ; +C 147 ; WX 555.44 ; N Scedilla ; B 56 -205 498 705 ; +C 148 ; WX 722 ; N Tcaron ; B 37 0 686 856 ; +C 149 ; WX 722 ; N Tcedilla ; B 37 -205 686 677 ; +C 150 ; WX 749.83 ; N Uhungarumlaut ; B 17 -22 704 895 ; +C 151 ; WX 749.83 ; N Uring ; B 17 -22 704 913 ; +C 152 ; WX 749.83 ; N Ydieresis ; B -3 0 724 839 ; +C 153 ; WX 611 ; N Zacute ; B 56 0 560 895 ; +C 154 ; WX 611 ; N Zcaron ; B 56 0 560 856 ; +C 155 ; WX 611 ; N Zdotaccent ; B 56 0 560 891 ; +C 156 ; WX 860.89 ; N IJ ; B 12 -22 798 683 ; +C 157 ; WX 361 ; N Idotaccent ; B 12 0 321 877 ; +C 158 ; WX 555.44 ; N dbar ; B 33 -11 528 694 ; +C 159 ; WX 444.33 ; N section ; B 69 -205 374 705 ; +C 160 ; WX 499.89 ; N abreve ; B 40 -11 493 694 ; +C 161 ; WX 499.89 ; N aogonek ; B 40 -194 493 447 ; +C 162 ; WX 444.33 ; N cacute ; B 33 -11 415 643 ; +C 163 ; WX 444.33 ; N ccaron ; B 33 -11 415 604 ; +C 164 ; WX 674.83 ; N dquoteright ; B 33 -11 665 694 ; +C 165 ; WX 444.33 ; N ecaron ; B 28 -11 415 604 ; +C 166 ; WX 444.33 ; N eogonek ; B 28 -194 415 447 ; +C 167 ; WX 499.89 ; N gbreve ; B 28 -206 485 694 ; +C 168 ; WX 277.72 ; N lacute ; B 25 0 282 907 ; +C 169 ; WX 402.67 ; N lquoteright ; B 25 0 386 694 ; +C 170 ; WX 277.72 ; N lslash ; B 18 0 258 694 ; +C 171 ; WX 555.44 ; N nacute ; B 24 0 530 643 ; +C 172 ; WX 555.44 ; N ncaron ; B 24 0 530 604 ; +C 173 ; WX 555.44 ; N eng ; B 24 -205 452 441 ; +C 174 ; WX 499.89 ; N ohungarumlaut ; B 28 -11 521 643 ; +C 175 ; WX 391.56 ; N racute ; B 26 0 364 643 ; +C 176 ; WX 391.56 ; N rcaron ; B 26 0 364 604 ; +C 177 ; WX 394.33 ; N sacute ; B 33 -11 360 643 ; +C 178 ; WX 394.33 ; N scaron ; B 33 -11 360 604 ; +C 179 ; WX 394.33 ; N scedilla ; B 33 -205 360 447 ; +C 180 ; WX 411 ; N tquoteright ; B 19 -11 401 704 ; +C 181 ; WX 388.78 ; N tcedilla ; B 19 -205 359 615 ; +C 182 ; WX 555.44 ; N uhungarumlaut ; B 24 -11 549 643 ; +C 183 ; WX 555.44 ; N uring ; B 24 -11 530 661 ; +C 184 ; WX 527.67 ; N ydieresis ; B 19 -205 508 586 ; +C 185 ; WX 444.33 ; N zacute ; B 28 0 401 643 ; +C 186 ; WX 444.33 ; N zcaron ; B 28 0 401 604 ; +C 187 ; WX 444.33 ; N zdotaccent ; B 28 0 402 669 ; +C 188 ; WX 583.17 ; N ij ; B 33 -205 485 669 ; +C 189 ; WX 277.72 ; N exclamdown ; B 84 -216 194 500 ; +C 190 ; WX 472.11 ; N questiondown ; B 56 -205 415 500 ; +C 191 ; WX 638.72 ; N sterling ; B 56 -11 620 709 ; +C 192 ; WX 749.83 ; N Agrave ; B 18 0 703 895 ; +C 193 ; WX 749.83 ; N Aacute ; B 18 0 703 895 ; +C 194 ; WX 749.83 ; N Acircumflex ; B 18 0 703 891 ; +C 195 ; WX 749.83 ; N Atilde ; B 18 0 703 891 ; +C 196 ; WX 749.83 ; N Adieresis ; B 18 0 703 839 ; +C 197 ; WX 749.83 ; N Aring ; B 18 0 703 872 ; +C 198 ; WX 902.56 ; N AE ; B 18 0 860 683 ; +C 199 ; WX 722 ; N Ccedilla ; B 56 -205 665 705 ; +C 200 ; WX 680.39 ; N Egrave ; B 17 0 637 895 ; +C 201 ; WX 680.39 ; N Eacute ; B 17 0 637 895 ; +C 202 ; WX 680.39 ; N Ecircumflex ; B 17 0 637 891 ; +C 203 ; WX 680.39 ; N Edieresis ; B 17 0 637 839 ; +C 204 ; WX 361 ; N Igrave ; B 12 0 321 895 ; +C 205 ; WX 361 ; N Iacute ; B 12 0 321 895 ; +C 206 ; WX 361 ; N Icircumflex ; B 12 0 321 891 ; +C 207 ; WX 361 ; N Idieresis ; B 12 0 321 839 ; +C 208 ; WX 763.72 ; N Eth ; B 19 0 693 683 ; +C 209 ; WX 749.83 ; N Ntilde ; B 17 0 704 891 ; +C 210 ; WX 777.61 ; N Ograve ; B 56 -22 721 895 ; +C 211 ; WX 777.61 ; N Oacute ; B 56 -22 721 895 ; +C 212 ; WX 777.61 ; N Ocircumflex ; B 56 -22 721 891 ; +C 213 ; WX 777.61 ; N Otilde ; B 56 -22 721 891 ; +C 214 ; WX 777.61 ; N Odieresis ; B 56 -22 721 839 ; +C 215 ; WX 1013.67 ; N OE ; B 56 -22 971 705 ; +C 216 ; WX 777.61 ; N Oslash ; B 56 -57 721 740 ; +C 217 ; WX 749.83 ; N Ugrave ; B 17 -22 704 895 ; +C 218 ; WX 749.83 ; N Uacute ; B 17 -22 704 895 ; +C 219 ; WX 749.83 ; N Ucircumflex ; B 17 -22 704 891 ; +C 220 ; WX 749.83 ; N Udieresis ; B 17 -22 704 839 ; +C 221 ; WX 749.83 ; N Yacute ; B -3 0 724 895 ; +C 222 ; WX 624.83 ; N Thorn ; B 20 0 554 683 ; +C 223 ; WX 1110.83 ; N Germandbls ; B 56 -22 1054 705 ; +C 224 ; WX 499.89 ; N agrave ; B 40 -11 493 643 ; +C 225 ; WX 499.89 ; N aacute ; B 40 -11 493 643 ; +C 226 ; WX 499.89 ; N acircumflex ; B 40 -11 493 639 ; +C 227 ; WX 499.89 ; N atilde ; B 40 -11 493 669 ; +C 228 ; WX 499.89 ; N adieresis ; B 40 -11 493 586 ; +C 229 ; WX 499.89 ; N aring ; B 40 -11 493 661 ; +C 230 ; WX 722 ; N ae ; B 43 -11 693 447 ; +C 231 ; WX 444.33 ; N ccedilla ; B 33 -205 415 447 ; +C 232 ; WX 444.33 ; N egrave ; B 28 -11 415 643 ; +C 233 ; WX 444.33 ; N eacute ; B 28 -11 415 643 ; +C 234 ; WX 444.33 ; N ecircumflex ; B 28 -11 415 639 ; +C 235 ; WX 444.33 ; N edieresis ; B 28 -11 415 586 ; +C 236 ; WX 277.72 ; N igrave ; B -6 0 243 643 ; +C 237 ; WX 277.72 ; N iacute ; B 25 0 282 643 ; +C 238 ; WX 277.72 ; N icircumflex ; B 3 0 274 639 ; +C 239 ; WX 333.28 ; N idieresis ; B -9 0 289 586 ; +C 240 ; WX 499.89 ; N eth ; B 28 -11 471 694 ; +C 241 ; WX 555.44 ; N ntilde ; B 24 0 530 669 ; +C 242 ; WX 499.89 ; N ograve ; B 28 -11 471 643 ; +C 243 ; WX 499.89 ; N oacute ; B 28 -11 471 643 ; +C 244 ; WX 499.89 ; N ocircumflex ; B 28 -11 471 639 ; +C 245 ; WX 499.89 ; N otilde ; B 28 -11 471 669 ; +C 246 ; WX 499.89 ; N odieresis ; B 28 -11 471 586 ; +C 247 ; WX 777.61 ; N oe ; B 28 -11 749 447 ; +C 248 ; WX 499.89 ; N oslash ; B 33 -103 466 534 ; +C 249 ; WX 555.44 ; N ugrave ; B 24 -11 530 643 ; +C 250 ; WX 555.44 ; N uacute ; B 24 -11 530 643 ; +C 251 ; WX 555.44 ; N ucircumflex ; B 24 -11 530 639 ; +C 252 ; WX 555.44 ; N udieresis ; B 24 -11 530 586 ; +C 253 ; WX 527.67 ; N yacute ; B 19 -205 508 643 ; +C 254 ; WX 555.44 ; N thorn ; B 25 -205 521 694 ; +C 255 ; WX 499.89 ; N germandbls ; B 26 -11 471 705 ; +EndCharMetrics +StartKernData +StartKernPairs 471 +KPX A C -27.77 +KPX A G -27.77 +KPX A O -27.77 +KPX A Q -27.77 +KPX A T -83.31 +KPX A U -27.77 +KPX A V -111.08 +KPX A W -111.08 +KPX A Y -83.31 +KPX A t -27.77 +KPX Aacute C -27.77 +KPX Aacute G -27.77 +KPX Aacute O -27.77 +KPX Aacute Q -27.77 +KPX Aacute T -83.31 +KPX Aacute U -27.77 +KPX Aacute V -111.08 +KPX Aacute W -111.08 +KPX Aacute Y -83.31 +KPX Aacute t -27.77 +KPX Abreve C -27.77 +KPX Abreve G -27.77 +KPX Abreve O -27.77 +KPX Abreve Q -27.77 +KPX Abreve T -83.31 +KPX Abreve U -27.77 +KPX Abreve V -111.08 +KPX Abreve W -111.08 +KPX Abreve Y -83.31 +KPX Abreve t -27.77 +KPX Acircumflex C -27.77 +KPX Acircumflex G -27.77 +KPX Acircumflex O -27.77 +KPX Acircumflex Q -27.77 +KPX Acircumflex T -83.31 +KPX Acircumflex U -27.77 +KPX Acircumflex V -111.08 +KPX Acircumflex W -111.08 +KPX Acircumflex Y -83.31 +KPX Acircumflex t -27.77 +KPX Adieresis C -27.77 +KPX Adieresis G -27.77 +KPX Adieresis O -27.77 +KPX Adieresis Q -27.77 +KPX Adieresis T -83.31 +KPX Adieresis U -27.77 +KPX Adieresis V -111.08 +KPX Adieresis W -111.08 +KPX Adieresis Y -83.31 +KPX Adieresis t -27.77 +KPX Agrave C -27.77 +KPX Agrave G -27.77 +KPX Agrave O -27.77 +KPX Agrave Q -27.77 +KPX Agrave T -83.31 +KPX Agrave U -27.77 +KPX Agrave V -111.08 +KPX Agrave W -111.08 +KPX Agrave Y -83.31 +KPX Agrave t -27.77 +KPX Aogonek C -27.77 +KPX Aogonek G -27.77 +KPX Aogonek O -27.77 +KPX Aogonek Q -27.77 +KPX Aogonek T -83.31 +KPX Aogonek U -27.77 +KPX Aogonek V -111.08 +KPX Aogonek W -111.08 +KPX Aogonek Y -83.31 +KPX Aogonek t -27.77 +KPX Aring C -27.77 +KPX Aring G -27.77 +KPX Aring O -27.77 +KPX Aring Q -27.77 +KPX Aring T -83.31 +KPX Aring U -27.77 +KPX Aring V -111.08 +KPX Aring W -111.08 +KPX Aring Y -83.31 +KPX Aring t -27.77 +KPX Atilde C -27.77 +KPX Atilde G -27.77 +KPX Atilde O -27.77 +KPX Atilde Q -27.77 +KPX Atilde T -83.31 +KPX Atilde U -27.77 +KPX Atilde V -111.08 +KPX Atilde W -111.08 +KPX Atilde Y -83.31 +KPX Atilde t -27.77 +KPX D A -27.77 +KPX D V -27.77 +KPX D W -27.77 +KPX D X -27.77 +KPX D Y -27.77 +KPX F A -111.08 +KPX F C -27.77 +KPX F G -27.77 +KPX F O -27.77 +KPX F Q -27.77 +KPX F a -83.31 +KPX F e -83.31 +KPX F o -83.31 +KPX F r -83.31 +KPX F u -83.31 +KPX I I 27.77 +KPX K C -27.77 +KPX K G -27.77 +KPX K O -27.77 +KPX K Q -27.77 +KPX L T -83.31 +KPX L V -111.08 +KPX L W -111.08 +KPX L Y -83.31 +KPX O A -27.77 +KPX O V -27.77 +KPX O W -27.77 +KPX O X -27.77 +KPX O Y -27.77 +KPX P A -83.31 +KPX P a -27.77 +KPX P aacute -27.77 +KPX P acircumflex -27.77 +KPX P acircumflex -27.77 +KPX P adieresis -27.77 +KPX P ae -27.77 +KPX P agrave -27.77 +KPX P aogonek -27.77 +KPX P aring -27.77 +KPX P atilde -27.77 +KPX P cacute -27.77 +KPX P comma -83.31 +KPX P e -27.77 +KPX P eacute -27.77 +KPX P ecaron -27.77 +KPX P ecircumflex -27.77 +KPX P edieresis -27.77 +KPX P egrave -27.77 +KPX P eogonek -27.77 +KPX P o -27.77 +KPX P oacute -27.77 +KPX P ocircumflex -27.77 +KPX P odieresis -27.77 +KPX P oe -27.77 +KPX P ograve -27.77 +KPX P ohungarumlaut -27.77 +KPX P otilde -27.77 +KPX P period -83.31 +KPX R C -27.77 +KPX R G -27.77 +KPX R O -27.77 +KPX R Q -27.77 +KPX R T -83.31 +KPX R U -27.77 +KPX R V -111.08 +KPX R W -111.08 +KPX R Y -83.31 +KPX R t -27.77 +KPX T A -83.31 +KPX T a -83.31 +KPX T e -83.31 +KPX T o -83.31 +KPX T r -83.31 +KPX T u -83.31 +KPX T y -27.77 +KPX V A -111.08 +KPX V C -27.77 +KPX V G -27.77 +KPX V O -27.77 +KPX V Q -27.77 +KPX V a -83.31 +KPX V e -83.31 +KPX V o -83.31 +KPX V r -83.31 +KPX V u -83.31 +KPX W A -111.08 +KPX W C -27.77 +KPX W G -27.77 +KPX W O -27.77 +KPX W Q -27.77 +KPX W a -83.31 +KPX W e -83.31 +KPX W o -83.31 +KPX W r -83.31 +KPX W u -83.31 +KPX X C -27.77 +KPX X G -27.77 +KPX X O -27.77 +KPX X Q -27.77 +KPX Y A -83.31 +KPX Y a -83.31 +KPX Y e -83.31 +KPX Y o -83.31 +KPX Y r -83.31 +KPX Y u -83.31 +KPX a j 55.54 +KPX a v -27.77 +KPX a w -27.77 +KPX a y -27.77 +KPX b c 27.77 +KPX b cacute 27.77 +KPX b ccaron 27.77 +KPX b ccedilla 27.77 +KPX b d 27.77 +KPX b e 27.77 +KPX b eacute 27.77 +KPX b ecaron 27.77 +KPX b ecircumflex 27.77 +KPX b edieresis 27.77 +KPX b egrave 27.77 +KPX b eogonek 27.77 +KPX b j 55.54 +KPX b o 27.77 +KPX b oacute 27.77 +KPX b ocircumflex 27.77 +KPX b odieresis 27.77 +KPX b oe 27.77 +KPX b ograve 27.77 +KPX b ohungarumlaut 27.77 +KPX b otilde 27.77 +KPX b q 27.77 +KPX b v -27.77 +KPX b w -27.77 +KPX b x -27.77 +KPX b y -27.77 +KPX c h -27.77 +KPX c k -27.77 +KPX f bracketright 77.76 +KPX f exclam 77.76 +KPX f parenright 77.76 +KPX f question 77.76 +KPX f quoteright 77.76 +KPX ff bracketright 77.76 +KPX ff exclam 77.76 +KPX ff parenright 77.76 +KPX ff question 77.76 +KPX ff quoteright 77.76 +KPX g j 27.77 +KPX h b -27.77 +KPX h t -27.77 +KPX h u -27.77 +KPX h uacute -27.77 +KPX h ucircumflex -27.77 +KPX h udieresis -27.77 +KPX h ugrave -27.77 +KPX h uhungarumlaut -27.77 +KPX h uring -27.77 +KPX h v -27.77 +KPX h w -27.77 +KPX h y -27.77 +KPX k a -27.77 +KPX k a -55.54 +KPX k aacute -27.77 +KPX k aacute -55.54 +KPX k acircumflex -55.54 +KPX k acircumflex -55.54 +KPX k acircumflex -27.77 +KPX k acircumflex -27.77 +KPX k adieresis -27.77 +KPX k adieresis -55.54 +KPX k ae -55.54 +KPX k ae -27.77 +KPX k agrave -55.54 +KPX k agrave -27.77 +KPX k aogonek -55.54 +KPX k aogonek -27.77 +KPX k aring -55.54 +KPX k aring -27.77 +KPX k atilde -27.77 +KPX k atilde -55.54 +KPX k c -27.77 +KPX k cacute -27.77 +KPX k cacute -27.77 +KPX k cacute -55.54 +KPX k ccaron -27.77 +KPX k ccedilla -27.77 +KPX k e -27.77 +KPX k eacute -27.77 +KPX k ecaron -27.77 +KPX k ecircumflex -27.77 +KPX k edieresis -27.77 +KPX k egrave -27.77 +KPX k eogonek -27.77 +KPX k o -27.77 +KPX k oacute -27.77 +KPX k ocircumflex -27.77 +KPX k odieresis -27.77 +KPX k oe -27.77 +KPX k ograve -27.77 +KPX k ohungarumlaut -27.77 +KPX k otilde -27.77 +KPX m b -27.77 +KPX m t -27.77 +KPX m u -27.77 +KPX m uacute -27.77 +KPX m ucircumflex -27.77 +KPX m udieresis -27.77 +KPX m ugrave -27.77 +KPX m uhungarumlaut -27.77 +KPX m uring -27.77 +KPX m v -27.77 +KPX m w -27.77 +KPX m y -27.77 +KPX n b -27.77 +KPX n t -27.77 +KPX n u -27.77 +KPX n uacute -27.77 +KPX n ucircumflex -27.77 +KPX n udieresis -27.77 +KPX n ugrave -27.77 +KPX n uhungarumlaut -27.77 +KPX n uring -27.77 +KPX n v -27.77 +KPX n w -27.77 +KPX n y -27.77 +KPX o c 27.77 +KPX o cacute 27.77 +KPX o ccaron 27.77 +KPX o ccedilla 27.77 +KPX o d 27.77 +KPX o e 27.77 +KPX o eacute 27.77 +KPX o ecaron 27.77 +KPX o ecircumflex 27.77 +KPX o edieresis 27.77 +KPX o egrave 27.77 +KPX o eogonek 27.77 +KPX o j 55.54 +KPX o o 27.77 +KPX o oacute 27.77 +KPX o ocircumflex 27.77 +KPX o odieresis 27.77 +KPX o oe 27.77 +KPX o ograve 27.77 +KPX o ohungarumlaut 27.77 +KPX o otilde 27.77 +KPX o q 27.77 +KPX o v -27.77 +KPX o w -27.77 +KPX o x -27.77 +KPX o y -27.77 +KPX p c 27.77 +KPX p cacute 27.77 +KPX p ccaron 27.77 +KPX p ccedilla 27.77 +KPX p d 27.77 +KPX p e 27.77 +KPX p eacute 27.77 +KPX p ecaron 27.77 +KPX p ecircumflex 27.77 +KPX p edieresis 27.77 +KPX p egrave 27.77 +KPX p eogonek 27.77 +KPX p j 55.54 +KPX p o 27.77 +KPX p oacute 27.77 +KPX p ocircumflex 27.77 +KPX p odieresis 27.77 +KPX p oe 27.77 +KPX p ograve 27.77 +KPX p ohungarumlaut 27.77 +KPX p otilde 27.77 +KPX p q 27.77 +KPX p v -27.77 +KPX p w -27.77 +KPX p x -27.77 +KPX p y -27.77 +KPX quoteright exclam 111.08 +KPX quoteright question 111.08 +KPX t w -27.77 +KPX t y -27.77 +KPX u w -27.77 +KPX v a -27.77 +KPX v a -55.54 +KPX v aacute -27.77 +KPX v aacute -55.54 +KPX v acircumflex -55.54 +KPX v acircumflex -27.77 +KPX v acircumflex -27.77 +KPX v acircumflex -55.54 +KPX v adieresis -27.77 +KPX v adieresis -55.54 +KPX v ae -27.77 +KPX v ae -55.54 +KPX v agrave -27.77 +KPX v agrave -55.54 +KPX v aogonek -55.54 +KPX v aogonek -27.77 +KPX v aring -55.54 +KPX v aring -27.77 +KPX v atilde -55.54 +KPX v atilde -27.77 +KPX v c -27.77 +KPX v cacute -55.54 +KPX v cacute -27.77 +KPX v cacute -27.77 +KPX v ccaron -27.77 +KPX v ccedilla -27.77 +KPX v e -27.77 +KPX v eacute -27.77 +KPX v ecaron -27.77 +KPX v ecircumflex -27.77 +KPX v edieresis -27.77 +KPX v egrave -27.77 +KPX v eogonek -27.77 +KPX v o -27.77 +KPX v oacute -27.77 +KPX v ocircumflex -27.77 +KPX v odieresis -27.77 +KPX v oe -27.77 +KPX v ograve -27.77 +KPX v ohungarumlaut -27.77 +KPX v otilde -27.77 +KPX w a -27.77 +KPX w aacute -27.77 +KPX w acircumflex -27.77 +KPX w acircumflex -27.77 +KPX w adieresis -27.77 +KPX w ae -27.77 +KPX w agrave -27.77 +KPX w aogonek -27.77 +KPX w aring -27.77 +KPX w atilde -27.77 +KPX w c -27.77 +KPX w cacute -27.77 +KPX w cacute -27.77 +KPX w ccaron -27.77 +KPX w ccedilla -27.77 +KPX w e -27.77 +KPX w eacute -27.77 +KPX w ecaron -27.77 +KPX w ecircumflex -27.77 +KPX w edieresis -27.77 +KPX w egrave -27.77 +KPX w eogonek -27.77 +KPX w o -27.77 +KPX w oacute -27.77 +KPX w ocircumflex -27.77 +KPX w odieresis -27.77 +KPX w oe -27.77 +KPX w ograve -27.77 +KPX w ohungarumlaut -27.77 +KPX w otilde -27.77 +KPX y a -27.77 +KPX y aacute -27.77 +KPX y acircumflex -27.77 +KPX y acircumflex -27.77 +KPX y adieresis -27.77 +KPX y ae -27.77 +KPX y agrave -27.77 +KPX y aogonek -27.77 +KPX y aring -27.77 +KPX y atilde -27.77 +KPX y cacute -27.77 +KPX y comma -83.31 +KPX y e -27.77 +KPX y eacute -27.77 +KPX y ecaron -27.77 +KPX y ecircumflex -27.77 +KPX y edieresis -27.77 +KPX y egrave -27.77 +KPX y eogonek -27.77 +KPX y o -27.77 +KPX y oacute -27.77 +KPX y ocircumflex -27.77 +KPX y odieresis -27.77 +KPX y oe -27.77 +KPX y ograve -27.77 +KPX y ohungarumlaut -27.77 +KPX y otilde -27.77 +KPX y period -83.31 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/fontfiles/dcr10.pfb b/fontfiles/dcr10.pfb new file mode 100644 index 0000000000000000000000000000000000000000..34cb0eaa8f5dca7cd91173fe93942544a1c06f19 GIT binary patch literal 40627 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 literal 0 HcmV?d00001 diff --git a/fontfiles/dodge.ttf b/fontfiles/dodge.ttf new file mode 100644 index 0000000000000000000000000000000000000000..132b95b530ce24abca98963d52a0c46311008269 GIT binary patch literal 11032 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 literal 0 HcmV?d00001 diff --git a/gaussian.c b/gaussian.c new file mode 100644 index 00000000..13cfd313 --- /dev/null +++ b/gaussian.c @@ -0,0 +1,71 @@ +#include "image.h" + +float +gauss(int x,float std) { + return 1.0/(sqrt(2.0*PI)*std)*exp(-(float)(x)*(float)(x)/(2*std*std)); +} + +/* Counters are as follows + l: lines + i: columns + c: filter coeffs + ch: channels + pc: coeff equalization +*/ + + + +void +i_gaussian(i_img *im,float stdev) { + int i,l,c,ch; + float pc; + float coeff[21]; + i_color rcolor; + float res[11]; + i_img timg; + + mm_log((1,"i_gaussian(im* 0x%x,stdev %.2f)\n",im,stdev)); + + i_img_empty_ch(&timg,im->xsize,im->ysize,im->channels); + + for(i=0;i<11;i++) coeff[10+i]=coeff[10-i]=gauss(i,stdev); + pc=0; + for(i=0;i<21;i++) pc+=coeff[i]; + for(i=0;i<21;i++) coeff[i]/=pc; + + + for(l=0;lysize;l++) { + for(i=0;ixsize;i++) { + pc=0.0; + for(ch=0;chchannels;ch++) res[ch]=0; + for(c=0;c<21;c++) + if (i_gpix(im,i+c-10,l,&rcolor)!=-1) { + for(ch=0;chchannels;ch++) res[ch]+=(float)(rcolor.channel[ch])*coeff[c]; + pc+=coeff[c]; + } + for(ch=0;chchannels;ch++) rcolor.channel[ch]=(unsigned char)(((res[ch]/(float)(pc)>255.0)?255.0:res[ch]/(float)(pc))); + i_ppix(&timg,i,l,&rcolor); + } + } + + for(l=0;lxsize;l++) { + for(i=0;iysize;i++) { + pc=0.0; + for(ch=0;chchannels;ch++) res[ch]=0; + for(c=0;c<21;c++) + if (i_gpix(&timg,l,i+c-10,&rcolor)!=-1) { + for(ch=0;chchannels;ch++) res[ch]+=(float)(rcolor.channel[ch])*coeff[c]; + pc+=coeff[c]; + } + for(ch=0;chchannels;ch++) rcolor.channel[ch]=(unsigned char)(((res[ch]/(float)(pc)>255.0)?255.0:res[ch]/(float)(pc))); + i_ppix(im,l,i,&rcolor); + } + } +} + + + + + + + diff --git a/gif.c b/gif.c new file mode 100644 index 00000000..55f923aa --- /dev/null +++ b/gif.c @@ -0,0 +1,839 @@ +#include "image.h" +#include + + +#if IM_GIFMAJOR >= 4 + +struct gif_scalar_info { + char *data; + int length; + int cpos; +}; + +int +my_gif_inputfunc(GifFileType* gft, GifByteType *buf,int length) { + struct gif_scalar_info *gsi=(struct gif_scalar_info *)gft->UserData; + /* fprintf(stderr,"my_gif_inputfunc: length=%d cpos=%d tlength=%d\n",length,gsi->cpos,gsi->length); */ + + if (gsi->cpos == gsi->length) return 0; + if (gsi->cpos+length > gsi->length) length=gsi->length-gsi->cpos; /* Don't read too much */ + memcpy(buf,gsi->data+gsi->cpos,length); + gsi->cpos+=length; + return length; +} + +#endif + +/* + This file needs a complete rewrite + + This file needs a complete rewrite + + Maybe not anymore, though reading still needs to support reading + all those gif properties. +*/ + +/* Make some variables global, so we could access them faster: */ + +static int + ImageNum = 0, + BackGround = 0, + ColorMapSize = 0, + InterlacedOffset[] = { 0, 4, 2, 1 }, /* The way Interlaced image should. */ + InterlacedJumps[] = { 8, 8, 4, 2 }; /* be read - offsets and jumps... */ +static ColorMapObject *ColorMap; + +i_img * +i_readgif_low(GifFileType *GifFile, int **colour_table, int *colours) { + i_img *im; + int i, j, Size, Row, Col, Width, Height, ExtCode, Count, x; + GifRecordType RecordType; + GifByteType *Extension; + + GifRowType GifRow; + static GifColorType *ColorMapEntry; + i_color col; + + /* unsigned char *Buffer, *BufferP; */ + + mm_log((1,"i_readgif_low(GifFile %p, colour_table %p, colours %p)\n", GifFile, colour_table, colours)); + + BackGround = GifFile->SBackGroundColor; + ColorMap = (GifFile->Image.ColorMap ? GifFile->Image.ColorMap : GifFile->SColorMap); + ColorMapSize = ColorMap->ColorCount; + + /* **************************************** */ + if(colour_table != NULL) { + int q; + *colour_table=mymalloc(sizeof(int *) * ColorMapSize * 3); + if(*colour_table == NULL) + m_fatal(0,"Failed to allocate memory for GIF colour table, aborted."); + + memset(*colour_table, 0, sizeof(int *) * ColorMapSize * 3); + + for(q=0; qColors[q]; + (*colour_table)[q*3 + 0]=ColorMapEntry->Red; + (*colour_table)[q*3 + 1]=ColorMapEntry->Green; + (*colour_table)[q*3 + 2]=ColorMapEntry->Blue; + } + } + + if(colours != NULL) { + *colours = ColorMapSize; + } + + /* **************************************** */ + im=i_img_empty_ch(NULL,GifFile->SWidth,GifFile->SHeight,3); + + Size = GifFile->SWidth * sizeof(GifPixelType); + + if ((GifRow = (GifRowType) mymalloc(Size)) == NULL) + m_fatal(0,"Failed to allocate memory required, aborted."); /* First row. */ + + for (i = 0; i < GifFile->SWidth; i++) GifRow[i] = GifFile->SBackGroundColor; + + /* Scan the content of the GIF file and load the image(s) in: */ + do { + if (DGifGetRecordType(GifFile, &RecordType) == GIF_ERROR) { + PrintGifError(); + exit(-1); + } + + switch (RecordType) { + case IMAGE_DESC_RECORD_TYPE: + if (DGifGetImageDesc(GifFile) == GIF_ERROR) { + PrintGifError(); + exit(-1); + } + Row = GifFile->Image.Top; /* Image Position relative to Screen. */ + Col = GifFile->Image.Left; + Width = GifFile->Image.Width; + Height = GifFile->Image.Height; + ImageNum++; + mm_log((1,"i_readgif: Image %d at (%d, %d) [%dx%d]: \n",ImageNum, Col, Row, Width, Height)); + + if (GifFile->Image.Left + GifFile->Image.Width > GifFile->SWidth || + GifFile->Image.Top + GifFile->Image.Height > GifFile->SHeight) { + fprintf(stderr, "Image %d is not confined to screen dimension, aborted.\n",ImageNum); + return(0); + } + if (GifFile->Image.Interlace) { + + for (Count = i = 0; i < 4; i++) for (j = Row + InterlacedOffset[i]; j < Row + Height; j += InterlacedJumps[i]) { + Count++; + if (DGifGetLine(GifFile, &GifRow[Col], Width) == GIF_ERROR) { + mm_log((1,"fatal")); + exit(-1); + } + + for (x = 0; x < GifFile->SWidth; x++) { + ColorMapEntry = &ColorMap->Colors[GifRow[x]]; + col.rgb.r = ColorMapEntry->Red; + col.rgb.g = ColorMapEntry->Green; + col.rgb.b = ColorMapEntry->Blue; + i_ppix(im,x,j,&col); + } + + } + } + else { + for (i = 0; i < Height; i++) { + if (DGifGetLine(GifFile, &GifRow[Col], Width) == GIF_ERROR) { + mm_log((1,"fatal\n")); + exit(-1); + } + + for (x = 0; x < GifFile->SWidth; x++) { + ColorMapEntry = &ColorMap->Colors[GifRow[x]]; + col.rgb.r = ColorMapEntry->Red; + col.rgb.g = ColorMapEntry->Green; + col.rgb.b = ColorMapEntry->Blue; + i_ppix(im,x,Row,&col); + } + Row++; + } + } + break; + case EXTENSION_RECORD_TYPE: + /* Skip any extension blocks in file: */ + if (DGifGetExtension(GifFile, &ExtCode, &Extension) == GIF_ERROR) { + mm_log((1,"fatal\n")); + exit(-1); + } + while (Extension != NULL) { + if (DGifGetExtensionNext(GifFile, &Extension) == GIF_ERROR) { + mm_log((1,"fatal\n")); + exit(-1); + } + } + break; + case TERMINATE_RECORD_TYPE: + break; + default: /* Should be traps by DGifGetRecordType. */ + break; + } + } while (RecordType != TERMINATE_RECORD_TYPE); + + myfree(GifRow); + + if (DGifCloseFile(GifFile) == GIF_ERROR) { + PrintGifError(); + exit(-1); + } + return im; +} + + +i_img * +i_readgif(int fd, int **colour_table, int *colours) { + GifFileType *GifFile; + + mm_log((1,"i_readgif(fd %d, colour_table %p, colours %p)\n", fd, colour_table, colours)); + + if ((GifFile = DGifOpenFileHandle(fd)) == NULL) { + mm_log((1,"i_readgif: Unable to open file\n")); + return NULL; + } + + return i_readgif_low(GifFile, colour_table, colours); +} + + +undef_int +i_writegif(i_img *im, int fd, int max_colors, int pixdev, int fixedlen, i_color fixed[]) +{ + i_color colors[256]; + i_quantize quant; + i_gif_opts opts; + + memset(&quant, 0, sizeof(quant)); + memset(&opts, 0, sizeof(opts)); + quant.make_colors = mc_addi; + quant.mc_colors = colors; + quant.mc_size = 1<channels==1 || im->channels==3)) { fprintf(stderr,"Unable to write gif, improper colorspace.\n"); exit(3); } + + xsize=im->xsize; + ysize=im->ysize; + channels=im->channels; + + colors=0; + ct=octt_new(); + + colors=0; + for(x=0;x maxc) { octt_delete(ct); } + We'll just bite the bullet */ + } + + ColorMapSize = (colors > 256) ? 256 : colors; + + Size = ((long) im->xsize) * im->ysize * sizeof(GifByteType); + + if ((OutputColorMap = MakeMapObject(ColorMapSize, NULL)) == NULL) + m_fatal(0,"Failed to allocate memory for Output colormap."); + if ((OutputBuffer = (GifByteType *) mymalloc(im->xsize * im->ysize * sizeof(GifByteType))) == NULL) + m_fatal(0,"Failed to allocate memory for output buffer."); + + if (QuantizeBuffer(im->xsize, im->ysize, &ColorMapSize, RedBuffer, GreenBuffer, BlueBuffer, + OutputBuffer, OutputColorMap->Colors) == GIF_ERROR) { + mm_log((1,"Error in QuantizeBuffer, unable to write image.\n")); + return(0); + } + + + myfree(RedBuffer); + if (im->channels == 3) { myfree(GreenBuffer); myfree(BlueBuffer); } + + if ((GifFile = EGifOpenFileHandle(fd)) == NULL) { + mm_log((1,"Error in EGifOpenFileHandle, unable to write image.\n")); + return(0); + } + + if (EGifPutScreenDesc(GifFile,im->xsize, im->ysize, colors, 0,OutputColorMap) == GIF_ERROR || + EGifPutImageDesc(GifFile,0, 0, im->xsize, im->ysize, FALSE, NULL) == GIF_ERROR) { + mm_log((1,"Error in EGifOpenFileHandle, unable to write image.\n")); + if (GifFile != NULL) EGifCloseFile(GifFile); + return(0); + } + + Ptr = OutputBuffer; + + for (y = 0; y < im->ysize; y++) { + if (EGifPutLine(GifFile, Ptr, im->xsize) == GIF_ERROR) { + mm_log((1,"Error in EGifOpenFileHandle, unable to write image.\n")); + if (GifFile != NULL) EGifCloseFile(GifFile); + return(0); + } + + Ptr += im->xsize; + } + + if (EGifCloseFile(GifFile) == GIF_ERROR) { + mm_log((1,"Error in EGifCloseFile, unable to write image.\n")); + return(0); + } + return(1); +} + +#endif + +i_img* +i_readgif_scalar(char *data, int length, int **colour_table, int *colours) { +#if IM_GIFMAJOR >= 4 + GifFileType *GifFile; + + struct gif_scalar_info gsi; + + gsi.cpos=0; + gsi.length=length; + gsi.data=data; + + mm_log((1,"i_readgif_scalar(char* data, int length, colour_table %p, colours %p)\n", data, length, colour_table, colours)); + if ((GifFile = DGifOpen( (void*) &gsi, my_gif_inputfunc )) == NULL) { + mm_log((1,"i_readgif_scalar: Unable to open scalar datasource.\n")); + return NULL; + } + + return i_readgif_low(GifFile, colour_table, colours); +#else + return NULL; +#endif +} + +#if IM_GIFMAJOR >= 4 + +static int +gif_read_callback(GifFileType *gft, GifByteType *buf, int length) { + return i_gen_reader((i_gen_read_data *)gft->UserData, buf, length); +} + +#endif + +i_img* +i_readgif_callback(i_read_callback_t cb, char *userdata, int **colour_table, int *colours) { +#if IM_GIFMAJOR >= 4 + GifFileType *GifFile; + i_img *result; + + i_gen_read_data *gci = i_gen_read_data_new(cb, userdata); + + mm_log((1,"i_readgif_callback(callback %p, userdata %p, colour_table %p, colours %p)\n", cb, userdata, colour_table, colours)); + if ((GifFile = DGifOpen( (void*) gci, gif_read_callback )) == NULL) { + mm_log((1,"i_readgif_callback: Unable to open callback datasource.\n")); + myfree(gci); + return NULL; + } + + result = i_readgif_low(GifFile, colour_table, colours); + free_gen_read_data(gci); + + return result; +#else + return NULL; +#endif +} + +/* low level image write + writes in interlace if that's what was requested */ +static undef_int +do_write(GifFileType *gf, i_gif_opts *opts, i_img *img, i_palidx *data) { + if (opts->interlace) { + int i, j; + for (i = 0; i < 4; ++i) { + for (j = InterlacedOffset[i]; j < img->ysize; j += InterlacedJumps[i]) { + if (EGifPutLine(gf, data+j*img->xsize, img->xsize) == GIF_ERROR) { + mm_log((1, "Error in EGifPutLine\n")); + EGifCloseFile(gf); + return 0; + } + } + } + } + else { + int y; + for (y = 0; y < img->ysize; ++y) { + if (EGifPutLine(gf, data, img->xsize) == GIF_ERROR) { + mm_log((1, "Error in EGifPutLine\n")); + EGifCloseFile(gf); + return 0; + } + data += img->xsize; + } + } + + return 1; +} + +static int do_gce(GifFileType *gf, int index, i_gif_opts *opts, int want_trans, int trans_index) +{ + unsigned char gce[4] = {0}; + int want_gce = 0; + if (want_trans) { + gce[0] |= 1; + gce[3] = trans_index; + ++want_gce; + } + if (index < opts->delay_count) { + gce[1] = opts->delays[index] % 256; + gce[2] = opts->delays[index] / 256; + ++want_gce; + } + if (index < opts->user_input_count) { + if (opts->user_input_flags[index]) + gce[0] |= 2; + ++want_gce; + } + if (index < opts->disposal_count) { + gce[0] |= (opts->disposal[index] & 3) << 2; + ++want_gce; + } + if (want_gce) { + return EGifPutExtension(gf, 0xF9, sizeof(gce), gce) != GIF_ERROR; + } + return 1; +} + +/* add the Netscape2.0 loop extension block, if requested */ +static int do_ns_loop(GifFileType *gf, i_gif_opts *opts) +{ +#if 0 + /* EGifPutExtension() doesn't appear to handle application + extension blocks in any way + Since giflib wraps the fd with a FILE * (and puts that in its + private data), we can't do an end-run and write the data + directly to the fd. + There's no open interface that takes a FILE * either, so we + can't workaround it that way either. + If giflib's callback interface wasn't broken by default, I'd + force file writes to use callbacks, but it is broken by default. + */ + if (opts->loop_count) { + unsigned char nsle[15] = "NETSCAPE2.0"; + nsle[11] = 3; + nsle[12] = 1; + nsle[13] = opts->loop_count % 256; + nsle[14] = opts->loop_count / 256; + return EGifPutExtension(gf, 0xFF, sizeof(nsle), nsle) != GIF_ERROR; + } +#endif + return 1; +} + +static ColorMapObject *make_gif_map(i_quantize *quant, i_gif_opts *opts, + int want_trans) { + GifColorType colors[256]; + int i; + int size = quant->mc_count; + int map_size; + + for (i = 0; i < quant->mc_count; ++i) { + colors[i].Red = quant->mc_colors[i].rgb.r; + colors[i].Green = quant->mc_colors[i].rgb.g; + colors[i].Blue = quant->mc_colors[i].rgb.b; + } + if (want_trans) { + colors[size].Red = opts->tran_color.rgb.r; + colors[size].Green = opts->tran_color.rgb.g; + colors[size].Blue = opts->tran_color.rgb.b; + ++size; + } + map_size = 1; + while (map_size < size) + map_size <<= 1; + return MakeMapObject(map_size, colors); +} + +/* we need to call EGifSetGifVersion() before opening the file - put that + common code here +*/ +static void gif_set_version(i_quantize *quant, i_gif_opts *opts) { + /* the following crashed giflib + the EGifSetGifVersion() is seriously borked in giflib + it's less borked in the ungiflib beta, but we don't have a mechanism + to distinguish them + if (opts->delay_count + || opts->user_input_count + || opts->disposal_count + || opts->loop_count + || quant->transp != tr_none) + EGifSetGifVersion("89a"); + else + EGifSetGifVersion("87a"); + */ +} + +static undef_int +i_writegif_low(i_quantize *quant, GifFileType *gf, i_img **imgs, int count, + i_gif_opts *opts) { + unsigned char *result; + int color_bits; + ColorMapObject *map; + int scrw = 0, scrh = 0; + int imgn, orig_count, orig_size; + int posx, posy; + + mm_log((1, "i_writegif_low(quant %p, gf %p, imgs %p, count %d, opts %p)\n", + quant, gf, imgs, count, opts)); + + /**((char *)0) = 1;*/ + /* sanity is nice */ + if (quant->mc_size > 256) + quant->mc_size = 256; + if (quant->mc_count > quant->mc_size) + quant->mc_count = quant->mc_size; + + for (imgn = 0; imgn < count; ++imgn) { + if (imgn < opts->position_count) { + if (imgs[imgn]->xsize + opts->positions[imgn].x > scrw) + scrw = imgs[imgn]->xsize + opts->positions[imgn].x; + if (imgs[imgn]->ysize + opts->positions[imgn].y > scrw) + scrh = imgs[imgn]->ysize + opts->positions[imgn].y; + } + else { + if (imgs[imgn]->xsize > scrw) + scrw = imgs[imgn]->xsize; + if (imgs[imgn]->ysize > scrh) + scrh = imgs[imgn]->ysize; + } + } + + + if (count <= 0) + return 0; /* what are you smoking? */ + + orig_count = quant->mc_count; + orig_size = quant->mc_size; + + if (opts->each_palette) { + int want_trans; + + /* we always generate a global palette - this lets systems with a + broken giflib work */ + quant_makemap(quant, imgs, 1); + result = quant_translate(quant, imgs[0]); + + want_trans = quant->transp != tr_none + && imgs[0]->channels == 4 + && quant->mc_count < 256; + if (want_trans) + quant_transparent(quant, result, imgs[0], quant->mc_count); + + if ((map = make_gif_map(quant, opts, want_trans)) == NULL) { + myfree(result); + EGifCloseFile(gf); + mm_log((1, "Error in MakeMapObject.")); + return 0; + } + + color_bits = 1; + while (quant->mc_size > (1 << color_bits)) + ++color_bits; + + if (EGifPutScreenDesc(gf, scrw, scrh, color_bits, 0, map) == GIF_ERROR) { + FreeMapObject(map); + myfree(result); + EGifCloseFile(gf); + mm_log((1, "Error in EGifPutScreenDesc.")); + return 0; + } + FreeMapObject(map); + + if (!do_ns_loop(gf, opts)) + return 0; + + if (!do_gce(gf, 0, opts, want_trans, quant->mc_count)) { + myfree(result); + EGifCloseFile(gf); + return 0; + } + if (opts->position_count) { + posx = opts->positions[0].x; + posy = opts->positions[0].y; + } + else + posx = posy = 0; + if (EGifPutImageDesc(gf, posx, posy, imgs[0]->xsize, imgs[0]->ysize, + opts->interlace, NULL) == GIF_ERROR) { + EGifCloseFile(gf); + mm_log((1, "Error in EGifPutImageDesc.")); + return 0; + } + if (!do_write(gf, opts, imgs[0], result)) { + EGifCloseFile(gf); + myfree(result); + return 0; + } + for (imgn = 1; imgn < count; ++imgn) { + quant->mc_count = orig_count; + quant->mc_size = orig_size; + quant_makemap(quant, imgs+imgn, 1); + result = quant_translate(quant, imgs[imgn]); + want_trans = quant->transp != tr_none + && imgs[imgn]->channels == 4 + && quant->mc_count < 256; + if (want_trans) + quant_transparent(quant, result, imgs[imgn], quant->mc_count); + + if (!do_gce(gf, imgn, opts, want_trans, quant->mc_count)) { + myfree(result); + EGifCloseFile(gf); + return 0; + } + if ((map = make_gif_map(quant, opts, want_trans)) == NULL) { + myfree(result); + EGifCloseFile(gf); + mm_log((1, "Error in MakeMapObject.")); + return 0; + } + if (imgn < opts->position_count) { + posx = opts->positions[imgn].x; + posy = opts->positions[imgn].y; + } + else + posx = posy = 0; + if (EGifPutImageDesc(gf, posx, posy, imgs[imgn]->xsize, + imgs[imgn]->ysize, opts->interlace, + map) == GIF_ERROR) { + myfree(result); + FreeMapObject(map); + EGifCloseFile(gf); + mm_log((1, "Error in EGifPutImageDesc.")); + return 0; + } + FreeMapObject(map); + + if (!do_write(gf, opts, imgs[imgn], result)) { + EGifCloseFile(gf); + myfree(result); + return 0; + } + myfree(result); + } + } + else { + int want_trans; + + mm_log((1, "i_writegif_low: GOT HERE\n")); + + /* handle the first image separately - since we allow giflib + conversion and giflib doesn't give us a separate function to build + the colormap. */ + + /* produce a colour map */ + quant_makemap(quant, imgs, count); + result = quant_translate(quant, imgs[0]); + + /* get a palette entry for the transparency iff we have an image + with an alpha channel */ + want_trans = 0; + for (imgn = 0; imgn < count; ++imgn) { + if (imgs[imgn]->channels == 4) { + ++want_trans; + break; + } + } + want_trans = want_trans && quant->transp != tr_none && quant->mc_count < 256; + if ((map = make_gif_map(quant, opts, want_trans)) == NULL) { + myfree(result); + EGifCloseFile(gf); + mm_log((1, "Error in MakeMapObject")); + return 0; + } + color_bits = 1; + while (quant->mc_count > (1 << color_bits)) + ++color_bits; + + if (EGifPutScreenDesc(gf, scrw, scrh, color_bits, 0, map) == GIF_ERROR) { + FreeMapObject(map); + myfree(result); + EGifCloseFile(gf); + mm_log((1, "Error in EGifPutScreenDesc.")); + return 0; + } + FreeMapObject(map); + + if (!do_ns_loop(gf, opts)) + return 0; + + if (!do_gce(gf, 0, opts, want_trans, quant->mc_count)) { + myfree(result); + EGifCloseFile(gf); + return 0; + } + if (opts->position_count) { + posx = opts->positions[0].x; + posy = opts->positions[0].y; + } + else + posx = posy = 0; + if (EGifPutImageDesc(gf, posx, posy, imgs[0]->xsize, imgs[0]->ysize, + opts->interlace, NULL) == GIF_ERROR) { + EGifCloseFile(gf); + mm_log((1, "Error in EGifPutImageDesc.")); + return 0; + } + if (want_trans && imgs[0]->channels == 4) + quant_transparent(quant, result, imgs[0], quant->mc_count); + + if (!do_write(gf, opts, imgs[0], result)) { + EGifCloseFile(gf); + myfree(result); + return 0; + } + myfree(result); + + for (imgn = 1; imgn < count; ++imgn) { + int local_trans; + result = quant_translate(quant, imgs[imgn]); + local_trans = want_trans && imgs[imgn]->channels == 4; + if (local_trans) + quant_transparent(quant, result, imgs[imgn], quant->mc_count); + if (!do_gce(gf, imgn, opts, local_trans, quant->mc_count)) { + myfree(result); + EGifCloseFile(gf); + return 0; + } + if (imgn < opts->position_count) { + posx = opts->positions[imgn].x; + posy = opts->positions[imgn].y; + } + else + posx = posy = 0; + if (EGifPutImageDesc(gf, posx, posy, + imgs[imgn]->xsize, imgs[imgn]->ysize, + opts->interlace, NULL) == GIF_ERROR) { + myfree(result); + EGifCloseFile(gf); + mm_log((1, "Error in EGifPutImageDesc.")); + return 0; + } + if (!do_write(gf, opts, imgs[imgn], result)) { + EGifCloseFile(gf); + myfree(result); + return 0; + } + myfree(result); + } + } + if (EGifCloseFile(gf) == GIF_ERROR) { + mm_log((1, "Error in EGifCloseFile\n")); + return 0; + } + + return 1; +} + +undef_int +i_writegif_gen(i_quantize *quant, int fd, i_img **imgs, int count, + i_gif_opts *opts) { + GifFileType *gf; + + mm_log((1, "i_writegif_gen(quant %p, fd %d, imgs %p, count %d, opts %p)\n", + quant, fd, imgs, count, opts)); + + gif_set_version(quant, opts); + + mm_log((1, "i_writegif_gen: set ops\n")); + + if ((gf = EGifOpenFileHandle(fd)) == NULL) { + mm_log((1, "Error in EGifOpenFileHandle, unable to write image.\n")); + return 0; + } + + return i_writegif_low(quant, gf, imgs, count, opts); +} + +#if IM_GIFMAJOR >= 4 + +static int gif_writer_callback(GifFileType *gf, const GifByteType *data, int size) +{ + i_gen_write_data *gwd = (i_gen_write_data *)gf->UserData; + + return i_gen_writer(gwd, data, size) ? size : 0; +} + +#endif + +undef_int +i_writegif_callback(i_quantize *quant, i_write_callback_t cb, char *userdata, + int maxlength, i_img **imgs, int count, i_gif_opts *opts) +{ +#if IM_GIFMAJOR >= 4 + GifFileType *gf; + i_gen_write_data *gwd = i_gen_write_data_new(cb, userdata, maxlength); + /* giflib declares this incorrectly as EgifOpen */ + extern GifFileType *EGifOpen(void *userData, OutputFunc writeFunc); + int result; + + mm_log((1, "i_writegif_callback(quant %p, i_write_callback_t %p, userdata $p, maxlength %d, imgs %p, count %d, opts %p)\n", + quant, cb, userdata, maxlength, imgs, count, opts)); + + if ((gf = EGifOpen(gwd, &gif_writer_callback)) == NULL) { + mm_log((1, "Error in EGifOpenFileHandle, unable to write image.\n")); + free_gen_write_data(gwd, 0); + return 0; + } + + result = i_writegif_low(quant, gf, imgs, count, opts); + return free_gen_write_data(gwd, result); +#else + return 0; +#endif +} diff --git a/image.c b/image.c new file mode 100644 index 00000000..dbbf1be2 --- /dev/null +++ b/image.c @@ -0,0 +1,1153 @@ +#include "image.h" +#include "io.h" + +/* +=head1 NAME + +image.c - implements most of the basic functions of Imager and much of the rest + +=head1 SYNOPSIS + + i_img *i; + i_color *c; + c = i_color_new(red, green, blue, alpha); + ICL_DESTROY(c); + i = i_img_new(); + i_img_destroy(i); + // and much more + +=head1 DESCRIPTION + +image.c implements the basic functions to create and destroy image and +color objects for Imager. + +=head1 FUNCTION REFERENCE + +Some of these functions are internal. + +=over 4 + +=cut +*/ + +#define XAXIS 0 +#define YAXIS 1 + +#define minmax(a,b,i) ( ((a>=i)?a: ( (b<=i)?b:i )) ) + +/* Hack around an obscure linker bug on solaris - probably due to builtin gcc thingies */ +void fake() { ceil(1); } + +/* +=item ICL_new_internal(r, g, b, a) + +Return a new color object with values passed to it. + + r - red component (range: 0 - 255) + g - green component (range: 0 - 255) + b - blue component (range: 0 - 255) + a - alpha component (range: 0 - 255) + +=cut +*/ + +i_color * +ICL_new_internal(unsigned char r,unsigned char g,unsigned char b,unsigned char a) { + i_color *cl=NULL; + + mm_log((1,"ICL_new_internal(r %d,g %d,b %d,a %d)\n",cl,r,g,b,a)); + + if ( (cl=mymalloc(sizeof(i_color))) == NULL) m_fatal(2,"malloc() error\n"); + cl->rgba.r=r; + cl->rgba.g=g; + cl->rgba.b=b; + cl->rgba.a=a; + mm_log((1,"(0x%x) <- ICL_new_internal\n",cl)); + return cl; +} + + +/* +=item ICL_set_internal(cl, r, g, b, a) + + Overwrite a color with new values. + + cl - pointer to color object + r - red component (range: 0 - 255) + g - green component (range: 0 - 255) + b - blue component (range: 0 - 255) + a - alpha component (range: 0 - 255) + +=cut +*/ + +i_color * +ICL_set_internal(i_color *cl,unsigned char r,unsigned char g,unsigned char b,unsigned char a) { + mm_log((1,"ICL_set_internal(cl* 0x%x,r %d,g %d,b %d,a %d)\n",cl,r,g,b,a)); + if (cl == NULL) + if ( (cl=mymalloc(sizeof(i_color))) == NULL) + m_fatal(2,"malloc() error\n"); + cl->rgba.r=r; + cl->rgba.g=g; + cl->rgba.b=b; + cl->rgba.a=a; + mm_log((1,"(0x%x) <- ICL_set_internal\n",cl)); + return cl; +} + + +/* +=item ICL_add(dst, src, ch) + +Add src to dst inplace - dst is modified. + + dst - pointer to destination color object + src - pointer to color object that is added + ch - number of channels + +=cut +*/ + +void +ICL_add(i_color *dst,i_color *src,int ch) { + int tmp,i; + for(i=0;ichannel[i]+src->channel[i]; + dst->channel[i]= tmp>255 ? 255:tmp; + } +} + +/* +=item ICL_info(cl) + +Dump color information to log - strictly for debugging. + + cl - pointer to color object + +=cut +*/ + +void +ICL_info(i_color *cl) { + mm_log((1,"i_color_info(cl* 0x%x)\n",cl)); + mm_log((1,"i_color_info: (%d,%d,%d,%d)\n",cl->rgba.r,cl->rgba.g,cl->rgba.b,cl->rgba.a)); +} + +/* +=item ICL_DESTROY + +Destroy ancillary data for Color object. + + cl - pointer to color object + +=cut +*/ + +void +ICL_DESTROY(i_color *cl) { + mm_log((1,"ICL_DESTROY(cl* 0x%x)\n",cl)); + myfree(cl); +} + +/* +=item IIM_new(x, y, ch) + +Creates a new image object I pixels wide, and I pixels high with I channels. + +=cut +*/ + + +i_img * +IIM_new(int x,int y,int ch) { + i_img *im; + mm_log((1,"IIM_new(x %d,y %d,ch %d)\n",x,y,ch)); + + im=i_img_empty_ch(NULL,x,y,ch); + + mm_log((1,"(0x%x) <- IIM_new\n",im)); + return im; +} + + +void +IIM_DESTROY(i_img *im) { + mm_log((1,"IIM_DESTROY(im* 0x%x)\n",im)); + /* myfree(cl); */ +} + + + +/* +=item i_img_new() + +Create new image reference - notice that this isn't an object yet and +this should be fixed asap. + +=cut +*/ + + +i_img * +i_img_new() { + i_img *im; + + mm_log((1,"i_img_struct()\n")); + if ( (im=mymalloc(sizeof(i_img))) == NULL) + m_fatal(2,"malloc() error\n"); + + im->xsize=0; + im->ysize=0; + im->channels=3; + im->ch_mask=MAXINT; + im->bytes=0; + im->data=NULL; + + im->i_f_ppix=i_ppix_d; + im->i_f_gpix=i_gpix_d; + im->ext_data=NULL; + + mm_log((1,"(0x%x) <- i_img_struct\n",im)); + return im; +} + +/* +=item i_img_empty(im, x, y) + +Re-new image reference (assumes 3 channels) + + im - Image pointer + x - xsize of destination image + y - ysize of destination image + +=cut +*/ + +i_img * +i_img_empty(i_img *im,int x,int y) { + mm_log((1,"i_img_empty(*im 0x%x,x %d,y %d)\n",im,x,y)); + if (im==NULL) + if ( (im=mymalloc(sizeof(i_img))) == NULL) + m_fatal(2,"malloc() error\n"); + + im->xsize=x; + im->ysize=y; + im->channels=3; + im->ch_mask=MAXINT; + im->bytes=x*y*im->channels; + if ( (im->data=mymalloc(im->bytes)) == NULL) m_fatal(2,"malloc() error\n"); + memset(im->data,0,(size_t)im->bytes); + + im->i_f_ppix=i_ppix_d; + im->i_f_gpix=i_gpix_d; + im->ext_data=NULL; + + mm_log((1,"(0x%x) <- i_img_empty\n",im)); + return im; +} + +/* +=item i_img_empty_ch(im, x, y, ch) + +Re-new image reference + + im - Image pointer + x - xsize of destination image + y - ysize of destination image + ch - number of channels + +=cut +*/ + +i_img * +i_img_empty_ch(i_img *im,int x,int y,int ch) { + mm_log((1,"i_img_empty_ch(*im 0x%x,x %d,y %d,ch %d)\n",im,x,y,ch)); + if (im==NULL) + if ( (im=mymalloc(sizeof(i_img))) == NULL) + m_fatal(2,"malloc() error\n"); + + im->xsize=x; + im->ysize=y; + im->channels=ch; + im->ch_mask=MAXINT; + im->bytes=x*y*im->channels; + if ( (im->data=mymalloc(im->bytes)) == NULL) m_fatal(2,"malloc() error\n"); + memset(im->data,0,(size_t)im->bytes); + + im->i_f_ppix=i_ppix_d; + im->i_f_gpix=i_gpix_d; + im->ext_data=NULL; + + mm_log((1,"(0x%x) <- i_img_empty_ch\n",im)); + return im; +} + +/* +=item i_img_exorcise(im) + +Free image data. + + im - Image pointer + +=cut +*/ + +void +i_img_exorcise(i_img *im) { + mm_log((1,"i_img_exorcise(im* 0x%x)\n",im)); + if (im->data != NULL) { myfree(im->data); } + im->data=NULL; + im->xsize=0; + im->ysize=0; + im->channels=0; + + im->i_f_ppix=i_ppix_d; + im->i_f_gpix=i_gpix_d; + im->ext_data=NULL; +} + +/* +=item i_img_destroy(im) + +Destroy image and free data via exorcise. + + im - Image pointer + +=cut +*/ + +void +i_img_destroy(i_img *im) { + mm_log((1,"i_img_destroy(im* 0x%x)\n",im)); + i_img_exorcise(im); + if (im) { myfree(im); } +} + +/* +=item i_img_info(im, info) + +Return image information + + im - Image pointer + info - pointer to array to return data + +info is an array of 4 integers with the following values: + + info[0] - width + info[1] - height + info[2] - channels + info[3] - channel mask + +=cut +*/ + + +void +i_img_info(i_img *im,int *info) { + mm_log((1,"i_img_info(im 0x%x)\n",im)); + if (im != NULL) { + mm_log((1,"i_img_info: xsize=%d ysize=%d channels=%d mask=%ud\n",im->xsize,im->ysize,im->channels,im->ch_mask)); + mm_log((1,"i_img_info: data=0x%d\n",im->data)); + info[0]=im->xsize; + info[1]=im->ysize; + info[2]=im->channels; + info[3]=im->ch_mask; + } else { + info[0]=0; + info[1]=0; + info[2]=0; + info[3]=0; + } +} + +/* +=item i_img_setmask(im, ch_mask) + +Set the image channel mask for I to I. + +=cut +*/ +void +i_img_setmask(i_img *im,int ch_mask) { im->ch_mask=ch_mask; } + + +/* +=item i_img_getmask(im) + +Get the image channel mask for I. + +=cut +*/ +int +i_img_getmask(i_img *im) { return im->ch_mask; } + +/* +=item i_img_getchannels(im) + +Get the number of channels in I. + +=cut +*/ +int +i_img_getchannels(i_img *im) { return im->channels; } + + +/* +=item i_ppix(im, x, y, col) + +Sets the pixel at (I,I) in I to I. + +Returns true if the pixel could be set, false if x or y is out of +range. + +=cut +*/ +int +i_ppix(i_img *im,int x,int y,i_color *val) { return im->i_f_ppix(im,x,y,val); } + +/* +=item i_gpix(im, x, y, &col) + +Get the pixel at (I,I) in I into I. + +Returns true if the pixel could be retrieved, false otherwise. + +=cut +*/ +int +i_gpix(i_img *im,int x,int y,i_color *val) { return im->i_f_gpix(im,x,y,val); } + +/* +=item i_ppix_d(im, x, y, col) + +Internal function. + +This is the function kept in the i_f_ppix member of an i_img object. +It does a normal store of a pixel into the image with range checking. + +Returns true if the pixel could be set, false otherwise. + +=cut +*/ +int +i_ppix_d(i_img *im,int x,int y,i_color *val) { + int ch; + + if ( x>-1 && xxsize && y>-1 && yysize ) { + for(ch=0;chchannels;ch++) + if (im->ch_mask&(1<data[(x+y*im->xsize)*im->channels+ch]=val->channel[ch]; + return 0; + } + return -1; /* error was clipped */ +} + +/* +=item i_gpix_d(im, x, y, &col) + +Internal function. + +This is the function kept in the i_f_gpix member of an i_img object. +It does normal retrieval of a pixel from the image with range checking. + +Returns true if the pixel could be set, false otherwise. + +=cut +*/ +int +i_gpix_d(i_img *im,int x,int y,i_color *val) { + int ch; + if (x>-1 && xxsize && y>-1 && yysize) { + for(ch=0;chchannels;ch++) + val->channel[ch]=im->data[(x+y*im->xsize)*im->channels+ch]; + return 0; + } + return -1; /* error was cliped */ +} + +/* +=item i_ppix_pch(im, x, y, ch) + +Get the value from the channel I for pixel (I,I) from I +scaled to [0,1]. + +Returns zero if x or y is out of range. + +Warning: this ignores the vptr interface for images. + +=cut +*/ +float +i_gpix_pch(i_img *im,int x,int y,int ch) { + if (x>-1 && xxsize && y>-1 && yysize) return ((float)im->data[(x+y*im->xsize)*im->channels+ch]/255); + else return 0; +} + + +/* +=item i_copyto_trans(im, src, x1, y1, x2, y2, tx, ty, trans) + +(x1,y1) (x2,y2) specifies the region to copy (in the source coordinates) +(tx,ty) specifies the upper left corner for the target image. +pass NULL in trans for non transparent i_colors. + +=cut +*/ + +void +i_copyto_trans(i_img *im,i_img *src,int x1,int y1,int x2,int y2,int tx,int ty,i_color *trans) { + i_color pv; + int x,y,t,ttx,tty,tt,ch; + + mm_log((1,"i_copyto_trans(im* 0x%x,src 0x%x,x1 %d,y1 %d,x2 %d,y2 %d,tx %d,ty %d,trans* 0x%x)\n",im,src,x1,y1,x2,y2,tx,ty,trans)); + + if (x2channels;ch++) if (trans->channel[ch]!=pv.channel[ch]) tt++; + if (tt) i_ppix(im,ttx,tty,&pv); + } else i_ppix(im,ttx,tty,&pv); + tty++; + } + ttx++; + } +} + +/* +=item i_copyto(dest, src, x1, y1, x2, y2, tx, ty) + +Copies image data from the area (x1,y1)-[x2,y2] in the source image to +a rectangle the same size with it's top-left corner at (tx,ty) in the +destination image. + +If x1 > x2 or y1 > y2 then the corresponding co-ordinates are swapped. + +=cut +*/ + +void +i_copyto(i_img *im,i_img *src,int x1,int y1,int x2,int y2,int tx,int ty) { + i_color pv; + int x,y,t,ttx,tty; + + if (x2 over the image I. + +=cut +*/ + +void +i_copy(i_img *im,i_img *src) { + i_color pv; + int x,y,y1,x1; + + mm_log((1,"i_copy(im* 0x%x,src 0x%x)\n",im,src)); + + x1=src->xsize; + y1=src->ysize; + i_img_empty_ch(im,x1,y1,src->channels); + + for(y=0;y and applies it at an original (I,I) in I. + +The alpha channel of each pixel in I is used to control how much +the existing colour in I is replaced, if it is 255 then the colour +is completely replaced, if it is 0 then the original colour is left +unmodified. + +=cut +*/ +void +i_rubthru(i_img *im,i_img *src,int tx,int ty) { + i_color pv,orig,dest; + int x,y,ttx,tty; + + mm_log((1,"i_rubthru(im 0x%x,src 0x%x,tx %d,ty %d)\n",im,src,tx,ty)); + + if (im->channels != 3) { fprintf(stderr,"Destination is not in rgb mode.\n"); exit(3); } + if (src->channels != 4) { fprintf(stderr,"Source is not in rgba mode.\n"); exit(3); } + + ttx=tx; + for(x=0;xxsize;x++) + { + tty=ty; + for(y=0;yysize;y++) + { + /* fprintf(stderr,"reading (%d,%d) writing (%d,%d).\n",x,y,ttx,tty); */ + i_gpix(src,x,y,&pv); + i_gpix(im,ttx,tty,&orig); + dest.rgb.r=(pv.rgba.a*pv.rgba.r+(255-pv.rgba.a)*orig.rgb.r)/255; + dest.rgb.g=(pv.rgba.a*pv.rgba.g+(255-pv.rgba.a)*orig.rgb.g)/255; + dest.rgb.b=(pv.rgba.a*pv.rgba.b+(255-pv.rgba.a)*orig.rgb.b)/255; + i_ppix(im,ttx,tty,&dest); + tty++; + } + ttx++; + } +} + +float +Lanczos(float x) { + float PIx, PIx2; + + PIx = PI * x; + PIx2 = PIx / 2.0; + + if ((x >= 2.0) || (x <= -2.0)) return (0.0); + else if (x == 0.0) return (1.0); + else return(sin(PIx) / PIx * sin(PIx2) / PIx2); +} + +/* +=item i_scaleaxis(im, value, axis) + +Returns a new image object which is I scaled by I along +wither the x-axis (I == 0) or the y-axis (I == 1). + +=cut +*/ + +i_img* +i_scaleaxis(i_img *im, float Value, int Axis) { + int hsize, vsize, i, j, k, l, lMax, iEnd, jEnd; + int LanczosWidthFactor; + float *l0, *l1, OldLocation; + int T, TempJump1, TempJump2; + float F, PictureValue[MAXCHANNELS]; + short psave; + i_color val,val1,val2; + i_img *new_img; + + mm_log((1,"i_scaleaxis(im 0x%x,Value %.2f,Axis %d)\n",im,Value,Axis)); + + if (Axis == XAXIS) { + hsize = (int) ((float) im->xsize * Value); + vsize = im->ysize; + + jEnd = hsize; + iEnd = vsize; + + TempJump1 = (hsize - 1) * 3; + TempJump2 = hsize * (vsize - 1) * 3 + TempJump1; + } else { + hsize = im->xsize; + vsize = (int) ((float) im->ysize * Value); + + jEnd = vsize; + iEnd = hsize; + + TempJump1 = 0; + TempJump2 = 0; + } + + new_img=i_img_empty_ch(NULL,hsize,vsize,im->channels); + + if (Value >=1) LanczosWidthFactor = 1; + else LanczosWidthFactor = (int) (1.0/Value); + + lMax = LanczosWidthFactor << 1; + + l0 = (float *) mymalloc(lMax * sizeof(float)); + l1 = (float *) mymalloc(lMax * sizeof(float)); + + for (j=0; jchannels; k++) PictureValue[k] = 0.0; + for (l=0; l < lMax; l++) { + i_gpix(im,T+l+1, i, &val1); + i_gpix(im,T-lMax+l+1, i, &val2); + for (k=0; kchannels; k++) { + PictureValue[k] += l1[l] * val1.channel[k]; + PictureValue[k] += l0[lMax-l-1] * val2.channel[k]; + } + } + for(k=0;kchannels;k++) { + psave = (short)( PictureValue[k] / LanczosWidthFactor); + val.channel[k]=minmax(0,255,psave); + } + i_ppix(new_img,j,i,&val); + } + + } else { + + for (i=0; ichannels; k++) PictureValue[k] = 0.0; + for (l=0; l < lMax; l++) { + i_gpix(im,i, T+l+1, &val1); + i_gpix(im,i, T-lMax+l+1, &val2); + for (k=0; kchannels; k++) { + PictureValue[k] += l1[l] * val1.channel[k]; + PictureValue[k] += l0[lMax-l-1] * val2.channel[k]; + } + } + for (k=0; kchannels; k++) { + psave = (short)( PictureValue[k] / LanczosWidthFactor); + val.channel[k]=minmax(0,255,psave); + } + i_ppix(new_img,i,j,&val); + } + + } + } + myfree(l0); + myfree(l1); + + mm_log((1,"(0x%x) <- i_scaleaxis\n",new_img)); + + return new_img; +} + + +/* +=item i_scale_nn(im, scx, scy) + +Scale by using nearest neighbor +Both axes scaled at the same time since +nothing is gained by doing it in two steps + +=cut +*/ + + +i_img* +i_scale_nn(i_img *im, float scx, float scy) { + + int nxsize,nysize,nx,ny; + i_img *new_img; + i_color val; + + mm_log((1,"i_scale_nn(im 0x%x,scx %.2f,scy %.2f)\n",im,scx,scy)); + + nxsize = (int) ((float) im->xsize * scx); + nysize = (int) ((float) im->ysize * scy); + + new_img=i_img_empty_ch(NULL,nxsize,nysize,im->channels); + + for(ny=0;ny returning a new image. + +opx for a length of opxl and opy for a length of opy are arrays of +operators that modify the x and y positions to retreive the pixel data from. + +parm and parmlen define extra parameters that the operators may use. + +Note that this function is largely superseded by the more flexible +L. + +Returns the new image. + +The operators for this function are defined in L. + +=cut +*/ +i_img* +i_transform(i_img *im, int *opx,int opxl,int *opy,int opyl,double parm[],int parmlen) { + double rx,ry; + int nxsize,nysize,nx,ny; + i_img *new_img; + i_color val; + + mm_log((1,"i_transform(im 0x%x, opx 0x%x, opxl %d, opy 0x%x, opyl %d, parm 0x%x, parmlen %d)\n",im,opx,opxl,opy,opyl,parm,parmlen)); + + nxsize = im->xsize; + nysize = im->ysize ; + + new_img=i_img_empty_ch(NULL,nxsize,nysize,im->channels); + /* fprintf(stderr,"parm[2]=%f\n",parm[2]); */ + for(ny=0;ny",nx,ny); */ + rx=op_run(opx,opxl,parm,parmlen); + ry=op_run(opy,opyl,parm,parmlen); + /* fprintf(stderr,"(%f,%f)\n",rx,ry); */ + i_gpix(im,rx,ry,&val); + i_ppix(new_img,nx,ny,&val); + } + + mm_log((1,"(0x%x) <- i_transform\n",new_img)); + return new_img; +} + +/* +=item i_img_diff(im1, im2) + +Calculates the sum of the squares of the differences between +correspoding channels in two images. + +If the images are not the same size then only the common area is +compared, hence even if images are different sizes this function +can return zero. + +=cut +*/ +float +i_img_diff(i_img *im1,i_img *im2) { + int x,y,ch,xb,yb,chb; + float tdiff; + i_color val1,val2; + + mm_log((1,"i_img_diff(im1 0x%x,im2 0x%x)\n",im1,im2)); + + xb=(im1->xsizexsize)?im1->xsize:im2->xsize; + yb=(im1->ysizeysize)?im1->ysize:im2->ysize; + chb=(im1->channelschannels)?im1->channels:im2->channels; + + mm_log((1,"i_img_diff: xb=%d xy=%d chb=%d\n",xb,yb,chb)); + + tdiff=0; + for(y=0;yxsize; + my=im->ysize; + fx=(mx+1)/2; + fy=(my+1)/2; + + + /* horizontal pass */ + + new_img=i_img_empty_ch(NULL,fx*2,fy*2,im->channels); + new_img2=i_img_empty_ch(NULL,fx*2,fy*2,im->channels); + + c=0; + for(y=0;ychannels;ch++) { + dval1.channel[ch]=(val1.channel[ch]+val2.channel[ch])/2; + dval2.channel[ch]=(255+val1.channel[ch]-val2.channel[ch])/2; + } + i_ppix(new_img,x,y,&dval1); + i_ppix(new_img,x+fx,y,&dval2); + } + + for(y=0;ychannels;ch++) { + dval1.channel[ch]=(val1.channel[ch]+val2.channel[ch])/2; + dval2.channel[ch]=(255+val1.channel[ch]-val2.channel[ch])/2; + } + i_ppix(new_img2,x,y,&dval1); + i_ppix(new_img2,x,y+fy,&dval2); + } + + i_img_destroy(new_img); + return new_img2; +} + +/* +=item i_count_colors(im, maxc) + +returns number of colors or -1 +to indicate that it was more than max colors + +=cut +*/ +int +i_count_colors(i_img *im,int maxc) { + struct octt *ct; + int x,y; + int xsize,ysize; + i_color val; + int colorcnt; + + mm_log((1,"i_count_colors(im 0x%08X,maxc %d)\n")); + + xsize=im->xsize; + ysize=im->ysize; + ct=octt_new(); + + colorcnt=0; + for(y=0;y maxc) { octt_delete(ct); return -1; } + } + octt_delete(ct); + return colorcnt; +} + + +symbol_table_t symbol_table={i_has_format,ICL_set_internal,ICL_info, + i_img_new,i_img_empty,i_img_empty_ch,i_img_exorcise, + i_img_info,i_img_setmask,i_img_getmask,i_ppix,i_gpix, + i_box,i_draw,i_arc,i_copyto,i_copyto_trans,i_rubthru}; + + +/* +=item i_gen_reader(i_gen_read_data *info, char *buf, int length) + +Performs general read buffering for file readers that permit reading +to be done through a callback. + +The final callback gets two parameters, a I value, and a I +value, where I is the amount of data that the file library needs +to read, and I is the amount of space available in the buffer +maintained by these functions. + +This means if you need to read from a stream that you don't know the +length of, you can return I bytes, taking the performance hit of +possibly expensive callbacks (eg. back to perl code), or if you are +reading from a stream where it doesn't matter if some data is lost, or +if the total length of the stream is known, you can return I +bytes. + +=cut +*/ + +int +i_gen_reader(i_gen_read_data *gci, char *buf, int length) { + int total; + + if (length < gci->length - gci->cpos) { + /* simplest case */ + memcpy(buf, gci->buffer+gci->cpos, length); + gci->cpos += length; + return length; + } + + total = 0; + memcpy(buf, gci->buffer+gci->cpos, gci->length-gci->cpos); + total += gci->length - gci->cpos; + length -= gci->length - gci->cpos; + buf += gci->length - gci->cpos; + if (length < (int)sizeof(gci->buffer)) { + int did_read; + int copy_size; + while (length + && (did_read = (gci->cb)(gci->userdata, gci->buffer, length, + sizeof(gci->buffer))) > 0) { + gci->cpos = 0; + gci->length = did_read; + + copy_size = min(length, gci->length); + memcpy(buf, gci->buffer, copy_size); + gci->cpos += copy_size; + buf += copy_size; + total += copy_size; + length -= copy_size; + } + } + else { + /* just read the rest - too big for our buffer*/ + int did_read; + while ((did_read = (gci->cb)(gci->userdata, buf, length, length)) > 0) { + length -= did_read; + total += did_read; + buf += did_read; + } + } + return total; +} + +/* +=item i_gen_read_data_new(i_read_callback_t cb, char *userdata) + +For use by callback file readers to initialize the reader buffer. + +Allocates, initializes and returns the reader buffer. + +See also L and L. + +=cut +*/ +i_gen_read_data * +i_gen_read_data_new(i_read_callback_t cb, char *userdata) { + i_gen_read_data *self = mymalloc(sizeof(i_gen_read_data)); + self->cb = cb; + self->userdata = userdata; + self->length = 0; + self->cpos = 0; + + return self; +} + +/* +=item free_gen_read_data(i_gen_read_data *) + +Cleans up. + +=cut +*/ +void free_gen_read_data(i_gen_read_data *self) { + myfree(self); +} + +/* +=item i_gen_writer(i_gen_write_data *info, char const *data, int size) + +Performs write buffering for a callback based file writer. + +Failures are considered fatal, if a write fails then data will be +dropped. + +=cut +*/ +int +i_gen_writer( +i_gen_write_data *self, +char const *data, +int size) +{ + if (self->filledto && self->filledto+size > self->maxlength) { + if (self->cb(self->userdata, self->buffer, self->filledto)) { + self->filledto = 0; + } + else { + self->filledto = 0; + return 0; + } + } + if (self->filledto+size <= self->maxlength) { + /* just save it */ + memcpy(self->buffer+self->filledto, data, size); + self->filledto += size; + return 1; + } + /* doesn't fit - hand it off */ + return self->cb(self->userdata, data, size); +} + +/* +=item i_gen_write_data_new(i_write_callback_t cb, char *userdata, int max_length) + +Allocates and initializes the data structure used by i_gen_writer. + +This should be released with L + +=cut +*/ +i_gen_write_data *i_gen_write_data_new(i_write_callback_t cb, + char *userdata, int max_length) +{ + i_gen_write_data *self = mymalloc(sizeof(i_gen_write_data)); + self->cb = cb; + self->userdata = userdata; + self->maxlength = min(max_length, sizeof(self->buffer)); + if (self->maxlength < 0) + self->maxlength = sizeof(self->buffer); + self->filledto = 0; + + return self; +} + +/* +=item free_gen_write_data(i_gen_write_data *info, int flush) + +Cleans up the write buffer. + +Will flush any left-over data if I is non-zero. + +Returns non-zero if flush is zero or if info->cb() returns non-zero. + +Return zero only if flush is non-zero and info->cb() returns zero. +ie. if it fails. + +=cut +*/ + +int free_gen_write_data(i_gen_write_data *info, int flush) +{ + int result = !flush || + info->filledto == 0 || + info->cb(info->userdata, info->buffer, info->filledto); + myfree(info); + + return result; +} + +/* +=back + +=head1 SEE ALSO + +L, L + +=cut +*/ diff --git a/image.h b/image.h new file mode 100644 index 00000000..01888386 --- /dev/null +++ b/image.h @@ -0,0 +1,445 @@ +#ifndef _IMAGE_H_ +#define _IMAGE_H_ + +#include "io.h" +#include "iolayer.h" +#include "log.h" +#include "stackmach.h" + + +#ifndef _MSC_VER +#include +#endif +#include +#include +#include +#include + +#ifdef SUNOS +#include +#endif + +#ifndef PI +#define PI 3.14159265358979323846 +#endif + +#ifndef MAXINT +#define MAXINT 2147483647 +#endif + +#include "datatypes.h" + +undef_int i_has_format(char *frmt); + +/* constructors and destructors */ + +i_color *ICL_new_internal( unsigned char r,unsigned char g,unsigned char b,unsigned char a); +i_color *ICL_set_internal(i_color *cl,unsigned char r,unsigned char g,unsigned char b,unsigned char a); +void ICL_info (i_color *cl); +void ICL_DESTROY (i_color *cl); +void ICL_add (i_color *dst, i_color *src, int ch); + +i_img *IIM_new(int x,int y,int ch); +void IIM_DESTROY(i_img *im); +i_img *i_img_new( void ); +i_img *i_img_empty(i_img *im,int x,int y); +i_img *i_img_empty_ch(i_img *im,int x,int y,int ch); +void i_img_exorcise(i_img *im); +void i_img_destroy(i_img *im); + +void i_img_info(i_img *im,int *info); + +/* Image feature settings */ + +void i_img_setmask (i_img *im,int ch_mask); +int i_img_getmask (i_img *im); +int i_img_getchannels(i_img *im); + +/* Base functions */ + +int i_ppix(i_img *im,int x,int y,i_color *val); +int i_gpix(i_img *im,int x,int y,i_color *val); + +int i_ppix_d(i_img *im,int x,int y,i_color *val); +int i_gpix_d(i_img *im,int x,int y,i_color *val); + +float i_gpix_pch(i_img *im,int x,int y,int ch); + +/* functions for drawing primitives */ + +void i_box (i_img *im,int x1,int y1,int x2,int y2,i_color *val); +void i_box_filled (i_img *im,int x1,int y1,int x2,int y2,i_color *val); +void i_draw (i_img *im,int x1,int y1,int x2,int y2,i_color *val); +void i_line_aa (i_img *im,int x1,int y1,int x2,int y2,i_color *val); +void i_arc (i_img *im,int x,int y,float rad,float d1,float d2,i_color *val); +void i_copyto (i_img *im,i_img *src,int x1,int y1,int x2,int y2,int tx,int ty); +void i_copyto_trans(i_img *im,i_img *src,int x1,int y1,int x2,int y2,int tx,int ty,i_color *trans); +void i_copy (i_img *im,i_img *src); +void i_rubthru (i_img *im,i_img *src,int tx,int ty); + +void i_bezier_multi(i_img *im,int l,double *x,double *y,i_color *val); +void i_poly_aa (i_img *im,int l,double *x,double *y,i_color *val); + +void i_flood_fill (i_img *im,int seedx,int seedy,i_color *dcol); + +/* image processing functions */ + +void i_gaussian (i_img *im,float stdev); +void i_conv (i_img *im,float *coeff,int len); + +float i_img_diff (i_img *im1,i_img *im2); + +/* font routines */ + +undef_int i_init_fonts( void ); + +#ifdef HAVE_LIBT1 +#include + +undef_int init_t1( void ); +int i_t1_new( char *pfb, char *afm ); +int i_t1_destroy( int font_id ); +undef_int i_t1_cp( i_img *im, int xb, int yb, int channel, int fontnum, float points, char* str, int len, int align ); +undef_int i_t1_text( i_img *im, int xb, int yb, i_color *cl, int fontnum, float points, char* str, int len, int align ); +void i_t1_bbox( int fontnum, float point, char *str, int len, int cords[6] ); +void i_t1_set_aa( int st ); +void close_t1( void ); + +#endif + +#ifdef HAVE_LIBTT + +#include +#define TT_CHC 5 + +struct TT_Instancehandle_ { + TT_Instance instance; + TT_Instance_Metrics imetrics; + TT_Glyph_Metrics gmetrics[256]; + TT_Glyph glyphs[256]; + int smooth; + int ptsize; + int order; +}; + +typedef struct TT_Instancehandle_ TT_Instancehandle; + +struct TT_Fonthandle_ { + TT_Face face; + TT_Face_Properties properties; + TT_Instancehandle instanceh[TT_CHC]; + TT_CharMap char_map; +}; + +typedef struct TT_Fonthandle_ TT_Fonthandle; + + + +undef_int init_tt( void ); +TT_Fonthandle* i_tt_new(char *fontname); +void i_tt_destroy( TT_Fonthandle *handle ); +undef_int i_tt_cp( TT_Fonthandle *handle,i_img *im,int xb,int yb,int channel,float points,char* txt,int len,int smooth); +undef_int i_tt_text( TT_Fonthandle *handle, i_img *im, int xb, int yb, i_color *cl, float points, char* txt, int len, int smooth); +undef_int i_tt_bbox( TT_Fonthandle *handle, float points,char *txt,int len,int cords[6]); + + +#endif /* End of freetype headers */ + + + + + + + +/* functions for reading and writing formats */ + +/* general reader callback + userdata - data the user passed into the reader + buffer - the buffer to fill with data + need - the amount of data needed + want - the amount of space we have to store data + fill buffer and return the number of bytes read, 0 for eof, -1 for error +*/ + +typedef int (*i_read_callback_t)(char *userdata, char *buffer, int need, + int want); + +/* i_gen_reader() translates the low-level requests from whatever library + into buffered requests. + but the called function can always bypass buffering by only ever + reading I bytes. +*/ +#define CBBUFSIZ 4096 + +typedef struct { + i_read_callback_t cb; + char *userdata; + char buffer[CBBUFSIZ]; + int length; + int cpos; +} i_gen_read_data; + +extern int i_gen_reader(i_gen_read_data *info, char *buffer, int need); +extern i_gen_read_data *i_gen_read_data_new(i_read_callback_t cb, char *userdata); +extern void free_gen_read_data(i_gen_read_data *); + +/* general writer callback + userdata - the data the user passed into the writer + data - the data to write + data_size - the number of bytes to write + write the data, return non-zero on success, zero on failure. +*/ +typedef int (*i_write_callback_t)(char *userdata, char const *data, int size); + +typedef struct { + i_write_callback_t cb; + char *userdata; + char buffer[CBBUFSIZ]; + int maxlength; + int filledto; +} i_gen_write_data; + +extern int i_gen_writer(i_gen_write_data *info, char const *data, int size); +extern i_gen_write_data *i_gen_write_data_new(i_write_callback_t cb, char *userdata, int maxlength); +extern int free_gen_write_data(i_gen_write_data *, int flush); + +/* transparency handling for quantized output */ +typedef enum i_transp_tag { + tr_none, /* ignore any alpha channel */ + tr_threshold, /* threshold the transparency - uses tr_threshold */ + tr_errdiff, /* error diffusion */ + tr_ordered /* an ordered dither */ +} i_transp; + +/* controls how we build the colour map */ +typedef enum i_make_colors_tag { + mc_none, /* user supplied colour map only */ + mc_web_map, /* Use the 216 colour web colour map */ + mc_addi, /* Addi's algorithm */ + mc_mask = 0xFF /* (mask for generator) */ +} i_make_colors; + +/* controls how we translate the colours */ +typedef enum i_translate_tag { + pt_giflib, /* get gif lib to do it (ignores make_colours) */ + pt_closest, /* just use the closest match within the hashbox */ + pt_perturb, /* randomly perturb the data - uses perturb_size*/ + pt_errdiff /* error diffusion dither - uses errdiff */ +} i_translate; + +/* Which error diffusion map to use */ +typedef enum i_errdiff_tag { + ed_floyd, /* floyd-steinberg */ + ed_jarvis, /* Jarvis, Judice and Ninke */ + ed_stucki, /* Stucki */ + ed_custom, /* the map found in ed_map|width|height|orig */ + ed_mask = 0xFF, /* mask to get the map */ + ed_bidir = 0x100 /* change direction for each row */ +} i_errdiff; + +/* which ordered dither map to use + currently only available for transparency + I don't know of a way to do ordered dither of an image against some + general palette + */ +typedef enum i_ord_dith_tag +{ + od_random, /* sort of random */ + od_dot8, /* large dot */ + od_dot4, + od_hline, + od_vline, + od_slashline, /* / line dither */ + od_backline, /* \ line dither */ + od_custom /* custom 8x8 map */ +} i_ord_dith; + +typedef struct i_gif_pos_tag { + int x, y; +} i_gif_pos; + +/* passed into i_writegif_gen() to control quantization */ +typedef struct i_quantize_tag { + /* how to handle transparency */ + i_transp transp; + /* the threshold at which to make pixels opaque */ + int tr_threshold; + i_errdiff tr_errdiff; + i_ord_dith tr_orddith; + unsigned char tr_custom[64]; + + /* how to make the colour map */ + i_make_colors make_colors; + + /* any existing colours + mc_existing is an existing colour table + mc_count is the number of existing colours + mc_size is the total size of the array that mc_existing points + at - this must be at least 256 + */ + i_color *mc_colors; + int mc_size; + int mc_count; + + /* how we translate the colours */ + i_translate translate; + + /* the error diffusion map to use if translate is mc_errdiff */ + i_errdiff errdiff; + /* the following define the error diffusion values to use if + errdiff is ed_custom. ed_orig is the column on the top row that + represents the current + */ + int *ed_map; + int ed_width, ed_height, ed_orig; + + /* the amount of perturbation to use for translate is mc_perturb */ + int perturb; +} i_quantize; + +typedef struct i_gif_opts { + /* each image has a local color map */ + int each_palette; + + /* images are interlaced */ + int interlace; + + /* time for which image is displayed + (in 1/100 seconds) + default: 0 + */ + int delay_count; + int *delays; + + /* user input flags + default: 0 + */ + int user_input_count; + char *user_input_flags; + + /* disposal + default: 0 */ + int disposal_count; + char *disposal; + + /* this is added to the color table when we make an image transparent */ + i_color tran_color; + + /* image positions */ + int position_count; + i_gif_pos *positions; + + /* Netscape loop extension - number of loops */ + int loop_count; +} i_gif_opts; + +extern void quant_makemap(i_quantize *quant, i_img **imgs, int count); +extern i_palidx *quant_translate(i_quantize *quant, i_img *img); +extern void quant_transparent(i_quantize *quant, i_palidx *indices, i_img *img, i_palidx trans_index); + +#ifdef HAVE_LIBJPEG +i_img* i_readjpeg(int fd,char** iptc_itext,int *tlength); +i_img* i_readjpeg_scalar(char *data, int length,char** iptc_itext,int *itlength); +i_img* i_readjpeg_wiol(io_glue *ig, int length, char** iptc_itext, int *itlength); + +i_img* i_readjpeg_extra2(int fd,char** iptc_itext); +undef_int i_writejpeg(i_img *im,int fd,int qfactor); +#endif /* HAVE_LIBJPEG */ + +#ifdef HAVE_LIBTIFF +i_img* i_readtiff_wiol(io_glue *ig, int length); +undef_int i_writetiff_wiol(i_img *im, io_glue *ig); + +#endif /* HAVE_LIBTIFF */ + +#ifdef HAVE_LIBPNG +i_img *i_readpng(int fd); +i_img *i_readpng_scalar(char *data, int length); +undef_int i_writepng(i_img *im,int fd); +#endif /* HAVE_LIBPNG */ + +#ifdef HAVE_LIBGIF +i_img *i_readgif(int fd, int **colour_table, int *colours); +i_img *i_readgif_scalar(char *data, int length, int **colour_table, int *colours); +i_img *i_readgif_callback(i_read_callback_t callback, char *userdata, int **colour_table, int *colours); +undef_int i_writegif(i_img *im,int fd,int colors,int pixdev,int fixedlen,i_color fixed[]); +undef_int i_writegifmc(i_img *im,int fd,int colors); +undef_int i_writegifex(i_img *im,int fd); +undef_int i_writegif_gen(i_quantize *quant, int fd, i_img **imgs, int count, i_gif_opts *opts); +undef_int i_writegif_callback(i_quantize *quant, i_write_callback_t cb, char *userdata, int maxbuffer, i_img **imgs, int count, i_gif_opts *opts); + +void i_qdist(i_img *im); + +#endif /* HAVE_LIBGIF */ + +i_img *i_readraw(int fd,int x,int y,int datachannels,int storechannels,int intrl); +undef_int i_writeraw(i_img* im,int fd); + +i_img *i_readpnm_wiol(io_glue *ig, int length); +undef_int i_writeppm(i_img *im,int fd); + + +i_img* i_scaleaxis(i_img *im, float Value, int Axis); +i_img* i_scale_nn(i_img *im, float scx, float scy); +i_img* i_haar(i_img *im); +int i_count_colors(i_img *im,int maxc); + +i_img* i_transform(i_img *im, int *opx,int opxl,int *opy,int opyl,double parm[],int parmlen); + +struct rm_op; +i_img* i_transform2(int width, int height, int channels, + struct rm_op *ops, int ops_count, + double *n_regs, int n_regs_count, + i_color *c_regs, int c_regs_count, + i_img **in_imgs, int in_imgs_count); +/* filters */ + +void i_contrast(i_img *im, float intensity); +void i_hardinvert(i_img *im); +void i_noise(i_img *im, float amount, unsigned char type); +void i_bumpmap(i_img *im,i_img *bump,int channel,int light_x,int light_y,int strength); +void i_postlevels(i_img *im,int levels); +void i_mosaic(i_img *im,int size); +void i_watermark(i_img *im,i_img *wmark,int tx,int ty,int pixdiff); +void i_autolevels(i_img *im,float lsat,float usat,float skew); +void i_radnoise(i_img *im,int xo,int yo,float rscale,float ascale); +void i_turbnoise(i_img *im,float xo,float yo,float scale); +void i_gradgen(i_img *im, int num, int *xo, int *yo, i_color *ival, int dmeasure); +void i_nearest_color(i_img *im, int num, int *xo, int *yo, i_color *ival, int dmeasure); + +/* Debug only functions */ + +void malloc_state( void ); + +/* this is sort of obsolete now */ + +typedef struct { + undef_int (*i_has_format)(char *frmt); + i_color*(*ICL_set)(i_color *cl,unsigned char r,unsigned char g,unsigned char b,unsigned char a); + void (*ICL_info)(i_color *cl); + + i_img*(*i_img_new)( void ); + i_img*(*i_img_empty)(i_img *im,int x,int y); + i_img*(*i_img_empty_ch)(i_img *im,int x,int y,int ch); + void(*i_img_exorcise)(i_img *im); + + void(*i_img_info)(i_img *im,int *info); + + void(*i_img_setmask)(i_img *im,int ch_mask); + int (*i_img_getmask)(i_img *im); + + int (*i_ppix)(i_img *im,int x,int y,i_color *val); + int (*i_gpix)(i_img *im,int x,int y,i_color *val); + + void(*i_box)(i_img *im,int x1,int y1,int x2,int y2,i_color *val); + void(*i_draw)(i_img *im,int x1,int y1,int x2,int y2,i_color *val); + void(*i_arc)(i_img *im,int x,int y,float rad,float d1,float d2,i_color *val); + void(*i_copyto)(i_img *im,i_img *src,int x1,int y1,int x2,int y2,int tx,int ty); + void(*i_copyto_trans)(i_img *im,i_img *src,int x1,int y1,int x2,int y2,int tx,int ty,i_color *trans); + void(*i_rubthru)(i_img *im,i_img *src,int tx,int ty); + +} symbol_table_t; + + + +#endif diff --git a/imio.h b/imio.h new file mode 100644 index 00000000..959f09d8 --- /dev/null +++ b/imio.h @@ -0,0 +1,48 @@ +#ifndef _IO_H_ +#define _IO_H_ +#include +#include +#ifndef _MSC_VER +#include +#include +#endif + +#include "log.h" + + +/* #define MALLOC_DEBUG */ + +#ifdef IMAGER_DEBUG_MALLOC + +#define mymalloc(x) (mymalloc_file_line((x), __FILE__, __LINE__)) +#define myfree(x) (myfree_file_line((x), __FILE__, __LINE__)) + +void malloc_state(); +void* mymalloc_file_line(int size,char* file,int line); +void* mymalloc_comm(int size,char *comm); + +void myfree_file_line(void *p, char*file, int line); + +void bndcheck_all(void); + +#else + +#define malloc_comm(a,b) (mymalloc(a)) +void malloc_state(); +void* mymalloc(int size); +void myfree(void *p); + +#endif /* IMAGER_MALLOC_DEBUG */ + + +#ifdef _MSC_VER +#undef min +#undef max +#endif +int min(int a,int b); +int max(int x,int y); +int myread(int fd,void *buf,int len); +int mywrite(int fd,void *buf,int len); +void interleave(unsigned char *inbuffer,unsigned char *outbuffer,int rowsize,int channels); + +#endif diff --git a/io.c b/io.c new file mode 100644 index 00000000..64fc84e5 --- /dev/null +++ b/io.c @@ -0,0 +1,246 @@ +#include "io.h" +#include +#ifndef _MSC_VER +#include +#endif + + +/* FIXME: make allocation dynamic */ + + +#ifdef IMAGER_DEBUG_MALLOC + +#define MAXMAL 1024 +#define MAXDESC 65 + +#define UNDRRNVAL 100 +#define OVERRNVAL 100 + +#define PADBYTE 0xaa + + +static int malloc_need_init = 1; + +typedef struct { + void* point; + size_t size; + char comm[MAXDESC]; +} malloc_entry; + +malloc_entry malloc_pointers[MAXMAL]; + +/* +#define mymalloc(x) (mymalloc_file_line(x,__FILE__,__LINE__)) +*/ + + +void +malloc_state() { + int i, total; + total=0; + mm_log((0,"malloc_state()\n")); + bndcheck_all(); + for(i=0;i %d bytes allocated at %p for %s (%d)\n", i, size, buf, file, line)); + return buf; + } + + mm_log((0,"more than %d segments allocated at %s (%d)\n", MAXMAL, file, line)); + exit(255); + return NULL; +} + + + + +/* This function not maintained for now */ + +/* +void* +mymalloc_comm(int size,char *comm) { + void *buf; + int i; + if (malloc_need_init) { + for(i=0;ib) return a; else return b; +} + +int +myread(int fd,void *buf,int len) { + unsigned char* bufc; + int bc,rc; + bufc = (unsigned char*)buf; + bc=0; + while( ((rc=read(fd,bufc+bc,len-bc))>0 ) && (bc!=len) ) bc+=rc; + if ( rc < 0 ) return rc; + else return bc; +} + +int +mywrite(int fd,void *buf,int len) { + unsigned char* bufc; + int bc,rc; + bufc=(unsigned char*)buf; + bc=0; + while(((rc=write(fd,bufc+bc,len-bc))>0) && (bc!=len)) bc+=rc; + if (rc<0) return rc; + else return bc; +} + +void +interleave(unsigned char *inbuffer,unsigned char *outbuffer,int rowsize,int channels) { + int ch,ind,i; + i=0; + if ( inbuffer==outbuffer ) return; /* Check if data is already in interleaved format */ + for( ind=0; ind +#include +#ifdef _MSC_VER +#include +#endif + +#define IOL_DEB(x) + + +char *io_type_names[] = { "FDSEEK", "FDNOSEEK", "BUFFER", "CBSEEK", "CBNOSEEK", "BUFCHAIN" }; + + +/* +=head1 NAME + +iolayer.c - encapsulates different source of data into a single framework. + +=head1 SYNOPSIS + + io_glue *ig = io_new_fd( fileno(stdin) ); + method = io_reqmeth( IOL_NOSEEK | IOL_MMAP ); // not implemented yet + io_glue_commit_types(ig); // always assume IOL_SEEK for now + switch (method) { + case IOL_NOSEEK: + code that uses ig->readcb() + to read data goes here. + break; + case IOL_MMAP: + code that uses ig->readcb() + to read data goes here. + break; + } + + io_glue_DESTROY(ig); + // and much more + +=head1 DESCRIPTION + +iolayer.c implements the basic functions to create and destroy io_glue +objects for Imager. The typical usage pattern for data sources is: + + 1. Create the source (io_new_fd) + 2. Define how you want to get data from it (io_reqmeth) + 3. read from it using the interface requested (ig->readdb, ig->mmapcb) + 4. Close the source, which + shouldn't really close the underlying source. (io_glue DESTROY) + +=head1 FUNCTION REFERENCE + +Some of these functions are internal. + +=over 4 + +=cut +*/ + + + + +/* + * Callbacks for sources that cannot seek + */ + +/* fakeseek_read: read method for when emulating a seekable source +static +ssize_t +fakeseek_read(io_glue *ig, void *buf, size_t count) { + io_ex_fseek *exdata = ig->exdata; + return 0; +} +*/ + + + +/* + * Callbacks for sources that can seek + */ + +/* +=item realseek_read(ig, buf, count) + +Does the reading from a source that can be seeked on + + ig - io_glue object + buf - buffer to return data in + count - number of bytes to read into buffer max + +=cut +*/ + +static +ssize_t +realseek_read(io_glue *ig, void *buf, size_t count) { + io_ex_rseek *ier = ig->exdata; + int fd = (int)ig->source.cb.p; + ssize_t rc = 0; + size_t bc = 0; + char *cbuf = buf; + + IOL_DEB( printf("realseek_read: fd = %d, ier->cpos = %ld, buf = 0x%p, count = %d\n", fd, (long) ier->cpos, buf, count) ); + /* Is this a good idea? Would it be better to handle differently? skip handling? */ + while( count!=bc && (rc = ig->source.cb.readcb(fd,cbuf+bc,count-bc))>0 ) bc+=rc; + + ier->cpos += bc; + IOL_DEB( printf("realseek_read: rc = %d, bc = %d\n", rc, bc) ); + return bc; +} + + +/* +=item realseek_write(ig, buf, count) + +Does the writing to a 'source' that can be seeked on + + ig - io_glue object + buf - buffer that contains data + count - number of bytes to write + +=cut +*/ + +static +ssize_t +realseek_write(io_glue *ig, const void *buf, size_t count) { + io_ex_rseek *ier = ig->exdata; + int fd = (int)ig->source.cb.p; + ssize_t rc = 0; + size_t bc = 0; + char *cbuf = (char*)buf; + + IOL_DEB( printf("realseek_write: fd = %d, ier->cpos = %ld, buf = 0x%p, count = %d\n", fd, (long) ier->cpos, buf, count) ); + /* Is this a good idea? Would it be better to handle differently? skip handling? */ + + while( count!=bc && (rc = ig->source.cb.writecb(fd,cbuf+bc,count-bc))>0 ) bc+=rc; + + ier->cpos += bc; + IOL_DEB( printf("realseek_write: rc = %d, bc = %d\n", rc, bc) ); + return bc; +} + + +/* +=item realseek_close(ig) + +Closes a source that can be seeked on. Not sure if this should be an actual close +or not. Does nothing for now. Should be fixed. + + ig - data source + +=cut +*/ + +static +void +realseek_close(io_glue *ig) { + mm_log((1, "realseek_close(ig %p)\n", ig)); + /* FIXME: Do stuff here */ +} + + +/* realseek_seek(ig, offset, whence) + +Implements seeking for a source that is seekable, the purpose of having this is to be able to +have an offset into a file that is different from what the underlying library thinks. + + ig - data source + offset - offset into stream + whence - whence argument a la lseek + +=cut +*/ + +static +off_t +realseek_seek(io_glue *ig, off_t offset, int whence) { + /* io_ex_rseek *ier = ig->exdata; Needed later */ + int fd = (int)ig->source.cb.p; + int rc; + IOL_DEB( printf("realseek_seek(ig 0x%p, offset %ld, whence %d)\n", ig, (long) offset, whence) ); + rc = lseek(fd, offset, whence); + + IOL_DEB( printf("realseek_seek: rc %ld\n", (long) rc) ); + return rc; + /* FIXME: How about implementing this offset handling stuff? */ +} + + + + + + + +/* + * Callbacks for sources that are a chain of variable sized buffers + */ + + + +/* Helper functions for buffer chains */ + +static +io_blink* +io_blink_new() { + io_blink *ib; + + mm_log((1, "io_blink_new()\n")); + + ib = mymalloc(sizeof(io_blink)); + + ib->next = NULL; + ib->prev = NULL; + ib->len = BBSIZ; + + memset(&ib->buf, 0, ib->len); + return ib; +} + + + +/* +=item io_bchain_advance(ieb) + +Advances the buffer chain to the next link - extending if +necessary. Also adjusts the cpos and tfill counters as needed. + + ieb - buffer chain object + +=cut +*/ + +static +void +io_bchain_advance(io_ex_bchain *ieb) { + if (ieb->cp->next == NULL) { + ieb->tail = io_blink_new(); + ieb->tail->prev = ieb->cp; + ieb->cp->next = ieb->tail; + + ieb->tfill = 0; /* Only set this if we added a new slice */ + } + ieb->cp = ieb->cp->next; + ieb->cpos = 0; +} + + +/* + +static +void +bufchain_dump(io_ex_bchain *ieb) { + mm_log((1, " buf_chain_dump(ieb %p)\n")); + mm_log((1, " buf_chain_dump: ieb->offset = %d\n", ieb->offset)); + mm_log((1, " buf_chain_dump: ieb->length = %d\n", ieb->length)); + mm_log((1, " buf_chain_dump: ieb->head = %p\n", ieb->head )); + mm_log((1, " buf_chain_dump: ieb->tail = %p\n", ieb->tail )); + mm_log((1, " buf_chain_dump: ieb->tfill = %d\n", ieb->tfill )); + mm_log((1, " buf_chain_dump: ieb->cp = %p\n", ieb->cp )); + mm_log((1, " buf_chain_dump: ieb->cpos = %d\n", ieb->cpos )); + mm_log((1, " buf_chain_dump: ieb->gpos = %d\n", ieb->gpos )); +} +*/ + +/* + * TRUE if lengths are NOT equal + */ + +/* +static +void +chainlencert( io_glue *ig ) { + int clen; + int cfl = 0; + size_t csize = 0; + size_t cpos = 0; + io_ex_bchain *ieb = ig->exdata; + io_blink *cp = ieb->head; + + + if (ieb->gpos > ieb->length) mm_log((1, "BBAR : ieb->gpos = %d, ieb->length = %d\n", ieb->gpos, ieb->length)); + + while(cp) { + clen = (cp == ieb->tail) ? ieb->tfill : cp->len; + if (ieb->head == cp && cp->prev) mm_log((1, "Head of chain has a non null prev\n")); + if (ieb->tail == cp && cp->next) mm_log((1, "Tail of chain has a non null next\n")); + + if (ieb->head != cp && !cp->prev) mm_log((1, "Middle of chain has a null prev\n")); + if (ieb->tail != cp && !cp->next) mm_log((1, "Middle of chain has a null next\n")); + + if (cp->prev && cp->prev->next != cp) mm_log((1, "%p = cp->prev->next != cp\n", cp->prev->next)); + if (cp->next && cp->next->prev != cp) mm_log((1, "%p cp->next->prev != cp\n", cp->next->prev)); + + if (cp == ieb->cp) { + cfl = 1; + cpos += ieb->cpos; + } + + if (!cfl) cpos += clen; + + csize += clen; + cp = cp->next; + } + if (( csize != ieb->length )) mm_log((1, "BAR : csize = %d, ieb->length = %d\n", csize, ieb->length)); + if (( cpos != ieb->gpos )) mm_log((1, "BAR : cpos = %d, ieb->gpos = %d\n", cpos, ieb->gpos )); +} + + +static +void +chaincert( io_glue *ig) { + size_t csize = 0; + io_ex_bchain *ieb = ig->exdata; + io_blink *cp = ieb->head; + + mm_log((1, "Chain verification.\n")); + + mm_log((1, " buf_chain_dump: ieb->offset = %d\n", ieb->offset)); + mm_log((1, " buf_chain_dump: ieb->length = %d\n", ieb->length)); + mm_log((1, " buf_chain_dump: ieb->head = %p\n", ieb->head )); + mm_log((1, " buf_chain_dump: ieb->tail = %p\n", ieb->tail )); + mm_log((1, " buf_chain_dump: ieb->tfill = %d\n", ieb->tfill )); + mm_log((1, " buf_chain_dump: ieb->cp = %p\n", ieb->cp )); + mm_log((1, " buf_chain_dump: ieb->cpos = %d\n", ieb->cpos )); + mm_log((1, " buf_chain_dump: ieb->gpos = %d\n", ieb->gpos )); + + while(cp) { + int clen = cp == ieb->tail ? ieb->tfill : cp->len; + mm_log((1, "link: %p <- %p -> %p\n", cp->prev, cp, cp->next)); + if (ieb->head == cp && cp->prev) mm_log((1, "Head of chain has a non null prev\n")); + if (ieb->tail == cp && cp->next) mm_log((1, "Tail of chain has a non null next\n")); + + if (ieb->head != cp && !cp->prev) mm_log((1, "Middle of chain has a null prev\n")); + if (ieb->tail != cp && !cp->next) mm_log((1, "Middle of chain has a null next\n")); + + if (cp->prev && cp->prev->next != cp) mm_log((1, "%p = cp->prev->next != cp\n", cp->prev->next)); + if (cp->next && cp->next->prev != cp) mm_log((1, "%p cp->next->prev != cp\n", cp->next->prev)); + + csize += clen; + cp = cp->next; + } + + mm_log((1, "csize = %d %s ieb->length = %d\n", csize, csize == ieb->length ? "==" : "!=", ieb->length)); +} +*/ + + + + + + + + + + + +/* +=item bufchain_read(ig, buf, count) + +Does the reading from a source that can be seeked on + + ig - io_glue object + buf - buffer to return data in + count - number of bytes to read into buffer max + +=cut +*/ + +static +ssize_t +bufchain_read(io_glue *ig, void *buf, size_t count) { + io_ex_bchain *ieb = ig->exdata; + size_t scount = count; + char *cbuf = buf; + size_t sk; + + mm_log((1, "bufchain_read(ig %p, buf %p, count %ld)\n", ig, buf, count)); + IOL_DEB( printf("bufchain_read: fd = %d, ier->cpos = %ld, buf = 0x%p, count = %d\n", fd, (long) ier->cpos, buf, count) ); + + while( scount ) { + int clen = (ieb->cp == ieb->tail) ? ieb->tfill : ieb->cp->len; + if (clen == ieb->cpos) { + if (ieb->cp == ieb->tail) break; /* EOF */ + ieb->cp = ieb->cp->next; + ieb->cpos = 0; + clen = (ieb->cp == ieb->tail) ? ieb->tfill : ieb->cp->len; + } + + sk = clen - ieb->cpos; + sk = sk > scount ? scount : sk; + + memcpy(&cbuf[count-scount], &ieb->cp->buf[ieb->cpos], sk); + scount -= sk; + ieb->cpos += sk; + ieb->gpos += sk; + } + + mm_log((1, "bufchain_read: returning %d\n", count-scount)); + return count-scount; +} + + + + + +/* +=item bufchain_write(ig, buf, count) + +Does the writing to a 'source' that can be seeked on + + ig - io_glue object + buf - buffer that contains data + count - number of bytes to write + +=cut +*/ + +static +ssize_t +bufchain_write(io_glue *ig, const void *buf, size_t count) { + char *cbuf = (char *)buf; + io_ex_bchain *ieb = ig->exdata; + size_t ocount = count; + size_t sk; + + mm_log((1, "bufchain_write: ig = %p, buf = 0x%p, count = %d\n", ig, buf, count)); + + IOL_DEB( printf("bufchain_write: ig = %p, ieb->cpos = %ld, buf = 0x%p, count = %d\n", ig, (long) ieb->cpos, buf, count) ); + + while(count) { + mm_log((2, "bufchain_write: - looping - count = %d\n", count)); + if (ieb->cp->len == ieb->cpos) { + mm_log((1, "bufchain_write: cp->len == ieb->cpos = %d - advancing chain\n", (long) ieb->cpos)); + io_bchain_advance(ieb); + } + + sk = ieb->cp->len - ieb->cpos; + sk = sk > count ? count : sk; + memcpy(&ieb->cp->buf[ieb->cpos], &cbuf[ocount-count], sk); + + if (ieb->cp == ieb->tail) { + int extend = ieb->cpos + sk - ieb->tfill; + mm_log((2, "bufchain_write: extending tail by %d\n", extend)); + if (extend > 0) { + ieb->length += extend; + ieb->tfill += extend; + } + } + + ieb->cpos += sk; + ieb->gpos += sk; + count -= sk; + } + return ocount; +} + +/* +=item bufchain_close(ig) + +Closes a source that can be seeked on. Not sure if this should be an actual close +or not. Does nothing for now. Should be fixed. + + ig - data source + +=cut +*/ + +static +void +bufchain_close(io_glue *ig) { + mm_log((1, "bufchain_close(ig %p)\n",ig)); + IOL_DEB( printf("bufchain_close(ig 0x%p)\n", ig) ); + /* FIXME: Commit a seek point here */ + +} + + +/* bufchain_seek(ig, offset, whence) + +Implements seeking for a source that is seekable, the purpose of having this is to be able to +have an offset into a file that is different from what the underlying library thinks. + + ig - data source + offset - offset into stream + whence - whence argument a la lseek + +=cut +*/ + +static +off_t +bufchain_seek(io_glue *ig, off_t offset, int whence) { + io_ex_bchain *ieb = ig->exdata; + io_blink *ib = NULL; + int wrlen; + + off_t cof = 0; + off_t scount = offset; + off_t sk; + + mm_log((1, "bufchain_seek(ig %p, offset %ld, whence %d)\n", ig, offset, whence)); + + switch (whence) { + case SEEK_SET: /* SEEK_SET = 0, From the top */ + ieb->cp = ieb->head; + ieb->cpos = 0; + ieb->gpos = 0; + + while( scount ) { + int clen = (ieb->cp == ieb->tail) ? ieb->tfill : ieb->cp->len; + if (clen == ieb->cpos) { + if (ieb->cp == ieb->tail) break; /* EOF */ + ieb->cp = ieb->cp->next; + ieb->cpos = 0; + clen = (ieb->cp == ieb->tail) ? ieb->tfill : ieb->cp->len; + } + + sk = clen - ieb->cpos; + sk = sk > scount ? scount : sk; + + scount -= sk; + ieb->cpos += sk; + ieb->gpos += sk; + } + + wrlen = scount; + + if (wrlen > 0) { + /* + * extending file - get ieb into consistent state and then + * call write which will get it to the correct position + */ + char TB[BBSIZ]; + memset(TB, 0, BBSIZ); + ieb->gpos = ieb->length; + ieb->cpos = ieb->tfill; + + while(wrlen > 0) { + ssize_t rc, wl = min(wrlen, BBSIZ); + mm_log((1, "bufchain_seek: wrlen = %d, wl = %d\n", wrlen, wl)); + rc = bufchain_write( ig, TB, wl ); + if (rc != wl) m_fatal(0, "bufchain_seek: Unable to extend file\n"); + wrlen -= rc; + } + } + + break; + + case SEEK_CUR: + m_fatal(123, "SEEK_CUR IS NOT IMPLEMENTED\n"); + + /* + case SEEK_CUR: + ib = ieb->cp; + if (cof < 0) { + cof += ib->cpos; + cpos = 0; + while(cof < 0 && ib->prev) { + ib = ib->prev; + cof += ib->len; + } + */ + + case SEEK_END: /* SEEK_END = 2 */ + if (cof>0) m_fatal(0, "bufchain_seek: SEEK_END + %d : Extending files via seek not supported!\n", cof); + + ieb->cp = ieb->tail; + ieb->cpos = ieb->tfill; + + if (cof<0) { + cof += ieb->cpos; + ieb->cpos = 0; + + while(cof<0 && ib->prev) { + ib = ib->prev; + cof += ib->len; + } + + if (cof<0) m_fatal(0, "bufchain_seek: Tried to seek before start of file\n"); + ieb->gpos = ieb->length+offset; + ieb->cpos = cof; + } + break; + default: + m_fatal(0, "bufchain_seek: Unhandled seek request: whence = %d\n", whence ); + } + + mm_log((2, "bufchain_seek: returning ieb->gpos = %d\n", ieb->gpos)); + return ieb->gpos; +} + + + + + + +/* + * Methods for setting up data source + */ + +/* +=item io_obj_setp_buffer(io, p, len) + +Sets an io_object for reading from a buffer source + + io - io object that describes a source + p - pointer to buffer + len - length of buffer + +=cut +*/ + +void +io_obj_setp_buffer(io_obj *io, void *p, size_t len) { + io->buffer.type = BUFFER; + io->buffer.c = (char*) p; + io->buffer.len = len; +} + + +/* +=item io_obj_setp_cbuf(io, p) + +Sets an io_object for reading/writing from a buffer source + + io - io object that describes a source + p - pointer to buffer + len - length of buffer + +=cut +*/ + +void +io_obj_setp_bufchain(io_obj *io) { + io->type = BUFCHAIN; +} + + +/* +=item io_obj_setp_cb(io, p, readcb, writecb, seekcb) + +Sets an io_object for reading from a source that uses callbacks + + io - io object that describes a source + p - pointer to data for callbacks + readcb - read callback to read from source + writecb - write callback to write to source + seekcb - seek callback to seek on source + +=cut +*/ + +void +io_obj_setp_cb(io_obj *io, void *p, readl readcb, writel writecb, seekl seekcb) { + io->cb.type = CBSEEK; + io->cb.p = p; + io->cb.readcb = readcb; + io->cb.writecb = writecb; + io->cb.seekcb = seekcb; +} + +/* +=item io_glue_commit_types(ig) + +Creates buffers and initializes structures to read with the chosen interface. + + ig - io_glue object + +=cut +*/ + +void +io_glue_commit_types(io_glue *ig) { + io_type inn = ig->source.type; + + mm_log((1, "io_glue_commit_types(ig 0x%p)\n", ig)); + mm_log((1, "io_glue_commit_types: source type %d (%s)\n", inn, io_type_names[inn])); + + switch (inn) { + case BUFCHAIN: + { + io_ex_bchain *ieb = mymalloc(sizeof(io_ex_bchain)); + + ieb->offset = 0; + ieb->length = 0; + ieb->cpos = 0; + ieb->gpos = 0; + ieb->tfill = 0; + + ieb->head = io_blink_new(); + ieb->cp = ieb->head; + ieb->tail = ieb->head; + + ig->exdata = ieb; + ig->readcb = bufchain_read; + ig->writecb = bufchain_write; + ig->seekcb = bufchain_seek; + ig->closecb = bufchain_close; + } + break; + case CBSEEK: + default: + { + io_ex_rseek *ier = mymalloc(sizeof(io_ex_rseek)); + + ier->offset = 0; + ier->cpos = 0; + + ig->exdata = ier; + ig->readcb = realseek_read; + ig->writecb = realseek_write; + ig->seekcb = realseek_seek; + ig->closecb = realseek_close; + } + } +} + +/* +=item io_glue_gettypes(ig, reqmeth) + +Returns a set of compatible interfaces to read data with. + + ig - io_glue object + reqmeth - request mask + +The request mask is a bit mask (of something that hasn't been implemented yet) +of interfaces that it would like to read data from the source which the ig +describes. + +=cut +*/ + +void +io_glue_gettypes(io_glue *ig, int reqmeth) { + + ig = NULL; + reqmeth = 0; + + /* FIXME: Implement this function! */ + /* if (ig->source.type = + if (reqmeth & IO_BUFF) */ + +} + + +/* +=item io_new_bufchain() + +returns a new io_glue object that has the 'empty' source and but can +be written to and read from later (like a pseudo file). + +=cut +*/ + +io_glue * +io_new_bufchain() { + io_glue *ig = mymalloc(sizeof(io_glue)); + io_obj_setp_bufchain(&ig->source); + return ig; +} + + +/* +=item io_new_fd(fd) + +returns a new io_glue object that has the source defined as reading +from specified filedescriptor. Note that the the interface to recieving +data from the io_glue callbacks hasn't been done yet. + + fd - file descriptor to read/write from + +=cut +*/ + +io_glue * +io_new_fd(int fd) { + io_glue *ig = mymalloc(sizeof(io_glue)); +#ifdef _MSC_VER + io_obj_setp_cb(&ig->source, (void*)fd, _read, _write, _lseek); +#else + io_obj_setp_cb(&ig->source, (void*)fd, read, write, lseek); +#endif + return ig; +} + + + +/* +=item io_slurp(ig) + +Takes the source that the io_glue is bound to and allocates space +for a return buffer and returns the entire content in a single buffer. +Note: This only works for io_glue objects that contain a bufchain. It +is usefull for saving to scalars and such. + + ig - io_glue object + c - pointer to a pointer to where data should be copied to + +=cut +*/ + +size_t +io_slurp(io_glue *ig, unsigned char **c) { + ssize_t rc; + off_t orgoff; + io_ex_bchain *ieb; + unsigned char *cc; + io_type inn = ig->source.type; + + if ( inn != BUFCHAIN ) { + m_fatal(0, "io_slurp: called on a source that is not from a bufchain\n"); + } + + ieb = ig->exdata; + cc = *c = mymalloc( ieb->length ); + + orgoff = ieb->gpos; + + bufchain_seek(ig, 0, SEEK_SET); + + rc = bufchain_read(ig, cc, ieb->length); + + if (rc != ieb->length) + m_fatal(1, "io_slurp: bufchain_read returned an incomplete read: rc = %d, request was %d\n", rc, ieb->length); + + return rc; +} + + +/* +=item io_glue_DESTROY(ig) + +A destructor method for io_glue objects. Should clean up all related buffers. +Might leave us with a dangling pointer issue on some buffers. + + ig - io_glue object to destroy. + +=cut +*/ + +void +io_glue_DESTROY(io_glue *ig) { + free(ig); + /* FIXME: Handle extradata and such */ +} diff --git a/iolayer.h b/iolayer.h new file mode 100644 index 00000000..358de0d0 --- /dev/null +++ b/iolayer.h @@ -0,0 +1,148 @@ +#ifndef _IOLAYER_H_ +#define _IOLAYER_H_ + + +/* How the IO layer works: + * + * Start by getting an io_glue object. Then define its + * datasource via io_obj_setp_buffer or io_obj_setp_cb. Before + * using the io_glue object be sure to call io_glue_commit_types(). + * After that data can be read via the io_glue->readcb() method. + * + */ + + +#include +#ifndef _MSC_VER +#include +#endif +#include + +/* #define BBSIZ 1096 */ +#define BBSIZ 1096 +#define IO_FAKE_SEEK 1<<0L +#define IO_TEMP_SEEK 1<<1L + + +typedef union { int i; void *p; } iorp; + +typedef enum { FDSEEK, FDNOSEEK, BUFFER, CBSEEK, CBNOSEEK, BUFCHAIN } io_type; + +#ifdef _MSC_VER +typedef int ssize_t; +#endif + +struct _io_glue; + +/* Callbacks we give out */ + +typedef ssize_t(*readp) (struct _io_glue *ig, void *buf, size_t count); +typedef ssize_t(*writep)(struct _io_glue *ig, const void *buf, size_t count); +typedef off_t (*seekp) (struct _io_glue *ig, off_t offset, int whence); +typedef void (*closep)(struct _io_glue *ig); +typedef ssize_t(*sizep) (struct _io_glue *ig); + + + +/* Callbacks we get */ + +typedef ssize_t(*readl) (int fd, void *buf, size_t count); +typedef ssize_t(*writel)(int fd, const void *buf, size_t count); +typedef off_t (*seekl) (int fd, off_t offset, int whence); +typedef ssize_t(*sizel) (int fd); + +extern char *io_type_names[]; + + +typedef struct _io_blink { + char buf[BBSIZ]; + /* size_t cnt; */ + size_t len; /* How large is this buffer = BBZIS for now */ + struct _io_blink *next; + struct _io_blink *prev; +} io_blink; + + +/* Structures that describe callback interfaces */ + +typedef struct { + off_t offset; + off_t cpos; +} io_ex_rseek; + + +typedef struct { + off_t offset; + off_t cpos; + io_blink *head; + io_blink *tail; + io_blink *cp; +} io_ex_fseek; + + +typedef struct { + off_t offset; /* Offset of the source - not used */ + off_t length; /* Total length of chain in bytes */ + io_blink *head; /* Start of chain */ + io_blink *tail; /* End of chain */ + off_t tfill; /* End of stream in last link */ + io_blink *cp; /* Current element of list */ + off_t cpos; /* Offset within the current */ + off_t gpos; /* Global position in stream */ +} io_ex_bchain; + + +/* Structures to describe data sources */ + +typedef struct { + io_type type; + int fd; +} io_fdseek; + +typedef struct { + io_type type; /* Must be first parameter */ + char *name; /* Data source name */ + char *c; + size_t len; +} io_buffer; + +typedef struct { + io_type type; /* Must be first parameter */ + char *name; /* Data source name */ + void *p; /* Callback data */ + readl readcb; + writel writecb; + seekl seekcb; +} io_cb; + +typedef union { + io_type type; + io_fdseek fdseek; + io_buffer buffer; + io_cb cb; +} io_obj; + +typedef struct _io_glue { + io_obj source; + int flags; /* Flags */ + void *exdata; /* Pair specific data */ + readp readcb; + writep writecb; + seekp seekcb; + closep closecb; + sizep sizecb; +} io_glue; + +void io_obj_setp_buffer (io_obj *io, void *p, size_t len); +void io_obj_setp_cb (io_obj *io, void *p, readl readcb, writel writecb, seekl seekcb); +void io_glue_commit_types(io_glue *ig); +void io_glue_gettypes (io_glue *ig, int reqmeth); + + +/* XS functions */ +io_glue *io_new_fd(int fd); +io_glue *io_new_bufchain(); +size_t io_slurp(io_glue *ig, unsigned char **c); +void io_glue_DESTROY(io_glue *ig); + +#endif /* _IOLAYER_H_ */ diff --git a/jpeg.c b/jpeg.c new file mode 100644 index 00000000..1212b9d4 --- /dev/null +++ b/jpeg.c @@ -0,0 +1,715 @@ +#include +#include +#include +#include + +#include "iolayer.h" +#include "image.h" +#include "jpeglib.h" + + +unsigned char fake_eoi[]={(JOCTET) 0xFF,(JOCTET) JPEG_EOI}; + +/* Handlers to read from memory */ + +typedef struct { + struct jpeg_source_mgr pub; /* public fields */ + char *data; + int length; + JOCTET * buffer; /* start of buffer */ + boolean start_of_file; /* have we gotten any data yet? */ +} scalar_source_mgr; + +typedef scalar_source_mgr *scalar_src_ptr; + + + + + + + + + +static void +scalar_init_source (j_decompress_ptr cinfo) { + scalar_src_ptr src = (scalar_src_ptr) cinfo->src; + + /* We reset the empty-input-file flag for each image, + * but we don't clear the input buffer. + * This is correct behavior for reading a series of images from one source. + */ + src->start_of_file = TRUE; +} + +static boolean +scalar_fill_input_buffer (j_decompress_ptr cinfo) { + scalar_src_ptr src = (scalar_src_ptr) cinfo->src; + size_t nbytes; + + if (src->start_of_file) { + nbytes=src->length; + src->buffer=src->data; + } else { + /* Insert a fake EOI marker */ + src->buffer = fake_eoi; + nbytes = 2; + } + + src->pub.next_input_byte = src->buffer; + src->pub.bytes_in_buffer = nbytes; + src->start_of_file = FALSE; + return TRUE; +} + +static void +scalar_skip_input_data (j_decompress_ptr cinfo, long num_bytes) { + scalar_src_ptr src = (scalar_src_ptr) cinfo->src; + + /* Just a dumb implementation for now. Could use fseek() except + * it doesn't work on pipes. Not clear that being smart is worth + * any trouble anyway --- large skips are infrequent. + */ + + if (num_bytes > 0) { + while (num_bytes > (long) src->pub.bytes_in_buffer) { + num_bytes -= (long) src->pub.bytes_in_buffer; + (void) scalar_fill_input_buffer(cinfo); + /* note we assume that fill_input_buffer will never return FALSE, + * so suspension need not be handled. + */ + } + src->pub.next_input_byte += (size_t) num_bytes; + src->pub.bytes_in_buffer -= (size_t) num_bytes; + } +} + +static void +scalar_term_source (j_decompress_ptr cinfo) { /* no work necessary here */ } + +static void +jpeg_scalar_src(j_decompress_ptr cinfo, char *data, int length) { + scalar_src_ptr src; + + if (cinfo->src == NULL) { /* first time for this JPEG object? */ + cinfo->src = (struct jpeg_source_mgr *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,sizeof(scalar_source_mgr)); + src = (scalar_src_ptr) cinfo->src; + } + + src = (scalar_src_ptr) cinfo->src; + src->data = data; + src->length = length; + src->pub.init_source = scalar_init_source; + src->pub.fill_input_buffer = scalar_fill_input_buffer; + src->pub.skip_input_data = scalar_skip_input_data; + src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */ + src->pub.term_source = scalar_term_source; + src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */ + src->pub.next_input_byte = NULL; /* until buffer loaded */ +} + + + + +undef_int +i_writejpeg(i_img *im,int fd,int qfactor) { + struct stat stbuf; + JSAMPLE *image_buffer; + int quality; + + struct jpeg_compress_struct cinfo; + struct jpeg_error_mgr jerr; + + FILE *outfile; /* target file */ + JSAMPROW row_pointer[1]; /* pointer to JSAMPLE row[s] */ + int row_stride; /* physical row width in image buffer */ + + mm_log((1,"i_writejpeg(0x%x,fd %d,qfactor %d)\n",im,fd,qfactor)); + + if (!(im->channels==1 || im->channels==3)) { fprintf(stderr,"Unable to write JPEG, improper colorspace.\n"); exit(3); } + quality = qfactor; + + image_buffer=im->data; + + /* Step 1: allocate and initialize JPEG compression object */ + + /* We have to set up the error handler first, in case the initialization + * step fails. (Unlikely, but it could happen if you are out of memory.) + * This routine fills in the contents of struct jerr, and returns jerr's + * address which we place into the link field in cinfo. + */ + cinfo.err = jpeg_std_error(&jerr); + /* Now we can initialize the JPEG compression object. */ + jpeg_create_compress(&cinfo); + + /* Step 2: specify data destination (eg, a file) */ + /* Note: steps 2 and 3 can be done in either order. */ + + /* Here we use the library-supplied code to send compressed data to a + * stdio stream. You can also write your own code to do something else. + * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that + * requires it in order to write binary files. + */ + + if (fstat(fd,&stbuf)<0) { fprintf(stderr,"Unable to stat fd.\n"); exit(1); } + + if ((outfile = fdopen(fd,"w")) == NULL) { + fprintf(stderr, "can't fdopen.\n"); + exit(1); + } + + jpeg_stdio_dest(&cinfo, outfile); + + /* Step 3: set parameters for compression */ + + /* First we supply a description of the input image. + * Four fields of the cinfo struct must be filled in: + */ + cinfo.image_width = im->xsize; /* image width and height, in pixels */ + cinfo.image_height = im->ysize; + + if (im->channels==3) { + cinfo.input_components = 3; /* # of color components per pixel */ + cinfo.in_color_space = JCS_RGB; /* colorspace of input image */ + } + + if (im->channels==1) { + cinfo.input_components = 1; /* # of color components per pixel */ + cinfo.in_color_space = JCS_GRAYSCALE; /* colorspace of input image */ + } + + /* Now use the library's routine to set default compression parameters. + * (You must set at least cinfo.in_color_space before calling this, + * since the defaults depend on the source color space.) + */ + jpeg_set_defaults(&cinfo); + /* Now you can set any non-default parameters you wish to. + * Here we just illustrate the use of quality (quantization table) scaling: + */ + + jpeg_set_quality(&cinfo, quality, TRUE); /* limit to baseline-JPEG values */ + + /* Step 4: Start compressor */ + + /* TRUE ensures that we will write a complete interchange-JPEG file. + * Pass TRUE unless you are very sure of what you're doing. + */ + jpeg_start_compress(&cinfo, TRUE); + + /* Step 5: while (scan lines remain to be written) */ + /* jpeg_write_scanlines(...); */ + + /* Here we use the library's state variable cinfo.next_scanline as the + * loop counter, so that we don't have to keep track ourselves. + * To keep things simple, we pass one scanline per call; you can pass + * more if you wish, though. + */ + row_stride = im->xsize * im->channels; /* JSAMPLEs per row in image_buffer */ + + while (cinfo.next_scanline < cinfo.image_height) { + /* jpeg_write_scanlines expects an array of pointers to scanlines. + * Here the array is only one element long, but you could pass + * more than one scanline at a time if that's more convenient. + */ + row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride]; + (void) jpeg_write_scanlines(&cinfo, row_pointer, 1); + } + + /* Step 6: Finish compression */ + + jpeg_finish_compress(&cinfo); + /* After finish_compress, we can close the output file. */ + fclose(outfile); + + /* Step 7: release JPEG compression object */ + + /* This is an important step since it will release a good deal of memory. */ + jpeg_destroy_compress(&cinfo); + + return(1); +} + + +static int tlength=0; +static char **iptc_text=NULL; + +#define JPEG_APP13 0xED /* APP13 marker code */ + +LOCAL(unsigned int) +jpeg_getc (j_decompress_ptr cinfo) +/* Read next byte */ +{ + struct jpeg_source_mgr * datasrc = cinfo->src; + + if (datasrc->bytes_in_buffer == 0) { + if (! (*datasrc->fill_input_buffer) (cinfo)) + { fprintf(stderr,"Jpeglib: cant suspend.\n"); exit(3); } + /* ERREXIT(cinfo, JERR_CANT_SUSPEND);*/ + } + datasrc->bytes_in_buffer--; + return GETJOCTET(*datasrc->next_input_byte++); +} + +METHODDEF(boolean) +APP13_handler (j_decompress_ptr cinfo) { + INT32 length; + unsigned int cnt=0; + + length = jpeg_getc(cinfo) << 8; + length += jpeg_getc(cinfo); + length -= 2; /* discount the length word itself */ + + tlength=length; + + if ( ((*iptc_text)=mymalloc(length)) == NULL ) return FALSE; + while (--length >= 0) (*iptc_text)[cnt++] = jpeg_getc(cinfo); + + return TRUE; +} + + + + + + + + + + + + +METHODDEF(void) +my_output_message (j_common_ptr cinfo) +{ + char buffer[JMSG_LENGTH_MAX]; + + /* Create the message */ + (*cinfo->err->format_message) (cinfo, buffer); + + /* Send it to stderr, adding a newline */ + mm_log((1, "%s\n", buffer)); +} + + + + + + +struct my_error_mgr { + struct jpeg_error_mgr pub; /* "public" fields */ + jmp_buf setjmp_buffer; /* for return to caller */ +}; + +typedef struct my_error_mgr * my_error_ptr; + +/* Here's the routine that will replace the standard error_exit method */ + +METHODDEF(void) +my_error_exit (j_common_ptr cinfo) { + /* cinfo->err really points to a my_error_mgr struct, so coerce pointer */ + my_error_ptr myerr = (my_error_ptr) cinfo->err; + + /* Always display the message. */ + /* We could postpone this until after returning, if we chose. */ + (*cinfo->err->output_message) (cinfo); + + /* Return control to the setjmp point */ + longjmp(myerr->setjmp_buffer, 1); +} + + + + + + +i_img* +i_readjpeg(int fd,char** iptc_itext,int *itlength) { + i_img *im; + + struct jpeg_decompress_struct cinfo; + /* We use our private extension JPEG error handler. + * Note that this struct must live as long as the main JPEG parameter + * struct, to avoid dangling-pointer problems. + */ + + /* struct jpeg_error_mgr jerr;*/ + struct my_error_mgr jerr; + FILE * infile; /* source file */ + JSAMPARRAY buffer; /* Output row buffer */ + int row_stride; /* physical row width in output buffer */ + + mm_log((1,"i_readjpeg(fd %d,iptc_itext 0x%x)\n",fd,iptc_itext)); + + iptc_text=iptc_itext; + + if ((infile = fdopen(fd,"r")) == NULL) { + fprintf(stderr, "can't fdopen.\n"); + exit(1); + } + + /* Step 1: allocate and initialize JPEG decompression object */ + + /* We set up the normal JPEG error routines, then override error_exit. */ + cinfo.err = jpeg_std_error(&jerr.pub); + jerr.pub.error_exit = my_error_exit; + jerr.pub.output_message = my_output_message; + /* Establish the setjmp return context for my_error_exit to use. */ + if (setjmp(jerr.setjmp_buffer)) { + /* If we get here, the JPEG code has signaled an error. + * We need to clean up the JPEG object, close the input file, and return. + */ + jpeg_destroy_decompress(&cinfo); + fclose(infile); + *iptc_itext=NULL; + *itlength=0; + return NULL; + } + + /* Now we can initialize the JPEG decompression object. */ + jpeg_create_decompress(&cinfo); + jpeg_set_marker_processor(&cinfo, JPEG_APP13, APP13_handler); + /* Step 2: specify data source (eg, a file) */ + + jpeg_stdio_src(&cinfo, infile); + + /* Step 3: read file parameters with jpeg_read_header() */ + + (void) jpeg_read_header(&cinfo, TRUE); + + /* We can ignore the return value from jpeg_read_header since + * (a) suspension is not possible with the stdio data source, and + * (b) we passed TRUE to reject a tables-only JPEG file as an error. + * See libjpeg.doc for more info. + */ + + /* Step 4: set parameters for decompression */ + + /* In this example, we don't need to change any of the defaults set by + * jpeg_read_header(), so we do nothing here. + */ + + /* Step 5: Start decompressor */ + + (void) jpeg_start_decompress(&cinfo); + /* We can ignore the return value since suspension is not possible + * with the stdio data source. + */ + + /* We may need to do some setup of our own at this point before reading + * the data. After jpeg_start_decompress() we have the correct scaled + * output image dimensions available, as well as the output colormap + * if we asked for color quantization. + * In this example, we need to make an output work buffer of the right size. + */ + + im=i_img_empty_ch(NULL,cinfo.output_width,cinfo.output_height,cinfo.output_components); + + /* fprintf(stderr,"JPEG info:\n xsize:%d\n ysize:%d\n channels:%d.\n",xsize,ysize,channels);*/ + + /* JSAMPLEs per row in output buffer */ + row_stride = cinfo.output_width * cinfo.output_components; + /* Make a one-row-high sample array that will go away when done with image */ + buffer = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1); + + /* Step 6: while (scan lines remain to be read) */ + /* jpeg_read_scanlines(...); */ + + /* Here we use the library's state variable cinfo.output_scanline as the + * loop counter, so that we don't have to keep track ourselves. + */ + + while (cinfo.output_scanline < cinfo.output_height) { + /* jpeg_read_scanlines expects an array of pointers to scanlines. + * Here the array is only one element long, but you could ask for + * more than one scanline at a time if that's more convenient. + */ + (void) jpeg_read_scanlines(&cinfo, buffer, 1); + /* Assume put_scanline_someplace wants a pointer and sample count. */ + memcpy(im->data+im->channels*im->xsize*(cinfo.output_scanline-1),buffer[0],row_stride); + } + + /* Step 7: Finish decompression */ + + (void) jpeg_finish_decompress(&cinfo); + /* We can ignore the return value since suspension is not possible + * with the stdio data source. + */ + + /* Step 8: Release JPEG decompression object */ + + /* This is an important step since it will release a good deal of memory. */ + jpeg_destroy_decompress(&cinfo); + + /* After finish_decompress, we can close the input file. + * Here we postpone it until after no more JPEG errors are possible, + * so as to simplify the setjmp error logic above. (Actually, I don't + * think that jpeg_destroy can do an error exit, but why assume anything...) + */ + +/* fclose(infile); DO NOT fclose() BECAUSE THEN close() WILL FAIL*/ + + /* At this point you may want to check to see whether any corrupt-data + * warnings occurred (test whether jerr.pub.num_warnings is nonzero). + */ + + /* And we're done! */ + + *itlength=tlength; + mm_log((1,"i_readjpeg -> (0x%x)\n",im)); + return im; +} + + + +i_img* +i_readjpeg_scalar(char *data, int length,char** iptc_itext,int *itlength) { + i_img *im; + + struct jpeg_decompress_struct cinfo; + struct my_error_mgr jerr; + JSAMPARRAY buffer; /* Output row buffer */ + int row_stride; /* physical row width in output buffer */ + + mm_log((1,"i_readjpeg_scalar(data 0x%08x, length %d,iptc_itext 0x%x)\n",data,length,iptc_itext)); + iptc_text=iptc_itext; + + cinfo.err = jpeg_std_error(&jerr.pub); + jerr.pub.error_exit = my_error_exit; + jerr.pub.output_message = my_output_message; + if (setjmp(jerr.setjmp_buffer)) { + jpeg_destroy_decompress(&cinfo); + *iptc_itext=NULL; + *itlength=0; + return NULL; + } + + jpeg_create_decompress(&cinfo); + jpeg_set_marker_processor(&cinfo, JPEG_APP13, APP13_handler); + jpeg_scalar_src(&cinfo, data, length ); + (void) jpeg_read_header(&cinfo, TRUE); + (void) jpeg_start_decompress(&cinfo); + im=i_img_empty_ch(NULL,cinfo.output_width,cinfo.output_height,cinfo.output_components); + row_stride = cinfo.output_width * cinfo.output_components; + buffer = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1); + while (cinfo.output_scanline < cinfo.output_height) { + (void) jpeg_read_scanlines(&cinfo, buffer, 1); + memcpy(im->data+im->channels*im->xsize*(cinfo.output_scanline-1),buffer[0],row_stride); + } + (void) jpeg_finish_decompress(&cinfo); + jpeg_destroy_decompress(&cinfo); + *itlength=tlength; + mm_log((1,"i_readjpeg_scalar -> (0x%x)\n",im)); + return im; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#define JPGS 1024 + + + +typedef struct { + struct jpeg_source_mgr pub; /* public fields */ + io_glue *data; + JOCTET *buffer; /* start of buffer */ + int length; /* Do I need this? */ + boolean start_of_file; /* have we gotten any data yet? */ +} wiol_source_mgr; + +typedef wiol_source_mgr *wiol_src_ptr; + +static void +wiol_init_source (j_decompress_ptr cinfo) { + wiol_src_ptr src = (wiol_src_ptr) cinfo->src; + + /* We reset the empty-input-file flag for each image, + * but we don't clear the input buffer. + * This is correct behavior for reading a series of images from one source. + */ + src->start_of_file = TRUE; +} + +static boolean +wiol_fill_input_buffer(j_decompress_ptr cinfo) { + wiol_src_ptr src = (wiol_src_ptr) cinfo->src; + ssize_t nbytes; /* We assume that reads are "small" */ + + mm_log((1,"wiol_fill_input_buffer(cinfo 0x%p)\n")); + + nbytes = src->data->readcb(src->data, src->buffer, JPGS); + + if (nbytes <= 0) { /* Insert a fake EOI marker */ + src->pub.next_input_byte = fake_eoi; + src->pub.bytes_in_buffer = 2; + } else { + src->pub.next_input_byte = src->buffer; + src->pub.bytes_in_buffer = nbytes; + } + src->start_of_file = FALSE; + return TRUE; +} + +static void +wiol_skip_input_data (j_decompress_ptr cinfo, long num_bytes) { + wiol_src_ptr src = (wiol_src_ptr) cinfo->src; + + /* Just a dumb implementation for now. Could use fseek() except + * it doesn't work on pipes. Not clear that being smart is worth + * any trouble anyway --- large skips are infrequent. + */ + + if (num_bytes > 0) { + while (num_bytes > (long) src->pub.bytes_in_buffer) { + num_bytes -= (long) src->pub.bytes_in_buffer; + (void) wiol_fill_input_buffer(cinfo); + /* note we assume that fill_input_buffer will never return FALSE, + * so suspension need not be handled. + */ + } + src->pub.next_input_byte += (size_t) num_bytes; + src->pub.bytes_in_buffer -= (size_t) num_bytes; + } +} + +static void +wiol_term_source (j_decompress_ptr cinfo) { + /* no work necessary here */ + wiol_src_ptr src; + if (cinfo->src != NULL) { + src = (wiol_src_ptr) cinfo->src; + myfree(src->buffer); + } +} + +static void +jpeg_wiol_src(j_decompress_ptr cinfo, io_glue *ig, int length) { + wiol_src_ptr src; + + if (cinfo->src == NULL) { /* first time for this JPEG object? */ + cinfo->src = (struct jpeg_source_mgr *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_PERMANENT,sizeof(wiol_source_mgr)); + src = (wiol_src_ptr) cinfo->src; + } + + /* put the request method call in here later */ + io_glue_commit_types(ig); + + src = (wiol_src_ptr) cinfo->src; + src->data = ig; + src->buffer = mymalloc( JPGS ); + src->length = length; + + src->pub.init_source = wiol_init_source; + src->pub.fill_input_buffer = wiol_fill_input_buffer; + src->pub.skip_input_data = wiol_skip_input_data; + src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */ + src->pub.term_source = wiol_term_source; + src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */ + src->pub.next_input_byte = NULL; /* until buffer loaded */ +} + + + + + + + + + + + + +i_img* +i_readjpeg_wiol(io_glue *data, int length, char** iptc_itext, int *itlength) { + i_img *im; + + struct jpeg_decompress_struct cinfo; + struct my_error_mgr jerr; + JSAMPARRAY buffer; /* Output row buffer */ + int row_stride; /* physical row width in output buffer */ + + mm_log((1,"i_readjpeg_wiol(data 0x%p, length %d,iptc_itext 0x%p)\n", data, iptc_itext)); + + iptc_text = iptc_itext; + cinfo.err = jpeg_std_error(&jerr.pub); + jerr.pub.error_exit = my_error_exit; + jerr.pub.output_message = my_output_message; + + /* Set error handler */ + if (setjmp(jerr.setjmp_buffer)) { + jpeg_destroy_decompress(&cinfo); + *iptc_itext=NULL; + *itlength=0; + return NULL; + } + + jpeg_create_decompress(&cinfo); + jpeg_set_marker_processor(&cinfo, JPEG_APP13, APP13_handler); + jpeg_wiol_src(&cinfo, data, length); + + (void) jpeg_read_header(&cinfo, TRUE); + (void) jpeg_start_decompress(&cinfo); + im=i_img_empty_ch(NULL,cinfo.output_width,cinfo.output_height,cinfo.output_components); + row_stride = cinfo.output_width * cinfo.output_components; + buffer = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1); + while (cinfo.output_scanline < cinfo.output_height) { + (void) jpeg_read_scanlines(&cinfo, buffer, 1); + memcpy(im->data+im->channels*im->xsize*(cinfo.output_scanline-1),buffer[0],row_stride); + } + (void) jpeg_finish_decompress(&cinfo); + jpeg_destroy_decompress(&cinfo); + *itlength=tlength; + mm_log((1,"i_readjpeg_wiol -> (0x%x)\n",im)); + return im; +} + + diff --git a/lib/Imager/Color.pm b/lib/Imager/Color.pm new file mode 100644 index 00000000..a74a4963 --- /dev/null +++ b/lib/Imager/Color.pm @@ -0,0 +1,107 @@ +package Imager::Color; + +use Imager; +use strict; +use vars qw(); + +# It's just a front end to the XS creation functions. + + +# Parse color spec into an a set of 4 colors + +sub pspec { + return (@_,255) if @_ == 3; + return (@_ ) if @_ == 4; + if ($_[0] =~ + /^\#?([\da-f][\da-f])([\da-f][\da-f])([\da-f][\da-f])([\da-f][\da-f])/i) { + return (hex($1),hex($2),hex($3),hex($4)); + } + if ($_[0] =~ /^\#?([\da-f][\da-f])([\da-f][\da-f])([\da-f][\da-f])/i) { + return (hex($1),hex($2),hex($3),255); + } + return (); +} + + + +sub new { + shift; # get rid of class name. + my @arg = pspec(@_); + return @arg ? new_internal($arg[0],$arg[1],$arg[2],$arg[3]) : (); +} + +sub set { + my $self = shift; + print "set: @_\n"; + my @arg = pspec(@_); + return @arg ? set_internal($self, $arg[0],$arg[1],$arg[2],$arg[3]) : (); +} + + + + + +1; + +__END__ + +=head1 NAME + +Imager::Color - Color handling for Imager. + +=head1 SYNOPSIS + + $color = Imager::Color->new($red, $green, $blue); + $color = Imager::Color->new($red, $green, $blue, $alpha); + $color = Imager::Color->new("#C0C0FF"); # html color specification + + $color->set($red, $green, $blue); + $color->set($red, $green, $blue, $alpha); + $color->set("#C0C0FF"); # html color specification + + ($red, $green, $blue, $alpha) = $color->rgba(); + @hsv = $color->hsv(); # not implemented but proposed + + $color->info(); + + +=head1 DESCRIPTION + +This module handles creating color objects used by imager. The idea is +that in the future this module will be able to handle colorspace calculations +as well. + +=over 4 + +=item new + +This creates a color object to pass to functions that need a color argument. + +=item set + +This changes an already defined color. Note that this does not affect any places +where the color has been used previously. + +=item rgba + +This returns the rgba code of the color the object contains. + +=item info + +Calling info merely dumps the relevant colorcode to the log. + +=back + +=head1 AUTHOR + +Arnar M. Hrafnkelsson, addi@umich.edu +And a great deal of help from others - see the README for a complete +list. + +=head1 SEE ALSO + +Imager(3) +http://www.eecs.umich.edu/~addi/perl/Imager/ + +=cut + diff --git a/lib/Imager/Expr.pm b/lib/Imager/Expr.pm new file mode 100644 index 00000000..5effa507 --- /dev/null +++ b/lib/Imager/Expr.pm @@ -0,0 +1,624 @@ +package Imager::Expr; + +use Imager::Regops; +use strict; + +my %expr_types; + +my $error; + +sub error { + shift if UNIVERSAL::isa($_[0], 'Imager::Expr'); + if (@_) { + $error = "@_"; + } + else { + return $error; + } +} + +# what else? +my %default_constants = + ( + # too many digits, better than too few + pi=>3.14159265358979323846264338327950288419716939937510582097494 + ); + +sub new { + my ($class, $opts) = @_; + + # possibly this is a very bad idea + my ($type) = grep exists $expr_types{$_}, keys %$opts; + die "Imager::Expr: No known expression type" + if !defined $type; + my $self = bless {}, $expr_types{$type}; + $self->{variables} = [ @{$opts->{variables}} ]; + $self->{constants} = { %default_constants, %{$opts->{constants} || {}} }; + $self->{ops} = $self->compile($opts->{$type}, $opts) + or return; + $self->optimize() + or return; + $self->{code} = $self->assemble() + or return; + $self; +} + +sub register_type { + my ($pack, $name) = @_; + $expr_types{$name} = $pack; +} + +sub _variables { + return @{$_[0]->{variables}}; +} + +sub code { + return $_[0]->{code}; +} + +sub nregs { + return $_[0]->{nregs}; +} + +sub cregs { + return $_[0]->{cregs}; +} + +my $numre = '[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?'; + +sub numre { + $numre; +} + +# optimize the code +sub optimize { + my ($self) = @_; + + my @ops = @{$self->{ops}}; + + # this function cannot current handle code with jumps + return 1 if grep $_->[0] =~ /^jump/, @ops; + + # optimization - common sub-expression elimination + # it's possible to fold this into the code generation - but it will wait + + my $max_opr = $Imager::Regops::MaxOperands; + my $attr = \%Imager::Regops::Attr; + my $foundops = 1; + while ($foundops) { + $foundops = 0; + my %seen; + my $index; + my @out; + while (@ops) { + my $op = shift @ops; + my $desc = join(",", @{$op}[0..$max_opr]); + if ($seen{$desc}) { + push(@out, @ops); + my $old = $op->[-1]; + my $new = $seen{$desc}; + for $op (@out) { + for my $reg (@{$op}[1..$max_opr]) { + $reg = $new if $reg eq $old; + } + } + $foundops=1; + last; + } + $seen{$desc} = $op->[-1]; + push(@out, $op); + } + @ops = @out; + } + # strength reduction + for my $op (@ops) { + # reduce division by a constant to multiplication by a constant + if ($op->[0] eq 'div' && $op->[2] =~ /^r(\d+)/ + && defined($self->{"nregs"}[$1])) { + my $newreg = @{$self->{"nregs"}}; + push(@{$self->{"nregs"}}, 1.0/$self->{"nregs"}[$1]); + $op->[0] = 'mult'; + $op->[2] = 'r'.$newreg; + } + } + $self->{ops} = \@ops; + 1; +} + +sub assemble { + my ($self) = @_; + my $attr = \%Imager::Regops::Attr; + my $max_opr = $Imager::Regops::MaxOperands; + my @ops = @{$self->{ops}}; + for my $op (@ops) { + $op->[0] = $attr->{$op->[0]}{opcode}; + for (@{$op}[1..$max_opr+1]) { s/^[rpj]// } + } + my $pack = $Imager::Regops::PackCode x (2+$Imager::Regops::MaxOperands); + + return join("", ,map { pack($pack, @$_, ) } @ops); +} + +# converts stack code to register code +sub stack_to_reg { + my ($self, @st_ops) = @_; + my @regstack; + my %nregs; + my @vars = $self->_variables(); + my @nregs = (0) x scalar(@vars); + my @cregs; + my $attr = \%Imager::Regops::Attr; + my %vars; + my %names; + my $max_opr = $Imager::Regops::MaxOperands; + @vars{@vars} = map { "r$_" } 0..$#vars; + + my @ops; + for (@st_ops) { + if (/^$numre$/) { + # combining constants makes the optimization below work + if (exists $nregs{$_}) { + push(@regstack, $nregs{$_}); + } + else { + $nregs{$_} = "r".@nregs; + push(@regstack,"r".@nregs); + push(@nregs, $_); + } + } + elsif (exists $vars{$_}) { + push(@regstack, $vars{$_}); + } + elsif (exists $attr->{$_} && length $attr->{$_}{types}) { + if (@regstack < $attr->{$_}{parms}) { + error("Imager::transform2: stack underflow on $_"); + return; + } + my @parms = splice(@regstack, -$attr->{$_}{parms}); + my $types = join("", map {substr($_,0,1)} @parms); + if ($types ne $attr->{$_}{types}) { + if (exists $attr->{$_.'p'} && $types eq $attr->{$_.'p'}{types}) { + $_ .= 'p'; + } + else { + error("Imager::transform2: Call to $_ with incorrect types"); + return; + } + } + my $result; + if ($attr->{$_}{result} eq 'r') { + $result = "r".@nregs; + push(@nregs, undef); + } + else { + $result = "p".@cregs; + push(@cregs, -1); + } + push(@regstack, $result); + push(@parms, "0") while @parms < $max_opr; + push(@ops, [ $_, @parms, $result ]); + #print "$result <- $_ @parms\n"; + } + elsif (/^!(\w+)$/) { + if (!@regstack) { + error("Imager::transform2: stack underflow with $_"); + return; + } + $names{$1} = pop(@regstack); + } + elsif (/^\@(\w+)$/) { + if (exists $names{$1}) { + push(@regstack, $names{$1}); + } + else { + error("Imager::Expr: unknown storage \@$1"); + return; + } + } + else { + error("Imager::Expr: unknown operator $_"); + return; + } + } + if (@regstack != 1) { + error("stack must have only one item at end"); + return; + } + if ($regstack[0] !~ /^p/) { + error("you must have a color value at the top of the stack at end"); + return; + } + push(@ops, [ "ret", $regstack[0], (-1) x $max_opr ]); + + $self->{"nregs"} = \@nregs; + $self->{"cregs"} = \@cregs; + + return \@ops; +} + +sub dumpops { + my $result = ''; + for my $op (@{$_[0]->{ops}}) { + $result .= "@{$op}\n"; + } + $result; +} + +# unassembles the compiled code +sub dumpcode { + my ($self) = @_; + my $code = $self->{"code"}; + my $attr = \%Imager::Regops::Attr; + my @code = unpack("${Imager::Regops::PackCode}*", $code); + my %names = map { $attr->{$_}{opcode}, $_ } keys %Imager::Regops::Attr; + my @vars = $self->_variables(); + my $result = ''; + my $index = 0; + while (my @op = splice(@code, 0, 2+$Imager::Regops::MaxOperands)) { + my $opcode = shift @op; + my $name = $names{$opcode}; + if ($name) { + $result .= "j$index: $name($opcode)"; + my @types = split //, $attr->{$name}{types}; + for my $parm (@types) { + my $reg = shift @op; + $result .= " $parm$reg"; + if ($parm eq 'r') { + if ($reg < @vars) { + $result.= "($vars[$reg])"; + } + elsif (defined $self->{"nregs"}[$reg]) { + $result .= "($self->{\"nregs\"}[$reg])"; + } + } + } + + $result .= " -> $attr->{$name}{result}$op[-1]" + if $attr->{$name}{result}; + $result .= "\n"; + } + else { + $result .= "unknown($opcode) @op\n"; + } + ++$index; + } + + $result; +} + +package Imager::Expr::Postfix; +use vars qw(@ISA); +@ISA = qw(Imager::Expr); + +Imager::Expr::Postfix->register_type('rpnexpr'); + +my %op_names = ( '+'=>'add', '-'=>'subtract', '*'=>'mult', '/' => 'div', + '%'=>'mod', '**'=>'pow' ); + +sub compile { + my ($self, $expr, $opts) = @_; + + my @st_ops = split ' ', $expr; + + for (@st_ops) { + $_ = $op_names{$_} if exists $op_names{$_}; + $_ = $self->{constants}{$_} if exists $self->{constants}{$_}; + } + return $self->stack_to_reg(@st_ops); +} + +package Imager::Expr::Infix; + +use vars qw(@ISA); +@ISA = qw(Imager::Expr); +use Imager::Regops qw(%Attr $MaxOperands); + + +eval "use Parse::RecDescent;"; +__PACKAGE__->register_type('expr') if !$@; + +# I really prefer bottom-up parsers +my $grammar = <<'GRAMMAR'; + +code : assigns 'return' expr +{ $return = [ @item[1,3] ] } + +assigns : assign(s?) { $return = [ @{$item[1]} ] } + +assign : identifier '=' expr ';' +{ $return = [ @item[1,3] ] } + +expr : relation + +relation : addition (relstuff)(s?) +{ + $return = $item[1]; + for my $op(@{$item[2]}) { $return = [ $op->[0], $return, $op->[1] ] } +} + +relstuff : relop addition { $return = [ @item[1,2] ] } + +relop : '<=' { $return = 'le' } + | '<' { $return = 'lt' } + | '==' { $return = 'eq' } + | '>=' { $return = 'ge' } + | '>' { $return = 'gt' } + | '!=' { $return = 'ne' } + +addition : multiply (addstuff)(s?) +{ + $return = $item[1]; +# for my $op(@{$item[2]}) { $return .= " @{$op}[1,0]"; } + for my $op(@{$item[2]}) { $return = [ $op->[0], $return, $op->[1] ] } +} +addstuff : addop multiply { $return = [ @item[1,2] ] } +addop : '+' { $return = 'add' } + | '-' { $return = 'subtract' } + +multiply : power mulstuff(s?) +{ $return = $item[1]; +# for my $op(@{$item[2]}) { $return .= " @{$op}[1,0]"; } + for my $op(@{$item[2]}) { $return = [ $op->[0], $return, $op->[1] ] } +} + +mulstuff : mulop power { $return = [ @item[1,2] ] } +mulop : '*' { $return = 'mult' } + | '/' { $return = 'div' } + | '%' { $return = 'mod' } + +power : powstuff(s?) atom +{ + $return = $item[2]; + for my $op(reverse @{$item[1]}) { $return = [ @{$op}[1,0], $return ] } +} + | atom +powstuff : atom powop { $return = [ @item[1,2] ] } +powop : '**' { $return = 'pow' } + +atom: '(' expr ')' { $return = $item[2] } + | '-' atom { $return = [ uminus=>$item[2] ] } + | number + | funccall + | identifier + +number : /[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/ + +exprlist : expr ',' exprlist { $return = [ $item[1], @{$item[3]} ] } + | expr { $return = [ $item[1] ] } + +funccall : identifier '(' exprlist ')' +{ $return = [ $item[1], @{$item[3]} ] } + +identifier : /[^\W\d]\w*/ { $return = $item[1] } + +GRAMMAR + +my $parser; + +sub init_parser { + if (!$parser) { + $parser = Parse::RecDescent->new($grammar); + } +} + +sub compile { + my ($self, $expr, $opts) = @_; + if (!$parser) { + $parser = Parse::RecDescent->new($grammar); + } + my $optree = $parser->code($expr); + if (!$optree) { + $self->error("Error in $expr\n"); + return; + } + + @{$self->{inputs}}{$self->_variables} = (); + $self->{varregs} = {}; + @{$self->{varregs}}{$self->_variables} = map { "r$_" } 0..$self->_variables-1; + $self->{"nregs"} = [ (undef) x $self->_variables ]; + $self->{"cregs"} = []; + $self->{"lits"} = {}; + + eval { + # generate code for the assignments + for my $assign (@{$optree->[0]}) { + my ($varname, $tree) = @$assign; + if (exists $self->{inputs}{$varname}) { + $self->error("$varname is an input - you can't assign to it"); + return; + } + $self->{varregs}{$varname} = $self->gencode($tree); + } + + # generate the final result + my $result = $self->gencode($optree->[1]); + if ($result !~ /^p\d+$/) { + $self->error("You must return a colour value"); + return; + } + push(@{$self->{genops}}, [ 'ret', $result, (0) x $MaxOperands ]) + }; + if ($@) { + $self->error($@); + return; + } + + return $self->{genops}; +} + +sub gencode { + my ($self, $tree) = @_; + + if (ref $tree) { + my ($op, @parms) = @$tree; + + if (!exists $Attr{$op}) { + die "Unknown operator or function $op"; + } + + for my $subtree (@parms) { + $subtree = $self->gencode($subtree); + } + my $types = join("", map {substr($_,0,1)} @parms); + + if (length($types) < length($Attr{$op}{types})) { + die "Too few parameters in call to $op"; + } + if ($types ne $Attr{$op}{types}) { + # some alternate operators have the same name followed by p + my $opp = $op."p"; + if (exists $Attr{$opp} && + $types eq $Attr{$opp}{types}) { + $op = $opp; + } + else { + die "Call to $_ with incorrect types"; + } + } + my $result; + if ($Attr{$op}{result} eq 'r') { + $result = "r".@{$self->{nregs}}; + push(@{$self->{nregs}}, undef); + } + else { + $result = "p".@{$self->{cregs}}; + push(@{$self->{cregs}}, undef); + } + push(@parms, "0") while @parms < $MaxOperands; + push(@{$self->{genops}}, [ $op, @parms, $result]); + return $result; + } + elsif (exists $self->{varregs}{$tree}) { + return $self->{varregs}{$tree}; + } + elsif ($tree =~ /^$numre$/ || exists $self->{constants}{$tree}) { + $tree = $self->{constants}{$tree} if exists $self->{constants}{$tree}; + + if (exists $self->{lits}{$tree}) { + return $self->{lits}{$tree}; + } + my $reg = "r".@{$self->{nregs}}; + push(@{$self->{nregs}}, $tree); + $self->{lits}{$tree} = $reg; + + return $reg; + } +} + +1; + +__END__ + +=head1 NAME + +Imager::Expr - implements expression parsing and compilation for the +expression evaluation engine used by Imager::transform2() + +=head1 SYNOPSIS + +my $code = Imager::Expr->new({rpnexpr=>$someexpr}) + or die "Cannot compile $someexpr: ",Imager::Expr::error(); + +=head1 DESCRIPTION + +This module is used internally by the Imager::transform2() function. +You shouldn't have much need to use it directly, but you may want to +extend it. + +To create a new Imager::Expr object, call: + + my %options; + my $expr = Imager::Expr->new(\%options) + or die Imager::Expr::error(); + +You will need to set an expression value and you may set any of the +following: + +=over 4 + +=item constants + +A hashref defining extra constants for expression parsing. The names +of the constants must be valid identifiers (/[^\W\d]\w*/) and the +values must be valid numeric constants (that Perl recognizes in +scalars). + +Imager::Expr may define it's own constants (currently just pi.) + +=item variables + +A reference to an array of variable names. These are allocated +numeric registers starting from register zero. + +=back + +By default you can define a 'rpnexpr' key (which emulates RPN) or +'expr' (an infix expression). It's also possible to write other +expression parsers that will use other keys. Only one expression key +should be defined. + +=head2 Instance methods + +The Imager::Expr::error() method is used to retrieve the error if the +expression object cannot be created. + +=head2 Methods + +Imager::Expr provides only a few simple methods meant for external use: + +=over 4 + +=item $expr->code() + +Returns the compiled code. + +=item $expr->nregs() + +Returns a reference to the array of numeric registers. + +=item $expr->cregs() + +Returns a reference to the array of colour registers. + +=item $expr->dumpops() + +Returns a string with the generated VM "machine code". + +=item $expr->dumpcode() + +Returns a string with the unassembled VM "machine code". + +=back + +=head2 Creating a new parser + +I'll write this one day. + +Methods used by parsers: + +=over 4 + +=item @vars = $self->_variables() + +A list (not a reference) of the input variables. This should be used +to allocate as many registers as there are variable as input +registers. + +=item $self->error($message) + +Set the return value of Imager::Expr::error() + +=item @ops = $self->stack_to_reg(@stack_ops) + +Converts marginally parsed RPN to register code. + +=back + +=head2 Future compatibility + +Try to avoid doing your own optimization beyond literal folding - if +we add some sort of jump, the existing optimizer will need to be +rewritten, and any optimization you perform may well be broken too +(well, your code generation will probably be broken anyway ). + +=cut diff --git a/lib/Imager/Expr/Assem.pm b/lib/Imager/Expr/Assem.pm new file mode 100644 index 00000000..04475614 --- /dev/null +++ b/lib/Imager/Expr/Assem.pm @@ -0,0 +1,277 @@ +package Imager::Expr::Assem; +use strict; +use Imager::Expr; +use Imager::Regops; + +use vars qw(@ISA); +@ISA = qw(Imager::Expr); + +__PACKAGE__->register_type('assem'); + +sub compile { + my ($self, $expr, $opts) = @_; + my %nregs; + my @vars = $self->_variables(); + my @nregs = (0) x @vars; + my @cregs; + my %vars; + @vars{@vars} = map { "r$_" } 0..$#vars; + my %labels; + my @ops; + my @msgs; + my $attr = \%Imager::Regops::Attr; + + # initially produce [ $linenum, $result, $opcode, @parms ] + my $lineno = 0; + while ($expr =~ s/^([^\n]+)(?:\n|$)//) { + ++$lineno; + my $line = $1; + $line =~ s/#.*//; + next if $line =~ /^\s*$/; + for my $op (split /;/, $line) { + if (my ($name, $type) = $op =~ /^\s*var\s+([^:]+):(\S+)\s*$/) { + if (exists $vars{$name}) { + push(@msgs, "$lineno: duplicate variable name '$name'"); + next; + } + if ($type eq 'num' || $type eq 'n') { + $vars{$name} = 'r'.@nregs; + push(@nregs, undef); + next; + } + elsif ($type eq 'pixel' || $type eq 'p' || $type eq 'c') { + $vars{$name} = 'p'.@cregs; + push(@cregs, undef); + next; + } + push(@msgs, "$lineno: unknown variable type $type"); + next; + } + # any statement can have a label + if ($op =~ s/^\s*(\w+):\s*//) { + if ($labels{$1}) { + push(@msgs, + "$lineno: duplicate label $1 (previous on $labels{$1}[1])"); + next; + } + $labels{$1} = [ scalar @ops, $lineno ]; + } + next if $op =~ /^\s*$/; + # jumps have special operand handling + if ($op =~ /^\s*jump\s+(\w+)\s*$/) { + push(@ops, [$lineno, "", "jump", $1]); + } + elsif (my ($code, $reg, $targ) = + ($op =~ /^\s*(jumpz|jumpnz)\s+(\S+)\s+(\S+)\s*$/)) { + push(@ops, [$lineno, "", $code, $reg, $targ]); + } + elsif ($op =~ /^\s*print\s+(\S+)\s*/) { + push(@ops, [$lineno, "", 'print', $1 ]); + } + elsif ($op =~ /^\s*ret\s+(\S+)\s*/) { + push(@ops, [$lineno, "", 'ret', $1]); + } + elsif ($op =~ s/\s*(\S+)\s*=\s*(\S+)\s*$//) { + # simple assignment + push(@ops, [$lineno, $1, "set", $2]); + } + elsif ($op =~ s/\s*(\S+)\s*=\s*(\S+)\s*//) { + # some normal ops finally + my ($result, $opcode) = ($1, $2); + unless ($attr->{$opcode}) { + push(@msgs, "$lineno: unknown operator $opcode"); + next; + } + my @oper; + while ($op =~ s/(\S+)\s*//) { + push(@oper, $1); + } + push(@ops, [$lineno, $result, $opcode, @oper]); + } + else { + push(@msgs, "$lineno: invalid statement '$op'"); + } + } + } + + my $max_opr = $Imager::Regops::MaxOperands; + my $numre = $self->numre; + my $trans = + sub { + # translate a name/number to a + my ($name) = @_; + $name = $self->{constants}{$name} + if exists $self->{constants}{$name}; + if ($vars{$name}) { + return $vars{$name}; + } + elsif ($name =~ /^$numre$/) { + $vars{$name} = 'r'.@nregs; + push(@nregs, $name); + return $vars{$name}; + } + else { + push(@msgs, "$lineno: undefined variable $name"); + return ''; + } + }; + # now to translate symbols and so on + OP: for my $op (@ops) { + $lineno = shift @$op; + if ($op->[1] eq 'jump') { + unless (exists $labels{$op->[2]}) { + push(@msgs, "$lineno: unknown label $op->[2]"); + next; + } + $op = [ 'jump', "j$labels{$op->[2]}[0]", (0) x $max_opr ]; + } + elsif ($op->[1] =~ /^jump/) { + unless (exists $labels{$op->[3]}) { + push(@msgs, "$lineno: unknown label $op->[2]"); + next; + } + $op = [ $op->[1], $trans->($op->[2]), "j$labels{$op->[3]}[0]", + (0) x ($max_opr-1) ]; + } + elsif ($op->[1] eq 'print') { + $op = [ $op->[1], $trans->($op->[2]), (0) x $max_opr ]; + } + elsif ($op->[1] eq 'ret') { + $op = [ 'ret', $trans->($op->[2]), (0) x $max_opr ]; + } + else { + # a normal operator + my ($result, $name, @parms) = @$op; + + if ($result =~ /^$numre$/) { + push(@msgs, "$lineno: target of operator cannot be a constant"); + next; + } + $result = $trans->($result); + for my $parm (@parms) { + $parm = $trans->($parm); + } + push(@parms, (0) x ($max_opr-@parms)); + $op = [ $op->[1], @parms, $result ]; + } + } + + # more validation than a real assembler + # not trying to solve the halting problem... + if (@ops && $ops[-1][0] ne 'ret' && $ops[-1][0] ne 'jump') { + push(@msgs, ": the last instruction must be ret or jump"); + } + + $self->{nregs} = \@nregs; + $self->{cregs} = \@cregs; + + if (@msgs) { + $self->error(join("\n", @msgs)); + return 0; + } + + return \@ops; +} + +1; + +__END__ + +=head1 NAME + + Imager::Expr::Assem - an assembler for producing code for the Imager + register machine + +=head1 SYNOPSIS + + use Imager::Expr::Assem; + my $expr = Imager::Expr->new(assem=>'...', ...) + +=head1 DESCRIPTION + +This module is a simple Imager::Expr compiler that compiles a +low-level language that has a nearly 1-to-1 relationship to the +internal representation used for compiled regmach code. + +=head2 Syntax + +Each line can contain multiple statements separated by semi-colons. + +Anything after '#' in a line is ignored. + +Types of statements: + +=over 4 + +=item variable definition + +=over 4 + +C I:I + +=back + +defines variable I to have I, which can be any of 'n' or +'num' for a numeric type or 'pixel', 'p' or 'c' for a pixel or color +type. + +Variable names cannot include whitespace. + +=item operators + +Operators can be split into 3 basic types, those that have a result +value, those that don't and the null operator, eg. jump has no value. + +The format for operators that return a value is typically: + +=over 4 + +I = I I ... + +=back + +and for those that don't return a value: + +=over 4 + +I I + +=back + +where operator is any valid regmach operator, result is any variable +defined with C, and operands are variables, constants or +literals, or for jump operators, labels. + +The set operator can be simplified to: + +=over 4 + +I = I + +=back + +All operators maybe preceded by a label, which is any non-whitespace +text immediately followed by a colon (':'). + +=back + +=head1 BUGS + +Note that the current optimizer may produce incorrect optimization for +your code, fortunately the optimizer will disable itself if you +include any jump operator in your code. A single jump to anywhere +after your final ret operator can be used to disable the optimizer +without slowing down your code. + +There's currently no high-level code generation that can generate code +with loops or real conditions. + +=head1 SEE ALSO + +Imager(3), transform.perl, regmach.c + +=head1 AUTHOR + +Tony Cook + +=cut diff --git a/lib/Imager/Font.pm b/lib/Imager/Font.pm new file mode 100644 index 00000000..6edc9531 --- /dev/null +++ b/lib/Imager/Font.pm @@ -0,0 +1,315 @@ +package Imager::Font; + +use Imager::Color; +use strict; +use vars qw(%T1_Paths %TT_Paths %T1_Cache %TT_Cache $TT_CSize $TT_CSize $T1AA); + +# This class is a container +# and works for both truetype and t1 fonts. + + +# $T1AA is in there because for some reason (probably cache related) antialiasing +# is a system wide setting in t1 lib. + +sub t1_set_aa_level { + if (!defined $T1AA or $_[0] != $T1AA) { + Imager::i_t1_set_aa($_[0]); + $T1AA=$_[0]; + } +} + +# search method +# 1. start by checking if file is the parameter +# 1a. if so qualify path and compare to the cache. +# 2a. if in cache - take it's id from there and increment count. +# + +sub new { + my $class = shift; + my $self ={}; + my ($file,$type,$id); + my %hsh=(color=>Imager::Color->new(255,0,0,0), + size=>15, + @_); + + bless $self,$class; + + if ($hsh{'file'}) { + $file=$hsh{'file'}; + if ( $file !~ m/^\// ) { + $file='./'.$file; + if (! -e $file) { + $Imager::ERRSTR="Font $file not found"; + return(); + } + } + + $type=$hsh{'type'}; + if (!defined($type) or $type !~ m/^(t1|tt)/) { + $type='tt' if $file =~ m/\.ttf$/i; + $type='t1' if $file =~ m/\.pfb$/i; + } + if (!defined($type)) { + $Imager::ERRSTR="Font type not found"; + return; + } + } else { + $Imager::ERRSTR="No font file specified"; + return; + } + + if (!$Imager::formats{$type}) { + $Imager::ERRSTR="`$type' not enabled"; + return; + } + + # here we should have the font type or be dead already. + + if ($type eq 't1') { + $id=Imager::i_t1_new($file); + } + + if ($type eq 'tt') { + $id=Imager::i_tt_new($file); + } + + $self->{'aa'}=$hsh{'aa'}||'0'; + $self->{'file'}=$file; + $self->{'id'}=$id; + $self->{'type'}=$type; + $self->{'size'}=$hsh{'size'}; + $self->{'color'}=$hsh{'color'}; + return $self; +} + + + + + + +sub bounding_box { + my $self=shift; + my %input=@_; + my @box; + + if (!exists $input{'string'}) { $Imager::ERRSTR='string parameter missing'; return; } + + if ($self->{type} eq 't1') { + @box=Imager::i_t1_bbox($self->{id}, defined($input{size}) ? $input{size} :$self->{size}, + $input{string}, length($input{string})); + } + if ($self->{type} eq 'tt') { + @box=Imager::i_tt_bbox($self->{id}, defined($input{size}) ? $input{size} :$self->{size}, + $input{string}, length($input{string})); + } + + if(exists $input{'x'} and exists $input{'y'}) { + my($gdescent, $gascent)=@box[1,3]; + $box[1]=$input{'y'}-$gascent; # top = base - ascent (Y is down) + $box[3]=$input{'y'}-$gdescent; # bottom = base - descent (Y is down, descent is negative) + $box[0]+=$input{'x'}; + $box[2]+=$input{'x'}; + } elsif (exists $input{'canon'}) { + $box[3]-=$box[1]; # make it cannoical (ie (0,0) - (width, height)) + $box[2]-=$box[0]; + } + return @box; +} + +1; + + + +__END__ + +=head1 NAME + +Imager::Font - Font handling for Imager. + +=head1 SYNOPSIS + + $t1font = Imager::Font->new(file => 'pathtofont.pfb'); + $ttfont = Imager::Font->new(file => 'pathtofont.ttf'); + + $blue = Imager::Color->new("#0000FF"); + $font = Imager::Font->new(file => 'pathtofont.ttf', + color => $blue, + size => 30); + + ($neg_width, + $global_descent, + $pos_width, + $global_ascent, + $descent, + $ascent) = $font->bounding_box(string=>"Foo"); + + $logo = $font->logo(text => "Slartibartfast Enterprises", + size => 40, + border => 5, + color => $green); + # logo is proposed - doesn't exist yet + + + $img->string(font => $font, + text => "Model-XYZ", + x => 15, + y => 40, + size => 40, + color => $red + aa => 1); + + # Documentation in Imager.pm + +=head1 DESCRIPTION + +This module handles creating Font objects used by imager. The module +also handles querying fonts for sizes and such. If both T1lib and +freetype were avaliable at the time of compilation then Imager should +be able to work with both truetype fonts and t1 postscript fonts. To +check if Imager is t1 or truetype capable you can use something like +this: + + use Imager; + print "Has truetype" if $Imager::formats{tt}; + print "Has t1 postscript" if $Imager::formats{t1}; + + +=over 4 + +=item new + +This creates a font object to pass to functions that take a font argument. + + $font = Imager::Font->new(file => 'denmark.ttf', + color => $blue, + size => 30, + aa => 1); + +This creates a font which is the truetype font denmark.ttf. It's +default color is $blue, default size is 30 pixels and it's rendered +antialised by default. Imager can see which type of font a file is by +looking at the suffix of the filename for the font. A suffix of 'ttf' +is taken to mean a truetype font while a suffix of 'pfb' is taken to +mean a t1 postscript font. If Imager cannot tell which type a font is +you can tell it explicitly by using the C parameter: + + $t1font = Imager::Font->new(file => 'fruitcase', type => 't1'); + $ttfont = Imager::Font->new(file => 'arglebarf', type => 'tt'); + +If any of the C, C or C parameters are omitted when +calling Cnew()> the they take the following values: + + + color => Imager::Color->new(255, 0, 0, 0); # this default should be changed + size => 15 + aa => 0 + +=item bounding_box +Returns the bounding box for the specified string. Example: + + ($neg_width, + $global_descent, + $pos_width, + $global_ascent, + $descent, + $ascent) = $font->bounding_box(string => "A Fool"); + +The C<$neg_width> is the relative start of a the string. In some +cases this can be a negative number, in that case the first letter +stretches to the left of the starting position that is specified in +the string method of the Imager class. <$global_descent> is the how +far down the lowest letter of the entire font reaches below the +baseline (this is often j). C<$pos_width> is how wide the string from +from the starting position is. The total width of the string is +C<$pos_width-$neg_width>. C<$descent> and C<$ascent> are the as +<$global_descent> and <$global_ascent> except that they are only for +the characters that appear in the string. Obviously we can stuff all +the results into an array just as well: + + @metrics = $font->bounding_box(string => "testing 123"); + +Note that extra values may be added, so $metrics[-1] isn't supported. +It's possible to translate the output by a passing coordinate to the +bounding box method: + + @metrics = $font->bounding_box(string => "testing 123", x=>45, y=>34); + +This gives the bounding box as if the string had been put down at C<(x,y)> +By giving bounding_box 'canon' as a true value it's possible to measure +the space needed for the string: + + @metrics = $font->bounding_box(string=>"testing",size=>15,canon=>1); + +This returns tha same values in $metrics[0] and $metrics[1], +but: + + $bbox[2] - horizontal space taken by glyphs + $bbox[3] - vertical space taken by glyphs + + + +=item string + +This is a method of the Imager class but because it's described in +here since it belongs to the font routines. Example: + + $img=Imager->new(); + $img=read(file=>"test.jpg"); + $img->string(font=>$t1font, + text=>"Model-XYZ", + x=>0, + y=>40, + size=>40, + color=>$red); + $img->write(file=>"testout.jpg"); + +This would put a 40 pixel high text in the top left corner of an +image. If you measure the actuall pixels it varies since the fonts +usually do not use their full height. It seems that the color and +size can be specified twice. When a font is created only the actual +font specified matters. It his however convenient to store default +values in a font, such as color and size. If parameters are passed to +the string function they are used instead of the defaults stored in +the font. + +If string() is called with the C parameter then the color +isn't used and the font is drawn in only one channel of the image. +This can be quite handy to create overlays. See the examples for tips +about this. + +Sometimes it is necessary to know how much space a string takes before +rendering it. The bounding_box() method described earlier can be used +for that. + + +=item logo + +This method doesn't exist yet but is under consideration. It would mostly +be helpful for generating small tests and such. Its proposed interface is: + + $img = $font->logo(string=>"Plan XYZ", color=>$blue, border=>7); + +This would be nice for writing (admittedly multiline) one liners like: + +Imager::Font->new(file=>"arial.ttf", color=>$blue, aa=>1) + ->string(text=>"Plan XYZ", border=>5) + ->write(file=>"xyz.png"); + + + +=back + +=head1 AUTHOR + +Arnar M. Hrafnkelsson, addi@umich.edu +And a great deal of help from others - see the README for a complete +list. + +=head1 SEE ALSO + +Imager(3) +http://www.eecs.umich.edu/~addi/perl/Imager/ + +=cut + + diff --git a/lib/Imager/Regops.pm b/lib/Imager/Regops.pm new file mode 100644 index 00000000..e4d27707 --- /dev/null +++ b/lib/Imager/Regops.pm @@ -0,0 +1,426 @@ +# AUTOMATICALLY GENERATED BY regops.perl +package Imager::Regops; +use strict; +require Exporter; +use vars qw(@ISA @EXPORT @EXPORT_OK %Attr $MaxOperands $PackCode); +@ISA = qw(Exporter); +@EXPORT_OK = qw(%Attr $MaxOperands $PackCode); + +use constant RBC_ADD => 0; +use constant RBC_SUBTRACT => 1; +use constant RBC_MULT => 2; +use constant RBC_DIV => 3; +use constant RBC_MOD => 4; +use constant RBC_POW => 5; +use constant RBC_UMINUS => 6; +use constant RBC_MULTP => 7; +use constant RBC_ADDP => 8; +use constant RBC_SUBTRACTP => 9; +use constant RBC_SIN => 10; +use constant RBC_COS => 11; +use constant RBC_ATAN2 => 12; +use constant RBC_SQRT => 13; +use constant RBC_DISTANCE => 14; +use constant RBC_GETP1 => 15; +use constant RBC_GETP2 => 16; +use constant RBC_GETP3 => 17; +use constant RBC_VALUE => 18; +use constant RBC_HUE => 19; +use constant RBC_SAT => 20; +use constant RBC_HSV => 21; +use constant RBC_RED => 22; +use constant RBC_GREEN => 23; +use constant RBC_BLUE => 24; +use constant RBC_RGB => 25; +use constant RBC_INT => 26; +use constant RBC_IF => 27; +use constant RBC_IFP => 28; +use constant RBC_LE => 29; +use constant RBC_LT => 30; +use constant RBC_GE => 31; +use constant RBC_GT => 32; +use constant RBC_EQ => 33; +use constant RBC_NE => 34; +use constant RBC_AND => 35; +use constant RBC_OR => 36; +use constant RBC_NOT => 37; +use constant RBC_ABS => 38; +use constant RBC_RET => 39; +use constant RBC_JUMP => 40; +use constant RBC_JUMPZ => 41; +use constant RBC_JUMPNZ => 42; +use constant RBC_SET => 43; +use constant RBC_SETP => 44; +use constant RBC_PRINT => 45; +use constant RBC_OP_COUNT => 46; + +@EXPORT = qw(RBC_ADD RBC_SUBTRACT RBC_MULT RBC_DIV RBC_MOD RBC_POW RBC_UMINUS RBC_MULTP RBC_ADDP RBC_SUBTRACTP RBC_SIN RBC_COS RBC_ATAN2 RBC_SQRT RBC_DISTANCE RBC_GETP1 RBC_GETP2 RBC_GETP3 RBC_VALUE RBC_HUE RBC_SAT RBC_HSV RBC_RED RBC_GREEN RBC_BLUE RBC_RGB RBC_INT RBC_IF RBC_IFP RBC_LE RBC_LT RBC_GE RBC_GT RBC_EQ RBC_NE RBC_AND RBC_OR RBC_NOT RBC_ABS RBC_RET RBC_JUMP RBC_JUMPZ RBC_JUMPNZ RBC_SET RBC_SETP RBC_PRINT RBC_OP_COUNT); + +%Attr = ( + 'setp' => { + 'result' => 'p', + 'parms' => 1, + 'opcode' => 44, + 'func' => 0, + 'types' => 'p' + }, + 'green' => { + 'result' => 'r', + 'parms' => 1, + 'opcode' => 23, + 'func' => 1, + 'types' => 'p' + }, + 'abs' => { + 'result' => 'r', + 'parms' => 1, + 'opcode' => 38, + 'func' => 1, + 'types' => 'r' + }, + 'le' => { + 'result' => 'r', + 'parms' => 2, + 'opcode' => 29, + 'func' => 0, + 'types' => 'rr' + }, + 'cos' => { + 'result' => 'r', + 'parms' => 1, + 'opcode' => 11, + 'func' => 1, + 'types' => 'r' + }, + 'not' => { + 'result' => 'r', + 'parms' => 1, + 'opcode' => 37, + 'func' => 0, + 'types' => 'r' + }, + 'ne' => { + 'result' => 'r', + 'parms' => 2, + 'opcode' => 34, + 'func' => 0, + 'types' => 'rr' + }, + 'blue' => { + 'result' => 'r', + 'parms' => 1, + 'opcode' => 24, + 'func' => 1, + 'types' => 'p' + }, + 'and' => { + 'result' => 'r', + 'parms' => 2, + 'opcode' => 35, + 'func' => 0, + 'types' => 'rr' + }, + 'mult' => { + 'result' => 'r', + 'parms' => 2, + 'opcode' => 2, + 'func' => 0, + 'types' => 'rr' + }, + 'pow' => { + 'result' => 'r', + 'parms' => 2, + 'opcode' => 5, + 'func' => 0, + 'types' => 'rr' + }, + 'lt' => { + 'result' => 'r', + 'parms' => 2, + 'opcode' => 30, + 'func' => 0, + 'types' => 'rr' + }, + 'mod' => { + 'result' => 'r', + 'parms' => 2, + 'opcode' => 4, + 'func' => 0, + 'types' => 'rr' + }, + 'getp1' => { + 'result' => 'p', + 'parms' => 2, + 'opcode' => 15, + 'func' => 1, + 'types' => 'rr' + }, + 'atan2' => { + 'result' => 'r', + 'parms' => 2, + 'opcode' => 12, + 'func' => 1, + 'types' => 'rr' + }, + 'getp2' => { + 'result' => 'p', + 'parms' => 2, + 'opcode' => 16, + 'func' => 1, + 'types' => 'rr' + }, + 'getp3' => { + 'result' => 'p', + 'parms' => 2, + 'opcode' => 17, + 'func' => 1, + 'types' => 'rr' + }, + 'value' => { + 'result' => 'r', + 'parms' => 1, + 'opcode' => 18, + 'func' => 1, + 'types' => 'p' + }, + 'subtractp' => { + 'result' => 'p', + 'parms' => 2, + 'opcode' => 9, + 'func' => 0, + 'types' => 'pp' + }, + 'ge' => { + 'result' => 'r', + 'parms' => 2, + 'opcode' => 31, + 'func' => 0, + 'types' => 'rr' + }, + 'sat' => { + 'result' => 'r', + 'parms' => 1, + 'opcode' => 20, + 'func' => 1, + 'types' => 'p' + }, + 'jump' => { + 'result' => undef, + 'parms' => 0, + 'opcode' => 40, + 'func' => 0, + 'types' => '' + }, + 'if' => { + 'result' => 'r', + 'parms' => 3, + 'opcode' => 27, + 'func' => 1, + 'types' => 'rrr' + }, + 'div' => { + 'result' => 'r', + 'parms' => 2, + 'opcode' => 3, + 'func' => 0, + 'types' => 'rr' + }, + 'ifp' => { + 'result' => 'p', + 'parms' => 3, + 'opcode' => 28, + 'func' => 1, + 'types' => 'rpp' + }, + 'set' => { + 'result' => 'r', + 'parms' => 1, + 'opcode' => 43, + 'func' => 0, + 'types' => 'r' + }, + 'eq' => { + 'result' => 'r', + 'parms' => 2, + 'opcode' => 33, + 'func' => 0, + 'types' => 'rr' + }, + 'multp' => { + 'result' => 'p', + 'parms' => 2, + 'opcode' => 7, + 'func' => 0, + 'types' => 'pr' + }, + 'sin' => { + 'result' => 'r', + 'parms' => 1, + 'opcode' => 10, + 'func' => 1, + 'types' => 'r' + }, + 'sqrt' => { + 'result' => 'r', + 'parms' => 1, + 'opcode' => 13, + 'func' => 1, + 'types' => 'r' + }, + 'distance' => { + 'result' => 'r', + 'parms' => 4, + 'opcode' => 14, + 'func' => 1, + 'types' => 'rrrr' + }, + 'gt' => { + 'result' => 'r', + 'parms' => 2, + 'opcode' => 32, + 'func' => 0, + 'types' => 'rr' + }, + 'red' => { + 'result' => 'r', + 'parms' => 1, + 'opcode' => 22, + 'func' => 1, + 'types' => 'p' + }, + 'rgb' => { + 'result' => 'p', + 'parms' => 3, + 'opcode' => 25, + 'func' => 1, + 'types' => 'rrr' + }, + 'hue' => { + 'result' => 'r', + 'parms' => 1, + 'opcode' => 19, + 'func' => 1, + 'types' => 'p' + }, + 'print' => { + 'result' => undef, + 'parms' => 1, + 'opcode' => 45, + 'func' => 0, + 'types' => 'r' + }, + 'jumpnz' => { + 'result' => undef, + 'parms' => 1, + 'opcode' => 42, + 'func' => 0, + 'types' => 'r' + }, + 'addp' => { + 'result' => 'p', + 'parms' => 2, + 'opcode' => 8, + 'func' => 0, + 'types' => 'pp' + }, + 'int' => { + 'result' => 'r', + 'parms' => 1, + 'opcode' => 26, + 'func' => 1, + 'types' => 'r' + }, + 'op_count' => { + 'result' => undef, + 'parms' => 0, + 'opcode' => 46, + 'func' => 0, + 'types' => '' + }, + 'or' => { + 'result' => 'r', + 'parms' => 2, + 'opcode' => 36, + 'func' => 0, + 'types' => 'rr' + }, + 'jumpz' => { + 'result' => undef, + 'parms' => 1, + 'opcode' => 41, + 'func' => 0, + 'types' => 'r' + }, + 'add' => { + 'result' => 'r', + 'parms' => 2, + 'opcode' => 0, + 'func' => 0, + 'types' => 'rr' + }, + 'subtract' => { + 'result' => 'r', + 'parms' => 2, + 'opcode' => 1, + 'func' => 0, + 'types' => 'rr' + }, + 'ret' => { + 'result' => undef, + 'parms' => 1, + 'opcode' => 39, + 'func' => 0, + 'types' => 'p' + }, + 'hsv' => { + 'result' => 'p', + 'parms' => 3, + 'opcode' => 21, + 'func' => 1, + 'types' => 'rrr' + }, + 'uminus' => { + 'result' => 'r', + 'parms' => 1, + 'opcode' => 6, + 'func' => 0, + 'types' => 'r' + } + ); +$MaxOperands = 4; +$PackCode = "i"; +1; + +__END__ + +=head1 NAME + +Imager::Regops - generated information about the register based VM + +=head1 SYNOPSIS + + use Imager::Regops; + $Imager::Regops::Attr{$opname}->{opcode} # opcode for given operator + $Imager::Regops::Attr{$opname}->{parms} # number of parameters + $Imager::Regops::Attr{$opname}->{types} # types of parameters + $Imager::Regops::Attr{$opname}->{func} # operator is a function + $Imager::Regops::Attr{$opname}->{result} # r for numeric, p for pixel result + $Imager::Regops::MaxOperands; # maximum number of operands + +=head1 DESCRIPTION + +This module is generated automatically from regmach.h so we don't need to +maintain the same information in at least one extra place. + +At least that's the idea. + +=head1 AUTHOR + +Tony Cook, tony@develop-help.com + +=head1 SEE ALSO + +perl(1), Imager(3), http://www.eecs.umich.edu/~addi/perl/Imager/ + +=cut + diff --git a/lib/Imager/Transform.pm b/lib/Imager/Transform.pm new file mode 100644 index 00000000..3ccaeed0 --- /dev/null +++ b/lib/Imager/Transform.pm @@ -0,0 +1,519 @@ +package Imager::Transform; +use strict; +use Imager; +use Imager::Expr::Assem; + +my %funcs = + ( + mandel=> + { + desc=>"Mandelbrot set", + type=>'assem', + assem=>< +# (nx*nx-ny*ny+x, 2.nx.ny+y) + var wx:n ; var wy:n ; var work:n + wx = mult nx nx + wy = mult ny ny + wx = subtract wx wy + ny = mult ny nx + ny = mult ny 2 + nx = wx + nx = add nx conx + ny = add ny cony + work = distance nx ny 0 0 + work = gt work 2 + jumpnz work docol + count = add count 1 + work = lt count maxcount + jumpnz work loop + jumpnz insideangle doinang + var workp:p + workp = rgb 0 0 0 + ret workp + doinang: + var ang:n + ang = atan2 ny nx + ang = mult ang 360 + ang = div ang pi + workp = hsv ang 255 0.5 + ret workp + docol: + var outvalue:n + outvalue = mult outsidevaluestep count + outvalue = add outvalue outsidevalue + outvalue = mod outvalue 1.01 + jumpnz outsideangle do_outang + work = mult count huestep + work = add work huebase + work = mod work 360 + workp = hsv work 1 outvalue + ret workp + do_outang: + ang = atan2 ny nx + ang = mult ang 360 + ang = div ang pi + ang = add ang outsidebase + workp = hsv ang outsidesat outvalue + ret workp +EOS + constants=> + { + minx=>{ default=>-2, desc=>'Left of rendered area', }, + miny=>{ default=>-1.5, desc=>'Top of rendered area', }, + maxx=>{ default=>1, desc=>'Right of rendered area', }, + maxy=>{ default=>1.5, desc=>'Bottom of rendered area', }, + maxcount=>{ default=>100, desc=>'Maximum iterations', }, + huestep=>{ default=>21.1, desc=>'Hue step for number of iterations', }, + huebase=>{ default=>0, desc=>'Base hue for number of iterations', }, + insideangle=> + { + default=>0, + desc=>'Non-zero to use angle of final as hue for inside', + }, + insidebase=> + { + default=>0, + desc=>'Base angle for inside colours if insideangle is non-zero', + }, + outsideangle=> + { + default=>0, + desc=>'Non-zero to use angle of final as hue for outside', + }, + outsidebase=> + { + default=>0, + desc=>'Base angle if outsideangle is true', + }, + outsidevalue=> + { + default=>1, + desc=>'Brightness for outside pixels', + }, + outsidevaluestep=> + { + default=>0, + desc=>'Brightness step for each count for outside pixels', + }, + outsidesat=> + { + default=>1, + desc=>'Saturation for outside pixels', + }, + }, + inputs=>[], + }, + julia=> + { + desc=>"Julia set", + type=>'assem', + assem=>< +# (nx*nx-ny*ny+x, 2.nx.ny+y) + var wx:n ; var wy:n ; var work:n + wx = mult nx nx + wy = mult ny ny + wx = subtract wx wy + ny = mult ny nx + ny = mult ny 2 + nx = wx + nx = add nx zx + ny = add ny zy + work = distance nx ny 0 0 + work = gt work 2 + jumpnz work docol + count = add count 1 + work = lt count maxcount + jumpnz work loop + jumpnz insideangle doinang + var workp:p + workp = rgb 0 0 0 + ret workp + doinang: + var ang:n + ang = atan2 ny nx + ang = mult ang 360 + ang = div ang pi + workp = hsv ang 255 0.5 + ret workp + docol: + var outvalue:n + outvalue = mult outsidevaluestep count + outvalue = add outvalue outsidevalue + outvalue = mod outvalue 1.01 + jumpnz outsideangle do_outang + work = mult count huestep + work = add work huebase + work = mod work 360 + workp = hsv work 1 outvalue + ret workp + do_outang: + ang = atan2 ny nx + ang = mult ang 360 + ang = div ang pi + ang = add ang outsidebase + workp = hsv ang outsidesat outvalue + ret workp +EOS + constants=> + { + zx=>{default=>0.7, desc=>'Real part of initial Z', }, + zy=>{default=>0.2, desc=>'Imaginary part of initial Z', }, + minx=>{ default=>-1.5, desc=>'Left of rendered area', }, + miny=>{ default=>-1.5, desc=>'Top of rendered area', }, + maxx=>{ default=>1.5, desc=>'Right of rendered area', }, + maxy=>{ default=>1.5, desc=>'Bottom of rendered area', }, + maxcount=>{ default=>100, desc=>'Maximum iterations', }, + huestep=>{ default=>21.1, desc=>'Hue step for number of iterations', }, + huebase=>{ default=>0, desc=>'Base hue for number of iterations', }, + insideangle=> + { + default=>0, + desc=>'Non-zero to use angle of final as hue for inside', + }, + insidebase=> + { + default=>0, + desc=>'Base angle for inside colours if insideangle is non-zero', + }, + outsideangle=> + { + default=>0, + desc=>'Non-zero to use angle of final as hue for outside', + }, + outsidebase=> + { + default=>0, + desc=>'Base angle if outsideangle is true', + }, + outsidevalue=> + { + default=>1, + desc=>'Brightness for outside pixels', + }, + outsidevaluestep=> + { + default=>0, + desc=>'Brightness step for each count for outside pixels', + }, + outsidesat=> + { + default=>1, + desc=>'Saturation for outside pixels', + }, + }, + inputs=>[], + }, + circleripple=> + { + type=>'rpnexpr', + rpnexpr=><<'EOS', +x y cx cy distance !dist +@dist freq / sin !scale +@scale depth * @dist + !adj +y cy - x cx - atan2 !ang +cx @ang cos @adj * + cy @ang sin @adj * + getp1 @scale shadow + shadow 1 + / * +EOS + constants=> + { + freq=> { desc=>'Frequency of ripples', default=>5 }, + depth=> { desc=>'Depth of ripples', default=>10 }, + shadow=> { desc=>'Fraction of shadow', default=>20 }, + }, + inputs=> + [ + { desc=>'Image to ripple' } + ], + }, + spiral=> + { + type=>'rpnexpr', + rpnexpr=><<'EOS', +x y cx cy distance !d y cy - x cx - atan2 !a +@d spacing / @a + pi 2 * % !a2 +@a 180 * pi / 1 @a2 sin 1 + 2 / hsv +EOS + constants=> + { + spacing=>{ desc=>'Spacing between arms', default=>10 }, + }, + inputs=>[], + }, + diagripple=> + { + type=>'rpnexpr', + desc=>'Adds diagonal ripples to an image', + rpnexpr=><<'EOS', +x y + !dist @dist freq / sin !scale +@scale depth * !adj + x @adj + y @adj + getp1 @scale shadow + shadow 1 + / * +EOS + constants=> + { + freq=>{ desc=>'Frequency of ripples', default=>5, }, + depth=>{desc=>'Depth of ripples', default=>3,}, + shadow=> + { + desc=>'Fraction of brightness to remove for shadows', + default=>20, + }, + }, + inputs=> + [ + { desc=>'Image to add ripples to' } + ], + }, + twist=> + { + type=>'rpnexpr', + desc=>'Twist an image', + rpnexpr=><<'EOS', +x y cx cy distance !dist + y cy - x cx - atan2 @dist twist / + !ang +cx @ang cos @dist * + cy @ang sin @dist * + getp1 +EOS + constants=> + { + twist=>{ desc=>'Amount of twist', default=>2.5, }, + }, + inputs=> + [ + { desc=>'Image to twist' }, + ], + }, + # any other functions can wait until Imager::Expr::Infix supports + # jumps + ); + +sub new { + my ($class, $name) = @_; + + exists $funcs{$name} or return; + + bless { func=>$funcs{$name}, name=>$name }, $class; +} + +sub inputs { + my ($self) = @_; + return @{$self->{func}{inputs}} +} + +sub constants { + my $self = shift; + if (@_) { + return @{$self->{func}{constants}}{@_}; + } + else { + return keys %{$self->{func}{constants}}; + } +} + +sub transform { + my ($self, $opts, $constants, @in) = @_; + + my $func = $self->{func}; + my %opts = %$opts; + $opts{$func->{type}} = $func->{$func->{type}}; + my %con = %$constants; + for my $name (keys %{$func->{constants}}) { + unless (exists $con{$name}) { + if (exists $func->{constants}{$name}{default}) { + $con{$name} = $func->{constants}{$name}{default}; + } + else { + $self->{error} = "No value or default for constant $name"; + return; + } + } + } + $opts{constants} = \%con; + unless (@in == @{$func->{inputs}}) { + $self->{error} = @in." input images given, ". + @{$func->{inputs}}." supplied"; + return; + } + + my $out = Imager::transform2(\%opts, @in); + unless ($out) { + $self->{error} = $Imager::ERRSTR; + return; + } + return $out; +} + +sub errstr { + return $_[0]{error}; +} + +sub list { + return keys %funcs; +} + +sub describe { + my ($class, $name) = @_; + + my $func; + if (ref $class && !$name) { + $func = $class->{func}; + $name = $class->{name} + } + else { + $func = $funcs{$name} + or return undef; + } + my $desc = <{desc} +EOS + if ($func->{inputs} && @{$func->{inputs}}) { + $desc .= "Input images:\n"; + my $i = 1; + for my $in (@{$func->{inputs}}) { + $desc .= " $i: $in->{desc}\n"; + } + } + else { + $desc .= "There are no input images\n"; + } + if ($func->{constants} && keys %{$func->{constants}}) { + $desc .= "Input constants:\n"; + for my $key (keys %{$func->{constants}}) { + $desc .= " $key: $func->{constants}{$key}{desc}\n"; + $desc .= " Default: $func->{constants}{$key}{default}\n"; + } + } + else { + $desc .= "There are no constants\n"; + } + + return $desc; +} + + +1; + +__END__ + +=head1 NAME + + Imager::Transform - a library of register machine image transformations + +=head1 SYNOPSIS + + # get a list of transformations + my @funcs = Imager::Transform->list; + # create a transformation object + my $tran = Imager::Transform->new($name); + # describe it + print $tran->describe; + # a list of constant names + my @constants = $tran->constants; + # information about some of the constants + my @info = $tran->constants(@constants); + +=head1 DESCRIPTION + +This module provides a library of transformations that use the Imager +transform2() function. + +The aim is to provide a place to collect these transformations. + +At some point there might be an interface to add new functions, but +there's not a whole lot of point to that. + +The interface is a little sparse as yet. + +=head1 METHODS + +=over 4 + +=item my @names = Imager::Transform->list + +Returns a list of the transformations. + +=item my $desc = Imager::Transform->describe($name); + +=item my $desc = $tran->describe() + +Describes a transformation specified either by name (as a class +method) or by reference (as an instance method). + +The class method returns undef if there is no such transformation. + +=item my $tran = Imager::Transform->new($name) + +Create a new transformation object. Returns undef if there is no such +transformation. + +=item my @inputs = $tran->inputs; + +=item my $inputs = $tran->inputs; + +Returns a list of input image descriptions, or the number of them, +depending on content. + +The list contains hashrefs, which current contain only one member, +desc, a description of the use of the image. + +=item my $out = $tran->transform(\%opts, \%constants, @imgs) + +Perform the image transformation. + +Returns the new image on success, or undef on failure, in which case +you can use $tran->errstr to get an error message. + +=item $tran->errstr + +The error message, if any from the last image transformation. + +=back + +=head1 BUGS + +Needs more transformations. + +=head1 SEE ALSO + +Imager(3), transform.perl + +=cut diff --git a/lib/Imager/regmach.pod b/lib/Imager/regmach.pod new file mode 100644 index 00000000..844742d6 --- /dev/null +++ b/lib/Imager/regmach.pod @@ -0,0 +1,103 @@ +=head1 NAME + +Imager::regmach - documents the register virtual machine used by +Imager::transform2(). + +=head1 SYNOPSIS + +The register machine is a complete rewrite of the stack machine +orginally used by Imager::transform(), written for use by +Imager::transform2(). + +=head1 DESCRIPTION + +(This document might be a little incoherent.) + +The register machine is a fast implementation of a small instruction +set designed for evaluating an arithmetic expression to produce a +colour for an image. + +The machine takes as input: + +=over 4 + +=item instructions + +An array of instructions + +=item numeric registers + +An array of numeric registers. Some registers are initialized as +literals. + +=item colour registers + +An array of colour registers. Currently these registers aren't +initialized. + +=item input images + +An array of Imager i_img pointers. The getpn operators read pixels +from these images. + +=back + +The instructions supplied each take up to 4 input numeric or colour +registers with a single output numeric or colour register. The +machine attempts to execute instructions as safely as possible, +assuming that correct instructions have been provided, eg. the machine +protects against divide by zero, but doesn't check register numbers +for validity. + +The final instruction must be a 'ret' instruction, which returns the +result ;) + +=head2 Adding new instructions + +To add a new instruction: + +=over 4 + +=item 1 + +Add a new opcode to the enumeration in regmach.h - make sure to add +comment after the enum name giving the input registers (rX for +numeric, pX for colour) that the instruction takes. These must be in +the order that the instruction expects to take the. Put a letter (r +or p) after -> to indicate the result type. + +=item 2 + +Add a case to regmach.c that executes the instruction. + +=item 3 + +make + +=back + +The makefile should rebuild the Regops.pm file, and your new +instruction will be added as a function. + +If you want to add a single alternative instruction that might take +different argument types (it must take the same number of parameters), +create another instruction with that name followed by a p. The +current expression parsers explicitly look for such instruction names. + +=head2 Future directions + +Conditional and non-conditional jumps to implement iteration. This +will break the current optimizer in L (and the compilers +for both expression compilers, for that matter.) + +Complex arithmetic (Addi suggested this one). This would most likely +be a separate machine. Otherwise we'll have a very significant +performance loss. + +=head1 WARNINGS + +If you feed bad 'machine code' to the register machine, you have a +good chance of a SIGSEGV. + +=cut + diff --git a/log.c b/log.c new file mode 100644 index 00000000..979c3a9b --- /dev/null +++ b/log.c @@ -0,0 +1,95 @@ +#include "log.h" + +#define DTBUFF 50 +#define DATABUFF DTBUFF+3+10+1+5+1+1 + +static int log_level = 0; +static FILE *lg_file = NULL; +static char *date_format = "%Y/%m/%d %H:%M:%S"; +static char date_buffer[DTBUFF]; +static char data_buffer[DATABUFF]; + + +#ifdef IMAGER_LOG + +/* + * Logging is active + */ + +void +init_log(const char* name,int level) { + log_level = level; + if (level < 0) { + lg_file = NULL; + } else { + if (name == NULL) { + lg_file = stderr; + } else { + if (NULL == (lg_file = fopen(name, "w+")) ) { + fprintf(stderr,"Cannot open file '%s'\n",name); + exit(2); + } + } + } + mm_log((0,"Imager - log started (level = %d)\n", level)); +} + +void +m_fatal(int exitcode,const char *fmt, ... ) { + va_list ap; + time_t timi; + struct tm *str_tm; + + if (lg_file != NULL) { + timi = time(NULL); + str_tm = localtime(&timi); + if ( strftime(date_buffer, DTBUFF, date_format, str_tm) ) + fprintf(lg_file,"[%s] ",date_buffer); + va_start(ap,fmt); + vfprintf(lg_file,fmt,ap); + va_end(ap); + } + exit(exitcode); +} + +#else + +/* + * Logging is inactive - insert dummy functions + + +void init_log(const char* name,int onoff) {} +void m_fatal(int exitcode,const char *fmt, ... ) { return(exitcode); } + +*/ + +#endif + + +void +m_loog(int level,const char *fmt, ... ) { + va_list ap; + if (level > log_level) return; + if (lg_file != NULL) { + fputs(data_buffer, lg_file); + fprintf(lg_file, "%3d: ",level); + va_start(ap,fmt); + vfprintf(lg_file, fmt, ap); + fflush(lg_file); + va_end(ap); + } +} + + +void +m_lhead(const char *file, int line) { + time_t timi; + struct tm *str_tm; + + if (lg_file != NULL) { + timi = time(NULL); + str_tm = localtime(&timi); + strftime(date_buffer, DTBUFF, date_format, str_tm); + sprintf(data_buffer, "[%s] %10s:%-5d ", date_buffer, file, line); + } +} diff --git a/log.h b/log.h new file mode 100644 index 00000000..cd8b1213 --- /dev/null +++ b/log.h @@ -0,0 +1,26 @@ +#ifndef _LOG_H_ +#define _LOG_H_ + +#include +#include +#include +/* + input: name of file to log too + input: onoff, 0 means no logging + global: creates a global variable FILE* lg_file +*/ + +void m_lhead ( const char *file, int line ); +void init_log( const char *name, int onoff ); +void m_loog(int level,const char *msg, ... ); +void m_fatal ( int exitcode,const char *fmt, ... ); + + +#ifdef IMAGER_LOG +#define mm_log(x) { m_lhead(__FILE__,__LINE__); m_loog x; } +#else +#define mm_log(x) +#endif + + +#endif /* _LOG_H_ */ diff --git a/plug.h b/plug.h new file mode 100644 index 00000000..6eaffd62 --- /dev/null +++ b/plug.h @@ -0,0 +1,38 @@ +#include "image.h" + +/* structures for passing data between Imager-plugin and the Imager-module */ + +#include "ext.h" + + +#define getINT(k,s) (util_table->getint(INP,k,s)) +#define getDOUBLE(k,s) (util_table->getdouble(INP,k,s)) +#define getVOID(k,s) (util_table->getvoid(INP,k,(void**)s)) +#define getSTR(k,s) (util_table->getstr(INP,k,(char**)s)) +#define getOBJ(k,t,s) (util_table->getobj(INP,k,t,(void**)s)) + +#define i_color_set(cl,r,g,b,a) (symbol_table->i_color_set(cl,r,g,b,a)) +#define i_color_info(cl) (symbol_table->i_color_info(cl)) + +#define i_img_new() (symbol_table->i_img_new()) +#define i_img_empty(im,x,y) ((symbol_table->i_img_empty(im,x,y)) +#define i_img_empty_ch(im,x,y,ch) ((symbol_table->i_img_empty_ch(im,x,y,ch)) +#define i_img_exorcise(im) (symbol_table->i_img_exorcise(im)) +#define i_img_info(im,info) (symbol_table->i_img_info(im,info)) + +#define i_img_setmask(im,ch_mask) (symbol_table->i_img_setmask(im,ch_mask)) +#define i_img_getmask(im) (symbol_table->i_img_getmask(im)) + +#define i_ppix(im,x,y,val) (symbol_table->i_ppix(im,x,y,val)) +#define i_gpix(im,x,y,val) (symbol_table->i_gpix(im,x,y,val)) + +#define i_box(im, x1, y1, x2, y2,val) (symbol_table->i_box(im, x1, y1, x2, y2,val)) +#define i_draw(im, x1, y1, x2, y2,val) (symbol_table->i_draw(im, x1, y1, x2, y2,val)) +#define i_arc(im, x, y, rad, d1, d2,val) (symbol_table->i_arc(im, x, y, rad, d1, d2,val)) +#define i_copyto(im,src, x1, y1, x2, y2, tx, ty,trans) (symbol_table->i_copyto(im,src, x1, y1, x2, y2, tx, ty,trans)) +#define i_rubthru(im,src, tx, ty) (symbol_table->i_rubthru(im,src, tx, ty)) + +#ifdef WIN32 +extern char __declspec(dllexport) evalstr[]; +extern func_ptr __declspec(dllexport) function_list[]; +#endif diff --git a/png.c b/png.c new file mode 100644 index 00000000..c6560043 --- /dev/null +++ b/png.c @@ -0,0 +1,484 @@ +#include "image.h" +#include "png.h" + +/* Check to see if a file is a PNG file using png_sig_cmp(). png_sig_cmp() + * returns zero if the image is a PNG and nonzero if it isn't a PNG. + * + * The function check_if_png() shown here, but not used, returns nonzero (true) + * if the file can be opened and is a PNG, 0 (false) otherwise. + * + * If this call is successful, and you are going to keep the file open, + * you should call png_set_sig_bytes(png_ptr, PNG_BYTES_TO_CHECK); once + * you have created the png_ptr, so that libpng knows your application + * has read that many bytes from the start of the file. Make sure you + * don't call png_set_sig_bytes() with more than 8 bytes read or give it + * an incorrect number of bytes read, or you will either have read too + * many bytes (your fault), or you are telling libpng to read the wrong + * number of magic bytes (also your fault). + * + * Many applications already read the first 2 or 4 bytes from the start + * of the image to determine the file type, so it would be easiest just + * to pass the bytes to png_sig_cmp() or even skip that if you know + * you have a PNG file, and call png_set_sig_bytes(). + */ + +/* this is a way to get number of channels from color space + * Color code to channel number */ + +int CC2C[PNG_COLOR_MASK_PALETTE|PNG_COLOR_MASK_COLOR|PNG_COLOR_MASK_ALPHA]; + +#define PNG_BYTES_TO_CHECK 4 + + + + + + + + + +/* +png_set_read_fn(png_structp read_ptr, voidp read_io_ptr, png_rw_ptr read_data_fn) +png_set_write_fn(png_structp write_ptr, voidp write_io_ptr, png_rw_ptr write_data_fn, +png_flush_ptr output_flush_fn); +voidp read_io_ptr = png_get_io_ptr(read_ptr); +voidp write_io_ptr = png_get_io_ptr(write_ptr); +*/ + +struct png_scalar_info { + char *data; + int length; + int cpos; +}; + + +struct png_wiol_info { + io_glue *cp; + int length; + int cpos; +}; + +static void +user_read_data(png_structp png_ptr,png_bytep data, png_size_t length) { + struct png_scalar_info *sci=(struct png_scalar_info *)png_ptr->io_ptr; + + /* fprintf(stderr,"user_read_data: cpos %d/%d (%d)\n",sci->cpos,sci->length,length); */ + + if (sci->cpos+(ssize_t)length > sci->length ) { png_error(png_ptr, "Read overflow error on a scalar."); } + + memcpy(data, sci->data+sci->cpos , length); + sci->cpos+=length; +} + +/* +static void +user_write_data(png_structp png_ptr, png_bytep data, png_uint_32 length) { + FIXME: implement these +} + +static void +user_flush_data(png_structp png_ptr) { + FIXME: implement these +} +*/ + + +void +scalar_png_init_io(png_structp png_ptr,struct png_scalar_info *sci) { + png_ptr->io_ptr = (png_voidp)sci; +} + + + + + + +int +check_if_png(char *file_name, FILE **fp) { + char buf[PNG_BYTES_TO_CHECK]; + + /* Open the prospective PNG file. */ + if ((*fp = fopen(file_name, "rb")) != NULL) return 0; + + /* Read in some of the signature bytes */ + if (fread(buf, 1, PNG_BYTES_TO_CHECK, *fp) != PNG_BYTES_TO_CHECK) return 0; + + /* Compare the first PNG_BYTES_TO_CHECK bytes of the signature. + Return nonzero (true) if they match */ + + return(!png_sig_cmp((png_bytep)buf, (png_size_t)0, PNG_BYTES_TO_CHECK)); +} + +/* Read a PNG file. You may want to return an error code if the read + * fails (depending upon the failure). There are two "prototypes" given + * here - one where we are given the filename, and we need to open the + * file, and the other where we are given an open file (possibly with + * some or all of the magic bytes read - see comments above). + */ + +i_img * +i_readpng(int fd) { + i_img *im; + png_structp png_ptr; + png_infop info_ptr; + png_uint_32 width, height, y; + int bit_depth, color_type, interlace_type; + int number_passes; + int channels, pass; + + FILE *fp; + unsigned int sig_read; + + sig_read=0; + + if ((fp = fdopen(fd,"r")) == NULL) { + mm_log((1,"can't fdopen.\n")); + exit(1); + } + + mm_log((1,"i_readpng(fd %d)\n",fd)); + + png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL); + + if (png_ptr == NULL) { + fclose(fp); + return 0; + } + + /* Allocate/initialize the memory for image information. REQUIRED. */ + info_ptr = png_create_info_struct(png_ptr); + if (info_ptr == NULL) { + fclose(fp); + png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); + return 0; + } + + /* Set error handling if you are using the setjmp/longjmp method (this is + * the normal method of doing things with libpng). REQUIRED unless you + * set up your own error handlers in the png_create_read_struct() earlier. + */ + + if (setjmp(png_ptr->jmpbuf)) { + /* Free all of the memory associated with the png_ptr and info_ptr */ + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + fclose(fp); + /* If we get here, we had a problem reading the file */ + return NULL; + } + + /* Set up the input control if you are using standard C streams */ + png_init_io(png_ptr, fp); + /* If we have already read some of the signature */ + png_set_sig_bytes(png_ptr, sig_read); + + /* The call to png_read_info() gives us all of the information from the + * PNG file before the first IDAT (image data chunk). REQUIRED + */ + + png_read_info(png_ptr, info_ptr); + png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, + &interlace_type, NULL, NULL); + + mm_log((1, + "png_get_IHDR results: width %d, height %d, bit_depth %d,color_type %d,interlace_type %d\n", + width,height,bit_depth,color_type,interlace_type)); + + CC2C[PNG_COLOR_TYPE_GRAY]=1; + CC2C[PNG_COLOR_TYPE_PALETTE]=3; + CC2C[PNG_COLOR_TYPE_RGB]=3; + CC2C[PNG_COLOR_TYPE_RGB_ALPHA]=4; + CC2C[PNG_COLOR_TYPE_GRAY_ALPHA]=2; + + channels=CC2C[color_type]; + + mm_log((1,"channels %d\n",channels)); + + im=i_img_empty_ch(NULL,width,height,channels); + + /**** Set up the data transformations you want. Note that these are all + **** optional. Only call them if you want/need them. Many of the + **** transformations only work on specific types of images, and many + **** are mutually exclusive. + ****/ + + /* tell libpng to strip 16 bit/color files down to 8 bits/color */ + png_set_strip_16(png_ptr); + + /* Strip alpha bytes from the input data without combining with the + * background (not recommended). + */ + /* png_set_strip_alpha(png_ptr); */ + + /* Extract multiple pixels with bit depths of 1, 2, and 4 from a single + * byte into separate bytes (useful for paletted and grayscale images). + */ + + png_set_packing(png_ptr); + + /* Expand paletted colors into true RGB triplets */ + if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_expand(png_ptr); + + /* Expand grayscale images to the full 8 bits from 1, 2, or 4 bits/pixel */ + if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_expand(png_ptr); + + /* Expand paletted or RGB images with transparency to full alpha channels + * so the data will be available as RGBA quartets. + */ + if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) png_set_expand(png_ptr); + + number_passes = png_set_interlace_handling(png_ptr); + + mm_log((1,"number of passes=%d\n",number_passes)); + + png_read_update_info(png_ptr, info_ptr); + for (pass = 0; pass < number_passes; pass++) + for (y = 0; y < height; y++) { png_read_row(png_ptr,(png_bytep) &(im->data[channels*width*y]), NULL); } + /* read rest of file, and get additional chunks in info_ptr - REQUIRED */ + + png_read_end(png_ptr, info_ptr); + /* clean up after the read, and free any memory allocated - REQUIRED */ + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + + fclose(fp); + return im; +} + + + + +undef_int +i_writepng(i_img *im,int fd) { + FILE *fp; + png_structp png_ptr; + png_infop info_ptr; + int width,height,y; + volatile int cspace,channels; + + mm_log((1,"i_writepng(0x%x,fd %d)\n",im,fd)); + + if ((fp = fdopen(fd,"w")) == NULL) { + mm_log((1,"can't fdopen.\n")); + exit(1); + } + + height=im->ysize; + width=im->xsize; + + channels=im->channels; + + if (channels>2) { cspace=PNG_COLOR_TYPE_RGB; channels-=3; } + else { cspace=PNG_COLOR_TYPE_GRAY; channels--; } + + if (channels) cspace|=PNG_COLOR_MASK_ALPHA; + mm_log((1,"cspace=%d\n",cspace)); + + channels=im->channels; + + /* Create and initialize the png_struct with the desired error handler + * functions. If you want to use the default stderr and longjump method, + * you can supply NULL for the last three parameters. We also check that + * the library version is compatible with the one used at compile time, + * in case we are using dynamically linked libraries. REQUIRED. + */ + + png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL); + + if (png_ptr == NULL) { + fclose(fp); + return 0; + } + + /* Allocate/initialize the image information data. REQUIRED */ + info_ptr = png_create_info_struct(png_ptr); + + if (info_ptr == NULL) { + fclose(fp); + png_destroy_write_struct(&png_ptr, (png_infopp)NULL); + return(0); + } + + /* Set error handling. REQUIRED if you aren't supplying your own + * error hadnling functions in the png_create_write_struct() call. + */ + if (setjmp(png_ptr->jmpbuf)) { + /* If we get here, we had a problem reading the file */ + fclose(fp); + png_destroy_write_struct(&png_ptr, (png_infopp)NULL); + return(0); + } + + png_init_io(png_ptr, fp); + + /* Set the image information here. Width and height are up to 2^31, + * bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on + * the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY, + * PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB, + * or PNG_COLOR_TYPE_RGB_ALPHA. interlace is either PNG_INTERLACE_NONE or + * PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST + * currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE. REQUIRED + */ + + png_set_IHDR(png_ptr, info_ptr, width, height, 8, cspace, + PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); + + png_write_info(png_ptr, info_ptr); + for (y = 0; y < height; y++) png_write_row(png_ptr, (png_bytep) &(im->data[channels*width*y])); + png_write_end(png_ptr, info_ptr); + png_destroy_write_struct(&png_ptr, (png_infopp)NULL); + + fclose(fp); + return(1); +} + + + + +i_img* +i_readpng_scalar(char *data, int length) { + i_img *im; + png_structp png_ptr; + png_infop info_ptr; + png_uint_32 width, height, y; + int bit_depth, color_type, interlace_type; + int number_passes; + int channels, pass; + unsigned int sig_read; + + struct png_scalar_info sci; + + sci.data=data; + sci.length=length; + sci.cpos=0; + + sig_read=0; + mm_log((1,"i_readpng_scalar(char 0x%08X, length %d)\n",data,length)); + + png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL); + png_set_read_fn(png_ptr, (void*) (&sci), user_read_data); + + info_ptr = png_create_info_struct(png_ptr); + if (info_ptr == NULL) { + png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); + return NULL; + } + + if (setjmp(png_ptr->jmpbuf)) { + mm_log((1,"i_readpng_scalar: error.\n")); + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + return NULL; + } + + scalar_png_init_io(png_ptr, &sci); + png_set_sig_bytes(png_ptr, sig_read); + png_read_info(png_ptr, info_ptr); + png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL); + + mm_log((1, + "png_get_IHDR results: width %d, height %d, bit_depth %d,color_type %d,interlace_type %d\n", + width,height,bit_depth,color_type,interlace_type)); + + CC2C[PNG_COLOR_TYPE_GRAY]=1; + CC2C[PNG_COLOR_TYPE_PALETTE]=3; + CC2C[PNG_COLOR_TYPE_RGB]=3; + CC2C[PNG_COLOR_TYPE_RGB_ALPHA]=4; + CC2C[PNG_COLOR_TYPE_GRAY_ALPHA]=2; + channels=CC2C[color_type]; + mm_log((1,"channels %d\n",channels)); + im=i_img_empty_ch(NULL,width,height,channels); + png_set_strip_16(png_ptr); + png_set_packing(png_ptr); + if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_expand(png_ptr); + if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_expand(png_ptr); + if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) png_set_expand(png_ptr); + number_passes = png_set_interlace_handling(png_ptr); + mm_log((1,"number of passes=%d\n",number_passes)); + png_read_update_info(png_ptr, info_ptr); + mm_log((1,"made it to here 1\n")); + for (pass = 0; pass < number_passes; pass++) + for (y = 0; y < height; y++) { png_read_row(png_ptr,(png_bytep) &(im->data[channels*width*y]), NULL); } + mm_log((1,"made it to here 2\n")); + png_read_end(png_ptr, info_ptr); + mm_log((1,"made it to here 3\n")); + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + mm_log((1,"made it to here 4\n")); + mm_log((1,"(0x%08X) <- i_readpng_scalar\n",im)); + return im; +} + + + + +/* i_img* */ +/* i_readpng_wiol(io_glue *ig, int length) { */ +/* i_img *im; */ +/* png_structp png_ptr; */ +/* png_infop info_ptr; */ +/* png_uint_32 width, height; */ +/* int bit_depth, color_type, interlace_type; */ +/* int number_passes,y; */ +/* int channels,pass; */ +/* unsigned int sig_read; */ + +/* struct png_wiol_info wi; */ + +/* wi.data = ig; */ +/* wi.length = length; */ +/* wi.cpos = 0; */ + +/* sig_read=0; */ +/* mm_log((1,"i_readpng_wiol(char 0x%p, length %d)\n", data, length)); */ + +/* png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL); */ +/* png_set_read_fn(png_ptr, (void*) (&wi), user_read_data); */ + +/* info_ptr = png_create_info_struct(png_ptr); */ +/* if (info_ptr == NULL) { */ +/* png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); */ +/* return NULL; */ +/* } */ + +/* if (setjmp(png_ptr->jmpbuf)) { */ +/* mm_log((1,"i_readpng_wiol: error.\n")); */ +/* png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); */ +/* return NULL; */ +/* } */ + +/* scalar_png_init_io(png_ptr, &sci); */ +/* png_set_sig_bytes(png_ptr, sig_read); */ +/* png_read_info(png_ptr, info_ptr); */ +/* png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL); */ + +/* mm_log((1, */ +/* "png_get_IHDR results: width %d, height %d, bit_depth %d,color_type %d,interlace_type %d\n", */ +/* width,height,bit_depth,color_type,interlace_type)); */ + +/* CC2C[PNG_COLOR_TYPE_GRAY]=1; */ +/* CC2C[PNG_COLOR_TYPE_PALETTE]=3; */ +/* CC2C[PNG_COLOR_TYPE_RGB]=3; */ +/* CC2C[PNG_COLOR_TYPE_RGB_ALPHA]=4; */ +/* CC2C[PNG_COLOR_TYPE_GRAY_ALPHA]=2; */ +/* channels = CC2C[color_type]; */ + +/* mm_log((1,"i_readpng_wiol: channels %d\n",channels)); */ + +/* im = i_img_empty_ch(NULL,width,height,channels); */ +/* png_set_strip_16(png_ptr); */ +/* png_set_packing(png_ptr); */ +/* if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_expand(png_ptr); */ +/* if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_expand(png_ptr); */ +/* if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) png_set_expand(png_ptr); */ +/* number_passes = png_set_interlace_handling(png_ptr); */ +/* mm_log((1,"number of passes=%d\n",number_passes)); */ +/* png_read_update_info(png_ptr, info_ptr); */ +/* mm_log((1,"made it to here 1\n")); */ +/* for (pass = 0; pass < number_passes; pass++) */ +/* for (y = 0; y < height; y++) { png_read_row(png_ptr,(png_bytep) &(im->data[channels*width*y]), NULL); } */ +/* mm_log((1,"made it to here 2\n")); */ +/* png_read_end(png_ptr, info_ptr); */ +/* mm_log((1,"made it to here 3\n")); */ +/* png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); */ +/* mm_log((1,"made it to here 4\n")); */ +/* mm_log((1,"(0x%08X) <- i_readpng_scalar\n",im)); */ + +/* return im; */ +/* } */ diff --git a/pnm.c b/pnm.c new file mode 100644 index 00000000..b7796a67 --- /dev/null +++ b/pnm.c @@ -0,0 +1,417 @@ +#include "image.h" +#include "io.h" +#include "log.h" + +#include + + +/* +=head1 NAME + +pnm.c - implements reading and writing ppm/pnm/pbm files, uses io layer. + +=head1 SYNOPSIS + + io_glue *ig = io_new_fd( fd ); + i_img *im = i_readpnm_wiol(ig, -1); // no limit on how much is read + // or + io_glue *ig = io_new_fd( fd ); + return_code = i_writepnm_wiol(im, ig); + +=head1 DESCRIPTION + +pnm.c implements the basic functions to read and write portable +anymap files. It uses the iolayer and needs either a seekable source +or an entire memory mapped buffer. + +=head1 FUNCTION REFERENCE + +Some of these functions are internal. + +=over 4 + +=cut +*/ + + +#define BSIZ 1024 +#define misspace(x) (x==' ' || x=='\n' || x=='\r' || x=='\t' || x=='\f' || x=='\v') +#define misnumber(x) (x <= '9' && x>='0') + +static char *typenames[]={"ascii pbm", "ascii pgm", "ascii ppm", "binary pbm", "binary pgm", "binary ppm"}; + +/* + * Type to encapsulate the local buffer + * management skipping over in a file + */ + +typedef struct { + io_glue *ig; + int len; + int cp; + char buf[BSIZ]; +} mbuf; + + +static +void init_buf(mbuf *mb, io_glue *ig) { + mb->len = 0; + mb->cp = 0; + mb->ig = ig; +} + + + +/* +=item gnext(mbuf *mb) + +Fetches a character and advances in stream by one character. +Returns a pointer to the byte or NULL on failure (internal). + + mb - buffer object + +=cut +*/ + +static +char * +gnext(mbuf *mb) { + io_glue *ig = mb->ig; + if (mb->cp == mb->len) { + mb->cp = 0; + mb->len = ig->readcb(ig, mb->buf, BSIZ); + if (mb->len == -1) { + mm_log((1, "i_readpnm: read error\n")); + return NULL; + } + if (mb->len == 0) { + mm_log((1, "i_readpnm: end of file\n")); + return NULL; + } + } + return &mb->buf[mb->cp++]; +} + + +/* +=item gnext(mbuf *mb) + +Fetches a character but does NOT advance. Returns a pointer to +the byte or NULL on failure (internal). + + mb - buffer object + +=cut +*/ + +static +char * +gpeek(mbuf *mb) { + io_glue *ig = mb->ig; + if (mb->cp == mb->len) { + mb->cp = 0; + mb->len = ig->readcb(ig, mb->buf, BSIZ); + if (mb->len == -1) { + mm_log((1, "i_readpnm: read error\n")); + return NULL; + } + if (mb->len == 0) { + mm_log((1, "i_readpnm: end of file\n")); + return NULL; + } + } + return &mb->buf[mb->cp]; +} + + + + +/* +=item skip_spaces(mb) + +Advances in stream until it is positioned at a +non white space character. (internal) + + mb - buffer object + +=cut +*/ + +static +int +skip_spaces(mbuf *mb) { + char *cp; + while( (cp = gpeek(mb)) && misspace(*cp) ) if ( !gnext(mb) ) break; + if (!cp) return 0; + return 1; +} + + +/* +=item skip_spaces(mb) + +Advances in stream over whitespace and a comment if one is found. (internal) + + mb - buffer object + +=cut +*/ + +static +int +skip_comment(mbuf *mb) { + char *cp; + + if (!skip_spaces(mb)) return 0; + + if (!(cp = gpeek(mb))) return 0; + if (*cp == '#') { + while( (cp = gpeek(mb)) && (*cp != '\n' && *cp != '\r') ) { + if ( !gnext(mb) ) break; + } + } + if (!cp) return 0; + + return 1; +} + + +/* +=item gnum(mb, i) + +Fetches the next number from stream and stores in i, returns true +on success else false. + + mb - buffer object + i - integer to store result in + +=cut +*/ + +static +int +gnum(mbuf *mb, int *i) { + char *cp; + *i = 0; + + if (!skip_spaces(mb)) return 0; + + while( (cp = gpeek(mb)) && misnumber(*cp) ) { + *i = *i*10+(*cp-'0'); + cp = gnext(mb); + } + return 1; +} + + +/* +=item i_readpnm_wiol(ig, length) + +Retrieve an image and stores in the iolayer object. Returns NULL on fatal error. + + ig - io_glue object + length - maximum length to read from data source, before closing it -1 + signifies no limit. + +=cut +*/ + + +i_img * +i_readpnm_wiol(io_glue *ig, int length) { + i_img* im; + int type; + int x, y, ch; + int width, height, maxval, channels, pcount; + char *cp; + unsigned char *uc; + mbuf buf; + i_color val; + int mult; + + /* char *pp; */ + + mm_log((1,"i_readpnm(ig %p, length %d)\n", ig, length)); + + /* + pp = mymalloc(20); + + pp[-1]= 'c'; + pp[-2]= 'c'; + + bndcheck_all(); + + myfree(pp); + + mm_log((1, "Hack is exiting\n")); + +*/ + + io_glue_commit_types(ig); + init_buf(&buf, ig); + + cp = gnext(&buf); + + if (!cp || *cp != 'P') { + mm_log((1, "i_readpnm: Could not read header of file\n")); + return NULL; + } + + if ( !(cp = gnext(&buf)) ) { + mm_log((1, "i_readpnm: Could not read header of file\n")); + return NULL; + } + + type = *cp-'0'; + + if (type < 1 || type > 6) { + mm_log((1, "i_readpnm: Not a pnm file\n")); + return NULL; + } + + if ( !(cp = gnext(&buf)) ) { + mm_log((1, "i_readpnm: Could not read header of file\n")); + return NULL; + } + + if ( !misspace(*cp) ) { + mm_log((1, "i_readpnm: Not a pnm file\n")); + return NULL; + } + + mm_log((1, "i_readpnm: image is a %s\n", typenames[type-1] )); + + + /* Read sizes and such */ + + if (!skip_comment(&buf)) { + mm_log((1, "i_readpnm: error reading before width\n")); + return NULL; + } + + if (!gnum(&buf, &width)) { + mm_log((1, "i_readpnm: error reading width\n")); + return NULL; + } + + if (!skip_comment(&buf)) { + mm_log((1, "i_readpnm: error reading before height\n")); + return NULL; + } + + if (!gnum(&buf, &height)) { + mm_log((1, "i_readpnm: error reading height\n")); + return NULL; + } + + if (!(type == 1 || type == 4)) { + if (!skip_comment(&buf)) { + mm_log((1, "i_readpnm: error reading before maxval\n")); + return NULL; + } + + if (!gnum(&buf, &maxval)) { + mm_log((1, "i_readpnm: error reading maxval\n")); + return NULL; + } + } else maxval=1; + + if (!(cp = gnext(&buf)) || !misspace(*cp)) { + mm_log((1, "i_readpnm: garbage in header\n")); + return NULL; + } + + channels = (type == 3 || type == 6) ? 3:1; + pcount = width*height*channels; + + mm_log((1, "i_readpnm: (%d x %d), channels = %d, maxval = %d\n", width, height, channels, maxval)); + + im = i_img_empty_ch(NULL, width, height, channels); + + switch (type) { + case 1: /* Ascii types */ + case 2: + case 3: + mult = type == 1 ? 255 : 1; + for(y=0;y>xt)) ? 0 : 255; + i_ppix(im, x+xt, y, &val); + } + } else { + mm_log((1,"i_readpnm: gnext() returned false in data\n")); + return im; + } + } + break; + + case 5: /* binary pgm */ + case 6: /* binary ppm */ + for(y=0;ychannels!=3) { + mm_log((1,"i_writeppm: ppm is 3 channel only (current image is %d)\n",im->channels)); + return(0); + } + + sprintf(header,"P6\n#CREATOR: Imager\n%d %d\n255\n",im->xsize,im->ysize); + + if (mywrite(fd,header,strlen(header))<0) { + mm_log((1,"i_writeppm: unable to write ppm header.\n")); + return(0); + } + + rc=mywrite(fd,im->data,im->bytes); + if (rc<0) { + mm_log((1,"i_writeppm: unable to write ppm data.\n")); + return(0); + } + return(1); +} + + + + + + + diff --git a/ppport.h b/ppport.h new file mode 100644 index 00000000..8377602b --- /dev/null +++ b/ppport.h @@ -0,0 +1,286 @@ + +#ifndef _P_P_PORTABILITY_H_ +#define _P_P_PORTABILITY_H_ + +/* Perl/Pollution/Portability Version 1.0007 */ + +/* Copyright (C) 1999, Kenneth Albanowski. This code may be used and + distributed under the same license as any version of Perl. */ + +/* For the latest version of this code, please retreive the Devel::PPPort + module from CPAN, contact the author at , or check + with the Perl maintainers. */ + +/* If you needed to customize this file for your project, please mention + your changes, and visible alter the version number. */ + + +/* + In order for a Perl extension module to be as portable as possible + across differing versions of Perl itself, certain steps need to be taken. + Including this header is the first major one, then using dTHR is all the + appropriate places and using a PL_ prefix to refer to global Perl + variables is the second. +*/ + + +/* If you use one of a few functions that were not present in earlier + versions of Perl, please add a define before the inclusion of ppport.h + for a static include, or use the GLOBAL request in a single module to + produce a global definition that can be referenced from the other + modules. + + Function: Static define: Extern define: + newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL + +*/ + + +/* To verify whether ppport.h is needed for your module, and whether any + special defines should be used, ppport.h can be run through Perl to check + your source code. Simply say: + + perl -x ppport.h *.c *.h *.xs foo / *.c [etc] + + The result will be a list of patches suggesting changes that should at + least be acceptable, if not necessarily the most efficient solution, or a + fix for all possible problems. It won't catch where dTHR is needed, and + doesn't attempt to account for global macro or function definitions, + nested includes, typemaps, etc. + + In order to test for the need of dTHR, please try your module under a + recent version of Perl that has threading compiled-in. + +*/ + + +/* +#!/usr/bin/perl +@ARGV = ("*.xs") if !@ARGV; +%badmacros = %funcs = %macros = (); $replace = 0; +foreach () { + $funcs{$1} = 1 if /Provide:\s+(\S+)/; + $macros{$1} = 1 if /^#\s*define\s+([a-zA-Z0-9_]+)/; + $replace = $1 if /Replace:\s+(\d+)/; + $badmacros{$2}=$1 if $replace and /^#\s*define\s+([a-zA-Z0-9_]+).*?\s+([a-zA-Z0-9_]+)/; + $badmacros{$1}=$2 if /Replace (\S+) with (\S+)/; +} +foreach $filename (map(glob($_),@ARGV)) { + unless (open(IN, "<$filename")) { + warn "Unable to read from $file: $!\n"; + next; + } + print "Scanning $filename...\n"; + $c = ""; while () { $c .= $_; } close(IN); + $need_include = 0; %add_func = (); $changes = 0; + $has_include = ($c =~ /#.*include.*ppport/m); + + foreach $func (keys %funcs) { + if ($c =~ /#.*define.*\bNEED_$func(_GLOBAL)?\b/m) { + if ($c !~ /\b$func\b/m) { + print "If $func isn't needed, you don't need to request it.\n" if + $changes += ($c =~ s/^.*#.*define.*\bNEED_$func\b.*\n//m); + } else { + print "Uses $func\n"; + $need_include = 1; + } + } else { + if ($c =~ /\b$func\b/m) { + $add_func{$func} =1 ; + print "Uses $func\n"; + $need_include = 1; + } + } + } + + if (not $need_include) { + foreach $macro (keys %macros) { + if ($c =~ /\b$macro\b/m) { + print "Uses $macro\n"; + $need_include = 1; + } + } + } + + foreach $badmacro (keys %badmacros) { + if ($c =~ /\b$badmacro\b/m) { + $changes += ($c =~ s/\b$badmacro\b/$badmacros{$badmacro}/gm); + print "Uses $badmacros{$badmacro} (instead of $badmacro)\n"; + $need_include = 1; + } + } + + if (scalar(keys %add_func) or $need_include != $has_include) { + if (!$has_include) { + $inc = join('',map("#define NEED_$_\n", sort keys %add_func)). + "#include \"ppport.h\"\n"; + $c = "$inc$c" unless $c =~ s/#.*include.*XSUB.*\n/$&$inc/m; + } elsif (keys %add_func) { + $inc = join('',map("#define NEED_$_\n", sort keys %add_func)); + $c = "$inc$c" unless $c =~ s/^.*#.*include.*ppport.*$/$inc$&/m; + } + if (!$need_include) { + print "Doesn't seem to need ppport.h.\n"; + $c =~ s/^.*#.*include.*ppport.*\n//m; + } + $changes++; + } + + if ($changes) { + open(OUT,">/tmp/ppport.h.$$"); + print OUT $c; + close(OUT); + open(DIFF, "diff -u $filename /tmp/ppport.h.$$|"); + while () { s!/tmp/ppport\.h\.$$!$filename.patched!; print STDOUT; } + close(DIFF); + unlink("/tmp/ppport.h.$$"); + } else { + print "Looks OK\n"; + } +} +__DATA__ +*/ + +#ifndef PERL_REVISION +# ifndef __PATCHLEVEL_H_INCLUDED__ +# include "patchlevel.h" +# endif +# ifndef PERL_REVISION +# define PERL_REVISION (5) + /* Replace: 1 */ +# define PERL_VERSION PATCHLEVEL +# define PERL_SUBVERSION SUBVERSION + /* Replace PERL_PATCHLEVEL with PERL_VERSION */ + /* Replace: 0 */ +# endif +#endif + +#define PERL_BCDVERSION ((PERL_REVISION * 0x1000000L) + (PERL_VERSION * 0x1000L) + PERL_SUBVERSION) + +#ifndef ERRSV +# define ERRSV perl_get_sv("@",FALSE) +#endif + +#if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5)) +/* Replace: 1 */ +# define PL_sv_undef sv_undef +# define PL_sv_yes sv_yes +# define PL_sv_no sv_no +# define PL_na na +# define PL_stdingv stdingv +# define PL_hints hints +# define PL_curcop curcop +# define PL_curstash curstash +# define PL_copline copline +# define PL_Sv Sv +/* Replace: 0 */ +#endif + +#ifndef dTHR +# ifdef WIN32 +# define dTHR extern int Perl___notused +# else +# define dTHR extern int errno +# endif +#endif + +#ifndef boolSV +# define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no) +#endif + +#ifndef gv_stashpvn +# define gv_stashpvn(str,len,flags) gv_stashpv(str,flags) +#endif + +#ifndef newSVpvn +# define newSVpvn(data,len) ((len) ? newSVpv ((data), (len)) : newSVpv ("", 0)) +#endif + +#ifndef newRV_inc +/* Replace: 1 */ +# define newRV_inc(sv) newRV(sv) +/* Replace: 0 */ +#endif + +#ifndef newRV_noinc +# ifdef __GNUC__ +# define newRV_noinc(sv) \ + ({ \ + SV *nsv = (SV*)newRV(sv); \ + SvREFCNT_dec(sv); \ + nsv; \ + }) +# else +# if defined(CRIPPLED_CC) || defined(USE_THREADS) +static SV * newRV_noinc (SV * sv) +{ + SV *nsv = (SV*)newRV(sv); + SvREFCNT_dec(sv); + return nsv; +} +# else +# define newRV_noinc(sv) \ + ((PL_Sv=(SV*)newRV(sv), SvREFCNT_dec(sv), (SV*)PL_Sv) +# endif +# endif +#endif + +/* Provide: newCONSTSUB */ + +/* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */ +#if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 63)) + +#if defined(NEED_newCONSTSUB) +static +#else +extern void newCONSTSUB _((HV * stash, char * name, SV *sv)); +#endif + +#if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL) +void +newCONSTSUB(stash,name,sv) +HV *stash; +char *name; +SV *sv; +{ + U32 oldhints = PL_hints; + HV *old_cop_stash = PL_curcop->cop_stash; + HV *old_curstash = PL_curstash; + line_t oldline = PL_curcop->cop_line; + PL_curcop->cop_line = PL_copline; + + PL_hints &= ~HINT_BLOCK_SCOPE; + if (stash) + PL_curstash = PL_curcop->cop_stash = stash; + + newSUB( + +#if (PERL_VERSION < 3) || ((PERL_VERSION == 3) && (PERL_SUBVERSION < 22)) + /* before 5.003_22 */ + start_subparse(), +#else +# if (PERL_VERSION == 3) && (PERL_SUBVERSION == 22) + /* 5.003_22 */ + start_subparse(0), +# else + /* 5.003_23 onwards */ + start_subparse(FALSE, 0), +# endif +#endif + + newSVOP(OP_CONST, 0, newSVpv(name,0)), + newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ + newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) + ); + + PL_hints = oldhints; + PL_curcop->cop_stash = old_cop_stash; + PL_curstash = old_curstash; + PL_curcop->cop_line = oldline; +} +#endif + +#endif /* newCONSTSUB */ + + +#endif /* _P_P_PORTABILITY_H_ */ diff --git a/quant.c b/quant.c new file mode 100644 index 00000000..0c7cc248 --- /dev/null +++ b/quant.c @@ -0,0 +1,1416 @@ +/* quant.c - provides general image quantization + currently only used by gif.c, but maybe we'll support producing + 8-bit (or bigger indexed) png files at some point +*/ +#include "image.h" + +static void makemap_addi(i_quantize *, i_img **imgs, int count); + +static +void +setcol(i_color *cl,unsigned char r,unsigned char g,unsigned char b,unsigned char a) { + cl->rgba.r=r; + cl->rgba.g=g; + cl->rgba.b=b; + cl->rgba.a=a; +} + + + +/* make a colour map overwrites mc_existing/mc_count in quant Note + that i_makemap will be called once for each image if mc_perimage is + set and the format support multiple colour maps per image. + + This means we don't need any special processing at this level to + handle multiple colour maps. +*/ + +void +quant_makemap(i_quantize *quant, i_img **imgs, int count) { + i_color temp; +#ifdef HAVE_LIBGIF + /* giflib does it's own color table generation */ + if (quant->translate == pt_giflib) + return; +#endif + switch (quant->make_colors & mc_mask) { + case mc_none: + /* use user's specified map */ + break; + case mc_web_map: + { + int r, g, b; + int i = 0; + for (r = 0; r < 256; r+=0x33) + for (g = 0; g < 256; g+=0x33) + for (b = 0; b < 256; b += 0x33) + setcol(quant->mc_colors+i++, r, g, b, 0); + quant->mc_count = i; + } + break; + + case mc_addi: + default: + makemap_addi(quant, imgs, count); + break; + } +} + +#ifdef HAVE_LIBGIF +static void translate_giflib(i_quantize *, i_img *, i_palidx *); +#endif +static void translate_closest(i_quantize *, i_img *, i_palidx *); +static void translate_errdiff(i_quantize *, i_img *, i_palidx *); +static void translate_addi(i_quantize *, i_img *, i_palidx *); + +/* Quantize the image given the palette in quant. + + The giflib quantizer ignores the palette. +*/ +i_palidx *quant_translate(i_quantize *quant, i_img *img) { + i_palidx *result = mymalloc(img->xsize * img->ysize); + switch (quant->translate) { +#ifdef HAVE_LIBGIF + case pt_giflib: + translate_giflib(quant, img, result); + break; +#endif + + case pt_closest: + translate_closest(quant, img, result); + break; + + case pt_errdiff: + translate_errdiff(quant, img, result); + break; + + case pt_perturb: + default: + translate_addi(quant, img, result); + break; + } + + return result; +} + +#ifdef HAVE_LIBGIF +#include "gif_lib.h" + +#define GET_RGB(im, x, y, ri, gi, bi, col) \ + i_gpix((im),(x),(y),&(col)); (ri)=(col).rgb.r; \ + if((im)->channels==3) { (bi)=(col).rgb.b; (gi)=(col).rgb.g; } + +static int +quant_replicate(i_img *im, i_palidx *output, i_quantize *quant); + +/* Use the gif_lib quantization functions to quantize the image */ +static void translate_giflib(i_quantize *quant, i_img *img, i_palidx *out) { + int x,y,ColorMapSize,colours_in; + unsigned long Size; + int i; + + GifByteType *RedBuffer = NULL, *GreenBuffer = NULL, *BlueBuffer = NULL; + GifByteType *RedP, *GreenP, *BlueP; + ColorMapObject *OutputColorMap = NULL; + + i_color col; + + /*mm_log((1,"i_writegif(0x%x, fd %d, colors %dbpp)\n",im,fd,colors));*/ + + /*if (!(im->channels==1 || im->channels==3)) { fprintf(stderr,"Unable to write gif, improper colorspace.\n"); exit(3); }*/ + + ColorMapSize = quant->mc_size; + + Size = ((long) img->xsize) * img->ysize * sizeof(GifByteType); + + + if ((OutputColorMap = MakeMapObject(ColorMapSize, NULL)) == NULL) + m_fatal(0,"Failed to allocate memory for Output colormap."); + /* if ((OutputBuffer = (GifByteType *) mymalloc(im->xsize * im->ysize * sizeof(GifByteType))) == NULL) + m_fatal(0,"Failed to allocate memory for output buffer.");*/ + + /* ******************************************************* */ + /* count the number of colours in the image */ + colours_in=i_count_colors(img, OutputColorMap->ColorCount); + + if(colours_in != -1) { /* less then the number wanted */ + /* so we copy them over as-is */ + mm_log((2,"image has %d colours, which fits in %d. Copying\n", + colours_in,ColorMapSize)); + quant_replicate(img, out, quant); + /* saves the colors, so don't fall through */ + return; + } else { + + mm_log((2,"image has %d colours, more then %d. Quantizing\n",colours_in,ColorMapSize)); + + if (img->channels >= 3) { + if ((RedBuffer = (GifByteType *) mymalloc((unsigned int) Size)) == NULL) { + m_fatal(0,"Failed to allocate memory required, aborted."); + return; + } + if ((GreenBuffer = (GifByteType *) mymalloc((unsigned int) Size)) == NULL) { + m_fatal(0,"Failed to allocate memory required, aborted."); + free(RedBuffer); + return; + } + + if ((BlueBuffer = (GifByteType *) mymalloc((unsigned int) Size)) == NULL) { + m_fatal(0,"Failed to allocate memory required, aborted."); + free(RedBuffer); + free(GreenBuffer); + return; + } + + RedP = RedBuffer; + GreenP = GreenBuffer; + BlueP = BlueBuffer; + + for (y=0; y< img->ysize; y++) for (x=0; x < img->xsize; x++) { + i_gpix(img,x,y,&col); + *RedP++ = col.rgb.r; + *GreenP++ = col.rgb.g; + *BlueP++ = col.rgb.b; + } + + } else { + + if ((RedBuffer = (GifByteType *) mymalloc((unsigned int) Size))==NULL) { + m_fatal(0,"Failed to allocate memory required, aborted."); + return; + } + + GreenBuffer=BlueBuffer=RedBuffer; + RedP = RedBuffer; + for (y=0; y< img->ysize; y++) for (x=0; x < img->xsize; x++) { + i_gpix(img,x,y,&col); + *RedP++ = col.rgb.r; + } + } + + if (QuantizeBuffer(img->xsize, img->ysize, &ColorMapSize, RedBuffer, GreenBuffer, BlueBuffer, + out, OutputColorMap->Colors) == GIF_ERROR) { + mm_log((1,"Error in QuantizeBuffer, unable to write image.\n")); + } + } + + free(RedBuffer); + if (img->channels == 3) { free(GreenBuffer); free(BlueBuffer); } + + /* copy over the color map */ + for (i = 0; i < ColorMapSize; ++i) { + quant->mc_colors[i].rgb.r = OutputColorMap->Colors[i].Red; + quant->mc_colors[i].rgb.g = OutputColorMap->Colors[i].Green; + quant->mc_colors[i].rgb.b = OutputColorMap->Colors[i].Blue; + } + quant->mc_count = ColorMapSize; +} + +static +int +quant_replicate(i_img *im, GifByteType *output, i_quantize *quant) { + int x, y, alloced, r, g=0, b=0, idx ; + i_color col; + + alloced=0; + for(y=0; yysize; y++) { + for(x=0; xxsize; x++) { + + GET_RGB(im, x,y, r,g,b, col); + + for(idx=0; idxmc_colors[idx].rgb.r==r && + quant->mc_colors[idx].rgb.g==g && + quant->mc_colors[idx].rgb.b==b) { + break; + } + } + + if(idx >= alloced) { /* if we haven't already, we */ + idx=alloced++; /* add the colour to the map */ + if(quant->mc_size < alloced) { + mm_log((1,"Tried to allocate more then %d colours.\n", + quant->mc_size)); + return 0; + } + quant->mc_colors[idx].rgb.r=r; + quant->mc_colors[idx].rgb.g=g; + quant->mc_colors[idx].rgb.b=b; + } + *output=idx; /* fill output buffer */ + output++; /* with colour indexes */ + } + } + quant->mc_count = alloced; + return 1; +} + +#endif + +static void translate_closest(i_quantize *quant, i_img *img, i_palidx *out) { + quant->perturb = 0; + translate_addi(quant, img, out); +} + +#define PWR2(x) ((x)*(x)) + +typedef int (*cmpfunc)(const void*, const void*); + +typedef struct { + unsigned char r,g,b; + char state; + int dr,dg,db; + int cdist; + int mcount; +} cvec; + +typedef struct { + int cnt; + int vec[256]; +} hashbox; + +typedef struct { + int boxnum; + int pixcnt; + int cand; + int pdc; +} pbox; + +static void prescan(i_img **im,int count, int cnum, cvec *clr); +static void reorder(pbox prescan[512]); +static int pboxcmp(const pbox *a,const pbox *b); +static void boxcenter(int box,cvec *cv); +static float frandn(void); +static void boxrand(int box,cvec *cv); +static void bbox(int box,int *r0,int *r1,int *g0,int *g1,int *b0,int *b1); +static void cr_hashindex(cvec clr[256],int cnum,hashbox hb[512]); +static int mindist(int boxnum,cvec *cv); +static int maxdist(int boxnum,cvec *cv); + +/* Some of the simpler functions are kept here to aid the compiler - + maybe some of them will be inlined. */ + +static int +pixbox(i_color *ic) { return ((ic->channel[0] & 224)<<1)+ ((ic->channel[1]&224)>>2) + ((ic->channel[2] &224) >> 5); } + +static unsigned char +g_sat(int in) { + if (in>255) { return 255; } + else if (in>0) return in; + return 0; +} + +static +float +frand(void) { + return rand()/(RAND_MAX+1.0); +} + +static +int +eucl_d(cvec* cv,i_color *cl) { return PWR2(cv->r-cl->channel[0])+PWR2(cv->g-cl->channel[1])+PWR2(cv->b-cl->channel[2]); } + +static +int +ceucl_d(i_color *c1, i_color *c2) { return PWR2(c1->channel[0]-c2->channel[0])+PWR2(c1->channel[1]-c2->channel[1])+PWR2(c1->channel[2]-c2->channel[2]); } + +/* + +This quantization algorithm and implementation routines are by Arnar +M. Hrafnkelson. In case any new ideas are here they are mine since +this was written from scratch. + +The algorithm uses local means in the following way: + + For each point in the colormap we find which image points + have that point as it's closest point. We calculate the mean + of those points and in the next iteration it will be the new + entry in the colormap. + +In order to speed this process up (i.e. nearest neighbor problem) We +divied the r,g,b space up in equally large 512 boxes. The boxes are +numbered from 0 to 511. Their numbering is so that for a given vector +it is known that it belongs to the box who is formed by concatenating the +3 most significant bits from each component of the RGB triplet. + +For each box we find the list of points from the colormap who might be +closest to any given point within the box. The exact solution +involves finding the Voronoi map (or the dual the Delauny +triangulation) and has many issues including numerical stability. + +So we use this approximation: + +1. Find which point has the shortest maximum distance to the box. +2. Find all points that have a shorter minimum distance than that to the box + +This is a very simple task and is not computationally heavy if one +takes into account that the minimum distances from a pixel to a box is +always found by checking if it's inside the box or is closest to some +side or a corner. Finding the maximum distance is also either a side +or a corner. + +This approach results 2-3 times more than the actual points needed but +is still a good gain over the complete space. Usually when one has a +256 Colorcolor map a search over 30 is often obtained. + +A bit of an enhancement to this approach is to keep a seperate list +for each side of the cube, but this will require even more memory. + + Arnar M. Hrafnkelsson (addi@umich.edu); + +*/ +/* + Extracted from gifquant.c, removed dependencies on gif_lib, + and added support for multiple images. + starting from 1nov2000 by TonyC . + +*/ + +static void +makemap_addi(i_quantize *quant, i_img **imgs, int count) { + cvec *clr; + int cnum, i, x, y, bst_idx=0, ld, cd, iter, currhb; + i_color val; + float dlt, accerr; + hashbox hb[512]; + + clr = (cvec *)mymalloc(sizeof(cvec) * quant->mc_size); + for (i=0; i < quant->mc_count; ++i) { + clr[i].r = quant->mc_colors[i].rgb.r; + clr[i].g = quant->mc_colors[i].rgb.g; + clr[i].b = quant->mc_colors[i].rgb.b; + clr[i].state = 1; + } + /* mymalloc doesn't clear memory, so I think we need this */ + for (; i < quant->mc_size; ++i) { + clr[i].state = 0; + } + cnum = quant->mc_size; + dlt = 1; + + prescan(imgs, count, cnum, clr); + cr_hashindex(clr, cnum, hb); + + for(iter=0;iter<3;iter++) { + accerr=0.0; + + for (i = 0; i < count; ++i) { + i_img *im = imgs[i]; + for(y=0;yysize;y++) for(x=0;xxsize;x++) { + ld=196608; + i_gpix(im,x,y,&val); + currhb=pixbox(&val); + /* printf("box = %d \n",currhb); */ + for(i=0;imc_colors[i].rgb.r = clr[i].r; + quant->mc_colors[i].rgb.g = clr[i].g; + quant->mc_colors[i].rgb.b = clr[i].b; + } + quant->mc_count = cnum; + + /* don't want to keep this */ + myfree(clr); +} + +#define pboxjump 32 + +/* Define one of the following 4 symbols to choose a colour search method + The idea is to try these out, including benchmarking, to see which + is fastest in a good spread of circumstances. + I'd expect IM_CFLINSEARCH to be fastest for very small palettes, and + IM_CFHASHBOX for large images with large palettes. + + Some other possibilities include: + - search over entries sorted by luminance + + Initially I was planning on testing using the macros and then + integrating the code directly into each function, but this means if + we find a bug at a late stage we will need to update N copies of + the same code. Also, keeping the code in the macros means that the + code in the translation functions is much more to the point, + there's no distracting colour search code to remove attention from + what makes _this_ translation function different. It may be + advisable to move the setup code into functions at some point, but + it should be possible to do this fairly transparently. + + If IM_CF_COPTS is defined then CFLAGS must have an appropriate + definition. + + Each option needs to define 4 macros: + CF_VARS - variables to define in the function + CF_SETUP - code to setup for the colour search, eg. allocating and + initializing lookup tables + CF_FIND - code that looks for the color in val and puts the best + matching index in bst_idx + CF_CLEANUP - code to clean up, eg. releasing memory +*/ +#ifndef IM_CF_COPTS +/*#define IM_CFLINSEARCH*/ +#define IM_CFHASHBOX +/*#define IM_CFSORTCHAN*/ +/*#define IM_CFRAND2DIST*/ +#endif + +#ifdef IM_CFHASHBOX + +/* The original version I wrote for this used the sort. + If this is defined then we use a sort to extract the indices for + the hashbox */ +#define HB_SORT + +/* assume i is available */ +#define CF_VARS hashbox hb[512]; \ + int currhb; \ + long ld, cd + +#ifdef HB_SORT + +static long *gdists; /* qsort is annoying */ +/* int might be smaller than long, so we need to do a real compare + rather than a subtraction*/ +static int distcomp(void const *a, void const *b) { + long ra = gdists[*(int const *)a]; + long rb = gdists[*(int const *)b]; + if (ra < rb) + return -1; + else if (ra > rb) + return 1; + else + return 0; +} + +#endif + +/* for each hashbox build a list of colours that are in the hb or is closer + than other colours + This is pretty involved. The original gifquant generated the hashbox + as part of it's normal processing, but since the map generation is now + separated from the translation we need to do this on the spot. + Any optimizations, even if they don't produce perfect results would be + welcome. + */ +static void hbsetup(i_quantize *quant, hashbox *hb) { + long *dists, mind, maxd, cd; + int cr, cb, cg, hbnum, i; + i_color cenc; +#ifdef HB_SORT + int *indices = mymalloc(quant->mc_count * sizeof(int)); +#endif + + dists = mymalloc(quant->mc_count * sizeof(long)); + for (cr = 0; cr < 8; ++cr) { + for (cg = 0; cg < 8; ++cg) { + for (cb = 0; cb < 8; ++cb) { + /* centre of the hashbox */ + cenc.channel[0] = cr*pboxjump+pboxjump/2; + cenc.channel[1] = cg*pboxjump+pboxjump/2; + cenc.channel[2] = cb*pboxjump+pboxjump/2; + hbnum = pixbox(&cenc); + hb[hbnum].cnt = 0; + /* order indices in the order of distance from the hashbox */ + for (i = 0; i < quant->mc_count; ++i) { +#ifdef HB_SORT + indices[i] = i; +#endif + dists[i] = ceucl_d(&cenc, quant->mc_colors+i); + } +#ifdef HB_SORT + /* it should be possible to do this without a sort + but so far I'm too lazy */ + gdists = dists; + qsort(indices, quant->mc_count, sizeof(int), distcomp); + /* any colors that can match are within mind+diagonal size of + a hashbox */ + mind = dists[indices[0]]; + i = 0; + maxd = (sqrt(mind)+pboxjump)*(sqrt(mind)+pboxjump); + while (i < quant->mc_count && dists[indices[i]] < maxd) { + hb[hbnum].vec[hb[hbnum].cnt++] = indices[i++]; + } +#else + /* work out the minimum */ + mind = 256*256*3; + for (i = 0; i < quant->mc_count; ++i) { + if (dists[i] < mind) mind = dists[i]; + } + /* transfer any colours that might be closest to a colour in + this hashbox */ + maxd = (sqrt(mind)+pboxjump)*(sqrt(mind)+pboxjump); + for (i = 0; i < quant->mc_count; ++i) { + if (dists[i] < maxd) + hb[hbnum].vec[hb[hbnum].cnt++] = i; + } +#endif + } + } + } +#ifdef HB_SORT + myfree(indices); +#endif + myfree(dists) ; +} +#define CF_SETUP hbsetup(quant, hb) + +#define CF_FIND \ + currhb = pixbox(&val); \ + ld = 196608; \ + for (i = 0; i < hb[currhb].cnt; ++i) { \ + cd = ceucl_d(quant->mc_colors+hb[currhb].vec[i], &val); \ + if (cd < ld) { ld = cd; bst_idx = hb[currhb].vec[i]; } \ + } + +#define CF_CLEANUP + +#endif + +#ifdef IM_CFLINSEARCH +/* as simple as it gets */ +#define CF_VARS long ld, cd +#define CF_SETUP /* none needed */ +#define CF_FIND \ + ld = 196608; \ + for (i = 0; i < quant->mc_count; ++i) { \ + cd = ceucl_d(quant->mc_colors+i, &val); \ + if (cd < ld) { ld = cd; bst_idx = i; } \ + } +#define CF_CLEANUP +#endif + +#ifdef IM_CFSORTCHAN +static int gsortchan; +static i_quantize *gquant; +static int chansort(void const *a, void const *b) { + return gquant->mc_colors[*(int const *)a].channel[gsortchan] - + gquant->mc_colors[*(int const *)b].channel[gsortchan]; +} +#define CF_VARS int *indices, sortchan, diff; \ + long ld, cd; \ + int vindex[256] /* where to find value i of chan */ + +static void chansetup(i_img *img, i_quantize *quant, int *csortchan, + int *vindex, int **cindices) { + int *indices, sortchan, chan, i, chval; + int chanmins[MAXCHANNELS], chanmaxs[MAXCHANNELS], maxrange; + + /* find the channel with the maximum range */ + /* the maximum stddev would probably be better */ + for (chan = 0; chan < img->channels; ++chan) { + chanmins[chan] = 256; chanmaxs[chan] = 0; + for (i = 0; i < quant->mc_count; ++i) { + if (quant->mc_colors[i].channel[chan] < chanmins[chan]) + chanmins[chan] = quant->mc_colors[i].channel[chan]; + if (quant->mc_colors[i].channel[chan] > chanmaxs[chan]) + chanmaxs[chan] = quant->mc_colors[i].channel[chan]; + } + } + maxrange = -1; + for (chan = 0; chan < img->channels; ++chan) { + if (chanmaxs[chan]-chanmins[chan] > maxrange) { + maxrange = chanmaxs[chan]-chanmins[chan]; + sortchan = chan; + } + } + indices = mymalloc(quant->mc_count * sizeof(int)) ; + for (i = 0; i < quant->mc_count; ++i) { + indices[i] = i; + } + gsortchan = sortchan; + gquant = quant; + qsort(indices, quant->mc_count, sizeof(int), chansort) ; + /* now a lookup table to find entries faster */ + for (chval=0, i=0; i < quant->mc_count; ++i) { + while (chval < 256 && + chval < quant->mc_colors[indices[i]].channel[sortchan]) { + vindex[chval++] = i; + } + } + while (chval < 256) { + vindex[chval++] = quant->mc_count-1; + } + *csortchan = sortchan; + *cindices = indices; +} + +#define CF_SETUP \ + chansetup(img, quant, &sortchan, vindex, &indices) + +int chanfind(i_color val, i_quantize *quant, int *indices, int *vindex, + int sortchan) { + int i, bst_idx, diff, maxdiff; + long ld, cd; + + i = vindex[val.channel[sortchan]]; + bst_idx = indices[i]; + ld = 196608; + diff = 0; + maxdiff = quant->mc_count; + while (diff < maxdiff) { + if (i+diff < quant->mc_count) { + cd = ceucl_d(&val, quant->mc_colors+indices[i+diff]); + if (cd < ld) { + bst_idx = indices[i+diff]; + ld = cd; + maxdiff = sqrt(ld); + } + } + if (i-diff >= 0) { + cd = ceucl_d(&val, quant->mc_colors+indices[i-diff]); + if (cd < ld) { + bst_idx = indices[i-diff]; + ld = cd; + maxdiff = sqrt(ld); + } + } + ++diff; + } + + return bst_idx; +} + +#define CF_FIND \ + bst_idx = chanfind(val, quant, indices, vindex, sortchan) + + +#define CF_CLEANUP myfree(indices) + +#endif + +#ifdef IM_CFRAND2DIST + +/* This is based on a method described by Addi in the #imager channel + on the 28/2/2001. I was about 1am Sydney time at the time, so I + wasn't at my most cogent. Well, that's my excuse :) + + what I have at the moment is: hashboxes, with optimum hash box +filling; simple linear search; and a lookup in the widest channel +(currently the channel with the maximum range) + There is one more way that might be simple to implement. + You want to hear? + what's that? + somebody said that was not true + For each of the colors in the palette start by creating a +sorted list of the form: + [distance, color] + Where they are sorted by distance. + distance to where? + Where the elements in the lists are the distances and colors of +the other colors in the palette + ok + So if you are at color 0 + ok - now to search for the closest color when you are creating +the final image is done like this: + a) pick a random color from the palette + b) calculate the distance to it + c) only check the vectors that are within double the distance +in the list of the color you picked from the palette. + Does that seem logical? + Lets imagine that we only have grayscale to make an example: + Our palette has 1 4 10 20 as colors. + And we want to quantize the color 11 + lets say we picked 10 randomly + the double distance is 2 + since abs(10-11)*2 is 2 + And the list at vector 10 is this: + [0, 10], [6 4], [9, 1], [10, 20] + so we look at the first one (but not the second one since 6 is +at a greater distance than 2. + Any of that make sense? + yes, though are you suggesting another random jump to one of +the colours with the possible choices? or an exhaustive search? + TonyC: It's possible to come up with a recursive/iterative +enhancement but this is the 'basic' version. + Which would do an iterative search. + You can come up with conditions where it pays to switch to a new one. + And the 'random' start can be switched over to a small tree. + So you would have a little index at the start. + to get you into the general direction + Perhaps just an 8 split. + that is - split each dimension in half. + yep + I get the idea + But this would seem to be a good approach in our case since we +usually have few codevectors. + So we only need 256*256 entries in a table. + We could even only index some of them that were deemed as good +candidates. + I was considering adding paletted output support for PNG and +TIFF at some point, which support 16-bit palettes + ohh. + 'darn' ;) + + +*/ + + +typedef struct i_dists { + int index; + long dist; +} i_dists; + +#define CF_VARS \ + i_dists *dists; + +static int dists_sort(void const *a, void const *b) { + return ((i_dists *)a)->dist - ((i_dists *)b)->dist; +} + +static void rand2dist_setup(i_quantize *quant, i_dists **cdists) { + i_dists *dists = + mymalloc(sizeof(i_dists)*quant->mc_count*quant->mc_count); + int i, j; + long cd; + for (i = 0; i < quant->mc_count; ++i) { + i_dists *ldists = dists + quant->mc_count * i; + i_color val = quant->mc_colors[i]; + for (j = 0; j < quant->mc_count; ++j) { + ldists[j].index = j; + ldists[j].dist = ceucl_d(&val, quant->mc_colors+j); + } + qsort(ldists, quant->mc_count, sizeof(i_dists), dists_sort); + } + *cdists = dists; +} + +#define CF_SETUP \ + bst_idx = rand() % quant->mc_count; \ + rand2dist_setup(quant, &dists) + +static int rand2dist_find(i_color val, i_quantize *quant, i_dists *dists, int index) { + i_dists *cdists; + long cd, ld; + long maxld; + int i; + int bst_idx; + + cdists = dists + index * quant->mc_count; + ld = 3 * 256 * 256; + maxld = 8 * ceucl_d(&val, quant->mc_colors+index); + for (i = 0; i < quant->mc_count && cdists[i].dist <= maxld; ++i) { + cd = ceucl_d(&val, quant->mc_colors+cdists[i].index); + if (cd < ld) { + bst_idx = cdists[i].index; + ld = cd; + } + } + return bst_idx; +} + +#define CF_FIND bst_idx = rand2dist_find(val, quant, dists, bst_idx) + +#define CF_CLEANUP myfree(dists) + + +#endif + +static void translate_addi(i_quantize *quant, i_img *img, i_palidx *out) { + int x, y, i, k, bst_idx; + i_color val; + int pixdev = quant->perturb; + CF_VARS; + + CF_SETUP; + + if (pixdev) { + k=0; + for(y=0;yysize;y++) for(x=0;xxsize;x++) { + i_gpix(img,x,y,&val); + val.channel[0]=g_sat(val.channel[0]+(int)(pixdev*frandn())); + val.channel[1]=g_sat(val.channel[1]+(int)(pixdev*frandn())); + val.channel[2]=g_sat(val.channel[2]+(int)(pixdev*frandn())); + CF_FIND; + out[k++]=bst_idx; + } + } else { + k=0; + for(y=0;yysize;y++) for(x=0;xxsize;x++) { + i_gpix(img,x,y,&val); + CF_FIND; + out[k++]=bst_idx; + } + } + CF_CLEANUP; +} + +static int floyd_map[] = +{ + 0, 0, 7, + 3, 5, 1 +}; + +static int jarvis_map[] = +{ + 0, 0, 0, 7, 5, + 3, 5, 7, 5, 3, + 1, 3, 5, 3, 1 +}; + +static int stucki_map[] = +{ + 0, 0, 0, 8, 4, + 2, 4, 8, 4, 2, + 1, 2, 4, 2, 1 +}; + +struct errdiff_map { + int *map; + int width, height, orig; +}; + +static struct errdiff_map maps[] = +{ + { floyd_map, 3, 2, 1 }, + { jarvis_map, 5, 3, 2 }, + { stucki_map, 5, 3, 2 }, +}; + +typedef struct errdiff_tag { + int r, g, b; +} errdiff_t; + +/* perform an error diffusion dither */ +static +void +translate_errdiff(i_quantize *quant, i_img *img, i_palidx *out) { + int *map; + int mapw, maph, mapo; + int i; + errdiff_t *err; + int errw; + int difftotal; + int x, y, dx, dy; + int minr, maxr, ming, maxg, minb, maxb, cr, cg, cb; + i_color find; + int bst_idx; + CF_VARS; + + if ((quant->errdiff & ed_mask) == ed_custom) { + map = quant->ed_map; + mapw = quant->ed_width; + maph = quant->ed_height; + mapo = quant->ed_orig; + } + else { + int index = quant->errdiff & ed_mask; + if (index >= ed_custom) index = ed_floyd; + map = maps[index].map; + mapw = maps[index].width; + maph = maps[index].height; + mapo = maps[index].orig; + } + + errw = img->xsize+mapw; + err = mymalloc(sizeof(*err) * maph * errw); + /*errp = err+mapo;*/ + memset(err, 0, sizeof(*err) * maph * errw); + + difftotal = 0; + for (i = 0; i < maph * mapw; ++i) + difftotal += map[i]; + /*printf("map:\n"); + for (dy = 0; dy < maph; ++dy) { + for (dx = 0; dx < mapw; ++dx) { + printf("%2d", map[dx+dy*mapw]); + } + putchar('\n'); + }*/ + + CF_SETUP; + + for (y = 0; y < img->ysize; ++y) { + for (x = 0; x < img->xsize; ++x) { + i_color val; + long ld, cd; + errdiff_t perr; + i_gpix(img, x, y, &val); + perr = err[x+mapo]; + perr.r = perr.r < 0 ? -((-perr.r)/difftotal) : perr.r/difftotal; + perr.g = perr.g < 0 ? -((-perr.g)/difftotal) : perr.g/difftotal; + perr.b = perr.b < 0 ? -((-perr.b)/difftotal) : perr.b/difftotal; + /*printf("x %3d y %3d in(%3d, %3d, %3d) di(%4d,%4d,%4d)\n", x, y, val.channel[0], val.channel[1], val.channel[2], perr.r, perr.g, perr.b);*/ + val.channel[0] = g_sat(val.channel[0]-perr.r); + val.channel[1] = g_sat(val.channel[1]-perr.g); + val.channel[2] = g_sat(val.channel[2]-perr.b); + CF_FIND; + /* save error */ + perr.r = quant->mc_colors[bst_idx].channel[0] - val.channel[0]; + perr.g = quant->mc_colors[bst_idx].channel[1] - val.channel[1]; + perr.b = quant->mc_colors[bst_idx].channel[2] - val.channel[2]; + /*printf(" out(%3d, %3d, %3d) er(%4d, %4d, %4d)\n", quant->mc_colors[bst_idx].channel[0], quant->mc_colors[bst_idx].channel[1], quant->mc_colors[bst_idx].channel[2], perr.r, perr.g, perr.b);*/ + for (dx = 0; dx < mapw; ++dx) { + for (dy = 0; dy < maph; ++dy) { + err[x+dx+dy*errw].r += perr.r * map[dx+mapw*dy]; + err[x+dx+dy*errw].g += perr.g * map[dx+mapw*dy]; + err[x+dx+dy*errw].b += perr.b * map[dx+mapw*dy]; + } + } + *out++ = bst_idx; + } + /* shift up the error matrix */ + for (dy = 0; dy < maph-1; ++dy) { + memcpy(err+dy*errw, err+(dy+1)*errw, sizeof(*err)*errw); + } + memset(err+(maph-1)*errw, 0, sizeof(*err)*errw); + } + CF_CLEANUP; +} +/* Prescan finds the boxes in the image that have the highest number of colors + and that result is used as the initial value for the vectores */ + + +static void prescan(i_img **imgs,int count, int cnum, cvec *clr) { + int i,k,j,x,y; + i_color val; + + pbox prebox[512]; + for(i=0;i<512;i++) { + prebox[i].boxnum=i; + prebox[i].pixcnt=0; + prebox[i].cand=1; + } + + /* process each image */ + for (i = 0; i < count; ++i) { + i_img *im = imgs[i]; + for(y=0;yysize;y++) for(x=0;xxsize;x++) { + i_gpix(im,x,y,&val); + prebox[pixbox(&val)].pixcnt++; + } + } + + for(i=0;i<512;i++) prebox[i].pdc=prebox[i].pixcnt; + qsort(prebox,512,sizeof(pbox),(cmpfunc)pboxcmp); + + for(i=0;i=prebox[k].cand) { k++; j=1; } else { + if (prebox[k].cand == 2) boxcenter(prebox[k].boxnum,&(clr[i])); + else boxrand(prebox[k].boxnum,&(clr[i])); + /* printf("(%d,%d) %d %d -> (%d,%d,%d)\n",k,j,prebox[k].boxnum,prebox[k].pixcnt,clr[i].r,clr[i].g,clr[i].b); */ + j++; + i++; + } + } +} + + +static void reorder(pbox prescan[512]) { + int nidx; + pbox c; + + nidx=0; + c=prescan[0]; + + c.cand++; + c.pdc=c.pixcnt/(c.cand*c.cand); + /* c.pdc=c.pixcnt/c.cand; */ + while(c.pdc < prescan[nidx+1].pdc && nidx < 511) { + prescan[nidx]=prescan[nidx+1]; + nidx++; + } + prescan[nidx]=c; +} + +static int +pboxcmp(const pbox *a,const pbox *b) { + if (a->pixcnt > b->pixcnt) return -1; + if (a->pixcnt < b->pixcnt) return 1; + return 0; +} + +static void +boxcenter(int box,cvec *cv) { + cv->r=15+((box&448)>>1); + cv->g=15+((box&56)<<2); + cv->b=15+((box&7)<<5); +} + +static void +bbox(int box,int *r0,int *r1,int *g0,int *g1,int *b0,int *b1) { + *r0=(box&448)>>1; + *r1=(*r0)|31; + *g0=(box&56)<<2; + *g1=(*g0)|31; + *b0=(box&7)<<5; + *b1=(*b0)|31; +} + +static void +boxrand(int box,cvec *cv) { + cv->r=6+(rand()%25)+((box&448)>>1); + cv->g=6+(rand()%25)+((box&56)<<2); + cv->b=6+(rand()%25)+((box&7)<<5); +} + +static float +frandn(void) { + + float u1,u2,w; + + w=1; + + while (w >= 1 || w == 0) { + u1 = 2 * frand() - 1; + u2 = 2 * frand() - 1; + w = u1*u1 + u2*u2; + } + + w = sqrt((-2*log(w))/w); + return u1*w; +} + +/* Create hash index */ +static +void +cr_hashindex(cvec clr[256],int cnum,hashbox hb[512]) { + + int bx,mind,cd,cumcnt,bst_idx,i; +/* printf("indexing... \n");*/ + + cumcnt=0; + for(bx=0; bx<512; bx++) { + mind=196608; + for(i=0; i approx -> %d\n",bx,hb[bx].cnt); */ + /* statbox(bx,cnum,clr); */ + cumcnt+=hb[bx].cnt; + } + +/* printf("Average search space: %d\n",cumcnt/512); */ +} + +static int +maxdist(int boxnum,cvec *cv) { + int r0,r1,g0,g1,b0,b1; + int r,g,b,mr,mg,mb; + + r=cv->r; + g=cv->g; + b=cv->b; + + bbox(boxnum,&r0,&r1,&g0,&g1,&b0,&b1); + + mr=max(abs(b-b0),abs(b-b1)); + mg=max(abs(g-g0),abs(g-g1)); + mb=max(abs(r-r0),abs(r-r1)); + + return PWR2(mr)+PWR2(mg)+PWR2(mb); +} + +static int +mindist(int boxnum,cvec *cv) { + int r0,r1,g0,g1,b0,b1; + int r,g,b,mr,mg,mb; + + r=cv->r; + g=cv->g; + b=cv->b; + + bbox(boxnum,&r0,&r1,&g0,&g1,&b0,&b1); + + /* printf("box %d, (%d,%d,%d)-(%d,%d,%d) vec (%d,%d,%d) ",boxnum,r0,g0,b0,r1,g1,b1,r,g,b); */ + + if (r0<=r && r<=r1 && g0<=g && g<=g1 && b0<=b && b<=b1) return 0; + + mr=min(abs(b-b0),abs(b-b1)); + mg=min(abs(g-g0),abs(g-g1)); + mb=min(abs(r-r0),abs(r-r1)); + + mr=PWR2(mr); + mg=PWR2(mg); + mb=PWR2(mb); + + if (r0<=r && r<=r1 && g0<=g && g<=g1) return mb; + if (r0<=r && r<=r1 && b0<=b && b<=b1) return mg; + if (b0<=b && b<=b1 && g0<=g && g<=g1) return mr; + + if (r0<=r && r<=r1) return mg+mb; + if (g0<=g && g<=g1) return mr+mb; + if (b0<=b && b<=b1) return mg+mr; + + return mr+mg+mb; +} + +static void transparent_threshold(i_quantize *, i_palidx *, i_img *, i_palidx); +static void transparent_errdiff(i_quantize *, i_palidx *, i_img *, i_palidx); +static void transparent_ordered(i_quantize *, i_palidx *, i_img *, i_palidx); + +void quant_transparent(i_quantize *quant, i_palidx *data, i_img *img, + i_palidx trans_index) +{ + switch (quant->transp) { + case tr_none: + break; + + default: + quant->tr_threshold = 128; + /* fall through */ + case tr_threshold: + transparent_threshold(quant, data, img, trans_index); + break; + + case tr_errdiff: + transparent_errdiff(quant, data, img, trans_index); + break; + + case tr_ordered: + transparent_ordered(quant, data, img, trans_index); + break; + } +} + +static void +transparent_threshold(i_quantize *quant, i_palidx *data, i_img *img, + i_palidx trans_index) +{ + int x, y; + + for (y = 0; y < img->ysize; ++y) { + for (x = 0; x < img->xsize; ++x) { + i_color val; + i_gpix(img, x, y, &val); + if (val.rgba.a < quant->tr_threshold) + data[y*img->xsize+x] = trans_index; + } + } +} + +static void +transparent_errdiff(i_quantize *quant, i_palidx *data, i_img *img, + i_palidx trans_index) +{ + int *map; + int index; + int mapw, maph, mapo; + int errw, *err, *errp; + int difftotal, out, error; + int x, y, dx, dy, i; + + /* no custom map for transparency (yet) */ + index = quant->tr_errdiff & ed_mask; + if (index >= ed_custom) index = ed_floyd; + map = maps[index].map; + mapw = maps[index].width; + maph = maps[index].height; + mapo = maps[index].orig; + + errw = img->xsize+mapw-1; + err = mymalloc(sizeof(*err) * maph * errw); + errp = err+mapo; + memset(err, 0, sizeof(*err) * maph * errw); + + difftotal = 0; + for (i = 0; i < maph * mapw; ++i) + difftotal += map[i]; + for (y = 0; y < img->ysize; ++y) { + for (x = 0; x < img->xsize; ++x) { + i_color val; + i_gpix(img, x, y, &val); + val.rgba.a = g_sat(val.rgba.a-errp[x]/difftotal); + if (val.rgba.a < 128) { + out = 0; + data[y*img->xsize+x] = trans_index; + } + else { + out = 255; + } + error = out - val.rgba.a; + for (dx = 0; dx < mapw; ++dx) { + for (dy = 0; dy < maph; ++dy) { + errp[x+dx-mapo+dy*errw] += error * map[dx+mapw*dy]; + } + } + } + /* shift up the error matrix */ + for (dy = 0; dy < maph-1; ++dy) + memcpy(err+dy*errw, err+(dy+1)*errw, sizeof(*err)*errw); + memset(err+(maph-1)*errw, 0, sizeof(*err)*errw); + } +} + +/* builtin ordered dither maps */ +unsigned char orddith_maps[][64] = +{ + { /* random + this is purely random - it's pretty awful + */ + 48, 72, 196, 252, 180, 92, 108, 52, + 228, 176, 64, 8, 236, 40, 20, 164, + 120, 128, 84, 116, 24, 28, 172, 220, + 68, 0, 188, 124, 184, 224, 192, 104, + 132, 100, 240, 200, 152, 160, 244, 44, + 96, 204, 144, 16, 140, 56, 232, 216, + 208, 4, 76, 212, 136, 248, 80, 168, + 156, 88, 32, 112, 148, 12, 36, 60, + }, + { + /* dot8 + perl spot.perl '($x-3.5)*($x-3.5)+($y-3.5)*($y-3.5)' + */ + 240, 232, 200, 136, 140, 192, 228, 248, + 220, 148, 100, 76, 80, 104, 152, 212, + 180, 116, 56, 32, 36, 60, 120, 176, + 156, 64, 28, 0, 8, 44, 88, 160, + 128, 92, 24, 12, 4, 40, 68, 132, + 184, 96, 48, 20, 16, 52, 108, 188, + 216, 144, 112, 72, 84, 124, 164, 224, + 244, 236, 196, 168, 172, 204, 208, 252, + }, + { /* dot4 + perl spot.perl \ + 'min(dist(1.5, 1.5),dist(5.5,1.5),dist(1.5,5.5),dist(5.5,5.5))' + */ + 196, 72, 104, 220, 200, 80, 112, 224, + 76, 4, 24, 136, 84, 8, 32, 144, + 108, 28, 52, 168, 116, 36, 56, 176, + 216, 140, 172, 244, 228, 148, 180, 248, + 204, 92, 124, 236, 192, 68, 96, 208, + 88, 12, 44, 156, 64, 0, 16, 128, + 120, 40, 60, 188, 100, 20, 48, 160, + 232, 152, 184, 252, 212, 132, 164, 240, + }, + { /* hline + perl spot.perl '$y-3' + */ + 160, 164, 168, 172, 176, 180, 184, 188, + 128, 132, 136, 140, 144, 148, 152, 156, + 32, 36, 40, 44, 48, 52, 56, 60, + 0, 4, 8, 12, 16, 20, 24, 28, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 192, 196, 200, 204, 208, 212, 216, 220, + 224, 228, 232, 236, 240, 244, 248, 252, + }, + { /* vline + perl spot.perl '$x-3' + */ + 180, 100, 40, 12, 44, 104, 184, 232, + 204, 148, 60, 16, 64, 128, 208, 224, + 212, 144, 76, 8, 80, 132, 216, 244, + 160, 112, 68, 20, 84, 108, 172, 236, + 176, 96, 72, 28, 88, 152, 188, 228, + 200, 124, 92, 0, 32, 116, 164, 240, + 168, 120, 36, 24, 48, 136, 192, 248, + 196, 140, 52, 4, 56, 156, 220, 252, + }, + { /* slashline + perl spot.perl '$y+$x-7' + */ + 248, 232, 224, 192, 140, 92, 52, 28, + 240, 220, 196, 144, 108, 60, 12, 64, + 216, 180, 148, 116, 76, 20, 80, 128, + 204, 152, 104, 44, 16, 72, 100, 160, + 164, 96, 68, 24, 56, 112, 168, 176, + 124, 40, 8, 36, 88, 136, 184, 212, + 84, 4, 32, 120, 156, 188, 228, 236, + 0, 48, 132, 172, 200, 208, 244, 252, + }, + { /* backline + perl spot.perl '$y-$x' + */ + 0, 32, 116, 172, 184, 216, 236, 252, + 56, 8, 72, 132, 136, 200, 228, 240, + 100, 36, 12, 40, 92, 144, 204, 220, + 168, 120, 60, 16, 44, 96, 156, 176, + 180, 164, 112, 48, 28, 52, 128, 148, + 208, 192, 152, 88, 84, 20, 64, 104, + 232, 224, 196, 140, 108, 68, 24, 76, + 248, 244, 212, 188, 160, 124, 80, 4, + }, +}; + +static void +transparent_ordered(i_quantize *quant, i_palidx *data, i_img *img, + i_palidx trans_index) +{ + unsigned char *spot; + int x, y; + if (quant->tr_orddith == od_custom) + spot = quant->tr_custom; + else + spot = orddith_maps[quant->tr_orddith]; + for (y = 0; y < img->ysize; ++y) { + for (x = 0; x < img->xsize; ++x) { + i_color val; + i_gpix(img, x, y, &val); + if (val.rgba.a < spot[(x&7)+(y&7)*8]) + data[x+y*img->xsize] = trans_index; + } + } +} diff --git a/raw.c b/raw.c new file mode 100644 index 00000000..56977e79 --- /dev/null +++ b/raw.c @@ -0,0 +1,98 @@ +#include "image.h" +#include +#ifndef _MSC_VER +#include +#endif +#include + +#define TRUE 1 +#define FALSE 0 + +#define BSIZ 100*BUFSIZ + +/* + + Image loader for raw files. + + This is a barebones raw loader... + + fd: filedescriptor + x: xsize + y: ysize + datachannels: the number of channels the file contains + storechannels: the bitmap of channels we will read + intrl: interlace flag, + 0 = sample interleaving + 1 = line interleaving + 2 = image interleaving + +*/ + +void +expandchannels(unsigned char *inbuffer,unsigned char *outbuffer,int chunks,int datachannels,int storechannels) { + int ch,i; + if (inbuffer==outbuffer) return; /* Check if data is already in expanded format */ + for(ch=0;chxsize*datachannels; + ilbuflen=inbuflen; + exbuflen=im->xsize*storechannels; + inbuffer=(unsigned char*)mymalloc(inbuflen); + mm_log((1,"inbuflen: %d, ilbuflen: %d, exbuflen: %d.\n",inbuflen,ilbuflen,exbuflen)); + + if (intrl==0) ilbuffer=inbuffer; else ilbuffer=(unsigned char*)mymalloc(inbuflen); + if (datachannels==storechannels) exbuffer=ilbuffer; else exbuffer=(unsigned char*)mymalloc(exbuflen); + + k=0; + while(kysize) { + rc=myread(fd,inbuffer,inbuflen); + if (rc!=inbuflen) { fprintf(stderr,"Premature end of file.\n"); exit(2); } + interleave(inbuffer,ilbuffer,im->xsize,datachannels); + expandchannels(ilbuffer,exbuffer,im->xsize,datachannels,storechannels); + memcpy(&(im->data[im->xsize*storechannels*k]),exbuffer,exbuflen); + k++; + } + + myfree(inbuffer); + if (intrl!=0) myfree(ilbuffer); + if (datachannels!=storechannels) myfree(exbuffer); + return im; +} + + + +undef_int +i_writeraw(i_img* im,int fd) { + int rc; + mm_log((1,"writeraw(im 0x%x,fd %d)\n",im,fd)); + + if (im == NULL) { mm_log((1,"Image is empty\n")); return(0); } + rc=mywrite(fd,im->data,im->bytes); + if (rc!=im->bytes) { mm_log((1,"i_writeraw: Couldn't write to file\n")); return(0); } + return(1); +} + + + + + + + + + diff --git a/regmach.c b/regmach.c new file mode 100644 index 00000000..d0887132 --- /dev/null +++ b/regmach.c @@ -0,0 +1,394 @@ +#include "regmach.h" + +/*#define DEBUG*/ +#ifdef DEBUG +#define DBG(x) printf x +#else +#define DBG(x) +#endif + +/* these functions currently assume RGB images - there seems to be some + support for other color spaces, but I can't tell how you find what + space an image is using. + + HSV conversions from pages 401-403 "Procedural Elements for Computer + Graphics", 1985, ISBN 0-07-053534-5. The algorithm presents to produce + an HSV color calculates all components at once - I don't, so I've + simiplified the algorithm to avoid unnecessary calculation (any errors + (of which I had a few ;) are mine). +*/ + +/* returns the value (brightness) of color from 0 to 1 */ +double hsv_value(i_color color) { + return max(max(color.rgb.r, color.rgb.g), color.rgb.b) / 255.0; +} + +/* returns the hue (color) of color from 0 to 360 */ +double hsv_hue(i_color color) { + int val; + int temp; + temp = min(min(color.rgb.r, color.rgb.g), color.rgb.b); + val = max(color.rgb.r, max(color.rgb.g, color.rgb.b)); + if (val == 0 || val==temp) { + return 0; + } + else { + double cr = (val - color.rgb.r) / (double)(val - temp); + double cg = (val - color.rgb.g) / (double)(val - temp); + double cb = (val - color.rgb.b) / (double)(val - temp); + double hue; + if (color.rgb.r == val) { + hue = cb-cg; + } + else if (color.rgb.g == val) { + hue = 2.0 + cr-cb; + } + else { /* if (blue == val) */ + hue = 4.0 + cg - cr; + } + hue *= 60.0; /* to degrees */ + if (hue < 0) + hue += 360; + + return hue; + } +} + +/* return the saturation of color from 0 to 1 */ +double hsv_sat(i_color color) { + int value = max(max(color.rgb.r, color.rgb.g), color.rgb.b); + if (value == 0) { + return 0; + } + else { + int temp = min(max(color.rgb.r, color.rgb.g), color.rgb.b); + return (value - temp) / (double)value; + } +} + +i_color make_hsv(double hue, double sat, double val) { + int i; + i_color c; + for( i=0; i< MAXCHANNELS; i++) c.channel[i]=0; + DBG(("hsv=%f %f %f\n", hue, sat, val)); + if (sat <= 0) { /* handle -ve in case someone supplies a bad value */ + /* should this be * 256? */ + c.rgb.r = c.rgb.g = c.rgb.b = 255 * val; + } + else { + int i, m, n, k, v; + double f; + + if (val < 0) val = 0; + if (val > 1) val = 1; + if (sat > 1) sat = 1; + + /* I want to handle -360 <= hue < 720 so that the caller can + fiddle with colour + */ + if (hue >= 360) + hue -= 360; + else if (hue < 0) + hue += 360; + hue /= 60; + i = hue; /* floor */ + f = hue - i; + val *= 255; + m = val * (1.0 - sat); + n = val * (1.0 - sat * f); + k = val * (1.0 - sat * (1 - f)); + v = val; + switch (i) { + case 0: + c.rgb.r = v; c.rgb.g = k; c.rgb.b = m; + break; + case 1: + c.rgb.r = n; c.rgb.g = v; c.rgb.b = m; + break; + case 2: + c.rgb.r = m; c.rgb.g = v; c.rgb.b = k; + break; + case 3: + c.rgb.r = m; c.rgb.g = n; c.rgb.b = v; + break; + case 4: + c.rgb.r = k; c.rgb.g = m; c.rgb.b = v; + break; + case 5: + c.rgb.r = v; c.rgb.g = m; c.rgb.b = n; + break; + } + } + + return c; +} + +i_color make_rgb(int r, int g, int b) { + i_color c; + if (r < 0) + r = 0; + if (r > 255) + r = 255; + c.rgb.r = r; + if (g < 0) + g = 0; + if (g > 255) + g = 255; + c.rgb.g = g; + if (b < 0) + b = 0; + if (b > 255) + b = 255; + c.rgb.b = b; + + return c; +} + +/* greatly simplifies the code */ +#define nout n_regs[codes->rout] +#define na n_regs[codes->ra] +#define nb n_regs[codes->rb] +#define nc n_regs[codes->rc] +#define nd n_regs[codes->rd] +#define cout c_regs[codes->rout] +#define ca c_regs[codes->ra] +#define cb c_regs[codes->rb] +#define cc c_regs[codes->rc] +#define cd c_regs[codes->rd] + +/* this is a pretty poor epsilon used for loosening up equality comparisons + It isn't currently used for inequalities +*/ + +#define n_epsilon(x, y) (abs(x)+abs(y))*0.001 +static i_color bcol = {{ 0 }}; + +i_color rm_run(struct rm_op codes[], size_t code_count, + double n_regs[], size_t n_regs_count, + i_color c_regs[], size_t c_regs_count, + i_img *images[], size_t image_count) { + double dx, dy; + struct rm_op *codes_base = codes; + size_t count_base = code_count; + DBG(("rm_run(%p, %d)\n", codes, code_count)); + while (code_count) { + DBG((" rm_code %d\n", codes->code)); + switch (codes->code) { + case rbc_add: + nout = na + nb; + break; + + case rbc_subtract: + nout = na - nb; + break; + + case rbc_mult: + nout = na * nb; + break; + + case rbc_div: + if (abs(nb) < 1e-10) + nout = 1e10; + else + nout = na / nb; + break; + + case rbc_mod: + if (abs(nb) > 1e-10) { + nout = fmod(na, nb); + } + else { + nout = 0; /* close enough ;) */ + } + break; + + case rbc_pow: + nout = pow(na, nb); + break; + + case rbc_uminus: + nout = -na; + + case rbc_multp: + cout = make_rgb(ca.rgb.r * nb, ca.rgb.g * nb, ca.rgb.b * nb); + break; + + case rbc_addp: + cout = make_rgb(ca.rgb.r + cb.rgb.r, ca.rgb.g + cb.rgb.g, + ca.rgb.b + cb.rgb.b); + break; + + case rbc_subtractp: + cout = make_rgb(ca.rgb.r - cb.rgb.r, ca.rgb.g - cb.rgb.g, + ca.rgb.b - cb.rgb.b); + break; + + case rbc_sin: + nout = sin(na); + break; + + case rbc_cos: + nout = cos(na); + break; + + case rbc_atan2: + nout = atan2(na, nb); + break; + + case rbc_sqrt: + nout = sqrt(na); + break; + + case rbc_distance: + dx = na-nc; + dy = nb-nd; + nout = sqrt(dx*dx+dy*dy); + break; + + case rbc_getp1: + i_gpix(images[0], na, nb, c_regs+codes->rout); + break; + + case rbc_getp2: + i_gpix(images[1], na, nb, c_regs+codes->rout); + break; + + case rbc_getp3: + i_gpix(images[2], na, nb, c_regs+codes->rout); + break; + + case rbc_value: + nout = hsv_value(ca); + break; + + case rbc_hue: + nout = hsv_hue(ca); + break; + + case rbc_sat: + nout = hsv_sat(ca); + break; + + case rbc_hsv: + cout = make_hsv(na, nb, nc); + break; + + case rbc_red: + nout = ca.rgb.r; + break; + + case rbc_green: + nout = ca.rgb.g; + break; + + case rbc_blue: + nout = ca.rgb.b; + break; + + case rbc_rgb: + cout = make_rgb(na, nb, nc); + break; + + case rbc_int: + nout = (int)(na); + break; + + case rbc_if: + nout = na ? nb : nc; + break; + + case rbc_ifp: + cout = na ? cb : cc; + break; + + case rbc_le: + nout = na <= nb + n_epsilon(na,nb); + break; + + case rbc_lt: + nout = na < nb; + break; + + case rbc_ge: + nout = na >= nb - n_epsilon(na,nb); + break; + + case rbc_gt: + nout = na > nb; + break; + + case rbc_eq: + nout = abs(na-nb) <= n_epsilon(na,nb); + break; + + case rbc_ne: + nout = abs(na-nb) > n_epsilon(na,nb); + break; + + case rbc_and: + nout = na && nb; + break; + + case rbc_or: + nout = na || nb; + break; + + case rbc_not: + nout = !na; + break; + + case rbc_abs: + nout = abs(na); + break; + + case rbc_ret: + return ca; + break; + + case rbc_jump: + /* yes, order is important here */ + code_count = count_base - codes->ra; + codes = codes_base + codes->ra; + continue; + + case rbc_jumpz: + if (!na) { + /* yes, order is important here */ + code_count = count_base - codes->rb; + codes = codes_base + codes->rb; + continue; + } + break; + + case rbc_jumpnz: + if (na) { + /* yes, order is important here */ + code_count = count_base - codes->rb; + codes = codes_base + codes->rb; + continue; + } + break; + + case rbc_set: + nout = na; + break; + + case rbc_setp: + cout = ca; + break; + + case rbc_print: + printf("r%d is %g\n", codes->ra, na); + break; + + default: + /*croak("bad opcode"); */ + printf("bad op %d\n", codes->code); + return bcol; + } + --code_count; + ++codes; + } + return bcol; + /* croak("no return opcode"); */ +} diff --git a/regmach.h b/regmach.h new file mode 100644 index 00000000..275a084f --- /dev/null +++ b/regmach.h @@ -0,0 +1,83 @@ +#ifndef _REGMACH_H_ +#define _REGMACH_H_ + +#include +#include +#include "image.h" + +enum rm_byte_codes { + rbc_add, /* ra + rb -> r*/ + rbc_subtract, /* ra - rb -> r */ + rbc_mult, /* ra * rb -> r */ + rbc_div, /* ra / rb -> r */ + rbc_mod, /* ra % rb -> r */ + rbc_pow, /* ra ** rb -> r */ + rbc_uminus, /* -ra -> r */ + rbc_multp, /* pa ** rb -> p */ + rbc_addp, /* pa + pb -> p */ + rbc_subtractp, /* pa - pb -> p */ + /* rbcParm, we just preload a register */ + rbc_sin, /* sin(ra) -> r */ + rbc_cos, /* cos(ra) -> r */ + rbc_atan2, /* atan2(ra,rb) -> r */ + rbc_sqrt, /* sqrt(ra) -> r */ + rbc_distance, /* distance(rx, ry, rx, ry) -> r */ + /* getp? codes must be in order */ + rbc_getp1, /* getp1(ra, rb) -> p */ + rbc_getp2, /* getp2(ra, rb) -> p */ + rbc_getp3, /* getp3(ra, rb) -> p */ + rbc_value, /* value(pa) -> r */ + rbc_hue, /* hue(pa) -> r */ + rbc_sat, /* sat(pa) -> r */ + rbc_hsv, /* hsv(rh, rs, rv) -> p */ + rbc_red, /* red(pa) -> r */ + rbc_green, /* green(pa) -> r */ + rbc_blue, /* blue(pa) -> r */ + rbc_rgb, /* rgb(rr, rg, rb) -> p */ + rbc_int, /* int(ra) -> r */ + rbc_if, /* if(rc, rt, rf) -> r */ + rbc_ifp, /* if(rc, pt, pf) -> p */ + rbc_le, /* ra <= rb -> r */ + rbc_lt, /* ra < rb -> r */ + rbc_ge, /* ra >= rb -> r */ + rbc_gt, /* ra > rb -> r */ + rbc_eq, /* ra == rb -> r -- does approx equal */ + rbc_ne, /* ra != rb -> r -- does approx equal */ + rbc_and, /* ra && rb -> r */ + rbc_or, /* ra || rb -> r */ + rbc_not, /* !ra -> r */ + rbc_abs, /* abs(ra) -> r */ + rbc_ret, /* returns pa */ + rbc_jump, /* jump to ja */ + rbc_jumpz, /* jump if ra == 0 to jb */ + rbc_jumpnz, /* jump if ra != 0 to jb */ + rbc_set, /* ra -> r */ + rbc_setp, /* pa -> p*/ + rbc_print, /* prints ra */ + rbc_op_count +}; + +/* rm_word was originally char, but even for some simpler expressions + I was getting close to running out of register numbers. + It should also simplify structure alignment issues. (I hope.) +*/ +typedef int rm_word; +#define RM_WORD_PACK "i" + +struct rm_op { + rm_word code; /* op code */ + rm_word ra; /* first operand */ + rm_word rb; /* possible second operand */ + rm_word rc; /* possible third operand */ + rm_word rd; /* possible fourth operand */ + rm_word rout; /* output register */ +}; + +i_color rm_run(struct rm_op codes[], size_t code_count, + double n_regs[], size_t n_regs_count, + i_color c_regs[], size_t c_regs_count, + i_img *images[], size_t image_count); + +/* op_run(fx, sizeof(fx), parms, 2)) */ + +#endif /* _REGMACH_H_ */ diff --git a/regops.perl b/regops.perl new file mode 100644 index 00000000..60fbc3a7 --- /dev/null +++ b/regops.perl @@ -0,0 +1,88 @@ +#!perl -w +use strict; +use Data::Dumper; +my $in = shift or die "No input name"; +my $out = shift or die "No output name"; +open(IN, $in) or die "Cannot open input $in: $!"; +open(OUT, "> $out") or die "Cannot create $out: $!"; +print OUT <<'EOS'; +# AUTOMATICALLY GENERATED BY regops.perl +package Imager::Regops; +use strict; +require Exporter; +use vars qw(@ISA @EXPORT @EXPORT_OK %Attr $MaxOperands $PackCode); +@ISA = qw(Exporter); +@EXPORT_OK = qw(%Attr $MaxOperands $PackCode); + +EOS +my @ops; +my %attr; +my $opcode = 0; +my $max_opr = 0; +my $reg_pack; +while () { + if (/^\s*rbc_(\w+)/) { + my $op = $1; + push(@ops, uc "RBC_$op"); + # each line has a comment with the registers used - find the maximum + # I could probably do this as one line, but let's not + my @parms = /\b([rp][a-z])\b/g; + $max_opr = @parms if @parms > $max_opr; + my $types = join("", map {substr($_,0,1)} @parms); + my ($result) = /->\s*([rp])/; + $attr{$op} = { parms=>scalar @parms, + types=>$types, + func=>/\w+\(/?1:0, + opcode=>$opcode, + result=>$result + }; + print OUT "use constant RBC_\U$op\E => $opcode;\n"; + ++$opcode; + } + if (/^\#define RM_WORD_PACK \"(.)\"/) { + $reg_pack = $1; + } +} +print OUT "\n\@EXPORT = qw(@ops);\n\n"; +print OUT Data::Dumper->Dump([\%attr],["*Attr"]); +print OUT "\$MaxOperands = $max_opr;\n"; +print OUT qq/\$PackCode = "$reg_pack";\n/; +print OUT <<'EOS'; +1; + +__END__ + +=head1 NAME + +Imager::Regops - generated information about the register based VM + +=head1 SYNOPSIS + + use Imager::Regops; + $Imager::Regops::Attr{$opname}->{opcode} # opcode for given operator + $Imager::Regops::Attr{$opname}->{parms} # number of parameters + $Imager::Regops::Attr{$opname}->{types} # types of parameters + $Imager::Regops::Attr{$opname}->{func} # operator is a function + $Imager::Regops::Attr{$opname}->{result} # r for numeric, p for pixel result + $Imager::Regops::MaxOperands; # maximum number of operands + +=head1 DESCRIPTION + +This module is generated automatically from regmach.h so we don't need to +maintain the same information in at least one extra place. + +At least that's the idea. + +=head1 AUTHOR + +Tony Cook, tony@develop-help.com + +=head1 SEE ALSO + +perl(1), Imager(3), http://www.eecs.umich.edu/~addi/perl/Imager/ + +=cut + +EOS +close(OUT) or die "Cannot close $out: $!"; +close IN; diff --git a/spot.perl b/spot.perl new file mode 100644 index 00000000..1b10cfbe --- /dev/null +++ b/spot.perl @@ -0,0 +1,45 @@ +#!perl -w +# takes spot function and builds an ordered dither 8x8 matrix +use strict; +my $func = shift or die "Usage: $0 function [width height expandx expandy]\n"; +my $width = shift || 8; +my $height = shift || 8; +my @spot; +use vars qw($x $y); +for $y (0..$height-1) { + for $x (0..$width-1) { + my $res = eval $func; + $spot[$x+$y*$width] = $res * $res; + } +} +my @sp; +@sp[sort { $spot[$a] <=> $spot[$b] } (0.. $#spot)] = 0..$#spot; + +while (@sp) { + print " ",map(sprintf("%4d,", 4*$_), splice(@sp, 0, $width)),"\n"; +} + +sub min { + my (@data) = @_; + my $min = shift @data; + for (@data) { + $min = $_ if $_ < $min; + } + $min; +} + +sub dist { + my ($x1, $y1) = @_; + return ($x1-$x)*($x1-$x) + ($y1-$y)*($y1-$y); +} + +sub theta { + my ($x1, $y1) = @_; + + return atan2($y1-$y, $x1-$x); +} + +sub dt { + my ($x1, $y1) = @_; + dist($x1, $y1)+theta($x1,$y1)/20; +} diff --git a/stackmach.c b/stackmach.c new file mode 100644 index 00000000..fa526429 --- /dev/null +++ b/stackmach.c @@ -0,0 +1,49 @@ +#include "stackmach.h" + +double +op_run(int codes[], size_t code_size, double parms[], size_t parm_size) { + double stack[100]; + double *sp = stack; + + while (code_size) { + switch (*codes++) { + case bcAdd: + sp[-2] += sp[-1]; + --sp; + break; + + case bcSubtract: + sp[-2] -= sp[-1]; + --sp; + break; + + case bcDiv: + sp[-2] /= sp[-1]; + --sp; + break; + + case bcMult: + sp[-2] *= sp[-1]; + --sp; + break; + + case bcParm: + *sp++ = parms[*codes++]; + --code_size; + break; + + case bcSin: + sp[-1] = sin(sp[-1]); + break; + + case bcCos: + sp[-1] = cos(sp[-1]); + break; + + } + --code_size; + } + + return sp[-1]; +} + diff --git a/stackmach.h b/stackmach.h new file mode 100644 index 00000000..20c31331 --- /dev/null +++ b/stackmach.h @@ -0,0 +1,25 @@ +#ifndef _STACKMACH_H_ +#define _STACKMACH_H_ + +#include +#include + +enum ByteCodes { + bcAdd, + bcSubtract, + bcMult, + bcDiv, + bcParm, + bcSin, + bcCos +}; + +double op_run(int codes[], size_t code_size, double parms[], size_t parm_size); + +/* op_run(fx, sizeof(fx), parms, 2)) */ + + + + + +#endif /* _STACKMACH_H_ */ diff --git a/t/t00basic.t b/t/t00basic.t new file mode 100644 index 00000000..5b1199f4 --- /dev/null +++ b/t/t00basic.t @@ -0,0 +1,28 @@ +# Before `make install' is performed this script should be runnable with +# `make test'. After `make install' it should work as `perl test.pl' + +######################### We start with some black magic to print on failure. + +# Change 1..1 below to 1..last_test_to_print . +# (It may become useful if the test is moved to ./t subdirectory.) + +BEGIN { $| = 1; print "1..2\n"; } +END {print "not ok 1\n" unless $loaded;} +use Imager; +#use Data::Dumper; +$loaded = 1; +print "ok 1\n"; + +init_log("testout/t00basic.log",1); + +#list_formats(); + +#%hsh=%Imager::formats; +#print Dumper(\%hsh); + +i_has_format("jpeg") && print "# has jpeg\n"; +i_has_format("png") && print "# has png\n"; + +print "ok 2\n"; + +malloc_state(); \ No newline at end of file diff --git a/t/t10formats.t b/t/t10formats.t new file mode 100644 index 00000000..0e5526b9 --- /dev/null +++ b/t/t10formats.t @@ -0,0 +1,362 @@ +# Before `make install' is performed this script should be runnable with +# `make test'. After `make install' it should work as `perl test.pl' + +######################### We start with some black magic to print on failure. + +# Change 1..1 below to 1..last_test_to_print . +# (It may become useful if the test is moved to ./t subdirectory.) +use lib qw(blib/lib blib/arch); + +BEGIN { $| = 1; print "1..26\n"; } +END {print "not ok 1\n" unless $loaded;} +use Imager qw(:all); + +$loaded = 1; +print "ok 1\n"; + + + +init_log("testout/t10formats.log",1); + +i_has_format("jpeg") && print "# has jpeg\n"; +i_has_format("tiff") && print "# has tiff\n"; +i_has_format("png") && print "# has png\n"; +i_has_format("gif") && print "# has gif\n"; + +$green=i_color_new(0,255,0,255); +$blue=i_color_new(0,0,255,255); +$red=i_color_new(255,0,0,255); + +$img=Imager::ImgRaw::new(150,150,3); +$cmpimg=Imager::ImgRaw::new(150,150,3); + +i_box_filled($img,70,25,130,125,$green); +i_box_filled($img,20,25,80,125,$blue); +i_arc($img,75,75,30,0,361,$red); +i_conv($img,[0.1, 0.2, 0.4, 0.2, 0.1]); + +if (!i_has_format("jpeg")) { + print "ok 2 # skip\n"; + print "ok 3 # skip\n"; +} else { + open(FH,">testout/t10.jpg") || die "cannot open testout/t10.jpg for writing\n"; + binmode(FH); + i_writejpeg($img,fileno(FH),30); + close(FH); + + print "ok 2\n"; + + open(FH,"testout/t10.jpg") || die "cannot open testout/t10.jpg\n"; + binmode(FH); + + ($cmpimg,undef)=i_readjpeg(fileno(FH)); + close(FH); + + print "# jpeg average mean square pixel difference: ",sqrt(i_img_diff($img,$cmpimg))/150*150,"\n"; + print "ok 3\n"; +} + +if (!i_has_format("png")) { + print "ok 4 # skip\n"; + print "ok 5 # skip\n"; +} else { + open(FH,">testout/t10.png") || die "cannot open testout/t10.png for writing\n"; + binmode(FH); + i_writepng($img,fileno(FH)) || die "Cannot write testout/t10.png\n"; + close(FH); + + print "ok 4\n"; + + open(FH,"testout/t10.png") || die "cannot open testout/t10.png\n"; + binmode(FH); + $cmpimg=i_readpng(fileno(FH)) || die "Cannot read testout/t10.pmg\n"; + close(FH); + + print "# png average mean square pixel difference: ",sqrt(i_img_diff($img,$cmpimg))/150*150,"\n"; + print "ok 5\n"; +} + +open(FH,">testout/t10.raw") || die "Cannot open testout/t10.raw for writing\n"; +binmode(FH); +i_writeraw($img,fileno(FH)) || die "Cannot write testout/t10.raw\n"; +close(FH); + +print "ok 6\n"; + +open(FH,"testout/t10.raw") || die "Cannot open testout/t15.raw\n"; +binmode(FH); +$cmpimg=i_readraw(fileno(FH),150,150,3,3,0) || die "Cannot read testout/t10.raw\n"; +close(FH); + +print "# raw average mean square pixel difference: ",sqrt(i_img_diff($img,$cmpimg))/150*150,"\n"; +print "ok 7\n"; + +open(FH,">testout/t10.ppm") || die "Cannot open testout/t10.ppm\n"; +binmode(FH); +i_writeppm($img,fileno(FH)) || die "Cannot write testout/t10.ppm\n"; +close(FH); + +print "ok 8\n"; + +open(FH,"testout/t10.ppm") || die "Cannot open testout/t10.ppm\n"; +binmode(FH); + +my $IO = Imager::io_new_fd(fileno(FH)); +$cmpimg=i_readpnm_wiol($IO,-1) || die "Cannot read testout/t10.ppm\n"; +close(FH); + +print "ok 9\n"; + +if (!i_has_format("gif")) { + for (10..23) { print "ok $_ # skip\n"; } +} else { + open(FH,">testout/t10.gif") || die "Cannot open testout/t10.gif\n"; + binmode(FH); + i_writegifmc($img,fileno(FH),7) || die "Cannot write testout/t10.gif\n"; + close(FH); + + print "ok 10\n"; + + open(FH,"testout/t10.gif") || die "Cannot open testout/t10.gif\n"; + binmode(FH); + $img=i_readgif(fileno(FH)) || die "Cannot read testout/t10.gif\n"; + close(FH); + + print "ok 11\n"; + + open(FH,"testout/t10.gif") || die "Cannot open testout/t10.gif\n"; + binmode(FH); + ($img, $palette)=i_readgif(fileno(FH)); + $img || die "Cannot read testout/t10.gif\n"; + close(FH); + + $palette=''; # just to skip a warning. + + print "ok 12\n"; + + # check that reading interlaced/non-interlaced versions of + # the same GIF produce the same image + open(FH, "testout/t10i.ppm" or die "Cannot create testout/t10i.ppm"; + binmode FH; + i_writeppm($imgi, fileno(FH)) or die "Cannot write testout/t10i.ppm"; + close FH; + + open FH, ">testout/t10ni.ppm" or die "Cannot create testout/t10ni.ppm"; + binmode FH; + i_writeppm($imgni, fileno(FH)) or die "Cannot write testout/t10ni.ppm"; + close FH; + + # compare them + open FH, " }; + close FH; + open FH, " }; + close FH; + if ($datai eq $datani) { + print "ok 15\n"; + } + else { + print "not ok 15\n"; + } + + # reading with a callback + # various sizes to make sure the buffering works + # requested size + open FH, "testout/t10_mc.gif" or die "Cannot open testout/t10_mc.gif"; + binmode FH; + i_writegifmc($img, fileno(FH), 7) or die "Cannot write testout/t10_mc.gif"; + close(FH); + + # new writegif_gen + # test webmap, custom errdiff map + # (looks fairly awful) + open FH, ">testout/t10_gen.gif" or die $!; + binmode FH; + i_writegif_gen(fileno(FH), { make_colors=>'webmap', + translate=>'errdiff', + errdiff=>'custom', + errdiff_width=>2, + errdiff_height=>2, + errdiff_map=>[0, 1, 1, 0]}, $img) + or die "Cannot writegif_gen"; + close FH; + print "ok 20\n"; + + print "# the following tests are fairly slow\n"; + + # test animation, mc_addi, error diffusion, ordered transparency + my @imgs; + my $sortagreen = i_color_new(0, 255, 0, 63); + for my $i (0..4) { + my $im = Imager::ImgRaw::new(200, 200, 4); + for my $j (0..$i-1) { + my $fill = i_color_new(0, 128, 0, 255 * ($i-$j)/$i); + i_box_filled($im, 0, $j*40, 199, $j*40+40, $fill); + } + i_box_filled($im, 0, $i*40, 199, 199, $blue); + push(@imgs, $im); + } + my @gif_delays = (50) x 5; + my @gif_disposal = (2) x 5; + open FH, ">testout/t10_anim.gif" or die $!; + binmode FH; + i_writegif_gen(fileno(FH), { make_colors=>'addi', + translate=>'closest', + gif_delays=>\@gif_delays, + gif_disposal=>\@gif_disposal, + transp=>'ordered', + tr_orddith=>'dot8'}, @imgs) + or die "Cannot write anim gif"; + close FH; + print "ok 21\n"; + + unless (fork) { + # this can SIGSEGV with some versions of giflib + open FH, ">testout/t10_anim_cb.gif" or die $!; + i_writegif_callback(sub { + print FH $_[0] + }, + -1, # max buffering + { make_colors=>'webmap', + translate=>'closest', + gif_delays=>\@gif_delays, + gif_disposal=>\@gif_disposal, + #transp=>'ordered', + tr_orddith=>'dot8'}, @imgs) + or die "Cannot write anim gif"; + close FH; + print "ok 22\n"; + exit; + } + if (wait > 0 && $?) { + print "not ok 22 # you probably need to patch giflib\n"; + print <HashTable = _InitHashTable()) == NULL) { +#+ free(GifFile); +#+ free(Private); +#+ _GifError = E_GIF_ERR_NOT_ENOUGH_MEM; +#+ return NULL; +#+ } +# +# GifFile->Private = (VoidPtr) Private; +# Private->FileHandle = 0; +EOS + } + @imgs = (); + for $g (0..3) { + my $im = Imager::ImgRaw::new(200, 200, 3); + for my $x (0 .. 39) { + for my $y (0 .. 39) { + my $c = i_color_new($x * 6, $y * 6, 32*$g+$x+$y, 255); + i_box_filled($im, $x*5, $y*5, $x*5+4, $y*5+4, $c); + } + } + push(@imgs, $im); + } + # test giflib with multiple palettes + # (it was meant to test the NS loop extension too, but that's broken) + # this looks better with make_colors=>'addi', translate=>'errdiff' + # this test aims to overload the palette for each image, so the + # output looks moderately horrible + open FH, ">testout/t10_mult_pall.gif" or die "Cannot create file: $!"; + binmode FH; + i_writegif_gen(fileno(FH), { make_colors=>'webmap', + translate=>'giflib', + gif_delays=>[ 50, 50, 50, 50 ], + #gif_loop_count => 50, + gif_each_palette => 1, + }, @imgs); + close FH; + print "ok 23\n"; + +} + + + +if (!i_has_format("tiff")) { + print "ok 24 # skip\n"; + print "ok 25 # skip\n"; + print "ok 26 # skip\n"; +} else { + open(FH,">testout/t10.tiff") || die "cannot open testout/t10.tiff for writing\n"; + binmode(FH); + my $IO = Imager::io_new_fd(fileno(FH)); + i_writetiff_wiol($img, $IO); + close(FH); + + print "ok 24\n"; + + open(FH,"testout/t10.tiff") or die "cannot open testout/t10.tiff\n"; + binmode(FH); + $IO = Imager::io_new_fd(fileno(FH)); + $cmpimg = i_readtiff_wiol($IO, -1); + + close(FH); + + print "# tiff average mean square pixel difference: ",sqrt(i_img_diff($img,$cmpimg))/150*150,"\n"; + print "ok 25\n"; + + $IO = Imager::io_new_bufchain(); + + Imager::i_writetiff_wiol($img, $IO) or die "Cannot write to bufferchain\n"; + my $tiffdata = Imager::io_slurp($IO); + + open(FH,"testout/t10.tiff"); + my $odata; + { local $/; + $odata = ; + } + + if ($odata eq $tiffdata) { + print "ok 26\n"; + } else { + print "not ok 26\n"; + } + + + +} + + + +sub test_readgif_cb { + my ($size) = @_; + + open FH, "new(100, 150, 200, 250); +print test_col($c1, 100, 150, 200, 250) ? "ok 2\n" : "not ok 2\n"; +my $c2 = Imager::Color->new(100, 150, 200); +print test_col($c2, 100, 150, 200, 255) ? "ok 3\n" : "not ok 3\n"; +my $c3 = Imager::Color->new("#6496C8"); +print test_col($c3, 100, 150, 200, 255) ? "ok 4\n" : "not ok 4\n"; + +sub test_col { + my ($c, $r, $g, $b, $a) = @_; + my ($cr, $cg, $cb, $ca) = $c->rgba; + return $r == $cr && $g == $cg && $b == $cb && $a == $ca; +} + + diff --git a/t/t30t1font.t b/t/t30t1font.t new file mode 100644 index 00000000..b96abca7 --- /dev/null +++ b/t/t30t1font.t @@ -0,0 +1,86 @@ +# Before `make install' is performed this script should be runnable with +# `make test'. After `make install' it should work as `perl test.pl' + +######################### We start with some black magic to print on failure. + +# Change 1..1 below to 1..last_test_to_print . +# (It may become useful if the test is moved to ./t subdirectory.) + +BEGIN { $| = 1; print "1..4\n"; } +END {print "not ok 1\n" unless $loaded;} +use Imager qw(:all); +use Imager::Color; + +$loaded = 1; +print "ok 1\n"; + +#$Imager::DEBUG=1; + +init_log("testout/t30t1font.log",1); + +if (!(i_has_format("t1")) ) { + print "ok 2 # skip\n"; + print "ok 3 # skip\n"; + print "ok 4 # skip\n"; +} else { + + print "# has t1\n"; + + $fontname_pfb=$ENV{'T1FONTTESTPFB'}||'./fontfiles/dcr10.pfb'; + $fontname_afm=$ENV{'T1FONTTESTAFM'}||'./fontfiles/dcr10.afm'; + + if (! -f $fontname_pfb) { + print "# cannot find fontfile for truetype test $fontname_pfb\n"; + skip(); + } + + if (! -f $fontname_afm) { + print "# cannot find fontfile for truetype test $fontname_afm\n"; + skip(); + } + + i_init_fonts(); + i_t1_set_aa(1); + + $fnum=Imager::i_t1_new($fontname_pfb,$fontname_afm); # this will load the pfb font + if ($fnum<0) { die "Couldn't load font $fontname_pfb"; } + + $bgcolor=Imager::Color->new(255,0,0,0); + $overlay=Imager::ImgRaw::new(200,70,3); + + i_t1_cp($overlay,5,50,1,$fnum,50.0,'XMCLH',5,1); + i_draw($overlay,0,50,100,50,$bgcolor); + + @bbox=i_t1_bbox(0,50.0,'XMCLH',5); + print "bbox: ($bbox[0], $bbox[1]) - ($bbox[2], $bbox[3])\n"; + + open(FH,">testout/t30t1font.ppm") || die "cannot open testout/t35t1font.ppm\n"; + binmode(FH); # for os2 + i_writeppm($overlay,fileno(FH)); + close(FH); + + print "ok 2\n"; + + $bgcolor=Imager::Color::set($bgcolor,200,200,200,0); + $backgr=Imager::ImgRaw::new(280,150,3); + + i_t1_set_aa(2); + i_t1_text($backgr,10,100,$bgcolor,$fnum,150.0,'test',4,1); + + open(FH,">testout/t30t1font2.ppm") || die "cannot open testout/t35t1font.ppm\n"; + binmode(FH); + i_writeppm($backgr,fileno(FH)); + close(FH); + + print "ok 3\n"; + + $rc=i_t1_destroy($fnum); + if ($fnum <0) { die "i_t1_destroy failed: rc=$rc\n"; } + + print "ok 4\n"; + + print "# debug: ",join(" x ",i_t1_bbox(0,50,"eses",4) ),"\n"; + print "# debug: ",join(" x ",i_t1_bbox(0,50,"llll",4) ),"\n"; +} + +#malloc_state(); diff --git a/t/t35ttfont.t b/t/t35ttfont.t new file mode 100644 index 00000000..44acbd40 --- /dev/null +++ b/t/t35ttfont.t @@ -0,0 +1,71 @@ +# Before `make install' is performed this script should be runnable with +# `make test'. After `make install' it should work as `perl test.pl' + +######################### We start with some black magic to print on failure. + +# Change 1..1 below to 1..last_test_to_print . +# (It may become useful if the test is moved to ./t subdirectory.) + +BEGIN { $| = 1; print "1..3\n"; } +END {print "not ok 1\n" unless $loaded;} +use Imager qw(:all); +$loaded = 1; +print "ok 1\n"; + +init_log("testout/t35ttfont.log",1); + +sub skip { + print "ok 2 # skip\n"; + print "ok 3 # skip\n"; + malloc_state(); + exit(0); +} + +if (!(i_has_format("tt")) ) { skip(); } +print "# has tt\n"; + +$fontname=$ENV{'TTFONTTEST'}||'./fontfiles/dodge.ttf'; + +if (! -f $fontname) { + print "# cannot find fontfile for truetype test $fontname\n"; + skip(); +} + +i_init_fonts(); +# i_tt_set_aa(1); + +$bgcolor=i_color_new(255,0,0,0); +$overlay=Imager::ImgRaw::new(200,70,3); + +$ttraw=Imager::i_tt_new($fontname); + +#use Data::Dumper; +#warn Dumper($ttraw); + +@bbox=i_tt_bbox($ttraw,50.0,'XMCLH',5); +print "#bbox: ($bbox[0], $bbox[1]) - ($bbox[2], $bbox[3])\n"; + +i_tt_cp($ttraw,$overlay,5,50,1,50.0,'XMCLH',5,1); +i_draw($overlay,0,50,100,50,$bgcolor); + +open(FH,">testout/t35ttfont.ppm") || die "cannot open testout/t35ttfont.ppm\n"; +binmode(FH); +i_writeppm($overlay,fileno(FH)); +close(FH); + +print "ok 2\n"; + +$bgcolor=i_color_set($bgcolor,200,200,200,0); +$backgr=Imager::ImgRaw::new(500,300,3); + +# i_tt_set_aa(2); + +i_tt_text($ttraw,$backgr,100,100,$bgcolor,50.0,'test',4,1); + +open(FH,">testout/t35ttfont2.ppm") || die "cannot open testout/t35ttfont.ppm\n"; +binmode(FH); +i_writeppm($backgr,fileno(FH)); +close(FH); + +print "ok 3\n"; + diff --git a/t/t36oofont.t b/t/t36oofont.t new file mode 100644 index 00000000..f42f9ef2 --- /dev/null +++ b/t/t36oofont.t @@ -0,0 +1,96 @@ +#!/usr/bin/perl -w +use strict; + +#use lib qw(blib/lib blib/arch); + +# Before `make install' is performed this script should be runnable with +# `make test'. After `make install' it should work as `perl test.pl' + +######################### We start with some black magic to print on failure. + +# Change 1..1 below to 1..last_test_to_print . +# (It may become useful if the test is moved to ./t subdirectory.) + +BEGIN { $| = 1; print "1..7\n"; } +END {print "not ok 1\n" unless $::loaded;} +use Imager; +$::loaded=1; +print "ok 1\n"; + +init_log("testout/t36oofont.log", 1); + +my $fontname_tt=$ENV{'TTFONTTEST'}||'./fontfiles/dodge.ttf'; +my $fontname_pfb=$ENV{'T1FONTTESTPFB'}||'./fontfiles/dcr10.pfb'; + + +my $green=Imager::Color->new(92,205,92,128); +die $Imager::ERRSTR unless $green; +my $red=Imager::Color->new(205, 92, 92, 255); +die $Imager::ERRSTR unless $red; + + + +if (i_has_format("t1") and -f $fontname_pfb) { + + my $img=Imager->new(xsize=>300, ysize=>100) or die "$Imager::ERRSTR\n"; + + my $font=Imager::Font->new(file=>$fontname_pfb,size=>25) + or die $img->{ERRSTR}; + + print "ok 2\n"; + + $img->string(font=>$font, text=>"XMCLH", 'x'=>100, 'y'=>100) + or die $img->{ERRSTR}; + + print "ok 3\n"; + + $img->line(x1=>0, x2=>300, y1=>50, y2=>50, color=>$green); + + my $text="LLySja"; + my @bbox=$font->bounding_box(string=>$text, 'x'=>0, 'y'=>50); + + print @bbox ? '' : 'not ', "ok 4\n"; + + $img->box(box=>\@bbox, color=>$green); + + $img->write(file=>"testout/t36oofont1.ppm", type=>'pnm') + or die "cannot write to testout/t36oofont1.ppm: $img->{ERRSTR}\n"; + +} else { + print "ok 2 # skip\n"; + print "ok 3 # skip\n"; + print "ok 4 # skip\n"; +} + +if (i_has_format("tt") and -f $fontname_tt) { + + my $img=Imager->new(xsize=>300, ysize=>100) or die "$Imager::ERRSTR\n"; + + my $font=Imager::Font->new(file=>$fontname_tt,size=>25) + or die $img->{ERRSTR}; + + print "ok 5\n"; + + $img->string(font=>$font, text=>"XMCLH", 'x'=>100, 'y'=>100) + or die $img->{ERRSTR}; + + print "ok 6\n"; + + $img->line(x1=>0, x2=>300, y1=>50, y2=>50, color=>$green); + + my $text="LLySja"; + my @bbox=$font->bounding_box(string=>$text, 'x'=>0, 'y'=>50); + + print @bbox ? '' : 'not ', "ok 7\n"; + + $img->box(box=>\@bbox, color=>$green); + + $img->write(file=>"testout/t36oofont2.ppm", type=>'pnm') + or die "cannot write to testout/t36oofont2.ppm: $img->{ERRSTR}\n"; + +} else { + print "ok 5 # skip\n"; + print "ok 6 # skip\n"; + print "ok 7 # skip\n"; +} + diff --git a/t/t40scale.t b/t/t40scale.t new file mode 100644 index 00000000..11bb61d1 --- /dev/null +++ b/t/t40scale.t @@ -0,0 +1,36 @@ +# Before `make install' is performed this script should be runnable with +# `make test'. After `make install' it should work as `perl test.pl' + +######################### We start with some black magic to print on failure. + +# Change 1..1 below to 1..last_test_to_print . +# (It may become useful if the test is moved to ./t subdirectory.) + +BEGIN { $| = 1; print "1..6\n"; } +END {print "not ok 1\n" unless $loaded;} + +use Imager qw(:all); + +$loaded = 1; + +Imager::init('log'=>'testout/t40scale.log'); +print "ok 1\n"; + +$img=Imager->new(); + +$img->open(file=>'testimg/scale.ppm',type=>'pnm') or print "failed: ",$scaleimg->{ERRSTR},"\n"; +print "ok 2\n"; + +$scaleimg=$img->scale(scalefactor=>0.25) or print "failed: ",$scaleimg->{ERRSTR},"\n"; +print "ok 3\n"; + +$scaleimg->write(file=>'testout/t40scale1.ppm',type=>'pnm') or print "failed: ",$scaleimg->{ERRSTR},"\n"; +print "ok 4\n"; + +$scaleimg=$img->scale(scalefactor=>0.25,qtype=>'preview') or print "failed: ",$scaleimg->{ERRSTR},"\n"; +print "ok 5\n"; + +$scaleimg->write(file=>'testout/t40scale2.ppm',type=>'pnm') or print "failed: ",$scaleimg->{ERRSTR},"\n"; +print "ok 6\n"; + + diff --git a/t/t50basicoo.t b/t/t50basicoo.t new file mode 100644 index 00000000..f6b74f68 --- /dev/null +++ b/t/t50basicoo.t @@ -0,0 +1,50 @@ +# Before `make install' is performed this script should be runnable with +# `make test'. After `make install' it should work as `perl test.pl' + +######################### We start with some black magic to print on failure. + +# Change 1..1 below to 1..last_test_to_print . +# (It may become useful if the test is moved to ./t subdirectory.) + +BEGIN { $| = 1; print "1..2\n"; } +END {print "not ok 1\n" unless $loaded;} +use Imager; +#use Data::Dumper; +$loaded = 1; + +print "ok 1\n"; + +init_log("testout/t00basicoo.log",1); + +#list_formats(); + +%hsh=%Imager::formats; + +print "# avaliable formats:\n"; +for(keys %hsh) { print "# $_\n"; } + +#print Dumper(\%hsh); + +$img = Imager->new(); + +@all=qw(tiff gif jpg png ppm raw); + +for(@all) { + if (!$hsh{$_}) { next; } + print "#opening Format: $_\n"; + if ($_ eq "raw") { + $img->read(file=>"testout/t10.$_",type=>'raw', xsize=>150,ysize=>150) or die "failed: ",$img->{ERRSTR},"\n"; + } else { + $img->read(file=>"testout/t10.$_") or die "failed: ",$img->{ERRSTR},"\n"; + } +} + +$img2=$img->crop(width=>50,height=>50); +$img2->write(file=>'testout/t50.ppm',type=>'pnm'); + +undef($img); + +malloc_state(); + + +print "ok 2\n"; diff --git a/t/t55trans.t b/t/t55trans.t new file mode 100644 index 00000000..7aa2462b --- /dev/null +++ b/t/t55trans.t @@ -0,0 +1,53 @@ +BEGIN { $| = 1; print "1..5\n"; } +END {print "not ok 1\n" unless $loaded;} +use Imager; + +$loaded = 1; + +#$Imager::DEBUG=1; + +Imager::init('log'=>'testout/t55trans.log'); + +$img=Imager->new() || die "unable to create image object\n"; + +print "ok 1\n"; + +$img->open(file=>'testimg/scale.ppm',type=>'pnm'); + +sub skip { + print "ok 2 # skip $_[0]\n"; + print "ok 3 # skip $_[0]\n"; + print "ok 4 # skip $_[0]\n"; + print "ok 5 # skip $_[0]\n"; + exit(0); +} + + +$nimg=$img->transform(xexpr=>'x',yexpr=>'y+10*sin((x+y)/10)') || skip ( "\# warning ".$img->{'ERRSTR'} ); + +# xopcodes=>[qw( x y Add)],yopcodes=>[qw( x y Sub)],parm=>[] + +print "ok 2\n"; +$nimg->write(type=>'pnm',file=>'testout/t55.ppm') || die "error in write()\n"; + +print "ok 3\n"; + +# the original test didn't produce many parameters - this one +# produces more parameters, which revealed a memory allocation bug +# (sizeof(double) vs sizeof(int)) +sub skip2 { + print "ok 4 # skip $_[0]\n"; + print "ok 5 # skip $_[0]\n"; + exit(0); +} +$nimg=$img->transform(xexpr=>'x+0.1*y+5*sin(y/10.0+1.57)', + yexpr=>'y+10*sin((x+y-0.785)/10)') + || skip2 ( "\# warning ".$img->{'ERRSTR'} ); + +print "ok 4\n"; +$nimg->write(type=>'pnm',file=>'testout/t55b.ppm') + || die "error in write()\n"; + +print "ok 5\n"; + + diff --git a/t/t56postfix.t b/t/t56postfix.t new file mode 100644 index 00000000..4ef18a33 --- /dev/null +++ b/t/t56postfix.t @@ -0,0 +1,28 @@ +BEGIN { $| = 1; print "1..6\n"; } +END {print "not ok 1\n" unless $loaded;} +use Imager::Expr; + +$loaded = 1; +print "ok 1\n"; + +#$Imager::DEBUG=1; + +my $expr = Imager::Expr->new({rpnexpr=>'x two * y one + getp1', variables=>[ qw(x y) ], constants=>{one=>1, two=>2}}); +if ($expr) { + print "ok 2\n"; + + # perform some basic validation on the code + my $code = $expr->dumpcode(); + my @code = split /\n/, $code; + print $code[-1] =~ /:\s+ret/ ? "ok 3\n" : "not ok 3\n"; + print grep(/:\s+mult.*x/, @code) ? "ok 4\n" : "not ok 4\n"; + print grep(/:\s+add.*y/, @code) ? "ok 5\n" : "not ok 5\n"; + print grep(/:\s+getp1/, @code) ? "ok 6\n" : "not ok 6\n"; +} +else { + print "not ok 2 ",Imager::Expr::error(),"\n"; + print "not ok 3 # skip\n"; + print "not ok 4 # skip\n"; + print "not ok 5 # skip\n"; + print "not ok 6 # skip\n"; +} diff --git a/t/t57infix.t b/t/t57infix.t new file mode 100644 index 00000000..f448185e --- /dev/null +++ b/t/t57infix.t @@ -0,0 +1,43 @@ +BEGIN { $| = 1; print "1..7\n"; } +END {print "not ok 1\n" unless $loaded;} +use Imager::Expr; + +$loaded = 1; +print "ok 1\n"; + +# only test this if Parse::RecDescent was loaded successfully +eval "use Parse::RecDescent"; +if (!$@) { + my $opts = {expr=>'z=0.8;return hsv(x/w*360,y/h,z)', variables=>[ qw(x y) ], constants=>{h=>100,w=>100}}; + my $expr = Imager::Expr->new($opts); + if ($expr) { + print "ok 2\n"; + my $code = $expr->dumpcode(); + my @code = split /\n/,$code; + #print $code; + print $code[-1] =~ /:\s+ret/ ? "ok 3\n" : "not ok 3\n"; + print grep(/:\s+mult.*360/, @code) ? "ok 4\n" : "not ok 4\n"; + # strength reduction converts these to mults + #print grep(/:\s+div.*x/, @code) ? "ok 5\n" : "not ok 5\n"; + #print grep(/:\s+div.*y/, @code) ? "ok 6\n" : "not ok 6\n"; + print grep(/:\s+mult.*x/, @code) ? "ok 5\n" : "not ok 5\n"; + print grep(/:\s+mult.*y/, @code) ? "ok 6\n" : "not ok 6\n"; + print grep(/:\s+hsv.*0\.8/, @code) ? "ok 7\n" : "not ok 7\n"; + } + else { + print "not ok 2 # ",Imager::Expr::error(),"\n"; + print "not ok 3 # skipped\n"; + print "not ok 4 # skipped\n"; + print "not ok 5 # skipped\n"; + print "not ok 6 # skipped\n"; + print "not ok 7 # skipped\n"; + } +} +else { + print "ok 2 # skipped - no Parse::RecDescent\n"; + print "ok 3 # skipped - no Parse::RecDescent\n"; + print "ok 4 # skipped - no Parse::RecDescent\n"; + print "ok 5 # skipped - no Parse::RecDescent\n"; + print "ok 6 # skipped - no Parse::RecDescent\n"; + print "ok 7 # skipped - no Parse::RecDescent\n"; +} diff --git a/t/t58trans2.t b/t/t58trans2.t new file mode 100644 index 00000000..1fcb570c --- /dev/null +++ b/t/t58trans2.t @@ -0,0 +1,55 @@ +BEGIN { $| = 1; print "1..6\n"; } +END {print "not ok 1\n" unless $loaded;} +use Imager; + +$loaded = 1; +print "ok 1\n"; + +#$Imager::DEBUG=1; + +Imager::init('log'=>'testout/t56trans2.log'); + +my $im1 = Imager->new(); +$im1->open(file=>'testimg/penguin-base.ppm', type=>'pnm') + || die "Cannot read image"; +my $im2 = Imager->new(); +$im2->open(file=>'testimg/scale.ppm',type=>'pnm') + || die "Cannot read testimg/scale.ppm"; + +# error handling +my $opts = { rpnexpr=>'x x 10 / sin 10 * y + get1' }; +my $im3 = Imager::transform2($opts); +print $im3 ? "not ok 2\n" : "ok 2\n"; +print defined($Imager::ERRSTR) ? "ok 3\n" : "not ok 3\n"; + +# image synthesis +my $im4 = Imager::transform2({ + width=>300, height=>300, + rpnexpr=>'x y cx cy distance !d y cy - x cx - atan2 !a @d 10 / @a + 3.1416 2 * % !a2 @a2 cy * 3.1416 / 1 @a2 sin 1 + 2 / hsv'}); +print $im4 ? "ok 4\n" : "not ok 4\n"; + +if ($im4) { + $im4->write(type=>'pnm', file=>'testout/t56a.ppm') + || die "Cannot write testout/t56a.ppm"; +} + +# image distortion +my $im5 = Imager::transform2({ + rpnexpr=>'x x 10 / sin 10 * y + getp1' +}, $im1); +print $im5 ? "ok 5\n" : "not ok 5\n"; +if ($im5) { + $im5->write(type=>'pnm', file=>'testout/t56b.ppm') + || die "Cannot write testout/t56b.ppm"; +} + +# image combination +$opts = { +rpnexpr=>'x h / !rat x w2 % y h2 % getp2 !pat x y getp1 @rat * @pat 1 @rat - * +' +}; +my $im6 = Imager::transform2($opts,$im1,$im2); +print $im6 ? "ok 6\n" : "not ok 6 # $opts->{error}\n"; +if ($im6) { + $im6->write(type=>'pnm', file=>'testout/t56c.ppm') + || die "Cannot write testout/t56c.ppm"; +} diff --git a/t/t59assem.t b/t/t59assem.t new file mode 100644 index 00000000..b60e0ffb --- /dev/null +++ b/t/t59assem.t @@ -0,0 +1,38 @@ +BEGIN { $| = 1; print "1..6\n"; } +END { print "not ok 1\n" unless $loaded;} +use Imager::Expr::Assem; + +$loaded = 1; +print "ok 1\n"; + +my $expr = Imager::Expr->new + ({assem=><[qw(x y)], + constants=>{totalcount=>5} + }); +if ($expr) { + print "ok 2\n"; + my $code = $expr->dumpcode(); + my @code = split /\n/, $code; + print $code[-1] =~ /:\s+ret/ ? "ok\n" : "not ok # missing ret\n"; + print $code[0] =~ /:\s+set/ ? "ok\n" : "not ok # missing set\n"; + print $code[1] =~ /:\s+getp1/ ? "ok\n" : "not ok # missing getp1\n"; + print $code[3] =~ /:\s+lt/ ? "ok\n" : "not ok # missing lt\n"; +} +else { + print "not ok 2 #",Imager::Expr->error(),"\n"; + for (3..6) { + print "not ok $_\n"; + } +} diff --git a/t/t60dyntest.t b/t/t60dyntest.t new file mode 100644 index 00000000..1fc3eabd --- /dev/null +++ b/t/t60dyntest.t @@ -0,0 +1,29 @@ +BEGIN { $| = 1; print "1..3\n"; } +END {print "not ok 1\n" unless $loaded;} +use Imager qw(:default); +use Config; +$loaded = 1; + +#$Imager::DEBUG=1; + +Imager::init('log'=>'testout/t60dyntest.log'); + +$img=Imager->new() || die "unable to create image object\n"; + +$img->open(file=>'testout/t10.ppm',type=>'pnm') || die "failed: ",$img->{ERRSTR},"\n"; + +$plug='dynfilt/dyntest.'.$Config{'so'}; +load_plugin($plug) || die "unable to load plugin:\n$Imager::ERRSTR\n"; + +print "ok\nok\n"; # exit; + +%hsh=(a=>35,b=>200,type=>lin_stretch); +$img->filter(%hsh); + +$img->write(type=>'pnm',file=>'testout/t60.ppm') || die "error in write()\n"; + +unload_plugin($plug) || die "unable to unload plugin: $Imager::ERRSTR\n"; + +print "ok\n"; + + diff --git a/t/t65crop.t b/t/t65crop.t new file mode 100644 index 00000000..fe0e91d8 --- /dev/null +++ b/t/t65crop.t @@ -0,0 +1,33 @@ +BEGIN { $| = 1; print "1..3\n"; } +END {print "not ok 1\n" unless $loaded;} +use Imager; + +$loaded = 1; + +#$Imager::DEBUG=1; + +Imager::init('log'=>'testout/t65crop.log'); + +$img=Imager->new() || die "unable to create image object\n"; + +print "ok 1\n"; + +$img->open(file=>'testimg/scale.ppm',type=>'pnm'); + +sub skip { + print $_[0]; + print "ok 2 # skip\n"; + print "ok 3 # skip\n"; + exit(0); +} + + +$nimg=$img->crop(top=>10, left=>10, bottom=>25, right=>25) + or skip ( "\# warning ".$img->{'ERRSTR'}."\n" ); + +# xopcodes=>[qw( x y Add)],yopcodes=>[qw( x y Sub)],parm=>[] + +print "ok 2\n"; +$nimg->write(type=>'pnm',file=>'testout/t65.ppm') || die "error in write()\n"; + +print "ok 3\n"; diff --git a/t/t66paste.t b/t/t66paste.t new file mode 100644 index 00000000..5a6ef2ee --- /dev/null +++ b/t/t66paste.t @@ -0,0 +1,28 @@ +BEGIN { $| = 1; print "1..4\n"; } +END {print "not ok 1\n" unless $loaded;} +use Imager; + +$loaded = 1; + +#$Imager::DEBUG=1; + +Imager::init('log'=>'testout/t66paste.log'); + +$img=Imager->new() || die "unable to create image object\n"; + +print "ok 1\n"; + +$img->open(file=>'testimg/scale.ppm',type=>'pnm'); + +$nimg=Imager->new() or die "Unable to create image object\n"; +$nimg->open(file=>'testimg/scale.ppm',type=>'pnm'); +print "ok 2\n"; + +$img->paste(img=>$nimg, top=>30, left=>30) or die $img->{ERRSTR}; +print "ok 3\n"; + + +$img->write(type=>'pnm',file=>'testout/t66.ppm') || die "error in write()\n"; +print "ok 4\n"; + + diff --git a/t/t70newgif.t b/t/t70newgif.t new file mode 100644 index 00000000..ee051bfa --- /dev/null +++ b/t/t70newgif.t @@ -0,0 +1,40 @@ +# Before `make install' is performed this script should be runnable with +# `make test'. After `make install' it should work as `perl test.pl' + +######################### We start with some black magic to print on failure. + +# Change 1..1 below to 1..last_test_to_print . +# (It may become useful if the test is moved to ./t subdirectory.) + + +BEGIN { $| = 1; print "1..3\n"; } +END {print "not ok 1\n" unless $loaded;} + +use Imager; +$loaded=1; + +print "ok 1\n"; + +Imager::init('log'=>'testout/t70newgif.log'); + +$green=i_color_new(0,255,0,0); +$blue=i_color_new(0,0,255,0); + +$img=Imager->new(); +$img->open(file=>'testimg/scale.ppm',type=>'pnm') || print "failed: ",$img->{ERRSTR},"\n"; +print "ok 2\n"; + + +$img->write(file=>'testout/t70newgif.gif',type=>'gif',gifplanes=>1,gifquant=>'lm',lmfixed=>[$green,$blue]) || print "failed: ",$img->{ERRSTR},"\n"; +print "ok 3\n"; + + + + + + + + + + + diff --git a/t/t75polyaa.t b/t/t75polyaa.t new file mode 100644 index 00000000..29c97933 --- /dev/null +++ b/t/t75polyaa.t @@ -0,0 +1,60 @@ +# Before `make install' is performed this script should be runnable with +# `make test'. After `make install' it should work as `perl test.pl' + +######################### We start with some black magic to print on failure. + +# Change 1..1 below to 1..last_test_to_print . +# (It may become useful if the test is moved to ./t subdirectory.) + +BEGIN { $| = 1; print "1..3\n"; } +END {print "not ok 1\n" unless $loaded;} +use Imager qw(:all); + + +$Imager::DEBUG=1; +$loaded = 1; +print "ok 1\n"; + +init_log("testout/t75aapolyaa.log",1); + +$green=i_color_new(0,255,0,0); + + +$img=Imager->new(xsize=>10,ysize=>10); + +#$nums=10; +#$rn=10; + +#@rand=map { rand($rn) } 0..$nums-1; +#@angle=sort { $a<=>$b } map { rand(360) } 0..$nums-1; + +#@x=map { 25+(10+$rand[$_])*cos($angle[$_]/180*3.1415) } 0..$nums-1; +#@y=map { 25+(10+$rand[$_])*sin($angle[$_]/180*3.1415) } 0..$nums-1; + +#i_poly_aa($img,[50,300,290,200],[50,60,190,220],$green); + +$x1=16; +$y1=10; + +@x=(1, $x1, $x1); +@y=(1, 1, $y1); + +@x=map { $_+0.5 } (0, 8, 8); +@y=map { $_+0.5 } (0, 4, 0); + +i_poly_aa($img->{IMG},\@x,\@y,$green); + +push(@x,$x[0]); +push(@y,$y[0]); + +#$red=i_color_new(255,0,0,0); +#$img->polyline(color=>$red,'x'=>\@x,'y'=>\@y,antialias=>0); +print "ok 2\n"; + +open(FH,">testout/t75.ppm") || die "Cannot open testout/t75.ppm\n"; +i_writeppm($img->{IMG},fileno(FH)) || die "Cannot write testout/t75.ppm\n"; +close(FH); + +print "ok 3\n"; + +#malloc_state(); diff --git a/t/t90cc.t b/t/t90cc.t new file mode 100644 index 00000000..2ae55c80 --- /dev/null +++ b/t/t90cc.t @@ -0,0 +1,27 @@ +# Before `make install' is performed this script should be runnable with +# `make test'. After `make install' it should work as `perl test.pl' + +######################### We start with some black magic to print on failure. + +# Change 1..1 below to 1..last_test_to_print . +# (It may become useful if the test is moved to ./t subdirectory.) + + +BEGIN { $| = 1; print "1..3\n"; } +END {print "not ok 1\n" unless $loaded;} + +use Imager; +$loaded=1; + +print "ok 1\n"; + +Imager::init('log'=>'testout/t90cc.log'); + +$img=Imager->new(); +$img->open(file=>'testimg/scale.ppm') || print "failed: ",$img->{ERRSTR},"\n"; +print "ok 2\n"; + +print "# Less than 10K colors in image\n" if !defined($img->getcolorcount(maxcolors=>10000)); +print "# color count: ".$img->getcolorcount()."\n"; + +print "ok 3\n"; diff --git a/testimg/penguin-base.ppm b/testimg/penguin-base.ppm new file mode 100644 index 00000000..ce254ced --- /dev/null +++ b/testimg/penguin-base.ppm @@ -0,0 +1,1005 @@ +P6 +327 360 +255 +þþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýýýûÿÿýÿÿýûûùÿÿýÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýûûùþþüüüúÿÿýýýûÿÿýþþüýýûÿÿýþþüÿÿýÿÿýûûùÿÿýþÿúÿÿûûü÷ÿÿûýþùÿÿûÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüúúøÿÿýýýûüüúþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýÿÿýýýûÿÿýþþüýýûÿÿýÿÿýþþüüüúÿÿýüüúÿÿýýýûÿÿûûü÷ÿÿûüýøýþùüýøýýûüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýüüúÿÿýúúøÿÿýÿÿýøøöùù÷þþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿý÷÷õÿÿýÿÿý÷÷õÿÿýýýûüüúýýûÿÿýýýûûûùÿÿýÿÿýüüúûûùÿÿýùù÷ÿÿýüüúÿÿýþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿýÿÿýÿÿýûûùýýûÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýþþüüüúÿÿýÿÿýüüúÿÿýýýûýýûÿÿýýýûþþüüüúþþüÿÿýûûùþþüûûùÿÿýüüúÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿûûûûûûþþþÿÿÿüüüþþþúúúþþþþþþþþþþþþþþþþþþþþþþþþÿÿÿýýýÿÿÿúúúþþþýýýýýýÿÿÿøøøÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿþþþùùùÿÿÿüüüþþüþþüþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿ + + +üüüÿÿÿùùùýýýöööÿÿÿÿÿÿûûûÿÿÿÿÿýþþüþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþÿÿÿúúüüüþÿÿÿûûý   ÿÿÿýýÿûûûÿÿÿûûûÿÿÿþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþûûýÿÿÿýýÿ  +ÿÿÿúúúÿÿÿþþþþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýúúøÿÿýÿÿýüüúþþüûûùÿÿýýýûüüúÿÿÿüüüþþþþþþÿÿÿûûûÿÿÿþþþüüüÿÿýÿÿýúúøÿÿýÿÿûûü÷ÿÿýüüúÿÿýýýûÿÿýüüúÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüööôÿÿýüüúÿÿýúúøÿÿýÿÿýýýûÿÿýÿÿýùùùÿÿÿÿÿÿúúúýýýÿÿýûûùÿÿýüüúûü÷ÿÿûÿÿýüüúþþüÿÿýüüúÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýööôÿÿýÿÿýûûùûûùþþüýýûþþþûûûþþþüüüüüü  + + +üüüþþüÿÿýüüúüüúÿÿýüüúÿÿýÿÿýþþüüüúúúøÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýÿÿýùù÷ÿÿýÿÿýúúøÿÿýþþþÿÿÿÿÿÿþþüÿÿýýýûýýûþþüÿÿýôôòÿÿýÿÿýüüúÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüúúøþþüþþüÿÿýþþüüüúüüúÿÿýýýýýýý   ÿÿÿÿÿýÿÿýøøöÿÿýÿÿý÷÷õÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýúúøÿÿýÿÿýÿÿýÿÿýüüúÿÿÿ   üüúúúøÿÿýþþüþþüÿÿýÿÿýùù÷þþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýÿÿýýýûúúøÿÿÿ ÿÿýüüúýýûûûùÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüýýûÿÿýÿÿýþþþÿÿÿûûûþþþþþþþþþþþüþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýÿÿýüüü  + + + ýýÿüüþÿÿÿþþÿÿÿÿÿÿÿýýÿûûûÿÿÿýýýþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýûûùúúøÿÿÿ &&&(((+++'''  + ÿþÿÿþÿýýÿþþÿÿÿÿÿÿÿûûûýýýÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüúúøÿÿýþþüþþü!!!---555===;;;555---###  + þýÿþþÿùùûÿÿÿüüüûûûÿÿýûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýùù÷ ###)));;;FFFOOOLLLMMMBBB666*** ýýÿÿÿÿÿÿÿúúúÿÿýûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýýþþþ &&&///CCCRRR___```\\\SSSHHH;;;+++ + + + +ÿÿÿøøúþþþÿÿÿþþüööôÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿúúú (((111CCCRRRfffnnnllleeeZZZIII555&&&  +ÿÿÿÿÿÿúúúýýûÿÿýýýûüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüúúú ***888KKKZZZooozzzyyyqqqdddRRR===///$$$ þþþþþþÿÿýúúøüýøÿÿûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿ %%%999SSScccuuu}}}}}}rrrdddUUUFFF999+++ÿÿÿûûùþþüÿÿûþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýûûùÿÿýÿÿýÿÿýööôÿÿýýýû ''';;;NNNcccxxx||||||uuueeeZZZGGG???000&&& üüüÿÿýýýûýýûÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýøøöûûùÿÿýûûùÿÿý,,,>>>PPPdddsssqqqooohhh^^^NNNCCC;;;555+++##! ùù÷þþüÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýüüúÿÿýüüúùù÷ --->>>QQQfffsssmmmccc[[[UUUCCC<<<444555---&&& ÿÿÿüüúýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýýýûÿÿýøøöýýûÿÿý---===LLL[[[ddd]]]WWWMMMGGG;;;333+++---+++### ÿÿÿýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýúúøþþüýýûûûùÿÿý + + ))):::FFFMMMQQQKKKEEE;;;222222&&& ### üüüÿÿÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýþþüþþüþþü  %%%777???@@@@@@999555+++"""%%% þþþÿÿÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýùù÷ÿÿýÿÿýþþüÿÿý +$$$///222///+++!!!$$$  + + +øøøþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýýýûþþüþþü ###$$$$$$""" ÿÿÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýýýûÿÿÿúúúÿÿÿ + + +  + + +ýýýÿÿÿýýûþþüþþüÿÿýúúøÿÿýþþüþþüþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùþþüüüüÿÿÿýýÿ  ÿÿÿõõõÿÿýþþüüüúÿÿýþþüüüúþþüþþüþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýÿÿÿõõõ  + + + þþþýýûÿÿýüüúùù÷úúøÿÿýþþüþþüþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüøøøþþþÿÿÿüüúþþüûûùÿÿýÿÿýûûùþþüþþüþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùùù÷ÿÿÿÿÿÿ ûûûÿÿÿùùùÿÿýþþüýýûþþüþþüþþüþþüþþüþþüþþüþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýýýýúúúûûûÿÿÿûûùÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýøøöþþþÿÿÿÿÿÿûûûüüúÿÿýþþüüüúþþüþþüþþüþþüþþüþþüþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýþþþúúúúúúÿÿÿÿÿýüüúýýûÿÿýþþüþþüþþüþþüþþüþþüþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ + üüüÿÿýþþüúúøÿÿýþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ   ûûûúúøþþüÿÿýýýûþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ + + +   + +  ÿÿÿÿÿýÿÿýýýûûûùþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ  + !!#//1446::<$$& + +  +üüüûûù÷÷õÿÿýÿÿýþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ  """(((---!  444RRTQQS779ÿÿÿýýýÿÿÿþþüûûùþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ  222CCC@@B,,. 446OOQbbdFFH ûûûÿÿÿùùùûûùÿÿýþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ + + + 446;;=224  %%%PPP\\\335 + +  øøøÿÿÿýýûÿÿýþÿúþÿúþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ ((*@@B446 +))+FFF^^`jjjsssppplllTTT&&&BBBFFH  ÿÿÿýýýÿÿýþþüþÿúþÿúþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþüþþü!%%%***AAA224$$"===[[Ylllxxvyyy………’’’˜˜˜–––ZZZ000 + + +DDD555ÿÿÿûûûýýûÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþüþþü,,.VVXssuƒƒƒ~~~qqqNNN###111FFH$$& +  //-QQOhhfttrzzx‰‰‡ŽŽŒ••“œœœšššŸŸŸ§§§°°°­­­‘‘‘GGG ))):::### üüüÿÿÿûûùýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþüþþü!OOOnnn   §§§®®®žžž†††iii444 !!#%%'  +<<>@ttt¬¬ªÂÂÀÞÞÜëëéõõóôôòÿÿÿýýýýýýÿÿÿþþþýýýþþþýýýôôôþþþðððÙÙÙ³³³›››~~~ccc%%%ýýýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿÿ:::vvv”””³³³ÆÆÄÞÞÜëëéÿÿýùù÷ÿÿýüüúýýûÿÿýööôÿÿÿñññÞÞÞ¯¯¯^^`ššš³³³ÝÝÛõõóÿÿýýýûþþþüüüÿÿÿÿÿÿüüüüüüûûûÿÿÿýýýþþþÿÿÿÿÿÿñññÿÿÿëëëÅÅő‘‘zzzLLL þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûþþþTTTŒŒŒ¿¿¿ÛÛÛõõóúúøüüúööôÿÿýóóñüüúÿÿýüüúüüúüüüÿÿÿýýýÙÙÙSSS††ˆÁÁÁÝÝÝööôýýûþþüÿÿýþþþÿÿÿþþþüüüâââ¹¹¹”””   ÔÔÔöööüüüÿÿÿýýýøøøÿÿÿùùù××׫««kkkþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýþþþ ggg«««æææüüüûûûùùùñññÊÊÊÂÂÀËËÉññïððîÿÿýþþüúúúþþþÿÿÿ÷÷÷ššš///¡¡¡ËËËéééúúøýýûûûùþþüúúúÿÿÿêêꘘ˜224 '''___×××ùùùÿÿÿüüüûûûÿÿÿþþþßßߤ¤¤555þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿýýýþþþ‡‡‡ÐÐÐðððùùùÿÿÿÏÏÏVVV'''"" ;;9¤¤¢îîìýýûÿÿÿúúúüüüÿÿÿÏÏÏ!!!AAA©©©ÆÆÆéééööôþþüÿÿýüüúÿÿÿêêêttt###>>>´´´ÿÿÿýýýÿÿÿýýýÿÿÿôôôÔÔÔ___þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿýýýþþÿ$$&  ¢ììîÿÿÿÿÿÿããã@@@ """###~~~ëëëÿÿýüüúÿÿýþþüèèèOOO III©©©ÏÏÏ÷÷÷úúøÿÿýÿÿýøøöðððˆˆˆ666oooGGG%%%---°°°ðððÿÿÿþþþÿÿÿüüüóó󐐐þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿAACÀÀÂòòôôôöóóõ~~~ 777tttggg:::!!!ššš÷÷õÿÿýüüúüüúöööyyy + + + QQQ¨¨¨ÓÓÓúúúúúøþþüúúø÷÷õ¾¾¾***rrr”””ddd333ØØØöööúúúýýýÿÿÿÿÿÿ²²²þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿMMOÏÏÑ÷÷ùÿÿÿèèê((*888………fff&&&ÈÈÆÿÿýÿÿýÿÿýûûû•••  + + + ]]]®®®ÓÓÓóóóüüúÿÿýþþüððîIII  >>>vvv‡‡‡VVV + + +fffóóóÿÿÿýýýþþþýýýÐÐÐ///þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿIKJÑÒÔîîðûûý±°µ [[Yvvt}??=monîðíþÿýüüúòòò¥¥¥///***]]_²²´ÖÖØñóòþÿýüþûÿÿÿ¹¹¹000ƒƒƒkkk )))ÜÜÜÿÿÿþÿÿúüûþÿýöøõJLIþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýúúúRXTËÏÎêëíùøýjgn  762xytqrmXZU +598Þâáüÿÿüþýôôò¢¢   !%224FFFUSTTPOC?<  VTY­¬²ÔÕÙðôõüÿÿûÿþòóõnoqYXVomnxvwª«­úûýüÿÿúÿûûÿûïöînxm þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùüüúÿÿÿTXWÔÖÕö÷ù÷õøMKP  !HID`a\klgÁÅÄûýüüþûöõñ¯®ª$%'000:89B>=C?  + =;÷ÙCøÚDøÛ?øÛ7÷Ù)õØô×öÕ +øÓöÎ ôËôÉñÆðÂðÂíÂè¾à³Ö¬Ê¢Ğ!®ŠjX8 üüüÿÿÿþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüùù÷ýýûÿÿÿÿÿÿ ^J'c'›u$­}ºƒćˍԗ מ Û¥àª å® ì³ ëµ î¹ î» +ì» í¼ +è¹ïÂé¿ îÅêÃîÊïÍñÐðÑñÔ!ñÕ)ò×0ó×6óØ?õÙGöÚHõÚAôÙ4ôÙ&ôÙõØ÷Ö ÷Ô ÷Ñ öÏõÒõÑõËóÇ óË +÷ÏøÌòÄæ»ã¸Ô¨Í¡&£w Y:ûûûÿÿÿþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüÿÿýÿÿýûûûúúú   -yb”u z³‚ ¾‡NjАךÛ¡ß© å° ç± ë² ç±ëµ +ê¶çµìº ê» îÁêÀ ïÇìÆ ïÌðÏñÐñÓóÕ'óÖ2ô×;õØ?öÙ@øÛBøÛB÷Ú>óÖ0ôÙ&õÚöÙ÷×÷ÕùÕ ø× ô× öÙûÖûÖûÙüÚøÓðÊõÍõÌ&æ¹ ê»1Ï *–q@1 ÿÿÿþþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüúúøúúøÿÿÿýýý   + + 6#pX—x£¨~·†Šˍғڛߣâ¬ éµ +í· ï· ê´ í· í¹ ê¸ î¿ðÃé¿ èÀ îÈëÈ íÌîÏïÐòÔòÖ-õ×;öØB÷ÙEøÛBøÛ?÷Û:öÙ3óØ'õÙ öÙ÷ÙöØøØùØùÚûáøÞø×õÓðÓ ðÓ ÷×üÛöÔý×.ùË0õÂ1ç´'Ɲ)u]"ûûûùùùþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüûûûÿÿÿ + &~`$¤$¡w ª{³¼‡ƎВ ٗ ߝá¥á­æµêµî¶ ëµ +ñ»ð¼ì¹ì¾ëÀê êÄ íÊíÌëÌîÑîÐòÔ$òÔ6ôÖB÷ÙGøÚHùÙFøÚ>õÙ/õØ"õÚöÚõØõ×öØöØøØõØïÔõÙ ûÜúÚôÙòØó×ô×ñÑõÐ)ÿÒ:ûÇ3ñ¼"Ù«$˜z$6%ÿÿÿÿÿÿþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýüüúÿÿÿúúú +  N2–o ¢q +®z½‡ ºƒ½‡ɏ֖ߝæ¤æ©ã¯æµêµë¶é³ì¸ íºêºì¾éÀ ìÆ ëÈ íÌ ìÎêÍïÓíÐðÔ*õØ?÷ØIùÛIùÛGùÚBúÚ9÷Ú&õÙöÛõÚôÖôÖõ×õ×ôÖóÖøÛùÝø×óÓòÖòÖäÅѱÓ² Ô® ñÃ(ûÆ,ô¿Ò£™z @.ûûûþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúþþüüüüÿÿÿûûý + + 6"‚` ¢s³y ¹x¶yƋ Ê͓ٚ ã é¦è«æ± é·î» +ð» ì¶ ì¸ î»í¿ðÅíÅêÇ êÉêÌ +ìÏêÌñÔ!ïÐ'óÖ4øÚDùÛIúÚGøÙ@ùÙ6øÚ*÷ÚöÙöÚ öÚ öÚ õØó×ó×óØô× øÙ ø×ùÒ÷ÑðÍÚ¹»” Ÿw­†½”á³ôà óÀ̞ˆh3 ÿÿÿþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýûûùÿÿÿýýýþþÿ +G1 +“n¤q»yÂ|ÁÄˑҘݜ ã ç¥æªå° é¶ è´ì· éµ ë¸ í½í¿ìÂå¿êÈèÊéÍ +ìÐëÎõÖ-ñÔ2÷Ù=øÛBøÛB÷Ù=ô×1ô×$õØõ×ô×öÙ÷ÛøÜ÷Ûô×óØôÙ ÷Û÷×óÐöÍñÆׯ´‹¡ržo©{ĖÙ© ଠ+Ý©¿”uX!  ùùùþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿZFšu­y ºw½uȄ ɉ͓֝ٛå¥è© ä©ì·ê·ì¸ ï¹ï»î»ì½é¾ ëà êÇ èÈéÌêÍ òÖïÑ#ðÓ1îÏ7òÓ=ñÓ5÷Ú6øÚ.öÙ#ó×ñÕ÷ÚøØôÔ÷×ùÚòÕ òÕ õØñ×óØ ñÒôÎ#çº!¸‰ªz·†µ½Š +Õ£̜ݨܤѝ ºgN ÿÿÿÿÿÿúúúþþüÿÿýüüúÿÿýûûùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿeR•s«z¶u¾wÁ}ˍї؟Ý  +è©ë­ +è¯ë¶å² ë· ë· ë¸ éº é¼ êÀ +íÅ íË +ìÌêÎ ëÎïÒîÒ(òÔ6õÕBøÙCøÛ9øÚ,òÖòÕóØô× øØõÕûÛøØöÖóÔ +÷×öÙñÓõÖðÐ%¿š¨z®|¹‡Ē ͗ӛÕ Ö ٟ֝Ø£²‰YAþþþÿÿÿÿÿýüüúüüúÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ iYš|¦{´x LJ ϓљԝÞ£ å© æ¬í¶ñ¾ í¹ í¹ ì¸ ë¹ éº ê½ +éÁ ëÅêÈîÎ +ëÏ îÑíÐñÕ+õ×7ùÚDùÚBö×/÷Ù#ó×ô×ô×òÕ øÙùÚõÖ +ðÑøÙûÛöÖöÔíÉß»ª‡•o®‚‘ȘΚʒ؟ڟÞ£ ՗ٝ ܦ¶ŒYA  ýýýÿÿÿþþüüüúÿÿýûûùüüúüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ +XJw%Ÿy³€¸ ƌϗÖ  ԟਠä«ã«é²í¸îº í¹ îºî¼í¾îÁ ëà êÄçÆíÌ ëÎñÔîÑôØ,ô×3÷Ù=õÕ5ñÒ"ö×õ×øÛõØðÓ öÖøÙúÛö× õÕïÌðËôË#Ñ¥¡x™s´Œ” ɖ ̚Θ؟ᦠܟ۝ +יך ֟¼“]G  ýýýÿÿýÿÿýþþüüüúÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ?1r]&‰i¡w³ƒɗ͙ؤÖ¡ߪæ°é±ì´ í´ í·ì¸ í¹ î¼ íÀ íà îÆíÇ êÉ íÌìÏñÓîÑöØ(õ×+ö×/ñÓ%õÖø×õÔø×öÙòÕ òÕîÐ óÒôÓòÎñÌç¼ ·ˆ–e¬}¸ŽÂ–Ô¡Ϙ +ԝÜ£Ӗݟ۞֙ +؛ Ә М´‹!M:  + +  ÿÿÿÿÿýúúøýýûÿÿýûûùúúøþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ3 M4_<‡]³…О!ܨܩޫæ²í· ð·ñ¸ò¹ï»î½ ì½ ì¿ +ëÁ ìÆ íÊîÌíÎîÏðÒïÓóÖ ô×!õØ"ôÖöÕùÙöÕ÷×óÖ ñÔ òÔîÏóÏëÆéÁ!Ì  ¢rŸl³€ÁŒ̙͚ϕٜ՘ Ӗ +ß ך ܟ֜ ֛З˗'j.""$ ûûûÿÿýüüúÿÿýÿÿýüüúÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿI2^BhDƒVªy˗ߪ௠+æ´í¶í´ñ¶ð·ñ½ð¿ ïÁ íÀ ì íÆïËñÏîÎïÏïÑóÕòÕô×ó×÷ÙóÑúØø×õÖ +ïÓìÏëÎåÆéÄ+Í£¤v‘_£pº† Žϗ ֙ ԓޙߚݚ ã¢Þ  ԘԝК˖ƒ°},Y3 ggiwwy[[]((* +ÿÿýüüúÿÿýüüúûûùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ ([@jItHxFjȗÙ¬ä·ì»ë´ö¹õ»íº ì¾ îÁ îÄïÆñÊòÏóÒ!ïÏïÑïÑöÙòÕó×ðÔõØõÕøÖñÑ íÏëÍçÉ޾ϫ™qxK‘^¹ƒ½†čљїӕàۖ ڕ +ܛ י؜ +ן Ǔ¾»‹ ´ˆ%‡]#' [[]~~€{{}iik557ÿÿÿÿÿýûûùþþüÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ +H-oKtGzKP‘g¾—×±ä¸îºö¹ö¹òÀíÃè¿ êÃòÍõÑ#óÎ%óÒ%óÒ#òÔòÕðÕîÔíÓ ðÔóÖíÏñÓæÈÝÀÓµ#Ä£ –ssK‡\žo³À‰͓ җ Ҙ ֙ +ٝ ՙך ܟÚ ؟՜˕¸…°‚®…)ž}8`G  + DDD€€€xxx~~~ttt^^^,,, ýýýÿÿÿüüúþþüþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ +.^?"|V'|S~UwP€\¹“Ð¥à®ï´òºê»ðÈóÎòÌñÍ!ñÏ'òÏ)òÑ*õÕ(õÖ$ðÔíÑïÓóÕïÏ"èÆâÀÚ·Ç£ «‡„`oI|Rœo +¯|»‡ɐ Ε +їՙך ۞Ԛ՛ Ý¥Û¤͗ȕЯ€³ˆ,²ŒA°‘Z«•lªž„;7+,,,bbb}}}}}}iii___IIG#$ ýýýÿÿýÿÿýúûöÿÿûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ VF9x^ˆl<~`wU|UoE–h¼‹˚Ö§á¹çÂêÈèÆçÆîÏ)ðÐ-êÊ'åÆçÉêÊéÉ æÄ%ܶ#Ê¢¼‘§x•e‡X‹[ši¢o«w ¸ Ŋ ʋё Ԕ єЖәӛ֜ ֝Ϙ +ƒ +ÀŽº‹¹;Á›\̬ƒÄ¬’ɸ¦Â¸¬¾·­•’‹ ! + %%%GGG~~~}}}‚‚‚………ƒƒƒ||zUUS!!ûûûþþüüüúÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ + TOL¨Ÿ¸©ˆ|f*b‰a …X{JyI€U—n²Œ¶“¿œÄ¡Ǧ Ϯ̭¿  +¾œ¹–³¯Š£zeƒTƒQži§o±x³zÀ†‰Ȏɍ ѓ А֓Ԕё ѓ і +˒їÁŠ »‡ µ‡±‰*žTÒ´‚η˜Í»¯Ë½ºÈ¿À¾¿¶µ³¹¸¶bc^###fff‚‚‚€€€zzz……ƒwwu442 þþþýýûýýûÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ  v{w³´¬Ç®·ª~{f'‰e”h›lˆZ}S[‰`f–o—r‘lk’ljŽf‹d‘f™m q¤s®{¼…½„¼€¾¾‚ +ȋʼnːϔ +і +ϔ +ДБ͎ ґґɉ »ƒ +·„¯ƒ,º”S̱†Í¹ Æº¬Íƾ¿º¶Á½º¹µ´¿¾¼Á¿Àºº¼¦§«'+. AAA}}}ƒƒƒ„„„€€€~~~||zKKK ùùùÿÿÿÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ$)%¯µ±¹¾¸¸º­Ã¼¢½¬c%Žg‘e ¢v¦|¦|¥z¬·½–¸’ ²ŒµŽ ¹’´‹¸Œ¼Œ½Œ ÁŒ ď Ŏ ŋ ̒ʎʍʎ ѓ ΐГә +ɐʑʒ Ɏʼn ą€¶{°‚$²‹>¡kÏ·•Ï¿°ËÃÁÊÈËÉÊÌÄÈÇÄÆÃ¾¿º¾¿º¾¾¾ÅÅDZ²·<=B***hhh~~~ƒƒƒ‚‚‚„„‚||zqqq```&&(ýýýýýûüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ  ..&½¾¶¿Â»ÀÁ»ºµ¯Ä·¦¥Žd…f#kœq •h›lžm¬} –×­á»ߺٳٳӪըѠ̘͔їДˑ ˑ Иϕ̒ ɏ +ˑ ɐʑ̓˔Ǒ +톲|±z¯€.°’^ʶ•ÑÁ§Á¶¤Ä½³ÏËÈÎÐÏËÏÎÄÊÆÉÐɿĽ¸»´½¾¹¾½»¼º½TRU + + +BBBwww‚‚‚}}}|||ƒƒ||zzzzsss224þþþûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ >;4¹¶¯¾½¹¼»¹½¸¼½³±Ì¼£Ÿ‡W‰he—gžjŸj«w º‰˝ Ù¯ܳ Û² +àµÙ« ×¥Ô Ӛ і Ҕ Ԗיҙ Ϙ +ǏȒ ɐ ʑĊNjɎĊ»„µ‚ ®‚§~$°Š?À¢n˼¥Ã¼²¿»°ÃÀ·ÆÆ¾ÅÆÀÅÇÄÊÏËÈÎÊÈÎÊÂÇÀÅÈÁº»µÁÀ¼¿»ºvrs  + + ccc}}}ƒƒƒƒƒƒ{{{wwu]]]MMM&&( ÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿý÷÷õÿÿÿÿÿÿþþÿ  *%)>8:³­­À¼»¿»¼Á¿Ä·³´Æ½¶Ç· ¢†W‹d•f žh˜`¡j²} ¾‹ ӟÕ¢Ú¨ܨÙ¥× ՝ ՛ ՘ Ӕё ё ː˔ŐĐ½‡À‡À‚ ƃÁ|À ¹€ ­~«ˆ6ª’V»«‰Ä½«½½µ¹»¸½¾¸¶¹²º½´¹¼µÂÄ¿ÆÈÅÊÌÉÑÓÐÄÄÂÄÅÀ¿¾ºÁÀ¾¾º¹¨¤£  NNN€€€}}{{{kkkJJJ### + +  ÿÿÿÿÿýüüúÿÿýýýûÿÿýýýûúúøÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿýÿÿÿÿÿÿ + #!$425ª¨©À¼½ÄÀÁºº¼½½¿»¹ºÃº±Ç³š¬Œ]f^ ™bŸh£l²} ¿‰ ̖ʔ̔ ЖΕ +͒ϒϒΐ͍ˍȌĊ¾…Áˆ¾„¾‚·x¶t½z¸z¸ƒ'±Š;½¤kÈ»˜À¾¯º¿»µ·¶¸º¹¾À½¸½·º¿¹º¿¸ÆËÅÏÑÎÕÕÕÜÚÝßÝàÙ×ÚÒÐѼº»ÃÂÀ¹ºµkkk 666XXX]]_qqskkkWWW555 üüüüüúüüúþþüþþüûûùÿÿýüüúÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüúúúúúú + #($6:9§«ª»»»¼¼º»¼·»½ºº¼»¾º·É¼³Ç±™­Œ_g*\”a—e¥rªw¸…¿ˆ ɐƋ nj Ȍ +ɍ ɍ Ɍ ljĆ „ ½~ +¶w¸v²p³q³t¶|°z²ƒ3°ŠLÄ©|̽ ÅÀ­¿Ãµ¹¿µÁ½º¿¹¹½»¼»½¼ÁÇÅÆÌÈÎÕÎÐÕÑâàãìçíðèóøòüíêñÜÜÞÐÕÏÃÈÁ¬®« ##%AACFFH224 ûûùÿÿýÿÿýÿÿýÿÿýÿÿýûûùûûùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýÿÿÿÿÿÿ "1;3¦­¦¼¾»»½¸¾Áº·¹´½¿¼»»¹·¯¬É»°Í·Ÿ®jŽi4‡_‹a fžs¡r¬z±z´|·|¸}¸}¹~ +·~ ´{ +°v­pªk¥d«j«j®p ¬w®#²‹>³”[ìŠË¼©Ã¼²¾¾¶¯²§¿À¸º²°Á¶ºÅ¿ÁÅÃÆÊËÍÒÖ×áåäíïîððòøöûõð÷ÿüÿüûÿþÿÿæëåÊÏÉÄÆÃTTT + + +ÿÿÿýýûýýûûûùþþüøøöÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýööö-5*¢ªŸº¿¸¼¾¹À½¼½¸½¾¸¾¿·¾»²À¹¯Å»²Ëºª¹¡‘vA}`a Œjˆb–j¤t£n¦o§p ¦o¦o¤o ¢n  l›eœd›ae—bœm£},¬K¹¥sÉ»žÁ»­ÄÀ½¼º»¼º»Á¾¹½¸µÂ¼¾Â¼ÀľÂÐËÏâÝáñïôõôúôóùûüÿüþýüÿûò÷ðûÿúüþûøùûßßáÒÒÒ¢¢¢ ûûùþþüÿÿýÿÿýÿÿý÷÷õÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùûûù  +.1(¤§žÁĽÁþÉÉÇÄÅÀ¿¿·¿¿µÁÁ·»»³¸¶·Á¼¸Å¸§Â²‘©—gŠu6uY„dŒgŠ^‘b +”a•b•b”a“b“d +–g‘a ”d”e˜m—s)¤‡E³žgÁ²‰Å¾¤Â¿°ÂÁ½¸¸¸¶¶¸À¾¿½··Â¼¼ÃÁÂÏÍÎÙרåãäëéìöôùú÷þüûÿþþÿýÿúþÿøùÿóûþõüþùýýÿõôùââäÏÏÏYYYÿÿýÿÿýùù÷ýýû÷÷õÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿý  5/1¶°°ØÔÕÖÔÕ×ÕÖËÉÊÇÃÀ¾»½ºµ¾½¹½¿¾´¶µÃÀ»Ã½±Åº¤Á²‘¡ŒaŽr@‡d,Šb$Œ_]Ž_ a _ +‹^ e—m#˜p+št5›|C©“b·¨Æ½ ÆÁ®ÂÀ³Á½´Á½´»·®½¹°¾»´µ´°½½½ÃÅÄËÎÇÒØÎÛàÚêîíòö÷üÿÿÿÿÿÿþüÿüùÿûõÿúôÿÿøþýùÿÿýüþýûÿÿñññââ⯯¯!!! üüúÿÿýÿÿýýýûüüúýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüú + I@EÍÄÉèãçÜÚÝßÝàÏÍÎÊÆÇÈÄÃÁ½¼¾½»¾À¿º¾¿¼½¿º¸¹ÅÀºÆ¼°Éº§Å±˜¼£„¤†`œ|MšyD›y<{<šx9—w:Ÿ€GªŒX±•f½¤|Ų‘È¾£¿¼­¿À¸»½¼»½¼¹¸¶»¸³Á½´¼¸¯ÃÀ¹ÂÁ½ÆÇÉÉÍÌÐÖÌÞäÚæíæðöôïõõøüýûýüÿÿûÿÿúÿúôÿýúÿû÷ÿýúüüúþÿÿúþýýÿþøøøÛÛÛbbb ÿÿÿþþüýýûûûùÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿýÿÿýþþüþÿúþÿúÿÿûþÿúüüú -+.ÇÅÆîìíëéêãããäääÔÔÔÎÌÍÄÂÿ½¾¾¾¾ººº½½½¼¼¼¾¼½Á½¼Â½¹Ä½µÅ¼³Å»¯Æºª½² ½±›½®—»­“»­“¹­“»¯—¼°šÉ½­Ä¸ªÄ¼±Ä½³Á¾¹½¼¸¸¸¶»»¹´³±½¼ºÁÀ¼¿¾º¼»¹ÂÂÀÍÍÍÔÖÕâäßæèãðòïýÿüþÿÿüþýüüúÿÿýÿþúÿþúÿþúÿþúÿþüþþüþþüýÿüþþüýýûÿÿÿ»»» ýýýÿÿÿüüüýýûÿÿýþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüÿÿýýýûûü÷ÿÿûõöñÿÿû ‘‘‘þþþïïïøøøìììåååÙÙÙÎÎμ¼¼¾¾¾½½½¼¼¼¾¼½¿½¾¿½¾¿½¾¿¾¼¾½»¾½¹½¼¸¿¾¹¾½¸À½¸¿¼·¿¼µÀ½¶À½¶Á¾¹Â¾»Â¾½ÄÀ¿¾º¹¾º¹Ã¿¾¿¾¼¾½»ÁÀ¾ÁÀ¾ÁÁÁÆÆÆÍÍÍÔÔÔÚÚÚßßßææäííë÷÷õþþüÿÿýþþüþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýýýýëëëaaa ýýýýýýÿÿýøøöþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýùù÷ùù÷ÿÿýùù÷ÿÿýÿÿý +HHHãããÿÿÿÿÿÿóóóíííéééãããÒÒÒÄÄĽ½½¼¼¼¿¿¿¼¼¼À¾¿¿½¾¿¾¼¿¾¼¾½»¾½»¾½¹¾½¹¾½¹¾½¹Á¾¹Â¿ºÂ¿ºÂ¿ºÂ¿¸Á¾¹À¼¹Á½¼Â¾½¼¸·¹¸¶¿¾¼¾½»¿¾¼ÂÁ¿ÅÄÂÌÌÌÒÒÒ×××ÙÙÙãããíííììêööôþþüýýûüüúÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüùùùþþþ¼¼¼"""ûûûÿÿÿÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýûûùÿÿýÿÿý÷÷õþþü®®®òòòúúúÿÿÿüüüñññïïïîîîÜÜÜÏÏÏÄÄļ¼¼¿¿¿½½½À¾¿¿½¾¿¾¼¾½»¾½»¾½»¿¾º¿¾º¼»·½¼¸À½¸Á¾¹Á¾¹Á¾¹À½¸À½¸À¼¹¼¸·¿»º¿»º¼»¹½¼º½¼ºÅÄÂËÊÈËÊÈÐÐÐ×××ãããæææìììîîîõõóüüúÿÿýþþüüüúÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúýýýþþþùùùiii÷÷÷þþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýüüúùù÷øøöÿÿý + +oooâââùùùÿÿÿùùùÿÿÿûûûõõõöööèèèÝÝÝÏÏϽ½½¼¼¼½½½¿¾¼¿¾¼¾½»¾½»¾½»¿¾¼À¿»À¿»¿¾º¾½¹¾½¹¾½¹¾½¹¾½¹¿¾º¿¾ºÃ¿¾¾º¹¿¾¼¿¾¼À¿½ÂÁ¿ÅÄÂÎÍËÍÍË××ÕååãååãêêêêêêõõõúúúýýûþþüþþüþþüþþüþþüþþüýýûþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýýýûÿÿýýýýÀÀÀ444 + ÿÿÿúúøÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüþþüÿÿýÿÿý + <<<ÌÌÌèèèûûûÿÿÿüüüûûûÿÿÿùùùûûûóóóéééÛÛÛÅÅÅ»»»¼¼º¾½»¾½»¾½»¾½»¾½»¿¾¼À¿»À¿»¿¾º¾½¹¾½¹½¼¸½¼¸½¼¸¾½¹¾½¹À¼»À¼»À¿½¼»¹¿¾¼ËÊÈÑÐÎÖÕÓààÞààÞççåèèæùùùüüüþþþõõõÿÿýþþüüüúþþüÿÿýýýûýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýüüúþþüúúúôôô~~~ + ÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿùùùÿÿÿýýý   ›››îîìúúøññïÿÿýýýûýýûÿÿýûûùÿÿýüüúððîååãÒÒо¾¼½½»¾½»¾½¹¾½¹¾½¹¾½»¿¾¼¿¾¼¿¾¼À¿½À¿½¿¾¼¿¾¼¿¾¼¿¾¼¿¾¼¿¾¼¼»¹½¼ºÁÀ¾ÁÀ¾ÇÆÄÕÔÒÛÚØàßÝççåêêèõõóóóñýýûøøöþþüüüúÿÿýþþüýýûþþüÿÿýýýûýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüøøöÿÿýÿÿýÿÿÿþþþÊÊÊ???  ýýýþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûûÿÿÿýýýþþþ + + +PPPÞÞÜêêèýýûüüúÿÿýþþüÿÿýüüúüüúÿÿýÿÿýóóñììêÝÝÛÃÃÁ¾¾¼¾½¹¾½¹¾½¹¾½¹¾½»¾½»¾½»¾½»½¼º½¼º¾½»¾½»¾½»¾½»¾½»½¼ºÀ¿½¾½»ÅÄÂÎÍË×ÖÔßÞÜãâàëêèóóñòòðþþüüüúÿÿýùù÷ÿÿýÿÿýýýûþþüÿÿýþþüýýûþþüþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüÿÿýýýûòòòøøøýýýŠŠŠ + + +ÿÿÿþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüýýûÿÿýûûùýýûÿÿýÿÿýûûûÿÿÿüüü 111ªªªííëôôòýýûÿÿýÿÿýýýûþþüÿÿýþþüýýûýýûüüúõõóææäÒÒÐÄÄ»º¸À¿½ÁÀ¾¾½»½¼º¿¾¼¿¾¼»º¸½¼º½¼º¿¾¼ÂÁ¿¿½¾¼º»¼º»À¾¿½¼ºÌËÉÖÕÓÚÙ×âáßéèæììêòòðúúøùù÷ùù÷ùù÷ûûùüüúýýûýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿýÿÿýûûùÿÿýûûûßßß***ûûûÿÿÿûûûÿÿÿþþüÿÿýûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýýýûûûùÿÿýÿÿýþþüýýûÿÿÿýýý  rrrëëëüüúþþüÿÿýÿÿýþþüýýûýýûþþüþþüþþüþþüýýû÷÷õëëéÚÚØÎÎÌ¿¾¼½¼º¼»¹½¼º¿¾¼À¿½À¿½À¿½ÁÀ¾½¼º»º¸¼»¹½»¼½»¼¿½¾ÃÁÂÎÍËÕÔÒãâàëêèìëéõôòüüúøøöþþüýýûýýûýýûþþüÿÿýÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýûûùþþüÿÿýûûùÿÿýþþþïïïsssÿÿÿÿÿÿÿÿÿüüüúúøþþüûûùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýûûùÿÿýûûùüüúÿÿýùù÷þþüûûû  + +::8¾¾¼ùù÷ÿÿýÿÿýþþüýýûþþüþþüþþüþþüÿÿýþþüþþüþþüûûùòòðææäÝÝÛÍÌÊÂÁ¿¼»¹¿¾¼À¿½½¼º»º¸½¼º¼¼¼½½½ÀÀÀ¾¾¾»»»¼¼¼ÈÈÈÕÕÕÛÛÛãããíííóóóööôüüúÿÿýûûùÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýüüúýýûÿÿýýýûýýûÿÿÿþþþÄÄÄûûýÿÿÿÿÿÿûûùÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýûûùÿÿýúúøÿÿýÿÿýýýûþþÿ„„‚øøöýýûýýûýýûüüúýýûþþüÿÿýþþüýýûÿÿýþþüþþüÿÿýþþüùù÷òòðììêãâàÖÕÓÌËÉÊÉÇÇÆÄÁÀ¾¾½»¿¾¼ÁÁÁ»»»ººº¼¼¼ÈÈÈÎÎÎØØØÝÝÝåååöööõõõóóóÿÿýýýûööôýýûÿÿýþþüþþüýýûýýûýýûýýûýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûþþüþþüÿÿýÿÿýüüúüüüÿÿÿôôôSSSüüüÿÿÿÿÿý÷÷õÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýööôþþüÿÿýþþüøøöÿÿýHHFÑÑÏ÷øóýþùþþüÿÿýÿÿýÿÿýÿÿýþþüýýûýýûþþüþþüþþüÿÿýÿÿýþþüúúø÷÷õöôõîìíåãäÝÛÜ×ÕÖÑÏÐÎÎÎÎÎÎÉÉÉËËËÔÔÔÔÔÔÛÛÙÝÝÛëëéóóñòòòÿÿÿþþþùùùÿÿÿþþþøøöÿÿýþþüþþüþþüþþüþþüþþüÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýÿÿýýýûÿÿýýýûüüúþþüÿÿÿ®®® ÿÿÿüüüþþüÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúýýûÿÿýýýûúúøÿÿýÿÿý%%%¨¨¦÷÷õùúõýþùþþüÿÿýÿÿýþþüýýûýýûþþüÿÿýþþüýýûýýûþþüÿÿýÿÿýþþüýýûþüýýûü÷õöíëìãáâÞÜÝÛÛÛÛÛÛæææâââæææçççööô÷÷õûûù÷÷õüüüþþþÿÿÿÿÿÿüüüýýýÿÿýÿÿýýýûþþüþþüþþüþþüþþüÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüüüúþþüÿÿýþþüÿÿýýýýîîî...ÿÿÿÿÿýüüúÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýüüúúúøÿÿýþþüþþü +bbbççå÷÷õÿÿûÿÿûýýûýýûýýûýýûýýûýýûÿÿýÿÿýþþüþþüþþüþþüÿÿýÿÿýþþüþþüÿýþÿþÿþüýöôõíëìçåæååååååìììîîîùùùõõõüüúõõóüþûûýúþþþûûûÿÿÿÿÿÿûûûýýýÿÿýýýûýýûýýûþþüþþüýýûýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿûþÿúþþüþþüþþüþþüÿÿýÿÿýúúúÿÿÿiii + + +üüúÿÿýÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüûûùÿÿý ½½½üüúÿÿýüýøüýøþþüÿÿýÿÿýÿÿýÿÿýþþüýýûýýûþþüþþüþþüþþüþþüþþüþþüþþüþüýÿýþÿþÿþüý÷õöñïðïïïòòòõõõõõõþþþùùùÿÿýûûùþÿýüþûþþþÿÿÿþþþüüüÿÿÿÿÿÿýýûþþüþþüÿÿýÿÿýÿÿýþþüýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúüýøþþüÿÿýÿÿýýýûýýûýýûÿÿÿÿÿÿŸŸŸ þþüþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿýýýûþþüýýûýþùÿÿûÿÿýþþüùùùÿÿÿþþþbbbêêèÿÿýüüúÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûýýûüüúýýûøøö÷÷õïïíööôþþüþþüþþüÿÿýÿÿýÿÿýþþüýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿûþÿúþþüþþüþþüþþüþþüÿÿýþþþüüüÌÌÌ + ÿÿÿùùùýýûÿÿýûûùüüúþþüÿÿýÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýøøöÿÿýÿÿýýýûýþùúûöõõóÿÿýÿÿÿþþþ!!!ÁÁ¿ððîýýûýýûúúøÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýÿÿýÿÿýúúøüüúööôýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿÿýÿÿýÿÿýþþüýýûüüúÿÿÿôôôêêê444ÿÿÿÿÿÿõõóÿÿýÿÿýýýûÿÿýööôÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúýýûÿÿýÿÿýùù÷þþüÿÿýÿÿýÿÿýüüúüüü  nnnããáòòðööôÿÿýýýûüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúþþüüüúúúøööôüüúøøöýýûýýûþþüþþüþþüþþüþþüÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþüþþüþþüþþüýýûþþþûûûÿÿÿmmmýýýÿÿÿýýûÿÿýûûùüüúÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüýýû÷÷õÿÿýýýûùù÷þþüýýûÿÿý"""»»»ççåììêýýûóóñÿÿýúúøþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýþþüûûùøøöÿÿýûûùÿÿýþþüþþüþþüþþüþþüþþüþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿûþÿúýýûüüúýýûÿÿýÿÿýÿÿýóóóÿÿÿôôô£££  üüüÿÿýþþüþþüÿÿýþþüÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿýÿÿýüüúÿÿýýýûÿÿýþþüÿÿý + +  WWWØØØêêèîîìþþü÷÷õûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýýýûûûùÿÿýüüúÿÿýÿÿýÿÿýÿÿýÿÿýþþüýýûþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüýýûþþüÿÿýÿÿýýýûõõõÿÿÿìììÌÌÌ üüúÿÿýööôÿÿýûûùýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿý÷÷õÿÿýÿÿýüüúÿÿý÷÷õÿÿýÿÿý šššÖÖÖââàððîõõóÿÿýùù÷ÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùþþüýýûýýûúúøþþü÷÷õúúøýýûÿÿýÿÿýÿÿýþþüýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýÿÿýþþüþþüúúøööôþþþóóóöööååå+++ +ýýûÿÿýúúøÿÿýÿÿýûûùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýýýûÿÿýüüúüüúüüúÿÿÿýýý FFF¸¸¸ÑÑÑçççìììôôòññïÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüÿÿýýýûÿÿý÷÷õûûùûûùýýûÿÿýÿÿýþþüýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüüüúûûùûûù÷÷õòòðöööîîî÷÷÷ìììeee ûûûÿÿÿýýýöööÿÿÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿýþþüÿÿýüüúÿÿýûûû + ###ddd¼¼¼ÔÔÔâââ÷÷÷ôôòÿÿýÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûýýûÿÿýýýûþþüööôûûùùù÷ûûùþþüÿÿýþþüýýûþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüûûù÷÷õööôøøö÷÷õóóñêêêøøøòòòòòòžžžÿÿÿýýýÿÿÿýýýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýùù÷ýýûÿÿýþþþþþþ ‚‚‚µµµÊÊÊÞÞÞéééñññöööûûûÿÿÿþþüýýûüüúýýûþþüÿÿýþþüýýûýýûþþüþþüýýûÿÿýùù÷ÿÿýÿÿýýýûÿÿýýýûþþüÿÿýüüúôôòôôòööôùù÷þþüÿÿýÿÿýýýûüüúüüúýýûþþüüüúÿÿýýýûþþüÿÿýûûùýýûþþüûûùÿÿýýýûÿÿýýýûüüúÿÿýþþüþþüýýûþþüþþüþþüþþüþþüüüúÿÿýÿÿýÿÿýÿÿýüüúÿÿýûûùööôôôòëëéííëòòðîîîòòòíííéééíííííí»»» + + +üüüÿÿÿýýýþþþÿÿÿÿÿýýýûÿÿýÿÿýúúøÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýýýûùù÷ÿÿÿ """ŒŒŒµµµÆÆÆÜÜÜïïïùùùùùùùùùÿÿÿÿÿýÿÿýÿÿýþþüýýûýýûþþüþþüþþüùù÷ÿÿýýýûýýûÿÿýùù÷ýýûýýûþþüüüúûûùøøöôôòòòðõõóôôòööôøøöùù÷úúøþþüÿÿýÿÿýÿÿýÿÿýþþüüüúýýûÿÿýþþüþþüþþüÿÿýþþüÿÿýûûùùù÷ÿÿýÿÿýýýûþþüýýûÿÿýýýûÿÿýþþüÿÿýùù÷ùù÷ýýûùù÷øøöúúøööôööôõõóóóñííëèèæææäææäéééçççèèèñññêêêêêêâââÿÿÿþþþÿÿÿÿÿÿùù÷ÿÿýùù÷ÿÿýþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýúúøüüú +333™™™£££»»»ÑÑÑÞÞÞìììøøøøøøòòòüüüþþþÿÿÿÿÿÿþþþþþþÿÿÿÿÿÿýýýÿÿÿÿÿÿüüüÿÿÿýýýþþþöööýýýøøøööö÷÷÷õõõòòòíííçççìììñññõõõöööùùùýýýýýýüüüýýûþþüÿÿýúúøþþüÿÿýûûùÿÿýüüúúúøýýûÿÿýÿÿýÿÿýýýûýýûýýýÿÿÿýýýÿÿÿüüüÿÿÿýýýÿÿÿûûûýýýÿÿÿøøøöööùùùõõõòòòííëììêåååäääÞÞÞÚÚÚãããÛÛÛæææããããããëëëããã666  ùùùûûûüüüÿÿýÿÿýûûùþþüÿÿý÷÷õþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýúúøÿÿýÿÿýNNNžžž§§§²²²ÄÄÄÛÛÛìììòòòøøøÿÿÿôôôöööúúúüüüýýýýýýýýýýýýþþþÿÿÿýýýùùùÿÿÿòòòÿÿÿóóóöööîîîíííïïïîîîîîîéééßßßäääçççìììðððôôôõõõõõõõõõ÷÷õùù÷ÿÿýööôýýûþþüôôòüüúÿÿýôôòûûùôôòûûùÿÿýúúøÿÿýöööùùùõõõüüüòòò÷÷÷ñññõõõóóóóóóôôôîîîëëëìììçççæææããáááßßßßÞÞÞÕÕÕÓÓÓÛÛÛÔÔÔÙÙÙßßßãããåååìììYYY + + + ÿÿÿþþþÿÿÿÿÿýÿÿýÿÿýûûùÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿý lllœœœ›››­­­ºººÁÁÁÑÑÑæææñññòòòõõõööö÷÷÷úúúýýýÿÿÿÿÿÿþþþýýýöööýýý÷÷÷ûûûôôôòòòôôôéééääääääãããßßßãããèèèæææàààÞÞÞÞÞÞãããçççêêêðððöööôôòõõóþþüòòðúúøùù÷ññïøøöýýûøøöüüúööôøøöóóñôôò÷÷õìììîîîéééðððåååéééãããççççççäääåååâââàààßßßÛÛÛÜÜÜØØØÒÒÒØØØÓÓÓÊÊÊÍÍÍÎÎÎÌÌÌÐÐÐÑÑÑáááçççèè荍 + + þþþÿÿÿúúøüüúþþüÿÿý÷÷õþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿý „„„ššš£££¥¥¥¯¯¯¾¾¾ËËËÐÐÐÛÛÛëëëìììêêêêêêëëëïïïóóóõõõööööööúúúôôôþþþ÷÷÷õõõññññññçççäääáááÞÞÞÛÛÛÞÞÞââââââàààÞÞÞÝÝÝßßßâââæææíííôôôúúøøøöþþüòòðûûùùù÷÷÷õûûùôôòýýûõõóýýûþþüññïööôèèæâââáááÜÜÜàààØØØØØØÓÓÓÕÕÕÏÏÏËËËÌÌÌÌÌÌËËËËËËÈÈÈËËËÌÌÌÆÆÆÎÎÎÇÇÇÁÁÁÆÆÆÂÂÂÄÄÄÂÂÂËËËÒÒÒÛÛÛîîîÕÕÕ<<< øøøÿÿýÿÿýûûùÿÿýÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýûûù  œœœ¤¤¤ªªª±±±»»»ÅÅÅÏÏÏ×××åååæææçççêêêïïïôôôøøøûûûôôôÿÿÿóóóýýýüüüóóóþþþïïïóóóñññéééâââßßßÞÞÞÜÜÜÛÛÛâââçççëëëêêêëëëïïïóóóôôôÿÿýüüúÿÿý÷÷õÿÿýûûùÿÿýýýûýýûÿÿýóóñ÷÷õùù÷øøö÷÷õëëéßßßÛÛÛÕÕÕÔÔÔÏÏÏËËËÆÆÆÆÆÆÇÇÇÅÅÅÆÆÆÄÄÄÄÄÄÆÆÆÃÃÃÄÄÄÂÂÂÂÂÂÃÃÃÁÁÁ¿¿¿ÁÁÁÁÁÁÁÁÁÃÃþ¾¾ÌÌÌØØØééçóóñ¿¿½111 +úúøÿÿýÿÿýþþüööôÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýû***”””žžžœœœ¡¡¡­­­¸¸¸»»»ÄÄÄÒÒÒÔÔÔØØØßßßåååëëëðððöööùùùüüüýýýÿÿÿòòòÿÿÿúúúÿÿÿóóóýýýÿÿÿõõõæææÞÞÞÛÛÛÞÞÞæææåååñññöööòòòóóóüüüÿÿÿýýýÿÿýüüúÿÿýúúøÿÿýúúøÿÿýûûùÿÿýüüúÿÿýúúøôôòÿÿýííëïïíìììåååÞÞÞÚÚÚÕÕÕÎÎÎÉÉÉÇÇÇÃÃÃÃÃÃÄÄľ¾¾¾¾¾Â¿¿¿¼¼¼½½½ÄÄľ¾¾ÀÀÀÂÂÂÀÀÀÆÆÆÄÄÄÀÀÀÊÊÊÆÆÆÇÇÇÓÓÑããáõõó¾¾¾((( ÿÿýúúøÿÿýþþüÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿÿýÿÿýÿÿýýýûÿÿÿýýýÿÿÿþþþÿÿÿ999žžž¡¡¡žžž­­­···¼¼¼ÇÇÇÌÌÌÓÓÓÝÝÛÜÜÚÞÞÜëëéïïíõõóþþüôôòÿÿýüüúÿÿýþþüÿÿýûûùþþüÿÿýÿÿÿûûûõõõïïïäääßßßÙÙÙïïïôôôøøøûûûüüüýýýÿÿÿÿÿÿýýýþþüüüúÿÿýüüúÿÿýýýûÿÿýüüúýýûÿÿýýýûýýûÿÿýýýûþþüôôòêêêñññâââååååååÜÜÜÐÐÐÎÎÎÌÌÌÂÂÂÅÅÅÄÄÄÄÄÄÆÆÆÂÂÂÄÄÄÆÆÆÆÆÆÂ¼¼¼¿¿¿»»»ÁÁÁ»»»½½½ÀÀÀÀÀÀÃÃÃÏÏÏÖÖÖíííôôôµµµ%%%--/ÿÿÿýýûýýûûûùýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúýýûþþüýýûÿÿýüüüÿÿÿ÷÷÷ÿÿÿ##%333ššš¥¥¥žžžªªª­­­¹¹¹ÆÆÆÒÒÒÑÑÑàààååãééçîîì÷÷õööôööôÿÿýüüúýýûÿÿýÿÿýûûùýýûÿÿýÿÿýüüúüüüÿÿÿþþþêêêãããäääîîîêêêþþþþþþÿÿÿÿÿÿÿÿÿþþþþþþÿÿÿþþüþþüþþüüüúþþüýýûÿÿýþþüûûùÿÿýýýûþþüÿÿýþþüÿÿýýýûÿÿÿúúúôôôðððéééåååæææÙÙÙÞÞÞÖÖÖÔÔÔÒÒÒÎÎÎËËËÆÆÆÅÅÅÁÁÁÃÃÃÁÁÁÁÁÁÃÃÃÂÂÂÆÆÆÂÂÂÃÃÃÁÁÁÀÀÀ¿¿¿ÇÇÇÏÏÏæææòòòûûù––” ;;=PPRSSS222"""ûûûÿÿýüüúÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿÿýúúøÿÿýýýûýýýþþþÿÿÿÿÿÿ   IIIžžž¢¢¢«««¼¼¼»»»ËËË×××åååäääïïïòòðúúøýýûÿÿýþþüúúøÿÿýÿÿýÿÿýþþüüüúÿÿýþþüÿÿýþþüþþüÿÿÿþþþùùùïïïæææåååùùùñññÿÿÿýýýýýýÿÿÿÿÿÿüüüüüüÿÿÿÿÿýÿÿýýýûþþüüüúþþüþþüÿÿýýýûÿÿýþþüþþüüüúúúøÿÿýÿÿýõõõÿÿÿþþþõõõÿÿÿ÷÷÷ðððíííìììæææááááááÛÛÛÔÔÔÒÒÒÍÍÍÍÍÍÌÌÌÅÅÅÆÆÆÂ¿¿¿¾¾¾½½½¿¿¿¼¼¼ÃÃÃÁÁÁÇÇÇÊÊÊØØØæææÿÿýòòðeee ::TTV,,.RRRÓÓÓàààíííôôôööôÿÿýýýûûûù÷÷õüüúýýûÿÿýþþüýýûþþüúúø÷÷õÿÿýþþüýýûùù÷ÿÿýýýûûûùþþüÿÿýÿÿýÿÿýþþüÿÿýþþüýýûþþü÷÷õÿÿýÿÿýÿÿýýýûþþüþþüýýûýýûþþüýýûýýûÿÿýÿÿýÿÿýþþüÿÿýþþüÿÿýÿÿýÿÿýÿÿýÿÿýýýûÿÿýÿÿýþþüÿÿýÿÿýþþüúúø÷÷õýýûþþüýýûÿÿýûûùúúøþþüüüúþþüÿÿýÿÿýüüúþþüûûùüüúüüúúúøùù÷þþüýýûööôÿÿýýýûøøöððîççåßßÝÔÔÒËËÉÆÆÆÂÂÂÇÇÇÒÒÒêêêöööóóó[[[222JJJ,,, + + +ýýýÿÿýÿÿýûûùýýûýýûÿÿýûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüÿÿýÿÿýûûùÿÿÿ%%'OOQ668 §§§àààòòòóóóÿÿÿúúøýýûýýûÿÿýüüúýýûøøöûûùûûùÿÿýÿÿýÿÿýûûùüüúúúøÿÿýÿÿýþþüþþüøøöüüúûûùüüúÿÿýüüúÿÿýüüúÿÿýÿÿý÷÷õýýûúúøýýûÿÿýþþüÿÿýÿÿýüüúÿÿýþþüüüúÿÿýþþüþþüýýûÿÿýøøöÿÿýÿÿýúúøüüúþþüüüúüüúþþüýýûüüúþþüÿÿýüüúýýûÿÿýúúøøøöþþüÿÿýùù÷ýýûúúøýýûûûùÿÿýýýûýýûÿÿýÿÿýÿÿýþþüýýûÿÿýÿÿýúúøýýûÿÿýýýû÷÷õòòðëëéßßÝÔÔÒÍÍÍÃÃÃÆÆÆËËËáááïïïþþþÊÊÊ + + + + + +000EEE úúúûûùþþüÿÿýÿÿýþþüüüúýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿÿýüüúüüúüüúÿÿÿ <<>UUW NNNéééõõõùùùýýûüüúÿÿýþþüÿÿýÿÿýþþüÿÿýùù÷ûûùúúøüüúýýûÿÿýýýûÿÿýýýûÿÿýýýûúúøÿÿýûûùýýûûûùûûùýýûøøöûûùüüúÿÿýÿÿýûûùþþüøøöúúøÿÿýùù÷þþüýýûúúøýýûüüúùù÷ûûùûûùûûùûûùþþüööôþþüýýûøøöþþüÿÿýÿÿýþþüÿÿýÿÿýþþüÿÿýÿÿýýýûÿÿýÿÿýýýûüüúýýûÿÿýýýûÿÿýûûùüüúøøöþþüûûùùù÷ÿÿýûûùüüúÿÿýþþüþþüÿÿýÿÿýüüúþþüþþüüüúûûùööôêêèÝÝÛÔÔÔÉÉË¿¿¿ÃÃÃÏÏÏÝÝÝÿÿýõõóQQQ  + + + +BBB:::ÿÿÿÿÿýÿÿýüüúýýûþþüÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿÿýýýûÿÿýÿÿýMMOKKM ¦¦¦ûûûÿÿÿúúúýýûýýûùù÷ýýûÿÿýýýûùù÷ÿÿýÿÿýÿÿýûûù÷÷õÿÿýûûù÷÷õÿÿýýýûûûùøøöþþüþþüûûùþþüþþüþþüþþüùù÷úúøþþüýýûþþüÿÿýÿÿýýýûüüúÿÿýøøöüüúýýûüüúýýûýýûüüúýýûÿÿýûûùûûùÿÿýýýûýýûüüúýýûùù÷úúøûûùøøöúúøüüúøøöúúøþþüüüúüüúüüúÿÿýÿÿýüüúüüúÿÿýÿÿýþþüþþüûûùÿÿýÿÿýûûùþþüøøöøøöýýûüüúùù÷úúøûûùÿÿýÿÿýþþüÿÿýÿÿýþþüôôòêêèååçÙÙÛÍÍÍÅÅÅÎÎÎÔÔÔóóñÿÿýµµµ %%%JJJ/// + + +þþþôôòýýûÿÿýûûùÿÿýûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúûûùÿÿýøøöýýû'')NNP--/PPRæææýýýüüüÿÿÿüüúÿÿýùù÷ýýû÷÷õýýûþþüÿÿýüüúýýûûûùþþüýýûÿÿýýýûùù÷õõóÿÿýþþüüüúûûùüüúüüúÿÿýÿÿýþþüÿÿýýýûüüúúúøúúøýýûüüúýýûýýûûûùýýûýýûÿÿýÿÿýþþüýýûÿÿýÿÿýÿÿýþþüþþüýýûÿÿýþþüþþüÿÿýýýûþþüÿÿýüüúþþüÿÿýüüúÿÿýööôÿÿýÿÿýûûùþþüþþüøøöÿÿýþþüûûùþþüÿÿýÿÿýÿÿýÿÿýüüúÿÿýþþüþþüÿÿýþþüüüúüüúûûùÿÿýýýûüüúýýûÿÿýÿÿýûûùööôççéÝÝßÓÓÓÇÇÇÌÌÌÊÊÊÚÚØÿÿýòòòUUU 555BBB&&&  ÿÿýÿÿýüüúÿÿýøøöÿÿýøøöþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿÿýýýûþþüþþü AAC@@B  ¶¶¶óóóþþþõõõÿÿÿÿÿýüüúÿÿýÿÿýýýûüüúøøöüüúüüúÿÿýþþüýýûþþüþþüüüúÿÿýþþüþþüûûùÿÿýýýûÿÿýûûùÿÿýÿÿýûûùÿÿýÿÿýÿÿýþþüÿÿýýýû÷÷õýýûÿÿýÿÿýÿÿýüüúþþüÿÿýúúøúúøþþüþþüûûùÿÿýÿÿýôôòüüúþþüÿÿýüüúýýûýýûÿÿýüüúýýûÿÿýûûùþþüûûùÿÿýüüúòòðüüúÿÿýööôþþüýýû÷÷õýýûýýûÿÿýúúøýýûõõóþþüýýûÿÿýÿÿýýýûþþüÿÿýüüúþþüûûùùù÷ûûùýýûþþüÿÿýÿÿýöööîîîÙÙÙÙÙÙÈÈÈÄÄÂØØÖòòðÿÿÿªªª !!##!$$"+++''' JJJEEEýýûÿÿýýýûùù÷ÿÿýûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüùù÷ÿÿýÿÿÿ + + +(((RRR&&&uuuìììÿÿÿþþüÿÿýÿÿýúúøÿÿýþþüþþüþþüÿÿýûûùýýûÿÿýüüúÿÿýÿÿýõõóýýûýýûÿÿýýýûüüúÿÿýôôòþþüýýûþþüÿÿýþþüýýûýýûÿÿýüüúüüúÿÿýýýûûûùþþüÿÿýÿÿýþþüôôòþþüÿÿýûûùÿÿýþþüõõóÿÿýþþüþþüýýûÿÿýÿÿýúúøÿÿýüüúøøöúúøûûùùù÷üüúÿÿýýýûÿÿýþþüÿÿýýýûÿÿýÿÿýûûùýýûþþüýýûÿÿýôôòÿÿýûûùÿÿýýýûþþüýýûýýûúúøùù÷ýýûÿÿýýýûýýûþþüÿÿýüüúööôÿÿýúúøÿÿýÿÿýòòðííëããáÖÖÔÔÔÒÖÖÔÚÛÖÿÿýããá%%#  ---666:::777***)))RRR,,, üüüÿÿÿøøøÿÿýÿÿýûûùÿÿýþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýýýûþþþ  MMMDDD ÍÍÍÿÿÿÿÿýýýûþþüþþüøøöþþüúúøüüúüüúüüúùù÷üüúþþüúúøûûùþþüþþüÿÿýýýûÿÿýÿÿýýýûÿÿýýýûüüúúúøúúøûûùüüúüüúûûùûûùÿÿýüüúÿÿýþþüÿÿýþþüóóñýýûÿÿýüüúþþüýýûþþüÿÿýýýûþþüÿÿýüüúüüúúúøûûùüüúùù÷ýýûÿÿýýýûþþüþþüüüúýýûþþüýýûÿÿýùù÷ÿÿýÿÿýýýûÿÿýÿÿýþþüÿÿýÿÿýþþüýýûÿÿýÿÿýþþüÿÿýþþüþþüþþüýýûüüúÿÿýÿÿýýýûÿÿýþþüÿÿýÿÿýýýûÿÿýûûùþþüþþüÿÿýùù÷îîìêêèääâáâÝðñìôôòúúøuus &&&444===CCC???111%%% + + +===FFFþþþÿÿÿÿÿýúúøúúøÿÿýþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúýýûÿÿÿ + +111ggg,,, pppóóñýýûÿÿýýýûÿÿýÿÿýùù÷þþüûûùþþüÿÿýüüúüüúÿÿýÿÿýüüúùù÷ÿÿýþþüûûù÷÷õûûùûûù÷÷õûûùþþüÿÿýþþüüüúýýûþþüýýûûûùùù÷üüúûûùúúøüüúÿÿýÿÿýùù÷ÿÿýüüúÿÿýüüú÷÷õþþüþþü÷÷õÿÿýÿÿýýýûÿÿýýýûúúøþþüýýûþþüüüúþþüþþüþþüþþüüüúûûùýýûÿÿýøøöÿÿýÿÿýööôúúøûûùõõóüüúýýû÷÷õÿÿýüüúþþü÷÷õüüúÿÿýþþüþþüüüúúúøûûùúúøõõóÿÿýüüúþþüýýûÿÿýþþüúúøúúøþþüÿÿýÿÿýûûùúúøõõóòóîÿÿûÿÿý÷÷õºº¸***777@@@GGGCCC666...!!!KKK222 ÿÿÿ÷÷÷ÿÿýÿÿýÿÿýúúøþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿý + + PPPWWW$$$ËËËôôòÿÿýÿÿýûûùýýûÿÿýûûùÿÿýüüúÿÿýÿÿýýýûÿÿýÿÿýÿÿýÿÿýùù÷ÿÿýÿÿýþþüüüúÿÿýÿÿýýýûýýûÿÿýÿÿýÿÿýþþüÿÿýÿÿýÿÿýþþüýýûþþüÿÿýùù÷ûûùüüúüüúÿÿýüüúøøöþþüýýûùù÷ÿÿýýýûööôþþüýýûüüúÿÿýÿÿýüüúÿÿýÿÿýþþüøøöýýûüüúûûùþþüýýûûûùÿÿýþþüøøöþþüþþüûûùÿÿýÿÿýýýûþþüÿÿýøøöÿÿýýýûÿÿýøøöûûùýýûýýûÿÿýþþüýýûÿÿýÿÿýüüúÿÿýüüúýýûøøöýýûûûùüüúùù÷ÿÿýøøöÿÿýÿÿýûûùþþüÿÿûýþùüüúÿÿýææä&&$000<<>> GGGêêêûûûÿÿýøøöþÿúþÿúþþüÿÿýýýûÿÿýüüúÿÿýüüúýýûüüúþþüÿÿýøøöÿÿýÿÿýÿÿýúúøúúøúúøüüúüüúúúøûûùüüúøøöþþüÿÿýýýûÿÿýüüúÿÿýööôííëááßèèæïïíÿÿýÿÿý÷÷õÿÿýþþüýýûûûù÷÷õÿÿýÿÿýýýûüüúÿÿýþþü÷÷õþþüýýûööôýýûÿÿýööôÿÿýÿÿýÿÿýþþüþþüþþüþþüÿÿýûûùýýûþþüüüúÿÿýþþüøøöþþüÿÿýþþüýýûûûùÿÿýýýûýýûþþüÿÿýýýûøøöÿÿýÿÿýûûùûûùúúøþþüÿÿýùù÷ûûùûûùÿÿýýýûþþüÿÿýÿÿýùù÷úúøÿÿýÿÿýÿÿûúûöÿÿýýýûüüúÿÿýÙÙÙ::>> QQSþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûþþüüüü &&(224555lllCCC)))¼¼¼òòðýýûþþüÿÿýÿÿûÿÿûýýûûûùÿÿýýýûüüúÿÿýÿÿýüüúÿÿýýýûùù÷þþüÿÿýýýûûûùÿÿýüüúýýûþþüøøöüüúýýûýýûýýûùù÷úúøÿÿýýýûûûùÿÿýþþüþþüþþüþþüððîÝÝÛÜÜÚääâîîî÷÷÷þþþþþþÿÿÿÿÿÿþþüÿÿýþþüûûùÿÿýÿÿýÿÿýÿÿýúúøüüúþþüÿÿýþþüøøöÿÿýÿÿýüüúþþüþþüøøöþþüþþüþþüûûùÿÿýýýûÿÿýÿÿýþþüÿÿýúúøþþüýýûÿÿýþþüýýûþþüþþüûûùûûùýýûýýûööôÿÿýûûùÿÿýþþüööôÿÿýÿÿýúúøüüúÿÿýüüúÿÿýþþüÿÿýýýûÿÿýþþüûûùûûùýýûüüúûûùÿÿý÷÷õÿÿýÿÿÿùùùûûûúúúðððDDD++-NNP þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿý÷÷õÿÿÿ + ##%**,::>>AAA ]]]ÎÎÎÿÿýøøö÷÷õýýûþÿúùúõûûùÿÿýÿÿýýýûÿÿýÿÿýüüúýýûþþüýýûÿÿýúúøýýûüüú÷÷õÿÿýÿÿýúúøÿÿýÿÿýþþüýýûþþüþþüýýûýýûýýûüüúüüúÿÿýÿÿýûûùÿÿýÿÿýëëéÜÜÚÞÞÜááßõõõþþþÿÿÿþþþýýýûûûùù÷ööôÿÿýþþüûûùÿÿýþþüûûùÿÿýÿÿýõõóüüúûûùûûùüüúÿÿýÿÿýüüúÿÿýõõóÿÿýÿÿýôôòûûùÿÿýõõóÿÿýÿÿýÿÿýÿÿýýýûüüúþþüùù÷ûûùÿÿýÿÿýööôÿÿýýýûññïýýûÿÿýþþüúúøýýûúúøÿÿýûûùööôÿÿýýýûûûùÿÿýýýûûûùÿÿýþþü÷÷õýýûþþüüüúÿÿýýýûúúøûûùüüúþþüýýýùùùÿÿÿÿÿÿ‰‰‰ ""$000DDD777888,,, !!! ###...111)))''' üüüÿÿÿÿÿýüüúÿÿýýýûøøöÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþÿýþÿýþþÿúþÿúýÿüýÿþþþþþþþ  + +   +GEH_]`222FFFÁÁ¿ýýûþÿýýÿþþÿÿûýøýþùÿÿûþÿúüüüþþþÿÿÿúúúÿÿýüüúÿÿýÿÿýýýûôôòÿÿýýýûúúøÿÿýþþüööôþþüüüúýýûÿÿýüüúÿÿýÿÿýþþüýýûùù÷úúøÿÿýûûù÷÷õþþüþþüëëéßßÝááßããáììì÷÷÷ýýýüüüÿÿÿÿÿÿÿÿýýýûÿÿýüüúøøöþþüüüú÷÷õýýûüüúüüúÿÿýÿÿýþþüüüúüüúÿÿýþþüÿÿýúúøÿÿýþþüûûùÿÿýÿÿýýýûüüúõõóýýûýýûýýûÿÿýþþüûûùööôúúøÿÿýûûùüüúÿÿýýýûÿÿýýýûýýûýýûÿÿýööôüüúÿÿýþþüÿÿýüüú÷÷õýýûüüúøøöþþüüüúúüûÿÿÿûûùùøöÿþúÿÿûüýøþÿûõ÷òþÿýÿÿýøøøÿÿÿõõõjlk +'')GGI444 + + +  ***))))))666333---&&&ÿÿýþþüÿÿÿÿÿÿûúøþýùÿÿûýþùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþÿýÿÿüÿÿüÿÿþùýÿùûÿþûÿÿþÿÿþÿÿôøù  ?$fF^ +ŒhŠhqTM8$  FAH^\_DDB«¬§þÿýùýüúþÿûÿÿüÿýûþ÷ÿÿø÷øòýûþþüÿÿýÿÿýÿöööúúøýýûÿÿýþþüýýûýýûýýûýýûÿÿýÿÿýýýûýýûùù÷÷÷õÿÿýÿÿýûûùÿÿýÿÿýÿÿýûûùÿÿýÿÿýþþüýýûÿÿÿõõõëëëÜÜÜßßßâââôôòýýûóóñýýûýýûýýûÿÿýýýûþþüÿÿýýýûÿÿýÿÿýýýûÿÿýþþüýýûÿÿýÿÿýøøöÿÿýÿÿýþþüÿÿýÿÿýÿÿýÿÿýýýûÿÿýûûùÿÿýþþüþþüþþüÿÿýõõóþþüþþüýýûÿÿýûûùÿÿýúúøÿÿýÿÿýÿÿýýýûÿÿýööôýýûþþüüüúÿÿýÿÿýýýûÿÿýýýûÿÿýýýûÿÿýÿÿýþþüÿÿýüþýûÿÿþÿÿûùúÿþýÿýöÿÿöüÿöüÿø÷þöüÿûùûöýÿüýÿþñòôBFE +'%&201" !  ++-==?<<4 ---<<<=;<956&     ÿþÿúÿùøÿõ÷ÿüøÿþþþüÿýúÿýúÿþúÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿ÷ÿþùÿüÿÿúÿÿüÿÿýÿûÿ÷ýÿòÿýñÿýÙ­‰5¼‹ЖÜ  ઠî¹ì¶ì¶ ò¿ õÄñÀ ð¾ó¿ô»ø¿ò·úÁùÂð½ ñÁ#Ö¦ ¯…!G-  26(‹Šˆäâåóñöýýÿþÿÿøú÷ÿÿÿÿÿÿÿÿýýýûýýûþþüüüúùù÷ûûùÿÿýýýûÿÿýÿÿýüüúÿÿýÿÿýúúøþþüÿÿýýýûÿÿýÿÿýÿÿýüüúÿÿýýýûþþüÿÿýþþþúúúèèèáááÞÞÞäääôôòôôòýýûýýûÿÿýýýûüüúÿÿýüüúÿÿýþþüþþüþþüþþüÿÿýýýûýýûÿÿýüüúüüúýýûÿÿý÷÷õööôÿÿýýýûþþüýýûþþüôôòüüúÿÿýÿÿýýýûþþüýýûôôòþþüýýûþþüÿÿýýýûÿÿýÿÿýüüúööôÿÿýúúø÷÷õüüúýýûýýûÿÿýþþüüüúÿÿýüüúÿÿýÿÿýÿÿýûûù÷÷õýýûÿÿìÿç¸á¹dË¡(ã· ñÃòÄôÆõÉùÌõÈ÷ÉòÅè½ëÁâ¹)¶™3;1(((444???*()&!%# ÿû÷ÿüþýÿùøÿùøÿüøÿþûÿüþþüÿüþÿüþÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýüúÿýýÿùùÿýþûÿü÷ÿòÿÿìÿÿܔ{;µŠ"ǐі Ü  +é³è³ ðºð» ð¾ ñÁñÀ ð¿ ð¿ ò +óÂòÂô¿ô¾õ¼ó¼ð¸è´-ª‚ P3 +764ƒ~‚ÝÛÞÿÿÿôõùüýÿÿýþþýûÿÿýþþüûûùÿÿýÿÿýýýûÿÿýþþüÿÿýÿÿýûûùÿÿýýýûÿÿýýýûÿÿýõõóüüúûûùùù÷ûûùþþüýýûõõóüüúýýûúúúøøøæææÝÝÝÛÛÛæææ÷÷õýýûùù÷ÿÿýþþüýýûþþüþþüýýûÿÿýýýûøøöþþüýýûÿÿýúúøÿÿýþþüûûùÿÿýýýûÿÿýüüúÿÿýÿÿýùù÷ÿÿýÿÿýÿÿýüüúÿÿýôôòÿÿýûûùôôòþþüÿÿýýýû÷÷õýýûýýûùù÷ûûùþþüüüúýýûÿÿýÿÿýþþüüüúööôýýûÿÿýúúøÿÿýÿÿýýýûÿÿýÿÿýôôòýýûÿÿýþþüÿôØðÏ~Ú®3âµêÀ ÷Ì ü× ÷× +ôØ ñÔóÕ÷ÔóÍòËìÄíÄ*¸š,7+ + + +444444$$$### + 0$…sŽz$ÿùÔÿüïÿþøýþùþÿ÷üÿø÷ÿúõþûÿúÿÿûÿÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûýüÿÿÿþú÷ÿþûûýøùÿùüÿøûúÞÿý°Œ4´ ϓܟÝ¢áª ê± ò·ò¸ó¼ +ó¿ óÁ ñ¿ +ð¿ +òÂñÂñÀò¿õ¾ ÷½ø½ø»ò¹!Ú©(£|!>%  +2-1rpqÎÐÏüýÿòóõÿþÿÿþýöõóúúøÿÿýÿÿýûûùûûùþþüóóñüüúüüúùù÷üüúúúøÿÿýþþüÿÿýüüúÿÿýÿÿýúúøÿÿýÿÿýûûùüüúÿÿýÿÿýûûûùùùèèèßßßÜÜÜåååüüúÿÿýúúøýýûùù÷ùù÷þþüþþü÷÷õÿÿýýýûýýûúúøüüúÿÿýüüúÿÿýþþüúúøÿÿýýýûÿÿýýýûÿÿýüüúøøöýýûûûùýýûýýûÿÿýùù÷üüúÿÿýýýûûûùýýûÿÿýþþüýýûþþüüüúþþüÿÿýÿÿýýýûýýûüüúÿÿýÿÿýüüúþþüýýûùù÷ûûùýýûòòðùù÷ÿÿýüüúþþüüüúûûùþñÏáº[Õ¢ä´ ï¿öÊùÒ öÖ öÛ÷ÞôÚ÷Ù÷ÔüÖøÑñÇ'«‹-!%%%%%% bP³™ Ô·5ÔºcÿüÁÿþÔÿÿãú÷èþÿøõÿøøÿÿþûÿÿúÿÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþûÿÿüÿÿûýúþÿûøÿøúÿùüøõÿþᢃ1®€Ǎ֘לã©î°ô²ö²÷³÷¹ø¼ö½ õ¾ ò¾ +ó¾ ô¼ õ¾ ö½ ö½ ÷¾ ÷¿÷¾õ½ñ¹$ϟ#n+ 220kmjÌÎËùùùþúûÿýÿÿÿýþþüööôúúøÿÿýþþüýýûüüúþþüÿÿýüüúüüúúúøþþüýýûüüúÿÿýûûùÿÿýþþüûûùÿÿýþþüýýûþþüþþüûûûùùùëëëáááÞÞÞåååõõóûûùþþüþþüÿÿýüüúÿÿýýýûøøöÿÿýüüúÿÿýùù÷ýýûüüúúúøþþüýýûùù÷ýýûüüúÿÿýýýûÿÿýýýûüüúýýûùù÷ýýûþþüÿÿýþþüýýûÿÿýÿÿýþþüÿÿýüüúýýûÿÿýþþüþþüþþüþþüÿÿýüüúúúøüüúÿÿýýýûÿÿýþþüýýûýýûüüúÿÿýÿÿýþþüÿÿýýýûýýûÿÿýÿÿýÿõÔÛ®QԘè¬ ð¶ +ô¼ ôÁïÅñËöÕòÒ÷ÓöÐ üÔùÏ齓q&---!!!'—~"ʬÚ¹ôÓ:æÉAѺHÿÿµÿÿæÿÿÿõûù÷ÿûúÿùûýøþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüúþýùÿýûÿþûÿüöûõÿÿöÿüíÿúΰ†"Ƒʎ ҕ Ú¢è­ î¬ó¬ö°ø³ú·ù»ø¼ö½ ö½ö¼ö¼ù¼ù½ö½ ô½ò¾ +ò¾ô¾ô»æ³Æ¢'}h"  !#X[T¾¿ºñìðýøüúøùÿÿýýýûúúøüüúÿÿýÿÿýýýûýýûÿÿýÿÿýþþüüüúþþüüüúøøöüüúüüúýýûööôÿÿýÿÿýôôòÿÿýýýûþþüýýýùùùìììàààÝÝÝãããííëõõóÿÿýþþüÿÿýÿÿýÿÿýüüúûûùÿÿýúúøþþüýýûÿÿýýýûùù÷þþüýýûùù÷üüúúúøÿÿýûûùüüúÿÿýÿÿýþþüûûùýýûüüúýýûÿÿýýýûüüúÿÿýüüúÿÿýøøöúúøþþüþþüÿÿýüüúûûùþþüýýûûûùÿÿýûûùùù÷ÿÿýüüúüüúÿÿýüüúÿÿýÿÿýúúøýýûþþüüüúþþüýýûÿðÑÛ®Sѕä¥ +ì­ôµö»ñ¿ðÃóÌñÊ øÐ õÍ õÍ ñÈܳ_'''' + + + ^F¼›'Ü»÷ÔùÒôÐðÐ-Í·@ÿüÎÿÿöýÿüüÿÿûÿú÷ÿôýÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúùÿõüÿúûýüÿÿÿÿýûÿúêÿ÷ͪ€6·ƒĊЕ ؞ß§ à¤æ¤ö°÷² ùµ ú·ù»ø¼ø¼ø¼ø¼ø»ù½ù½ ö¾ ô¾ñ¾òÀóÁ ÷¿øÃ߸Á£hN  +#&RSK©§ªíëðÿÿÿüüúûûùþþüùù÷øøöÿÿýûûùøøöüüúþþüüüúýýûÿÿýÿÿýûûùÿÿýôôòþþüþþüúúøÿÿýûûùþþüÿÿýÿÿýÿÿÿùùùìììÝÝÝÚÚÚÝÝÝííëóóñüüú÷÷õüüúüüúÿÿýþþüüüúüüúûûùûûùÿÿýþþüÿÿýýýûÿÿýÿÿýûûùýýûúúøþþüûûùúúøÿÿýýýûûûùþþüýýûúúøùù÷ÿÿý÷÷õþþüÿÿýõõóûûùüüúýýû÷÷õþþüÿÿýüüúüüúÿÿýþþüüüúÿÿýþþüùù÷ýýûúúøûûùþþüùù÷ûûùùù÷÷÷õýýûÿÿýøøöúúøýýûÿøØÛ³[ϙÞ¦ ê­ó´ù»õ¼ò¿òÅ +òÇøÎ +òÊïÉ åÀ˦!lQ&  ${̦ñÐìÊöÌÿÕøÒíÑ?ÿÿ³ÿÿàÿþøùøý÷ýûùÿýýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúýÿõúýòýü÷ÿúðÿûìÿúÔ²ˆ@µnj̑ ؞ԛÞ¦ ê®ò²õ´ö¶÷¹ ù¼ ø¼ ø¼ö½ö¼ö¼ö¼÷¾÷¾ õ¾ õ¿óÀôÁõÂôÀ ò¿ îÀ Ö«³Ž$S5  +<<>Œ‘âââýýûÿÿýýýûÿÿýûûùùù÷ÿÿýûûùüüúþþüúúøýýûþþüÿÿýÿÿýýýûþþüþþüúúøÿÿýÿÿýõõóÿÿýûûùüüúþþþøøøíííÞÞÞÜÜÜÝÝÝììêððîúúøøøöúúøýýûþþüÿÿýþþüþþüÿÿýüüúÿÿýøøöÿÿýÿÿýÿÿýÿÿýýýûÿÿýüüúÿÿýüüúûûùýýûûûùúúøÿÿýýýûýýûûûùÿÿýúúøþþüþþüúúøÿÿýÿÿýÿÿýüüúüüúýýûýýûþþüÿÿýýýûúúøüüúÿÿýýýûýýûýýûþþüþþüûûùýýûÿÿýþþüýýûÿÿýúúøÿÿýÿÿýÿýÝÙ´[Μà©é®ñ±÷¸ôºô½ +óÂïÂòÇ îÅ ìÅܸ»—\A" qTÈ¡"ëÂöÓîÊøÑüÓ ýÕòÑ.¾¨BÿÿÍÿùîÿýÿüÿÿúÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿÿúÿÿôÿÿìÿþßÿùŲ†;·‚ŊɎ͔ × Û¥å« æ¬ í³ò¹ñ»ó¾ôÀ õ¾ ô½õ¾ ô¿ó¾ò¾ò¾ò¿ó¾ ö¿ ÷¿ +ù¾ +øÀ òÀðÀò½ ëµÔ¤¡{2 +    ,-1kkkÃÃÁ÷÷õûûùþþüÿÿýþþüýýûÿÿýÿÿýÿÿýûûùþþüûûùÿÿýÿÿýÿÿýüüúþþüÿÿýýýûüüúýýûýýûùù÷øøöýýýøøøõõõèèèæææåååêêèïïíûûùÿÿýþþüÿÿýûûùÿÿýÿÿýÿÿýþþüþþüýýûøøöýýûþþüüüúÿÿýþþüÿÿýüüúÿÿýýýûýýûþþüüüúüüúÿÿýúúøÿÿýÿÿýüüúÿÿýþþüüüúÿÿýÿÿýþþüûûùÿÿýüüúûûùýýûÿÿýþþüüüúûûùùù÷ÿÿýþþüûûùÿÿýÿÿýüüúÿÿýÿÿýüüúÿÿýüüúÿÿýþþüÿÿýúúøÿóÓÕ±S̘Ü¥ +åªð²ø»ö¿ öÃóÄðÃïÂê¾é¿Ö®µ\>! T6µ éÃ$ñËéÀöÍñÌ +íËïÌïÎ)Û½Eÿÿ¸ÿÿìÿÿÿø÷óÿþùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþþþþþýÿþýÿüÿþüÿþüÿþúþÿúýÿüýÿþÿþüÿþüÿþüÿýúÿý÷ÿþòÿþìÿþçÿþãÿþàÿþÞÿþÜÿýÜÿþÞÿþÞÿýàÿþâÿýâÿúÛÿþÚÿû̧‰K¬‚0³¿ƒɋѕÚ¡Ù£ߪç­ é¯ î¸í¹ñ½óÀô ó¿ ò¾ó¿ ô¿ ò¿ñÀñÀò¿ò¿õ¾ ö½ ø½ ö¾ ðÀòÂ÷¿÷¾è±ǚˆl   OOM°°®ññïôôòùù÷ÿÿýññïÿÿýýýûÿÿýüüúÿÿýùù÷üüúüüúüüúÿÿýüüúýýûÿÿýýýûþþüÿÿýþþüüüúÿÿÿýýýþþþòòòïïïëëëîîìòòðüüúÿÿýüüúþþüööôûûùüüúüüúööôþþüýýûÿÿýþþüþþüøøöýýûýýûÿÿýüüúÿÿýþþüþþüÿÿýÿÿýþþüÿÿýõõóþþüþþüõõóüüúÿÿýþþüÿÿýúúøþþüùù÷úúøÿÿýüüúþþüÿÿýþþüþþüÿÿýýýûýýûýýûøøöþþüýýûööôüüúÿÿýýýûÿÿýýýûúúøööôþþüýýûÿÿßà¼^Оݦ ã©ï±ù¼õ¾ ñÀïÀì¾ì¼æ¶ãµΠ²„b@% $™uÕ¨ëÄìÅñÅ +ìÀéÆ +êÉ ðÊõÎ(áº7¢ˆ3ÿÿäøúùÿþýÿþûÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþúÿþùýÿ÷ýÿúþýÿýþÿûÿÿûÿþÿüýÿùùÿþ÷ÿÿøùÿÿøÿÿÿüûÿüúÿù÷ÿýöÿùèÿûÝÿþÍÿþ¿Ÿ2«‡1©‚%¨€ ª!«‚&¨€(£}(£~.§‚1§}'©~"«}±€º…Ë̒ і ՘ +מ ਠâ«æ­ë² ï¶ ô¾ñ¼ ò½ ò½ õ¾ õ¾ õ¾ õ¾ ó¾ ó¾ ó¾ ó¾ ó¾ õ¾ õ¾ ö½ õ¾ ñ¿òÁ ñ»øÂó½ß­´ŽlS + +  + + + FFD¬¬ªëêèÿÿýüûùÿÿýþýùöõñþÿúþÿúûýøþÿûüþûõ÷ôýýûþþüööôüüúüüúÿÿýÿÿýüüúÿÿýþþüÿÿÿþþþúúúÿÿÿõõõöööööôôôòóóñþþüþþüÿÿýüüúÿÿýööôüüúÿÿýþþüüüúþþüÿÿýÿÿýÿÿýþþüúúøÿÿýÿÿýûûùÿÿýÿÿýüüúÿÿýÿÿýùù÷ýýûÿÿýúúøÿÿýÿÿýõõóþþüüüúõõóþþüÿÿýýýûûûùýýûÿÿýùù÷ÿÿýÿÿýüüúÿÿýÿÿýûûùÿÿýþþüÿÿýýýûþþüööôþþüùù÷ÿÿÿþþþþþþúúúõõõÿñÔá¼aÓ¡Ú¢ ç­ ô¶ð¶ ô½ ô ò +ð¿ +ì¸ ï»á¯ў¶ƒvP)     q\ Ǟ æ¶òÈïÆíÂïÃîÄ ïÅð ñÁå¸+ ‚"ÿÿÝùÿÿÿþÿÿûÿÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿþùÿÿ÷ýÿ÷ýÿùþþÿýþÿúÿþûÿþÿýÿÿýÿÿþøùúòôÿûùÿÿÿùóÿüíÿýãÿüו{Jž€@§ƒ/°†"¶‡¸…Ì Ê‰É ¿‰¸„µµ¸ º‚ ¾„ ˆ +ȍ ͓ җ ՛ Þ¢ߤ æ¬ è® ë² ð·ñ¹õ½ô¼ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ó¿ òÀ óÀ ðºõ¿÷¿ñ¾Ú°¥‡@0   +442ãâàþýûþýûÿÿûûúöýþùÿÿûþÿûýÿúúÿûüþûýýûÿÿýùù÷ýýûùù÷ûûùûûùùù÷þþüùù÷ÿÿÿÿÿÿÿÿÿýýýüüüúúúúúøÿÿýþþüÿÿýúúøþþüüüúýýûüüúþþüÿÿýýýûûûùüüúþþüÿÿýüüúûûùùù÷üüúüüúùù÷ûûùüüú÷÷õúúøüüúüüúÿÿýÿÿýùù÷þþüÿÿýúúøÿÿýÿÿýûûùþþüÿÿýüüúùù÷üüúýýûøøöýýûûûùÿÿýþþüÿÿýþþüÿÿýýýûÿÿýþþüÿÿýüüú÷÷õýýûùùùÿÿÿüüüþþþÿÿÿÿýàߺaҟ՝ +ã© +ñ³õ»ö¾ñ½ ï¼ ð½ ì¶ ìµà©Ϛº†ˆ^2  +O8¦…تì¹ðÃëÂìÀíÁ +í¿ +í¼ò¾õ¿ë¹&¥„ÿÿÚùÿÿÿþÿÿüÿÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿÿ÷þÿ÷ýÿ÷ýÿùþÿùþÿúûÿúýÿþüùÿþùÿÿþûýü÷úÿüüý÷ÿùéÿüÔ¡}3¥}µŠ"µ‡¾ŒǒИÚ ֙ +՘ +ԗ іϓːŋˆ ˆ +ċ +Ɏ ͓җ՚ٜ ڞ +â§â§ è®ë² ï¶ õ½ó»õ½ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ó¿ ñ¿ôÀ ó»õ½ñ¼ï¿å½ ¡ ‘v"  )))oooÅÄÂöõóüûùÿÿýüüúøøöùûøþÿýþÿýýÿüÿÿýÿÿýûûùþþüýýûÿÿýþþüûûùþþü÷÷õúúúýýýþþþøøøÿÿÿþþþýýûÿÿýÿÿýÿÿýúúøþþüýýûÿÿýÿÿýÿÿýþþüýýûüüúûûùüüúþþüÿÿýÿÿýÿÿýýýûÿÿýÿÿýüüúÿÿýþþüýýûúúøÿÿýÿÿýýýûÿÿýÿÿýÿÿýþþüýýûÿÿýÿÿýüüúþþüþþüýýûÿÿýûûùýýûýýû÷÷õÿÿýûûùýýûþþüÿÿýúúøÿÿýýýûÿÿýþþüýýûÿÿýøøøþþþöööóóóïïïðâÅÚµZԢؠ å« í¯ ÷ºõ½ó¾ î» +îº ç±æ¯ Þ§ Й À‰›oE)       +<¡zțâ±ê» ë¾ ç½ ê½ ì½í» î» +ô½÷¿ðº$©†ÿÿÝúÿþÿýüÿüüÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿùþÿùýÿúýÿúÿþùÿþùýÿùýÿüÿýÿÿýÿÿûúÿÿûýýýÿýñÿýؖu0°€ÁŠ ƍ̓؞Ú¡ כܟÝ  +Þ  ݟٜ ؛ ך՘ ϔ +ϕ ЖӚ՜ٟÛ¡Þ¢ ߤ +åªäª +ê± í´ òºö¾ô¼ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ð¼õ¾ ö½ø¾ó¾ðÂìÅØ´ ¹”"kN PNO¬«©çæäþýûÿÿýÿÿýþÿýúüùýÿüýÿüüüúÿÿýýýûÿÿýþþüýýûÿÿýÿÿýýýûûûùõõõÿÿÿùùùúúúÿÿÿûûûÿÿýûûù÷÷õþþüýýûþþüûûùÿÿýÿÿýýýûýýûÿÿýÿÿýýýûûûùüüúûûùþþüÿÿýúúøþþüÿÿýøøöÿÿýÿÿýÿÿýùù÷ýýûüüúøøöþþüúúøþþüÿÿýùù÷ýýûÿÿýúúøþþüÿÿýÿÿýýýûþþüÿÿýþþüûûùÿÿýüüúùù÷ýýûþþüùù÷ÿÿýüüúýýûþþüÿÿýööôúúúêêêäääÜÜÜÒÒÒØÊ­×²WÖ¡Ù¡é­ë­ +õ¸ñ¹ ò½ ï» ì¸ +â¬à©ß§ ӜÁ‹¦whG*      2†\ʙ"Ù¥ä³éº ê½ èº é¹ê·í¹ ô¼ ø½ ÷½ï·"«„ÿÿÜûÿüÿþüÿýúÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþýþÿþýÿÿüÿÿýüþÿúþÿùÿÿøüûöýùöÿýÿÿøýÿøåœ:²‰¾‚ΌԒá יٜä©Þ£ ߣ á¥à¤Ü¡ ڟ۠ܡ۠ۢ Û¡Ü¢Þ¥â¦ä©æ«ç­ í²í² ò¸ó¹ ó» õ¾ ó¼ +ô½ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ öÀøÀ ù½ ö½ñ¾ òÅóÌêÄЦª…F2 B@A¤¢£âàáÿÿýþþüøøö÷÷õþþüýýû÷÷õýýûÿÿýþþüúúøööôüüúþþüüüúÿÿýúúøÿÿýþþþÿÿÿÿÿÿöööÿÿýüüú÷÷õÿÿýýýûýýûùù÷ûûùýýûúúøúúøþþüÿÿýþþüüüúýýûøøöûûùýýû÷÷õüüúþþüööôþþüüüúÿÿýüüúÿÿýþþüûûùþþüõõóýýûÿÿý÷÷õûûùÿÿýùù÷ûûùÿÿýþþüøøöþþüÿÿýúúøÿÿýþþüÿÿýûûùþþüþþüøøöÿÿýýýûþþüÿÿýÿÿýòòðîîîÖÖÖËËËÆÆÆÅÅÅÔÆ©Ø³Xҝӛé­ï±ö¹ð¶ í¸ +í¹ ê¶ +á«Þ§Þ¦ Қ À‰ ­|“lK.$      ,e ¶…̕ç± ç´ ç¹ éº è¹ ê¶é´íµ +ò¹ +÷¹õ·ê²©€ÿÿÔþÿúÿþüÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýþÿýýÿþüÿÿüÿÿýþÿþúþÿ÷ûýòÿÿöÿÿûÿüúÿûøÿúØ }!·‡ Ҕ ãžݚ זä§ߤ ß§ å­â«ä­ä¬ਠߥà¦ã¨ã¨ᦠ+ਠ㨠åªç­ê°ì²îµðµð¶ õ»õ¼ ô½ õ¾ ó¼ ö¿ õ¾ õ¾ õ¾ õ¾ ô½ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ øÀö¾ø¼ ô¼ ï¾ ïà ðÇ ïÅ齚“y,% + + <:;ŽÙÙÙøøöÿÿýÿÿýÿÿýÿÿýüüúûûùúúøûûùÿÿýûûùÿÿýüüúþþüÿÿýÿÿýùù÷ÿÿÿþþþÿÿÿúúúüüúÿÿýþþüÿÿýûûùÿÿýüüúüüúýýûûûùùù÷ûûùýýûþþüþþüþþüýýûÿÿýÿÿýýýûÿÿýÿÿýüüúÿÿýûûùÿÿýþþüþþüÿÿýÿÿýÿÿýüüúüüúÿÿýüüúýýûÿÿýûûùùù÷üüúÿÿýûûùÿÿýüüú÷÷õÿÿýúúøÿÿýÿÿýÿÿýþþüøøöýýûüüúÿÿýÿÿýýýûîîìÒÒÒÍÍÍÂÂÂÁÁÁÅÅÅÏ¢ֱVЛ֞ ê®ð²ô·ð¶ ðºé³ é³ æ­á§Ü¡Ζ½†²~¤x}Z I/  D"“g(¶„%͘ܤ Ü¦å² ä´ +ã´çµì·î·ïµ ò¶ô¶ ò´ç­¦}ÿþÔÿÿúþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþûÿÿûþÿýýÿþüÿÿüÿÿüüÿþùÿÿ÷ÿÿúõöñÿÿûÿûðÿùߚ{B³‡½‡Е ӖÜ à§֟í¸á­ é¸ç³è´è²è°è®ç­ æ« åªä©äªè­ ë° î³ï´ð¶ ð¶ ñ· ñ· ô¼ ô½ ô½ ö¿ ô½ +÷À õ¾ õ¾ õ¾ ô½ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô¼ó»õ½ô¿óÂõÅ öÈ÷ËëÁ Û³¯!jQ .,-{yzÉÇÈùøöÿþüúù÷ÿÿýÿÿýüüúúúøûûùÿÿýÿÿýÿÿýýýûüüúþþüþþüôôòýýûüüúüüúÿÿýûûùÿÿýýýûÿÿýûûùÿÿýÿÿýÿÿýþþüýýûüüúûûùüüúýýûýýûüüúþþüÿÿýýýûÿÿýþþüúúøýýûÿÿýúúøüüúûûù÷÷õûûùýýûûûùÿÿýþþüþþüÿÿýþþüÿÿýÿÿýúúøýýûýýûÿÿýÿÿýþþüúúøþþüùù÷úúøÿÿýýýûþþüúúøüüúûûùþþüúúøììêÛÛÙÂÂÂÇÇÇÆÆÆÇÇÇÇÇÇÏ¢ԭRќÛ£è¬í¯ï² ñ¶ðºè² +æ¯ +æ¬ +à¦ٞЗ‰µ ¦t¡uZ>#  6gAšk¹„ʔϘ +Û£ߨ ௠㳠æ´éµ í¹ñ¹ô¸ +÷¹ õ·ñ¶è°©€ÿþÛÿÿÿýÿþûÿþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüûÿþûÿÿýýÿþýÿÿüÿÿýúÿþ÷ÿÿ÷þÿÿþÿÿüüúÿÿíÿûП{1µЖ՚Ø  Ù¢ +Þ§ ã¯è´ì¹æ³ +é¶ é´ê³î´í³ë°ç¬ +䩿«é¯í³ ñ· ó¹ó¹ò¸ñ· ÷¾õ¼ ö¿ õ¾ õ¾ ö¿ ó¼ +ô½ õ¾ õ¾ õ¾ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ øÀ õ½ò½ð¼ï» ñ¿ôÂùËìà à¹Í¥!¡€#,    +$"#YWX¬ª«ïîìÿþüýüúýýûÿÿýÿÿýþþüüüúóóñüüúÿÿýõõóýýûþþüþþüþþüÿÿýòòðÿÿýÿÿýûûùööôþþüþþüÿÿýüüúþþüþþüÿÿýÿÿýýýûýýûýýûûûùøøöÿÿýÿÿýûûùÿÿýýýûööôþþüýýûüüúýýûÿÿýýýûÿÿýþþüõõóÿÿýÿÿýüüúÿÿýüüúüüúÿÿýýýûÿÿýóóñÿÿýûûùÿÿýÿÿýÿÿýûûùøøöÿÿýûûùÿÿýÿÿýÿÿýýýûýýûôôòääâÏÏÍÌÌÌÄÄÄÅÅÅÁÁÁÀÀÀÓŨծSЛן ߣê¬ ï±ðµè± ë´å® äª +ߣÚ ֝Ǐ¹·ƒ ¥u ¢v‡a I,  +  9!bB‘g¤s¶ƍ +˓٢ Ö  +å°㯠ë¸ï»í¸ +ì· î¶ ó· ù»÷»ö»í¸®†ÿýßÿüÿúþÿûÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúûÿ÷ûÿ÷ýÿþþþÿÿýüÿþùÿþõÿþùüýÿúýÿþþþÿÿì‘xB®„2¸~ӓ֜ Ü¥ â¬ëµí¶é³ í· ï· +ò¸ ïµ ð³ òµóµóµò´ñ³ð¶ ñ· ó¹ ôºôºõ»õ»ö½õ½õ½õ½õ½õ½õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ð¼ð¼ò½ó¿ öÁóÄðÈìÇܱ¼˜{e + + + 0./ žŸëêèÿÿýýýûÿÿýÿÿýïïíÿÿýýýûúúøÿÿýýýûþþüüüúÿÿýýýûÿÿýýýûýýûööôüüúÿÿýûûùøøöûûùþþüþþüüüúÿÿýÿÿýûûùþþüÿÿýÿÿýþþüýýûõõóûûùþþüÿÿýýýûÿÿýýýûþþüýýûþþüþþüÿÿýÿÿýÿÿýÿÿýõõóüüúýýûÿÿýûûùÿÿýþþüÿÿýÿÿýýýû÷÷õùù÷ÿÿýþþüúúøÿÿýÿÿýýýûÿÿýÿÿýûûùþþüýýûööôÕÕÓÅÅÃÂÂÂÄÄÄÃÃÃÅÅÅÅÅÅÓŨӮUЛÛ£æªð²ì® ê¯ è± ë´â« +äª +ã§۟՚͓ ¾‡¸‚°}§v s’kuTI,$ !     +   +6Y<{[•o¦z¬{µ€ÁŠ ϖ֠ڥܨÞªâ¯éµ ë³òº ô¼ ò¸ ÷ºòµ õ¼ +ñ¼ +íºÇ +ÿúßÿúÿøüûûÿûýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿùýÿóýÿóþÿùþþüÿþüÿýúÿý÷ÿþùþÿÿüÿÿýýÿÿþêÿø¼«}%ȉԐם ݦ ⪠ê³îµì²ò¶ +ó· ÷¹ õ· ô¶ õ·ö¹õ¸ô·ò¸ñ· ò¹ +ô» õ¼ õ¼ õ¼ ö½ö½õ½õ½õ½õ½õ½õ½õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ó¾ñ½ð¼ó»ó¼ +ô¾ñÁòÉìÅ⺠ӭ£† N: +  )'(jigÝÜÚôôòÿÿýûûùÿÿýýýûÿÿýýýûüüúþþüþþüúúøüüúùù÷þþüýýûÿÿýûûùÿÿýÿÿýýýûúúøüüúýýûþþüôôòÿÿýùù÷ôôòÿÿýÿÿýùù÷ÿÿýÿÿýþþüÿÿýüüúþþüûûùüüúööôÿÿýûûùòòðÿÿýýýûÿÿýùù÷ÿÿýúúøýýûüüúþþüùù÷ýýûýýûÿÿýûûùÿÿýþþüüüúÿÿýÿÿýÿÿýûûùüüú÷÷õÿÿýúúøÿÿýÿÿýþþüììê××ÕÇÇÅÄÄÄÄÄÄÃÃÃÄÄÄÃÃÃÐ¥ΩQԞ Ù¡á¥ æ¨ ï±í²æ¯ +ê´ã¬ å« ä¨ Ý¡؝З Ê¼†·ƒ ³~ ±|¬{¤v“i„_qRbHP8 +G1G1I4H4H1]DlN_&‘n*¡y"§|ªz ¬y·~ +¾„ȎқÚ¥Þªá¬ä°è´ì·ð¶ +ôºô¼ ó»÷ºõ¸ö¿ î¼ñ¿Ì¥$ÿýÏÿúöÿÿú÷üöþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿùþÿóþÿòþÿ÷þþüþþÿÿýÿÿýùÿþ÷ýÿúûÿüÿÿÿÿüéÿý½«zƒۘڝÞ¥ ä©ì°ð²ï° õµ ö¶ ù¹÷¹÷¹÷» õ¼ ó¼ +ñ¼ +ò½ ò» ô» +õ¼ ö½ õ¾ õ¾ õ¾ ö¿ õ½õ½õ½õ½ö½õ¼ õ¼ õ¼ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ó¾ó¿ò¾ñ½ó»ó» ò½ ñÀ òÄ ïÇêÅß¼Œm   + RPQÅÅÅîîîÿÿÿüüü÷÷õýýûõõóþþüþþüÿÿýûûùýýûùù÷þþüýýûÿÿýÿÿýÿÿýÿÿýÿÿýýýûýýûþþüÿÿýÿÿýúúøÿÿýÿÿýúúøüüúÿÿýýýûüüúÿÿýÿÿýúúøÿÿýÿÿýÿÿýüüúøøöÿÿýÿÿýþþüóóñÿÿýþþüÿÿýþþüþþüüüúÿÿýûûùýýûüüúÿÿýÿÿýÿÿýúúøþþüÿÿýûûùÿÿýþþüÿÿýúúøýýûôôòýýûýýûÿÿýííëÕÕÓÅÅÃÃÃÃÄÄÄÃÃÃÅÅÅÄÄÄÒĩЪUК ј ᤠã¥ê¯ è¯ +ë´é³ä­ äª +å© +Þ£ڟҘ ǎ ¿‰ ¼…¹€ ·{ µy ²x °w ªv¤xœu•q”q–s˜u—s—qžv¡y¥z¥y¦w «y³¼„ ÉɌ і +Ú¡ á«ä°ç² +ê¶ ïºð¹öº +õ¹ ó»õ½ö¹ö¼ó¾ ìºõÄá¹&±—BÿûÒÿþñÿþÿÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿõþÿõþÿúþþþýþÿþþÿÿýúÿþùýÿüùþúýýûÿý㢁:¹ˆ"NJԔ۟ â§ æª í²ò³ñ² ÷·÷· øº÷» ø¼õ¾ ó¿ ð¾ðÀóÁ +ô½ +ö½ ö½ ö½ õ¾ õ¾ õ¾ ö¿ õ½õ½õ½õ½õ¼ õ¼ õ¼ õ¼ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ò½ ó¿ô¿ó¾ó» ó» ó½ôÀð¾ öÊîËáÀÒ©±Œ`H + + GGG¶¶¶ðððûûûÿÿýûûùÿÿýÿÿýûûùþþüýýûÿÿýüüúÿÿýüüúþþüÿÿýýýûýýûÿÿýÿÿýþþüþþüÿÿýÿÿýÿÿýÿÿýþþüþþüúúøúúøþþüõõóüüúýýûööôýýûýýûÿÿýÿÿýÿÿýÿÿýþþüüüúþþüÿÿýÿÿýþþüÿÿýþþüüüúÿÿýþþüÿÿýûûùþþüþþüüüú÷÷õÿÿýüüúõõóýýûýýûýýûÿÿýÿÿýþþüüüúÿÿýúúøêêèÓÓÑÅÅÃÃÃÃÄÄÄÃÃÃÆÆÆÅÅÅÒĩЪY͖ϖ ߤ â¦ç¬ +æ­ë¶é´æ¯å« ç¬ +à¥Ý¢Ԛ +˓ +Ȓ č † +À‚  À º{µz®y¬z ©y §x©y ªz ­|®|¯{®{¯{ °} +²€·„½ˆÊΓԖ۞â§ è¯ +é³ ëµ î¸ó¼ +ñ¸ù¼ õ¹ òº ô¾ó¹ö¼ð» õÂð» ç¹ϯ6ÿÿ³ÿø×ÿ÷ñÿýúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýþþýÿýþÿûÿþýÿúÿýúÿýüýþÿüÿÿÿÿúÿþۙy&¸ˆȐіÛ ã©ç®î´ ñ· ò¶ +öº õ¹ õ¼ ô½ õ¾ ô¿ òÀ ï¿ðÀòÂõ¾ ö½ ö¿ õ¾ õ¾ ô½ ó¾ ô¿ ó¾ ó¾ õ¾ õ¾ õ¼ õ¼ õ¼ õ¼ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ò½ ó¾ö¾õ½ô» ó» ò¼ô¾ñºøÈíÇ ëÉãºÉ¢™w)   + + +222¤¤¤øøøúúúÿÿÿÿÿýüüúùù÷üüúýýûÿÿýüüúþþüûûùüüúþþüûûùúúøýýûþþüýýûýýûÿÿýýýûýýûüüúþþüÿÿýüüúüüúÿÿýýýûÿÿýÿÿýúúøÿÿýúúøúúøýýûþþüþþüþþüýýûþþüÿÿýþþüüüúÿÿýþþüûûùÿÿýþþüÿÿýûûùþþüõõóýýûþþüÿÿýýýûýýûÿÿýõõóýýûÿÿýÿÿýþþüüüúÿÿýùù÷èèæÕÕÓÇÇÅÅÅÅÄÄÄÃÃÃÅÅÅÃÃÃÎÀ¦Ê£T͖"Ԛٝâ¦é® é² å° +êµè³æ¬ +é® â§á§֜ +ј ˕ǏÈÄĂŃ Â ¿ +†¼ µ| ´{ +·{ ¹} º} +¹|¿ +½º¹‚»†Áǒ͖֛ڝá£çªì°í´í¶ï¹òº ñ¸ù¼ öº ñ¼ôÀòº õ½ðºëµ +úÀé´Þ·À¢*ÿýÁÿýãÿýóþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýþÿüÿþýÿûÿÿúÿúûÿùÿýúÿýþüýÿüÿÿþÿùÿÿÝ¡€1¬~¿‰ ֝Ù¡ã©ç®í´ ð¸ ð¸ õ¼ ò» õ¾ õ¾ ó¾ ô¿ ó¿ ñ¿ +òÀ ôÀ +õ¾ ö½ õ¾ õ¾ ô½ ô½ ó¾ ó¾ ó¾ ó¾ õ¾ õ¾ ö½ õ¼ õ¼ õ¼ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö½õ¼ óº óº òºó»ò¹ +÷ÃîÅ õÏëÄÕ®²‰oO    555’’’îîîþþþúúøÿÿýûûùþþüüüúÿÿýüüúþþüüüúþþüþþüüüúûûùüüúýýûüüúûûùüüúÿÿýøøöýýûÿÿýûûùýýûÿÿýþþüÿÿýÿÿýÿÿýþþüÿÿýûûùýýûÿÿýóóñÿÿýÿÿýþþüóóñÿÿýüüúúúøÿÿýþþüúúøýýûúúøþþüüüúÿÿýûûùþþüÿÿýÿÿýÿÿýÿÿýþþüüüúÿÿýúúøýýûôôòþþüüüúüüúèèæÔÔÒÇÇÅÅÅÅÄÄÄÃÃÃÅÅÅÃÃÃÎÀ¦È¡TƑљ؜ä¨ æ« ç° å° +ç³è³äªé® +â§â¨֜ +ӛ +ҙЗΑˍȈ Ɔ LJ NJ ¾¿‚Áƒ„ ƒÂ +LJ ɉ ˎ̑̔ ΗКӜÜ£ à¤æ«í±ñ¶ó¸ôºö¼óº õ¹ ù»ø»ó¾óÀô½ õ¾ øÃ÷¿ï®ù»ì»Ò©·•4ÿûÂÿþëþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿüüÿýþþþÿûÿþøÿùúÿ÷ÿþüÿýüüþûûÿú÷øóÿþæœx<®} Á͙Ù  ä§æ¬ ë±îµí· ô¼ òº ö¾õ½õ½÷¾÷¾ø¼ø¼ù½ ö½ õ¾ õ¾ õ¾ ò½ ò½ ó¾ ó¾ ó¿ ó¿ õ¾ õ¾ ö½ ö½ ö½ ö½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö½ ö½ õ¼ ó¼ ô» öº +öº ó¹ô¿öÅóË +èÈÞ»̝«ƒ$8%+++£££úúúÿÿýýýûþþüÿÿýüüúÿÿýüüúÿÿýþþüÿÿýÿÿýþþüýýûýýûýýûýýûüüúüüúúúøÿÿýùù÷õõóÿÿýýýûõõóþþüûûù÷÷õûûùüüúÿÿýúúøÿÿýÿÿýÿÿýûûùòòðÿÿýýýûÿÿýùù÷ûûùþþüÿÿýûûùüüúùù÷þþüýýûÿÿýÿÿýüüúþþüúúøþþüÿÿýøøöÿÿýüüúööôþþüûûùÿÿýýýûùù÷ääâÓÓÑÆÆÄÄÄÄÄÄÄÃÃÃÆÆÆÄÄÄÎÀ¦È¡VÁ‹ȏ +ٝ ᥠâ¨ã¬é´ å² è³ äªê¯ â§äª +מ םӔғВ ͑ ɎŌ ČƎËƌǍŊ +Á… À„È +nj ƍƎɍ ̎ ϏԖٜÛ á« +ä¯ é´ïºõ½ö½ ú¾û¿ö»ø¼ø¸÷¼óÀð¿ +ô¿ ô½ +ó¿õ¼ +û¶ó­õ¸éµ#Òª$´œ:ÿÿÞþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿüüÿýþþþþûÿþúÿùûÿùÿþüÿýüûýøüÿûÿÿýÿùéÿúʨz%¹‡Л Ú ã¦ä© é¯ê´ ì¶ ò½ð» ö¾ô¼ õ»ö¼ù½ø¼ù»ø¼ö½ ö¿ ö¿ õ¾ ò½ ò½ ó¾ ô¿ ó¿ ó¿ õ¾ õ¾ ö½ ö½ ö½ ö½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö¾ ö¾ õ¼ ö½ õ¾ ÷¾ ø½ ø¼ö¾ñ¼ ÷Ä ïÂðÎñÐ#ç·¾z`#  EEE¹¹¹ññïÿÿýýýûþþüûûùþþüüüúÿÿýýýûýýûÿÿýÿÿýÿÿýþþüþþüþþüÿÿýþþüÿÿýÿÿýýýûüüúÿÿýÿÿýþþüþþüÿÿýûûùÿÿýÿÿýÿÿýüüúÿÿýüüúþþüÿÿýÿÿýüüúþþüÿÿýÿÿýÿÿýýýûÿÿýþþüÿÿýûûùÿÿýþþüþþüüüúýýûÿÿýôôòùù÷ÿÿýõõóüüúÿÿýýýûÿÿýÿÿýüüúüüü÷÷÷ìììÕÕÓÈÈÆÆÆÆÄÄÄÂÂÂÄÄÄÂÂÂɽ£Á›PÏ"ƍ Ҙ לå« å® ç² ç² ë¶æ­ì± åªè® Û¢ +Ü¢ܞؙԖїИ͕ ɔɕ͖̓ʑˑ ͓͒ɐ Ǝϗ ͖Γ ԕ +ܛ àŸ â£ߣå® æ± ê· ð¼ó¾ ö¾ ø¼ù½÷¼ùÀö¸÷¼óÀï½õÀô½ +õÂë³øµÿºò±ê±à²ä%ÿÿÂÿÿçÿÿóÿþúýÿþýÿþþþüþþüÿýþÿýþþþþþþüýÿüýÿüýÿüýÿüþþüþÿúþþüþþüþþüýÿüýÿüýÿüýÿüþþüÿþüÿþüÿþüþþüþþüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýþÿýþþþþûÿþûÿüýÿüÿýüÿüüüüúþÿýüþýÿþñÿùہ5¾Š͓ ם Ý¢ç­ç­ ï¶î¶ òº ñ¹ +õ½õ½õ½õ½ö½ö½ö½õ¼ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö¿ ö¿ ö½ ö½ ö½ õ¼ õ¼ õ¼ ñ¹ +ò½ ñ¿ +îÀðÆòÉê¼Õ©²Œ!M0   +YYYÎÎÎÿÿÿóóñþþüÿÿýûûùùù÷ÿÿýÿÿýòòðÿÿýúúøÿÿýýýûøøöüüúüüúööôüüúÿÿýüüúúúøÿÿýÿÿýúúøÿÿýþþüûûùúúø÷÷õþþüþþüõõóýýûÿÿýþþüÿÿýüüúüüú÷÷õûûùþþüööôüüúþþüúúøÿÿýþþü÷÷õüüúüüúööôüüúþþüÿÿýûûùÿÿýÿÿýþÿúþÿúþþüýýûúøùÿýÿýûþåãæÜÜÜÍÍÍÀÀ¾ÅÅÃÅÅÃÂÂÀÄÄÂÐĪÀœP¼‰Š͓ ڞ Þ£ å® ã¬ è± æ¯ +ï´î± é¬åªÝ£ß§ Ü¡ ڞ +әԚ +ЗӚ ЗЗЗϖ ΕΕ +Ε +͔ ΕϖЖ՛ ֚כڝÝ ä¨ +â¨æ­é³ ï¹ó¾õ¾ ô½ +õ½ö¾ ö½ õ½ö¼õ½ó¾ ó¿ õ¾ õ¾ ö¿ ô½ õ¹ õ¸ó¸ð¶é´Û±¹¡5ÿÿ»ÿÿàþûôûÿÿûÿÿüþýüüüÿüÿÿüÿÿýÿýÿþúÿüúÿúûÿüûÿüýÿúýÿùþÿúþÿúþþüûÿþúÿþúÿþûÿþþþþÿýüÿûüÿüüÿþüýÿüûÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýþÿýþýÿþûÿþûÿþþþüÿýüÿüüÿÿýüüüþÿÿÿÿñÿýԛu,¸„ϕם Þ£ ã© +è® ê± +ï· ñ¹ òº ô¼ õ½õ½õ½õ½õ½õ¾ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö½ ö½ ö½ õ¼ õ¼ õ¼ ô½ ô¿ óÀ ñÀ ôÆöÉï á¶ǜšv, &&&ŽŽŽéééþþüÿÿýÿÿýÿÿýúúø÷÷õþþüÿÿýýýûùù÷þþüýýûûûùÿÿýÿÿýýýûþþüþþüüüúüüúýýûþþüþþüþþü÷÷õÿÿýÿÿýûûùýýûÿÿýüüúþþüýýûýýûÿÿýýýûÿÿýüüúÿÿýÿÿýüüúþþüþþüùù÷ûûùþþüûûùÿÿýÿÿýüüúÿÿýÿÿýÿÿýýýûÿÿýüüúÿÿûþÿúýýûþþüüúûÿþÿÿþÿêèëÛÛÛÐÐÐÅÅÃÅÅÃÆÆÄÄÄÂÂÂÀË¿¥·–I·‡‹͓֙ +לã© +㬠é²ì³ ã©í°ð³ æ«ç­ Û¤ᦠ+ߤ +מ؟Ӛם Ԛ +՛ ЖϕϖЗљљҚ ԚԘ؝ٞÞ£ ॠà¦æ¬ ç­ é° í´ òºõ½õ½ô½ ô½ +õ¾ õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö¾ô¼ òº ñ¹ ñ¹ñ¸îµæ´ϧ!±–/ÿÿÆÿÿåÿÿû÷üÿùýþþÿÿÿýþÿüÿÿüÿÿýÿýÿþûÿüûÿúûÿùûÿúýÿúÿþúÿþúþþüýÿþúÿüøÿüúÿüþþþÿüþÿûþÿûüÿýúûÿúúÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýüÿýüýÿüûÿüýÿüþþüÿýúÿýúÿÿýúúøþÿÿÿüîÿ÷Ϋ†?µ‚Ԛ֜ +Þ£ à¥ è® ç®ð¸ ð¸ ó»ô¼ õ½õ½õ½õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö½ ö½ ö½ ö½ õ¾ ó¾ ò¿ ð¿ ñÃôÇòÅíÁЧĝ&oN  + ___ÍÍÍÿÿýûûùõõóýýûÿÿýþþüÿÿýþþüþþüüüúþþüüüúüüúÿÿýýýûýýûÿÿýúúøûûùüüúùù÷ûûùÿÿýüüúúúøüüúýýûÿÿýþþüùù÷ýýûÿÿýùù÷úúøýýûúúøþþüüüúþþüúúøÿÿýÿÿýÿÿýþþüýýûÿÿýýýûÿÿýþþüÿÿýþþüýýûùù÷ÿÿýþþüøøöþÿúûü÷úúøýýûüüüÿÿÿÿÿÿïïïäääÔÔÔÆÆÄ½½»ÂÂÀÆÆÄÄÄÄΨ·–I´„¼…ɏ +ך ڟ⨠áªå® è¯î´ ï² í°é®å« å® ã© +㨠ޣߤ +ڟÝ¡ ؟ +Ù  ם ֜ +֜ +ם ؞ מ מ ؟ڟÜ¡Ü¡ä© æ«ã© +è® ë² í´ ð·ô¼õ½õ½ô½ ô½ +õ¾ õ½õ½õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ ô½ òº ñ¹ ñ¹ñ¹ð·ð¶ê° Ù§,«Š)ÿþÀÿûåþÿÿûÿÿ÷ýûýÿúÿþüÿüÿÿúÿÿúÿÿýþýÿ÷ûÿõûÿüþþÿÿýþÿýþÿýüþÿúûÿ÷úÿ÷ûÿúýÿüÿüÿÿüÿÿýúÿþùûÿùúÿúýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýüÿýüýÿüûÿüýÿüþÿúÿþùÿþùþýùÿÿýúüûÿÿñÿý՝{4µ‚ϕ՛ Ü¡ ߤ +æ¬ ç® ï¶ ð¸ òº ô¼ ô¼ õ½õ½õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ õ¾ õ¾ ö½ ö½ ö½ ö½ ô½ ó¼ +ñ¼ +ð½ +ð¿ ð óÅóÈà¶Ê£±Š#C'  """“““ôôòüüúüüúýýûþþüýýûÿÿýýýûÿÿýþþüÿÿýûûùüüúýýûùù÷ûûùÿÿýþþüÿÿýÿÿýþþüÿÿýÿÿýÿÿýÿÿýûûùööôÿÿýþþü÷÷õýýûÿÿýþþüþþüÿÿýûûùÿÿýþþüÿÿýøøöÿÿýýýûÿÿýÿÿýýýûÿÿýüüúúúøýýûÿÿýüüúüüúøøöÿÿýþþüúúøþÿúüýøûûùþþüüüüýýýþþþñññçççÔÔÔËËÉÃÃÁÇÇÅÇÇÅÂÂÂË¿¥¹˜K´„·€ ŋ؛ Ü¡ ã© +â« +é²å¬î´ í°ð³ +ò¸ç® ç° â¨ã© á§ã© +ߤॠۢ +Ü£ ޥܣ Û¢ Ü£ Ü£ Û¢ Û¢ +ݤ ॠᦠ+ߤã© +å« äª +ê± ì³ ï¶ ñ¹ô¼õ½õ¾ ô½ õ¾ ö¿ õ½õ½õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô¼ òº ñ¹ ñ¹òºó¸ó²ð³'ʚzÿÿÍÿÿì÷úóùÿýøÿ÷ýÿ÷ÿüüÿúÿÿùÿÿûþþÿ÷ûÿõûÿüþþÿÿüÿÿüÿÿüþÿýúþÿõýÿóûÿùýÿüÿýÿÿüÿÿýúþÿ÷ûÿùúÿúýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýúÿþúýÿúûÿúýÿúþÿúÿÿ÷ÿþ÷ÿþúÿÿûüüúÿÿñÿýÙ«ŠE°€ɏ Ԛ ٝá¦ã© +ê°í´ ñ¹ñ¹ ô¼ ô¼ õ½õ½õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ò½ ò½ ô½ õ¾ õ¾ õ¾ ö½ ö½ õ¾ ô½ ò½ ñ¾ ð¿ ïÁ òÄöÉìÂÖ¬ ʞ•r    ………ôôòÿÿýÿÿýûûùúúøûûùþþüüüúþþüýýûþþüûûùýýûþþüûûùÿÿýûûùÿÿýýýûûûùÿÿýþþüúúøÿÿýÿÿýÿÿýüüúýýûüüúýýûÿÿýûûùÿÿýÿÿýÿÿýúúøÿÿýÿÿýÿÿýúúøÿÿýüüúþþüúúøøøöüüúüüúûûùþþüýýûûûùÿÿýúúøÿÿýÿÿýþþüÿÿýÿÿýÿÿýÿÿýüüúúúøüüúôôòììêØØÖÐÏÍÇÆÄÆÄÅÃÁÂÇÅÆÐĪ´“Fµ…ºƒ ĉԗלà¥ ã¬ å® í´ é¯ò¶ +ó· ì²ð·ç° æ­ç® äªå« à¦ã© +ॠ⧠ᦠ+ߤÞ£ߤߤà¥ â§ ä© â¨ å« ã© äªå« ç® ì³ë² ð·òºô¼ô¼ ô½ ô½ õ¾ ö¿ õ½õ½õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô¼ ó» òº òº ò¹ï°î®ê©ם"­ƒ-ÿøÂÿÿìòþôöÿóøÿóÿÿ÷ÿûüÿúÿÿüÿþÿùûÿ÷ûÿúýÿüÿýþÿüÿÿúÿÿüþÿÿõþÿóýÿùýÿþþýÿÿüÿÿþúþÿ÷ûÿúûÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿýúÿþúýÿúûÿúýÿúþÿúÿÿ÷ÿÿ÷ýþøÿÿûÿÿýÿûïÿúٟA®~ϕӘ ؜à¤ᦠ+ë±ì³ ñ¹ð¸ ô¼ô¼ õ½õ½õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ò½ ò½ ô½ õ¾ õ¾ õ¾ ö½ ö½ ô½ ô½ ò½ ó¾ ñ¾ ð¿ óÂõÇóÉá· Ò¦ ¼˜fN  hhhõõóþþüüüúüüúÿÿýÿÿýüüúùù÷ÿÿýüüúÿÿýþþüýýûÿÿýþþüÿÿýööôþþüúúø÷÷õÿÿýûûùööôýýûúúøÿÿýÿÿýÿÿýþþüýýûÿÿýþþüüüúüüúýýûøøöüüúüüúÿÿýþþüüüúüüúþþüüüúýýûÿÿýýýûýýûÿÿýüüúüüúÿÿýüüúýýûþþüÿÿýúúøþþüþþüþþüüüúüýøþþüøøöððîÞÞÜÓÒÐÅÄÂÂÀÁÂÀÁÌÊË͜°Œ@´ƒ»„ĉ՘ +؝ߤ᪠â«ì³ ò¸ô¸ ð´ë±îµî¸îµí´ ç®ç® á¨äªã© å« å« ã© á§á§â¨â¨äª +æ¬ á§ç­ æ¬ +ç® é° ë² ï¶ë² ð¸ òº ó» ô¼ ô½ õ¾ õ¾ ö¿ õ½õ½õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö¿ ö¿ õ½ó» òº ò¹ó¹ñ²ö´ê©ћº–8ÿüÈÿÿäûÿîøÿõýÿ÷þÿúÿýþÿýþþÿúýÿùûÿ÷ýÿùÿþúÿüþÿúÿÿúÿÿþùÿÿõþÿùýÿþýýÿþýÿþÿúþÿùýÿþýÿþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿýúÿþúýÿúûÿúýÿüþÿúþÿ÷þÿ÷üýøÿÿýÿÿýÿýòÿþãš}C°ΔӘ؜ +Ý¡ á¦ ç­ ì³ð·ð¸ ô¼ô¼ô¼ õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ó¾ ó¾ ó¾ ó¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ ò½ ò½ ò½ ñ¾ óÀ ôÃûÌïÄâ¹ğ¦„#7 +TTTëëéýýûÿÿýÿÿýÿÿýûûùüüúÿÿýÿÿýúúøÿÿýÿÿýûûùýýûþþüÿÿýüüúÿÿýÿÿýþþüÿÿýÿÿýýýûÿÿýúúøûûùýýûýýûÿÿýüüú÷÷õýýûþþüþþüÿÿýüüúÿÿýüüúÿÿýÿÿýûûùþþüÿÿýýýûÿÿýÿÿýûûùýýûþþüüüúÿÿýþþüýýûúúøýýûýýû÷÷÷üüüûûùûûùüýøÿÿúÿÿûùúõêëæáâÝ×ÖÔÉÈÆÉÇÈÆÄŹµ´ykQ¡}1®}ºƒŊ؛ ۟ ॠߨ鲿­ð¶ î²ò¶ø¾ì³ +ëµ ò¹ñ·ë±ë° +ç¬é® +æ«æ« é® ç¬ +å« å« å« ã©ã©å¬æ­é° è¯ë² í´ í´ ð·î¶ òºó»ô¼ õ½õ¾ õ¾ õ¾ õ¾ õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ó»í¶ð¹í¶ì·ç²רŞ9ÿÿ¿ÿýéþþüøÿü÷ÿüúÿüûÿüýÿüýÿùúÿõûÿóþÿõÿýúÿûÿÿúÿÿüÿÿþüþþüýþÿýþÿýþÿþÿúþÿúþþÿþýÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿýúÿþúýÿúýÿüþþþþþüþÿùþÿ÷ÿÿûüüúÿÿýÿÿöÿùãÿþȵ…ĉҗٜ ٝ á¦ã© +í´ï¶ ñ¹ô¼ô¼ô¼ õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ó¾ ó¾ ó¾ ó¾ õ¾ õ¾ õ¾ õ¾ ö¿ õ¾ ó¾ ò½ ò½ ó¾ õÀôÁóÄöËèÀÒ«·ŽŠj PPPõõóÿÿýûûùõõóüüúÿÿýÿÿýýýûüüúõõóüüúýýûøøöüüúÿÿýÿÿýÿÿýüüúÿÿýÿÿýûûùýýûÿÿýÿÿýûûùÿÿýþþüôôòüüúÿÿýøøöööôþþüþþüÿÿýýýûýýû÷÷õûûùýýûÿÿýÿÿýüüúööôûûùýýû÷÷õýýûþþüýýûÿÿýþþüþþüûûùÿÿýþþüýýýÿÿÿþþüüýøþÿùÿÿúþÿùôõïðñìçèãÔÓÑÂÁ¿ÆÅÃÂÁ¿›—–,Œh¦u ½†nj ՘ +כߤâ« +ã¬ ì³ ì²ó· ó· ï¶ó»ì¶ ñ· ñ· í³ +ïµ ë° +í² æ«åªåªåªä«æ­æ­å¬ä«å¬ì³ ë² è¯ì´ í´ ë³ï· ñ¹ ó»ô¼õ½ö¾õ¾ õ¾ õ¾ õ¾ õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ +ô½ +ô½ +õ¾ õ¾ õ¾ ò½ë¶ò¿è¸ ç¸öÃë·Ý©!¿”.ÿûÇÿýãÿÿîøÿ÷øÿùúÿüýÿþýÿüúÿùúÿõûÿóþÿùÿüÿÿûÿÿüÿÿýÿþþþýþÿûÿÿûÿÿþÿúþÿúÿýÿÿýÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿýüÿþüýÿüýÿþÿýÿÿýÿýÿùýÿùÿÿýýýýþüýÿþùÿþïÿüͰ‚ ċ +Җٜٝ á¦ã© +î´îµ ð¸ ó»ó»ô¼ ô¼ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô¿ ó¾ ò½ ò½ õ¾ õ¾ õ¾ õ¾ ô½ õ¾ õ¾ ô½ ó¼ +ó¼ +õ¾ óÀ ðÁíÂôÌãº̟·J4 WWWììêýýûþþüþþüþþü÷÷õúúøÿÿýÿÿýýýûþþüûûùÿÿýýýûõõóýýûüüú÷÷õûûùÿÿý÷÷õÿÿýûûùÿÿýÿÿýþþüÿÿýüüúûûùÿÿýýýûýýûÿÿýþþüýýûüüúÿÿýúúøÿÿýõõóÿÿýûûùÿÿýÿÿýüüúÿÿýüüúÿÿýõõóÿÿýûûùôôòÿÿýÿÿýûûùþþüúúúÿÿÿÿÿýúûöþÿùÿÿúþÿùýþøíîéååãÒÐÑÊÉÇÁ½¼Â¾»A<8Šf©x¹‚ Ŋ +ҕ؜ᦠ+㬠áªë² ò¸ õ¹ ÷» ô» ñ¹ñ»ò¸ò¸ñ· ð¶ ïµ ïµ î´ î´ í² í³ +í² í³ +í² í³ +í² í³ +ì´ î¶ î¶ íµï· òº òº ï·òº ó» ô¼ õ½õ¾ õ¾ õ¾ õ¾ õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ó¾ ñ¾ í¼ +ì» ì½ í¿ +ìº ë·ë·&͞*¸”>ÿüÍÿÿéþÿööüøþÿÿýüÿûÿÿõþùúÿ÷÷ýóÿþÿúùÿÿþÿÿþÿýÿþýÿþûÿÿûÿþþÿúÿþúÿýþÿýþÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿþüýÿþýþÿÿüÿÿýÿýÿúûÿùÿÿÿýýÿÿýÿÿýúÿþôÿüÒ¯ƒ$É ˏ +Ӗ +Ý ä¨ê¯í³îµ î¶ ô¼ô¼õ½ö¾ö¿ ö¿ ö¿ ö¿ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ó¾ ó¾ ò½ ó¾ õ¾ õ¾ õ¾ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ò¿ îÁíÄïÇïÄá² +ęŸ(. ƒƒƒÿÿýÿÿýýýûþþüþþüÿÿýÿÿýüüúÿÿýýýûýýûþþüÿÿýÿÿýýýûÿÿýÿÿýýýûÿÿýÿÿýûûùÿÿýüüúÿÿýýýûúúøÿÿýÿÿýþþüþþüþþüÿÿýùù÷øøöÿÿýýýûÿÿýÿÿýÿÿýúúøþþüûûùÿÿýþþüüüúÿÿýþþüÿÿýûûùüüúÿÿýÿÿýüüúþþüþþüööôÿÿÿýýýþþüÿÿûýþøüý÷ùúôö÷òëëéÚÚÚØÖ×ÊÉǾ»\YT3$‡c©x»„ȍ ԗ ؜Þ£à©ã¬ ë² ïµ ó· öº +ô» òº ðºô¼ôºó¹ò¸ñ· ð¶ ïµ î´ í³ +í³ +í³ +í³ +í³ +í³ +í³ +í³ î¶ ð¸ ð¸ ï·ð¸ ó» ó» ñ¹ +ó» ó» ô¼ õ½õ¾ õ¾ õ¾ õ¾ õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô¿ ð½ +ï¼ ð¿ ð¿ ï¼ ñ¹ +óºòºÚ§'¼—>ÿù»ÿÿÕÿÿêÿüöÿûÿúûÿüÿÿûÿûûÿúöúùþÿÿþÿÿøùûýÿþýÿüýÿüýÿüþÿúÿþùÿýúÿýüÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüþþüýÿþýþÿÿüÿÿýÿûÿúûÿùÿÿÿþüÿÿüÿÿýþÿþúÿüØ­‚$ˆ ͑ ҕ Ý à¤é®è® ð·òºó»ô¼ ô¼ õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ó¼ +ö¿ ô½ ô½ ô½ ö¿ ÷Àö¿ ò¿ ëÁ ê +òÆ óÅ õÇÔ§Ë£)ƒg  ...ÓÓÓÿÿýùù÷þþüÿÿýûûùþþüþþü÷÷õýýûúúøùù÷ýýûüüúûûùþþüýýûýýûýýûüüúûûùúúøþþüùù÷üüúÿÿýùù÷ùù÷ÿÿýüüúøøöÿÿýÿÿýÿÿýúúøþþüööôúúøýýûûûùÿÿýüüúúúøþþüüüúûûùÿÿýýýûûûùþþüÿÿýÿÿýýýûüüúüüúûûùýýûýýÿ÷÷÷úúøýþù÷úóúýöþÿûþÿû÷÷÷ÜÜÜÈÆÇ¼¸·e`\ @0‡cªy½†ʏ՘ +ٝߤ +á© +å® ë² î´ñµõ¹ ô» òº ðºõ½õ½ô¼ó»òº ñ¹ñ¹ð¸ ñ· ñ· ñ· ñ· ñ· ñ· ñ· ñ· ð¸ ó» ó» ò» òº ô½ ô½ ó¼ +ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ÷¾ô¼ ò½ ò¿ ö¾õ¼ ÷¼ +ø¼ õºðºí»(Ö«+§…#ÿý½ÿøÞÿýøÿúÿþûÿùúüöüøûÿûóúóúÿûþÿýýÿúýÿúýÿúýÿúþÿùÿþùÿþ÷ÿþ÷ÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüþþüýÿþýþÿÿüÿÿýÿûÿúúÿùÿÿÿÿýÿÿýÿÿýþÿÿýÿüÝ­‚&Á‡ +ѕԖ ڝÝ¡ ä© ç­ ð·ô¼ó»ó» ô¼ ô¼ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö¿ õ¾ ó¼ +ò» õ¾ ô½ ó¼ +ó¼ +ô½ õ¾ õ¾ òÀ êÀ éÂ÷Ç öÆ ûÎàµΡ +¼™%YG + $$$­­­óóóüüú÷÷õÿÿýÿÿýüüúÿÿýýýûüüúÿÿýþþüûûùÿÿýýýûùù÷ÿÿýúúøýýûÿÿýýýûûûùþþüÿÿýûûùþþüÿÿýúúøøøöÿÿýüüú÷÷õþþüûûùÿÿýþþüþþüûûùÿÿýýýû÷÷õþþüýýûüüúþþüüüúûûùþþüýýûøøöýýûÿÿýüüúúúøþþüýýûüüúÿÿýÿÿÿÿÿÿÿÿýÿÿûúýöüÿøþÿûôöóëëíééë½Áea` A1 ‡d©y ¼…ʏ՘ +ٝᦠå­ä­ +ë² î´ñµõ¹ ô» òº ðºô¼ô¼ô¼ô¼ô¼ô¼ô¼ô¼õ»õ»õ»õ»õ»õ»õ»õ»òº õ½õ¾ ô½ ó¼ +ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ÷¾õ¼ ô½ õ½÷¾÷» ø» ù»õ· ò¶ +úÁì¹ç¹0Ê£:™|8ÿüÓÿüìÿûùÿþÿüþýûÿúùÿøúÿöúýöþÿúþÿúþÿùþÿùþÿùþÿùÿþõÿþ÷ÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþúþÿúýÿüýþÿÿüÿÿýÿúÿùúÿ÷þþþÿýÿÿýÿÿýþÿÿÿÿü߬ƒ'Á‡ ͑ ӕ ך á¥åªì²í´ ð¸ ô¼õ½õ¾ ö¿ ö¿ ö¿ ö¿ ö¿ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö½ ö½ ö½ ö½ ÷¾ ö½ ó¼ +ò» õ¾ õ¾ ô½ ó¼ +ó¼ +ó¼ +õ¾ ô ëÂíÄò +úÉóÉëÂäµ ¾••|5% +   + +)))¤¤¤÷÷÷ýýýÿÿýüüúüüú÷÷õýýûÿÿýûûùÿÿýþþüþþüüüúÿÿýþþüúúøÿÿýùù÷ýýûÿÿýýýûûûùÿÿýþþüýýûþþüüüúýýûûûùÿÿýÿÿýüüúþþüõõóýýûÿÿýøøöþþüÿÿýþþüüüúýýûÿÿýÿÿýþþüþþüýýûÿÿýÿÿýúúøþþüööôüüúÿÿýüüúþþüÿÿýûûùúúúþþþûûùþÿúþÿúþÿûûýúðòñäãè¾½Â^Y]" =.…b§w ºƒɎ ԗ כߤ +ä¬ ã¬ ë² ð¶ ó· õ¹ óº ñ¹ ñ»õ½õ½õ½õ½õ½õ½õ½õ½õ½õ½ö½ö½ö½ö½ö½ö½ô½ õ¾ ö¿ õ¾ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½õ½õ½õ½õ½õ½õ½õ¾ ö½ ö½ ø¼ø¼ö½ ø¼ ø»ú»ÿ¿û¼ï¶ôÀé¹ã·#Û¯,Ş7ŸƒDÿ÷Ùÿûõÿþÿøýöùÿöüÿöüÿöÿþüÿþüÿþúþÿùþÿúþÿúþÿùÿþùþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿþùþÿùýÿúýÿþÿüÿÿýÿúÿ÷øÿõýÿüÿýþÿþÿþüýþÿÿÿþ⭄(É ˏ ҕ ՙॠ㩠+îµîµ ð¸ ô¼ ô¼ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö½ ö½ ö½ ö½ ö½ ö½ ô½ ó¼ +õ¾ ö¿ ö¿ õ¾ ó¼ +ó¼ +õ¾ õÁ ðÃë¿ð¿ ñÀòÆôÊøËЦ¯ŒuY rrtÉÉÉîîîÿÿÿÿÿÿþþüÿÿýþþüùù÷þþüüüú÷÷õÿÿýúúøûûùúúøþþüþþüýýûþþüûûùýýûÿÿýýýûüüúÿÿýùù÷üüúüüúýýûÿÿýýýûüüúþþüÿÿýÿÿýûûùÿÿýÿÿýõõóüüúþþüýýûÿÿýþþüþþüýýûüüúÿÿýþþüýýûÿÿýýýûþþüüüúüüúýýûþþüþþüýýûûûùÿÿÿÿÿýýýûþÿúüÿøûýøþÿÿõöøº¹¿CBH +    D5 +†a¦v +»„ ːך ؜Þ£ á© +ã¬ ì³ ñ· ô¸ +õ¹ óº òº ò½ö¾ö¿ õ½õ¾ õ¾ õ¾ ô½ ô½ +õ¾ õ¾ ö½ ö½ ö½ ö½ ö½ ö½ õ¾ õ¾ ö¿ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½õ½õ½õ½õ½õ½õ½õ¾ õ¾ ö½ ù½ù½ ö½ ö½ ÷½ù¼÷¹ ø» +ô» öÁñ½ñ¼ð¹ä´$Å¢:ÿÿ¿ÿüìÿ÷úþÿýøÿ÷üÿöýÿ÷ÿýÿÿüÿÿýüÿþúýÿüýÿþýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿþùþÿùýÿúýÿüÿüÿÿýÿúÿ÷øÿõýÿüÿýþÿýüþüýýþÿÿþ䯆*ċ +̐ Ӗ +כ Û á§ë² ñ¸ñ¹ ó» ô½ ô½ ô½ ô½ ô½ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö½ ö½ õ¼ ö½ ö½ ö½ ö½ õ¼ õ¾ ö¿ ö¿ ö¿ õ¾ õ¾ õ¾ ó¿ óÁ í¼ïÀè¹ õÄøÊôËíÅ˞¯†O2  CCCÉÉËÿÿÿüüüÿÿÿúúúõõõýýûÿÿýÿÿýÿÿýÿÿýüüúýýûÿÿýþþüýýûþþüýýûÿÿýÿÿýþþüÿÿýÿÿýþþüþþüÿÿýÿÿý÷÷õÿÿýÿÿýüüúÿÿýýýû÷÷õûûùÿÿýüüúÿÿýüüúþþüüüúÿÿýýýûÿÿýûûù÷÷õýýûüüúùù÷ÿÿýýýûùù÷ÿÿýþþüûûùÿÿýûûùööôÿÿýþþü÷÷õÿÿýùùùøøöøøöÿÿûýÿúþÿû÷ùøÃÄÆ<;A + G9 ˆd§w ºƒ ː؛ ٝߤ +âª å® í´ñ· ó· öº ô» ó»ó¾ô¿ ôÀ ó¾ ó¿ ó¿ ó¿ ô½ +ô½ö¿ ö¿ +ö¿ ö¿ +ö¿ ö¿ +÷¾ ÷¾ õ¾ õ¾ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½õ½õ½õ½õ½õ½õ½õ½õ½ó¾ó¾ô¿ö¿ +÷¿ö¾ õ¾ õ¾ ôÀ õÁ ôÀ +ö¿ ó» ÷½ö¹ô·ë¶ز#¾¢>ÿüÜÿùûüüþûÿÿùþ÷ÿÿûÿûÿÿúÿÿýþÿþüýþÿûÿÿûþÿýþÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿþùþÿùþÿúþþþÿýÿþþþúÿ÷úÿ÷þþüÿýþÿýúÿûøýþÿÿÿᰈ)ƍ ʎ Ӗ +ܟڟâ¨ è¯ +ð¸ î¶ õ½õ¾ õ¾ õ¾ ö¿ õ½õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ÷¾ ö½ õ¼ õ¼ ö½ ö½ ö½ ö½ õ¾ ô½ õ¾ ö¿ ö¿ ö¿ ó¼ +ñºò¾ôÁð½ï¿ôÂõÇñÌ +èŠܯ ƙ—qH,RF,{ym˜™“º¼¹àâßÿÿÿýýýüüüÿÿÿýýÿþþÿýýýÿÿýùúõôôòüüúýýýýýûÿÿûûü÷ÿÿýþþüþþü÷÷õúúøýýûööôüüúûûù÷÷õúúøþþüýýûóóñÿÿýþþüôôòüüúÿÿýúúøÿÿýþþüôôòýýûÿÿýüüúþþüýýûôôòÿÿýûûùüüúÿÿýýýûúúøÿÿýýýû÷÷õÿÿýÿÿýööôüüúþþüýýûþþüþþüýýûýýûÿÿýùù÷ùù÷ÿÿýúûöñó𯱰124 'VB‰c¥u ·€ ǎ ՘ +ٞà¥ ä¬ ê°îµïµ ð·öº ö½ô¼ô¿ò½ ò¾ +ó¿ ó¿ ó¿ ó¿ ö¿ ö¿ +õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö½ ö½ ö¿ ô½ ô½ õ¾ ö¿ ö¿ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½õ½õ½õ½õ½õ½õ½õ½õ½ó¾ð½ñ¿ôÁö¿÷¼÷¼ +ô½ó¿ î¾óà ð¾ ÷¿ù½ú¼ô¶ ë° +æ¶Ȥ,ÿùÓÿúüÿÿÿüÿÿúýöþÿúÿüÿÿûÿÿüÿÿýþþþÿûÿÿûþÿûÿÿýÿþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþúÿþúÿýþþþÿýÿþûÿüûÿúýÿúÿúþÿýÿÿýûÿúôþÿúÿÿج‚ Ƌ ˏ +єڝٝã§ è­ ó¹ôºô» óº óº õ¼ ö¾ö¾õ½ô¼õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ñ»ô½ò¼î¹ë»ìÃíÌ íÏ é ԧ ½‹žp"“tHüë×ùúòùÿÿüÿûýÿúùûöþÿÿõôúÿþÿÿüÿÿýÿÿÿûüûöÿÿûÿþüøøúÿÿÿþÿúûþõþÿúþþüÿÿýÿÿýþþüýýûýýûþþüþþüþþüþþüþþüÿÿýþþüþþüýýûÿÿýþþüþþüÿÿýÿÿýþþüþþüÿÿýüüúÿÿýýýûúúøÿÿýÿÿýúúøÿÿýÿÿûüýøÿÿûüýøÿÿûüýøÿÿûþÿúüüúÿÿýÿÿýüüúýýûýýûþþüþþüýÿüþþüÿýþþüýêê蜜š%%% .^A c§t ¶‚ ɓҘÝ¢ߤæ¬ ç¬ +ì³ í³ òº ô» ð¸ õ»ñ¹ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ò¾ï¿íÀò¿ö¿û½û¼ ú¼ö¼ôÀ ì¼öÅôÁð¸ ÷ºöµñ° é« +Ò¡+ÿûÜÿûÿþÿûúÿöÿÿúýþøþþüþþþÿüþÿýþÿþüýÿüúÿþúÿþýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþúÿþüÿýþþþÿûÿþúÿüýÿüÿþüÿýÿÿùýÿ÷õÿÿöøùéÿÿÓ°…È̎ ѓ +۞Ü  +æª ê¯ ò¸ò¸ ð·ô» ÷¾÷¾ó»ñ¹ ó»ö¾õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ó½ô½õ»ð¹ë»èÀæÇ +èÊëÈ +චϚ²}‡^¼¤€ÿüíûÿýûÿúïôîþÿûúüûüûÿÿþÿüùÿýûþÿýøþûôÿÿûýüú÷÷ùúúúùüõõøïýþùýýûþþüþþüþþüþþüþþüýýûÿÿýÿÿýüüúüüúÿÿýÿÿýþþüþþüþþüüüúþþüÿÿýÿÿýÿÿýüüúþþüóóñýýûÿÿýÿÿýÿÿýúúø÷÷õþþüüýøùúõüýøúûöÿÿûûü÷þÿúþÿúþþüúúøüüúÿÿýþþüööôÿÿýþþüýÿúüüúüúýÒÐс€~4 bB‘d§t ¹…Ɛ +ӛ +Ù¡à¤åªé® î³ íµ +ó» ô¼ ò» ö¼ô» õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ó¾ï¿ñ¿ò¾ö¿ú¼ú» ù»÷ºö¾ïº +óÀ ñ¾ ï¹õºó¶ð±êª +ҟ*ÿúÙÿþÿ÷úóüÿøüýøÿÿýýÿúýÿúÿýþÿüþÿþüýÿúúÿüúÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿþüþþþûÿüûÿüýÿúÿþüÿûÿÿúþÿþÿûøïÿÿêÿÿɬ̑̎ ѓ +ڝÝ¢ +æª ì± ò¸ò¸ ö½óº ñ¸ óº ö¾÷¿ô¼ð¸ õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½õ»ô¼î¼ è¾ +æÂ +çÅ é ᵠ+Ý©͛"smSíãÈ÷÷íøú÷þÿÿ÷ùöûýúÿÿÿÿÿÿÿÿÿõõóþýøÿÿúÿþúÿÿýÿÿÿýýýþÿûýÿùÿÿûóóñüüúÿÿýôôòûûùÿÿýôôòýýûþþüùù÷ùù÷ÿÿýÿÿýüüúýýûüüúùù÷þþüüüúýýûÿÿýüüúÿÿýÿÿýýýûøøöøøöüüúÿÿýÿÿýþþüþÿúûü÷üýøûü÷þÿúûü÷üüúûûùÿÿýõõóÿÿýøøöýýûÿÿýüüúÿÿýþÿýÿÿý¾¼¿QOR  9%eE’e¦s +»‡Ď֞ Ø â¦åªé® î³ î¶ ó» ô¼ ó¼ +÷½õ¼ õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½õ½õ½ö¾ ö¿ø¾ö¾õ¼ óº÷¼ò·ó¹ó¹óºðºè³æ°á© +Ȟ(ÿÿØûúøþÿýüþýÿþÿýûÿýÿþýÿüÿýþÿýþÿþüýÿüûÿþûÿþýÿþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿþúþþüýÿüýÿüþÿúþÿúþüýÿþÿþþÿÿÿöÿÿߘ€@¼‹"Ĉ͏ +єכ Û å© í²ôºõ¼ ò¹ +ô» +ö½õ¼ ó»ó»ô¼õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô¼ õ½ô¼÷» ö½ ò¾ +ì¾ è¿ èÃêÃìÁß­ П»‘#_}Rÿúçÿüùÿþÿûûûÿÿýôõðÿÿûùúõÿÿúùøôþýùúù÷ÿýþÿÿÿûûûþÿýþÿûüüúÿÿýþþüüüúÿÿýÿÿýýýûüüúýýûþþüúúøøøöþþüþþüúúøýýûÿÿýúúøÿÿýûûùûûùþþüúúøÿÿýüüúüüúÿÿýÿÿýþþüþþüÿÿýþþüÿÿûþÿúþÿúýþùþÿúýþùýýûüüúûûùþþüúúøÿÿýÿÿýïïíÿÿýýýûõ÷ô°°°97<  @*iJ +c¥r ¹…ŏ ՝ Ú¢ã§ æ« ê¯ ì± î¶ òº ô¼ ô½ ö¼õ¼ õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½õ¾ õ¾ õ¾ õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö½ ø¼ù¼ ø½ ö¾õ¿ó¿ ò½ ó»õºõ¸ô·ó¸óºìµâ­ Þ¬Ö§Ä¢6ÿÿØýþùøúùýþÿÿüÿþûÿýÿþýÿüþþÿÿýÿþþüþþþýþÿýþÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþÿúþþüþþüþÿúþÿúýýýüüþöúýÿÿóÿÿԟ4º†Ȍ +͏ +ҕ כ Ý¢ +ä¨ +î³ò¸óº ò¹ +ô» +õ¼ ö½ô¼ ó» õ½ö¾õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô¼ò¼óºö» ø½ö¾ ï½é¾èÀðÇòÇäµ×§Ì¢©† nS˸—ÿýöþùÿôòõÿÿýùúôøûòþÿöýÿõúûöýýûù÷øþüýþþþ÷÷÷úüûúüûüüúýýûÿÿýÿÿýüüúþþüÿÿýüüúþþüÿÿýþþüüüúþþüýýûüüúÿÿýÿÿýýýûÿÿýýýûûûùüüúùù÷ýýûÿÿýýýûýýûüüúööôùù÷ÿÿýÿÿýýýûýýûüüúýýûþþüÿÿýÿÿýÿÿýÿÿýÿÿýÿÿýýýûÿÿýþþüÿÿÿôôô’”“ F1mK Žb ¥r µ Ɛ +Қ Ý¥ +ã§ ç¬ +ë°ì± ï· ñ¹ +ô¼ õ¾ õ»õ¼ õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½õ½õ½õ½õ½õ½õ½õ½õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ ö½ ú¼ú½ö¾ó¿ óÀ ò¿ ô¼ ôºö¹ó¹î¶ í· í·è¯ +ã§ß§Ñ¥(´›AÿÿÝýÿúþÿÿüûÿÿüÿÿúÿýÿþûÿüýþÿþþÿþþüþþüþþÿþþÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿùþÿùÿþüÿþüþÿúþÿúÿÿýþÿÿúÿÿÿÿïÿ÷Á¥}&½ˆÁ„ˍӖٝ á¦ å© +î³ð¶ ð·ö½óº ñ¸ óº ö¾øÀö¾ó» õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½ò¼óºö» ø¼÷¼ò» ë»ç»è¿ëÁ îÀ +ë½Ï£½•›wpU æÖÆÿüýýøüÿýþÿÿúþÿöýÿóûÿñÿÿúÿÿÿÿýÿÿþÿÿÿÿüüüýþÿýÿþóóñÿÿýúúøõõóÿÿýüüúôôòÿÿýþþüþþüÿÿýþþüüüúüüúþþüÿÿýùù÷ûûùýýûÿÿýÿÿýýýûýýûþþüüüúøøöûûùÿÿýÿÿýÿÿýüüúòòðüüúýýûûûùýýûûûùÿÿýþþüþþüòòðÿÿýùù÷ýýûúúøÿÿýÚÚÚ[[[ L5 oN Œ` ¥r ´€ +Ɛ +ИÞ¦ â¦æ« í²ì± ð¸ òº ô¼ ÷Àõ¼ ö½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½õ½õ½õ½õ½õ½õ½õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö¾ ú½ù½õ¾ ó¾ ò¿ò¾ó»òº ó¹ñ· ç±æ°㬠â¦å£Ú¡Àš9ÿÿÂÿýäüÿûüþýýýÿÿüÿÿýÿýÿúûÿúûÿÿýþÿþþüþÿúþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþýÿüýÿùþÿùÿýüÿýüÿþüþþüùûú÷ûúùÿÿÿÿêÿþ¼¯ÁˆÀƒʌӖٝ ã¨å© +ï´ð¶ ò¹ +ñ¸ ô» +÷¾ ö½ ò» ñºô½ øÁõ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ó¾ñ½ò¼÷» ÷º ÷º +ô» î¼èº äºïÅðÄ ì¿ΠÔ¨!¬‚tR‹wVÿ÷íÿüýÿþÿÿÿýøûôûÿóüÿôýÿùúúúÿýÿÿýÿûûûþþüþÿÿþÿÿüüúüüúýýûÿÿýÿÿýýýûüüúþþüýýûùù÷ýýûÿÿýúúøüüúÿÿýüüú÷÷õüüúùù÷ÿÿýÿÿýûûùÿÿýÿÿýýýûþþüÿÿýÿÿýûûùúúøþþüÿÿýþþüÿÿýüüúýýûúúøÿÿýüüúüüúýýýüüü÷÷÷ÿÿÿñññ¢¢¢111 +"P8qO‹]¢o³ ÍљÝ¥ +ä¨ +æ« î³ì± ñ¹ñ¹ +ó» ÷Àô» õ¼ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½õ½õ½õ½õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö½ ø½ ö¾ õ¾ ó¾ò¿ð¼ï¹î¸ï¶ë² äªâ¨Ý¢ڜ àœ˒)ÿü¿ÿþáýýñüÿýüþûÿÿýÿùýþúûýÿ÷ûÿ÷ûÿÿûÿÿþÿúÿþùÿþùÿþùþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýÿþýÿúþÿùÿýüÿýþÿýþþþþþÿÿûÿüüÿûÿüߥ€2³}½‚ NJ ɋӗ؜ᦠ+ä©ðµó¹÷¾õ¼ ô» +óº óº ô½ õ¾ ô½ ó¼ +õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ ó¾ ï½ñ¾ õ¼ ÷º +øº ÷½ñ½ê½ å»ëà íÄìÂäµΞ ŕžw[D° ‡ÿüôúñòýûüþÿýóùíùÿóýÿùöø÷ÿþÿýûÿ÷÷÷þþüýÿüüþûÿÿýüüúûûùÿÿýÿÿýüüúùù÷ûûùþþü÷÷õüüúÿÿýûûùþþüÿÿýüüúþþüÿÿýùù÷þþüüüúôôòÿÿýüüúÿÿýþþüüüúýýûÿÿýÿÿýÿÿýýýûþþüÿÿýüüúþþüûûùÿÿýþþüÿÿýÿÿÿþþþÿÿÿÇÇÇJJJ #Q:sN‰[žk´€ +¿‰Ԝ ܤ ç« ç¬ +î³ë° +ñ¹ð¸ òº ö¿ ò¹ +ô» õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½õ½õ½õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö¾ö¾õ½õ½ò½ï» í¹ë¶ê²ç¬ᥠá¤؛ іϔ,³ƒ;ÿöØÿýøýýûûÿþþÿýûúöÿüþÿþûþÿõûÿõúÿþûÿÿþÿúÿÿ÷ÿþõÿÿ÷ÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýÿþýÿúþÿúÿýþÿüÿþþÿýþÿþÿÿýÿùÿÿôÿùÒ¬€)¿ƒÁ… Ɖ +ΑԘá¦ç­í²ò¸ñ· óº õ¼ ô» õ¼ ö½ö¿ õ¾ õ¾ ö¿ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ ö¿ ö¿ õ¾ õ¾ ô½ ñ¼ +óÂð¿ ò» öº ø¼ö¼ð¼ë¼ +æ¾ìÄ +èÀé¿ á²Ú¨ő +²†‚fVDÒÁ¯ÿúøÿýÿÿþÿùþøûÿ÷úü÷þÿýÿþÿÿýÿüüþÿÿýùûöþÿûÿÿýüüúÿÿýÿÿýÿÿýûûùýýûýýûûûùÿÿýÿÿýúúøÿÿýÿÿýôôòýýûþþüýýûÿÿýÿÿýüüúÿÿýÿÿýüüúúúøÿÿýóóñüüúÿÿýôôòþþüüüúþþüýýûÿÿýýýûÿÿÿûûûüüüûûûûûû×××ttt*V=vRŠ\£o ³ ÍҚ Û£ç« ê¯ è­ ðµó»òº òº ò» ô» ø¿õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö¿ ö¿ ö¿ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ õ¾ õ¾ õ¾ õ¾ ô½ +ô½õ¾ ô½ô½ +ô½ +ô½ +õ¾ õ¾ ö¾õ½ð·ó¸ü¾ïµ ó½è³ í·Ý¡ç¥ۗؔ ԘÀŒ'¥|<ÿùÚÿú÷ÿüÿýþÿûÿþýÿüÿþúÿüþÿýúþÿõûÿõúÿþúÿÿþÿúÿÿ÷ÿþõÿÿõÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýþÿýÿúþÿúÿýþÿüÿþýÿýþÿûýúþþòÿüäÿÿʨvă ¾€ƊӖٞæ«ë±ñ¶ö¼ôºõ¼ õ¼ ô» õ¼ ö½õ¾ ô½ ô½ +õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö¿ õ¾ õ¾ ô½ ñ¼ +ð ñÀ ñ¼ +õ¼ ÷»õ»ð¼ì½ â¸ã»ê +æ» +æ·Ø¥ ʕ ´ƒ ’qhPbK,åÔÌÿ÷üÿýÿúþýüÿûþÿûüþûþüÿÿþÿýýÿýýûøúõúýöüýøõõóÿÿýøøöüüúÿÿýûûùÿÿýÿÿýþþüÿÿýóóñÿÿýûûùüüúÿÿýúúøøøöúúøÿÿýÿÿýþþüûûùøøöÿÿýýýûúúøÿÿýýýûûûùÿÿýüüú÷÷õÿÿýýýûõõóþþþÿÿÿ÷÷÷×××~~~((( . Y>wQ‰[¢n²~Í љÚ¢æª é® í²ï´î¶ ð¸ õ¾ ÷Àõ¼ ô» õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö¿ ö¿ õ¾ õ¾ õ¾ õ¾ õ¾ ö¿ ÷À ÷Àö¿ õ½õ½îµûÂù»î°ö¹î´ ïµÞ£ â£ח֕ϔĔ2¦:ÿüÚÿùðÿûÿþüÿýþÿýÿüþþüÿýþÿüÿÿüüþÿ÷ûÿ÷úÿþúÿÿþþüÿþùÿþ÷ÿÿ÷þÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýþÿþþüÿþúÿýþÿüÿþýÿýþÿÿÿûÿûèÿÿؙ{5¼†Áɉ ʎ ՙÜ¡è®ë±ðµõ»ó¹ ò¹ +õ¼ ô» õ¼ ö½õ¾ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ò½ ð¿ ñÀ ó¾ ô½ õ¼ ó»ðºî»âµßµè¾ +åº äµØ¥ Ϙ +¸…¦€ƒdD)_J7âÖÖÿýÿûüþüÿýýÿüþÿýüúýýûþüüüþþüùüõýÿùÿÿûùù÷ÿÿýööôýýûÿÿýýýûüüúýýûúúøÿÿýùù÷ÿÿýüüúýýûüüúÿÿýÿÿýýýûþþüÿÿýÿÿýþþüýýûýýûþþüÿÿýüüúþþüÿÿýøøöÿÿýüüüûûûüüüýýý÷÷÷ÝÝݜœœ,,, 3$]@uOˆZ¢n²} ŒљÚ¡ å© ç¬ +ë°ðµð¸ ñ¹ +ô½ õ¾ õ¼ ö½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö¿ ö¿ õ¾ õ¾ õ¾ õ¾ ö¿ +ö¿ +õ¾ õ¾ õ¾ õ¾ õ½ô¼ ó»ó»ò¹ðµê°ôºî± ã£è§ Ú˜ؗ іƔ!±Š/v6ÿþÚÿûéÿÿûýÿþýÿþþÿúþÿùþþþþýÿÿüÿÿüÿÿþüýÿúúÿþúÿÿþþþÿýüÿþúÿþùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýÿþþþüÿþúÿýüÿüÿþýÿýþÿûûóÿÿäÿþƜt¶} +ÂÄҗ۟ äª ð¶ð·ò¸ö¼ô» ô» õ¼ ô» õ¼ ö½ö¾õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ò½ ñ¾ ò¿ ó¿ ô½ +õ¼ ó»ðºí¹åµ â´ã¶èº ݬۨҙ ÁŒ «~ ˆdkK-QC:ÌÆÈòòôðôóüþûüþûõóôþüýÿÿÿüþûøûôüÿúþÿúÿÿýþþüüüúÿÿýúúøÿÿý÷÷õÿÿýÿÿýýýûÿÿýùù÷ÿÿýÿÿýÿÿýûûùÿÿýüüú÷÷õûûùÿÿýþþüþþüýýûððîýýûýýûõõóÿÿýÿÿýûûùýýýÿÿÿÿÿÿííí¯¯¯CCC  8) +^A uN‰Z¢n²} Í ј Ù å© æ« é® ðµòºòº ó¼ +ó¼ õ¼ ø¿õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô¼ òº ñ¹òºò¹ñ¸í²ô¹ñ¸à§ä©æ§ Ý› ۘѕ¾Ž"«‹4ÿý¾ÿÿÜÿÿíÿÿøüÿûûÿúýÿùÿÿ÷ÿþùýÿþýþÿÿûÿÿüÿÿýþýÿüúÿþûÿÿÿýÿÿüÿÿþüþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþýÿüþÿúÿþúÿþúÿýþýþÿýþÿÿÿöÿøÕ›y1®}† ӓϑ +Ҙ ߤ è®ó¹óºò¸õ»óº õ¼ õ¼ õ¼ õ»÷¾ö¾õ½õ¾ ö¿ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ ò½ ó¾ô½ ó¼ õ¼ ö½ó»í· ê¶ ä²á²åµ Ú©Û¨֝ȑ®{—kzV K1!-&ìíïýÿþþÿýýüúþýûõõõþÿýþÿûèíçúúøÿÿýþþüÿÿýþþüóóñþþüýýûÿÿýýýûúúøÿÿýööôþþüþþüúúøýýûÿÿýÿÿýýýûýýûûûùùù÷þþüÿÿýÿÿýûûùÿÿýÿÿýööôõõóÿÿýöööÜÜܚšš::: + + +;+ +`AsL‹\£o ³~ +Í ј Ù ä¨ +æ« ë°ï´ï· ð¸ ô½ ö¿ õ¼ õ¼ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½ö¾õ½òºñ¸ñ¸ð·î´ð´ä¨ +Û¤ å°ӜϗҘŎµ†.¡?ÿûÎþýÞúÿëúÿòýÿôøùñýÿ÷ýÿ÷ÿþ÷ÿþùýÿüûÿÿÿüÿÿýÿÿýÿþþüûÿþûÿþÿýÿÿüÿþþüþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúþÿúÿþúÿþúÿþùþþüýþÿýþÿÿÿóÿÿÔ¨'¿ˆʼn„җ ؞ à¥ æ¬ +ð·ñ¸ñ· óº ñ¸ ô» õ¼ ô» õ»ö¼ö¾õ½õ¾ ö¿ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô¼õ½ô½ ó¼ +õ¼ ö½õ»ñ· ê´ â®ã°Ý­Þ¬ Ù£ מ˒»„¢q „\`B2  + +;<>›œææäÿÿûþýùûûùùûúùþúüÿýþÿýüüúÿÿýüüúÿÿýüüúýýûÿÿýùù÷úúøýýûÿÿýþþüüüúþþüóóñþþüûûùûûùþþüþþüúúøüüúÿÿýõõóþþüýýûýýûúúøùù÷ââà««©kkk$$$ <, _@tM^¥q µ€ Ď +ј Ù ä¨ +æ« é® ï´ñ¹ñ¹ +ó¼ +ô½ +õ¼ ÷¾õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ õ¾ õ¾ õ¾ ö¿ ö¿ õ¾ õ¾ õ½ñ¹ ó»óºð·í´ë±è®äª ⦠+Ý  ՝ +̗ ̚À¼*¢{,ÿöÂÿúØÿÿíüÿööÿõûÿúÿÿøÿþùýÿùþÿùÿýúÿýúýÿúûÿüþþþÿýþÿýþþþüûÿüýÿþÿüÿÿüÿþÿúýÿùþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúýÿùþÿùÿþùÿþùÿÿ÷ýÿúûÿÿýÿþþûêÿþ̬|Æɍ‡ٟݤäª å¬í´ ð¸ ôºö½óº ö½ ô» ô» ôºö¼õ½ô¼ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ôºö¼ö½ô» öº ø¼÷»õ¹ ïµ è°ã®ܨߪס ՜ ͒·{ ²}†[oRP> ! + + +997†…€×ÖÑëëéòôóüÿÿöúùúüûøøöûûùúúøÿÿýÿÿýÿÿýýýûÿÿýÿÿýüüúýýûýýûþþüÿÿýüüúþþüûûùüüúþþüþþüýýûúúøööô÷÷õõõóÞÞÜÈÈÆ››™SSQ"" # ?, `@wNa §s µ€ Í ЗÙ ä¨ +æ« ç¬ +ï´ó»ó» ò» ò»õ¼ ùÀõ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ ô½ ó¼ +ó¼ +ó» ô¼ õ½õ½õ½õ½ô¼ ó»î¶ ï¶ ì³ç­ â¨á§Ý¢ٞ՘ß¡֙ Ə½‹(¬„<ÿùÑÿùâÿÿïÿÿôö÷ïÿÿúÿþüüøùÿüÿÿþÿþýÿÿýÿÿúÿÿûüýÿùúÿ÷ýÿ÷þÿùÿþúÿþúýÿúýÿþÿüÿÿüÿþÿ÷ýÿõþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúýÿùýÿùÿþúÿþùÿþùþÿúûÿÿþÿúÿÿèŒv<´„ɋƈ͐їݤ â§ à¤æ«ì² ò¸ ô» ð·ò¹ô» óº ôºõ»ô¼ó»ó»ô¼ ö½õ¾ ö½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ ó¼ +õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ óº ÷¾÷½ôºó¹ ÷»ø¼÷» ôºï· áªß©Û¤ Ú¢ ИΔ¾ §n˜j +€] [E 5'  ''%RRRƒ‚¬­¯ÄÅÇßßßññïõõóúúøûûùññïÿÿýûûùôôòýýûóóñþþü÷÷õþþüúúøõõóõõóøøö÷÷õîîìääâÝÝÛÈÈÆ©©§__]//-  +) A*`@xO“b©t µ Ì З؟ã¨ æ« ì± ïµ î¶ ð¸ õ¾ ÷Àö½ õ¼ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½õ¾ õ¾ ö½ ö½ ö½ ö½ õ¾ õ¾ õ¾ ô½ ô½ ó» ô» ó¹ ó¹ ò¹ +óº ó»ô¼ò½ñ¼ð» ï¹í· ëµ å® Ü¤מ֜ +՛ И˗»Œ»‹¢ušt3ÿ÷Òÿüóÿüÿúþÿöüüþÿûÿþúÿûýÿüÿÿýÿûøÿþýÿÿüÿÿúÿÿüþýÿùûÿ÷ýÿõþÿ÷ÿþúÿþúýÿúþþüÿüÿÿýþþÿ÷ýÿõþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúúÿùúÿúþþüÿþüÿþüÿþüþýÿÿý÷ÿþۓy/·ˆƋӑ Όՙ֝â¥æ§ ê¬ í²ñ·ó¹ ò¹ +ñ¸ö¾ó»ò¸ó¹÷½ø½õºò¸õ¹ ò¹ +öº +ö½ ÷¾ õ¼ +ó¼ +ó¼ +ö¾õ½ö½õ¼ õ¼ ö½ ù¾ ÷¾ ô½ ò½ ó¿ ó¿ ó¿ ó¿ õ¾ õ¾ ô½ +õ¾ õ¾ õ¾ õ¾ õ¾ ö½ ö½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ó¼ +ô½ õ¾ ó¼ +ô½ ö¿ õ¾ ò» ó¼ +ô¼ õ½ö¾õ¼ óº ñ¸ ï· +ì´ å¬Þ§Þ¦ Ù¢ +Қ͓ ¾„±y ™g‚Y kKI2" %%%312III^^^}}}˜˜˜«««ºººÈÈÈÑÑÑÖÖÖÓÓÓÌÌÌÃÃ÷··«««¢¢¢œœœ‹‹‹dddBBB$$$ + + +4# J2gC}R˜f­w +¸ +Ì ϗ ՝Þ¦ å« é° í´ ò¸ ô» òº òº ó» õ¾ õ¾ õ¾ õ¾ ô½ +ô½ +õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½õ½õ½ö½ ø½ ÷¼ø½ ø¼ ÷¾÷¾ö½ö½÷¾ôºó¶óµ÷ºõ· ù½ñ·î¸ð»í¸ï»è´á­Þ©ӝ֞ ЖϔΒ»ˆž3z?ÿÿÊÿÿÓÿ÷Ýÿýïÿûøýûþýÿþýÿüþÿúþÿúÿþüÿýþÿýÿÿýÿþþÿþþþÿýþÿþüþÿúýÿúþÿúþÿúþþüþþüþþüþþüÿýþÿþüþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüúÿúûÿüÿýÿÿýþÿýúÿýúÿýþÿþòÿþӝ€4´…ƌÄϋҘ ؟ +à£ ã¤ ã§ ç¬ +ì± ï· ò¸ òº ï· +òºõ»ôºò·ñ¶ô·ö¹÷ºù½ù½ö½ õ¼ ö½ ô½ ñºó» ô¼ ö½ö½ù½ ù¾ ø½ õ¼ +õ¾ ó¾ ó¾ ó¿ ó¿ ó¿ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö½ ÷¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö¿ ô½ õ¾ ö¿ ô½ õ¾ ÷Àõ¾ õ¾ õ¾ õ¾ õ¾ ö¾õ½ó» òº òº ï· ê± +å« ß§ +Û¢ ՝ +ϖ ½ƒ°x ži Š[ sMT80  +  '''///222---%%% 9&P4iEU›g®y¸ +‹ ϗ՝ +Þ¦ ä­ +é° ì´ ò¸õ»õ½õ½õ½õ¾ õ¾ õ¾ õ¾ ô½ +ô½ +ô½ +õ¾ õ¾ ö¿ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ½õ½ö½ ø½ ø½ ø½ ø¼ ö½õ¼ ó»ôºôºò¸ñ´ñ³ö¶ó´ì­ú¿í¶î¹éµÞ«á¬ß©֟ҙ +̖ÁŒ»Š#­| šu.ÿÿÑþûÜÿÿêÿþïÿüõÿþüÿÿÿüüþþþþþþüþÿúþÿúþþüþþüÿýÿÿýÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþþþÿÿûÿÿûþÿýóÿÿðÿþ÷ÿþìÿûР‚9¶‡É ϊҍʼnҙ Ú¡ +ݥ᩠+æ¯ ë´í·ï¶ï¶ð·ð·ò¸ó¹ó¹ó¹ õ¹ õ¹ î±ó¶ ò¸ ð·ò¹ +ö¾÷¿ô¼ ô¼ô¼ô¼õ½ø¿ø¿÷¾ õ¼ +õ½õ½õ½õ¾ õ¾ õ¾ õ¾ õ¾ ö¿ õ¾ ö½ õ¼ õ¼ ö½ ö½ ö½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö¿ ô½ õ½ö¾ô¼ õ½÷¿õ½ö¿ ö¿ õ½õ½ö½ö½õ»ôºð¸ ë² é° äª +Ú¢מ ӛ +ˑ ½ƒ°x ¡l ^vO \> +=&   ?* T8lI Wœh¯z +¸ ÁŠ ͕ Ԝ Ý¥ +㬠ç®ë±ïµ ôº÷¾÷¾õ¾ ô½ õ¾ õ¾ õ¾ õ¾ ô½ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ +ô½ +ö½ ö½ ö½ ö½ ö½ õ¾ õ¾ ð» ñ¹ñ¸ð·ï´ï´óµõ·ò´í²é³ ä¯ àª æ¯ϖՖ Ӓƈº„p…c#ÿýÑÿ÷Öÿûßÿÿêÿúêÿþóÿþûÿþÿúúüÿÿÿýÿþýÿüþÿúþÿùþÿúþþüÿýÿÿýÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþÿýÿÿûÿÿûÿÿýõÿþòÿþõÿþëÿþ֞;«¿„ À}Ʉ ҕҙљ՝ڢߧ⫠+㬠äªã©í³ì³ë² í´ ï· ñ¹ ð¸ ï¶ñ·õ¸ó¹ñ· ñ¹ ô¼ô¼òº õ½ó»òºòº õ»ö½ö½ ö½ õ½õ½õ½õ½õ½õ¾ õ½õ¾ õ¾ õ¾ ö½ õ¼ õ¼ õ¼ õ¼ õ¼ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ õ½ö¾ô¼ õ½ö¾ô¼ ö¿ õ¾ õ½õ½ö½õ¼ ôºó¹ñ¹ê±é¯ å« Ú¡ ם ԛɑ +¼‚¯w¡l Ž^ uMa@ F.$!A- X9 +pJ †Yœh¯z +¸ ¿ˆ +̒ Қ Ü£ äª +ç¬ê°ïµ ó¹ ö¼ö½õ½ô½ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ ô½ ô½ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¿õ¿ö½ ö½ ÷¾õ½ô½ ò½ ò½ ïº ì¶ ì¶í´ì³í²í²è¬ç«ç« â¨ã© +מϕ՚Α¼‚¬x$VÿùÊÿýÝÿúêÿÿôÿÿñÿþïÿÿôÿýøýûüþýÿúùþÿÿÿýÿþýÿúþÿùþÿùþÿúþþüÿýþÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúþþüÿüÿÿûÿÿüÿÿüüÿýüÿþîÿþÚ¡„B¦x̔ˊ +ÂȈєכ ؜ڟÝ¢ॠ㨠ç«ç¬ã© +å« è®æ¯ +ä¯ä°æ²è´í´î³î³î³ îµ î¶ ï· ð¸ ñ»ï¹î¸î¸ñ¹ó»ó»ó»õ»õ»õ»õ»õ»õ¼ õ»õ¼ õ¼ ö½ö½÷¾÷¾ö¼ö¼õ¼ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö¿ ô½ õ½ö¾ô¼ õ½ö¾ô¼ ö½ ö½ ö½÷¾÷½õ»ó¹ò¸ñ·é®æ¬ ä© Ú¡ ؞Ӛǎ »­uŸj +Œ\vLeBM5 0 "D- Y; qL‡Zœh¯y ¸ ¾‡ ʐ +ј Û¢ â¨ ç¬ +ë° +ñ· ôºõ»õ¼ ö½ø¿ö½ö½ö½ö½ö½ö½õ¼ õ¼ ö½ö½ö½ö½ö½ö½ö½ö½ ö¾ö¾õ¾ õ½õ¼ô»óºï¹î¸ ê¶è²æ°æ¯ +å® æ¬ æ«åªॠ࣠ҕۚ ё ˎ½…¥u }WÿøÓÿüêÿýôÿþúÿü÷ÿþ÷þûòýúóÿüùÿýþÿþÿùøýÿþÿùúüýÿþýÿúþÿùþÿùþÿúþþüÿýþÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúýÿ÷ýÿúÿýÿÿûÿÿüÿÿýþÿýüÿýðÿüەx<°ƒ&®w‚Ѝ +LJʌʏ̑єԘכ۞Þ¡ ࣠⥠ᦠ⧠᩠+á¬â­â¯ã®äª +ä¨ +å© +è­ é° é° ë² í´ ìµí¶î·ï¹ò¹ò¹òºòºó¹ó¹ó¹ó¹ó¹ôºôºôºõ»ö½ö½÷¾÷½÷½ö¼ö½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ö¿ õ¾ ö¾÷¿õ½õ½ö¾ô¼ ö½ ö½ ÷¾÷¾÷½ö¼ó¹ò¸î³ æ­ã© Þ¦ ؞ ֛ϕ Ê µ}ªrœgŠZxNiEU: >+  "E. Y;rK‡Z›g¯y ·€ ½… +ȏ +ЗÜ  à¥ ä¨ é® +ïµ ò¸ò¸ó¹ õ¼ ÷¾õ¼ ö½ö½ö½ö½ö½ö½ö½ö½ö½ö½ö½ö½ö½ö½ö½ õ½ô¼ó» ô»ôºò¸í¶ê³é³ ç±æ­ä«â¨ᦠ+ॠߤ Ý¥ +јך В ̌¼€¶€ “hrQÿüÝÿøïÿÿÿúúÿüÿÿÿÿÿýüøÿþúÿÿýÿýþýüÿþýÿùøýþÿÿþÿÿýÿüýÿúþÿùþÿ÷þÿúþÿúÿýþÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿùúÿóúÿõûþÿýýÿþÿúþÿ÷þÿùÿþðÿþá•zEŸwµ„À À€Æ Á‡ Ċ Ɏ ͓ і ՘ +ؚ ۚà  Þž ޞ Þ¡ +ॠ⧠á§ߥä§å¨å© å© æª æ« å« å« ç­ é¯ ì²í³îµîµï¶ð·ñ·ó¶ó¶ô·ô·ô·ó¹ó¹ õ»ôºôºôºô» õ¼ ö½ö½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ +õ¾ ö¿ ô½ ô½ õ½ó» ö½ ö½ ö½ ö½ö¼õ»ó¹ò¸ì³ è® ã© +ݤ ؞ҙˑ ˆ +±y¦p™d‰Y|PlI [= J3'  &G0Z<qJ…X™d­w µ} º‚ Ō ͔ٝ Ü¡á¥åªí° +òµ ñ· ò¸ óº ô» õ¼ õ¼ ö½ö½ö½ö½ö½ ö½ õ¼ õ¼ õ¼ õ¼ ô» ô» ô» óº óºò¹ñ¸ñ·î¶ì´ê°ç­å« äª +ã§à¤Þ¡ܟ ڜ ؜ЖΔʎ †¹‚šk{X"ÿüÚÿþìú÷îýþùòöõþÿýüÿýúÿûþÿýüüüûûûýýÿýüÿÿþÿþÿÿ÷øúûýüýÿúýÿùþÿ÷þÿ÷þÿúþÿúÿýþÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúúÿõøÿ÷ûÿÿûþÿýÿùýÿõþÿ÷ÿÿóÿûêÿüÖ {7¥v®wµ{ »€ ¼„ ºƒ »… ¼…À†ÈNjϏ Ғ +ӑו ژؙ ֘ Ԙכ ۟ ֘ڜ ܟ ۞Ý ⦠+⧠ߥᦠ+ã© +åªå« å« ç­ ë±îµðµòµòµó¶ó¶ô·ò¸ò¸ôºó¹ ñ· ð¶ +ñ· óº õ¼ ö½õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ õ¾ ô½ +ò»ô½ õ¾ ó¼ +ó¼ +ô¼ ò» ö½ õ¼ +ô» +óº ó¹ ó¹ ò¸ò¸å¬å« Ý¥מ ј ˑ ‡½ƒ­v¥o˜cˆX~SnH[= N6)   +(H1Z<pI„W–aªt +²z ¸€ ‰ˑ Ԛ +ٝà¤ã§ì® ñ´ó¹ôºó¹ ò¹ +ô» õ¼ õ¼ ö½ö½ö½ö½ ö½ óº óº óº ò¹ò¹ +ñ¸ ñ¸ ñ¸ ñ¸ ñ· ï¶ïµì´ë°ç­ä¨ +ᥠ㤠ᡠޝ ٛ ֘ ԗЕ ǏŒ¹…Ÿq~XÿûÌÿýãÿûðþýûþÿÿüÿýûÿúúÿöûÿùûÿýùýüþÿÿûûýÿÿÿþþÿûüþùúüþÿÿþÿýýÿùýÿùþÿ÷þÿùþÿúþþüÿýþÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüúÿþúÿþûÿÿýþÿûÿüûÿùýÿúÿþùÿýøÿøêÿú֛u7©}$¥y«~ ª|¯{´~º‚º€¶zÀƒÆ ÁȆ ÃˋNJ Βʎ +ʎ і՗ؙٜ ӕݟ ךԗܟڝÞ¡ +á¤ᤠॠᦠ+ã¨ äª æ« åªåªè­ ì± ï´î³ í³ +ò¸ôºô¼ó»ñ¹ ð¸ òº õ½ð¸ òº ö¾õ¾ ð¹ò» õ¾ ð¹ô½ +ô½ +ö¿ ô½ +ô½ ÷Àõ¾ õ¾ ö½ õ¼ +úÁóº ñ· ð¶ ôºí² å« äª Ü£ ә̓ƍ¾„´|ªuŸj”a‹[TpK_A P8*   +* +E.Y; nGƒV”a£l®u +µ| ¿…Ȏ Е ؜ +࣠⦠+æª î³ò·ïµ ð¶ ÷½ï¶óº ò¹ +÷¾ò¹ö½ ò¹ô» +ø¿ö½ ô» ô» ôºôºó¹ ò¸ ò¸î³ ì²ë±æ¬ ã© ã¨â¤㢠+ܚٕ ٕؕʌȍ˒ ÁНœy'gOÿûÔÿýæÿýóÿþûÿýúÿþùÿÿ÷þÿõûÿõúÿ÷úÿúúÿüýÿüþþþýÿþýÿþýÿþýÿüýÿúýÿùýÿùýÿ÷þÿùþÿùþÿúþþüÿýþÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýþÿþþÿþþþýÿùýÿ÷ýÿùÿþúÿúüÿûúÿöæÿ÷ҍo/‘r‘pšw£v©x¨u +¦r³~·«r¶} ¶{¼ ´wĉ»€¾ƒ ȎĈ Á„ʼnϑ Ҕ ƉڝГԗҔԗؚ ٜ ٝ ڞ +Ü  ߤ ᦠ+äª è¬æ¬ ä¨ â¨åªè® é® +ê± +í´ ð·ô»ô¼òºð¸ ô¼ö¾÷¿ö¾ô¼ ÷À÷Àô½ +õ¾ ö¿ ÷Àô½ ò» ó¼ +ò» ò» ñ¸ð·õ¼ óº ÷½ó¹ñ¶ç­ á§Ý¥ +מ ΕǏÁ‡ ¸~¯v¤nœg“`†WyOlI\>J4 , +  +( +B+ U6gA}P‘^¡k­w ´| »ƒ +Ō ͓ ֜ ڞ +á¤ ä¨ æª ì±ñ¶ñ·ò¸ò¸ ô» ò¹ +ö½ò¹ +ö½ óº ô» +ð·ð·ð·ò¸ ôºõ»ó¹ò¸ðµì±é¯ç­ ã© à¦à¡ܝۙؓԐ ֒̌ˏō´‚¨z"‚_ÿùÅÿüÙÿÿìýÿ÷ûýúúüùÿþúÿþ÷ÿþ÷ÿþõþÿ÷ûÿùûÿúûÿúýÿüþþüýÿüýÿúýÿúýÿúýÿùýÿùýÿ÷ýÿùþÿùþÿúþþüþþþÿýÿÿýþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿýþÿüÿÿüÿÿüÿÿýüÿÿóÿÿðþÿóþÿùþüýÿýýÿúñÿüìÿýãÿþÚÿúÍy`*„`&Že#Žd•l–kqŸs¢r¤r°}«v¯x±y´{ +·~ µyȾ‚ +ÁƒÆ Nj ÇNjNjɋNj̎ ͒ +Γ Γі +՛ ՜מÜ  +Û¢ Þ£ Þ¥ ã¨ã«㨠㩠+å« è® ì³ï¶ð·ð·ò¸ôºó¹ñ· ó¹õ»óº ò¹ô» õ¼ õ¼ ô» ò¹ +óº ô» ô» ö½ô» ò¸ í³ ñ·í² ë±é¯Þ£ ؟ҘʐÊ ¹°w©qg—d‘_ +„UvLjG[=G1 +, + +  + + +  ) B+ S4dAzOŠXœf©r °w µ|½ƒǍі ך Ü  ߢ â¦è¬ í²î³ î´ ò¸ó¹ ñ· ôºò¸ õ¼ óº ô» ñ¸ ñ· ñ· ò¸ó¹ñ·î³ ì± é® +åªãªã©á§ߤ +ߞ ٘ +ܙ ӏ͋†Àˆ µ¥u y*nR ÿýÜÿùÞÿÿêÿÿòýÿ÷ùÿùùÿýúÿüýÿüÿýüÿüüÿüüÿýüþÿúýÿúþÿúþÿúþÿúþÿùþÿùþÿùþÿ÷þÿ÷þÿùþÿùþÿúþþüþþüþþþþþÿþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿýþÿüÿÿûÿÿûÿÿüüÿþõÿÿóÿÿõþÿùÿÿÿýýýþú÷ÿþúÿüöÿöíÿþïÿýèÿüßÿùÖÿýÑ{`+…i*~`oŽk“l —m ˜k¨w©t +¬v +¬t¹®t²x +µy ¾ƒµzÀ† ¾‚‡ À„¾ƒ¿ƒÈ +ȇĉɏ ͔ ͔ΕЗ +Ӛ ՝ ם ם Ú¡ Ü£ ॠॠॠ㩠+ç­ ë±ï´ô¹ò·ðµó¸ôºò¸õ»ò¸ ôºò¸ ò¸ ò¸ ó¹ õ»ó¹ð¶ +ôºö¼ñ¶ó¸æ¬ +ã© +âªÙ  ӛ +̓ƍ +½… +²{ªr£l™b“_ ‹[ SrJfDW<E1 ( +( @+P3b@xNˆVše¦p«t ²z ¹Ê ̒ ՚כ ۞â¥ ç« æª ç¬î³ í³ +ïµ ð¶ ñ· ñ· ò¸ó¹ ôºôºó¹ò¸ñ¶ï´ì± ç¬ +ä©é­ä¨ á§Þ¤Û ؜ +ӓ ˊńļ‚¿Š +¦x¤{’k&ÿ÷Éÿýæÿùîÿþôÿþóÿÿöûÿùòüô÷ÿüøÿþûÿÿÿüÿÿüÿÿûþÿüþÿýüÿþüþÿúþÿúþÿúþÿùþÿùþÿ÷þÿùþÿùþÿùþÿúþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýþÿüþÿüüÿýüÿüÿÿüÿÿýÿþþþûûùþÿýûýüýÿüýþùÿÿûÿþûûøóüúîÿüíÿýêÿþèÿÿäÿÿÝÿûÓzb2ƒf.ƒa!ŽgŽb –f m¢m¤o±z£n­v±{«s»ƒ±x¶} º~ ·|·{ º º ¹~º¾„ ¿…Áˆċ +Ō Ō ƍʐ +͓ ͔ ј ם ٟ Ú¡ Ú¡ +ݤ ᦠç«í±î²ì°ðµñ¶ñ¶÷¼ôºö¼ð¶ ò¸ó¹ò¸ôºî´ í³ +ñ·ó¸î³ïµä© ॠà§Ԛ +Ε +ǎ ¿ˆ +¸ ®v ¥lg•_ŒYƒT{OmH^@Q:D1$  (<( K0]:qI„T•_ i ¦o +®v µ|¾„Ŋіә +؜ +ߤ 㨠á§äªì³ç® ê± +îµîµ îµ í´ ï¶ ñ¸ð·îµì³ê°é¯ç­ä© ᦠ+ᤠܟٞ՜ә ѕˍƒĆ¸}®|¥z ¡~"€cÿùÓÿûêÿùóÿüýýüøþÿúõüõøÿüùÿÿûÿÿûÿÿýþÿÿýÿÿýÿÿýþÿýþÿüþÿýþÿþüþÿúþÿúþÿúþÿúþÿùþÿúþÿúþÿúþþüþþüþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþúÿþúÿþùÿþüÿüÿÿüÿÿüÿÿýÿÿÿûôöñüÿýûÿÿ÷ûúþÿÿúúüÿÿÿüÿÿüÿýþÿûþÿúýýõÿþóÿ÷êÿýêÿøÞÿýØÿüÌ~^!ƒ_ŠdŒd›o•d m¥p¡m +°{£n¨r¨r°w ®u +­t °x ²x +±y³z ¶} +³z´|µ}·¼ À† ˆ É ȍ Ȏ ˏ +ϔ +ԙ ٟÛ¡Û¡ٜߢ â¥ ä¨ å© ç« ê®ï´ñ¶ô¹î³ ò·ô¹ò·ö»ï´ñ¶í²ê®ã§ åªߤ Û¢ ם ϖ ʒ Ċ »ƒ ³{ ¨q +Ÿg˜a“\ ‡T~NvKjDZ=L6@0    % 9( H/Z9pHP\še ¡k©s ±z¸€¾…NjЕ ך ٝÝ¢ +ᦠ+äª +è® å« ç® í´ë² ì³è¯ +ë² ë² ì²ê°ç­ å« ä© ã¨á¦ߤ ٛԘЖ͔ʐ ʏć»} ¯u¦q¢uŒhqXÿÿÔÿúèÿýúÿýÿÿûÿúúúûÿüüÿýûÿþ÷ûúýþÿþþÿþþÿþþþþþþþþþÿýþÿýþÿýþÿýþþþüþþüþþüþþüþÿúþþüþþüþþüþþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúûÿùûÿ÷ûÿõýÿùýþÿþýÿÿýÿÿýþýþøþÿøøý÷üÿÿûüþýþÿþüýüûùÿÿûþýùúùõþÿúÿÿûýüøÿÿûÿþùÿþøÿúïÿöæÿýæÿþÝÿûÓva2tZf”d“a +˜g –dšh£o + k¤m£l£l¤m¨o§qªqªq°x ®v ¬t®v²y´{´{²z¿„ ¾„¿„‡ɍ ϓӘ֛՗יܟ ߢ Þ¡ +ߣã§ å© å© +ì±è­ í²ï´ë°ò·ì±è®å« åªॠॠٝ їŊǍċ +¾„ ´{¬s +£lšbZŒW‚QzKoGc@W:H17(     + # 8' H/Y:oHR\›e ¡k ©r ±y·¾„Á…ʏϕҙٝÝ¢à¦ã© ã© ã©ç­ äªè® äªç­ æ¬ +è®å« ⧠ॠޣ Ü  +ٝ כ ך ӕ͐Ɗ¿„ ¼ µz©p¨r¨v†ZkJÿøßÿûîþÿú÷ýûüÿýøú÷ÿÿÿÿþÿù÷øÿýþÿþÿüúûÿþüÿþúþÿúþÿúýÿúýÿüûÿüýÿüþþÿÿýÿÿýÿÿýþÿýþÿþüÿýþÿýþÿýþÿýÿþþÿþþþþþüþþüþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúûÿùúÿ÷ûÿõûÿùýÿüþþÿþþÿÿýþþÿùüýõþÿûúüùúûýÿÿÿþüýÿþýÿüùÿüùÿÿûÿÿýüüúüüüþÿÿûüþþþÿþþþÿÿýÿýøÿûðÿþðÿÿíÿþßÿùÇvRvS~Y{UˆabŒ_ ’d“d –c˜cšeggœežg¡j¥n¨o§nªp¯u ´z ¯v³z¹~¼‚½ƒ¿†ÊȎ Е ϔ +՘ ֜ ՙ֚ڞלڟ㨠á¥æª ä¨ +ߣç«⦠+ä§ߤ á¥؜ԗєЕ ŋ¿„½ƒµ| «s¢k›d‘[†R…R~NuHiA[;Q7A-.  ÿÿÿûûûþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿþþþþþÿþþþþþÿþþþúúüÿÿÿýýÿþþþÿÿÿÿÿÿ +4$ +C+S5hB{KŠV”a›f¢m«s±x¸~Á†ÉǍїם כٞॠߧ ܤ ß§ +ܤã«ਠ㫠᩠+ß§ +Ý¥ +Ü¡ ٝכ ՘ єϒȌĉ Á„¼€µ| ³{ +¬wŸnŽ` vO]=ÿúèÿüöúøùùÿÿøÿÿùÿûüÿýýýûýûüÿüýÿýÿþúûÿþýÿþúÿþùþÿúþÿúýÿúûÿúúÿúûÿüþþÿÿýÿÿýÿÿýþÿýþÿýþÿýþÿýþÿýþÿýþþþÿþþþþþüþþüþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúýÿúýÿúýÿúþþüþþþþþþþþüþÿúþÿúþþüþþüþþþþþþþþüÿþüÿþüÿþüþþüþþüþþüþþüþþþþþþþþþþþüþþüÿþúÿþùÿþùÿþ÷ÿþóÿûêÿþèÿýæÿýãÿüÛÿýÕfN nSy[~[YˆZ _ +”a–a›dšc•^gžfšcŸe¦m¤k¦m©q¬t­v±z±}²»ˆ ½†¿ˆ Ê Íɑ +Ζ қ ՝ љԛ؜ڞÞ¡ +à£ à  Ýœ +ڜ ܝؙҒ +ΐ Ɋ …À„ +µz±x¦p¡l˜cZ[„SzJvJiBfC U9 +C-;+þþþüüüÿþÿüúûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþüþþþþþüþþþþþüþþþþþüþþþþþüþþþþþüþþþþþþûýüþÿÿÿÿÿÿþÿÿüýÿþÿÿýÿ @2?)Q5a?wJ†U’_ ˜e +žh¨o®u±y¹~¿…‰ƌ̑ϕӗԛ՝ ֞ Ø  Ú¢ ֞ қ՞Û¤ ֟Ø¡ ם ї̑ɎȊÁ…¹¼…°t´x®tªs –g fdFÿýÝÿùëÿþúÿÿýþÿÿüýÿýþÿýÿüýÿüþþüþþüÿþüÿþüÿþüÿþüþþüþÿúþþüþþüþþüýÿüýÿüýÿüþþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿýýýýüøÿýøÿüñÿÿïÿýçÿýàÿþÚXAdHrRoI +‚Z€V}Q€R‡X +„U…U”b “`–aše¡m +›g¡l£n¡m¬x +¯| ­z·€ ¹‚ »… º„º„»†¾‡¿‰Ǐˑ Γ і +֙ ؛ ט ԕ +ΐ ϑ ̍ +Ɗć +À„ +»~ ·{ ®t¨ržh™d[‚R€QxJwKnFd@X8P6A-( + þÿÿúüûÿÿÿýýýù÷øÿþÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿýüþûÿÿûüû÷ÿûúýûüÿþÿþýÿþÿÿÿÿÿÿþùÿÿï-F2 K0[;sGQ] •b g¥o­u±x³z¹ +»ƒ +¿…ĉǍʏ͒Ε +̒ +̓ϖ ϖ ͖̕ΗɐŌËČȽ‚»€¼‚¶~ ®y ·§qhn„\cDÿüãÿþóÿÿûüÿÿöúùüÿÿÿÿÿÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüþýýÿþùûúþÿýÿÿûùúôÿÿöþúîÿÿïÿýèÿýåÿýãÿúÜQ:\D"]AeGkKwUwTuQ„]ƒ[‹_†X—h‘^—b—a h—_ªq +§o¬s¯v±x²yµ| ¸ ¹€ º‚ ¾„ À† È +Ŋ +ȍ ǍŋȉÀ‡¼‚¹~´{®u¨p¡jœf“^[„S}M|KrElCb<`? N1M56$  þÿÿýÿþÿÿÿûûûÿÿýÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿýöøõÿÿûÿÿûþúùÿþÿøöûÿþÿýþÿþÿÿýü÷ÿüî;/;(G/]>kD{L†W^˜c¡jªq­u®v³{ +µ~ +¶~¹¾„À…ÉNjNjNjɍ ʎ +ɏ +Ȏ Ǎǎ Ê ¾‡ ½… +¹‚ ²{°y±y«r¥o m—h’g {VhIÿüáÿøëÿûõýüøõ÷ôþÿýþÿýüýøþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþþÿÿûýúûýúüþûþÿýøú÷þÿûûü÷ÿÿøÿÿöþúïÿþòÿþóÿøìÿýêÿýßK7K5 XB`GkQlO vUzT }S Q…T—c’\Ÿg™a f£j¥l§n©p «r ­t ¬s +²x ²x ²y²y´{·¸€··¶€µ~±zªu¦p¢kœf•`Ž[ˆVƒR~NzJvH mC oH ]<W; L3 <) %ýýûõ÷öþÿÿøøøÿÿýþýûÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüúüùþÿýÿÿýýüøÿþýþýûÿÿÿþÿÿùúþþÿÿÿÿúÿþòÿþè@/G1 +O3c?rG€R‰Y’_›e¡j§n¬s°x ±y ±y +³|¶~¶~»»~¿‚„ ÁƒÀ‚¿¿ƒ ¿ƒ º º ·€ ¯z­x­y «w +¦q¥n + l Œ^…^rT aJÿûàÿúïÿý÷ÿþûýüúÿÿýÿÿÿøú÷ÿÿúþÿùþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýüøüûöÿÿûÿÿûÿÿûúüùþÿýøýùúÿûøýùúü÷ÿÿúÿÿúùúôýýõþûòÿÿóÿùíÿþíÿþèÿýâH8WD[DbFdCkG zQ{L~MŠWY•_—`—`™be h  h žf¨n §p §p §p §r©u©u§u¥s¤r¥r¡nšf˜d•c‘^[„T€Q{LtGqD k@ d<Z:V; O8@- 5% ÿþôÿü÷þþüýÿþþÿÿûýüÿÿýÿÿýþýûýüøþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿÿþÿýþýûø÷õÿÿûþýûùùùþÿÿþÿÿùûúüýøýûïÿÿì8*B/H/[:iCxNƒU[”bœf i§p «t ¬u«u ­w °x °x³|´y¸|»~ º} +¹| ¹{ +¹{ ¸z ³v ³y°w¨r¥p¦s +¢q +œj—bˆY…_lO XCÿüàÿþðÿþùÿÿûø÷õúøùÿþÿüúýÿÿýþÿøúýòþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿþûüùôÿþûýüøÿÿýýýûþÿýúüûùýüüÿÿþÿýùûøþÿýýÿúþÿûÿÿûûúöÿþûþûöÿÿöÿùíÿýíÿþìÿûäÿúßG0S7S3]:sMrI{O‚R„S†UŒY‘] +–b™c ™bšcœeži Ÿj +Ÿj +k +›i™g™g–d—e•cZ‹Y‹Y„T…V}OyMsHlChAc;[9 V>C/ +D4;-ÿþìÿ÷ìÿþ÷üûùþÿÿüþýûýüþÿÿÿÿýýýûÿÿûÿÿûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûýüýýýÿÿýÿÿýúùõþýùÿÿýþÿÿøüýüÿÿüýøÿþõÿÿï7*7'I2Q5]=mGzP„WŽ\–cgŸi¥n +¦o ¦o +¨q +©s ©s«u±y°w¯v³w ¶z ¶y³v °s µw°u¬r§q £o k +—g”e b ‹aaAN7 ÿþæþüïþÿúûÿýüÿýÿÿÿÿþÿýøþûùþÿÿÿüÿöþÿøþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿûüÿýÿÿýÿÿýþýùúÿþÿúøùÿþÿÿþÿûùúüûùÿþúÿþûÿþùÿÿúþûöÿýøÿÿúÿÿúÿþùÿÿúÿÿøþùóÿûóÿøîÿýïÿúèÿüãF/I/ +U:]? lHsK xO }R U +‡X +‰Y‹Y‹ZŽ]‘^_‘`‘_][‘_ŒZ[ŒY†S„SƒRyI~PtJsKkFc?c@]9V: F28* =1ÿ÷äÿÿóÿÿøüûùþÿÿûüþùýþþÿÿüþýÿÿýýþùÿÿûþýùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþÿÿÿø÷õÿÿýÿÿûþýùýýûøú÷÷ûúüÿÿüýøÿÿøÿþôÿùê=0=,G0Q5^>iFvLS[“`—bgŸi  j¢l£n£n¥p§s£o¢n¦p«r«q¨n¦l¨m¤j ižh˜f“b^ˆ[uMbA S8ÿüêüøïþÿûóýôùÿúûÿûùûøýûÿÿýÿÿþÿûûûþÿûùûöþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿýþÿþÿÿúþÿýÿÿþÿþüÿÿþÿüúýÿýþÿþÿüûùÿþýÿûøÿûøÿþúÿþúÿýùÿÿúþûöýüøþÿúÿÿýýýûÿÿýÿÿýÿüùÿúôÿýôÿùëÿýêÿüâD1Q8]>eEkKpM vO +|RT€SƒUƒUƒS„T…U†V†U‰V‚N„P…S +‚PƒS Q sGxMnGoIeC[<Z<T6N7 ;,5-ÿýíÿÿóÿþ÷üûùþÿÿúûýüÿÿùýþþÿÿþÿýûü÷ÿþúÿþûÿÿûÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýýûûûÿÿýþýûÿþúþÿúýÿüþÿýüÿÿüþûûûùÿÿúÿüöÿýóÿýñ6)=- F1Q6\=gCuJS‰Y]•bše ›fži  j j¡m¡p Ÿn o¥r ¥p£m¤k¦m¡j£m ži ‘_ŠZ‡Z~SpJeFO7ÿûìÿüøþüýüÿÿõÿ÷ùÿúøý÷þÿÿÿþÿþùýûùüÿþÿûûûþÿÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþýÿþýÿþýÿþþþÿþþÿþþÿþþÿþþþÿýþÿýþÿýþÿýþÿýüÿûüÿüúÿýúÿýúÿþúþÿúýÿúýÿüýÿüýÿþþþþÿþüÿýúÿþ÷ÿþõÿýðÿþä;+ +O;R;]CdGhI oLqKpIwLzL{MO‚RzJ}K…S wExFwF{K rEtH mEb>aAW:N4I1J3:(5*ÿþðÿüñÿýöÿÿýÿÿÿþÿÿ÷ûþûÿÿûÿÿýÿþýÿüþÿúÿþúÿýúÿþúÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþþþüþþüþÿúþÿúýÿúýÿúýÿüýÿüþþüÿþúÿþùÿý÷ÿýõÿüð0& >/C/ +R:^> `<lCyM€Q‡W‹Y•d•bœg šešem šj–fli›g l•a‘_˜g ‰[ƒX +{S mFnJ ^@ K6ÿýìÿöðÿûûÿþÿûýüúÿùüÿûýÿþþþþÿýþÿþüÿþüÿþüþþÿþþÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúýÿúýÿúýÿúýÿüýÿüýÿþýÿþýÿþýÿþýÿþýÿþþþþþþþþþþÿýþÿüþÿûþÿüüÿýúþÿúýÿúûÿúûÿüúÿþúÿþûÿÿûÿÿýÿþýÿþþþüÿÿ÷ÿýïÿÿìÿúäÿüáD4F3 R: U:]>fDe?jCrIh=uH|L +yJwGwGyI m?nAxNf?hE aB S7R: O:J6@- 3% +ÿÿïÿÿöÿýøÿÿýùùùüýÿþÿÿüÿÿûÿÿûÿþýÿüýÿüþÿúÿþúÿýúÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþþþüþþüþÿúþÿúýÿúýÿúýÿüýÿüþþüþþüÿþúÿþùÿýùÿýõÿÿí2*@27$G.T5^;gApHwM€UƒV…W‹\]—e ’c •f’c ‘bŠ\Š\‹]Ža‰\~UxR iG^? `DQ6 J5ÿüìÿþøÿþûÿþýüúûÿþÿÿÿýüüúþþþþþþþþþÿþüÿþúÿþüþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿùþÿ÷þÿ÷þÿ÷þÿ÷ýÿ÷ýÿùýÿùûÿùûÿùûÿúûÿúûÿúûÿúûÿúýÿüÿüÿÿüÿÿüÿÿýþþþþýÿüûÿüûÿþûÿþûÿþûÿþûÿüýÿúýÿùþÿ÷þÿõÿÿöÿýôÿÿóÿùéÿÿìÿþè@/F1O7P4 Y:[9 a= gB c<h@a8rI e<iAb9e= Y5_= X9 +T9U>@, A03# +2&ÿþíþúñùøóÿÿýýýýÿÿÿüýÿüýÿýþÿýþÿýÿþýÿüýÿúþÿúþÿúÿþúÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþúÿþúÿþùýûïÿÿñÿþë?3<) G/ K0R4T4eAkFnHrKsIsHQ€RƒU€R„VT}RzQtNfCeE^BR;E1C2ÿøæÿüðÿü÷øøöÿÿûýüøÿþÿÿùýÿûÿÿþÿÿþüþþüþþþþþþþþþþþüÿþùÿþùþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿþùÿþùÿþùÿþùÿþùþÿùþÿùýÿùýÿùûÿùûÿùûÿùûÿùûÿùûÿùûÿúþþþÿýþÿýþþþüýÿüýÿüýÿþûÿþýþÿýþÿýÿþýÿüýÿúþÿùþÿ÷þÿ÷ÿÿûûü÷üýøÿÿúÿþ÷ÿùïÿúðÿøëÿùç@,H0L4N2 Y<^?]= cB V5Z9[:`@S4T7 S7G/ F2@/8*:-ÿúìÿþóÿûóÿÿúÿÿýùùùþþþþþÿþÿÿþÿÿùúüýÿþýÿüýÿúýÿúþÿúþÿúÿþúÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿÿúÿÿöÿýòÿÿï2%=-C0H2 L4U; +N3Z=aAiG +hDlFmEpH +nFkEiC`<aA[>`FI2K8;-ÿýíÿúïÿýúû÷öüÿÿûÿýùûöÿÿûÿýÿÿûÿÿûÿÿùýÿþüþÿúýÿüýÿþþþÿþþüÿÿ÷ÿÿõþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýþÿýþÿüþÿýþÿýþÿýüÿýüÿþüÿþúþÿúþÿúýÿúýÿúýÿúýÿúýÿùýÿùþÿ÷þÿ÷ýÿùýÿùýÿúýÿþýþÿþýÿþýÿþýÿþþÿþþþÿþúÿþùþÿùþþüÿÿÿÿÿÿýýýúù÷ÿÿýÿþûÿüøÿþöÿüòÿýíÿ÷â=+B.C.E/ +F0G2J4 E/F/ H1A, >+ ;+8)ÿüèÿþïÿøïÿþøÿûøÿÿýÿþü÷öôþüýÿÿÿùùûýýÿùùûÿÿÿþþüþÿúþÿúþÿùþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþüýÿþýÿþþþþþþþÿþüÿþüÿþüÿþüþþüþþüþþþýÿüýÿúþÿúÿþùÿüóÿýôÿüíÿýì/ :+@0>,F3 E.F-P5 +P3 T5 V7 Q2S6 +O4 J1L6 E1:) <.ÿüêÿùîÿý÷þýûýýÿþÿÿöüúôûôþÿûÿÿýúõùÿýÿÿûÿÿþÿÿþúþÿùýÿüûÿþýþÿþþþÿÿ÷ÿÿõþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþÿýÿÿýÿÿüÿÿüÿÿüÿÿýþÿýþÿýþÿþüÿþüþþüþþüþþüþþüþþüþÿúýÿùýÿ÷ýÿùýÿùýÿùþÿúþþüþþþÿýÿÿýÿÿýÿÿýÿÿýÿÿþüÿþüÿþúþýûþüýúúúÿÿÿÿÿÿùùùþÿÿþÿÿøøöÿÿúÿÿöÿÿôÿüïÿþíÿüêÿþè9-4) 8,0$ 4%9-4'ÿþêÿþíÿýíÿýïÿüóÿü÷þüýÿÿÿûûýÿýþÿÿýÿþÿøö÷ÿþÿÿÿÿùùùýýûþÿúþÿùþÿùþÿùþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþüýÿþýÿþþþþþþþÿþüÿþüÿþüÿþüþþüþþüýÿþýÿþüÿýýÿüýýûÿþúÿþûÿþúÿþöÿþóÿÿïÿùæ;09/6(?/=,A-@,:' C/<+7' >0ÿøâÿþêÿýîÿþòÿÿöýúõÿÿýýýÿûüÿüÿÿûÿÿûÿýþÿûõõóýûüÿþÿûùúÿþÿþÿúýÿùûÿúûÿúýÿüþþüÿþúÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþûÿþýÿþýÿþýÿþýÿþþþþþþþþþþþþþÿýþÿýþÿýþÿýþÿýÿÿýÿþþÿýþÿþþþþþüþÿúÿþùÿþùÿþùÿýúÿþúÿýþÿýþþþþþþþþþþÿýþÿþýÿýýúöõýüúÿÿýýÿüúÿû÷ýùûÿûûÿûùþøöùòþÿúüýõýýõþûòÿÿôÿýòÿÿôÿÿôÿüòÿþôÿøîÿþôÿýòÿýñÿÿöþÿùþÿýþÿÿ÷ûþþÿÿýüúÿþûÿüûÿþüýûüûùúÿþÿÿþüÿþúÿþùþÿùþÿùþÿúþÿúþþüþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþþýþÿýþÿþþÿþþþÿþüÿýüÿýúÿþúþþüþþüýÿþûÿþöû÷üÿýþÿÿúúúù÷øÿþÿõóôÿþüüûöÿÿøú÷îÿÿôÿÿóÿûðÿýóÿùïÿþîÿÿïÿûîÿÿóÿþôÿýôÿÿöÿüõÿþùÿþúýüøÿþúýýûûûùÿÿûûýúüþýûýüüþûþÿûÿÿú÷øòýÿüúüûýÿþûÿúûÿõûÿóýÿõþÿúÿüÿÿüÿþþÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüûÿüûÿüûÿüûÿüûÿüýÿüýÿþýÿþþþþþþþÿýþÿýþÿýÿÿýÿÿüÿÿýÿþýÿýþÿþþÿþþþÿþúÿþùÿÿ÷ÿÿ÷ÿþùÿþùÿþúÿþüþþþþþþþþþÿýþþúùÿýýÿþýþýûþÿúûýøùþøûÿûùÿûõÿ÷ûÿýûÿýøýùûÿüþÿÿþÿýüüúÿÿûýüúüûùÿÿûþýùþýùÿÿúÿþùÿÿúûüöþÿûúüûøüýüÿÿûüþÿþüÿþúÿûúÿÿýþüýÿþÿÿþüþýûÿþúÿþùþÿùþÿùþÿúþþüþþüþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþþüþþüþþþýÿþýÿþþþÿþþþÿþüÿþüÿýúÿþúþþüþþüýÿþûÿþþÿýùûøúüûþÿÿþþÿÿÿÿÿÿÿÿÿÿýÿþþÿýýýûþÿúÿþúÿüùÿþûÿýúþýøÿÿøýü÷ýüøýýûÿÿýùùùÿÿÿþÿÿûýüýýûÿÿýÿÿûýþùÿÿúúûöÿÿÿÿÿÿúüùþÿûüÿøþÿúþÿûüÿýýÿþûÿüýÿõýÿóþÿóþÿùÿüÿÿüÿþþÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüýÿüýÿüýÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþþþþþÿýþþþþþþþþþþþþþþþüþþüþÿúþÿúþÿúÿþúþÿúþþüþþüþþüþþüþþüþþüÿþüÿþüÿþüþþüþþüþþüýÿüýÿüýÿüýÿüýÿüýÿüýÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüýÿþýÿþþþþþþüþþüÿþüþþüþþüþþüþþüþþüþþüþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþüþþüþþüÿþüþþüþþüþþüþþüýÿüþþüþþüþþüþþþþþþþþþþþþþþþþþüþþüþþüþþüþþüÿþüÿþüÿþüþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþþüþþüþþüþþüþþüþÿúþÿúþþüýÿüþþüýÿüþÿúþÿùþÿùþÿúþþÿþþÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþü \ No newline at end of file diff --git a/testimg/scale.gif b/testimg/scale.gif new file mode 100644 index 0000000000000000000000000000000000000000..265ed7f909707f4a146e52ff6ca9251d65995985 GIT binary patch literal 4288 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 literal 0 HcmV?d00001 diff --git a/tiff.c b/tiff.c new file mode 100644 index 00000000..74021703 --- /dev/null +++ b/tiff.c @@ -0,0 +1,346 @@ +#include "image.h" +#include "tiffio.h" +#include "iolayer.h" + + + +/* +=head1 NAME + +tiff.c - implements reading and writing tiff files, uses io layer. + +=head1 SYNOPSIS + + io_glue *ig = io_new_fd( fd ); + i_img *im = i_readtiff_wiol(ig, -1); // no limit on how much is read + // or + io_glue *ig = io_new_fd( fd ); + return_code = i_writetiff_wiol(im, ig); + +=head1 DESCRIPTION + +tiff.c implements the basic functions to read and write tiff files. +It uses the iolayer and needs either a seekable source or an entire +memory mapped buffer. + +=head1 FUNCTION REFERENCE + +Some of these functions are internal. + +=over 4 + +=cut +*/ + + + + + +/* +=item comp_seek(h, o, w) + +Compatability for 64 bit systems like latest freebsd (internal) + + h - tiff handle, cast an io_glue object + o - offset + w - whence + +=cut +*/ + +static +toff_t +comp_seek(thandle_t h, toff_t o, int w) { + io_glue *ig = (io_glue*)h; + return (toff_t) ig->seekcb(ig, o, w); +} + + +/* +=item i_readtiff_wiol(ig, length) + +Retrieve an image and stores in the iolayer object. Returns NULL on fatal error. + + ig - io_glue object + length - maximum length to read from data source, before closing it + +=cut +*/ + +i_img* +i_readtiff_wiol(io_glue *ig, int length) { + i_img *im; + uint32 width, height; + uint16 channels; + uint32* raster; + int tiled, error; + TIFF* tif; + + error = 0; + + /* Add code to get the filename info from the iolayer */ + /* Also add code to check for mmapped code */ + + io_glue_commit_types(ig); + mm_log((1, "i_readtiff_wiol(ig 0x%p, length %d)\n", ig, length)); + + tif = TIFFClientOpen("Iolayer: FIXME", + "rm", + (thandle_t) ig, + (TIFFReadWriteProc) ig->readcb, + (TIFFReadWriteProc) ig->writecb, + (TIFFSeekProc) comp_seek, + (TIFFCloseProc) ig->closecb, + (TIFFSizeProc) ig->sizecb, + (TIFFMapFileProc) NULL, + (TIFFUnmapFileProc) NULL); + + if (!tif) { + mm_log((1, "i_readtiff_wiol: Unable to open tif file\n")); + return NULL; + } + + TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &width); + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height); + TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &channels); + tiled = TIFFIsTiled(tif); + + mm_log((1, "i_readtiff_wiol: width=%d, height=%d, channels=%d\n", width, height, channels)); + mm_log((1, "i_readtiff_wiol: %stiled\n", tiled?"":"not ")); + mm_log((1, "i_readtiff_wiol: %sbyte swapped\n", TIFFIsByteSwapped(tif)?"":"not ")); + + im = i_img_empty_ch(NULL, width, height, channels); + + /* TIFFPrintDirectory(tif, stdout, 0); good for debugging */ + + if (tiled) { + int ok = 1; + uint32 row, col; + uint32 tile_width, tile_height; + + TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tile_width); + TIFFGetField(tif, TIFFTAG_TILELENGTH, &tile_height); + mm_log((1, "i_readtiff_wiol: tile_width=%d, tile_height=%d\n", tile_width, tile_height)); + + raster = (uint32*)_TIFFmalloc(tile_width * tile_height * sizeof (uint32)); + if (!raster) { + TIFFError(TIFFFileName(tif), "No space for raster buffer"); + return NULL; + } + + for( row = 0; row < height; row += tile_height ) { + for( col = 0; ok && col < width; col += tile_width ) { + uint32 i_row, x, newrows, newcols; + + /* Read the tile into an RGBA array */ + if (!TIFFReadRGBATile(tif, col, row, raster)) { + ok = 0; + break; + } + newrows = (row+tile_height > height) ? height-row : tile_height; + mm_log((1, "i_readtiff_wiol: newrows=%d\n", newrows)); + newcols = (col+tile_width > width ) ? width-row : tile_width; + for( i_row = 0; i_row < tile_height; i_row++ ) { + for(x = 0; x < newcols; x++) { + i_color val; /* FIXME: Make sure this works everywhere */ + val.ui = raster[x+tile_width*(tile_height-i_row-1)]; + i_ppix(im, col+x, row+i_row, &val); + } + } + } + } + } else { + uint32 rowsperstrip, row; + TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); + mm_log((1, "i_readtiff_wiol: rowsperstrip=%d\n", rowsperstrip)); + + raster = (uint32*)_TIFFmalloc(width * rowsperstrip * sizeof (uint32)); + if (!raster) { + TIFFError(TIFFFileName(tif), "No space for raster buffer"); + return NULL; + } + + for( row = 0; row < height; row += rowsperstrip ) { + uint32 newrows, i_row; + + if (!TIFFReadRGBAStrip(tif, row, raster)) { + error++; + break; + } + + newrows = (row+rowsperstrip > height) ? height-row : rowsperstrip; + mm_log((1, "newrows=%d\n", newrows)); + + for( i_row = 0; i_row < newrows; i_row++ ) { + uint32 x; + for(x = 0; xxsize; + height = im->ysize; + channels = im->channels; + + switch (channels) { + case 1: + photometric = PHOTOMETRIC_MINISBLACK; + break; + case 3: + photometric = PHOTOMETRIC_RGB; + if (compression == COMPRESSION_JPEG && jpegcolormode == JPEGCOLORMODE_RGB) photometric = PHOTOMETRIC_YCBCR; + break; + default: + /* This means a colorspace we don't handle yet */ + mm_log((1, "i_writetiff_wiol: don't handle %d channel images.\n", channels)); + return 0; + } + + /* Add code to get the filename info from the iolayer */ + /* Also add code to check for mmapped code */ + + io_glue_commit_types(ig); + mm_log((1, "i_writetiff_wiol(im 0x%p, ig 0x%p)\n", im, ig)); + + /* FIXME: Enable the mmap interface */ + + tif = TIFFClientOpen("No name", + "wm", + (thandle_t) ig, + (TIFFReadWriteProc) ig->readcb, + (TIFFReadWriteProc) ig->writecb, + (TIFFSeekProc) comp_seek, + (TIFFCloseProc) ig->closecb, + (TIFFSizeProc) ig->sizecb, + (TIFFMapFileProc) NULL, + (TIFFUnmapFileProc) NULL); + + + + if (!tif) { + mm_log((1, "i_writetiff_wiol: Unable to open tif file for writing\n")); + return 0; + } + + mm_log((1, "i_writetiff_wiol: width=%d, height=%d, channels=%d\n", width, height, channels)); + + if (!TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width) ) { mm_log((1, "i_writetiff_wiol: TIFFSetField width=%d failed\n", width)); return 0; } + if (!TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height) ) { mm_log((1, "i_writetiff_wiol: TIFFSetField length=%d failed\n", height)); return 0; } + if (!TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, channels)) { mm_log((1, "i_writetiff_wiol: TIFFSetField samplesperpixel=%d failed\n", channels)); return 0; } + if (!TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT)) { mm_log((1, "i_writetiff_wiol: TIFFSetField Orientation=topleft\n")); return 0; } + if (!TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8) ) { mm_log((1, "i_writetiff_wiol: TIFFSetField bitpersample=8\n")); return 0; } + if (!TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG)) { mm_log((1, "i_writetiff_wiol: TIFFSetField planarconfig\n")); return 0; } + if (!TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, photometric)) { mm_log((1, "i_writetiff_wiol: TIFFSetField photometric=%d\n", photometric)); return 0; } + if (!TIFFSetField(tif, TIFFTAG_COMPRESSION, compression)) { mm_log((1, "i_writetiff_wiol: TIFFSetField compression=%d\n", compression)); return 0; } + + switch (compression) { + case COMPRESSION_JPEG: + mm_log((1, "i_writetiff_wiol: jpeg compression\n")); + if (!TIFFSetField(tif, TIFFTAG_JPEGQUALITY, quality) ) { mm_log((1, "i_writetiff_wiol: TIFFSetField jpegquality=%d\n", quality)); return 0; } + if (!TIFFSetField(tif, TIFFTAG_JPEGCOLORMODE, jpegcolormode)) { mm_log((1, "i_writetiff_wiol: TIFFSetField jpegcolormode=%d\n", jpegcolormode)); return 0; } + break; + case COMPRESSION_LZW: + mm_log((1, "i_writetiff_wiol: lzw compression\n")); + break; + case COMPRESSION_DEFLATE: + mm_log((1, "i_writetiff_wiol: deflate compression\n")); + if (predictor != 0) + if (!TIFFSetField(tif, TIFFTAG_PREDICTOR, predictor)) { mm_log((1, "i_writetiff_wiol: TIFFSetField predictor=%d\n", predictor)); return 0; } + break; + case COMPRESSION_PACKBITS: + mm_log((1, "i_writetiff_wiol: packbits compression\n")); + break; + default: + mm_log((1, "i_writetiff_wiol: unknown compression %d\n", compression)); + return 0; + } + + linebytes = channels * width; + linebuf = (unsigned char *)_TIFFmalloc( TIFFScanlineSize(tif) > linebytes ? + linebytes : TIFFScanlineSize(tif) ); + + if (!TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(tif, rowsperstrip))) { + mm_log((1, "i_writetiff_wiol: TIFFSetField rowsperstrip=%d\n", rowsperstrip)); return 0; } + + TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); + TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &rc); + + mm_log((1, "i_writetiff_wiol: TIFFGetField rowsperstrip=%d\n", rowsperstrip)); + mm_log((1, "i_writetiff_wiol: TIFFGetField scanlinesize=%d\n", TIFFScanlineSize(tif) )); + mm_log((1, "i_writetiff_wiol: TIFFGetField planarconfig=%d == %d\n", rc, PLANARCONFIG_CONTIG)); + + if (resolution > 0) { + if (!TIFFSetField(tif, TIFFTAG_XRESOLUTION, resolution)) { mm_log((1, "i_writetiff_wiol: TIFFSetField Xresolution=%d\n", resolution)); return 0; } + if (!TIFFSetField(tif, TIFFTAG_YRESOLUTION, resolution)) { mm_log((1, "i_writetiff_wiol: TIFFSetField Yresolution=%d\n", resolution)); return 0; } + if (!TIFFSetField(tif, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH)) { + mm_log((1, "i_writetiff_wiol: TIFFSetField ResolutionUnit=%d\n", RESUNIT_INCH)); return 0; + } + } + + for (y=0; y in_imgs_count) { + /* Foo */ + return NULL; + } + } + } + + new_img = i_img_empty_ch(NULL, width, height, channels); + for (x = 0; x < width; ++x) { + for (y = 0; y < height; ++y) { + n_regs[0] = x; + n_regs[1] = y; + val = rm_run(ops, ops_count, n_regs, n_regs_count, c_regs, c_regs_count, + in_imgs, in_imgs_count); + i_ppix(new_img, x, y, &val); + } + } + + return new_img; +} diff --git a/transbench.perl b/transbench.perl new file mode 100644 index 00000000..08d6cf7f --- /dev/null +++ b/transbench.perl @@ -0,0 +1,27 @@ +#!perl -w +use Imager; +use Benchmark; + +$img = Imager->new(); +$img->open(file=>'testimg/penguin-base.jpg', type=>'jpeg') + || die "Cannot open penguin-base.jpg"; + +timethese(-10, + { old=><<'EOS', +$im2 = $img->transform(xexpr=>'x', yexpr=>'y+10*sin((x+y)/10)'); +EOS + new=><<'EOS' +$im2 = Imager::transform2({rpnexpr=>'x y 10 x y + 10 / sin * + getp1'}, $img); +EOS +} +); +timethese(-10, + { old=><<'EOS', +$im2 = $img->transform(xexpr=>'x', yexpr=>'y+(x+y)/10'); +EOS + new=><<'EOS' +$im2 = Imager::transform2({rpnexpr=>'x y x y + 10 / + getp1'}, $img); +EOS +} +); + diff --git a/transform.perl b/transform.perl new file mode 100644 index 00000000..0c177fb6 --- /dev/null +++ b/transform.perl @@ -0,0 +1,100 @@ +#!perl -w +use strict; +use Imager; +use Imager::Transform; + +my %opts; +my @in; +my $expr; +my $func; +my $out; +my %con; +my $numre = Imager::Expr->numre; +while (defined(my $arg = shift)) { + if ($arg =~ /^-/) { + if ($arg eq '-g') { + my $work = shift or die "$0: argument missing for -g\n"; + if ($work =~ /^(\d+)x(\d+)?$/) { + $opts{width} = $1; + $opts{height} = $2 if defined $2; + } + elsif ($work =~ /^x(\d+)$/) { + $opts{height} = $2; + } + else { + die "$0: invalid geometry supplied to -g\n"; + } + } + elsif ($arg eq '-f') { + $func = shift or die "$0: argument missing for -f\n"; + $expr = Imager::Transform->new($func) + or die "$0: unknown transformation $func\n"; + } + elsif ($arg eq '-d') { + my $func = shift or die "$0: argument missing for -d\n"; + my $desc = Imager::Transform->describe($func) + or die "$0: unknown transformation $func\n"; + print $desc; + exit; + } + elsif ($arg eq '-l') { + print join("\n", sort Imager::Transform->list),"\n"; + exit; + } + elsif ($arg eq '-o') { + $out = shift or die "$0: argument missing for -o\n"; + } + elsif ($arg eq '--') { + push(@in, @ARGV); + last; + } + else { + die "$0: Unknown option $arg\n"; + } + } + else { + if ($arg =~ /^([^\W\d]\w*)=($numre)$/) { + exists $con{$1} + and die "$0: constant $1 already defined\n"; + $con{$1} = $2; + } + else { + push(@in, $arg); + } + } +} + +$expr or usage(); +$expr->inputs <= @in + or die "$0: not enough input images specified for $func\n"; + +for my $in (@in) { + my $im = Imager->new(); + $im->read(file=>$in) + or die "Cannot read $in: ",$im->errstr,"\n"; + $in = $im; +} + +defined $out or $out = $func.".jpg"; + +$opts{jpegquality} = 100; +my $im = $expr->transform(\%opts, \%con, @in) + or die "$0: error transforming: ",$expr->errstr,"\n"; + +$im->write(file=>$out, jpegquality=>100) + or die "0: Cannot write $out: ",$im->errstr,"\n"; + + +sub usage { + print < = ... ... + $0 -l + $0 -d + -f - function to evaluate + -l - list function names + -d - describe + -g x - dimensions of output image + -o - output file +EOS + exit +} diff --git a/typemap b/typemap new file mode 100644 index 00000000..781c5801 --- /dev/null +++ b/typemap @@ -0,0 +1,22 @@ +#i_img * T_PTR_NULL +Imager::Color T_PTROBJ +Imager::ImgRaw T_PTROBJ +Imager::TTHandle T_PTROBJ +Imager::IO T_PTROBJ +const char * T_PV +float T_FLOAT +float* T_ARRAY +undef_int T_IV_U +HASH T_HVREF +############################################################################# +INPUT +T_PTR_NULL + if (SvOK($arg)) $var = ($type)SvIV($arg); + else $var = NULL +############################################################################# +OUTPUT +T_IV_U + if ($var == 0) $arg=&PL_sv_undef; + else sv_setiv($arg, (IV)$var); +T_PTR_NULL + sv_setiv($arg, (IV)$var); -- 2.39.5