Index: vendor/bzip2/1.0.7/CHANGES =================================================================== --- vendor/bzip2/1.0.7/CHANGES (nonexistent) +++ vendor/bzip2/1.0.7/CHANGES (revision 349497) @@ -0,0 +1,340 @@ + ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ + + +0.9.0 +~~~~~ +First version. + + +0.9.0a +~~~~~~ +Removed 'ranlib' from Makefile, since most modern Unix-es +don't need it, or even know about it. + + +0.9.0b +~~~~~~ +Fixed a problem with error reporting in bzip2.c. This does not effect +the library in any way. Problem is: versions 0.9.0 and 0.9.0a (of the +program proper) compress and decompress correctly, but give misleading +error messages (internal panics) when an I/O error occurs, instead of +reporting the problem correctly. This shouldn't give any data loss +(as far as I can see), but is confusing. + +Made the inline declarations disappear for non-GCC compilers. + + +0.9.0c +~~~~~~ +Fixed some problems in the library pertaining to some boundary cases. +This makes the library behave more correctly in those situations. The +fixes apply only to features (calls and parameters) not used by +bzip2.c, so the non-fixedness of them in previous versions has no +effect on reliability of bzip2.c. + +In bzlib.c: + * made zero-length BZ_FLUSH work correctly in bzCompress(). + * fixed bzWrite/bzRead to ignore zero-length requests. + * fixed bzread to correctly handle read requests after EOF. + * wrong parameter order in call to bzDecompressInit in + bzBuffToBuffDecompress. Fixed. + +In compress.c: + * changed setting of nGroups in sendMTFValues() so as to + do a bit better on small files. This _does_ effect + bzip2.c. + + +0.9.5a +~~~~~~ +Major change: add a fallback sorting algorithm (blocksort.c) +to give reasonable behaviour even for very repetitive inputs. +Nuked --repetitive-best and --repetitive-fast since they are +no longer useful. + +Minor changes: mostly a whole bunch of small changes/ +bugfixes in the driver (bzip2.c). Changes pertaining to the +user interface are: + + allow decompression of symlink'd files to stdout + decompress/test files even without .bz2 extension + give more accurate error messages for I/O errors + when compressing/decompressing to stdout, don't catch control-C + read flags from BZIP2 and BZIP environment variables + decline to break hard links to a file unless forced with -f + allow -c flag even with no filenames + preserve file ownerships as far as possible + make -s -1 give the expected block size (100k) + add a flag -q --quiet to suppress nonessential warnings + stop decoding flags after --, so files beginning in - can be handled + resolved inconsistent naming: bzcat or bz2cat ? + bzip2 --help now returns 0 + +Programming-level changes are: + + fixed syntax error in GET_LL4 for Borland C++ 5.02 + let bzBuffToBuffDecompress return BZ_DATA_ERROR{_MAGIC} + fix overshoot of mode-string end in bzopen_or_bzdopen + wrapped bzlib.h in #ifdef __cplusplus ... extern "C" { ... } + close file handles under all error conditions + added minor mods so it compiles with DJGPP out of the box + fixed Makefile so it doesn't give problems with BSD make + fix uninitialised memory reads in dlltest.c + +0.9.5b +~~~~~~ +Open stdin/stdout in binary mode for DJGPP. + +0.9.5c +~~~~~~ +Changed BZ_N_OVERSHOOT to be ... + 2 instead of ... + 1. The + 1 +version could cause the sorted order to be wrong in some extremely +obscure cases. Also changed setting of quadrant in blocksort.c. + +0.9.5d +~~~~~~ +The only functional change is to make bzlibVersion() in the library +return the correct string. This has no effect whatsoever on the +functioning of the bzip2 program or library. Added a couple of casts +so the library compiles without warnings at level 3 in MS Visual +Studio 6.0. Included a Y2K statement in the file Y2K_INFO. All other +changes are minor documentation changes. + +1.0 +~~~ +Several minor bugfixes and enhancements: + +* Large file support. The library uses 64-bit counters to + count the volume of data passing through it. bzip2.c + is now compiled with -D_FILE_OFFSET_BITS=64 to get large + file support from the C library. -v correctly prints out + file sizes greater than 4 gigabytes. All these changes have + been made without assuming a 64-bit platform or a C compiler + which supports 64-bit ints, so, except for the C library + aspect, they are fully portable. + +* Decompression robustness. The library/program should be + robust to any corruption of compressed data, detecting and + handling _all_ corruption, instead of merely relying on + the CRCs. What this means is that the program should + never crash, given corrupted data, and the library should + always return BZ_DATA_ERROR. + +* Fixed an obscure race-condition bug only ever observed on + Solaris, in which, if you were very unlucky and issued + control-C at exactly the wrong time, both input and output + files would be deleted. + +* Don't run out of file handles on test/decompression when + large numbers of files have invalid magic numbers. + +* Avoid library namespace pollution. Prefix all exported + symbols with BZ2_. + +* Minor sorting enhancements from my DCC2000 paper. + +* Advance the version number to 1.0, so as to counteract the + (false-in-this-case) impression some people have that programs + with version numbers less than 1.0 are in some way, experimental, + pre-release versions. + +* Create an initial Makefile-libbz2_so to build a shared library. + Yes, I know I should really use libtool et al ... + +* Make the program exit with 2 instead of 0 when decompression + fails due to a bad magic number (ie, an invalid bzip2 header). + Also exit with 1 (as the manual claims :-) whenever a diagnostic + message would have been printed AND the corresponding operation + is aborted, for example + bzip2: Output file xx already exists. + When a diagnostic message is printed but the operation is not + aborted, for example + bzip2: Can't guess original name for wurble -- using wurble.out + then the exit value 0 is returned, unless some other problem is + also detected. + + I think it corresponds more closely to what the manual claims now. + + +1.0.1 +~~~~~ +* Modified dlltest.c so it uses the new BZ2_ naming scheme. +* Modified makefile-msc to fix minor build probs on Win2k. +* Updated README.COMPILATION.PROBLEMS. + +There are no functionality changes or bug fixes relative to version +1.0.0. This is just a documentation update + a fix for minor Win32 +build problems. For almost everyone, upgrading from 1.0.0 to 1.0.1 is +utterly pointless. Don't bother. + + +1.0.2 +~~~~~ +A bug fix release, addressing various minor issues which have appeared +in the 18 or so months since 1.0.1 was released. Most of the fixes +are to do with file-handling or documentation bugs. To the best of my +knowledge, there have been no data-loss-causing bugs reported in the +compression/decompression engine of 1.0.0 or 1.0.1. + +Note that this release does not improve the rather crude build system +for Unix platforms. The general plan here is to autoconfiscate/ +libtoolise 1.0.2 soon after release, and release the result as 1.1.0 +or perhaps 1.2.0. That, however, is still just a plan at this point. + +Here are the changes in 1.0.2. Bug-reporters and/or patch-senders in +parentheses. + +* Fix an infinite segfault loop in 1.0.1 when a directory is + encountered in -f (force) mode. + (Trond Eivind Glomsrod, Nicholas Nethercote, Volker Schmidt) + +* Avoid double fclose() of output file on certain I/O error paths. + (Solar Designer) + +* Don't fail with internal error 1007 when fed a long stream (> 48MB) + of byte 251. Also print useful message suggesting that 1007s may be + caused by bad memory. + (noticed by Juan Pedro Vallejo, fixed by me) + +* Fix uninitialised variable silly bug in demo prog dlltest.c. + (Jorj Bauer) + +* Remove 512-MB limitation on recovered file size for bzip2recover + on selected platforms which support 64-bit ints. At the moment + all GCC supported platforms, and Win32. + (me, Alson van der Meulen) + +* Hard-code header byte values, to give correct operation on platforms + using EBCDIC as their native character set (IBM's OS/390). + (Leland Lucius) + +* Copy file access times correctly. + (Marty Leisner) + +* Add distclean and check targets to Makefile. + (Michael Carmack) + +* Parameterise use of ar and ranlib in Makefile. Also add $(LDFLAGS). + (Rich Ireland, Bo Thorsen) + +* Pass -p (create parent dirs as needed) to mkdir during make install. + (Jeremy Fusco) + +* Dereference symlinks when copying file permissions in -f mode. + (Volker Schmidt) + +* Majorly simplify implementation of uInt64_qrm10. + (Bo Lindbergh) + +* Check the input file still exists before deleting the output one, + when aborting in cleanUpAndFail(). + (Joerg Prante, Robert Linden, Matthias Krings) + +Also a bunch of patches courtesy of Philippe Troin, the Debian maintainer +of bzip2: + +* Wrapper scripts (with manpages): bzdiff, bzgrep, bzmore. + +* Spelling changes and minor enhancements in bzip2.1. + +* Avoid race condition between creating the output file and setting its + interim permissions safely, by using fopen_output_safely(). + No changes to bzip2recover since there is no issue with file + permissions there. + +* do not print senseless report with -v when compressing an empty + file. + +* bzcat -f works on non-bzip2 files. + +* do not try to escape shell meta-characters on unix (the shell takes + care of these). + +* added --fast and --best aliases for -1 -9 for gzip compatibility. + + +1.0.3 (15 Feb 05) +~~~~~~~~~~~~~~~~~ +Fixes some minor bugs since the last version, 1.0.2. + +* Further robustification against corrupted compressed data. + There are currently no known bitstreams which can cause the + decompressor to crash, loop or access memory which does not + belong to it. If you are using bzip2 or the library to + decompress bitstreams from untrusted sources, an upgrade + to 1.0.3 is recommended. This fixes CAN-2005-1260. + +* The documentation has been converted to XML, from which html + and pdf can be derived. + +* Various minor bugs in the documentation have been fixed. + +* Fixes for various compilation warnings with newer versions of + gcc, and on 64-bit platforms. + +* The BZ_NO_STDIO cpp symbol was not properly observed in 1.0.2. + This has been fixed. + + +1.0.4 (20 Dec 06) +~~~~~~~~~~~~~~~~~ +Fixes some minor bugs since the last version, 1.0.3. + +* Fix file permissions race problem (CAN-2005-0953). + +* Avoid possible segfault in BZ2_bzclose. From Coverity's NetBSD + scan. + +* 'const'/prototype cleanups in the C code. + +* Change default install location to /usr/local, and handle multiple + 'make install's without error. + +* Sanitise file names more carefully in bzgrep. Fixes CAN-2005-0758 + to the extent that applies to bzgrep. + +* Use 'mktemp' rather than 'tempfile' in bzdiff. + +* Tighten up a couple of assertions in blocksort.c following automated + analysis. + +* Fix minor doc/comment bugs. + + +1.0.5 (10 Dec 07) +~~~~~~~~~~~~~~~~~ +Security fix only. Fixes CERT-FI 20469 as it applies to bzip2. + + +1.0.6 (6 Sept 10) +~~~~~~~~~~~~~~~~~ + +* Security fix for CVE-2010-0405. This was reported by Mikolaj + Izdebski. + +* Make the documentation build on Ubuntu 10.04 + +1.0.7 (27 Jun 19) +~~~~~~~~~~~~~~~~~ + +* Fix undefined behavior in the macros SET_BH, CLEAR_BH, & ISSET_BH + +* bzip2: Fix return value when combining --test,-t and -q. + +* bzip2recover: Fix buffer overflow for large argv[0] + +* bzip2recover: Fix use after free issue with outFile (CVE-2016-3189) + +* Make sure nSelectors is not out of range (CVE-2019-12900) Index: vendor/bzip2/1.0.7/LICENSE =================================================================== --- vendor/bzip2/1.0.7/LICENSE (nonexistent) +++ vendor/bzip2/1.0.7/LICENSE (revision 349497) @@ -0,0 +1,42 @@ + +-------------------------------------------------------------------------- + +This program, "bzip2", the associated library "libbzip2", and all +documentation, are copyright (C) 1996-2010 Julian R Seward. All +rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + +3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + +4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Julian Seward, jseward@acm.org +bzip2/libbzip2 version 1.0.7 of 27 June 2019 + +-------------------------------------------------------------------------- Index: vendor/bzip2/1.0.7/Makefile =================================================================== --- vendor/bzip2/1.0.7/Makefile (nonexistent) +++ vendor/bzip2/1.0.7/Makefile (revision 349497) @@ -0,0 +1,217 @@ +# ------------------------------------------------------------------ +# This file is part of bzip2/libbzip2, a program and library for +# lossless, block-sorting data compression. +# +# bzip2/libbzip2 version 1.0.6 of 6 September 2010 +# Copyright (C) 1996-2010 Julian Seward +# +# Please read the WARNING, DISCLAIMER and PATENTS sections in the +# README file. +# +# This program is released under the terms of the license contained +# in the file LICENSE. +# ------------------------------------------------------------------ + +SHELL=/bin/sh + +# To assist in cross-compiling +CC=gcc +AR=ar +RANLIB=ranlib +LDFLAGS= + +BIGFILES=-D_FILE_OFFSET_BITS=64 +CFLAGS=-Wall -Winline -O2 -g $(BIGFILES) + +# Where you want it installed when you do 'make install' +PREFIX=/usr/local + + +OBJS= blocksort.o \ + huffman.o \ + crctable.o \ + randtable.o \ + compress.o \ + decompress.o \ + bzlib.o + +all: libbz2.a bzip2 bzip2recover test + +bzip2: libbz2.a bzip2.o + $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2 + +bzip2recover: bzip2recover.o + $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover bzip2recover.o + +libbz2.a: $(OBJS) + rm -f libbz2.a + $(AR) cq libbz2.a $(OBJS) + @if ( test -f $(RANLIB) -o -f /usr/bin/ranlib -o \ + -f /bin/ranlib -o -f /usr/ccs/bin/ranlib ) ; then \ + echo $(RANLIB) libbz2.a ; \ + $(RANLIB) libbz2.a ; \ + fi + +check: test +test: bzip2 + @cat words1 + ./bzip2 -1 < sample1.ref > sample1.rb2 + ./bzip2 -2 < sample2.ref > sample2.rb2 + ./bzip2 -3 < sample3.ref > sample3.rb2 + ./bzip2 -d < sample1.bz2 > sample1.tst + ./bzip2 -d < sample2.bz2 > sample2.tst + ./bzip2 -ds < sample3.bz2 > sample3.tst + cmp sample1.bz2 sample1.rb2 + cmp sample2.bz2 sample2.rb2 + cmp sample3.bz2 sample3.rb2 + cmp sample1.tst sample1.ref + cmp sample2.tst sample2.ref + cmp sample3.tst sample3.ref + @cat words3 + +install: bzip2 bzip2recover + if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi + if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi + if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi + if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi + if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi + cp -f bzip2 $(PREFIX)/bin/bzip2 + cp -f bzip2 $(PREFIX)/bin/bunzip2 + cp -f bzip2 $(PREFIX)/bin/bzcat + cp -f bzip2recover $(PREFIX)/bin/bzip2recover + chmod a+x $(PREFIX)/bin/bzip2 + chmod a+x $(PREFIX)/bin/bunzip2 + chmod a+x $(PREFIX)/bin/bzcat + chmod a+x $(PREFIX)/bin/bzip2recover + cp -f bzip2.1 $(PREFIX)/man/man1 + chmod a+r $(PREFIX)/man/man1/bzip2.1 + cp -f bzlib.h $(PREFIX)/include + chmod a+r $(PREFIX)/include/bzlib.h + cp -f libbz2.a $(PREFIX)/lib + chmod a+r $(PREFIX)/lib/libbz2.a + cp -f bzgrep $(PREFIX)/bin/bzgrep + ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep + ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep + chmod a+x $(PREFIX)/bin/bzgrep + cp -f bzmore $(PREFIX)/bin/bzmore + ln -s -f $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless + chmod a+x $(PREFIX)/bin/bzmore + cp -f bzdiff $(PREFIX)/bin/bzdiff + ln -s -f $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp + chmod a+x $(PREFIX)/bin/bzdiff + cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1 + chmod a+r $(PREFIX)/man/man1/bzgrep.1 + chmod a+r $(PREFIX)/man/man1/bzmore.1 + chmod a+r $(PREFIX)/man/man1/bzdiff.1 + echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzegrep.1 + echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzfgrep.1 + echo ".so man1/bzmore.1" > $(PREFIX)/man/man1/bzless.1 + echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1 + +clean: + rm -f *.o libbz2.a bzip2 bzip2recover \ + sample1.rb2 sample2.rb2 sample3.rb2 \ + sample1.tst sample2.tst sample3.tst + +blocksort.o: blocksort.c + @cat words0 + $(CC) $(CFLAGS) -c blocksort.c +huffman.o: huffman.c + $(CC) $(CFLAGS) -c huffman.c +crctable.o: crctable.c + $(CC) $(CFLAGS) -c crctable.c +randtable.o: randtable.c + $(CC) $(CFLAGS) -c randtable.c +compress.o: compress.c + $(CC) $(CFLAGS) -c compress.c +decompress.o: decompress.c + $(CC) $(CFLAGS) -c decompress.c +bzlib.o: bzlib.c + $(CC) $(CFLAGS) -c bzlib.c +bzip2.o: bzip2.c + $(CC) $(CFLAGS) -c bzip2.c +bzip2recover.o: bzip2recover.c + $(CC) $(CFLAGS) -c bzip2recover.c + + +distclean: clean + rm -f manual.ps manual.html manual.pdf + +DISTNAME=bzip2-1.0.7 +dist: check manual + rm -f $(DISTNAME) + ln -s -f . $(DISTNAME) + tar cvf $(DISTNAME).tar \ + $(DISTNAME)/blocksort.c \ + $(DISTNAME)/huffman.c \ + $(DISTNAME)/crctable.c \ + $(DISTNAME)/randtable.c \ + $(DISTNAME)/compress.c \ + $(DISTNAME)/decompress.c \ + $(DISTNAME)/bzlib.c \ + $(DISTNAME)/bzip2.c \ + $(DISTNAME)/bzip2recover.c \ + $(DISTNAME)/bzlib.h \ + $(DISTNAME)/bzlib_private.h \ + $(DISTNAME)/Makefile \ + $(DISTNAME)/LICENSE \ + $(DISTNAME)/bzip2.1 \ + $(DISTNAME)/bzip2.1.preformatted \ + $(DISTNAME)/bzip2.txt \ + $(DISTNAME)/words0 \ + $(DISTNAME)/words1 \ + $(DISTNAME)/words2 \ + $(DISTNAME)/words3 \ + $(DISTNAME)/sample1.ref \ + $(DISTNAME)/sample2.ref \ + $(DISTNAME)/sample3.ref \ + $(DISTNAME)/sample1.bz2 \ + $(DISTNAME)/sample2.bz2 \ + $(DISTNAME)/sample3.bz2 \ + $(DISTNAME)/dlltest.c \ + $(DISTNAME)/manual.html \ + $(DISTNAME)/manual.pdf \ + $(DISTNAME)/manual.ps \ + $(DISTNAME)/README \ + $(DISTNAME)/README.COMPILATION.PROBLEMS \ + $(DISTNAME)/README.XML.STUFF \ + $(DISTNAME)/CHANGES \ + $(DISTNAME)/libbz2.def \ + $(DISTNAME)/libbz2.dsp \ + $(DISTNAME)/dlltest.dsp \ + $(DISTNAME)/makefile.msc \ + $(DISTNAME)/unzcrash.c \ + $(DISTNAME)/spewG.c \ + $(DISTNAME)/mk251.c \ + $(DISTNAME)/bzdiff \ + $(DISTNAME)/bzdiff.1 \ + $(DISTNAME)/bzmore \ + $(DISTNAME)/bzmore.1 \ + $(DISTNAME)/bzgrep \ + $(DISTNAME)/bzgrep.1 \ + $(DISTNAME)/Makefile-libbz2_so \ + $(DISTNAME)/bz-common.xsl \ + $(DISTNAME)/bz-fo.xsl \ + $(DISTNAME)/bz-html.xsl \ + $(DISTNAME)/bzip.css \ + $(DISTNAME)/entities.xml \ + $(DISTNAME)/manual.xml \ + $(DISTNAME)/format.pl \ + $(DISTNAME)/xmlproc.sh + gzip -v $(DISTNAME).tar + +# For rebuilding the manual from sources on my SuSE 9.1 box + +MANUAL_SRCS= bz-common.xsl bz-fo.xsl bz-html.xsl bzip.css \ + entities.xml manual.xml + +manual: manual.html manual.ps manual.pdf + +manual.ps: $(MANUAL_SRCS) + ./xmlproc.sh -ps manual.xml + +manual.pdf: $(MANUAL_SRCS) + ./xmlproc.sh -pdf manual.xml + +manual.html: $(MANUAL_SRCS) + ./xmlproc.sh -html manual.xml Index: vendor/bzip2/1.0.7/Makefile-libbz2_so =================================================================== --- vendor/bzip2/1.0.7/Makefile-libbz2_so (nonexistent) +++ vendor/bzip2/1.0.7/Makefile-libbz2_so (revision 349497) @@ -0,0 +1,59 @@ + +# This Makefile builds a shared version of the library, +# libbz2.so.1.0.7, with soname libbz2.so.1.0, +# at least on x86-Linux (RedHat 7.2), +# with gcc-2.96 20000731 (Red Hat Linux 7.1 2.96-98). +# Please see the README file for some important info +# about building the library like this. + +# ------------------------------------------------------------------ +# This file is part of bzip2/libbzip2, a program and library for +# lossless, block-sorting data compression. +# +# bzip2/libbzip2 version 1.0.6 of 6 September 2010 +# Copyright (C) 1996-2010 Julian Seward +# +# Please read the WARNING, DISCLAIMER and PATENTS sections in the +# README file. +# +# This program is released under the terms of the license contained +# in the file LICENSE. +# ------------------------------------------------------------------ + + +SHELL=/bin/sh +CC=gcc +BIGFILES=-D_FILE_OFFSET_BITS=64 +CFLAGS=-fpic -fPIC -Wall -Winline -O2 -g $(BIGFILES) + +OBJS= blocksort.o \ + huffman.o \ + crctable.o \ + randtable.o \ + compress.o \ + decompress.o \ + bzlib.o + +all: $(OBJS) + $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.7 $(OBJS) + $(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.7 + rm -f libbz2.so.1.0 + ln -s libbz2.so.1.0.7 libbz2.so.1.0 + +clean: + rm -f $(OBJS) bzip2.o libbz2.so.1.0.7 libbz2.so.1.0 bzip2-shared + +blocksort.o: blocksort.c + $(CC) $(CFLAGS) -c blocksort.c +huffman.o: huffman.c + $(CC) $(CFLAGS) -c huffman.c +crctable.o: crctable.c + $(CC) $(CFLAGS) -c crctable.c +randtable.o: randtable.c + $(CC) $(CFLAGS) -c randtable.c +compress.o: compress.c + $(CC) $(CFLAGS) -c compress.c +decompress.o: decompress.c + $(CC) $(CFLAGS) -c decompress.c +bzlib.o: bzlib.c + $(CC) $(CFLAGS) -c bzlib.c Index: vendor/bzip2/1.0.7/README =================================================================== --- vendor/bzip2/1.0.7/README (nonexistent) +++ vendor/bzip2/1.0.7/README (revision 349497) @@ -0,0 +1,195 @@ + +This is the README for bzip2/libzip2. +This version is fully compatible with the previous public releases. + +------------------------------------------------------------------ +This file is part of bzip2/libbzip2, a program and library for +lossless, block-sorting data compression. + +bzip2/libbzip2 version 1.0.7 of 27 June 2019 +Copyright (C) 1996-2010 Julian Seward + +Please read the WARNING, DISCLAIMER and PATENTS sections in this file. + +This program is released under the terms of the license contained +in the file LICENSE. +------------------------------------------------------------------ + +Complete documentation is available in Postscript form (manual.ps), +PDF (manual.pdf) or html (manual.html). A plain-text version of the +manual page is available as bzip2.txt. + + +HOW TO BUILD -- UNIX + +Type 'make'. This builds the library libbz2.a and then the programs +bzip2 and bzip2recover. Six self-tests are run. If the self-tests +complete ok, carry on to installation: + +To install in /usr/local/bin, /usr/local/lib, /usr/local/man and +/usr/local/include, type + + make install + +To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type + + make install PREFIX=/xxx/yyy + +If you are (justifiably) paranoid and want to see what 'make install' +is going to do, you can first do + + make -n install or + make -n install PREFIX=/xxx/yyy respectively. + +The -n instructs make to show the commands it would execute, but not +actually execute them. + + +HOW TO BUILD -- UNIX, shared library libbz2.so. + +Do 'make -f Makefile-libbz2_so'. This Makefile seems to work for +Linux-ELF (RedHat 7.2 on an x86 box), with gcc. I make no claims +that it works for any other platform, though I suspect it probably +will work for most platforms employing both ELF and gcc. + +bzip2-shared, a client of the shared library, is also built, but not +self-tested. So I suggest you also build using the normal Makefile, +since that conducts a self-test. A second reason to prefer the +version statically linked to the library is that, on x86 platforms, +building shared objects makes a valuable register (%ebx) unavailable +to gcc, resulting in a slowdown of 10%-20%, at least for bzip2. + +Important note for people upgrading .so's from 0.9.0/0.9.5 to version +1.0.X. All the functions in the library have been renamed, from (eg) +bzCompress to BZ2_bzCompress, to avoid namespace pollution. +Unfortunately this means that the libbz2.so created by +Makefile-libbz2_so will not work with any program which used an older +version of the library. I do encourage library clients to make the +effort to upgrade to use version 1.0, since it is both faster and more +robust than previous versions. + + +HOW TO BUILD -- Windows 95, NT, DOS, Mac, etc. + +It's difficult for me to support compilation on all these platforms. +My approach is to collect binaries for these platforms, and put them +on the master web site (https://sourceware.org/bzip2/). Look there. However +(FWIW), bzip2-1.0.X is very standard ANSI C and should compile +unmodified with MS Visual C. If you have difficulties building, you +might want to read README.COMPILATION.PROBLEMS. + +At least using MS Visual C++ 6, you can build from the unmodified +sources by issuing, in a command shell: + + nmake -f makefile.msc + +(you may need to first run the MSVC-provided script VCVARS32.BAT + so as to set up paths to the MSVC tools correctly). + + +VALIDATION + +Correct operation, in the sense that a compressed file can always be +decompressed to reproduce the original, is obviously of paramount +importance. To validate bzip2, I used a modified version of Mark +Nelson's churn program. Churn is an automated test driver which +recursively traverses a directory structure, using bzip2 to compress +and then decompress each file it encounters, and checking that the +decompressed data is the same as the original. + + + +Please read and be aware of the following: + +WARNING: + + This program and library (attempts to) compress data by + performing several non-trivial transformations on it. + Unless you are 100% familiar with *all* the algorithms + contained herein, and with the consequences of modifying them, + you should NOT meddle with the compression or decompression + machinery. Incorrect changes can and very likely *will* + lead to disastrous loss of data. + + +DISCLAIMER: + + I TAKE NO RESPONSIBILITY FOR ANY LOSS OF DATA ARISING FROM THE + USE OF THIS PROGRAM/LIBRARY, HOWSOEVER CAUSED. + + Every compression of a file implies an assumption that the + compressed file can be decompressed to reproduce the original. + Great efforts in design, coding and testing have been made to + ensure that this program works correctly. However, the complexity + of the algorithms, and, in particular, the presence of various + special cases in the code which occur with very low but non-zero + probability make it impossible to rule out the possibility of bugs + remaining in the program. DO NOT COMPRESS ANY DATA WITH THIS + PROGRAM UNLESS YOU ARE PREPARED TO ACCEPT THE POSSIBILITY, HOWEVER + SMALL, THAT THE DATA WILL NOT BE RECOVERABLE. + + That is not to say this program is inherently unreliable. + Indeed, I very much hope the opposite is true. bzip2/libbzip2 + has been carefully constructed and extensively tested. + + +PATENTS: + + To the best of my knowledge, bzip2/libbzip2 does not use any + patented algorithms. However, I do not have the resources + to carry out a patent search. Therefore I cannot give any + guarantee of the above statement. + + + +WHAT'S NEW IN 0.9.0 (as compared to 0.1pl2) ? + + * Approx 10% faster compression, 30% faster decompression + * -t (test mode) is a lot quicker + * Can decompress concatenated compressed files + * Programming interface, so programs can directly read/write .bz2 files + * Less restrictive (BSD-style) licensing + * Flag handling more compatible with GNU gzip + * Much more documentation, i.e., a proper user manual + * Hopefully, improved portability (at least of the library) + +WHAT'S NEW IN 0.9.5 ? + + * Compression speed is much less sensitive to the input + data than in previous versions. Specifically, the very + slow performance caused by repetitive data is fixed. + * Many small improvements in file and flag handling. + * A Y2K statement. + +WHAT'S NEW IN 1.0.x ? + + See the CHANGES file. + +I hope you find bzip2 useful. Feel free to contact me at + jseward@acm.org +if you have any suggestions or queries. Many people mailed me with +comments, suggestions and patches after the releases of bzip-0.15, +bzip-0.21, and bzip2 versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, +1.0.2 and 1.0.3, and the changes in bzip2 are largely a result of this +feedback. I thank you for your comments. + +bzip2's "home" is https://sourceware.org/bzip2/ + +Julian Seward +jseward@acm.org +Cambridge, UK. + +18 July 1996 (version 0.15) +25 August 1996 (version 0.21) + 7 August 1997 (bzip2, version 0.1) +29 August 1997 (bzip2, version 0.1pl2) +23 August 1998 (bzip2, version 0.9.0) + 8 June 1999 (bzip2, version 0.9.5) + 4 Sept 1999 (bzip2, version 0.9.5d) + 5 May 2000 (bzip2, version 1.0pre8) +30 December 2001 (bzip2, version 1.0.2pre1) +15 February 2005 (bzip2, version 1.0.3) +20 December 2006 (bzip2, version 1.0.4) +10 December 2007 (bzip2, version 1.0.5) + 6 Sept 2010 (bzip2, version 1.0.6) +27 June 2019 (bzip2, version 1.0.7) Index: vendor/bzip2/1.0.7/README.COMPILATION.PROBLEMS =================================================================== --- vendor/bzip2/1.0.7/README.COMPILATION.PROBLEMS (nonexistent) +++ vendor/bzip2/1.0.7/README.COMPILATION.PROBLEMS (revision 349497) @@ -0,0 +1,58 @@ +------------------------------------------------------------------ +This file is part of bzip2/libbzip2, a program and library for +lossless, block-sorting data compression. + +bzip2/libbzip2 version 1.0.7 of 27 June 2019 +Copyright (C) 1996-2010 Julian Seward + +Please read the WARNING, DISCLAIMER and PATENTS sections in the +README file. + +This program is released under the terms of the license contained +in the file LICENSE. +------------------------------------------------------------------ + +bzip2 should compile without problems on the vast majority of +platforms. Using the supplied Makefile, I've built and tested it +myself for x86-linux and amd64-linux. With makefile.msc, Visual C++ +6.0 and nmake, you can build a native Win32 version too. Large file +support seems to work correctly on at least on amd64-linux. + +When I say "large file" I mean a file of size 2,147,483,648 (2^31) +bytes or above. Many older OSs can't handle files above this size, +but many newer ones can. Large files are pretty huge -- most files +you'll encounter are not Large Files. + +Early versions of bzip2 (0.1, 0.9.0, 0.9.5) compiled on a wide variety +of platforms without difficulty, and I hope this version will continue +in that tradition. However, in order to support large files, I've had +to include the define -D_FILE_OFFSET_BITS=64 in the Makefile. This +can cause problems. + +The technique of adding -D_FILE_OFFSET_BITS=64 to get large file +support is, as far as I know, the Recommended Way to get correct large +file support. For more details, see the Large File Support +Specification, published by the Large File Summit, at + + http://ftp.sas.com/standards/large.file + +As a general comment, if you get compilation errors which you think +are related to large file support, try removing the above define from +the Makefile, ie, delete the line + + BIGFILES=-D_FILE_OFFSET_BITS=64 + +from the Makefile, and do 'make clean ; make'. This will give you a +version of bzip2 without large file support, which, for most +applications, is probably not a problem. + +Alternatively, try some of the platform-specific hints listed below. + +You can use the spewG.c program to generate huge files to test bzip2's +large file support, if you are feeling paranoid. Be aware though that +any compilation problems which affect bzip2 will also affect spewG.c, +alas. + +AIX: I have reports that for large file support, you need to specify +-D_LARGE_FILES rather than -D_FILE_OFFSET_BITS=64. I have not tested +this myself. Index: vendor/bzip2/1.0.7/blocksort.c =================================================================== --- vendor/bzip2/1.0.7/blocksort.c (nonexistent) +++ vendor/bzip2/1.0.7/blocksort.c (revision 349497) @@ -0,0 +1,1094 @@ + +/*-------------------------------------------------------------*/ +/*--- Block sorting machinery ---*/ +/*--- blocksort.c ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + + +#include "bzlib_private.h" + +/*---------------------------------------------*/ +/*--- Fallback O(N log(N)^2) sorting ---*/ +/*--- algorithm, for repetitive blocks ---*/ +/*---------------------------------------------*/ + +/*---------------------------------------------*/ +static +__inline__ +void fallbackSimpleSort ( UInt32* fmap, + UInt32* eclass, + Int32 lo, + Int32 hi ) +{ + Int32 i, j, tmp; + UInt32 ec_tmp; + + if (lo == hi) return; + + if (hi - lo > 3) { + for ( i = hi-4; i >= lo; i-- ) { + tmp = fmap[i]; + ec_tmp = eclass[tmp]; + for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 ) + fmap[j-4] = fmap[j]; + fmap[j-4] = tmp; + } + } + + for ( i = hi-1; i >= lo; i-- ) { + tmp = fmap[i]; + ec_tmp = eclass[tmp]; + for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ ) + fmap[j-1] = fmap[j]; + fmap[j-1] = tmp; + } +} + + +/*---------------------------------------------*/ +#define fswap(zz1, zz2) \ + { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; } + +#define fvswap(zzp1, zzp2, zzn) \ +{ \ + Int32 yyp1 = (zzp1); \ + Int32 yyp2 = (zzp2); \ + Int32 yyn = (zzn); \ + while (yyn > 0) { \ + fswap(fmap[yyp1], fmap[yyp2]); \ + yyp1++; yyp2++; yyn--; \ + } \ +} + + +#define fmin(a,b) ((a) < (b)) ? (a) : (b) + +#define fpush(lz,hz) { stackLo[sp] = lz; \ + stackHi[sp] = hz; \ + sp++; } + +#define fpop(lz,hz) { sp--; \ + lz = stackLo[sp]; \ + hz = stackHi[sp]; } + +#define FALLBACK_QSORT_SMALL_THRESH 10 +#define FALLBACK_QSORT_STACK_SIZE 100 + + +static +void fallbackQSort3 ( UInt32* fmap, + UInt32* eclass, + Int32 loSt, + Int32 hiSt ) +{ + Int32 unLo, unHi, ltLo, gtHi, n, m; + Int32 sp, lo, hi; + UInt32 med, r, r3; + Int32 stackLo[FALLBACK_QSORT_STACK_SIZE]; + Int32 stackHi[FALLBACK_QSORT_STACK_SIZE]; + + r = 0; + + sp = 0; + fpush ( loSt, hiSt ); + + while (sp > 0) { + + AssertH ( sp < FALLBACK_QSORT_STACK_SIZE - 1, 1004 ); + + fpop ( lo, hi ); + if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) { + fallbackSimpleSort ( fmap, eclass, lo, hi ); + continue; + } + + /* Random partitioning. Median of 3 sometimes fails to + avoid bad cases. Median of 9 seems to help but + looks rather expensive. This too seems to work but + is cheaper. Guidance for the magic constants + 7621 and 32768 is taken from Sedgewick's algorithms + book, chapter 35. + */ + r = ((r * 7621) + 1) % 32768; + r3 = r % 3; + if (r3 == 0) med = eclass[fmap[lo]]; else + if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else + med = eclass[fmap[hi]]; + + unLo = ltLo = lo; + unHi = gtHi = hi; + + while (1) { + while (1) { + if (unLo > unHi) break; + n = (Int32)eclass[fmap[unLo]] - (Int32)med; + if (n == 0) { + fswap(fmap[unLo], fmap[ltLo]); + ltLo++; unLo++; + continue; + }; + if (n > 0) break; + unLo++; + } + while (1) { + if (unLo > unHi) break; + n = (Int32)eclass[fmap[unHi]] - (Int32)med; + if (n == 0) { + fswap(fmap[unHi], fmap[gtHi]); + gtHi--; unHi--; + continue; + }; + if (n < 0) break; + unHi--; + } + if (unLo > unHi) break; + fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--; + } + + AssertD ( unHi == unLo-1, "fallbackQSort3(2)" ); + + if (gtHi < ltLo) continue; + + n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n); + m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m); + + n = lo + unLo - ltLo - 1; + m = hi - (gtHi - unHi) + 1; + + if (n - lo > hi - m) { + fpush ( lo, n ); + fpush ( m, hi ); + } else { + fpush ( m, hi ); + fpush ( lo, n ); + } + } +} + +#undef fmin +#undef fpush +#undef fpop +#undef fswap +#undef fvswap +#undef FALLBACK_QSORT_SMALL_THRESH +#undef FALLBACK_QSORT_STACK_SIZE + + +/*---------------------------------------------*/ +/* Pre: + nblock > 0 + eclass exists for [0 .. nblock-1] + ((UChar*)eclass) [0 .. nblock-1] holds block + ptr exists for [0 .. nblock-1] + + Post: + ((UChar*)eclass) [0 .. nblock-1] holds block + All other areas of eclass destroyed + fmap [0 .. nblock-1] holds sorted order + bhtab [ 0 .. 2+(nblock/32) ] destroyed +*/ + +#define SET_BH(zz) bhtab[(zz) >> 5] |= ((UInt32)1 << ((zz) & 31)) +#define CLEAR_BH(zz) bhtab[(zz) >> 5] &= ~((UInt32)1 << ((zz) & 31)) +#define ISSET_BH(zz) (bhtab[(zz) >> 5] & ((UInt32)1 << ((zz) & 31))) +#define WORD_BH(zz) bhtab[(zz) >> 5] +#define UNALIGNED_BH(zz) ((zz) & 0x01f) + +static +void fallbackSort ( UInt32* fmap, + UInt32* eclass, + UInt32* bhtab, + Int32 nblock, + Int32 verb ) +{ + Int32 ftab[257]; + Int32 ftabCopy[256]; + Int32 H, i, j, k, l, r, cc, cc1; + Int32 nNotDone; + Int32 nBhtab; + UChar* eclass8 = (UChar*)eclass; + + /*-- + Initial 1-char radix sort to generate + initial fmap and initial BH bits. + --*/ + if (verb >= 4) + VPrintf0 ( " bucket sorting ...\n" ); + for (i = 0; i < 257; i++) ftab[i] = 0; + for (i = 0; i < nblock; i++) ftab[eclass8[i]]++; + for (i = 0; i < 256; i++) ftabCopy[i] = ftab[i]; + for (i = 1; i < 257; i++) ftab[i] += ftab[i-1]; + + for (i = 0; i < nblock; i++) { + j = eclass8[i]; + k = ftab[j] - 1; + ftab[j] = k; + fmap[k] = i; + } + + nBhtab = 2 + (nblock / 32); + for (i = 0; i < nBhtab; i++) bhtab[i] = 0; + for (i = 0; i < 256; i++) SET_BH(ftab[i]); + + /*-- + Inductively refine the buckets. Kind-of an + "exponential radix sort" (!), inspired by the + Manber-Myers suffix array construction algorithm. + --*/ + + /*-- set sentinel bits for block-end detection --*/ + for (i = 0; i < 32; i++) { + SET_BH(nblock + 2*i); + CLEAR_BH(nblock + 2*i + 1); + } + + /*-- the log(N) loop --*/ + H = 1; + while (1) { + + if (verb >= 4) + VPrintf1 ( " depth %6d has ", H ); + + j = 0; + for (i = 0; i < nblock; i++) { + if (ISSET_BH(i)) j = i; + k = fmap[i] - H; if (k < 0) k += nblock; + eclass[k] = j; + } + + nNotDone = 0; + r = -1; + while (1) { + + /*-- find the next non-singleton bucket --*/ + k = r + 1; + while (ISSET_BH(k) && UNALIGNED_BH(k)) k++; + if (ISSET_BH(k)) { + while (WORD_BH(k) == 0xffffffff) k += 32; + while (ISSET_BH(k)) k++; + } + l = k - 1; + if (l >= nblock) break; + while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++; + if (!ISSET_BH(k)) { + while (WORD_BH(k) == 0x00000000) k += 32; + while (!ISSET_BH(k)) k++; + } + r = k - 1; + if (r >= nblock) break; + + /*-- now [l, r] bracket current bucket --*/ + if (r > l) { + nNotDone += (r - l + 1); + fallbackQSort3 ( fmap, eclass, l, r ); + + /*-- scan bucket and generate header bits-- */ + cc = -1; + for (i = l; i <= r; i++) { + cc1 = eclass[fmap[i]]; + if (cc != cc1) { SET_BH(i); cc = cc1; }; + } + } + } + + if (verb >= 4) + VPrintf1 ( "%6d unresolved strings\n", nNotDone ); + + H *= 2; + if (H > nblock || nNotDone == 0) break; + } + + /*-- + Reconstruct the original block in + eclass8 [0 .. nblock-1], since the + previous phase destroyed it. + --*/ + if (verb >= 4) + VPrintf0 ( " reconstructing block ...\n" ); + j = 0; + for (i = 0; i < nblock; i++) { + while (ftabCopy[j] == 0) j++; + ftabCopy[j]--; + eclass8[fmap[i]] = (UChar)j; + } + AssertH ( j < 256, 1005 ); +} + +#undef SET_BH +#undef CLEAR_BH +#undef ISSET_BH +#undef WORD_BH +#undef UNALIGNED_BH + + +/*---------------------------------------------*/ +/*--- The main, O(N^2 log(N)) sorting ---*/ +/*--- algorithm. Faster for "normal" ---*/ +/*--- non-repetitive blocks. ---*/ +/*---------------------------------------------*/ + +/*---------------------------------------------*/ +static +__inline__ +Bool mainGtU ( UInt32 i1, + UInt32 i2, + UChar* block, + UInt16* quadrant, + UInt32 nblock, + Int32* budget ) +{ + Int32 k; + UChar c1, c2; + UInt16 s1, s2; + + AssertD ( i1 != i2, "mainGtU" ); + /* 1 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 2 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 3 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 4 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 5 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 6 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 7 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 8 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 9 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 10 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 11 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 12 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + + k = nblock + 8; + + do { + /* 1 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + s1 = quadrant[i1]; s2 = quadrant[i2]; + if (s1 != s2) return (s1 > s2); + i1++; i2++; + /* 2 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + s1 = quadrant[i1]; s2 = quadrant[i2]; + if (s1 != s2) return (s1 > s2); + i1++; i2++; + /* 3 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + s1 = quadrant[i1]; s2 = quadrant[i2]; + if (s1 != s2) return (s1 > s2); + i1++; i2++; + /* 4 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + s1 = quadrant[i1]; s2 = quadrant[i2]; + if (s1 != s2) return (s1 > s2); + i1++; i2++; + /* 5 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + s1 = quadrant[i1]; s2 = quadrant[i2]; + if (s1 != s2) return (s1 > s2); + i1++; i2++; + /* 6 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + s1 = quadrant[i1]; s2 = quadrant[i2]; + if (s1 != s2) return (s1 > s2); + i1++; i2++; + /* 7 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + s1 = quadrant[i1]; s2 = quadrant[i2]; + if (s1 != s2) return (s1 > s2); + i1++; i2++; + /* 8 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + s1 = quadrant[i1]; s2 = quadrant[i2]; + if (s1 != s2) return (s1 > s2); + i1++; i2++; + + if (i1 >= nblock) i1 -= nblock; + if (i2 >= nblock) i2 -= nblock; + + k -= 8; + (*budget)--; + } + while (k >= 0); + + return False; +} + + +/*---------------------------------------------*/ +/*-- + Knuth's increments seem to work better + than Incerpi-Sedgewick here. Possibly + because the number of elems to sort is + usually small, typically <= 20. +--*/ +static +Int32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280, + 9841, 29524, 88573, 265720, + 797161, 2391484 }; + +static +void mainSimpleSort ( UInt32* ptr, + UChar* block, + UInt16* quadrant, + Int32 nblock, + Int32 lo, + Int32 hi, + Int32 d, + Int32* budget ) +{ + Int32 i, j, h, bigN, hp; + UInt32 v; + + bigN = hi - lo + 1; + if (bigN < 2) return; + + hp = 0; + while (incs[hp] < bigN) hp++; + hp--; + + for (; hp >= 0; hp--) { + h = incs[hp]; + + i = lo + h; + while (True) { + + /*-- copy 1 --*/ + if (i > hi) break; + v = ptr[i]; + j = i; + while ( mainGtU ( + ptr[j-h]+d, v+d, block, quadrant, nblock, budget + ) ) { + ptr[j] = ptr[j-h]; + j = j - h; + if (j <= (lo + h - 1)) break; + } + ptr[j] = v; + i++; + + /*-- copy 2 --*/ + if (i > hi) break; + v = ptr[i]; + j = i; + while ( mainGtU ( + ptr[j-h]+d, v+d, block, quadrant, nblock, budget + ) ) { + ptr[j] = ptr[j-h]; + j = j - h; + if (j <= (lo + h - 1)) break; + } + ptr[j] = v; + i++; + + /*-- copy 3 --*/ + if (i > hi) break; + v = ptr[i]; + j = i; + while ( mainGtU ( + ptr[j-h]+d, v+d, block, quadrant, nblock, budget + ) ) { + ptr[j] = ptr[j-h]; + j = j - h; + if (j <= (lo + h - 1)) break; + } + ptr[j] = v; + i++; + + if (*budget < 0) return; + } + } +} + + +/*---------------------------------------------*/ +/*-- + The following is an implementation of + an elegant 3-way quicksort for strings, + described in a paper "Fast Algorithms for + Sorting and Searching Strings", by Robert + Sedgewick and Jon L. Bentley. +--*/ + +#define mswap(zz1, zz2) \ + { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; } + +#define mvswap(zzp1, zzp2, zzn) \ +{ \ + Int32 yyp1 = (zzp1); \ + Int32 yyp2 = (zzp2); \ + Int32 yyn = (zzn); \ + while (yyn > 0) { \ + mswap(ptr[yyp1], ptr[yyp2]); \ + yyp1++; yyp2++; yyn--; \ + } \ +} + +static +__inline__ +UChar mmed3 ( UChar a, UChar b, UChar c ) +{ + UChar t; + if (a > b) { t = a; a = b; b = t; }; + if (b > c) { + b = c; + if (a > b) b = a; + } + return b; +} + +#define mmin(a,b) ((a) < (b)) ? (a) : (b) + +#define mpush(lz,hz,dz) { stackLo[sp] = lz; \ + stackHi[sp] = hz; \ + stackD [sp] = dz; \ + sp++; } + +#define mpop(lz,hz,dz) { sp--; \ + lz = stackLo[sp]; \ + hz = stackHi[sp]; \ + dz = stackD [sp]; } + + +#define mnextsize(az) (nextHi[az]-nextLo[az]) + +#define mnextswap(az,bz) \ + { Int32 tz; \ + tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \ + tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \ + tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; } + + +#define MAIN_QSORT_SMALL_THRESH 20 +#define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT) +#define MAIN_QSORT_STACK_SIZE 100 + +static +void mainQSort3 ( UInt32* ptr, + UChar* block, + UInt16* quadrant, + Int32 nblock, + Int32 loSt, + Int32 hiSt, + Int32 dSt, + Int32* budget ) +{ + Int32 unLo, unHi, ltLo, gtHi, n, m, med; + Int32 sp, lo, hi, d; + + Int32 stackLo[MAIN_QSORT_STACK_SIZE]; + Int32 stackHi[MAIN_QSORT_STACK_SIZE]; + Int32 stackD [MAIN_QSORT_STACK_SIZE]; + + Int32 nextLo[3]; + Int32 nextHi[3]; + Int32 nextD [3]; + + sp = 0; + mpush ( loSt, hiSt, dSt ); + + while (sp > 0) { + + AssertH ( sp < MAIN_QSORT_STACK_SIZE - 2, 1001 ); + + mpop ( lo, hi, d ); + if (hi - lo < MAIN_QSORT_SMALL_THRESH || + d > MAIN_QSORT_DEPTH_THRESH) { + mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget ); + if (*budget < 0) return; + continue; + } + + med = (Int32) + mmed3 ( block[ptr[ lo ]+d], + block[ptr[ hi ]+d], + block[ptr[ (lo+hi)>>1 ]+d] ); + + unLo = ltLo = lo; + unHi = gtHi = hi; + + while (True) { + while (True) { + if (unLo > unHi) break; + n = ((Int32)block[ptr[unLo]+d]) - med; + if (n == 0) { + mswap(ptr[unLo], ptr[ltLo]); + ltLo++; unLo++; continue; + }; + if (n > 0) break; + unLo++; + } + while (True) { + if (unLo > unHi) break; + n = ((Int32)block[ptr[unHi]+d]) - med; + if (n == 0) { + mswap(ptr[unHi], ptr[gtHi]); + gtHi--; unHi--; continue; + }; + if (n < 0) break; + unHi--; + } + if (unLo > unHi) break; + mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--; + } + + AssertD ( unHi == unLo-1, "mainQSort3(2)" ); + + if (gtHi < ltLo) { + mpush(lo, hi, d+1 ); + continue; + } + + n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n); + m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m); + + n = lo + unLo - ltLo - 1; + m = hi - (gtHi - unHi) + 1; + + nextLo[0] = lo; nextHi[0] = n; nextD[0] = d; + nextLo[1] = m; nextHi[1] = hi; nextD[1] = d; + nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1; + + if (mnextsize(0) < mnextsize(1)) mnextswap(0,1); + if (mnextsize(1) < mnextsize(2)) mnextswap(1,2); + if (mnextsize(0) < mnextsize(1)) mnextswap(0,1); + + AssertD (mnextsize(0) >= mnextsize(1), "mainQSort3(8)" ); + AssertD (mnextsize(1) >= mnextsize(2), "mainQSort3(9)" ); + + mpush (nextLo[0], nextHi[0], nextD[0]); + mpush (nextLo[1], nextHi[1], nextD[1]); + mpush (nextLo[2], nextHi[2], nextD[2]); + } +} + +#undef mswap +#undef mvswap +#undef mpush +#undef mpop +#undef mmin +#undef mnextsize +#undef mnextswap +#undef MAIN_QSORT_SMALL_THRESH +#undef MAIN_QSORT_DEPTH_THRESH +#undef MAIN_QSORT_STACK_SIZE + + +/*---------------------------------------------*/ +/* Pre: + nblock > N_OVERSHOOT + block32 exists for [0 .. nblock-1 +N_OVERSHOOT] + ((UChar*)block32) [0 .. nblock-1] holds block + ptr exists for [0 .. nblock-1] + + Post: + ((UChar*)block32) [0 .. nblock-1] holds block + All other areas of block32 destroyed + ftab [0 .. 65536 ] destroyed + ptr [0 .. nblock-1] holds sorted order + if (*budget < 0), sorting was abandoned +*/ + +#define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8]) +#define SETMASK (1 << 21) +#define CLEARMASK (~(SETMASK)) + +static +void mainSort ( UInt32* ptr, + UChar* block, + UInt16* quadrant, + UInt32* ftab, + Int32 nblock, + Int32 verb, + Int32* budget ) +{ + Int32 i, j, k, ss, sb; + Int32 runningOrder[256]; + Bool bigDone[256]; + Int32 copyStart[256]; + Int32 copyEnd [256]; + UChar c1; + Int32 numQSorted; + UInt16 s; + if (verb >= 4) VPrintf0 ( " main sort initialise ...\n" ); + + /*-- set up the 2-byte frequency table --*/ + for (i = 65536; i >= 0; i--) ftab[i] = 0; + + j = block[0] << 8; + i = nblock-1; + for (; i >= 3; i -= 4) { + quadrant[i] = 0; + j = (j >> 8) | ( ((UInt16)block[i]) << 8); + ftab[j]++; + quadrant[i-1] = 0; + j = (j >> 8) | ( ((UInt16)block[i-1]) << 8); + ftab[j]++; + quadrant[i-2] = 0; + j = (j >> 8) | ( ((UInt16)block[i-2]) << 8); + ftab[j]++; + quadrant[i-3] = 0; + j = (j >> 8) | ( ((UInt16)block[i-3]) << 8); + ftab[j]++; + } + for (; i >= 0; i--) { + quadrant[i] = 0; + j = (j >> 8) | ( ((UInt16)block[i]) << 8); + ftab[j]++; + } + + /*-- (emphasises close relationship of block & quadrant) --*/ + for (i = 0; i < BZ_N_OVERSHOOT; i++) { + block [nblock+i] = block[i]; + quadrant[nblock+i] = 0; + } + + if (verb >= 4) VPrintf0 ( " bucket sorting ...\n" ); + + /*-- Complete the initial radix sort --*/ + for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1]; + + s = block[0] << 8; + i = nblock-1; + for (; i >= 3; i -= 4) { + s = (s >> 8) | (block[i] << 8); + j = ftab[s] -1; + ftab[s] = j; + ptr[j] = i; + s = (s >> 8) | (block[i-1] << 8); + j = ftab[s] -1; + ftab[s] = j; + ptr[j] = i-1; + s = (s >> 8) | (block[i-2] << 8); + j = ftab[s] -1; + ftab[s] = j; + ptr[j] = i-2; + s = (s >> 8) | (block[i-3] << 8); + j = ftab[s] -1; + ftab[s] = j; + ptr[j] = i-3; + } + for (; i >= 0; i--) { + s = (s >> 8) | (block[i] << 8); + j = ftab[s] -1; + ftab[s] = j; + ptr[j] = i; + } + + /*-- + Now ftab contains the first loc of every small bucket. + Calculate the running order, from smallest to largest + big bucket. + --*/ + for (i = 0; i <= 255; i++) { + bigDone [i] = False; + runningOrder[i] = i; + } + + { + Int32 vv; + Int32 h = 1; + do h = 3 * h + 1; while (h <= 256); + do { + h = h / 3; + for (i = h; i <= 255; i++) { + vv = runningOrder[i]; + j = i; + while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) { + runningOrder[j] = runningOrder[j-h]; + j = j - h; + if (j <= (h - 1)) goto zero; + } + zero: + runningOrder[j] = vv; + } + } while (h != 1); + } + + /*-- + The main sorting loop. + --*/ + + numQSorted = 0; + + for (i = 0; i <= 255; i++) { + + /*-- + Process big buckets, starting with the least full. + Basically this is a 3-step process in which we call + mainQSort3 to sort the small buckets [ss, j], but + also make a big effort to avoid the calls if we can. + --*/ + ss = runningOrder[i]; + + /*-- + Step 1: + Complete the big bucket [ss] by quicksorting + any unsorted small buckets [ss, j], for j != ss. + Hopefully previous pointer-scanning phases have already + completed many of the small buckets [ss, j], so + we don't have to sort them at all. + --*/ + for (j = 0; j <= 255; j++) { + if (j != ss) { + sb = (ss << 8) + j; + if ( ! (ftab[sb] & SETMASK) ) { + Int32 lo = ftab[sb] & CLEARMASK; + Int32 hi = (ftab[sb+1] & CLEARMASK) - 1; + if (hi > lo) { + if (verb >= 4) + VPrintf4 ( " qsort [0x%x, 0x%x] " + "done %d this %d\n", + ss, j, numQSorted, hi - lo + 1 ); + mainQSort3 ( + ptr, block, quadrant, nblock, + lo, hi, BZ_N_RADIX, budget + ); + numQSorted += (hi - lo + 1); + if (*budget < 0) return; + } + } + ftab[sb] |= SETMASK; + } + } + + AssertH ( !bigDone[ss], 1006 ); + + /*-- + Step 2: + Now scan this big bucket [ss] so as to synthesise the + sorted order for small buckets [t, ss] for all t, + including, magically, the bucket [ss,ss] too. + This will avoid doing Real Work in subsequent Step 1's. + --*/ + { + for (j = 0; j <= 255; j++) { + copyStart[j] = ftab[(j << 8) + ss] & CLEARMASK; + copyEnd [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1; + } + for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) { + k = ptr[j]-1; if (k < 0) k += nblock; + c1 = block[k]; + if (!bigDone[c1]) + ptr[ copyStart[c1]++ ] = k; + } + for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) { + k = ptr[j]-1; if (k < 0) k += nblock; + c1 = block[k]; + if (!bigDone[c1]) + ptr[ copyEnd[c1]-- ] = k; + } + } + + AssertH ( (copyStart[ss]-1 == copyEnd[ss]) + || + /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1. + Necessity for this case is demonstrated by compressing + a sequence of approximately 48.5 million of character + 251; 1.0.0/1.0.1 will then die here. */ + (copyStart[ss] == 0 && copyEnd[ss] == nblock-1), + 1007 ) + + for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK; + + /*-- + Step 3: + The [ss] big bucket is now done. Record this fact, + and update the quadrant descriptors. Remember to + update quadrants in the overshoot area too, if + necessary. The "if (i < 255)" test merely skips + this updating for the last bucket processed, since + updating for the last bucket is pointless. + + The quadrant array provides a way to incrementally + cache sort orderings, as they appear, so as to + make subsequent comparisons in fullGtU() complete + faster. For repetitive blocks this makes a big + difference (but not big enough to be able to avoid + the fallback sorting mechanism, exponential radix sort). + + The precise meaning is: at all times: + + for 0 <= i < nblock and 0 <= j <= nblock + + if block[i] != block[j], + + then the relative values of quadrant[i] and + quadrant[j] are meaningless. + + else { + if quadrant[i] < quadrant[j] + then the string starting at i lexicographically + precedes the string starting at j + + else if quadrant[i] > quadrant[j] + then the string starting at j lexicographically + precedes the string starting at i + + else + the relative ordering of the strings starting + at i and j has not yet been determined. + } + --*/ + bigDone[ss] = True; + + if (i < 255) { + Int32 bbStart = ftab[ss << 8] & CLEARMASK; + Int32 bbSize = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart; + Int32 shifts = 0; + + while ((bbSize >> shifts) > 65534) shifts++; + + for (j = bbSize-1; j >= 0; j--) { + Int32 a2update = ptr[bbStart + j]; + UInt16 qVal = (UInt16)(j >> shifts); + quadrant[a2update] = qVal; + if (a2update < BZ_N_OVERSHOOT) + quadrant[a2update + nblock] = qVal; + } + AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 ); + } + + } + + if (verb >= 4) + VPrintf3 ( " %d pointers, %d sorted, %d scanned\n", + nblock, numQSorted, nblock - numQSorted ); +} + +#undef BIGFREQ +#undef SETMASK +#undef CLEARMASK + + +/*---------------------------------------------*/ +/* Pre: + nblock > 0 + arr2 exists for [0 .. nblock-1 +N_OVERSHOOT] + ((UChar*)arr2) [0 .. nblock-1] holds block + arr1 exists for [0 .. nblock-1] + + Post: + ((UChar*)arr2) [0 .. nblock-1] holds block + All other areas of block destroyed + ftab [ 0 .. 65536 ] destroyed + arr1 [0 .. nblock-1] holds sorted order +*/ +void BZ2_blockSort ( EState* s ) +{ + UInt32* ptr = s->ptr; + UChar* block = s->block; + UInt32* ftab = s->ftab; + Int32 nblock = s->nblock; + Int32 verb = s->verbosity; + Int32 wfact = s->workFactor; + UInt16* quadrant; + Int32 budget; + Int32 budgetInit; + Int32 i; + + if (nblock < 10000) { + fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb ); + } else { + /* Calculate the location for quadrant, remembering to get + the alignment right. Assumes that &(block[0]) is at least + 2-byte aligned -- this should be ok since block is really + the first section of arr2. + */ + i = nblock+BZ_N_OVERSHOOT; + if (i & 1) i++; + quadrant = (UInt16*)(&(block[i])); + + /* (wfact-1) / 3 puts the default-factor-30 + transition point at very roughly the same place as + with v0.1 and v0.9.0. + Not that it particularly matters any more, since the + resulting compressed stream is now the same regardless + of whether or not we use the main sort or fallback sort. + */ + if (wfact < 1 ) wfact = 1; + if (wfact > 100) wfact = 100; + budgetInit = nblock * ((wfact-1) / 3); + budget = budgetInit; + + mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget ); + if (verb >= 3) + VPrintf3 ( " %d work, %d block, ratio %5.2f\n", + budgetInit - budget, + nblock, + (float)(budgetInit - budget) / + (float)(nblock==0 ? 1 : nblock) ); + if (budget < 0) { + if (verb >= 2) + VPrintf0 ( " too repetitive; using fallback" + " sorting algorithm\n" ); + fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb ); + } + } + + s->origPtr = -1; + for (i = 0; i < s->nblock; i++) + if (ptr[i] == 0) + { s->origPtr = i; break; }; + + AssertH( s->origPtr != -1, 1003 ); +} + + +/*-------------------------------------------------------------*/ +/*--- end blocksort.c ---*/ +/*-------------------------------------------------------------*/ Index: vendor/bzip2/1.0.7/bzip2.1 =================================================================== --- vendor/bzip2/1.0.7/bzip2.1 (nonexistent) +++ vendor/bzip2/1.0.7/bzip2.1 (revision 349497) @@ -0,0 +1,454 @@ +.PU +.TH bzip2 1 +.SH NAME +bzip2, bunzip2 \- a block-sorting file compressor, v1.0.7 +.br +bzcat \- decompresses files to stdout +.br +bzip2recover \- recovers data from damaged bzip2 files + +.SH SYNOPSIS +.ll +8 +.B bzip2 +.RB [ " \-cdfkqstvzVL123456789 " ] +[ +.I "filenames \&..." +] +.ll -8 +.br +.B bunzip2 +.RB [ " \-fkvsVL " ] +[ +.I "filenames \&..." +] +.br +.B bzcat +.RB [ " \-s " ] +[ +.I "filenames \&..." +] +.br +.B bzip2recover +.I "filename" + +.SH DESCRIPTION +.I bzip2 +compresses files using the Burrows-Wheeler block sorting +text compression algorithm, and Huffman coding. Compression is +generally considerably better than that achieved by more conventional +LZ77/LZ78-based compressors, and approaches the performance of the PPM +family of statistical compressors. + +The command-line options are deliberately very similar to +those of +.I GNU gzip, +but they are not identical. + +.I bzip2 +expects a list of file names to accompany the +command-line flags. Each file is replaced by a compressed version of +itself, with the name "original_name.bz2". +Each compressed file +has the same modification date, permissions, and, when possible, +ownership as the corresponding original, so that these properties can +be correctly restored at decompression time. File name handling is +naive in the sense that there is no mechanism for preserving original +file names, permissions, ownerships or dates in filesystems which lack +these concepts, or have serious file name length restrictions, such as +MS-DOS. + +.I bzip2 +and +.I bunzip2 +will by default not overwrite existing +files. If you want this to happen, specify the \-f flag. + +If no file names are specified, +.I bzip2 +compresses from standard +input to standard output. In this case, +.I bzip2 +will decline to +write compressed output to a terminal, as this would be entirely +incomprehensible and therefore pointless. + +.I bunzip2 +(or +.I bzip2 \-d) +decompresses all +specified files. Files which were not created by +.I bzip2 +will be detected and ignored, and a warning issued. +.I bzip2 +attempts to guess the filename for the decompressed file +from that of the compressed file as follows: + + filename.bz2 becomes filename + filename.bz becomes filename + filename.tbz2 becomes filename.tar + filename.tbz becomes filename.tar + anyothername becomes anyothername.out + +If the file does not end in one of the recognised endings, +.I .bz2, +.I .bz, +.I .tbz2 +or +.I .tbz, +.I bzip2 +complains that it cannot +guess the name of the original file, and uses the original name +with +.I .out +appended. + +As with compression, supplying no +filenames causes decompression from +standard input to standard output. + +.I bunzip2 +will correctly decompress a file which is the +concatenation of two or more compressed files. The result is the +concatenation of the corresponding uncompressed files. Integrity +testing (\-t) +of concatenated +compressed files is also supported. + +You can also compress or decompress files to the standard output by +giving the \-c flag. Multiple files may be compressed and +decompressed like this. The resulting outputs are fed sequentially to +stdout. Compression of multiple files +in this manner generates a stream +containing multiple compressed file representations. Such a stream +can be decompressed correctly only by +.I bzip2 +version 0.9.0 or +later. Earlier versions of +.I bzip2 +will stop after decompressing +the first file in the stream. + +.I bzcat +(or +.I bzip2 -dc) +decompresses all specified files to +the standard output. + +.I bzip2 +will read arguments from the environment variables +.I BZIP2 +and +.I BZIP, +in that order, and will process them +before any arguments read from the command line. This gives a +convenient way to supply default arguments. + +Compression is always performed, even if the compressed +file is slightly +larger than the original. Files of less than about one hundred bytes +tend to get larger, since the compression mechanism has a constant +overhead in the region of 50 bytes. Random data (including the output +of most file compressors) is coded at about 8.05 bits per byte, giving +an expansion of around 0.5%. + +As a self-check for your protection, +.I +bzip2 +uses 32-bit CRCs to +make sure that the decompressed version of a file is identical to the +original. This guards against corruption of the compressed data, and +against undetected bugs in +.I bzip2 +(hopefully very unlikely). The +chances of data corruption going undetected is microscopic, about one +chance in four billion for each file processed. Be aware, though, that +the check occurs upon decompression, so it can only tell you that +something is wrong. It can't help you +recover the original uncompressed +data. You can use +.I bzip2recover +to try to recover data from +damaged files. + +Return values: 0 for a normal exit, 1 for environmental problems (file +not found, invalid flags, I/O errors, &c), 2 to indicate a corrupt +compressed file, 3 for an internal consistency error (eg, bug) which +caused +.I bzip2 +to panic. + +.SH OPTIONS +.TP +.B \-c --stdout +Compress or decompress to standard output. +.TP +.B \-d --decompress +Force decompression. +.I bzip2, +.I bunzip2 +and +.I bzcat +are +really the same program, and the decision about what actions to take is +done on the basis of which name is used. This flag overrides that +mechanism, and forces +.I bzip2 +to decompress. +.TP +.B \-z --compress +The complement to \-d: forces compression, regardless of the +invocation name. +.TP +.B \-t --test +Check integrity of the specified file(s), but don't decompress them. +This really performs a trial decompression and throws away the result. +.TP +.B \-f --force +Force overwrite of output files. Normally, +.I bzip2 +will not overwrite +existing output files. Also forces +.I bzip2 +to break hard links +to files, which it otherwise wouldn't do. + +bzip2 normally declines to decompress files which don't have the +correct magic header bytes. If forced (-f), however, it will pass +such files through unmodified. This is how GNU gzip behaves. +.TP +.B \-k --keep +Keep (don't delete) input files during compression +or decompression. +.TP +.B \-s --small +Reduce memory usage, for compression, decompression and testing. Files +are decompressed and tested using a modified algorithm which only +requires 2.5 bytes per block byte. This means any file can be +decompressed in 2300k of memory, albeit at about half the normal speed. + +During compression, \-s selects a block size of 200k, which limits +memory use to around the same figure, at the expense of your compression +ratio. In short, if your machine is low on memory (8 megabytes or +less), use \-s for everything. See MEMORY MANAGEMENT below. +.TP +.B \-q --quiet +Suppress non-essential warning messages. Messages pertaining to +I/O errors and other critical events will not be suppressed. +.TP +.B \-v --verbose +Verbose mode -- show the compression ratio for each file processed. +Further \-v's increase the verbosity level, spewing out lots of +information which is primarily of interest for diagnostic purposes. +.TP +.B \-L --license -V --version +Display the software version, license terms and conditions. +.TP +.B \-1 (or \-\-fast) to \-9 (or \-\-best) +Set the block size to 100 k, 200 k .. 900 k when compressing. Has no +effect when decompressing. See MEMORY MANAGEMENT below. +The \-\-fast and \-\-best aliases are primarily for GNU gzip +compatibility. In particular, \-\-fast doesn't make things +significantly faster. +And \-\-best merely selects the default behaviour. +.TP +.B \-- +Treats all subsequent arguments as file names, even if they start +with a dash. This is so you can handle files with names beginning +with a dash, for example: bzip2 \-- \-myfilename. +.TP +.B \--repetitive-fast --repetitive-best +These flags are redundant in versions 0.9.5 and above. They provided +some coarse control over the behaviour of the sorting algorithm in +earlier versions, which was sometimes useful. 0.9.5 and above have an +improved algorithm which renders these flags irrelevant. + +.SH MEMORY MANAGEMENT +.I bzip2 +compresses large files in blocks. The block size affects +both the compression ratio achieved, and the amount of memory needed for +compression and decompression. The flags \-1 through \-9 +specify the block size to be 100,000 bytes through 900,000 bytes (the +default) respectively. At decompression time, the block size used for +compression is read from the header of the compressed file, and +.I bunzip2 +then allocates itself just enough memory to decompress +the file. Since block sizes are stored in compressed files, it follows +that the flags \-1 to \-9 are irrelevant to and so ignored +during decompression. + +Compression and decompression requirements, +in bytes, can be estimated as: + + Compression: 400k + ( 8 x block size ) + + Decompression: 100k + ( 4 x block size ), or + 100k + ( 2.5 x block size ) + +Larger block sizes give rapidly diminishing marginal returns. Most of +the compression comes from the first two or three hundred k of block +size, a fact worth bearing in mind when using +.I bzip2 +on small machines. +It is also important to appreciate that the decompression memory +requirement is set at compression time by the choice of block size. + +For files compressed with the default 900k block size, +.I bunzip2 +will require about 3700 kbytes to decompress. To support decompression +of any file on a 4 megabyte machine, +.I bunzip2 +has an option to +decompress using approximately half this amount of memory, about 2300 +kbytes. Decompression speed is also halved, so you should use this +option only where necessary. The relevant flag is -s. + +In general, try and use the largest block size memory constraints allow, +since that maximises the compression achieved. Compression and +decompression speed are virtually unaffected by block size. + +Another significant point applies to files which fit in a single block +-- that means most files you'd encounter using a large block size. The +amount of real memory touched is proportional to the size of the file, +since the file is smaller than a block. For example, compressing a file +20,000 bytes long with the flag -9 will cause the compressor to +allocate around 7600k of memory, but only touch 400k + 20000 * 8 = 560 +kbytes of it. Similarly, the decompressor will allocate 3700k but only +touch 100k + 20000 * 4 = 180 kbytes. + +Here is a table which summarises the maximum memory usage for different +block sizes. Also recorded is the total compressed size for 14 files of +the Calgary Text Compression Corpus totalling 3,141,622 bytes. This +column gives some feel for how compression varies with block size. +These figures tend to understate the advantage of larger block sizes for +larger files, since the Corpus is dominated by smaller files. + + Compress Decompress Decompress Corpus + Flag usage usage -s usage Size + + -1 1200k 500k 350k 914704 + -2 2000k 900k 600k 877703 + -3 2800k 1300k 850k 860338 + -4 3600k 1700k 1100k 846899 + -5 4400k 2100k 1350k 845160 + -6 5200k 2500k 1600k 838626 + -7 6100k 2900k 1850k 834096 + -8 6800k 3300k 2100k 828642 + -9 7600k 3700k 2350k 828642 + +.SH RECOVERING DATA FROM DAMAGED FILES +.I bzip2 +compresses files in blocks, usually 900kbytes long. Each +block is handled independently. If a media or transmission error causes +a multi-block .bz2 +file to become damaged, it may be possible to +recover data from the undamaged blocks in the file. + +The compressed representation of each block is delimited by a 48-bit +pattern, which makes it possible to find the block boundaries with +reasonable certainty. Each block also carries its own 32-bit CRC, so +damaged blocks can be distinguished from undamaged ones. + +.I bzip2recover +is a simple program whose purpose is to search for +blocks in .bz2 files, and write each block out into its own .bz2 +file. You can then use +.I bzip2 +\-t +to test the +integrity of the resulting files, and decompress those which are +undamaged. + +.I bzip2recover +takes a single argument, the name of the damaged file, +and writes a number of files "rec00001file.bz2", +"rec00002file.bz2", etc, containing the extracted blocks. +The output filenames are designed so that the use of +wildcards in subsequent processing -- for example, +"bzip2 -dc rec*file.bz2 > recovered_data" -- processes the files in +the correct order. + +.I bzip2recover +should be of most use dealing with large .bz2 +files, as these will contain many blocks. It is clearly +futile to use it on damaged single-block files, since a +damaged block cannot be recovered. If you wish to minimise +any potential data loss through media or transmission errors, +you might consider compressing with a smaller +block size. + +.SH PERFORMANCE NOTES +The sorting phase of compression gathers together similar strings in the +file. Because of this, files containing very long runs of repeated +symbols, like "aabaabaabaab ..." (repeated several hundred times) may +compress more slowly than normal. Versions 0.9.5 and above fare much +better than previous versions in this respect. The ratio between +worst-case and average-case compression time is in the region of 10:1. +For previous versions, this figure was more like 100:1. You can use the +\-vvvv option to monitor progress in great detail, if you want. + +Decompression speed is unaffected by these phenomena. + +.I bzip2 +usually allocates several megabytes of memory to operate +in, and then charges all over it in a fairly random fashion. This means +that performance, both for compressing and decompressing, is largely +determined by the speed at which your machine can service cache misses. +Because of this, small changes to the code to reduce the miss rate have +been observed to give disproportionately large performance improvements. +I imagine +.I bzip2 +will perform best on machines with very large caches. + +.SH CAVEATS +I/O error messages are not as helpful as they could be. +.I bzip2 +tries hard to detect I/O errors and exit cleanly, but the details of +what the problem is sometimes seem rather misleading. + +This manual page pertains to version 1.0.7 of +.I bzip2. +Compressed data created by this version is entirely forwards and +backwards compatible with the previous public releases, versions +0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 and above, but with the following +exception: 0.9.0 and above can correctly decompress multiple +concatenated compressed files. 0.1pl2 cannot do this; it will stop +after decompressing just the first file in the stream. + +.I bzip2recover +versions prior to 1.0.2 used 32-bit integers to represent +bit positions in compressed files, so they could not handle compressed +files more than 512 megabytes long. Versions 1.0.2 and above use +64-bit ints on some platforms which support them (GNU supported +targets, and Windows). To establish whether or not bzip2recover was +built with such a limitation, run it without arguments. In any event +you can build yourself an unlimited version if you can recompile it +with MaybeUInt64 set to be an unsigned 64-bit integer. + + + +.SH AUTHOR +Julian Seward, jseward@acm.org. + +https://sourceware.org/bzip2/ + +The ideas embodied in +.I bzip2 +are due to (at least) the following +people: Michael Burrows and David Wheeler (for the block sorting +transformation), David Wheeler (again, for the Huffman coder), Peter +Fenwick (for the structured coding model in the original +.I bzip, +and many refinements), and Alistair Moffat, Radford Neal and Ian Witten +(for the arithmetic coder in the original +.I bzip). +I am much +indebted for their help, support and advice. See the manual in the +source distribution for pointers to sources of documentation. Christian +von Roques encouraged me to look for faster sorting algorithms, so as to +speed up compression. Bela Lubkin encouraged me to improve the +worst-case compression performance. +Donna Robinson XMLised the documentation. +The bz* scripts are derived from those of GNU gzip. +Many people sent patches, helped +with portability problems, lent machines, gave advice and were generally +helpful. Index: vendor/bzip2/1.0.7/bzip2.c =================================================================== --- vendor/bzip2/1.0.7/bzip2.c (nonexistent) +++ vendor/bzip2/1.0.7/bzip2.c (revision 349497) @@ -0,0 +1,2036 @@ + +/*-----------------------------------------------------------*/ +/*--- A block-sorting, lossless compressor bzip2.c ---*/ +/*-----------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + + +/* Place a 1 beside your platform, and 0 elsewhere. + Generic 32-bit Unix. + Also works on 64-bit Unix boxes. + This is the default. +*/ +#define BZ_UNIX 1 + +/*-- + Win32, as seen by Jacob Navia's excellent + port of (Chris Fraser & David Hanson)'s excellent + lcc compiler. Or with MS Visual C. + This is selected automatically if compiled by a compiler which + defines _WIN32, not including the Cygwin GCC. +--*/ +#define BZ_LCCWIN32 0 + +#if defined(_WIN32) && !defined(__CYGWIN__) +#undef BZ_LCCWIN32 +#define BZ_LCCWIN32 1 +#undef BZ_UNIX +#define BZ_UNIX 0 +#endif + + +/*---------------------------------------------*/ +/*-- + Some stuff for all platforms. +--*/ + +#include +#include +#include +#include +#include +#include +#include +#include "bzlib.h" + +#define ERROR_IF_EOF(i) { if ((i) == EOF) ioError(); } +#define ERROR_IF_NOT_ZERO(i) { if ((i) != 0) ioError(); } +#define ERROR_IF_MINUS_ONE(i) { if ((i) == (-1)) ioError(); } + + +/*---------------------------------------------*/ +/*-- + Platform-specific stuff. +--*/ + +#if BZ_UNIX +# include +# include +# include +# include +# include +# include + +# define PATH_SEP '/' +# define MY_LSTAT lstat +# define MY_STAT stat +# define MY_S_ISREG S_ISREG +# define MY_S_ISDIR S_ISDIR + +# define APPEND_FILESPEC(root, name) \ + root=snocString((root), (name)) + +# define APPEND_FLAG(root, name) \ + root=snocString((root), (name)) + +# define SET_BINARY_MODE(fd) /**/ + +# ifdef __GNUC__ +# define NORETURN __attribute__ ((noreturn)) +# else +# define NORETURN /**/ +# endif + +# ifdef __DJGPP__ +# include +# include +# undef MY_LSTAT +# undef MY_STAT +# define MY_LSTAT stat +# define MY_STAT stat +# undef SET_BINARY_MODE +# define SET_BINARY_MODE(fd) \ + do { \ + int retVal = setmode ( fileno ( fd ), \ + O_BINARY ); \ + ERROR_IF_MINUS_ONE ( retVal ); \ + } while ( 0 ) +# endif + +# ifdef __CYGWIN__ +# include +# include +# undef SET_BINARY_MODE +# define SET_BINARY_MODE(fd) \ + do { \ + int retVal = setmode ( fileno ( fd ), \ + O_BINARY ); \ + ERROR_IF_MINUS_ONE ( retVal ); \ + } while ( 0 ) +# endif +#endif /* BZ_UNIX */ + + + +#if BZ_LCCWIN32 +# include +# include +# include + +# define NORETURN /**/ +# define PATH_SEP '\\' +# define MY_LSTAT _stat +# define MY_STAT _stat +# define MY_S_ISREG(x) ((x) & _S_IFREG) +# define MY_S_ISDIR(x) ((x) & _S_IFDIR) + +# define APPEND_FLAG(root, name) \ + root=snocString((root), (name)) + +# define APPEND_FILESPEC(root, name) \ + root = snocString ((root), (name)) + +# define SET_BINARY_MODE(fd) \ + do { \ + int retVal = setmode ( fileno ( fd ), \ + O_BINARY ); \ + ERROR_IF_MINUS_ONE ( retVal ); \ + } while ( 0 ) + +#endif /* BZ_LCCWIN32 */ + + +/*---------------------------------------------*/ +/*-- + Some more stuff for all platforms :-) +--*/ + +typedef char Char; +typedef unsigned char Bool; +typedef unsigned char UChar; +typedef int Int32; +typedef unsigned int UInt32; +typedef short Int16; +typedef unsigned short UInt16; + +#define True ((Bool)1) +#define False ((Bool)0) + +/*-- + IntNative is your platform's `native' int size. + Only here to avoid probs with 64-bit platforms. +--*/ +typedef int IntNative; + + +/*---------------------------------------------------*/ +/*--- Misc (file handling) data decls ---*/ +/*---------------------------------------------------*/ + +Int32 verbosity; +Bool keepInputFiles, smallMode, deleteOutputOnInterrupt; +Bool forceOverwrite, testFailsExist, unzFailsExist, noisy; +Int32 numFileNames, numFilesProcessed, blockSize100k; +Int32 exitValue; + +/*-- source modes; F==file, I==stdin, O==stdout --*/ +#define SM_I2O 1 +#define SM_F2O 2 +#define SM_F2F 3 + +/*-- operation modes --*/ +#define OM_Z 1 +#define OM_UNZ 2 +#define OM_TEST 3 + +Int32 opMode; +Int32 srcMode; + +#define FILE_NAME_LEN 1034 + +Int32 longestFileName; +Char inName [FILE_NAME_LEN]; +Char outName[FILE_NAME_LEN]; +Char tmpName[FILE_NAME_LEN]; +Char *progName; +Char progNameReally[FILE_NAME_LEN]; +FILE *outputHandleJustInCase; +Int32 workFactor; + +static void panic ( const Char* ) NORETURN; +static void ioError ( void ) NORETURN; +static void outOfMemory ( void ) NORETURN; +static void configError ( void ) NORETURN; +static void crcError ( void ) NORETURN; +static void cleanUpAndFail ( Int32 ) NORETURN; +static void compressedStreamEOF ( void ) NORETURN; + +static void copyFileName ( Char*, Char* ); +static void* myMalloc ( Int32 ); +static void applySavedFileAttrToOutputFile ( IntNative fd ); + + + +/*---------------------------------------------------*/ +/*--- An implementation of 64-bit ints. Sigh. ---*/ +/*--- Roll on widespread deployment of ANSI C9X ! ---*/ +/*---------------------------------------------------*/ + +typedef + struct { UChar b[8]; } + UInt64; + + +static +void uInt64_from_UInt32s ( UInt64* n, UInt32 lo32, UInt32 hi32 ) +{ + n->b[7] = (UChar)((hi32 >> 24) & 0xFF); + n->b[6] = (UChar)((hi32 >> 16) & 0xFF); + n->b[5] = (UChar)((hi32 >> 8) & 0xFF); + n->b[4] = (UChar) (hi32 & 0xFF); + n->b[3] = (UChar)((lo32 >> 24) & 0xFF); + n->b[2] = (UChar)((lo32 >> 16) & 0xFF); + n->b[1] = (UChar)((lo32 >> 8) & 0xFF); + n->b[0] = (UChar) (lo32 & 0xFF); +} + + +static +double uInt64_to_double ( UInt64* n ) +{ + Int32 i; + double base = 1.0; + double sum = 0.0; + for (i = 0; i < 8; i++) { + sum += base * (double)(n->b[i]); + base *= 256.0; + } + return sum; +} + + +static +Bool uInt64_isZero ( UInt64* n ) +{ + Int32 i; + for (i = 0; i < 8; i++) + if (n->b[i] != 0) return 0; + return 1; +} + + +/* Divide *n by 10, and return the remainder. */ +static +Int32 uInt64_qrm10 ( UInt64* n ) +{ + UInt32 rem, tmp; + Int32 i; + rem = 0; + for (i = 7; i >= 0; i--) { + tmp = rem * 256 + n->b[i]; + n->b[i] = tmp / 10; + rem = tmp % 10; + } + return rem; +} + + +/* ... and the Whole Entire Point of all this UInt64 stuff is + so that we can supply the following function. +*/ +static +void uInt64_toAscii ( char* outbuf, UInt64* n ) +{ + Int32 i, q; + UChar buf[32]; + Int32 nBuf = 0; + UInt64 n_copy = *n; + do { + q = uInt64_qrm10 ( &n_copy ); + buf[nBuf] = q + '0'; + nBuf++; + } while (!uInt64_isZero(&n_copy)); + outbuf[nBuf] = 0; + for (i = 0; i < nBuf; i++) + outbuf[i] = buf[nBuf-i-1]; +} + + +/*---------------------------------------------------*/ +/*--- Processing of complete files and streams ---*/ +/*---------------------------------------------------*/ + +/*---------------------------------------------*/ +static +Bool myfeof ( FILE* f ) +{ + Int32 c = fgetc ( f ); + if (c == EOF) return True; + ungetc ( c, f ); + return False; +} + + +/*---------------------------------------------*/ +static +void compressStream ( FILE *stream, FILE *zStream ) +{ + BZFILE* bzf = NULL; + UChar ibuf[5000]; + Int32 nIbuf; + UInt32 nbytes_in_lo32, nbytes_in_hi32; + UInt32 nbytes_out_lo32, nbytes_out_hi32; + Int32 bzerr, bzerr_dummy, ret; + + SET_BINARY_MODE(stream); + SET_BINARY_MODE(zStream); + + if (ferror(stream)) goto errhandler_io; + if (ferror(zStream)) goto errhandler_io; + + bzf = BZ2_bzWriteOpen ( &bzerr, zStream, + blockSize100k, verbosity, workFactor ); + if (bzerr != BZ_OK) goto errhandler; + + if (verbosity >= 2) fprintf ( stderr, "\n" ); + + while (True) { + + if (myfeof(stream)) break; + nIbuf = fread ( ibuf, sizeof(UChar), 5000, stream ); + if (ferror(stream)) goto errhandler_io; + if (nIbuf > 0) BZ2_bzWrite ( &bzerr, bzf, (void*)ibuf, nIbuf ); + if (bzerr != BZ_OK) goto errhandler; + + } + + BZ2_bzWriteClose64 ( &bzerr, bzf, 0, + &nbytes_in_lo32, &nbytes_in_hi32, + &nbytes_out_lo32, &nbytes_out_hi32 ); + if (bzerr != BZ_OK) goto errhandler; + + if (ferror(zStream)) goto errhandler_io; + ret = fflush ( zStream ); + if (ret == EOF) goto errhandler_io; + if (zStream != stdout) { + Int32 fd = fileno ( zStream ); + if (fd < 0) goto errhandler_io; + applySavedFileAttrToOutputFile ( fd ); + ret = fclose ( zStream ); + outputHandleJustInCase = NULL; + if (ret == EOF) goto errhandler_io; + } + outputHandleJustInCase = NULL; + if (ferror(stream)) goto errhandler_io; + ret = fclose ( stream ); + if (ret == EOF) goto errhandler_io; + + if (verbosity >= 1) { + if (nbytes_in_lo32 == 0 && nbytes_in_hi32 == 0) { + fprintf ( stderr, " no data compressed.\n"); + } else { + Char buf_nin[32], buf_nout[32]; + UInt64 nbytes_in, nbytes_out; + double nbytes_in_d, nbytes_out_d; + uInt64_from_UInt32s ( &nbytes_in, + nbytes_in_lo32, nbytes_in_hi32 ); + uInt64_from_UInt32s ( &nbytes_out, + nbytes_out_lo32, nbytes_out_hi32 ); + nbytes_in_d = uInt64_to_double ( &nbytes_in ); + nbytes_out_d = uInt64_to_double ( &nbytes_out ); + uInt64_toAscii ( buf_nin, &nbytes_in ); + uInt64_toAscii ( buf_nout, &nbytes_out ); + fprintf ( stderr, "%6.3f:1, %6.3f bits/byte, " + "%5.2f%% saved, %s in, %s out.\n", + nbytes_in_d / nbytes_out_d, + (8.0 * nbytes_out_d) / nbytes_in_d, + 100.0 * (1.0 - nbytes_out_d / nbytes_in_d), + buf_nin, + buf_nout + ); + } + } + + return; + + errhandler: + BZ2_bzWriteClose64 ( &bzerr_dummy, bzf, 1, + &nbytes_in_lo32, &nbytes_in_hi32, + &nbytes_out_lo32, &nbytes_out_hi32 ); + switch (bzerr) { + case BZ_CONFIG_ERROR: + configError(); break; + case BZ_MEM_ERROR: + outOfMemory (); break; + case BZ_IO_ERROR: + errhandler_io: + ioError(); break; + default: + panic ( "compress:unexpected error" ); + } + + panic ( "compress:end" ); + /*notreached*/ +} + + + +/*---------------------------------------------*/ +static +Bool uncompressStream ( FILE *zStream, FILE *stream ) +{ + BZFILE* bzf = NULL; + Int32 bzerr, bzerr_dummy, ret, nread, streamNo, i; + UChar obuf[5000]; + UChar unused[BZ_MAX_UNUSED]; + Int32 nUnused; + void* unusedTmpV; + UChar* unusedTmp; + + nUnused = 0; + streamNo = 0; + + SET_BINARY_MODE(stream); + SET_BINARY_MODE(zStream); + + if (ferror(stream)) goto errhandler_io; + if (ferror(zStream)) goto errhandler_io; + + while (True) { + + bzf = BZ2_bzReadOpen ( + &bzerr, zStream, verbosity, + (int)smallMode, unused, nUnused + ); + if (bzf == NULL || bzerr != BZ_OK) goto errhandler; + streamNo++; + + while (bzerr == BZ_OK) { + nread = BZ2_bzRead ( &bzerr, bzf, obuf, 5000 ); + if (bzerr == BZ_DATA_ERROR_MAGIC) goto trycat; + if ((bzerr == BZ_OK || bzerr == BZ_STREAM_END) && nread > 0) + fwrite ( obuf, sizeof(UChar), nread, stream ); + if (ferror(stream)) goto errhandler_io; + } + if (bzerr != BZ_STREAM_END) goto errhandler; + + BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused ); + if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" ); + + unusedTmp = (UChar*)unusedTmpV; + for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i]; + + BZ2_bzReadClose ( &bzerr, bzf ); + if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" ); + + if (nUnused == 0 && myfeof(zStream)) break; + } + + closeok: + if (ferror(zStream)) goto errhandler_io; + if (stream != stdout) { + Int32 fd = fileno ( stream ); + if (fd < 0) goto errhandler_io; + applySavedFileAttrToOutputFile ( fd ); + } + ret = fclose ( zStream ); + if (ret == EOF) goto errhandler_io; + + if (ferror(stream)) goto errhandler_io; + ret = fflush ( stream ); + if (ret != 0) goto errhandler_io; + if (stream != stdout) { + ret = fclose ( stream ); + outputHandleJustInCase = NULL; + if (ret == EOF) goto errhandler_io; + } + outputHandleJustInCase = NULL; + if (verbosity >= 2) fprintf ( stderr, "\n " ); + return True; + + trycat: + if (forceOverwrite) { + rewind(zStream); + while (True) { + if (myfeof(zStream)) break; + nread = fread ( obuf, sizeof(UChar), 5000, zStream ); + if (ferror(zStream)) goto errhandler_io; + if (nread > 0) fwrite ( obuf, sizeof(UChar), nread, stream ); + if (ferror(stream)) goto errhandler_io; + } + goto closeok; + } + + errhandler: + BZ2_bzReadClose ( &bzerr_dummy, bzf ); + switch (bzerr) { + case BZ_CONFIG_ERROR: + configError(); break; + case BZ_IO_ERROR: + errhandler_io: + ioError(); break; + case BZ_DATA_ERROR: + crcError(); + case BZ_MEM_ERROR: + outOfMemory(); + case BZ_UNEXPECTED_EOF: + compressedStreamEOF(); + case BZ_DATA_ERROR_MAGIC: + if (zStream != stdin) fclose(zStream); + if (stream != stdout) fclose(stream); + if (streamNo == 1) { + return False; + } else { + if (noisy) + fprintf ( stderr, + "\n%s: %s: trailing garbage after EOF ignored\n", + progName, inName ); + return True; + } + default: + panic ( "decompress:unexpected error" ); + } + + panic ( "decompress:end" ); + return True; /*notreached*/ +} + + +/*---------------------------------------------*/ +static +Bool testStream ( FILE *zStream ) +{ + BZFILE* bzf = NULL; + Int32 bzerr, bzerr_dummy, ret, streamNo, i; + UChar obuf[5000]; + UChar unused[BZ_MAX_UNUSED]; + Int32 nUnused; + void* unusedTmpV; + UChar* unusedTmp; + + nUnused = 0; + streamNo = 0; + + SET_BINARY_MODE(zStream); + if (ferror(zStream)) goto errhandler_io; + + while (True) { + + bzf = BZ2_bzReadOpen ( + &bzerr, zStream, verbosity, + (int)smallMode, unused, nUnused + ); + if (bzf == NULL || bzerr != BZ_OK) goto errhandler; + streamNo++; + + while (bzerr == BZ_OK) { + BZ2_bzRead ( &bzerr, bzf, obuf, 5000 ); + if (bzerr == BZ_DATA_ERROR_MAGIC) goto errhandler; + } + if (bzerr != BZ_STREAM_END) goto errhandler; + + BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused ); + if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" ); + + unusedTmp = (UChar*)unusedTmpV; + for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i]; + + BZ2_bzReadClose ( &bzerr, bzf ); + if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" ); + if (nUnused == 0 && myfeof(zStream)) break; + + } + + if (ferror(zStream)) goto errhandler_io; + ret = fclose ( zStream ); + if (ret == EOF) goto errhandler_io; + + if (verbosity >= 2) fprintf ( stderr, "\n " ); + return True; + + errhandler: + BZ2_bzReadClose ( &bzerr_dummy, bzf ); + if (verbosity == 0) + fprintf ( stderr, "%s: %s: ", progName, inName ); + switch (bzerr) { + case BZ_CONFIG_ERROR: + configError(); break; + case BZ_IO_ERROR: + errhandler_io: + ioError(); break; + case BZ_DATA_ERROR: + fprintf ( stderr, + "data integrity (CRC) error in data\n" ); + return False; + case BZ_MEM_ERROR: + outOfMemory(); + case BZ_UNEXPECTED_EOF: + fprintf ( stderr, + "file ends unexpectedly\n" ); + return False; + case BZ_DATA_ERROR_MAGIC: + if (zStream != stdin) fclose(zStream); + if (streamNo == 1) { + fprintf ( stderr, + "bad magic number (file not created by bzip2)\n" ); + return False; + } else { + if (noisy) + fprintf ( stderr, + "trailing garbage after EOF ignored\n" ); + return True; + } + default: + panic ( "test:unexpected error" ); + } + + panic ( "test:end" ); + return True; /*notreached*/ +} + + +/*---------------------------------------------------*/ +/*--- Error [non-] handling grunge ---*/ +/*---------------------------------------------------*/ + +/*---------------------------------------------*/ +static +void setExit ( Int32 v ) +{ + if (v > exitValue) exitValue = v; +} + + +/*---------------------------------------------*/ +static +void cadvise ( void ) +{ + if (noisy) + fprintf ( + stderr, + "\nIt is possible that the compressed file(s) have become corrupted.\n" + "You can use the -tvv option to test integrity of such files.\n\n" + "You can use the `bzip2recover' program to attempt to recover\n" + "data from undamaged sections of corrupted files.\n\n" + ); +} + + +/*---------------------------------------------*/ +static +void showFileNames ( void ) +{ + if (noisy) + fprintf ( + stderr, + "\tInput file = %s, output file = %s\n", + inName, outName + ); +} + + +/*---------------------------------------------*/ +static +void cleanUpAndFail ( Int32 ec ) +{ + IntNative retVal; + struct MY_STAT statBuf; + + if ( srcMode == SM_F2F + && opMode != OM_TEST + && deleteOutputOnInterrupt ) { + + /* Check whether input file still exists. Delete output file + only if input exists to avoid loss of data. Joerg Prante, 5 + January 2002. (JRS 06-Jan-2002: other changes in 1.0.2 mean + this is less likely to happen. But to be ultra-paranoid, we + do the check anyway.) */ + retVal = MY_STAT ( inName, &statBuf ); + if (retVal == 0) { + if (noisy) + fprintf ( stderr, + "%s: Deleting output file %s, if it exists.\n", + progName, outName ); + if (outputHandleJustInCase != NULL) + fclose ( outputHandleJustInCase ); + retVal = remove ( outName ); + if (retVal != 0) + fprintf ( stderr, + "%s: WARNING: deletion of output file " + "(apparently) failed.\n", + progName ); + } else { + fprintf ( stderr, + "%s: WARNING: deletion of output file suppressed\n", + progName ); + fprintf ( stderr, + "%s: since input file no longer exists. Output file\n", + progName ); + fprintf ( stderr, + "%s: `%s' may be incomplete.\n", + progName, outName ); + fprintf ( stderr, + "%s: I suggest doing an integrity test (bzip2 -tv)" + " of it.\n", + progName ); + } + } + + if (noisy && numFileNames > 0 && numFilesProcessed < numFileNames) { + fprintf ( stderr, + "%s: WARNING: some files have not been processed:\n" + "%s: %d specified on command line, %d not processed yet.\n\n", + progName, progName, + numFileNames, numFileNames - numFilesProcessed ); + } + setExit(ec); + exit(exitValue); +} + + +/*---------------------------------------------*/ +static +void panic ( const Char* s ) +{ + fprintf ( stderr, + "\n%s: PANIC -- internal consistency error:\n" + "\t%s\n" + "\tThis is a BUG. Please report it to me at:\n" + "\tjseward@acm.org\n", + progName, s ); + showFileNames(); + cleanUpAndFail( 3 ); +} + + +/*---------------------------------------------*/ +static +void crcError ( void ) +{ + fprintf ( stderr, + "\n%s: Data integrity error when decompressing.\n", + progName ); + showFileNames(); + cadvise(); + cleanUpAndFail( 2 ); +} + + +/*---------------------------------------------*/ +static +void compressedStreamEOF ( void ) +{ + if (noisy) { + fprintf ( stderr, + "\n%s: Compressed file ends unexpectedly;\n\t" + "perhaps it is corrupted? *Possible* reason follows.\n", + progName ); + perror ( progName ); + showFileNames(); + cadvise(); + } + cleanUpAndFail( 2 ); +} + + +/*---------------------------------------------*/ +static +void ioError ( void ) +{ + fprintf ( stderr, + "\n%s: I/O or other error, bailing out. " + "Possible reason follows.\n", + progName ); + perror ( progName ); + showFileNames(); + cleanUpAndFail( 1 ); +} + + +/*---------------------------------------------*/ +static +void mySignalCatcher ( IntNative n ) +{ + fprintf ( stderr, + "\n%s: Control-C or similar caught, quitting.\n", + progName ); + cleanUpAndFail(1); +} + + +/*---------------------------------------------*/ +static +void mySIGSEGVorSIGBUScatcher ( IntNative n ) +{ + if (opMode == OM_Z) + fprintf ( + stderr, + "\n%s: Caught a SIGSEGV or SIGBUS whilst compressing.\n" + "\n" + " Possible causes are (most likely first):\n" + " (1) This computer has unreliable memory or cache hardware\n" + " (a surprisingly common problem; try a different machine.)\n" + " (2) A bug in the compiler used to create this executable\n" + " (unlikely, if you didn't compile bzip2 yourself.)\n" + " (3) A real bug in bzip2 -- I hope this should never be the case.\n" + " The user's manual, Section 4.3, has more info on (1) and (2).\n" + " \n" + " If you suspect this is a bug in bzip2, or are unsure about (1)\n" + " or (2), feel free to report it to me at: jseward@acm.org.\n" + " Section 4.3 of the user's manual describes the info a useful\n" + " bug report should have. If the manual is available on your\n" + " system, please try and read it before mailing me. If you don't\n" + " have the manual or can't be bothered to read it, mail me anyway.\n" + "\n", + progName ); + else + fprintf ( + stderr, + "\n%s: Caught a SIGSEGV or SIGBUS whilst decompressing.\n" + "\n" + " Possible causes are (most likely first):\n" + " (1) The compressed data is corrupted, and bzip2's usual checks\n" + " failed to detect this. Try bzip2 -tvv my_file.bz2.\n" + " (2) This computer has unreliable memory or cache hardware\n" + " (a surprisingly common problem; try a different machine.)\n" + " (3) A bug in the compiler used to create this executable\n" + " (unlikely, if you didn't compile bzip2 yourself.)\n" + " (4) A real bug in bzip2 -- I hope this should never be the case.\n" + " The user's manual, Section 4.3, has more info on (2) and (3).\n" + " \n" + " If you suspect this is a bug in bzip2, or are unsure about (2)\n" + " or (3), feel free to report it to me at: jseward@acm.org.\n" + " Section 4.3 of the user's manual describes the info a useful\n" + " bug report should have. If the manual is available on your\n" + " system, please try and read it before mailing me. If you don't\n" + " have the manual or can't be bothered to read it, mail me anyway.\n" + "\n", + progName ); + + showFileNames(); + if (opMode == OM_Z) + cleanUpAndFail( 3 ); else + { cadvise(); cleanUpAndFail( 2 ); } +} + + +/*---------------------------------------------*/ +static +void outOfMemory ( void ) +{ + fprintf ( stderr, + "\n%s: couldn't allocate enough memory\n", + progName ); + showFileNames(); + cleanUpAndFail(1); +} + + +/*---------------------------------------------*/ +static +void configError ( void ) +{ + fprintf ( stderr, + "bzip2: I'm not configured correctly for this platform!\n" + "\tI require Int32, Int16 and Char to have sizes\n" + "\tof 4, 2 and 1 bytes to run properly, and they don't.\n" + "\tProbably you can fix this by defining them correctly,\n" + "\tand recompiling. Bye!\n" ); + setExit(3); + exit(exitValue); +} + + +/*---------------------------------------------------*/ +/*--- The main driver machinery ---*/ +/*---------------------------------------------------*/ + +/* All rather crufty. The main problem is that input files + are stat()d multiple times before use. This should be + cleaned up. +*/ + +/*---------------------------------------------*/ +static +void pad ( Char *s ) +{ + Int32 i; + if ( (Int32)strlen(s) >= longestFileName ) return; + for (i = 1; i <= longestFileName - (Int32)strlen(s); i++) + fprintf ( stderr, " " ); +} + + +/*---------------------------------------------*/ +static +void copyFileName ( Char* to, Char* from ) +{ + if ( strlen(from) > FILE_NAME_LEN-10 ) { + fprintf ( + stderr, + "bzip2: file name\n`%s'\n" + "is suspiciously (more than %d chars) long.\n" + "Try using a reasonable file name instead. Sorry! :-)\n", + from, FILE_NAME_LEN-10 + ); + setExit(1); + exit(exitValue); + } + + strncpy(to,from,FILE_NAME_LEN-10); + to[FILE_NAME_LEN-10]='\0'; +} + + +/*---------------------------------------------*/ +static +Bool fileExists ( Char* name ) +{ + FILE *tmp = fopen ( name, "rb" ); + Bool exists = (tmp != NULL); + if (tmp != NULL) fclose ( tmp ); + return exists; +} + + +/*---------------------------------------------*/ +/* Open an output file safely with O_EXCL and good permissions. + This avoids a race condition in versions < 1.0.2, in which + the file was first opened and then had its interim permissions + set safely. We instead use open() to create the file with + the interim permissions required. (--- --- rw-). + + For non-Unix platforms, if we are not worrying about + security issues, simple this simply behaves like fopen. +*/ +static +FILE* fopen_output_safely ( Char* name, const char* mode ) +{ +# if BZ_UNIX + FILE* fp; + IntNative fh; + fh = open(name, O_WRONLY|O_CREAT|O_EXCL, S_IWUSR|S_IRUSR); + if (fh == -1) return NULL; + fp = fdopen(fh, mode); + if (fp == NULL) close(fh); + return fp; +# else + return fopen(name, mode); +# endif +} + + +/*---------------------------------------------*/ +/*-- + if in doubt, return True +--*/ +static +Bool notAStandardFile ( Char* name ) +{ + IntNative i; + struct MY_STAT statBuf; + + i = MY_LSTAT ( name, &statBuf ); + if (i != 0) return True; + if (MY_S_ISREG(statBuf.st_mode)) return False; + return True; +} + + +/*---------------------------------------------*/ +/*-- + rac 11/21/98 see if file has hard links to it +--*/ +static +Int32 countHardLinks ( Char* name ) +{ + IntNative i; + struct MY_STAT statBuf; + + i = MY_LSTAT ( name, &statBuf ); + if (i != 0) return 0; + return (statBuf.st_nlink - 1); +} + + +/*---------------------------------------------*/ +/* Copy modification date, access date, permissions and owner from the + source to destination file. We have to copy this meta-info off + into fileMetaInfo before starting to compress / decompress it, + because doing it afterwards means we get the wrong access time. + + To complicate matters, in compress() and decompress() below, the + sequence of tests preceding the call to saveInputFileMetaInfo() + involves calling fileExists(), which in turn establishes its result + by attempting to fopen() the file, and if successful, immediately + fclose()ing it again. So we have to assume that the fopen() call + does not cause the access time field to be updated. + + Reading of the man page for stat() (man 2 stat) on RedHat 7.2 seems + to imply that merely doing open() will not affect the access time. + Therefore we merely need to hope that the C library only does + open() as a result of fopen(), and not any kind of read()-ahead + cleverness. + + It sounds pretty fragile to me. Whether this carries across + robustly to arbitrary Unix-like platforms (or even works robustly + on this one, RedHat 7.2) is unknown to me. Nevertheless ... +*/ +#if BZ_UNIX +static +struct MY_STAT fileMetaInfo; +#endif + +static +void saveInputFileMetaInfo ( Char *srcName ) +{ +# if BZ_UNIX + IntNative retVal; + /* Note use of stat here, not lstat. */ + retVal = MY_STAT( srcName, &fileMetaInfo ); + ERROR_IF_NOT_ZERO ( retVal ); +# endif +} + + +static +void applySavedTimeInfoToOutputFile ( Char *dstName ) +{ +# if BZ_UNIX + IntNative retVal; + struct utimbuf uTimBuf; + + uTimBuf.actime = fileMetaInfo.st_atime; + uTimBuf.modtime = fileMetaInfo.st_mtime; + + retVal = utime ( dstName, &uTimBuf ); + ERROR_IF_NOT_ZERO ( retVal ); +# endif +} + +static +void applySavedFileAttrToOutputFile ( IntNative fd ) +{ +# if BZ_UNIX + IntNative retVal; + + retVal = fchmod ( fd, fileMetaInfo.st_mode ); + ERROR_IF_NOT_ZERO ( retVal ); + + (void) fchown ( fd, fileMetaInfo.st_uid, fileMetaInfo.st_gid ); + /* chown() will in many cases return with EPERM, which can + be safely ignored. + */ +# endif +} + + +/*---------------------------------------------*/ +static +Bool containsDubiousChars ( Char* name ) +{ +# if BZ_UNIX + /* On unix, files can contain any characters and the file expansion + * is performed by the shell. + */ + return False; +# else /* ! BZ_UNIX */ + /* On non-unix (Win* platforms), wildcard characters are not allowed in + * filenames. + */ + for (; *name != '\0'; name++) + if (*name == '?' || *name == '*') return True; + return False; +# endif /* BZ_UNIX */ +} + + +/*---------------------------------------------*/ +#define BZ_N_SUFFIX_PAIRS 4 + +const Char* zSuffix[BZ_N_SUFFIX_PAIRS] + = { ".bz2", ".bz", ".tbz2", ".tbz" }; +const Char* unzSuffix[BZ_N_SUFFIX_PAIRS] + = { "", "", ".tar", ".tar" }; + +static +Bool hasSuffix ( Char* s, const Char* suffix ) +{ + Int32 ns = strlen(s); + Int32 nx = strlen(suffix); + if (ns < nx) return False; + if (strcmp(s + ns - nx, suffix) == 0) return True; + return False; +} + +static +Bool mapSuffix ( Char* name, + const Char* oldSuffix, + const Char* newSuffix ) +{ + if (!hasSuffix(name,oldSuffix)) return False; + name[strlen(name)-strlen(oldSuffix)] = 0; + strcat ( name, newSuffix ); + return True; +} + + +/*---------------------------------------------*/ +static +void compress ( Char *name ) +{ + FILE *inStr; + FILE *outStr; + Int32 n, i; + struct MY_STAT statBuf; + + deleteOutputOnInterrupt = False; + + if (name == NULL && srcMode != SM_I2O) + panic ( "compress: bad modes\n" ); + + switch (srcMode) { + case SM_I2O: + copyFileName ( inName, (Char*)"(stdin)" ); + copyFileName ( outName, (Char*)"(stdout)" ); + break; + case SM_F2F: + copyFileName ( inName, name ); + copyFileName ( outName, name ); + strcat ( outName, ".bz2" ); + break; + case SM_F2O: + copyFileName ( inName, name ); + copyFileName ( outName, (Char*)"(stdout)" ); + break; + } + + if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) { + if (noisy) + fprintf ( stderr, "%s: There are no files matching `%s'.\n", + progName, inName ); + setExit(1); + return; + } + if ( srcMode != SM_I2O && !fileExists ( inName ) ) { + fprintf ( stderr, "%s: Can't open input file %s: %s.\n", + progName, inName, strerror(errno) ); + setExit(1); + return; + } + for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++) { + if (hasSuffix(inName, zSuffix[i])) { + if (noisy) + fprintf ( stderr, + "%s: Input file %s already has %s suffix.\n", + progName, inName, zSuffix[i] ); + setExit(1); + return; + } + } + if ( srcMode == SM_F2F || srcMode == SM_F2O ) { + MY_STAT(inName, &statBuf); + if ( MY_S_ISDIR(statBuf.st_mode) ) { + fprintf( stderr, + "%s: Input file %s is a directory.\n", + progName,inName); + setExit(1); + return; + } + } + if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) { + if (noisy) + fprintf ( stderr, "%s: Input file %s is not a normal file.\n", + progName, inName ); + setExit(1); + return; + } + if ( srcMode == SM_F2F && fileExists ( outName ) ) { + if (forceOverwrite) { + remove(outName); + } else { + fprintf ( stderr, "%s: Output file %s already exists.\n", + progName, outName ); + setExit(1); + return; + } + } + if ( srcMode == SM_F2F && !forceOverwrite && + (n=countHardLinks ( inName )) > 0) { + fprintf ( stderr, "%s: Input file %s has %d other link%s.\n", + progName, inName, n, n > 1 ? "s" : "" ); + setExit(1); + return; + } + + if ( srcMode == SM_F2F ) { + /* Save the file's meta-info before we open it. Doing it later + means we mess up the access times. */ + saveInputFileMetaInfo ( inName ); + } + + switch ( srcMode ) { + + case SM_I2O: + inStr = stdin; + outStr = stdout; + if ( isatty ( fileno ( stdout ) ) ) { + fprintf ( stderr, + "%s: I won't write compressed data to a terminal.\n", + progName ); + fprintf ( stderr, "%s: For help, type: `%s --help'.\n", + progName, progName ); + setExit(1); + return; + }; + break; + + case SM_F2O: + inStr = fopen ( inName, "rb" ); + outStr = stdout; + if ( isatty ( fileno ( stdout ) ) ) { + fprintf ( stderr, + "%s: I won't write compressed data to a terminal.\n", + progName ); + fprintf ( stderr, "%s: For help, type: `%s --help'.\n", + progName, progName ); + if ( inStr != NULL ) fclose ( inStr ); + setExit(1); + return; + }; + if ( inStr == NULL ) { + fprintf ( stderr, "%s: Can't open input file %s: %s.\n", + progName, inName, strerror(errno) ); + setExit(1); + return; + }; + break; + + case SM_F2F: + inStr = fopen ( inName, "rb" ); + outStr = fopen_output_safely ( outName, "wb" ); + if ( outStr == NULL) { + fprintf ( stderr, "%s: Can't create output file %s: %s.\n", + progName, outName, strerror(errno) ); + if ( inStr != NULL ) fclose ( inStr ); + setExit(1); + return; + } + if ( inStr == NULL ) { + fprintf ( stderr, "%s: Can't open input file %s: %s.\n", + progName, inName, strerror(errno) ); + if ( outStr != NULL ) fclose ( outStr ); + setExit(1); + return; + }; + break; + + default: + panic ( "compress: bad srcMode" ); + break; + } + + if (verbosity >= 1) { + fprintf ( stderr, " %s: ", inName ); + pad ( inName ); + fflush ( stderr ); + } + + /*--- Now the input and output handles are sane. Do the Biz. ---*/ + outputHandleJustInCase = outStr; + deleteOutputOnInterrupt = True; + compressStream ( inStr, outStr ); + outputHandleJustInCase = NULL; + + /*--- If there was an I/O error, we won't get here. ---*/ + if ( srcMode == SM_F2F ) { + applySavedTimeInfoToOutputFile ( outName ); + deleteOutputOnInterrupt = False; + if ( !keepInputFiles ) { + IntNative retVal = remove ( inName ); + ERROR_IF_NOT_ZERO ( retVal ); + } + } + + deleteOutputOnInterrupt = False; +} + + +/*---------------------------------------------*/ +static +void uncompress ( Char *name ) +{ + FILE *inStr; + FILE *outStr; + Int32 n, i; + Bool magicNumberOK; + Bool cantGuess; + struct MY_STAT statBuf; + + deleteOutputOnInterrupt = False; + + if (name == NULL && srcMode != SM_I2O) + panic ( "uncompress: bad modes\n" ); + + cantGuess = False; + switch (srcMode) { + case SM_I2O: + copyFileName ( inName, (Char*)"(stdin)" ); + copyFileName ( outName, (Char*)"(stdout)" ); + break; + case SM_F2F: + copyFileName ( inName, name ); + copyFileName ( outName, name ); + for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++) + if (mapSuffix(outName,zSuffix[i],unzSuffix[i])) + goto zzz; + cantGuess = True; + strcat ( outName, ".out" ); + break; + case SM_F2O: + copyFileName ( inName, name ); + copyFileName ( outName, (Char*)"(stdout)" ); + break; + } + + zzz: + if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) { + if (noisy) + fprintf ( stderr, "%s: There are no files matching `%s'.\n", + progName, inName ); + setExit(1); + return; + } + if ( srcMode != SM_I2O && !fileExists ( inName ) ) { + fprintf ( stderr, "%s: Can't open input file %s: %s.\n", + progName, inName, strerror(errno) ); + setExit(1); + return; + } + if ( srcMode == SM_F2F || srcMode == SM_F2O ) { + MY_STAT(inName, &statBuf); + if ( MY_S_ISDIR(statBuf.st_mode) ) { + fprintf( stderr, + "%s: Input file %s is a directory.\n", + progName,inName); + setExit(1); + return; + } + } + if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) { + if (noisy) + fprintf ( stderr, "%s: Input file %s is not a normal file.\n", + progName, inName ); + setExit(1); + return; + } + if ( /* srcMode == SM_F2F implied && */ cantGuess ) { + if (noisy) + fprintf ( stderr, + "%s: Can't guess original name for %s -- using %s\n", + progName, inName, outName ); + /* just a warning, no return */ + } + if ( srcMode == SM_F2F && fileExists ( outName ) ) { + if (forceOverwrite) { + remove(outName); + } else { + fprintf ( stderr, "%s: Output file %s already exists.\n", + progName, outName ); + setExit(1); + return; + } + } + if ( srcMode == SM_F2F && !forceOverwrite && + (n=countHardLinks ( inName ) ) > 0) { + fprintf ( stderr, "%s: Input file %s has %d other link%s.\n", + progName, inName, n, n > 1 ? "s" : "" ); + setExit(1); + return; + } + + if ( srcMode == SM_F2F ) { + /* Save the file's meta-info before we open it. Doing it later + means we mess up the access times. */ + saveInputFileMetaInfo ( inName ); + } + + switch ( srcMode ) { + + case SM_I2O: + inStr = stdin; + outStr = stdout; + if ( isatty ( fileno ( stdin ) ) ) { + fprintf ( stderr, + "%s: I won't read compressed data from a terminal.\n", + progName ); + fprintf ( stderr, "%s: For help, type: `%s --help'.\n", + progName, progName ); + setExit(1); + return; + }; + break; + + case SM_F2O: + inStr = fopen ( inName, "rb" ); + outStr = stdout; + if ( inStr == NULL ) { + fprintf ( stderr, "%s: Can't open input file %s:%s.\n", + progName, inName, strerror(errno) ); + if ( inStr != NULL ) fclose ( inStr ); + setExit(1); + return; + }; + break; + + case SM_F2F: + inStr = fopen ( inName, "rb" ); + outStr = fopen_output_safely ( outName, "wb" ); + if ( outStr == NULL) { + fprintf ( stderr, "%s: Can't create output file %s: %s.\n", + progName, outName, strerror(errno) ); + if ( inStr != NULL ) fclose ( inStr ); + setExit(1); + return; + } + if ( inStr == NULL ) { + fprintf ( stderr, "%s: Can't open input file %s: %s.\n", + progName, inName, strerror(errno) ); + if ( outStr != NULL ) fclose ( outStr ); + setExit(1); + return; + }; + break; + + default: + panic ( "uncompress: bad srcMode" ); + break; + } + + if (verbosity >= 1) { + fprintf ( stderr, " %s: ", inName ); + pad ( inName ); + fflush ( stderr ); + } + + /*--- Now the input and output handles are sane. Do the Biz. ---*/ + outputHandleJustInCase = outStr; + deleteOutputOnInterrupt = True; + magicNumberOK = uncompressStream ( inStr, outStr ); + outputHandleJustInCase = NULL; + + /*--- If there was an I/O error, we won't get here. ---*/ + if ( magicNumberOK ) { + if ( srcMode == SM_F2F ) { + applySavedTimeInfoToOutputFile ( outName ); + deleteOutputOnInterrupt = False; + if ( !keepInputFiles ) { + IntNative retVal = remove ( inName ); + ERROR_IF_NOT_ZERO ( retVal ); + } + } + } else { + unzFailsExist = True; + deleteOutputOnInterrupt = False; + if ( srcMode == SM_F2F ) { + IntNative retVal = remove ( outName ); + ERROR_IF_NOT_ZERO ( retVal ); + } + } + deleteOutputOnInterrupt = False; + + if ( magicNumberOK ) { + if (verbosity >= 1) + fprintf ( stderr, "done\n" ); + } else { + setExit(2); + if (verbosity >= 1) + fprintf ( stderr, "not a bzip2 file.\n" ); else + fprintf ( stderr, + "%s: %s is not a bzip2 file.\n", + progName, inName ); + } + +} + + +/*---------------------------------------------*/ +static +void testf ( Char *name ) +{ + FILE *inStr; + Bool allOK; + struct MY_STAT statBuf; + + deleteOutputOnInterrupt = False; + + if (name == NULL && srcMode != SM_I2O) + panic ( "testf: bad modes\n" ); + + copyFileName ( outName, (Char*)"(none)" ); + switch (srcMode) { + case SM_I2O: copyFileName ( inName, (Char*)"(stdin)" ); break; + case SM_F2F: copyFileName ( inName, name ); break; + case SM_F2O: copyFileName ( inName, name ); break; + } + + if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) { + if (noisy) + fprintf ( stderr, "%s: There are no files matching `%s'.\n", + progName, inName ); + setExit(1); + return; + } + if ( srcMode != SM_I2O && !fileExists ( inName ) ) { + fprintf ( stderr, "%s: Can't open input %s: %s.\n", + progName, inName, strerror(errno) ); + setExit(1); + return; + } + if ( srcMode != SM_I2O ) { + MY_STAT(inName, &statBuf); + if ( MY_S_ISDIR(statBuf.st_mode) ) { + fprintf( stderr, + "%s: Input file %s is a directory.\n", + progName,inName); + setExit(1); + return; + } + } + + switch ( srcMode ) { + + case SM_I2O: + if ( isatty ( fileno ( stdin ) ) ) { + fprintf ( stderr, + "%s: I won't read compressed data from a terminal.\n", + progName ); + fprintf ( stderr, "%s: For help, type: `%s --help'.\n", + progName, progName ); + setExit(1); + return; + }; + inStr = stdin; + break; + + case SM_F2O: case SM_F2F: + inStr = fopen ( inName, "rb" ); + if ( inStr == NULL ) { + fprintf ( stderr, "%s: Can't open input file %s:%s.\n", + progName, inName, strerror(errno) ); + setExit(1); + return; + }; + break; + + default: + panic ( "testf: bad srcMode" ); + break; + } + + if (verbosity >= 1) { + fprintf ( stderr, " %s: ", inName ); + pad ( inName ); + fflush ( stderr ); + } + + /*--- Now the input handle is sane. Do the Biz. ---*/ + outputHandleJustInCase = NULL; + allOK = testStream ( inStr ); + + if (allOK && verbosity >= 1) fprintf ( stderr, "ok\n" ); + if (!allOK) testFailsExist = True; +} + + +/*---------------------------------------------*/ +static +void license ( void ) +{ + fprintf ( stderr, + + "bzip2, a block-sorting file compressor. " + "Version %s.\n" + " \n" + " Copyright (C) 1996-2010 by Julian Seward.\n" + " \n" + " This program is free software; you can redistribute it and/or modify\n" + " it under the terms set out in the LICENSE file, which is included\n" + " in the bzip2 source distribution.\n" + " \n" + " This program is distributed in the hope that it will be useful,\n" + " but WITHOUT ANY WARRANTY; without even the implied warranty of\n" + " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" + " LICENSE file for more details.\n" + " \n", + BZ2_bzlibVersion() + ); +} + + +/*---------------------------------------------*/ +static +void usage ( Char *fullProgName ) +{ + fprintf ( + stderr, + "bzip2, a block-sorting file compressor. " + "Version %s.\n" + "\n usage: %s [flags and input files in any order]\n" + "\n" + " -h --help print this message\n" + " -d --decompress force decompression\n" + " -z --compress force compression\n" + " -k --keep keep (don't delete) input files\n" + " -f --force overwrite existing output files\n" + " -t --test test compressed file integrity\n" + " -c --stdout output to standard out\n" + " -q --quiet suppress noncritical error messages\n" + " -v --verbose be verbose (a 2nd -v gives more)\n" + " -L --license display software version & license\n" + " -V --version display software version & license\n" + " -s --small use less memory (at most 2500k)\n" + " -1 .. -9 set block size to 100k .. 900k\n" + " --fast alias for -1\n" + " --best alias for -9\n" + "\n" + " If invoked as `bzip2', default action is to compress.\n" + " as `bunzip2', default action is to decompress.\n" + " as `bzcat', default action is to decompress to stdout.\n" + "\n" + " If no file names are given, bzip2 compresses or decompresses\n" + " from standard input to standard output. You can combine\n" + " short flags, so `-v -4' means the same as -v4 or -4v, &c.\n" +# if BZ_UNIX + "\n" +# endif + , + + BZ2_bzlibVersion(), + fullProgName + ); +} + + +/*---------------------------------------------*/ +static +void redundant ( Char* flag ) +{ + fprintf ( + stderr, + "%s: %s is redundant in versions 0.9.5 and above\n", + progName, flag ); +} + + +/*---------------------------------------------*/ +/*-- + All the garbage from here to main() is purely to + implement a linked list of command-line arguments, + into which main() copies argv[1 .. argc-1]. + + The purpose of this exercise is to facilitate + the expansion of wildcard characters * and ? in + filenames for OSs which don't know how to do it + themselves, like MSDOS, Windows 95 and NT. + + The actual Dirty Work is done by the platform- + specific macro APPEND_FILESPEC. +--*/ + +typedef + struct zzzz { + Char *name; + struct zzzz *link; + } + Cell; + + +/*---------------------------------------------*/ +static +void *myMalloc ( Int32 n ) +{ + void* p; + + p = malloc ( (size_t)n ); + if (p == NULL) outOfMemory (); + return p; +} + + +/*---------------------------------------------*/ +static +Cell *mkCell ( void ) +{ + Cell *c; + + c = (Cell*) myMalloc ( sizeof ( Cell ) ); + c->name = NULL; + c->link = NULL; + return c; +} + + +/*---------------------------------------------*/ +static +Cell *snocString ( Cell *root, Char *name ) +{ + if (root == NULL) { + Cell *tmp = mkCell(); + tmp->name = (Char*) myMalloc ( 5 + strlen(name) ); + strcpy ( tmp->name, name ); + return tmp; + } else { + Cell *tmp = root; + while (tmp->link != NULL) tmp = tmp->link; + tmp->link = snocString ( tmp->link, name ); + return root; + } +} + + +/*---------------------------------------------*/ +static +void addFlagsFromEnvVar ( Cell** argList, Char* varName ) +{ + Int32 i, j, k; + Char *envbase, *p; + + envbase = getenv(varName); + if (envbase != NULL) { + p = envbase; + i = 0; + while (True) { + if (p[i] == 0) break; + p += i; + i = 0; + while (isspace((Int32)(p[0]))) p++; + while (p[i] != 0 && !isspace((Int32)(p[i]))) i++; + if (i > 0) { + k = i; if (k > FILE_NAME_LEN-10) k = FILE_NAME_LEN-10; + for (j = 0; j < k; j++) tmpName[j] = p[j]; + tmpName[k] = 0; + APPEND_FLAG(*argList, tmpName); + } + } + } +} + + +/*---------------------------------------------*/ +#define ISFLAG(s) (strcmp(aa->name, (s))==0) + +IntNative main ( IntNative argc, Char *argv[] ) +{ + Int32 i, j; + Char *tmp; + Cell *argList; + Cell *aa; + Bool decode; + + /*-- Be really really really paranoid :-) --*/ + if (sizeof(Int32) != 4 || sizeof(UInt32) != 4 || + sizeof(Int16) != 2 || sizeof(UInt16) != 2 || + sizeof(Char) != 1 || sizeof(UChar) != 1) + configError(); + + /*-- Initialise --*/ + outputHandleJustInCase = NULL; + smallMode = False; + keepInputFiles = False; + forceOverwrite = False; + noisy = True; + verbosity = 0; + blockSize100k = 9; + testFailsExist = False; + unzFailsExist = False; + numFileNames = 0; + numFilesProcessed = 0; + workFactor = 30; + deleteOutputOnInterrupt = False; + exitValue = 0; + i = j = 0; /* avoid bogus warning from egcs-1.1.X */ + + /*-- Set up signal handlers for mem access errors --*/ + signal (SIGSEGV, mySIGSEGVorSIGBUScatcher); +# if BZ_UNIX +# ifndef __DJGPP__ + signal (SIGBUS, mySIGSEGVorSIGBUScatcher); +# endif +# endif + + copyFileName ( inName, (Char*)"(none)" ); + copyFileName ( outName, (Char*)"(none)" ); + + copyFileName ( progNameReally, argv[0] ); + progName = &progNameReally[0]; + for (tmp = &progNameReally[0]; *tmp != '\0'; tmp++) + if (*tmp == PATH_SEP) progName = tmp + 1; + + + /*-- Copy flags from env var BZIP2, and + expand filename wildcards in arg list. + --*/ + argList = NULL; + addFlagsFromEnvVar ( &argList, (Char*)"BZIP2" ); + addFlagsFromEnvVar ( &argList, (Char*)"BZIP" ); + for (i = 1; i <= argc-1; i++) + APPEND_FILESPEC(argList, argv[i]); + + + /*-- Find the length of the longest filename --*/ + longestFileName = 7; + numFileNames = 0; + decode = True; + for (aa = argList; aa != NULL; aa = aa->link) { + if (ISFLAG("--")) { decode = False; continue; } + if (aa->name[0] == '-' && decode) continue; + numFileNames++; + if (longestFileName < (Int32)strlen(aa->name) ) + longestFileName = (Int32)strlen(aa->name); + } + + + /*-- Determine source modes; flag handling may change this too. --*/ + if (numFileNames == 0) + srcMode = SM_I2O; else srcMode = SM_F2F; + + + /*-- Determine what to do (compress/uncompress/test/cat). --*/ + /*-- Note that subsequent flag handling may change this. --*/ + opMode = OM_Z; + + if ( (strstr ( progName, "unzip" ) != 0) || + (strstr ( progName, "UNZIP" ) != 0) ) + opMode = OM_UNZ; + + if ( (strstr ( progName, "z2cat" ) != 0) || + (strstr ( progName, "Z2CAT" ) != 0) || + (strstr ( progName, "zcat" ) != 0) || + (strstr ( progName, "ZCAT" ) != 0) ) { + opMode = OM_UNZ; + srcMode = (numFileNames == 0) ? SM_I2O : SM_F2O; + } + + + /*-- Look at the flags. --*/ + for (aa = argList; aa != NULL; aa = aa->link) { + if (ISFLAG("--")) break; + if (aa->name[0] == '-' && aa->name[1] != '-') { + for (j = 1; aa->name[j] != '\0'; j++) { + switch (aa->name[j]) { + case 'c': srcMode = SM_F2O; break; + case 'd': opMode = OM_UNZ; break; + case 'z': opMode = OM_Z; break; + case 'f': forceOverwrite = True; break; + case 't': opMode = OM_TEST; break; + case 'k': keepInputFiles = True; break; + case 's': smallMode = True; break; + case 'q': noisy = False; break; + case '1': blockSize100k = 1; break; + case '2': blockSize100k = 2; break; + case '3': blockSize100k = 3; break; + case '4': blockSize100k = 4; break; + case '5': blockSize100k = 5; break; + case '6': blockSize100k = 6; break; + case '7': blockSize100k = 7; break; + case '8': blockSize100k = 8; break; + case '9': blockSize100k = 9; break; + case 'V': + case 'L': license(); break; + case 'v': verbosity++; break; + case 'h': usage ( progName ); + exit ( 0 ); + break; + default: fprintf ( stderr, "%s: Bad flag `%s'\n", + progName, aa->name ); + usage ( progName ); + exit ( 1 ); + break; + } + } + } + } + + /*-- And again ... --*/ + for (aa = argList; aa != NULL; aa = aa->link) { + if (ISFLAG("--")) break; + if (ISFLAG("--stdout")) srcMode = SM_F2O; else + if (ISFLAG("--decompress")) opMode = OM_UNZ; else + if (ISFLAG("--compress")) opMode = OM_Z; else + if (ISFLAG("--force")) forceOverwrite = True; else + if (ISFLAG("--test")) opMode = OM_TEST; else + if (ISFLAG("--keep")) keepInputFiles = True; else + if (ISFLAG("--small")) smallMode = True; else + if (ISFLAG("--quiet")) noisy = False; else + if (ISFLAG("--version")) license(); else + if (ISFLAG("--license")) license(); else + if (ISFLAG("--exponential")) workFactor = 1; else + if (ISFLAG("--repetitive-best")) redundant(aa->name); else + if (ISFLAG("--repetitive-fast")) redundant(aa->name); else + if (ISFLAG("--fast")) blockSize100k = 1; else + if (ISFLAG("--best")) blockSize100k = 9; else + if (ISFLAG("--verbose")) verbosity++; else + if (ISFLAG("--help")) { usage ( progName ); exit ( 0 ); } + else + if (strncmp ( aa->name, "--", 2) == 0) { + fprintf ( stderr, "%s: Bad flag `%s'\n", progName, aa->name ); + usage ( progName ); + exit ( 1 ); + } + } + + if (verbosity > 4) verbosity = 4; + if (opMode == OM_Z && smallMode && blockSize100k > 2) + blockSize100k = 2; + + if (opMode == OM_TEST && srcMode == SM_F2O) { + fprintf ( stderr, "%s: -c and -t cannot be used together.\n", + progName ); + exit ( 1 ); + } + + if (srcMode == SM_F2O && numFileNames == 0) + srcMode = SM_I2O; + + if (opMode != OM_Z) blockSize100k = 0; + + if (srcMode == SM_F2F) { + signal (SIGINT, mySignalCatcher); + signal (SIGTERM, mySignalCatcher); +# if BZ_UNIX + signal (SIGHUP, mySignalCatcher); +# endif + } + + if (opMode == OM_Z) { + if (srcMode == SM_I2O) { + compress ( NULL ); + } else { + decode = True; + for (aa = argList; aa != NULL; aa = aa->link) { + if (ISFLAG("--")) { decode = False; continue; } + if (aa->name[0] == '-' && decode) continue; + numFilesProcessed++; + compress ( aa->name ); + } + } + } + else + + if (opMode == OM_UNZ) { + unzFailsExist = False; + if (srcMode == SM_I2O) { + uncompress ( NULL ); + } else { + decode = True; + for (aa = argList; aa != NULL; aa = aa->link) { + if (ISFLAG("--")) { decode = False; continue; } + if (aa->name[0] == '-' && decode) continue; + numFilesProcessed++; + uncompress ( aa->name ); + } + } + if (unzFailsExist) { + setExit(2); + exit(exitValue); + } + } + + else { + testFailsExist = False; + if (srcMode == SM_I2O) { + testf ( NULL ); + } else { + decode = True; + for (aa = argList; aa != NULL; aa = aa->link) { + if (ISFLAG("--")) { decode = False; continue; } + if (aa->name[0] == '-' && decode) continue; + numFilesProcessed++; + testf ( aa->name ); + } + } + if (testFailsExist) { + if (noisy) { + fprintf ( stderr, + "\n" + "You can use the `bzip2recover' program to attempt to recover\n" + "data from undamaged sections of corrupted files.\n\n" + ); + } + setExit(2); + exit(exitValue); + } + } + + /* Free the argument list memory to mollify leak detectors + (eg) Purify, Checker. Serves no other useful purpose. + */ + aa = argList; + while (aa != NULL) { + Cell* aa2 = aa->link; + if (aa->name != NULL) free(aa->name); + free(aa); + aa = aa2; + } + + return exitValue; +} + + +/*-----------------------------------------------------------*/ +/*--- end bzip2.c ---*/ +/*-----------------------------------------------------------*/ Index: vendor/bzip2/1.0.7/bzip2recover.c =================================================================== --- vendor/bzip2/1.0.7/bzip2recover.c (nonexistent) +++ vendor/bzip2/1.0.7/bzip2recover.c (revision 349497) @@ -0,0 +1,516 @@ +/*-----------------------------------------------------------*/ +/*--- Block recoverer program for bzip2 ---*/ +/*--- bzip2recover.c ---*/ +/*-----------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + +/* This program is a complete hack and should be rewritten properly. + It isn't very complicated. */ + +#include +#include +#include +#include + + +/* This program records bit locations in the file to be recovered. + That means that if 64-bit ints are not supported, we will not + be able to recover .bz2 files over 512MB (2^32 bits) long. + On GNU supported platforms, we take advantage of the 64-bit + int support to circumvent this problem. Ditto MSVC. + + This change occurred in version 1.0.2; all prior versions have + the 512MB limitation. +*/ +#ifdef __GNUC__ + typedef unsigned long long int MaybeUInt64; +# define MaybeUInt64_FMT "%Lu" +#else +#ifdef _MSC_VER + typedef unsigned __int64 MaybeUInt64; +# define MaybeUInt64_FMT "%I64u" +#else + typedef unsigned int MaybeUInt64; +# define MaybeUInt64_FMT "%u" +#endif +#endif + +typedef unsigned int UInt32; +typedef int Int32; +typedef unsigned char UChar; +typedef char Char; +typedef unsigned char Bool; +#define True ((Bool)1) +#define False ((Bool)0) + + +#define BZ_MAX_FILENAME 2000 + +Char inFileName[BZ_MAX_FILENAME]; +Char outFileName[BZ_MAX_FILENAME]; +Char progName[BZ_MAX_FILENAME]; + +MaybeUInt64 bytesOut = 0; +MaybeUInt64 bytesIn = 0; + + +/*---------------------------------------------------*/ +/*--- Header bytes ---*/ +/*---------------------------------------------------*/ + +#define BZ_HDR_B 0x42 /* 'B' */ +#define BZ_HDR_Z 0x5a /* 'Z' */ +#define BZ_HDR_h 0x68 /* 'h' */ +#define BZ_HDR_0 0x30 /* '0' */ + + +/*---------------------------------------------------*/ +/*--- I/O errors ---*/ +/*---------------------------------------------------*/ + +/*---------------------------------------------*/ +static void readError ( void ) +{ + fprintf ( stderr, + "%s: I/O error reading `%s', possible reason follows.\n", + progName, inFileName ); + perror ( progName ); + fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n", + progName ); + exit ( 1 ); +} + + +/*---------------------------------------------*/ +static void writeError ( void ) +{ + fprintf ( stderr, + "%s: I/O error reading `%s', possible reason follows.\n", + progName, inFileName ); + perror ( progName ); + fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n", + progName ); + exit ( 1 ); +} + + +/*---------------------------------------------*/ +static void mallocFail ( Int32 n ) +{ + fprintf ( stderr, + "%s: malloc failed on request for %d bytes.\n", + progName, n ); + fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n", + progName ); + exit ( 1 ); +} + + +/*---------------------------------------------*/ +static void tooManyBlocks ( Int32 max_handled_blocks ) +{ + fprintf ( stderr, + "%s: `%s' appears to contain more than %d blocks\n", + progName, inFileName, max_handled_blocks ); + fprintf ( stderr, + "%s: and cannot be handled. To fix, increase\n", + progName ); + fprintf ( stderr, + "%s: BZ_MAX_HANDLED_BLOCKS in bzip2recover.c, and recompile.\n", + progName ); + exit ( 1 ); +} + + + +/*---------------------------------------------------*/ +/*--- Bit stream I/O ---*/ +/*---------------------------------------------------*/ + +typedef + struct { + FILE* handle; + Int32 buffer; + Int32 buffLive; + Char mode; + } + BitStream; + + +/*---------------------------------------------*/ +static BitStream* bsOpenReadStream ( FILE* stream ) +{ + BitStream *bs = malloc ( sizeof(BitStream) ); + if (bs == NULL) mallocFail ( sizeof(BitStream) ); + bs->handle = stream; + bs->buffer = 0; + bs->buffLive = 0; + bs->mode = 'r'; + return bs; +} + + +/*---------------------------------------------*/ +static BitStream* bsOpenWriteStream ( FILE* stream ) +{ + BitStream *bs = malloc ( sizeof(BitStream) ); + if (bs == NULL) mallocFail ( sizeof(BitStream) ); + bs->handle = stream; + bs->buffer = 0; + bs->buffLive = 0; + bs->mode = 'w'; + return bs; +} + + +/*---------------------------------------------*/ +static void bsPutBit ( BitStream* bs, Int32 bit ) +{ + if (bs->buffLive == 8) { + Int32 retVal = putc ( (UChar) bs->buffer, bs->handle ); + if (retVal == EOF) writeError(); + bytesOut++; + bs->buffLive = 1; + bs->buffer = bit & 0x1; + } else { + bs->buffer = ( (bs->buffer << 1) | (bit & 0x1) ); + bs->buffLive++; + }; +} + + +/*---------------------------------------------*/ +/*-- + Returns 0 or 1, or 2 to indicate EOF. +--*/ +static Int32 bsGetBit ( BitStream* bs ) +{ + if (bs->buffLive > 0) { + bs->buffLive --; + return ( ((bs->buffer) >> (bs->buffLive)) & 0x1 ); + } else { + Int32 retVal = getc ( bs->handle ); + if ( retVal == EOF ) { + if (errno != 0) readError(); + return 2; + } + bs->buffLive = 7; + bs->buffer = retVal; + return ( ((bs->buffer) >> 7) & 0x1 ); + } +} + + +/*---------------------------------------------*/ +static void bsClose ( BitStream* bs ) +{ + Int32 retVal; + + if ( bs->mode == 'w' ) { + while ( bs->buffLive < 8 ) { + bs->buffLive++; + bs->buffer <<= 1; + }; + retVal = putc ( (UChar) (bs->buffer), bs->handle ); + if (retVal == EOF) writeError(); + bytesOut++; + retVal = fflush ( bs->handle ); + if (retVal == EOF) writeError(); + } + retVal = fclose ( bs->handle ); + if (retVal == EOF) { + if (bs->mode == 'w') writeError(); else readError(); + } + free ( bs ); +} + + +/*---------------------------------------------*/ +static void bsPutUChar ( BitStream* bs, UChar c ) +{ + Int32 i; + for (i = 7; i >= 0; i--) + bsPutBit ( bs, (((UInt32) c) >> i) & 0x1 ); +} + + +/*---------------------------------------------*/ +static void bsPutUInt32 ( BitStream* bs, UInt32 c ) +{ + Int32 i; + + for (i = 31; i >= 0; i--) + bsPutBit ( bs, (c >> i) & 0x1 ); +} + + +/*---------------------------------------------*/ +static Bool endsInBz2 ( Char* name ) +{ + Int32 n = strlen ( name ); + if (n <= 4) return False; + return + (name[n-4] == '.' && + name[n-3] == 'b' && + name[n-2] == 'z' && + name[n-1] == '2'); +} + + +/*---------------------------------------------------*/ +/*--- ---*/ +/*---------------------------------------------------*/ + +/* This logic isn't really right when it comes to Cygwin. */ +#ifdef _WIN32 +# define BZ_SPLIT_SYM '\\' /* path splitter on Windows platform */ +#else +# define BZ_SPLIT_SYM '/' /* path splitter on Unix platform */ +#endif + +#define BLOCK_HEADER_HI 0x00003141UL +#define BLOCK_HEADER_LO 0x59265359UL + +#define BLOCK_ENDMARK_HI 0x00001772UL +#define BLOCK_ENDMARK_LO 0x45385090UL + +/* Increase if necessary. However, a .bz2 file with > 50000 blocks + would have an uncompressed size of at least 40GB, so the chances + are low you'll need to up this. +*/ +#define BZ_MAX_HANDLED_BLOCKS 50000 + +MaybeUInt64 bStart [BZ_MAX_HANDLED_BLOCKS]; +MaybeUInt64 bEnd [BZ_MAX_HANDLED_BLOCKS]; +MaybeUInt64 rbStart[BZ_MAX_HANDLED_BLOCKS]; +MaybeUInt64 rbEnd [BZ_MAX_HANDLED_BLOCKS]; + +Int32 main ( Int32 argc, Char** argv ) +{ + FILE* inFile; + FILE* outFile; + BitStream* bsIn, *bsWr; + Int32 b, wrBlock, currBlock, rbCtr; + MaybeUInt64 bitsRead; + + UInt32 buffHi, buffLo, blockCRC; + Char* p; + + strncpy ( progName, argv[0], BZ_MAX_FILENAME-1); + progName[BZ_MAX_FILENAME-1]='\0'; + inFileName[0] = outFileName[0] = 0; + + fprintf ( stderr, + "bzip2recover 1.0.7: extracts blocks from damaged .bz2 files.\n" ); + + if (argc != 2) { + fprintf ( stderr, "%s: usage is `%s damaged_file_name'.\n", + progName, progName ); + switch (sizeof(MaybeUInt64)) { + case 8: + fprintf(stderr, + "\trestrictions on size of recovered file: None\n"); + break; + case 4: + fprintf(stderr, + "\trestrictions on size of recovered file: 512 MB\n"); + fprintf(stderr, + "\tto circumvent, recompile with MaybeUInt64 as an\n" + "\tunsigned 64-bit int.\n"); + break; + default: + fprintf(stderr, + "\tsizeof(MaybeUInt64) is not 4 or 8 -- " + "configuration error.\n"); + break; + } + exit(1); + } + + if (strlen(argv[1]) >= BZ_MAX_FILENAME-20) { + fprintf ( stderr, + "%s: supplied filename is suspiciously (>= %d chars) long. Bye!\n", + progName, (int)strlen(argv[1]) ); + exit(1); + } + + strcpy ( inFileName, argv[1] ); + + inFile = fopen ( inFileName, "rb" ); + if (inFile == NULL) { + fprintf ( stderr, "%s: can't read `%s'\n", progName, inFileName ); + exit(1); + } + + bsIn = bsOpenReadStream ( inFile ); + fprintf ( stderr, "%s: searching for block boundaries ...\n", progName ); + + bitsRead = 0; + buffHi = buffLo = 0; + currBlock = 0; + bStart[currBlock] = 0; + + rbCtr = 0; + + while (True) { + b = bsGetBit ( bsIn ); + bitsRead++; + if (b == 2) { + if (bitsRead >= bStart[currBlock] && + (bitsRead - bStart[currBlock]) >= 40) { + bEnd[currBlock] = bitsRead-1; + if (currBlock > 0) + fprintf ( stderr, " block %d runs from " MaybeUInt64_FMT + " to " MaybeUInt64_FMT " (incomplete)\n", + currBlock, bStart[currBlock], bEnd[currBlock] ); + } else + currBlock--; + break; + } + buffHi = (buffHi << 1) | (buffLo >> 31); + buffLo = (buffLo << 1) | (b & 1); + if ( ( (buffHi & 0x0000ffff) == BLOCK_HEADER_HI + && buffLo == BLOCK_HEADER_LO) + || + ( (buffHi & 0x0000ffff) == BLOCK_ENDMARK_HI + && buffLo == BLOCK_ENDMARK_LO) + ) { + if (bitsRead > 49) { + bEnd[currBlock] = bitsRead-49; + } else { + bEnd[currBlock] = 0; + } + if (currBlock > 0 && + (bEnd[currBlock] - bStart[currBlock]) >= 130) { + fprintf ( stderr, " block %d runs from " MaybeUInt64_FMT + " to " MaybeUInt64_FMT "\n", + rbCtr+1, bStart[currBlock], bEnd[currBlock] ); + rbStart[rbCtr] = bStart[currBlock]; + rbEnd[rbCtr] = bEnd[currBlock]; + rbCtr++; + } + if (currBlock >= BZ_MAX_HANDLED_BLOCKS) + tooManyBlocks(BZ_MAX_HANDLED_BLOCKS); + currBlock++; + + bStart[currBlock] = bitsRead; + } + } + + bsClose ( bsIn ); + + /*-- identified blocks run from 1 to rbCtr inclusive. --*/ + + if (rbCtr < 1) { + fprintf ( stderr, + "%s: sorry, I couldn't find any block boundaries.\n", + progName ); + exit(1); + }; + + fprintf ( stderr, "%s: splitting into blocks\n", progName ); + + inFile = fopen ( inFileName, "rb" ); + if (inFile == NULL) { + fprintf ( stderr, "%s: can't open `%s'\n", progName, inFileName ); + exit(1); + } + bsIn = bsOpenReadStream ( inFile ); + + /*-- placate gcc's dataflow analyser --*/ + blockCRC = 0; bsWr = 0; + + bitsRead = 0; + outFile = NULL; + wrBlock = 0; + while (True) { + b = bsGetBit(bsIn); + if (b == 2) break; + buffHi = (buffHi << 1) | (buffLo >> 31); + buffLo = (buffLo << 1) | (b & 1); + if (bitsRead == 47+rbStart[wrBlock]) + blockCRC = (buffHi << 16) | (buffLo >> 16); + + if (outFile != NULL && bitsRead >= rbStart[wrBlock] + && bitsRead <= rbEnd[wrBlock]) { + bsPutBit ( bsWr, b ); + } + + bitsRead++; + + if (bitsRead == rbEnd[wrBlock]+1) { + if (outFile != NULL) { + bsPutUChar ( bsWr, 0x17 ); bsPutUChar ( bsWr, 0x72 ); + bsPutUChar ( bsWr, 0x45 ); bsPutUChar ( bsWr, 0x38 ); + bsPutUChar ( bsWr, 0x50 ); bsPutUChar ( bsWr, 0x90 ); + bsPutUInt32 ( bsWr, blockCRC ); + bsClose ( bsWr ); + outFile = NULL; + } + if (wrBlock >= rbCtr) break; + wrBlock++; + } else + if (bitsRead == rbStart[wrBlock]) { + /* Create the output file name, correctly handling leading paths. + (31.10.2001 by Sergey E. Kusikov) */ + Char* split; + Int32 ofs, k; + for (k = 0; k < BZ_MAX_FILENAME; k++) + outFileName[k] = 0; + strcpy (outFileName, inFileName); + split = strrchr (outFileName, BZ_SPLIT_SYM); + if (split == NULL) { + split = outFileName; + } else { + ++split; + } + /* Now split points to the start of the basename. */ + ofs = split - outFileName; + sprintf (split, "rec%5d", wrBlock+1); + for (p = split; *p != 0; p++) if (*p == ' ') *p = '0'; + strcat (outFileName, inFileName + ofs); + + if ( !endsInBz2(outFileName)) strcat ( outFileName, ".bz2" ); + + fprintf ( stderr, " writing block %d to `%s' ...\n", + wrBlock+1, outFileName ); + + outFile = fopen ( outFileName, "wb" ); + if (outFile == NULL) { + fprintf ( stderr, "%s: can't write `%s'\n", + progName, outFileName ); + exit(1); + } + bsWr = bsOpenWriteStream ( outFile ); + bsPutUChar ( bsWr, BZ_HDR_B ); + bsPutUChar ( bsWr, BZ_HDR_Z ); + bsPutUChar ( bsWr, BZ_HDR_h ); + bsPutUChar ( bsWr, BZ_HDR_0 + 9 ); + bsPutUChar ( bsWr, 0x31 ); bsPutUChar ( bsWr, 0x41 ); + bsPutUChar ( bsWr, 0x59 ); bsPutUChar ( bsWr, 0x26 ); + bsPutUChar ( bsWr, 0x53 ); bsPutUChar ( bsWr, 0x59 ); + } + } + + fprintf ( stderr, "%s: finished\n", progName ); + return 0; +} + + + +/*-----------------------------------------------------------*/ +/*--- end bzip2recover.c ---*/ +/*-----------------------------------------------------------*/ Index: vendor/bzip2/1.0.7/bzlib.c =================================================================== --- vendor/bzip2/1.0.7/bzlib.c (nonexistent) +++ vendor/bzip2/1.0.7/bzlib.c (revision 349497) @@ -0,0 +1,1572 @@ + +/*-------------------------------------------------------------*/ +/*--- Library top-level functions. ---*/ +/*--- bzlib.c ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + +/* CHANGES + 0.9.0 -- original version. + 0.9.0a/b -- no changes in this file. + 0.9.0c -- made zero-length BZ_FLUSH work correctly in bzCompress(). + fixed bzWrite/bzRead to ignore zero-length requests. + fixed bzread to correctly handle read requests after EOF. + wrong parameter order in call to bzDecompressInit in + bzBuffToBuffDecompress. Fixed. +*/ + +#include "bzlib_private.h" + + +/*---------------------------------------------------*/ +/*--- Compression stuff ---*/ +/*---------------------------------------------------*/ + + +/*---------------------------------------------------*/ +#ifndef BZ_NO_STDIO +void BZ2_bz__AssertH__fail ( int errcode ) +{ + fprintf(stderr, + "\n\nbzip2/libbzip2: internal error number %d.\n" + "This is a bug in bzip2/libbzip2, %s.\n" + "Please report it to me at: jseward@acm.org. If this happened\n" + "when you were using some program which uses libbzip2 as a\n" + "component, you should also report this bug to the author(s)\n" + "of that program. Please make an effort to report this bug;\n" + "timely and accurate bug reports eventually lead to higher\n" + "quality software. Thanks. Julian Seward, 10 December 2007.\n\n", + errcode, + BZ2_bzlibVersion() + ); + + if (errcode == 1007) { + fprintf(stderr, + "\n*** A special note about internal error number 1007 ***\n" + "\n" + "Experience suggests that a common cause of i.e. 1007\n" + "is unreliable memory or other hardware. The 1007 assertion\n" + "just happens to cross-check the results of huge numbers of\n" + "memory reads/writes, and so acts (unintendedly) as a stress\n" + "test of your memory system.\n" + "\n" + "I suggest the following: try compressing the file again,\n" + "possibly monitoring progress in detail with the -vv flag.\n" + "\n" + "* If the error cannot be reproduced, and/or happens at different\n" + " points in compression, you may have a flaky memory system.\n" + " Try a memory-test program. I have used Memtest86\n" + " (www.memtest86.com). At the time of writing it is free (GPLd).\n" + " Memtest86 tests memory much more thorougly than your BIOSs\n" + " power-on test, and may find failures that the BIOS doesn't.\n" + "\n" + "* If the error can be repeatably reproduced, this is a bug in\n" + " bzip2, and I would very much like to hear about it. Please\n" + " let me know, and, ideally, save a copy of the file causing the\n" + " problem -- without which I will be unable to investigate it.\n" + "\n" + ); + } + + exit(3); +} +#endif + + +/*---------------------------------------------------*/ +static +int bz_config_ok ( void ) +{ + if (sizeof(int) != 4) return 0; + if (sizeof(short) != 2) return 0; + if (sizeof(char) != 1) return 0; + return 1; +} + + +/*---------------------------------------------------*/ +static +void* default_bzalloc ( void* opaque, Int32 items, Int32 size ) +{ + void* v = malloc ( items * size ); + return v; +} + +static +void default_bzfree ( void* opaque, void* addr ) +{ + if (addr != NULL) free ( addr ); +} + + +/*---------------------------------------------------*/ +static +void prepare_new_block ( EState* s ) +{ + Int32 i; + s->nblock = 0; + s->numZ = 0; + s->state_out_pos = 0; + BZ_INITIALISE_CRC ( s->blockCRC ); + for (i = 0; i < 256; i++) s->inUse[i] = False; + s->blockNo++; +} + + +/*---------------------------------------------------*/ +static +void init_RL ( EState* s ) +{ + s->state_in_ch = 256; + s->state_in_len = 0; +} + + +static +Bool isempty_RL ( EState* s ) +{ + if (s->state_in_ch < 256 && s->state_in_len > 0) + return False; else + return True; +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzCompressInit) + ( bz_stream* strm, + int blockSize100k, + int verbosity, + int workFactor ) +{ + Int32 n; + EState* s; + + if (!bz_config_ok()) return BZ_CONFIG_ERROR; + + if (strm == NULL || + blockSize100k < 1 || blockSize100k > 9 || + workFactor < 0 || workFactor > 250) + return BZ_PARAM_ERROR; + + if (workFactor == 0) workFactor = 30; + if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc; + if (strm->bzfree == NULL) strm->bzfree = default_bzfree; + + s = BZALLOC( sizeof(EState) ); + if (s == NULL) return BZ_MEM_ERROR; + s->strm = strm; + + s->arr1 = NULL; + s->arr2 = NULL; + s->ftab = NULL; + + n = 100000 * blockSize100k; + s->arr1 = BZALLOC( n * sizeof(UInt32) ); + s->arr2 = BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) ); + s->ftab = BZALLOC( 65537 * sizeof(UInt32) ); + + if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) { + if (s->arr1 != NULL) BZFREE(s->arr1); + if (s->arr2 != NULL) BZFREE(s->arr2); + if (s->ftab != NULL) BZFREE(s->ftab); + if (s != NULL) BZFREE(s); + return BZ_MEM_ERROR; + } + + s->blockNo = 0; + s->state = BZ_S_INPUT; + s->mode = BZ_M_RUNNING; + s->combinedCRC = 0; + s->blockSize100k = blockSize100k; + s->nblockMAX = 100000 * blockSize100k - 19; + s->verbosity = verbosity; + s->workFactor = workFactor; + + s->block = (UChar*)s->arr2; + s->mtfv = (UInt16*)s->arr1; + s->zbits = NULL; + s->ptr = (UInt32*)s->arr1; + + strm->state = s; + strm->total_in_lo32 = 0; + strm->total_in_hi32 = 0; + strm->total_out_lo32 = 0; + strm->total_out_hi32 = 0; + init_RL ( s ); + prepare_new_block ( s ); + return BZ_OK; +} + + +/*---------------------------------------------------*/ +static +void add_pair_to_block ( EState* s ) +{ + Int32 i; + UChar ch = (UChar)(s->state_in_ch); + for (i = 0; i < s->state_in_len; i++) { + BZ_UPDATE_CRC( s->blockCRC, ch ); + } + s->inUse[s->state_in_ch] = True; + switch (s->state_in_len) { + case 1: + s->block[s->nblock] = (UChar)ch; s->nblock++; + break; + case 2: + s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = (UChar)ch; s->nblock++; + break; + case 3: + s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = (UChar)ch; s->nblock++; + break; + default: + s->inUse[s->state_in_len-4] = True; + s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = ((UChar)(s->state_in_len-4)); + s->nblock++; + break; + } +} + + +/*---------------------------------------------------*/ +static +void flush_RL ( EState* s ) +{ + if (s->state_in_ch < 256) add_pair_to_block ( s ); + init_RL ( s ); +} + + +/*---------------------------------------------------*/ +#define ADD_CHAR_TO_BLOCK(zs,zchh0) \ +{ \ + UInt32 zchh = (UInt32)(zchh0); \ + /*-- fast track the common case --*/ \ + if (zchh != zs->state_in_ch && \ + zs->state_in_len == 1) { \ + UChar ch = (UChar)(zs->state_in_ch); \ + BZ_UPDATE_CRC( zs->blockCRC, ch ); \ + zs->inUse[zs->state_in_ch] = True; \ + zs->block[zs->nblock] = (UChar)ch; \ + zs->nblock++; \ + zs->state_in_ch = zchh; \ + } \ + else \ + /*-- general, uncommon cases --*/ \ + if (zchh != zs->state_in_ch || \ + zs->state_in_len == 255) { \ + if (zs->state_in_ch < 256) \ + add_pair_to_block ( zs ); \ + zs->state_in_ch = zchh; \ + zs->state_in_len = 1; \ + } else { \ + zs->state_in_len++; \ + } \ +} + + +/*---------------------------------------------------*/ +static +Bool copy_input_until_stop ( EState* s ) +{ + Bool progress_in = False; + + if (s->mode == BZ_M_RUNNING) { + + /*-- fast track the common case --*/ + while (True) { + /*-- block full? --*/ + if (s->nblock >= s->nblockMAX) break; + /*-- no input? --*/ + if (s->strm->avail_in == 0) break; + progress_in = True; + ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); + s->strm->next_in++; + s->strm->avail_in--; + s->strm->total_in_lo32++; + if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; + } + + } else { + + /*-- general, uncommon case --*/ + while (True) { + /*-- block full? --*/ + if (s->nblock >= s->nblockMAX) break; + /*-- no input? --*/ + if (s->strm->avail_in == 0) break; + /*-- flush/finish end? --*/ + if (s->avail_in_expect == 0) break; + progress_in = True; + ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); + s->strm->next_in++; + s->strm->avail_in--; + s->strm->total_in_lo32++; + if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; + s->avail_in_expect--; + } + } + return progress_in; +} + + +/*---------------------------------------------------*/ +static +Bool copy_output_until_stop ( EState* s ) +{ + Bool progress_out = False; + + while (True) { + + /*-- no output space? --*/ + if (s->strm->avail_out == 0) break; + + /*-- block done? --*/ + if (s->state_out_pos >= s->numZ) break; + + progress_out = True; + *(s->strm->next_out) = s->zbits[s->state_out_pos]; + s->state_out_pos++; + s->strm->avail_out--; + s->strm->next_out++; + s->strm->total_out_lo32++; + if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; + } + + return progress_out; +} + + +/*---------------------------------------------------*/ +static +Bool handle_compress ( bz_stream* strm ) +{ + Bool progress_in = False; + Bool progress_out = False; + EState* s = strm->state; + + while (True) { + + if (s->state == BZ_S_OUTPUT) { + progress_out |= copy_output_until_stop ( s ); + if (s->state_out_pos < s->numZ) break; + if (s->mode == BZ_M_FINISHING && + s->avail_in_expect == 0 && + isempty_RL(s)) break; + prepare_new_block ( s ); + s->state = BZ_S_INPUT; + if (s->mode == BZ_M_FLUSHING && + s->avail_in_expect == 0 && + isempty_RL(s)) break; + } + + if (s->state == BZ_S_INPUT) { + progress_in |= copy_input_until_stop ( s ); + if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) { + flush_RL ( s ); + BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) ); + s->state = BZ_S_OUTPUT; + } + else + if (s->nblock >= s->nblockMAX) { + BZ2_compressBlock ( s, False ); + s->state = BZ_S_OUTPUT; + } + else + if (s->strm->avail_in == 0) { + break; + } + } + + } + + return progress_in || progress_out; +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action ) +{ + Bool progress; + EState* s; + if (strm == NULL) return BZ_PARAM_ERROR; + s = strm->state; + if (s == NULL) return BZ_PARAM_ERROR; + if (s->strm != strm) return BZ_PARAM_ERROR; + + preswitch: + switch (s->mode) { + + case BZ_M_IDLE: + return BZ_SEQUENCE_ERROR; + + case BZ_M_RUNNING: + if (action == BZ_RUN) { + progress = handle_compress ( strm ); + return progress ? BZ_RUN_OK : BZ_PARAM_ERROR; + } + else + if (action == BZ_FLUSH) { + s->avail_in_expect = strm->avail_in; + s->mode = BZ_M_FLUSHING; + goto preswitch; + } + else + if (action == BZ_FINISH) { + s->avail_in_expect = strm->avail_in; + s->mode = BZ_M_FINISHING; + goto preswitch; + } + else + return BZ_PARAM_ERROR; + + case BZ_M_FLUSHING: + if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR; + if (s->avail_in_expect != s->strm->avail_in) + return BZ_SEQUENCE_ERROR; + progress = handle_compress ( strm ); + if (s->avail_in_expect > 0 || !isempty_RL(s) || + s->state_out_pos < s->numZ) return BZ_FLUSH_OK; + s->mode = BZ_M_RUNNING; + return BZ_RUN_OK; + + case BZ_M_FINISHING: + if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR; + if (s->avail_in_expect != s->strm->avail_in) + return BZ_SEQUENCE_ERROR; + progress = handle_compress ( strm ); + if (!progress) return BZ_SEQUENCE_ERROR; + if (s->avail_in_expect > 0 || !isempty_RL(s) || + s->state_out_pos < s->numZ) return BZ_FINISH_OK; + s->mode = BZ_M_IDLE; + return BZ_STREAM_END; + } + return BZ_OK; /*--not reached--*/ +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzCompressEnd) ( bz_stream *strm ) +{ + EState* s; + if (strm == NULL) return BZ_PARAM_ERROR; + s = strm->state; + if (s == NULL) return BZ_PARAM_ERROR; + if (s->strm != strm) return BZ_PARAM_ERROR; + + if (s->arr1 != NULL) BZFREE(s->arr1); + if (s->arr2 != NULL) BZFREE(s->arr2); + if (s->ftab != NULL) BZFREE(s->ftab); + BZFREE(strm->state); + + strm->state = NULL; + + return BZ_OK; +} + + +/*---------------------------------------------------*/ +/*--- Decompression stuff ---*/ +/*---------------------------------------------------*/ + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzDecompressInit) + ( bz_stream* strm, + int verbosity, + int small ) +{ + DState* s; + + if (!bz_config_ok()) return BZ_CONFIG_ERROR; + + if (strm == NULL) return BZ_PARAM_ERROR; + if (small != 0 && small != 1) return BZ_PARAM_ERROR; + if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR; + + if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc; + if (strm->bzfree == NULL) strm->bzfree = default_bzfree; + + s = BZALLOC( sizeof(DState) ); + if (s == NULL) return BZ_MEM_ERROR; + s->strm = strm; + strm->state = s; + s->state = BZ_X_MAGIC_1; + s->bsLive = 0; + s->bsBuff = 0; + s->calculatedCombinedCRC = 0; + strm->total_in_lo32 = 0; + strm->total_in_hi32 = 0; + strm->total_out_lo32 = 0; + strm->total_out_hi32 = 0; + s->smallDecompress = (Bool)small; + s->ll4 = NULL; + s->ll16 = NULL; + s->tt = NULL; + s->currBlockNo = 0; + s->verbosity = verbosity; + + return BZ_OK; +} + + +/*---------------------------------------------------*/ +/* Return True iff data corruption is discovered. + Returns False if there is no problem. +*/ +static +Bool unRLE_obuf_to_output_FAST ( DState* s ) +{ + UChar k1; + + if (s->blockRandomised) { + + while (True) { + /* try to finish existing run */ + while (True) { + if (s->strm->avail_out == 0) return False; + if (s->state_out_len == 0) break; + *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; + BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); + s->state_out_len--; + s->strm->next_out++; + s->strm->avail_out--; + s->strm->total_out_lo32++; + if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; + } + + /* can a new run be started? */ + if (s->nblock_used == s->save_nblock+1) return False; + + /* Only caused by corrupt data stream? */ + if (s->nblock_used > s->save_nblock+1) + return True; + + s->state_out_len = 1; + s->state_out_ch = s->k0; + BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; + k1 ^= BZ_RAND_MASK; s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + s->state_out_len = 2; + BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; + k1 ^= BZ_RAND_MASK; s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + s->state_out_len = 3; + BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; + k1 ^= BZ_RAND_MASK; s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; + k1 ^= BZ_RAND_MASK; s->nblock_used++; + s->state_out_len = ((Int32)k1) + 4; + BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK; + s->k0 ^= BZ_RAND_MASK; s->nblock_used++; + } + + } else { + + /* restore */ + UInt32 c_calculatedBlockCRC = s->calculatedBlockCRC; + UChar c_state_out_ch = s->state_out_ch; + Int32 c_state_out_len = s->state_out_len; + Int32 c_nblock_used = s->nblock_used; + Int32 c_k0 = s->k0; + UInt32* c_tt = s->tt; + UInt32 c_tPos = s->tPos; + char* cs_next_out = s->strm->next_out; + unsigned int cs_avail_out = s->strm->avail_out; + Int32 ro_blockSize100k = s->blockSize100k; + /* end restore */ + + UInt32 avail_out_INIT = cs_avail_out; + Int32 s_save_nblockPP = s->save_nblock+1; + unsigned int total_out_lo32_old; + + while (True) { + + /* try to finish existing run */ + if (c_state_out_len > 0) { + while (True) { + if (cs_avail_out == 0) goto return_notr; + if (c_state_out_len == 1) break; + *( (UChar*)(cs_next_out) ) = c_state_out_ch; + BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch ); + c_state_out_len--; + cs_next_out++; + cs_avail_out--; + } + s_state_out_len_eq_one: + { + if (cs_avail_out == 0) { + c_state_out_len = 1; goto return_notr; + }; + *( (UChar*)(cs_next_out) ) = c_state_out_ch; + BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch ); + cs_next_out++; + cs_avail_out--; + } + } + /* Only caused by corrupt data stream? */ + if (c_nblock_used > s_save_nblockPP) + return True; + + /* can a new run be started? */ + if (c_nblock_used == s_save_nblockPP) { + c_state_out_len = 0; goto return_notr; + }; + c_state_out_ch = c_k0; + BZ_GET_FAST_C(k1); c_nblock_used++; + if (k1 != c_k0) { + c_k0 = k1; goto s_state_out_len_eq_one; + }; + if (c_nblock_used == s_save_nblockPP) + goto s_state_out_len_eq_one; + + c_state_out_len = 2; + BZ_GET_FAST_C(k1); c_nblock_used++; + if (c_nblock_used == s_save_nblockPP) continue; + if (k1 != c_k0) { c_k0 = k1; continue; }; + + c_state_out_len = 3; + BZ_GET_FAST_C(k1); c_nblock_used++; + if (c_nblock_used == s_save_nblockPP) continue; + if (k1 != c_k0) { c_k0 = k1; continue; }; + + BZ_GET_FAST_C(k1); c_nblock_used++; + c_state_out_len = ((Int32)k1) + 4; + BZ_GET_FAST_C(c_k0); c_nblock_used++; + } + + return_notr: + total_out_lo32_old = s->strm->total_out_lo32; + s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out); + if (s->strm->total_out_lo32 < total_out_lo32_old) + s->strm->total_out_hi32++; + + /* save */ + s->calculatedBlockCRC = c_calculatedBlockCRC; + s->state_out_ch = c_state_out_ch; + s->state_out_len = c_state_out_len; + s->nblock_used = c_nblock_used; + s->k0 = c_k0; + s->tt = c_tt; + s->tPos = c_tPos; + s->strm->next_out = cs_next_out; + s->strm->avail_out = cs_avail_out; + /* end save */ + } + return False; +} + + + +/*---------------------------------------------------*/ +__inline__ Int32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab ) +{ + Int32 nb, na, mid; + nb = 0; + na = 256; + do { + mid = (nb + na) >> 1; + if (indx >= cftab[mid]) nb = mid; else na = mid; + } + while (na - nb != 1); + return nb; +} + + +/*---------------------------------------------------*/ +/* Return True iff data corruption is discovered. + Returns False if there is no problem. +*/ +static +Bool unRLE_obuf_to_output_SMALL ( DState* s ) +{ + UChar k1; + + if (s->blockRandomised) { + + while (True) { + /* try to finish existing run */ + while (True) { + if (s->strm->avail_out == 0) return False; + if (s->state_out_len == 0) break; + *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; + BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); + s->state_out_len--; + s->strm->next_out++; + s->strm->avail_out--; + s->strm->total_out_lo32++; + if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; + } + + /* can a new run be started? */ + if (s->nblock_used == s->save_nblock+1) return False; + + /* Only caused by corrupt data stream? */ + if (s->nblock_used > s->save_nblock+1) + return True; + + s->state_out_len = 1; + s->state_out_ch = s->k0; + BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; + k1 ^= BZ_RAND_MASK; s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + s->state_out_len = 2; + BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; + k1 ^= BZ_RAND_MASK; s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + s->state_out_len = 3; + BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; + k1 ^= BZ_RAND_MASK; s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; + k1 ^= BZ_RAND_MASK; s->nblock_used++; + s->state_out_len = ((Int32)k1) + 4; + BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK; + s->k0 ^= BZ_RAND_MASK; s->nblock_used++; + } + + } else { + + while (True) { + /* try to finish existing run */ + while (True) { + if (s->strm->avail_out == 0) return False; + if (s->state_out_len == 0) break; + *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; + BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); + s->state_out_len--; + s->strm->next_out++; + s->strm->avail_out--; + s->strm->total_out_lo32++; + if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; + } + + /* can a new run be started? */ + if (s->nblock_used == s->save_nblock+1) return False; + + /* Only caused by corrupt data stream? */ + if (s->nblock_used > s->save_nblock+1) + return True; + + s->state_out_len = 1; + s->state_out_ch = s->k0; + BZ_GET_SMALL(k1); s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + s->state_out_len = 2; + BZ_GET_SMALL(k1); s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + s->state_out_len = 3; + BZ_GET_SMALL(k1); s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + BZ_GET_SMALL(k1); s->nblock_used++; + s->state_out_len = ((Int32)k1) + 4; + BZ_GET_SMALL(s->k0); s->nblock_used++; + } + + } +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzDecompress) ( bz_stream *strm ) +{ + Bool corrupt; + DState* s; + if (strm == NULL) return BZ_PARAM_ERROR; + s = strm->state; + if (s == NULL) return BZ_PARAM_ERROR; + if (s->strm != strm) return BZ_PARAM_ERROR; + + while (True) { + if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR; + if (s->state == BZ_X_OUTPUT) { + if (s->smallDecompress) + corrupt = unRLE_obuf_to_output_SMALL ( s ); else + corrupt = unRLE_obuf_to_output_FAST ( s ); + if (corrupt) return BZ_DATA_ERROR; + if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) { + BZ_FINALISE_CRC ( s->calculatedBlockCRC ); + if (s->verbosity >= 3) + VPrintf2 ( " {0x%08x, 0x%08x}", s->storedBlockCRC, + s->calculatedBlockCRC ); + if (s->verbosity >= 2) VPrintf0 ( "]" ); + if (s->calculatedBlockCRC != s->storedBlockCRC) + return BZ_DATA_ERROR; + s->calculatedCombinedCRC + = (s->calculatedCombinedCRC << 1) | + (s->calculatedCombinedCRC >> 31); + s->calculatedCombinedCRC ^= s->calculatedBlockCRC; + s->state = BZ_X_BLKHDR_1; + } else { + return BZ_OK; + } + } + if (s->state >= BZ_X_MAGIC_1) { + Int32 r = BZ2_decompress ( s ); + if (r == BZ_STREAM_END) { + if (s->verbosity >= 3) + VPrintf2 ( "\n combined CRCs: stored = 0x%08x, computed = 0x%08x", + s->storedCombinedCRC, s->calculatedCombinedCRC ); + if (s->calculatedCombinedCRC != s->storedCombinedCRC) + return BZ_DATA_ERROR; + return r; + } + if (s->state != BZ_X_OUTPUT) return r; + } + } + + AssertH ( 0, 6001 ); + + return 0; /*NOTREACHED*/ +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzDecompressEnd) ( bz_stream *strm ) +{ + DState* s; + if (strm == NULL) return BZ_PARAM_ERROR; + s = strm->state; + if (s == NULL) return BZ_PARAM_ERROR; + if (s->strm != strm) return BZ_PARAM_ERROR; + + if (s->tt != NULL) BZFREE(s->tt); + if (s->ll16 != NULL) BZFREE(s->ll16); + if (s->ll4 != NULL) BZFREE(s->ll4); + + BZFREE(strm->state); + strm->state = NULL; + + return BZ_OK; +} + + +#ifndef BZ_NO_STDIO +/*---------------------------------------------------*/ +/*--- File I/O stuff ---*/ +/*---------------------------------------------------*/ + +#define BZ_SETERR(eee) \ +{ \ + if (bzerror != NULL) *bzerror = eee; \ + if (bzf != NULL) bzf->lastErr = eee; \ +} + +typedef + struct { + FILE* handle; + Char buf[BZ_MAX_UNUSED]; + Int32 bufN; + Bool writing; + bz_stream strm; + Int32 lastErr; + Bool initialisedOk; + } + bzFile; + + +/*---------------------------------------------*/ +static Bool myfeof ( FILE* f ) +{ + Int32 c = fgetc ( f ); + if (c == EOF) return True; + ungetc ( c, f ); + return False; +} + + +/*---------------------------------------------------*/ +BZFILE* BZ_API(BZ2_bzWriteOpen) + ( int* bzerror, + FILE* f, + int blockSize100k, + int verbosity, + int workFactor ) +{ + Int32 ret; + bzFile* bzf = NULL; + + BZ_SETERR(BZ_OK); + + if (f == NULL || + (blockSize100k < 1 || blockSize100k > 9) || + (workFactor < 0 || workFactor > 250) || + (verbosity < 0 || verbosity > 4)) + { BZ_SETERR(BZ_PARAM_ERROR); return NULL; }; + + if (ferror(f)) + { BZ_SETERR(BZ_IO_ERROR); return NULL; }; + + bzf = malloc ( sizeof(bzFile) ); + if (bzf == NULL) + { BZ_SETERR(BZ_MEM_ERROR); return NULL; }; + + BZ_SETERR(BZ_OK); + bzf->initialisedOk = False; + bzf->bufN = 0; + bzf->handle = f; + bzf->writing = True; + bzf->strm.bzalloc = NULL; + bzf->strm.bzfree = NULL; + bzf->strm.opaque = NULL; + + if (workFactor == 0) workFactor = 30; + ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k, + verbosity, workFactor ); + if (ret != BZ_OK) + { BZ_SETERR(ret); free(bzf); return NULL; }; + + bzf->strm.avail_in = 0; + bzf->initialisedOk = True; + return bzf; +} + + + +/*---------------------------------------------------*/ +void BZ_API(BZ2_bzWrite) + ( int* bzerror, + BZFILE* b, + void* buf, + int len ) +{ + Int32 n, n2, ret; + bzFile* bzf = (bzFile*)b; + + BZ_SETERR(BZ_OK); + if (bzf == NULL || buf == NULL || len < 0) + { BZ_SETERR(BZ_PARAM_ERROR); return; }; + if (!(bzf->writing)) + { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; + if (ferror(bzf->handle)) + { BZ_SETERR(BZ_IO_ERROR); return; }; + + if (len == 0) + { BZ_SETERR(BZ_OK); return; }; + + bzf->strm.avail_in = len; + bzf->strm.next_in = buf; + + while (True) { + bzf->strm.avail_out = BZ_MAX_UNUSED; + bzf->strm.next_out = bzf->buf; + ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN ); + if (ret != BZ_RUN_OK) + { BZ_SETERR(ret); return; }; + + if (bzf->strm.avail_out < BZ_MAX_UNUSED) { + n = BZ_MAX_UNUSED - bzf->strm.avail_out; + n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), + n, bzf->handle ); + if (n != n2 || ferror(bzf->handle)) + { BZ_SETERR(BZ_IO_ERROR); return; }; + } + + if (bzf->strm.avail_in == 0) + { BZ_SETERR(BZ_OK); return; }; + } +} + + +/*---------------------------------------------------*/ +void BZ_API(BZ2_bzWriteClose) + ( int* bzerror, + BZFILE* b, + int abandon, + unsigned int* nbytes_in, + unsigned int* nbytes_out ) +{ + BZ2_bzWriteClose64 ( bzerror, b, abandon, + nbytes_in, NULL, nbytes_out, NULL ); +} + + +void BZ_API(BZ2_bzWriteClose64) + ( int* bzerror, + BZFILE* b, + int abandon, + unsigned int* nbytes_in_lo32, + unsigned int* nbytes_in_hi32, + unsigned int* nbytes_out_lo32, + unsigned int* nbytes_out_hi32 ) +{ + Int32 n, n2, ret; + bzFile* bzf = (bzFile*)b; + + if (bzf == NULL) + { BZ_SETERR(BZ_OK); return; }; + if (!(bzf->writing)) + { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; + if (ferror(bzf->handle)) + { BZ_SETERR(BZ_IO_ERROR); return; }; + + if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0; + if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0; + if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0; + if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0; + + if ((!abandon) && bzf->lastErr == BZ_OK) { + while (True) { + bzf->strm.avail_out = BZ_MAX_UNUSED; + bzf->strm.next_out = bzf->buf; + ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH ); + if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END) + { BZ_SETERR(ret); return; }; + + if (bzf->strm.avail_out < BZ_MAX_UNUSED) { + n = BZ_MAX_UNUSED - bzf->strm.avail_out; + n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), + n, bzf->handle ); + if (n != n2 || ferror(bzf->handle)) + { BZ_SETERR(BZ_IO_ERROR); return; }; + } + + if (ret == BZ_STREAM_END) break; + } + } + + if ( !abandon && !ferror ( bzf->handle ) ) { + fflush ( bzf->handle ); + if (ferror(bzf->handle)) + { BZ_SETERR(BZ_IO_ERROR); return; }; + } + + if (nbytes_in_lo32 != NULL) + *nbytes_in_lo32 = bzf->strm.total_in_lo32; + if (nbytes_in_hi32 != NULL) + *nbytes_in_hi32 = bzf->strm.total_in_hi32; + if (nbytes_out_lo32 != NULL) + *nbytes_out_lo32 = bzf->strm.total_out_lo32; + if (nbytes_out_hi32 != NULL) + *nbytes_out_hi32 = bzf->strm.total_out_hi32; + + BZ_SETERR(BZ_OK); + BZ2_bzCompressEnd ( &(bzf->strm) ); + free ( bzf ); +} + + +/*---------------------------------------------------*/ +BZFILE* BZ_API(BZ2_bzReadOpen) + ( int* bzerror, + FILE* f, + int verbosity, + int small, + void* unused, + int nUnused ) +{ + bzFile* bzf = NULL; + int ret; + + BZ_SETERR(BZ_OK); + + if (f == NULL || + (small != 0 && small != 1) || + (verbosity < 0 || verbosity > 4) || + (unused == NULL && nUnused != 0) || + (unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED))) + { BZ_SETERR(BZ_PARAM_ERROR); return NULL; }; + + if (ferror(f)) + { BZ_SETERR(BZ_IO_ERROR); return NULL; }; + + bzf = malloc ( sizeof(bzFile) ); + if (bzf == NULL) + { BZ_SETERR(BZ_MEM_ERROR); return NULL; }; + + BZ_SETERR(BZ_OK); + + bzf->initialisedOk = False; + bzf->handle = f; + bzf->bufN = 0; + bzf->writing = False; + bzf->strm.bzalloc = NULL; + bzf->strm.bzfree = NULL; + bzf->strm.opaque = NULL; + + while (nUnused > 0) { + bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++; + unused = ((void*)( 1 + ((UChar*)(unused)) )); + nUnused--; + } + + ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small ); + if (ret != BZ_OK) + { BZ_SETERR(ret); free(bzf); return NULL; }; + + bzf->strm.avail_in = bzf->bufN; + bzf->strm.next_in = bzf->buf; + + bzf->initialisedOk = True; + return bzf; +} + + +/*---------------------------------------------------*/ +void BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b ) +{ + bzFile* bzf = (bzFile*)b; + + BZ_SETERR(BZ_OK); + if (bzf == NULL) + { BZ_SETERR(BZ_OK); return; }; + + if (bzf->writing) + { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; + + if (bzf->initialisedOk) + (void)BZ2_bzDecompressEnd ( &(bzf->strm) ); + free ( bzf ); +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzRead) + ( int* bzerror, + BZFILE* b, + void* buf, + int len ) +{ + Int32 n, ret; + bzFile* bzf = (bzFile*)b; + + BZ_SETERR(BZ_OK); + + if (bzf == NULL || buf == NULL || len < 0) + { BZ_SETERR(BZ_PARAM_ERROR); return 0; }; + + if (bzf->writing) + { BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; }; + + if (len == 0) + { BZ_SETERR(BZ_OK); return 0; }; + + bzf->strm.avail_out = len; + bzf->strm.next_out = buf; + + while (True) { + + if (ferror(bzf->handle)) + { BZ_SETERR(BZ_IO_ERROR); return 0; }; + + if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) { + n = fread ( bzf->buf, sizeof(UChar), + BZ_MAX_UNUSED, bzf->handle ); + if (ferror(bzf->handle)) + { BZ_SETERR(BZ_IO_ERROR); return 0; }; + bzf->bufN = n; + bzf->strm.avail_in = bzf->bufN; + bzf->strm.next_in = bzf->buf; + } + + ret = BZ2_bzDecompress ( &(bzf->strm) ); + + if (ret != BZ_OK && ret != BZ_STREAM_END) + { BZ_SETERR(ret); return 0; }; + + if (ret == BZ_OK && myfeof(bzf->handle) && + bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0) + { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; }; + + if (ret == BZ_STREAM_END) + { BZ_SETERR(BZ_STREAM_END); + return len - bzf->strm.avail_out; }; + if (bzf->strm.avail_out == 0) + { BZ_SETERR(BZ_OK); return len; }; + + } + + return 0; /*not reached*/ +} + + +/*---------------------------------------------------*/ +void BZ_API(BZ2_bzReadGetUnused) + ( int* bzerror, + BZFILE* b, + void** unused, + int* nUnused ) +{ + bzFile* bzf = (bzFile*)b; + if (bzf == NULL) + { BZ_SETERR(BZ_PARAM_ERROR); return; }; + if (bzf->lastErr != BZ_STREAM_END) + { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; + if (unused == NULL || nUnused == NULL) + { BZ_SETERR(BZ_PARAM_ERROR); return; }; + + BZ_SETERR(BZ_OK); + *nUnused = bzf->strm.avail_in; + *unused = bzf->strm.next_in; +} +#endif + + +/*---------------------------------------------------*/ +/*--- Misc convenience stuff ---*/ +/*---------------------------------------------------*/ + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzBuffToBuffCompress) + ( char* dest, + unsigned int* destLen, + char* source, + unsigned int sourceLen, + int blockSize100k, + int verbosity, + int workFactor ) +{ + bz_stream strm; + int ret; + + if (dest == NULL || destLen == NULL || + source == NULL || + blockSize100k < 1 || blockSize100k > 9 || + verbosity < 0 || verbosity > 4 || + workFactor < 0 || workFactor > 250) + return BZ_PARAM_ERROR; + + if (workFactor == 0) workFactor = 30; + strm.bzalloc = NULL; + strm.bzfree = NULL; + strm.opaque = NULL; + ret = BZ2_bzCompressInit ( &strm, blockSize100k, + verbosity, workFactor ); + if (ret != BZ_OK) return ret; + + strm.next_in = source; + strm.next_out = dest; + strm.avail_in = sourceLen; + strm.avail_out = *destLen; + + ret = BZ2_bzCompress ( &strm, BZ_FINISH ); + if (ret == BZ_FINISH_OK) goto output_overflow; + if (ret != BZ_STREAM_END) goto errhandler; + + /* normal termination */ + *destLen -= strm.avail_out; + BZ2_bzCompressEnd ( &strm ); + return BZ_OK; + + output_overflow: + BZ2_bzCompressEnd ( &strm ); + return BZ_OUTBUFF_FULL; + + errhandler: + BZ2_bzCompressEnd ( &strm ); + return ret; +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzBuffToBuffDecompress) + ( char* dest, + unsigned int* destLen, + char* source, + unsigned int sourceLen, + int small, + int verbosity ) +{ + bz_stream strm; + int ret; + + if (dest == NULL || destLen == NULL || + source == NULL || + (small != 0 && small != 1) || + verbosity < 0 || verbosity > 4) + return BZ_PARAM_ERROR; + + strm.bzalloc = NULL; + strm.bzfree = NULL; + strm.opaque = NULL; + ret = BZ2_bzDecompressInit ( &strm, verbosity, small ); + if (ret != BZ_OK) return ret; + + strm.next_in = source; + strm.next_out = dest; + strm.avail_in = sourceLen; + strm.avail_out = *destLen; + + ret = BZ2_bzDecompress ( &strm ); + if (ret == BZ_OK) goto output_overflow_or_eof; + if (ret != BZ_STREAM_END) goto errhandler; + + /* normal termination */ + *destLen -= strm.avail_out; + BZ2_bzDecompressEnd ( &strm ); + return BZ_OK; + + output_overflow_or_eof: + if (strm.avail_out > 0) { + BZ2_bzDecompressEnd ( &strm ); + return BZ_UNEXPECTED_EOF; + } else { + BZ2_bzDecompressEnd ( &strm ); + return BZ_OUTBUFF_FULL; + }; + + errhandler: + BZ2_bzDecompressEnd ( &strm ); + return ret; +} + + +/*---------------------------------------------------*/ +/*-- + Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) + to support better zlib compatibility. + This code is not _officially_ part of libbzip2 (yet); + I haven't tested it, documented it, or considered the + threading-safeness of it. + If this code breaks, please contact both Yoshioka and me. +--*/ +/*---------------------------------------------------*/ + +/*---------------------------------------------------*/ +/*-- + return version like "0.9.5d, 4-Sept-1999". +--*/ +const char * BZ_API(BZ2_bzlibVersion)(void) +{ + return BZ_VERSION; +} + + +#ifndef BZ_NO_STDIO +/*---------------------------------------------------*/ + +#if defined(_WIN32) || defined(OS2) || defined(MSDOS) +# include +# include +# define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif +static +BZFILE * bzopen_or_bzdopen + ( const char *path, /* no use when bzdopen */ + int fd, /* no use when bzdopen */ + const char *mode, + int open_mode) /* bzopen: 0, bzdopen:1 */ +{ + int bzerr; + char unused[BZ_MAX_UNUSED]; + int blockSize100k = 9; + int writing = 0; + char mode2[10] = ""; + FILE *fp = NULL; + BZFILE *bzfp = NULL; + int verbosity = 0; + int workFactor = 30; + int smallMode = 0; + int nUnused = 0; + + if (mode == NULL) return NULL; + while (*mode) { + switch (*mode) { + case 'r': + writing = 0; break; + case 'w': + writing = 1; break; + case 's': + smallMode = 1; break; + default: + if (isdigit((int)(*mode))) { + blockSize100k = *mode-BZ_HDR_0; + } + } + mode++; + } + strcat(mode2, writing ? "w" : "r" ); + strcat(mode2,"b"); /* binary mode */ + + if (open_mode==0) { + if (path==NULL || strcmp(path,"")==0) { + fp = (writing ? stdout : stdin); + SET_BINARY_MODE(fp); + } else { + fp = fopen(path,mode2); + } + } else { +#ifdef BZ_STRICT_ANSI + fp = NULL; +#else + fp = fdopen(fd,mode2); +#endif + } + if (fp == NULL) return NULL; + + if (writing) { + /* Guard against total chaos and anarchy -- JRS */ + if (blockSize100k < 1) blockSize100k = 1; + if (blockSize100k > 9) blockSize100k = 9; + bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k, + verbosity,workFactor); + } else { + bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode, + unused,nUnused); + } + if (bzfp == NULL) { + if (fp != stdin && fp != stdout) fclose(fp); + return NULL; + } + return bzfp; +} + + +/*---------------------------------------------------*/ +/*-- + open file for read or write. + ex) bzopen("file","w9") + case path="" or NULL => use stdin or stdout. +--*/ +BZFILE * BZ_API(BZ2_bzopen) + ( const char *path, + const char *mode ) +{ + return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0); +} + + +/*---------------------------------------------------*/ +BZFILE * BZ_API(BZ2_bzdopen) + ( int fd, + const char *mode ) +{ + return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1); +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len ) +{ + int bzerr, nread; + if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0; + nread = BZ2_bzRead(&bzerr,b,buf,len); + if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) { + return nread; + } else { + return -1; + } +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len ) +{ + int bzerr; + + BZ2_bzWrite(&bzerr,b,buf,len); + if(bzerr == BZ_OK){ + return len; + }else{ + return -1; + } +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzflush) (BZFILE *b) +{ + /* do nothing now... */ + return 0; +} + + +/*---------------------------------------------------*/ +void BZ_API(BZ2_bzclose) (BZFILE* b) +{ + int bzerr; + FILE *fp; + + if (b==NULL) {return;} + fp = ((bzFile *)b)->handle; + if(((bzFile*)b)->writing){ + BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL); + if(bzerr != BZ_OK){ + BZ2_bzWriteClose(NULL,b,1,NULL,NULL); + } + }else{ + BZ2_bzReadClose(&bzerr,b); + } + if(fp!=stdin && fp!=stdout){ + fclose(fp); + } +} + + +/*---------------------------------------------------*/ +/*-- + return last error code +--*/ +static const char *bzerrorstrings[] = { + "OK" + ,"SEQUENCE_ERROR" + ,"PARAM_ERROR" + ,"MEM_ERROR" + ,"DATA_ERROR" + ,"DATA_ERROR_MAGIC" + ,"IO_ERROR" + ,"UNEXPECTED_EOF" + ,"OUTBUFF_FULL" + ,"CONFIG_ERROR" + ,"???" /* for future */ + ,"???" /* for future */ + ,"???" /* for future */ + ,"???" /* for future */ + ,"???" /* for future */ + ,"???" /* for future */ +}; + + +const char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum) +{ + int err = ((bzFile *)b)->lastErr; + + if(err>0) err = 0; + *errnum = err; + return bzerrorstrings[err*-1]; +} +#endif + + +/*-------------------------------------------------------------*/ +/*--- end bzlib.c ---*/ +/*-------------------------------------------------------------*/ Index: vendor/bzip2/1.0.7/bzlib.h =================================================================== --- vendor/bzip2/1.0.7/bzlib.h (nonexistent) +++ vendor/bzip2/1.0.7/bzlib.h (revision 349497) @@ -0,0 +1,282 @@ + +/*-------------------------------------------------------------*/ +/*--- Public header file for the library. ---*/ +/*--- bzlib.h ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + + +#ifndef _BZLIB_H +#define _BZLIB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define BZ_RUN 0 +#define BZ_FLUSH 1 +#define BZ_FINISH 2 + +#define BZ_OK 0 +#define BZ_RUN_OK 1 +#define BZ_FLUSH_OK 2 +#define BZ_FINISH_OK 3 +#define BZ_STREAM_END 4 +#define BZ_SEQUENCE_ERROR (-1) +#define BZ_PARAM_ERROR (-2) +#define BZ_MEM_ERROR (-3) +#define BZ_DATA_ERROR (-4) +#define BZ_DATA_ERROR_MAGIC (-5) +#define BZ_IO_ERROR (-6) +#define BZ_UNEXPECTED_EOF (-7) +#define BZ_OUTBUFF_FULL (-8) +#define BZ_CONFIG_ERROR (-9) + +typedef + struct { + char *next_in; + unsigned int avail_in; + unsigned int total_in_lo32; + unsigned int total_in_hi32; + + char *next_out; + unsigned int avail_out; + unsigned int total_out_lo32; + unsigned int total_out_hi32; + + void *state; + + void *(*bzalloc)(void *,int,int); + void (*bzfree)(void *,void *); + void *opaque; + } + bz_stream; + + +#ifndef BZ_IMPORT +#define BZ_EXPORT +#endif + +#ifndef BZ_NO_STDIO +/* Need a definitition for FILE */ +#include +#endif + +#ifdef _WIN32 +# include +# ifdef small + /* windows.h define small to char */ +# undef small +# endif +# ifdef BZ_EXPORT +# define BZ_API(func) WINAPI func +# define BZ_EXTERN extern +# else + /* import windows dll dynamically */ +# define BZ_API(func) (WINAPI * func) +# define BZ_EXTERN +# endif +#else +# define BZ_API(func) func +# define BZ_EXTERN extern +#endif + + +/*-- Core (low-level) library functions --*/ + +BZ_EXTERN int BZ_API(BZ2_bzCompressInit) ( + bz_stream* strm, + int blockSize100k, + int verbosity, + int workFactor + ); + +BZ_EXTERN int BZ_API(BZ2_bzCompress) ( + bz_stream* strm, + int action + ); + +BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) ( + bz_stream* strm + ); + +BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) ( + bz_stream *strm, + int verbosity, + int small + ); + +BZ_EXTERN int BZ_API(BZ2_bzDecompress) ( + bz_stream* strm + ); + +BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) ( + bz_stream *strm + ); + + + +/*-- High(er) level library functions --*/ + +#ifndef BZ_NO_STDIO +#define BZ_MAX_UNUSED 5000 + +typedef void BZFILE; + +BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) ( + int* bzerror, + FILE* f, + int verbosity, + int small, + void* unused, + int nUnused + ); + +BZ_EXTERN void BZ_API(BZ2_bzReadClose) ( + int* bzerror, + BZFILE* b + ); + +BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) ( + int* bzerror, + BZFILE* b, + void** unused, + int* nUnused + ); + +BZ_EXTERN int BZ_API(BZ2_bzRead) ( + int* bzerror, + BZFILE* b, + void* buf, + int len + ); + +BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) ( + int* bzerror, + FILE* f, + int blockSize100k, + int verbosity, + int workFactor + ); + +BZ_EXTERN void BZ_API(BZ2_bzWrite) ( + int* bzerror, + BZFILE* b, + void* buf, + int len + ); + +BZ_EXTERN void BZ_API(BZ2_bzWriteClose) ( + int* bzerror, + BZFILE* b, + int abandon, + unsigned int* nbytes_in, + unsigned int* nbytes_out + ); + +BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) ( + int* bzerror, + BZFILE* b, + int abandon, + unsigned int* nbytes_in_lo32, + unsigned int* nbytes_in_hi32, + unsigned int* nbytes_out_lo32, + unsigned int* nbytes_out_hi32 + ); +#endif + + +/*-- Utility functions --*/ + +BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( + char* dest, + unsigned int* destLen, + char* source, + unsigned int sourceLen, + int blockSize100k, + int verbosity, + int workFactor + ); + +BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( + char* dest, + unsigned int* destLen, + char* source, + unsigned int sourceLen, + int small, + int verbosity + ); + + +/*-- + Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) + to support better zlib compatibility. + This code is not _officially_ part of libbzip2 (yet); + I haven't tested it, documented it, or considered the + threading-safeness of it. + If this code breaks, please contact both Yoshioka and me. +--*/ + +BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) ( + void + ); + +#ifndef BZ_NO_STDIO +BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) ( + const char *path, + const char *mode + ); + +BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) ( + int fd, + const char *mode + ); + +BZ_EXTERN int BZ_API(BZ2_bzread) ( + BZFILE* b, + void* buf, + int len + ); + +BZ_EXTERN int BZ_API(BZ2_bzwrite) ( + BZFILE* b, + void* buf, + int len + ); + +BZ_EXTERN int BZ_API(BZ2_bzflush) ( + BZFILE* b + ); + +BZ_EXTERN void BZ_API(BZ2_bzclose) ( + BZFILE* b + ); + +BZ_EXTERN const char * BZ_API(BZ2_bzerror) ( + BZFILE *b, + int *errnum + ); +#endif + +#ifdef __cplusplus +} +#endif + +#endif + +/*-------------------------------------------------------------*/ +/*--- end bzlib.h ---*/ +/*-------------------------------------------------------------*/ Index: vendor/bzip2/1.0.7/bzlib_private.h =================================================================== --- vendor/bzip2/1.0.7/bzlib_private.h (nonexistent) +++ vendor/bzip2/1.0.7/bzlib_private.h (revision 349497) @@ -0,0 +1,509 @@ + +/*-------------------------------------------------------------*/ +/*--- Private header file for the library. ---*/ +/*--- bzlib_private.h ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + + +#ifndef _BZLIB_PRIVATE_H +#define _BZLIB_PRIVATE_H + +#include + +#ifndef BZ_NO_STDIO +#include +#include +#include +#endif + +#include "bzlib.h" + + + +/*-- General stuff. --*/ + +#define BZ_VERSION "1.0.7, 27-Jun-2019" + +typedef char Char; +typedef unsigned char Bool; +typedef unsigned char UChar; +typedef int Int32; +typedef unsigned int UInt32; +typedef short Int16; +typedef unsigned short UInt16; + +#define True ((Bool)1) +#define False ((Bool)0) + +#ifndef __GNUC__ +#define __inline__ /* */ +#endif + +#ifndef BZ_NO_STDIO + +extern void BZ2_bz__AssertH__fail ( int errcode ); +#define AssertH(cond,errcode) \ + { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); } + +#if BZ_DEBUG +#define AssertD(cond,msg) \ + { if (!(cond)) { \ + fprintf ( stderr, \ + "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\ + exit(1); \ + }} +#else +#define AssertD(cond,msg) /* */ +#endif + +#define VPrintf0(zf) \ + fprintf(stderr,zf) +#define VPrintf1(zf,za1) \ + fprintf(stderr,zf,za1) +#define VPrintf2(zf,za1,za2) \ + fprintf(stderr,zf,za1,za2) +#define VPrintf3(zf,za1,za2,za3) \ + fprintf(stderr,zf,za1,za2,za3) +#define VPrintf4(zf,za1,za2,za3,za4) \ + fprintf(stderr,zf,za1,za2,za3,za4) +#define VPrintf5(zf,za1,za2,za3,za4,za5) \ + fprintf(stderr,zf,za1,za2,za3,za4,za5) + +#else + +extern void bz_internal_error ( int errcode ); +#define AssertH(cond,errcode) \ + { if (!(cond)) bz_internal_error ( errcode ); } +#define AssertD(cond,msg) do { } while (0) +#define VPrintf0(zf) do { } while (0) +#define VPrintf1(zf,za1) do { } while (0) +#define VPrintf2(zf,za1,za2) do { } while (0) +#define VPrintf3(zf,za1,za2,za3) do { } while (0) +#define VPrintf4(zf,za1,za2,za3,za4) do { } while (0) +#define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0) + +#endif + + +#define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1) +#define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp)) + + +/*-- Header bytes. --*/ + +#define BZ_HDR_B 0x42 /* 'B' */ +#define BZ_HDR_Z 0x5a /* 'Z' */ +#define BZ_HDR_h 0x68 /* 'h' */ +#define BZ_HDR_0 0x30 /* '0' */ + +/*-- Constants for the back end. --*/ + +#define BZ_MAX_ALPHA_SIZE 258 +#define BZ_MAX_CODE_LEN 23 + +#define BZ_RUNA 0 +#define BZ_RUNB 1 + +#define BZ_N_GROUPS 6 +#define BZ_G_SIZE 50 +#define BZ_N_ITERS 4 + +#define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE)) + + + +/*-- Stuff for randomising repetitive blocks. --*/ + +extern Int32 BZ2_rNums[512]; + +#define BZ_RAND_DECLS \ + Int32 rNToGo; \ + Int32 rTPos \ + +#define BZ_RAND_INIT_MASK \ + s->rNToGo = 0; \ + s->rTPos = 0 \ + +#define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0) + +#define BZ_RAND_UPD_MASK \ + if (s->rNToGo == 0) { \ + s->rNToGo = BZ2_rNums[s->rTPos]; \ + s->rTPos++; \ + if (s->rTPos == 512) s->rTPos = 0; \ + } \ + s->rNToGo--; + + + +/*-- Stuff for doing CRCs. --*/ + +extern UInt32 BZ2_crc32Table[256]; + +#define BZ_INITIALISE_CRC(crcVar) \ +{ \ + crcVar = 0xffffffffL; \ +} + +#define BZ_FINALISE_CRC(crcVar) \ +{ \ + crcVar = ~(crcVar); \ +} + +#define BZ_UPDATE_CRC(crcVar,cha) \ +{ \ + crcVar = (crcVar << 8) ^ \ + BZ2_crc32Table[(crcVar >> 24) ^ \ + ((UChar)cha)]; \ +} + + + +/*-- States and modes for compression. --*/ + +#define BZ_M_IDLE 1 +#define BZ_M_RUNNING 2 +#define BZ_M_FLUSHING 3 +#define BZ_M_FINISHING 4 + +#define BZ_S_OUTPUT 1 +#define BZ_S_INPUT 2 + +#define BZ_N_RADIX 2 +#define BZ_N_QSORT 12 +#define BZ_N_SHELL 18 +#define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2) + + + + +/*-- Structure holding all the compression-side stuff. --*/ + +typedef + struct { + /* pointer back to the struct bz_stream */ + bz_stream* strm; + + /* mode this stream is in, and whether inputting */ + /* or outputting data */ + Int32 mode; + Int32 state; + + /* remembers avail_in when flush/finish requested */ + UInt32 avail_in_expect; + + /* for doing the block sorting */ + UInt32* arr1; + UInt32* arr2; + UInt32* ftab; + Int32 origPtr; + + /* aliases for arr1 and arr2 */ + UInt32* ptr; + UChar* block; + UInt16* mtfv; + UChar* zbits; + + /* for deciding when to use the fallback sorting algorithm */ + Int32 workFactor; + + /* run-length-encoding of the input */ + UInt32 state_in_ch; + Int32 state_in_len; + BZ_RAND_DECLS; + + /* input and output limits and current posns */ + Int32 nblock; + Int32 nblockMAX; + Int32 numZ; + Int32 state_out_pos; + + /* map of bytes used in block */ + Int32 nInUse; + Bool inUse[256]; + UChar unseqToSeq[256]; + + /* the buffer for bit stream creation */ + UInt32 bsBuff; + Int32 bsLive; + + /* block and combined CRCs */ + UInt32 blockCRC; + UInt32 combinedCRC; + + /* misc administratium */ + Int32 verbosity; + Int32 blockNo; + Int32 blockSize100k; + + /* stuff for coding the MTF values */ + Int32 nMTF; + Int32 mtfFreq [BZ_MAX_ALPHA_SIZE]; + UChar selector [BZ_MAX_SELECTORS]; + UChar selectorMtf[BZ_MAX_SELECTORS]; + + UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + Int32 code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + Int32 rfreq [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + /* second dimension: only 3 needed; 4 makes index calculations faster */ + UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4]; + + } + EState; + + + +/*-- externs for compression. --*/ + +extern void +BZ2_blockSort ( EState* ); + +extern void +BZ2_compressBlock ( EState*, Bool ); + +extern void +BZ2_bsInitWrite ( EState* ); + +extern void +BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 ); + +extern void +BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 ); + + + +/*-- states for decompression. --*/ + +#define BZ_X_IDLE 1 +#define BZ_X_OUTPUT 2 + +#define BZ_X_MAGIC_1 10 +#define BZ_X_MAGIC_2 11 +#define BZ_X_MAGIC_3 12 +#define BZ_X_MAGIC_4 13 +#define BZ_X_BLKHDR_1 14 +#define BZ_X_BLKHDR_2 15 +#define BZ_X_BLKHDR_3 16 +#define BZ_X_BLKHDR_4 17 +#define BZ_X_BLKHDR_5 18 +#define BZ_X_BLKHDR_6 19 +#define BZ_X_BCRC_1 20 +#define BZ_X_BCRC_2 21 +#define BZ_X_BCRC_3 22 +#define BZ_X_BCRC_4 23 +#define BZ_X_RANDBIT 24 +#define BZ_X_ORIGPTR_1 25 +#define BZ_X_ORIGPTR_2 26 +#define BZ_X_ORIGPTR_3 27 +#define BZ_X_MAPPING_1 28 +#define BZ_X_MAPPING_2 29 +#define BZ_X_SELECTOR_1 30 +#define BZ_X_SELECTOR_2 31 +#define BZ_X_SELECTOR_3 32 +#define BZ_X_CODING_1 33 +#define BZ_X_CODING_2 34 +#define BZ_X_CODING_3 35 +#define BZ_X_MTF_1 36 +#define BZ_X_MTF_2 37 +#define BZ_X_MTF_3 38 +#define BZ_X_MTF_4 39 +#define BZ_X_MTF_5 40 +#define BZ_X_MTF_6 41 +#define BZ_X_ENDHDR_2 42 +#define BZ_X_ENDHDR_3 43 +#define BZ_X_ENDHDR_4 44 +#define BZ_X_ENDHDR_5 45 +#define BZ_X_ENDHDR_6 46 +#define BZ_X_CCRC_1 47 +#define BZ_X_CCRC_2 48 +#define BZ_X_CCRC_3 49 +#define BZ_X_CCRC_4 50 + + + +/*-- Constants for the fast MTF decoder. --*/ + +#define MTFA_SIZE 4096 +#define MTFL_SIZE 16 + + + +/*-- Structure holding all the decompression-side stuff. --*/ + +typedef + struct { + /* pointer back to the struct bz_stream */ + bz_stream* strm; + + /* state indicator for this stream */ + Int32 state; + + /* for doing the final run-length decoding */ + UChar state_out_ch; + Int32 state_out_len; + Bool blockRandomised; + BZ_RAND_DECLS; + + /* the buffer for bit stream reading */ + UInt32 bsBuff; + Int32 bsLive; + + /* misc administratium */ + Int32 blockSize100k; + Bool smallDecompress; + Int32 currBlockNo; + Int32 verbosity; + + /* for undoing the Burrows-Wheeler transform */ + Int32 origPtr; + UInt32 tPos; + Int32 k0; + Int32 unzftab[256]; + Int32 nblock_used; + Int32 cftab[257]; + Int32 cftabCopy[257]; + + /* for undoing the Burrows-Wheeler transform (FAST) */ + UInt32 *tt; + + /* for undoing the Burrows-Wheeler transform (SMALL) */ + UInt16 *ll16; + UChar *ll4; + + /* stored and calculated CRCs */ + UInt32 storedBlockCRC; + UInt32 storedCombinedCRC; + UInt32 calculatedBlockCRC; + UInt32 calculatedCombinedCRC; + + /* map of bytes used in block */ + Int32 nInUse; + Bool inUse[256]; + Bool inUse16[16]; + UChar seqToUnseq[256]; + + /* for decoding the MTF values */ + UChar mtfa [MTFA_SIZE]; + Int32 mtfbase[256 / MTFL_SIZE]; + UChar selector [BZ_MAX_SELECTORS]; + UChar selectorMtf[BZ_MAX_SELECTORS]; + UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + + Int32 limit [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + Int32 base [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + Int32 perm [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + Int32 minLens[BZ_N_GROUPS]; + + /* save area for scalars in the main decompress code */ + Int32 save_i; + Int32 save_j; + Int32 save_t; + Int32 save_alphaSize; + Int32 save_nGroups; + Int32 save_nSelectors; + Int32 save_EOB; + Int32 save_groupNo; + Int32 save_groupPos; + Int32 save_nextSym; + Int32 save_nblockMAX; + Int32 save_nblock; + Int32 save_es; + Int32 save_N; + Int32 save_curr; + Int32 save_zt; + Int32 save_zn; + Int32 save_zvec; + Int32 save_zj; + Int32 save_gSel; + Int32 save_gMinlen; + Int32* save_gLimit; + Int32* save_gBase; + Int32* save_gPerm; + + } + DState; + + + +/*-- Macros for decompression. --*/ + +#define BZ_GET_FAST(cccc) \ + /* c_tPos is unsigned, hence test < 0 is pointless. */ \ + if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ + s->tPos = s->tt[s->tPos]; \ + cccc = (UChar)(s->tPos & 0xff); \ + s->tPos >>= 8; + +#define BZ_GET_FAST_C(cccc) \ + /* c_tPos is unsigned, hence test < 0 is pointless. */ \ + if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \ + c_tPos = c_tt[c_tPos]; \ + cccc = (UChar)(c_tPos & 0xff); \ + c_tPos >>= 8; + +#define SET_LL4(i,n) \ + { if (((i) & 0x1) == 0) \ + s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else \ + s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4); \ + } + +#define GET_LL4(i) \ + ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF) + +#define SET_LL(i,n) \ + { s->ll16[i] = (UInt16)(n & 0x0000ffff); \ + SET_LL4(i, n >> 16); \ + } + +#define GET_LL(i) \ + (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16)) + +#define BZ_GET_SMALL(cccc) \ + /* c_tPos is unsigned, hence test < 0 is pointless. */ \ + if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ + cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \ + s->tPos = GET_LL(s->tPos); + + +/*-- externs for decompression. --*/ + +extern Int32 +BZ2_indexIntoF ( Int32, Int32* ); + +extern Int32 +BZ2_decompress ( DState* ); + +extern void +BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*, + Int32, Int32, Int32 ); + + +#endif + + +/*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/ + +#ifdef BZ_NO_STDIO +#ifndef NULL +#define NULL 0 +#endif +#endif + + +/*-------------------------------------------------------------*/ +/*--- end bzlib_private.h ---*/ +/*-------------------------------------------------------------*/ Index: vendor/bzip2/1.0.7/compress.c =================================================================== --- vendor/bzip2/1.0.7/compress.c (nonexistent) +++ vendor/bzip2/1.0.7/compress.c (revision 349497) @@ -0,0 +1,672 @@ + +/*-------------------------------------------------------------*/ +/*--- Compression machinery (not incl block sorting) ---*/ +/*--- compress.c ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + + +/* CHANGES + 0.9.0 -- original version. + 0.9.0a/b -- no changes in this file. + 0.9.0c -- changed setting of nGroups in sendMTFValues() + so as to do a bit better on small files +*/ + +#include "bzlib_private.h" + + +/*---------------------------------------------------*/ +/*--- Bit stream I/O ---*/ +/*---------------------------------------------------*/ + +/*---------------------------------------------------*/ +void BZ2_bsInitWrite ( EState* s ) +{ + s->bsLive = 0; + s->bsBuff = 0; +} + + +/*---------------------------------------------------*/ +static +void bsFinishWrite ( EState* s ) +{ + while (s->bsLive > 0) { + s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24); + s->numZ++; + s->bsBuff <<= 8; + s->bsLive -= 8; + } +} + + +/*---------------------------------------------------*/ +#define bsNEEDW(nz) \ +{ \ + while (s->bsLive >= 8) { \ + s->zbits[s->numZ] \ + = (UChar)(s->bsBuff >> 24); \ + s->numZ++; \ + s->bsBuff <<= 8; \ + s->bsLive -= 8; \ + } \ +} + + +/*---------------------------------------------------*/ +static +__inline__ +void bsW ( EState* s, Int32 n, UInt32 v ) +{ + bsNEEDW ( n ); + s->bsBuff |= (v << (32 - s->bsLive - n)); + s->bsLive += n; +} + + +/*---------------------------------------------------*/ +static +void bsPutUInt32 ( EState* s, UInt32 u ) +{ + bsW ( s, 8, (u >> 24) & 0xffL ); + bsW ( s, 8, (u >> 16) & 0xffL ); + bsW ( s, 8, (u >> 8) & 0xffL ); + bsW ( s, 8, u & 0xffL ); +} + + +/*---------------------------------------------------*/ +static +void bsPutUChar ( EState* s, UChar c ) +{ + bsW( s, 8, (UInt32)c ); +} + + +/*---------------------------------------------------*/ +/*--- The back end proper ---*/ +/*---------------------------------------------------*/ + +/*---------------------------------------------------*/ +static +void makeMaps_e ( EState* s ) +{ + Int32 i; + s->nInUse = 0; + for (i = 0; i < 256; i++) + if (s->inUse[i]) { + s->unseqToSeq[i] = s->nInUse; + s->nInUse++; + } +} + + +/*---------------------------------------------------*/ +static +void generateMTFValues ( EState* s ) +{ + UChar yy[256]; + Int32 i, j; + Int32 zPend; + Int32 wr; + Int32 EOB; + + /* + After sorting (eg, here), + s->arr1 [ 0 .. s->nblock-1 ] holds sorted order, + and + ((UChar*)s->arr2) [ 0 .. s->nblock-1 ] + holds the original block data. + + The first thing to do is generate the MTF values, + and put them in + ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ]. + Because there are strictly fewer or equal MTF values + than block values, ptr values in this area are overwritten + with MTF values only when they are no longer needed. + + The final compressed bitstream is generated into the + area starting at + (UChar*) (&((UChar*)s->arr2)[s->nblock]) + + These storage aliases are set up in bzCompressInit(), + except for the last one, which is arranged in + compressBlock(). + */ + UInt32* ptr = s->ptr; + UChar* block = s->block; + UInt16* mtfv = s->mtfv; + + makeMaps_e ( s ); + EOB = s->nInUse+1; + + for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0; + + wr = 0; + zPend = 0; + for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i; + + for (i = 0; i < s->nblock; i++) { + UChar ll_i; + AssertD ( wr <= i, "generateMTFValues(1)" ); + j = ptr[i]-1; if (j < 0) j += s->nblock; + ll_i = s->unseqToSeq[block[j]]; + AssertD ( ll_i < s->nInUse, "generateMTFValues(2a)" ); + + if (yy[0] == ll_i) { + zPend++; + } else { + + if (zPend > 0) { + zPend--; + while (True) { + if (zPend & 1) { + mtfv[wr] = BZ_RUNB; wr++; + s->mtfFreq[BZ_RUNB]++; + } else { + mtfv[wr] = BZ_RUNA; wr++; + s->mtfFreq[BZ_RUNA]++; + } + if (zPend < 2) break; + zPend = (zPend - 2) / 2; + }; + zPend = 0; + } + { + register UChar rtmp; + register UChar* ryy_j; + register UChar rll_i; + rtmp = yy[1]; + yy[1] = yy[0]; + ryy_j = &(yy[1]); + rll_i = ll_i; + while ( rll_i != rtmp ) { + register UChar rtmp2; + ryy_j++; + rtmp2 = rtmp; + rtmp = *ryy_j; + *ryy_j = rtmp2; + }; + yy[0] = rtmp; + j = ryy_j - &(yy[0]); + mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++; + } + + } + } + + if (zPend > 0) { + zPend--; + while (True) { + if (zPend & 1) { + mtfv[wr] = BZ_RUNB; wr++; + s->mtfFreq[BZ_RUNB]++; + } else { + mtfv[wr] = BZ_RUNA; wr++; + s->mtfFreq[BZ_RUNA]++; + } + if (zPend < 2) break; + zPend = (zPend - 2) / 2; + }; + zPend = 0; + } + + mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++; + + s->nMTF = wr; +} + + +/*---------------------------------------------------*/ +#define BZ_LESSER_ICOST 0 +#define BZ_GREATER_ICOST 15 + +static +void sendMTFValues ( EState* s ) +{ + Int32 v, t, i, j, gs, ge, totc, bt, bc, iter; + Int32 nSelectors, alphaSize, minLen, maxLen, selCtr; + Int32 nGroups, nBytes; + + /*-- + UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + is a global since the decoder also needs it. + + Int32 code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + Int32 rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + are also globals only used in this proc. + Made global to keep stack frame size small. + --*/ + + + UInt16 cost[BZ_N_GROUPS]; + Int32 fave[BZ_N_GROUPS]; + + UInt16* mtfv = s->mtfv; + + if (s->verbosity >= 3) + VPrintf3( " %d in block, %d after MTF & 1-2 coding, " + "%d+2 syms in use\n", + s->nblock, s->nMTF, s->nInUse ); + + alphaSize = s->nInUse+2; + for (t = 0; t < BZ_N_GROUPS; t++) + for (v = 0; v < alphaSize; v++) + s->len[t][v] = BZ_GREATER_ICOST; + + /*--- Decide how many coding tables to use ---*/ + AssertH ( s->nMTF > 0, 3001 ); + if (s->nMTF < 200) nGroups = 2; else + if (s->nMTF < 600) nGroups = 3; else + if (s->nMTF < 1200) nGroups = 4; else + if (s->nMTF < 2400) nGroups = 5; else + nGroups = 6; + + /*--- Generate an initial set of coding tables ---*/ + { + Int32 nPart, remF, tFreq, aFreq; + + nPart = nGroups; + remF = s->nMTF; + gs = 0; + while (nPart > 0) { + tFreq = remF / nPart; + ge = gs-1; + aFreq = 0; + while (aFreq < tFreq && ge < alphaSize-1) { + ge++; + aFreq += s->mtfFreq[ge]; + } + + if (ge > gs + && nPart != nGroups && nPart != 1 + && ((nGroups-nPart) % 2 == 1)) { + aFreq -= s->mtfFreq[ge]; + ge--; + } + + if (s->verbosity >= 3) + VPrintf5( " initial group %d, [%d .. %d], " + "has %d syms (%4.1f%%)\n", + nPart, gs, ge, aFreq, + (100.0 * (float)aFreq) / (float)(s->nMTF) ); + + for (v = 0; v < alphaSize; v++) + if (v >= gs && v <= ge) + s->len[nPart-1][v] = BZ_LESSER_ICOST; else + s->len[nPart-1][v] = BZ_GREATER_ICOST; + + nPart--; + gs = ge+1; + remF -= aFreq; + } + } + + /*--- + Iterate up to BZ_N_ITERS times to improve the tables. + ---*/ + for (iter = 0; iter < BZ_N_ITERS; iter++) { + + for (t = 0; t < nGroups; t++) fave[t] = 0; + + for (t = 0; t < nGroups; t++) + for (v = 0; v < alphaSize; v++) + s->rfreq[t][v] = 0; + + /*--- + Set up an auxiliary length table which is used to fast-track + the common case (nGroups == 6). + ---*/ + if (nGroups == 6) { + for (v = 0; v < alphaSize; v++) { + s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v]; + s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v]; + s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v]; + } + } + + nSelectors = 0; + totc = 0; + gs = 0; + while (True) { + + /*--- Set group start & end marks. --*/ + if (gs >= s->nMTF) break; + ge = gs + BZ_G_SIZE - 1; + if (ge >= s->nMTF) ge = s->nMTF-1; + + /*-- + Calculate the cost of this group as coded + by each of the coding tables. + --*/ + for (t = 0; t < nGroups; t++) cost[t] = 0; + + if (nGroups == 6 && 50 == ge-gs+1) { + /*--- fast track the common case ---*/ + register UInt32 cost01, cost23, cost45; + register UInt16 icv; + cost01 = cost23 = cost45 = 0; + +# define BZ_ITER(nn) \ + icv = mtfv[gs+(nn)]; \ + cost01 += s->len_pack[icv][0]; \ + cost23 += s->len_pack[icv][1]; \ + cost45 += s->len_pack[icv][2]; \ + + BZ_ITER(0); BZ_ITER(1); BZ_ITER(2); BZ_ITER(3); BZ_ITER(4); + BZ_ITER(5); BZ_ITER(6); BZ_ITER(7); BZ_ITER(8); BZ_ITER(9); + BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14); + BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19); + BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24); + BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29); + BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34); + BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39); + BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44); + BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49); + +# undef BZ_ITER + + cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16; + cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16; + cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16; + + } else { + /*--- slow version which correctly handles all situations ---*/ + for (i = gs; i <= ge; i++) { + UInt16 icv = mtfv[i]; + for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv]; + } + } + + /*-- + Find the coding table which is best for this group, + and record its identity in the selector table. + --*/ + bc = 999999999; bt = -1; + for (t = 0; t < nGroups; t++) + if (cost[t] < bc) { bc = cost[t]; bt = t; }; + totc += bc; + fave[bt]++; + s->selector[nSelectors] = bt; + nSelectors++; + + /*-- + Increment the symbol frequencies for the selected table. + --*/ + if (nGroups == 6 && 50 == ge-gs+1) { + /*--- fast track the common case ---*/ + +# define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++ + + BZ_ITUR(0); BZ_ITUR(1); BZ_ITUR(2); BZ_ITUR(3); BZ_ITUR(4); + BZ_ITUR(5); BZ_ITUR(6); BZ_ITUR(7); BZ_ITUR(8); BZ_ITUR(9); + BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14); + BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19); + BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24); + BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29); + BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34); + BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39); + BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44); + BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49); + +# undef BZ_ITUR + + } else { + /*--- slow version which correctly handles all situations ---*/ + for (i = gs; i <= ge; i++) + s->rfreq[bt][ mtfv[i] ]++; + } + + gs = ge+1; + } + if (s->verbosity >= 3) { + VPrintf2 ( " pass %d: size is %d, grp uses are ", + iter+1, totc/8 ); + for (t = 0; t < nGroups; t++) + VPrintf1 ( "%d ", fave[t] ); + VPrintf0 ( "\n" ); + } + + /*-- + Recompute the tables based on the accumulated frequencies. + --*/ + /* maxLen was changed from 20 to 17 in bzip2-1.0.3. See + comment in huffman.c for details. */ + for (t = 0; t < nGroups; t++) + BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]), + alphaSize, 17 /*20*/ ); + } + + + AssertH( nGroups < 8, 3002 ); + AssertH( nSelectors < 32768 && + nSelectors <= (2 + (900000 / BZ_G_SIZE)), + 3003 ); + + + /*--- Compute MTF values for the selectors. ---*/ + { + UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp; + for (i = 0; i < nGroups; i++) pos[i] = i; + for (i = 0; i < nSelectors; i++) { + ll_i = s->selector[i]; + j = 0; + tmp = pos[j]; + while ( ll_i != tmp ) { + j++; + tmp2 = tmp; + tmp = pos[j]; + pos[j] = tmp2; + }; + pos[0] = tmp; + s->selectorMtf[i] = j; + } + }; + + /*--- Assign actual codes for the tables. --*/ + for (t = 0; t < nGroups; t++) { + minLen = 32; + maxLen = 0; + for (i = 0; i < alphaSize; i++) { + if (s->len[t][i] > maxLen) maxLen = s->len[t][i]; + if (s->len[t][i] < minLen) minLen = s->len[t][i]; + } + AssertH ( !(maxLen > 17 /*20*/ ), 3004 ); + AssertH ( !(minLen < 1), 3005 ); + BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]), + minLen, maxLen, alphaSize ); + } + + /*--- Transmit the mapping table. ---*/ + { + Bool inUse16[16]; + for (i = 0; i < 16; i++) { + inUse16[i] = False; + for (j = 0; j < 16; j++) + if (s->inUse[i * 16 + j]) inUse16[i] = True; + } + + nBytes = s->numZ; + for (i = 0; i < 16; i++) + if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0); + + for (i = 0; i < 16; i++) + if (inUse16[i]) + for (j = 0; j < 16; j++) { + if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0); + } + + if (s->verbosity >= 3) + VPrintf1( " bytes: mapping %d, ", s->numZ-nBytes ); + } + + /*--- Now the selectors. ---*/ + nBytes = s->numZ; + bsW ( s, 3, nGroups ); + bsW ( s, 15, nSelectors ); + for (i = 0; i < nSelectors; i++) { + for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1); + bsW(s,1,0); + } + if (s->verbosity >= 3) + VPrintf1( "selectors %d, ", s->numZ-nBytes ); + + /*--- Now the coding tables. ---*/ + nBytes = s->numZ; + + for (t = 0; t < nGroups; t++) { + Int32 curr = s->len[t][0]; + bsW ( s, 5, curr ); + for (i = 0; i < alphaSize; i++) { + while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ }; + while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ }; + bsW ( s, 1, 0 ); + } + } + + if (s->verbosity >= 3) + VPrintf1 ( "code lengths %d, ", s->numZ-nBytes ); + + /*--- And finally, the block data proper ---*/ + nBytes = s->numZ; + selCtr = 0; + gs = 0; + while (True) { + if (gs >= s->nMTF) break; + ge = gs + BZ_G_SIZE - 1; + if (ge >= s->nMTF) ge = s->nMTF-1; + AssertH ( s->selector[selCtr] < nGroups, 3006 ); + + if (nGroups == 6 && 50 == ge-gs+1) { + /*--- fast track the common case ---*/ + UInt16 mtfv_i; + UChar* s_len_sel_selCtr + = &(s->len[s->selector[selCtr]][0]); + Int32* s_code_sel_selCtr + = &(s->code[s->selector[selCtr]][0]); + +# define BZ_ITAH(nn) \ + mtfv_i = mtfv[gs+(nn)]; \ + bsW ( s, \ + s_len_sel_selCtr[mtfv_i], \ + s_code_sel_selCtr[mtfv_i] ) + + BZ_ITAH(0); BZ_ITAH(1); BZ_ITAH(2); BZ_ITAH(3); BZ_ITAH(4); + BZ_ITAH(5); BZ_ITAH(6); BZ_ITAH(7); BZ_ITAH(8); BZ_ITAH(9); + BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14); + BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19); + BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24); + BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29); + BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34); + BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39); + BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44); + BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49); + +# undef BZ_ITAH + + } else { + /*--- slow version which correctly handles all situations ---*/ + for (i = gs; i <= ge; i++) { + bsW ( s, + s->len [s->selector[selCtr]] [mtfv[i]], + s->code [s->selector[selCtr]] [mtfv[i]] ); + } + } + + + gs = ge+1; + selCtr++; + } + AssertH( selCtr == nSelectors, 3007 ); + + if (s->verbosity >= 3) + VPrintf1( "codes %d\n", s->numZ-nBytes ); +} + + +/*---------------------------------------------------*/ +void BZ2_compressBlock ( EState* s, Bool is_last_block ) +{ + if (s->nblock > 0) { + + BZ_FINALISE_CRC ( s->blockCRC ); + s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31); + s->combinedCRC ^= s->blockCRC; + if (s->blockNo > 1) s->numZ = 0; + + if (s->verbosity >= 2) + VPrintf4( " block %d: crc = 0x%08x, " + "combined CRC = 0x%08x, size = %d\n", + s->blockNo, s->blockCRC, s->combinedCRC, s->nblock ); + + BZ2_blockSort ( s ); + } + + s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]); + + /*-- If this is the first block, create the stream header. --*/ + if (s->blockNo == 1) { + BZ2_bsInitWrite ( s ); + bsPutUChar ( s, BZ_HDR_B ); + bsPutUChar ( s, BZ_HDR_Z ); + bsPutUChar ( s, BZ_HDR_h ); + bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) ); + } + + if (s->nblock > 0) { + + bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 ); + bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 ); + bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 ); + + /*-- Now the block's CRC, so it is in a known place. --*/ + bsPutUInt32 ( s, s->blockCRC ); + + /*-- + Now a single bit indicating (non-)randomisation. + As of version 0.9.5, we use a better sorting algorithm + which makes randomisation unnecessary. So always set + the randomised bit to 'no'. Of course, the decoder + still needs to be able to handle randomised blocks + so as to maintain backwards compatibility with + older versions of bzip2. + --*/ + bsW(s,1,0); + + bsW ( s, 24, s->origPtr ); + generateMTFValues ( s ); + sendMTFValues ( s ); + } + + + /*-- If this is the last block, add the stream trailer. --*/ + if (is_last_block) { + + bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 ); + bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 ); + bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 ); + bsPutUInt32 ( s, s->combinedCRC ); + if (s->verbosity >= 2) + VPrintf1( " final combined CRC = 0x%08x\n ", s->combinedCRC ); + bsFinishWrite ( s ); + } +} + + +/*-------------------------------------------------------------*/ +/*--- end compress.c ---*/ +/*-------------------------------------------------------------*/ Index: vendor/bzip2/1.0.7/crctable.c =================================================================== --- vendor/bzip2/1.0.7/crctable.c (nonexistent) +++ vendor/bzip2/1.0.7/crctable.c (revision 349497) @@ -0,0 +1,104 @@ + +/*-------------------------------------------------------------*/ +/*--- Table for doing CRCs ---*/ +/*--- crctable.c ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + + +#include "bzlib_private.h" + +/*-- + I think this is an implementation of the AUTODIN-II, + Ethernet & FDDI 32-bit CRC standard. Vaguely derived + from code by Rob Warnock, in Section 51 of the + comp.compression FAQ. +--*/ + +UInt32 BZ2_crc32Table[256] = { + + /*-- Ugly, innit? --*/ + + 0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L, + 0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L, + 0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L, + 0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL, + 0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L, + 0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L, + 0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L, + 0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL, + 0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L, + 0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L, + 0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L, + 0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL, + 0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L, + 0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L, + 0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L, + 0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL, + 0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL, + 0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L, + 0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L, + 0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL, + 0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL, + 0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L, + 0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L, + 0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL, + 0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL, + 0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L, + 0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L, + 0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL, + 0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL, + 0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L, + 0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L, + 0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL, + 0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L, + 0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL, + 0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL, + 0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L, + 0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L, + 0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL, + 0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL, + 0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L, + 0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L, + 0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL, + 0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL, + 0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L, + 0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L, + 0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL, + 0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL, + 0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L, + 0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L, + 0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL, + 0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L, + 0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L, + 0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L, + 0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL, + 0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L, + 0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L, + 0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L, + 0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL, + 0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L, + 0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L, + 0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L, + 0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL, + 0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L, + 0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L +}; + + +/*-------------------------------------------------------------*/ +/*--- end crctable.c ---*/ +/*-------------------------------------------------------------*/ Index: vendor/bzip2/1.0.7/decompress.c =================================================================== --- vendor/bzip2/1.0.7/decompress.c (nonexistent) +++ vendor/bzip2/1.0.7/decompress.c (revision 349497) @@ -0,0 +1,646 @@ + +/*-------------------------------------------------------------*/ +/*--- Decompression machinery ---*/ +/*--- decompress.c ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + + +#include "bzlib_private.h" + + +/*---------------------------------------------------*/ +static +void makeMaps_d ( DState* s ) +{ + Int32 i; + s->nInUse = 0; + for (i = 0; i < 256; i++) + if (s->inUse[i]) { + s->seqToUnseq[s->nInUse] = i; + s->nInUse++; + } +} + + +/*---------------------------------------------------*/ +#define RETURN(rrr) \ + { retVal = rrr; goto save_state_and_return; }; + +#define GET_BITS(lll,vvv,nnn) \ + case lll: s->state = lll; \ + while (True) { \ + if (s->bsLive >= nnn) { \ + UInt32 v; \ + v = (s->bsBuff >> \ + (s->bsLive-nnn)) & ((1 << nnn)-1); \ + s->bsLive -= nnn; \ + vvv = v; \ + break; \ + } \ + if (s->strm->avail_in == 0) RETURN(BZ_OK); \ + s->bsBuff \ + = (s->bsBuff << 8) | \ + ((UInt32) \ + (*((UChar*)(s->strm->next_in)))); \ + s->bsLive += 8; \ + s->strm->next_in++; \ + s->strm->avail_in--; \ + s->strm->total_in_lo32++; \ + if (s->strm->total_in_lo32 == 0) \ + s->strm->total_in_hi32++; \ + } + +#define GET_UCHAR(lll,uuu) \ + GET_BITS(lll,uuu,8) + +#define GET_BIT(lll,uuu) \ + GET_BITS(lll,uuu,1) + +/*---------------------------------------------------*/ +#define GET_MTF_VAL(label1,label2,lval) \ +{ \ + if (groupPos == 0) { \ + groupNo++; \ + if (groupNo >= nSelectors) \ + RETURN(BZ_DATA_ERROR); \ + groupPos = BZ_G_SIZE; \ + gSel = s->selector[groupNo]; \ + gMinlen = s->minLens[gSel]; \ + gLimit = &(s->limit[gSel][0]); \ + gPerm = &(s->perm[gSel][0]); \ + gBase = &(s->base[gSel][0]); \ + } \ + groupPos--; \ + zn = gMinlen; \ + GET_BITS(label1, zvec, zn); \ + while (1) { \ + if (zn > 20 /* the longest code */) \ + RETURN(BZ_DATA_ERROR); \ + if (zvec <= gLimit[zn]) break; \ + zn++; \ + GET_BIT(label2, zj); \ + zvec = (zvec << 1) | zj; \ + }; \ + if (zvec - gBase[zn] < 0 \ + || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE) \ + RETURN(BZ_DATA_ERROR); \ + lval = gPerm[zvec - gBase[zn]]; \ +} + + +/*---------------------------------------------------*/ +Int32 BZ2_decompress ( DState* s ) +{ + UChar uc; + Int32 retVal; + Int32 minLen, maxLen; + bz_stream* strm = s->strm; + + /* stuff that needs to be saved/restored */ + Int32 i; + Int32 j; + Int32 t; + Int32 alphaSize; + Int32 nGroups; + Int32 nSelectors; + Int32 EOB; + Int32 groupNo; + Int32 groupPos; + Int32 nextSym; + Int32 nblockMAX; + Int32 nblock; + Int32 es; + Int32 N; + Int32 curr; + Int32 zt; + Int32 zn; + Int32 zvec; + Int32 zj; + Int32 gSel; + Int32 gMinlen; + Int32* gLimit; + Int32* gBase; + Int32* gPerm; + + if (s->state == BZ_X_MAGIC_1) { + /*initialise the save area*/ + s->save_i = 0; + s->save_j = 0; + s->save_t = 0; + s->save_alphaSize = 0; + s->save_nGroups = 0; + s->save_nSelectors = 0; + s->save_EOB = 0; + s->save_groupNo = 0; + s->save_groupPos = 0; + s->save_nextSym = 0; + s->save_nblockMAX = 0; + s->save_nblock = 0; + s->save_es = 0; + s->save_N = 0; + s->save_curr = 0; + s->save_zt = 0; + s->save_zn = 0; + s->save_zvec = 0; + s->save_zj = 0; + s->save_gSel = 0; + s->save_gMinlen = 0; + s->save_gLimit = NULL; + s->save_gBase = NULL; + s->save_gPerm = NULL; + } + + /*restore from the save area*/ + i = s->save_i; + j = s->save_j; + t = s->save_t; + alphaSize = s->save_alphaSize; + nGroups = s->save_nGroups; + nSelectors = s->save_nSelectors; + EOB = s->save_EOB; + groupNo = s->save_groupNo; + groupPos = s->save_groupPos; + nextSym = s->save_nextSym; + nblockMAX = s->save_nblockMAX; + nblock = s->save_nblock; + es = s->save_es; + N = s->save_N; + curr = s->save_curr; + zt = s->save_zt; + zn = s->save_zn; + zvec = s->save_zvec; + zj = s->save_zj; + gSel = s->save_gSel; + gMinlen = s->save_gMinlen; + gLimit = s->save_gLimit; + gBase = s->save_gBase; + gPerm = s->save_gPerm; + + retVal = BZ_OK; + + switch (s->state) { + + GET_UCHAR(BZ_X_MAGIC_1, uc); + if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC); + + GET_UCHAR(BZ_X_MAGIC_2, uc); + if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC); + + GET_UCHAR(BZ_X_MAGIC_3, uc) + if (uc != BZ_HDR_h) RETURN(BZ_DATA_ERROR_MAGIC); + + GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8) + if (s->blockSize100k < (BZ_HDR_0 + 1) || + s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC); + s->blockSize100k -= BZ_HDR_0; + + if (s->smallDecompress) { + s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) ); + s->ll4 = BZALLOC( + ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar) + ); + if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR); + } else { + s->tt = BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) ); + if (s->tt == NULL) RETURN(BZ_MEM_ERROR); + } + + GET_UCHAR(BZ_X_BLKHDR_1, uc); + + if (uc == 0x17) goto endhdr_2; + if (uc != 0x31) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_BLKHDR_2, uc); + if (uc != 0x41) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_BLKHDR_3, uc); + if (uc != 0x59) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_BLKHDR_4, uc); + if (uc != 0x26) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_BLKHDR_5, uc); + if (uc != 0x53) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_BLKHDR_6, uc); + if (uc != 0x59) RETURN(BZ_DATA_ERROR); + + s->currBlockNo++; + if (s->verbosity >= 2) + VPrintf1 ( "\n [%d: huff+mtf ", s->currBlockNo ); + + s->storedBlockCRC = 0; + GET_UCHAR(BZ_X_BCRC_1, uc); + s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); + GET_UCHAR(BZ_X_BCRC_2, uc); + s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); + GET_UCHAR(BZ_X_BCRC_3, uc); + s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); + GET_UCHAR(BZ_X_BCRC_4, uc); + s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); + + GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1); + + s->origPtr = 0; + GET_UCHAR(BZ_X_ORIGPTR_1, uc); + s->origPtr = (s->origPtr << 8) | ((Int32)uc); + GET_UCHAR(BZ_X_ORIGPTR_2, uc); + s->origPtr = (s->origPtr << 8) | ((Int32)uc); + GET_UCHAR(BZ_X_ORIGPTR_3, uc); + s->origPtr = (s->origPtr << 8) | ((Int32)uc); + + if (s->origPtr < 0) + RETURN(BZ_DATA_ERROR); + if (s->origPtr > 10 + 100000*s->blockSize100k) + RETURN(BZ_DATA_ERROR); + + /*--- Receive the mapping table ---*/ + for (i = 0; i < 16; i++) { + GET_BIT(BZ_X_MAPPING_1, uc); + if (uc == 1) + s->inUse16[i] = True; else + s->inUse16[i] = False; + } + + for (i = 0; i < 256; i++) s->inUse[i] = False; + + for (i = 0; i < 16; i++) + if (s->inUse16[i]) + for (j = 0; j < 16; j++) { + GET_BIT(BZ_X_MAPPING_2, uc); + if (uc == 1) s->inUse[i * 16 + j] = True; + } + makeMaps_d ( s ); + if (s->nInUse == 0) RETURN(BZ_DATA_ERROR); + alphaSize = s->nInUse+2; + + /*--- Now the selectors ---*/ + GET_BITS(BZ_X_SELECTOR_1, nGroups, 3); + if (nGroups < 2 || nGroups > BZ_N_GROUPS) RETURN(BZ_DATA_ERROR); + GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15); + if (nSelectors < 1 || nSelectors > BZ_MAX_SELECTORS) RETURN(BZ_DATA_ERROR); + for (i = 0; i < nSelectors; i++) { + j = 0; + while (True) { + GET_BIT(BZ_X_SELECTOR_3, uc); + if (uc == 0) break; + j++; + if (j >= nGroups) RETURN(BZ_DATA_ERROR); + } + s->selectorMtf[i] = j; + } + + /*--- Undo the MTF values for the selectors. ---*/ + { + UChar pos[BZ_N_GROUPS], tmp, v; + for (v = 0; v < nGroups; v++) pos[v] = v; + + for (i = 0; i < nSelectors; i++) { + v = s->selectorMtf[i]; + tmp = pos[v]; + while (v > 0) { pos[v] = pos[v-1]; v--; } + pos[0] = tmp; + s->selector[i] = tmp; + } + } + + /*--- Now the coding tables ---*/ + for (t = 0; t < nGroups; t++) { + GET_BITS(BZ_X_CODING_1, curr, 5); + for (i = 0; i < alphaSize; i++) { + while (True) { + if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR); + GET_BIT(BZ_X_CODING_2, uc); + if (uc == 0) break; + GET_BIT(BZ_X_CODING_3, uc); + if (uc == 0) curr++; else curr--; + } + s->len[t][i] = curr; + } + } + + /*--- Create the Huffman decoding tables ---*/ + for (t = 0; t < nGroups; t++) { + minLen = 32; + maxLen = 0; + for (i = 0; i < alphaSize; i++) { + if (s->len[t][i] > maxLen) maxLen = s->len[t][i]; + if (s->len[t][i] < minLen) minLen = s->len[t][i]; + } + BZ2_hbCreateDecodeTables ( + &(s->limit[t][0]), + &(s->base[t][0]), + &(s->perm[t][0]), + &(s->len[t][0]), + minLen, maxLen, alphaSize + ); + s->minLens[t] = minLen; + } + + /*--- Now the MTF values ---*/ + + EOB = s->nInUse+1; + nblockMAX = 100000 * s->blockSize100k; + groupNo = -1; + groupPos = 0; + + for (i = 0; i <= 255; i++) s->unzftab[i] = 0; + + /*-- MTF init --*/ + { + Int32 ii, jj, kk; + kk = MTFA_SIZE-1; + for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) { + for (jj = MTFL_SIZE-1; jj >= 0; jj--) { + s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj); + kk--; + } + s->mtfbase[ii] = kk + 1; + } + } + /*-- end MTF init --*/ + + nblock = 0; + GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym); + + while (True) { + + if (nextSym == EOB) break; + + if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) { + + es = -1; + N = 1; + do { + /* Check that N doesn't get too big, so that es doesn't + go negative. The maximum value that can be + RUNA/RUNB encoded is equal to the block size (post + the initial RLE), viz, 900k, so bounding N at 2 + million should guard against overflow without + rejecting any legitimate inputs. */ + if (N >= 2*1024*1024) RETURN(BZ_DATA_ERROR); + if (nextSym == BZ_RUNA) es = es + (0+1) * N; else + if (nextSym == BZ_RUNB) es = es + (1+1) * N; + N = N * 2; + GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym); + } + while (nextSym == BZ_RUNA || nextSym == BZ_RUNB); + + es++; + uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ]; + s->unzftab[uc] += es; + + if (s->smallDecompress) + while (es > 0) { + if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); + s->ll16[nblock] = (UInt16)uc; + nblock++; + es--; + } + else + while (es > 0) { + if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); + s->tt[nblock] = (UInt32)uc; + nblock++; + es--; + }; + + continue; + + } else { + + if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); + + /*-- uc = MTF ( nextSym-1 ) --*/ + { + Int32 ii, jj, kk, pp, lno, off; + UInt32 nn; + nn = (UInt32)(nextSym - 1); + + if (nn < MTFL_SIZE) { + /* avoid general-case expense */ + pp = s->mtfbase[0]; + uc = s->mtfa[pp+nn]; + while (nn > 3) { + Int32 z = pp+nn; + s->mtfa[(z) ] = s->mtfa[(z)-1]; + s->mtfa[(z)-1] = s->mtfa[(z)-2]; + s->mtfa[(z)-2] = s->mtfa[(z)-3]; + s->mtfa[(z)-3] = s->mtfa[(z)-4]; + nn -= 4; + } + while (nn > 0) { + s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--; + }; + s->mtfa[pp] = uc; + } else { + /* general case */ + lno = nn / MTFL_SIZE; + off = nn % MTFL_SIZE; + pp = s->mtfbase[lno] + off; + uc = s->mtfa[pp]; + while (pp > s->mtfbase[lno]) { + s->mtfa[pp] = s->mtfa[pp-1]; pp--; + }; + s->mtfbase[lno]++; + while (lno > 0) { + s->mtfbase[lno]--; + s->mtfa[s->mtfbase[lno]] + = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1]; + lno--; + } + s->mtfbase[0]--; + s->mtfa[s->mtfbase[0]] = uc; + if (s->mtfbase[0] == 0) { + kk = MTFA_SIZE-1; + for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) { + for (jj = MTFL_SIZE-1; jj >= 0; jj--) { + s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj]; + kk--; + } + s->mtfbase[ii] = kk + 1; + } + } + } + } + /*-- end uc = MTF ( nextSym-1 ) --*/ + + s->unzftab[s->seqToUnseq[uc]]++; + if (s->smallDecompress) + s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else + s->tt[nblock] = (UInt32)(s->seqToUnseq[uc]); + nblock++; + + GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym); + continue; + } + } + + /* Now we know what nblock is, we can do a better sanity + check on s->origPtr. + */ + if (s->origPtr < 0 || s->origPtr >= nblock) + RETURN(BZ_DATA_ERROR); + + /*-- Set up cftab to facilitate generation of T^(-1) --*/ + /* Check: unzftab entries in range. */ + for (i = 0; i <= 255; i++) { + if (s->unzftab[i] < 0 || s->unzftab[i] > nblock) + RETURN(BZ_DATA_ERROR); + } + /* Actually generate cftab. */ + s->cftab[0] = 0; + for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1]; + for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1]; + /* Check: cftab entries in range. */ + for (i = 0; i <= 256; i++) { + if (s->cftab[i] < 0 || s->cftab[i] > nblock) { + /* s->cftab[i] can legitimately be == nblock */ + RETURN(BZ_DATA_ERROR); + } + } + /* Check: cftab entries non-descending. */ + for (i = 1; i <= 256; i++) { + if (s->cftab[i-1] > s->cftab[i]) { + RETURN(BZ_DATA_ERROR); + } + } + + s->state_out_len = 0; + s->state_out_ch = 0; + BZ_INITIALISE_CRC ( s->calculatedBlockCRC ); + s->state = BZ_X_OUTPUT; + if (s->verbosity >= 2) VPrintf0 ( "rt+rld" ); + + if (s->smallDecompress) { + + /*-- Make a copy of cftab, used in generation of T --*/ + for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i]; + + /*-- compute the T vector --*/ + for (i = 0; i < nblock; i++) { + uc = (UChar)(s->ll16[i]); + SET_LL(i, s->cftabCopy[uc]); + s->cftabCopy[uc]++; + } + + /*-- Compute T^(-1) by pointer reversal on T --*/ + i = s->origPtr; + j = GET_LL(i); + do { + Int32 tmp = GET_LL(j); + SET_LL(j, i); + i = j; + j = tmp; + } + while (i != s->origPtr); + + s->tPos = s->origPtr; + s->nblock_used = 0; + if (s->blockRandomised) { + BZ_RAND_INIT_MASK; + BZ_GET_SMALL(s->k0); s->nblock_used++; + BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; + } else { + BZ_GET_SMALL(s->k0); s->nblock_used++; + } + + } else { + + /*-- compute the T^(-1) vector --*/ + for (i = 0; i < nblock; i++) { + uc = (UChar)(s->tt[i] & 0xff); + s->tt[s->cftab[uc]] |= (i << 8); + s->cftab[uc]++; + } + + s->tPos = s->tt[s->origPtr] >> 8; + s->nblock_used = 0; + if (s->blockRandomised) { + BZ_RAND_INIT_MASK; + BZ_GET_FAST(s->k0); s->nblock_used++; + BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; + } else { + BZ_GET_FAST(s->k0); s->nblock_used++; + } + + } + + RETURN(BZ_OK); + + + + endhdr_2: + + GET_UCHAR(BZ_X_ENDHDR_2, uc); + if (uc != 0x72) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_ENDHDR_3, uc); + if (uc != 0x45) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_ENDHDR_4, uc); + if (uc != 0x38) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_ENDHDR_5, uc); + if (uc != 0x50) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_ENDHDR_6, uc); + if (uc != 0x90) RETURN(BZ_DATA_ERROR); + + s->storedCombinedCRC = 0; + GET_UCHAR(BZ_X_CCRC_1, uc); + s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); + GET_UCHAR(BZ_X_CCRC_2, uc); + s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); + GET_UCHAR(BZ_X_CCRC_3, uc); + s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); + GET_UCHAR(BZ_X_CCRC_4, uc); + s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); + + s->state = BZ_X_IDLE; + RETURN(BZ_STREAM_END); + + default: AssertH ( False, 4001 ); + } + + AssertH ( False, 4002 ); + + save_state_and_return: + + s->save_i = i; + s->save_j = j; + s->save_t = t; + s->save_alphaSize = alphaSize; + s->save_nGroups = nGroups; + s->save_nSelectors = nSelectors; + s->save_EOB = EOB; + s->save_groupNo = groupNo; + s->save_groupPos = groupPos; + s->save_nextSym = nextSym; + s->save_nblockMAX = nblockMAX; + s->save_nblock = nblock; + s->save_es = es; + s->save_N = N; + s->save_curr = curr; + s->save_zt = zt; + s->save_zn = zn; + s->save_zvec = zvec; + s->save_zj = zj; + s->save_gSel = gSel; + s->save_gMinlen = gMinlen; + s->save_gLimit = gLimit; + s->save_gBase = gBase; + s->save_gPerm = gPerm; + + return retVal; +} + + +/*-------------------------------------------------------------*/ +/*--- end decompress.c ---*/ +/*-------------------------------------------------------------*/ Index: vendor/bzip2/1.0.7/huffman.c =================================================================== --- vendor/bzip2/1.0.7/huffman.c (nonexistent) +++ vendor/bzip2/1.0.7/huffman.c (revision 349497) @@ -0,0 +1,205 @@ + +/*-------------------------------------------------------------*/ +/*--- Huffman coding low-level stuff ---*/ +/*--- huffman.c ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + + +#include "bzlib_private.h" + +/*---------------------------------------------------*/ +#define WEIGHTOF(zz0) ((zz0) & 0xffffff00) +#define DEPTHOF(zz1) ((zz1) & 0x000000ff) +#define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3)) + +#define ADDWEIGHTS(zw1,zw2) \ + (WEIGHTOF(zw1)+WEIGHTOF(zw2)) | \ + (1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2))) + +#define UPHEAP(z) \ +{ \ + Int32 zz, tmp; \ + zz = z; tmp = heap[zz]; \ + while (weight[tmp] < weight[heap[zz >> 1]]) { \ + heap[zz] = heap[zz >> 1]; \ + zz >>= 1; \ + } \ + heap[zz] = tmp; \ +} + +#define DOWNHEAP(z) \ +{ \ + Int32 zz, yy, tmp; \ + zz = z; tmp = heap[zz]; \ + while (True) { \ + yy = zz << 1; \ + if (yy > nHeap) break; \ + if (yy < nHeap && \ + weight[heap[yy+1]] < weight[heap[yy]]) \ + yy++; \ + if (weight[tmp] < weight[heap[yy]]) break; \ + heap[zz] = heap[yy]; \ + zz = yy; \ + } \ + heap[zz] = tmp; \ +} + + +/*---------------------------------------------------*/ +void BZ2_hbMakeCodeLengths ( UChar *len, + Int32 *freq, + Int32 alphaSize, + Int32 maxLen ) +{ + /*-- + Nodes and heap entries run from 1. Entry 0 + for both the heap and nodes is a sentinel. + --*/ + Int32 nNodes, nHeap, n1, n2, i, j, k; + Bool tooLong; + + Int32 heap [ BZ_MAX_ALPHA_SIZE + 2 ]; + Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ]; + Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ]; + + for (i = 0; i < alphaSize; i++) + weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8; + + while (True) { + + nNodes = alphaSize; + nHeap = 0; + + heap[0] = 0; + weight[0] = 0; + parent[0] = -2; + + for (i = 1; i <= alphaSize; i++) { + parent[i] = -1; + nHeap++; + heap[nHeap] = i; + UPHEAP(nHeap); + } + + AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 ); + + while (nHeap > 1) { + n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1); + n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1); + nNodes++; + parent[n1] = parent[n2] = nNodes; + weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]); + parent[nNodes] = -1; + nHeap++; + heap[nHeap] = nNodes; + UPHEAP(nHeap); + } + + AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 ); + + tooLong = False; + for (i = 1; i <= alphaSize; i++) { + j = 0; + k = i; + while (parent[k] >= 0) { k = parent[k]; j++; } + len[i-1] = j; + if (j > maxLen) tooLong = True; + } + + if (! tooLong) break; + + /* 17 Oct 04: keep-going condition for the following loop used + to be 'i < alphaSize', which missed the last element, + theoretically leading to the possibility of the compressor + looping. However, this count-scaling step is only needed if + one of the generated Huffman code words is longer than + maxLen, which up to and including version 1.0.2 was 20 bits, + which is extremely unlikely. In version 1.0.3 maxLen was + changed to 17 bits, which has minimal effect on compression + ratio, but does mean this scaling step is used from time to + time, enough to verify that it works. + + This means that bzip2-1.0.3 and later will only produce + Huffman codes with a maximum length of 17 bits. However, in + order to preserve backwards compatibility with bitstreams + produced by versions pre-1.0.3, the decompressor must still + handle lengths of up to 20. */ + + for (i = 1; i <= alphaSize; i++) { + j = weight[i] >> 8; + j = 1 + (j / 2); + weight[i] = j << 8; + } + } +} + + +/*---------------------------------------------------*/ +void BZ2_hbAssignCodes ( Int32 *code, + UChar *length, + Int32 minLen, + Int32 maxLen, + Int32 alphaSize ) +{ + Int32 n, vec, i; + + vec = 0; + for (n = minLen; n <= maxLen; n++) { + for (i = 0; i < alphaSize; i++) + if (length[i] == n) { code[i] = vec; vec++; }; + vec <<= 1; + } +} + + +/*---------------------------------------------------*/ +void BZ2_hbCreateDecodeTables ( Int32 *limit, + Int32 *base, + Int32 *perm, + UChar *length, + Int32 minLen, + Int32 maxLen, + Int32 alphaSize ) +{ + Int32 pp, i, j, vec; + + pp = 0; + for (i = minLen; i <= maxLen; i++) + for (j = 0; j < alphaSize; j++) + if (length[j] == i) { perm[pp] = j; pp++; }; + + for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0; + for (i = 0; i < alphaSize; i++) base[length[i]+1]++; + + for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1]; + + for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0; + vec = 0; + + for (i = minLen; i <= maxLen; i++) { + vec += (base[i+1] - base[i]); + limit[i] = vec-1; + vec <<= 1; + } + for (i = minLen + 1; i <= maxLen; i++) + base[i] = ((limit[i-1] + 1) << 1) - base[i]; +} + + +/*-------------------------------------------------------------*/ +/*--- end huffman.c ---*/ +/*-------------------------------------------------------------*/ Index: vendor/bzip2/1.0.7/randtable.c =================================================================== --- vendor/bzip2/1.0.7/randtable.c (nonexistent) +++ vendor/bzip2/1.0.7/randtable.c (revision 349497) @@ -0,0 +1,84 @@ + +/*-------------------------------------------------------------*/ +/*--- Table for randomising repetitive blocks ---*/ +/*--- randtable.c ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + + +#include "bzlib_private.h" + + +/*---------------------------------------------*/ +Int32 BZ2_rNums[512] = { + 619, 720, 127, 481, 931, 816, 813, 233, 566, 247, + 985, 724, 205, 454, 863, 491, 741, 242, 949, 214, + 733, 859, 335, 708, 621, 574, 73, 654, 730, 472, + 419, 436, 278, 496, 867, 210, 399, 680, 480, 51, + 878, 465, 811, 169, 869, 675, 611, 697, 867, 561, + 862, 687, 507, 283, 482, 129, 807, 591, 733, 623, + 150, 238, 59, 379, 684, 877, 625, 169, 643, 105, + 170, 607, 520, 932, 727, 476, 693, 425, 174, 647, + 73, 122, 335, 530, 442, 853, 695, 249, 445, 515, + 909, 545, 703, 919, 874, 474, 882, 500, 594, 612, + 641, 801, 220, 162, 819, 984, 589, 513, 495, 799, + 161, 604, 958, 533, 221, 400, 386, 867, 600, 782, + 382, 596, 414, 171, 516, 375, 682, 485, 911, 276, + 98, 553, 163, 354, 666, 933, 424, 341, 533, 870, + 227, 730, 475, 186, 263, 647, 537, 686, 600, 224, + 469, 68, 770, 919, 190, 373, 294, 822, 808, 206, + 184, 943, 795, 384, 383, 461, 404, 758, 839, 887, + 715, 67, 618, 276, 204, 918, 873, 777, 604, 560, + 951, 160, 578, 722, 79, 804, 96, 409, 713, 940, + 652, 934, 970, 447, 318, 353, 859, 672, 112, 785, + 645, 863, 803, 350, 139, 93, 354, 99, 820, 908, + 609, 772, 154, 274, 580, 184, 79, 626, 630, 742, + 653, 282, 762, 623, 680, 81, 927, 626, 789, 125, + 411, 521, 938, 300, 821, 78, 343, 175, 128, 250, + 170, 774, 972, 275, 999, 639, 495, 78, 352, 126, + 857, 956, 358, 619, 580, 124, 737, 594, 701, 612, + 669, 112, 134, 694, 363, 992, 809, 743, 168, 974, + 944, 375, 748, 52, 600, 747, 642, 182, 862, 81, + 344, 805, 988, 739, 511, 655, 814, 334, 249, 515, + 897, 955, 664, 981, 649, 113, 974, 459, 893, 228, + 433, 837, 553, 268, 926, 240, 102, 654, 459, 51, + 686, 754, 806, 760, 493, 403, 415, 394, 687, 700, + 946, 670, 656, 610, 738, 392, 760, 799, 887, 653, + 978, 321, 576, 617, 626, 502, 894, 679, 243, 440, + 680, 879, 194, 572, 640, 724, 926, 56, 204, 700, + 707, 151, 457, 449, 797, 195, 791, 558, 945, 679, + 297, 59, 87, 824, 713, 663, 412, 693, 342, 606, + 134, 108, 571, 364, 631, 212, 174, 643, 304, 329, + 343, 97, 430, 751, 497, 314, 983, 374, 822, 928, + 140, 206, 73, 263, 980, 736, 876, 478, 430, 305, + 170, 514, 364, 692, 829, 82, 855, 953, 676, 246, + 369, 970, 294, 750, 807, 827, 150, 790, 288, 923, + 804, 378, 215, 828, 592, 281, 565, 555, 710, 82, + 896, 831, 547, 261, 524, 462, 293, 465, 502, 56, + 661, 821, 976, 991, 658, 869, 905, 758, 745, 193, + 768, 550, 608, 933, 378, 286, 215, 979, 792, 961, + 61, 688, 793, 644, 986, 403, 106, 366, 905, 644, + 372, 567, 466, 434, 645, 210, 389, 550, 919, 135, + 780, 773, 635, 389, 707, 100, 626, 958, 165, 504, + 920, 176, 193, 713, 857, 265, 203, 50, 668, 108, + 645, 990, 626, 197, 510, 357, 358, 850, 858, 364, + 936, 638 +}; + + +/*-------------------------------------------------------------*/ +/*--- end randtable.c ---*/ +/*-------------------------------------------------------------*/ Index: vendor/bzip2/1.0.7/spewG.c =================================================================== --- vendor/bzip2/1.0.7/spewG.c (nonexistent) +++ vendor/bzip2/1.0.7/spewG.c (revision 349497) @@ -0,0 +1,54 @@ + +/* spew out a thoroughly gigantic file designed so that bzip2 + can compress it reasonably rapidly. This is to help test + support for large files (> 2GB) in a reasonable amount of time. + I suggest you use the undocumented --exponential option to + bzip2 when compressing the resulting file; this saves a bit of + time. Note: *don't* bother with --exponential when compressing + Real Files; it'll just waste a lot of CPU time :-) + (but is otherwise harmless). +*/ + +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + + +#define _FILE_OFFSET_BITS 64 + +#include +#include + +/* The number of megabytes of junk to spew out (roughly) */ +#define MEGABYTES 5000 + +#define N_BUF 1000000 +char buf[N_BUF]; + +int main ( int argc, char** argv ) +{ + int ii, kk, p; + srandom(1); + setbuffer ( stdout, buf, N_BUF ); + for (kk = 0; kk < MEGABYTES * 515; kk+=3) { + p = 25+random()%50; + for (ii = 0; ii < p; ii++) + printf ( "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ); + for (ii = 0; ii < p-1; ii++) + printf ( "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" ); + for (ii = 0; ii < p+1; ii++) + printf ( "ccccccccccccccccccccccccccccccccccccc" ); + } + fflush(stdout); + return 0; +} Index: vendor/bzip2/1.0.7/unzcrash.c =================================================================== --- vendor/bzip2/1.0.7/unzcrash.c (nonexistent) +++ vendor/bzip2/1.0.7/unzcrash.c (revision 349497) @@ -0,0 +1,141 @@ + +/* A test program written to test robustness to decompression of + corrupted data. Usage is + unzcrash filename + and the program will read the specified file, compress it (in memory), + and then repeatedly decompress it, each time with a different bit of + the compressed data inverted, so as to test all possible one-bit errors. + This should not cause any invalid memory accesses. If it does, + I want to know about it! + + PS. As you can see from the above description, the process is + incredibly slow. A file of size eg 5KB will cause it to run for + many hours. +*/ + +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + + +#include +#include +#include "bzlib.h" + +#define M_BLOCK 1000000 + +typedef unsigned char uchar; + +#define M_BLOCK_OUT (M_BLOCK + 1000000) +uchar inbuf[M_BLOCK]; +uchar outbuf[M_BLOCK_OUT]; +uchar zbuf[M_BLOCK + 600 + (M_BLOCK / 100)]; + +int nIn, nOut, nZ; + +static char *bzerrorstrings[] = { + "OK" + ,"SEQUENCE_ERROR" + ,"PARAM_ERROR" + ,"MEM_ERROR" + ,"DATA_ERROR" + ,"DATA_ERROR_MAGIC" + ,"IO_ERROR" + ,"UNEXPECTED_EOF" + ,"OUTBUFF_FULL" + ,"???" /* for future */ + ,"???" /* for future */ + ,"???" /* for future */ + ,"???" /* for future */ + ,"???" /* for future */ + ,"???" /* for future */ +}; + +void flip_bit ( int bit ) +{ + int byteno = bit / 8; + int bitno = bit % 8; + uchar mask = 1 << bitno; + //fprintf ( stderr, "(byte %d bit %d mask %d)", + // byteno, bitno, (int)mask ); + zbuf[byteno] ^= mask; +} + +int main ( int argc, char** argv ) +{ + FILE* f; + int r; + int bit; + int i; + + if (argc != 2) { + fprintf ( stderr, "usage: unzcrash filename\n" ); + return 1; + } + + f = fopen ( argv[1], "r" ); + if (!f) { + fprintf ( stderr, "unzcrash: can't open %s\n", argv[1] ); + return 1; + } + + nIn = fread ( inbuf, 1, M_BLOCK, f ); + fprintf ( stderr, "%d bytes read\n", nIn ); + + nZ = M_BLOCK; + r = BZ2_bzBuffToBuffCompress ( + zbuf, &nZ, inbuf, nIn, 9, 0, 30 ); + + assert (r == BZ_OK); + fprintf ( stderr, "%d after compression\n", nZ ); + + for (bit = 0; bit < nZ*8; bit++) { + fprintf ( stderr, "bit %d ", bit ); + flip_bit ( bit ); + nOut = M_BLOCK_OUT; + r = BZ2_bzBuffToBuffDecompress ( + outbuf, &nOut, zbuf, nZ, 0, 0 ); + fprintf ( stderr, " %d %s ", r, bzerrorstrings[-r] ); + + if (r != BZ_OK) { + fprintf ( stderr, "\n" ); + } else { + if (nOut != nIn) { + fprintf(stderr, "nIn/nOut mismatch %d %d\n", nIn, nOut ); + return 1; + } else { + for (i = 0; i < nOut; i++) + if (inbuf[i] != outbuf[i]) { + fprintf(stderr, "mismatch at %d\n", i ); + return 1; + } + if (i == nOut) fprintf(stderr, "really ok!\n" ); + } + } + + flip_bit ( bit ); + } + +#if 0 + assert (nOut == nIn); + for (i = 0; i < nOut; i++) { + if (inbuf[i] != outbuf[i]) { + fprintf ( stderr, "difference at %d !\n", i ); + return 1; + } + } +#endif + + fprintf ( stderr, "all ok\n" ); + return 0; +} Index: vendor/bzip2/1.0.7/words2 =================================================================== --- vendor/bzip2/1.0.7/words2 (nonexistent) +++ vendor/bzip2/1.0.7/words2 (revision 349497) @@ -0,0 +1,5 @@ + +Checking test results. If any of the four "cmp"s which follow +report any differences, something is wrong. If you can't easily +figure out what, please let me know (jseward@acm.org). + Index: vendor/bzip2/1.0.7/sample1.bz2.uu =================================================================== --- vendor/bzip2/1.0.7/sample1.bz2.uu (nonexistent) +++ vendor/bzip2/1.0.7/sample1.bz2.uu (revision 349497) @@ -0,0 +1,722 @@ +begin 644 sample1.bz2 +M0EIH,3%!62936``^"5D```4[8=N[8K7,-JP,#+WT`WUMF`[!Z#H>Z]G#Z!`$ +M``&]F(!NO=V[[M9NCTWNY[8+SDJPX]LV]K.-S+;KAZ-ZL2V8*;.;77MW;VVY +M![U3J;CKVY> +M\YVVWMWO&V7L-Y[M$'&]!PCH&04`HUY\]VFG;-C"?8WPIWN^ONQOM?6^^^/1 +MO*SK10%$ADGQ7`:;'-UKT/24A0V\]MZ?7OC;Y];=[SO;W=U-O.57L]5/ +M=N>K8(O1\OO;P^M\^0LKXN=W6^`!YY0>;#);![[YOO7VNVSU#H^@*`Q5;8S' +MUIUUT((&@Z``&]M7#[83W@`6P'U0KW6XQ8:T%="V!09>]R3<%]5![-K&A-C` +M`"]C4^]W,$;9@)6UCTU="4TB!`$TTT`":!HT$P$TT&F09$PTT9#0"9,"8FFR +M4ST4\`*GY,3*>:%/3313\(T4_(:1Z8B9B:9/13::,4\B/(GJ;31IHF:-$84& +MIZ`@(($@!`D>A4]Z2>)ZC$8*;5,U/4_43U-J'J``&@#$T`-``>H`>HT::`&@ +M'J`````````#1D```TQ$$(")IJ8(;5--&DGH;4/29-(T,T&D>IF:IIIZFCTF +MGZIB&T33U/2,@-&GI,``"9,:$8AH9&3$80R8F`3333$T-`&C33$T&02:2(A` +M01H"3$IXD_3(:!JF]4\HTT]3TTTCR>BFC$/U(]3R@>HVH:::9&CU&F@_5&F0 +M>B::>H`-#0;4`!Z@/4T/4#0`]0>H>H:::8CTF@`(E(FA">DPFJG^FJ>U,)IH +MTD_0--39-$\B:GHT](]3U)@--,RFGI/4]3:*9/R3U,DVIX2'J;:1Z3TIZFT, +MRIO2-1XB>D]&C3U#330:`T:>IM)/4]/34TT)ZC1[13-,U$$B(0(!`"$\DP!- +M&43RI^FD]&IZ:IX-&)I3TG^JFQ,1/:DT\2>4-'HRF90/%/4&T-1M1^I-'I/4 +M>4/0TT8AJ'J9E--`TR:>4&3]34-,AH/4R>HVH:=\9D)$$ZM>S:PQRS9]&G5H +MU[-K:V(2/Y"8\C(Q)9!V$HB&:-'42&;`39!PD30DX(`'VXR!]S]4?EFN`3TR +MZI#2Y485N#3[NW+I^(*P8* +M+%6+"?N\S$"NN6K^!G2+PF?**'^9`UY!,:(7CH3J3[A6#WQZ4J-T5H'2G.&> +M-2=B7#IC:(I<#LF+;AA'-E`S4$.`0-1%;3`.JA(I(#(C(FAB`!=^50!=C)$: +MH"I;(BF^4A`6*AN8B7("'&P6M5@%N,HM`DI;!"0/Q)*,&`L!$0()&04("@A_ +MOV%D2$D5[-%(JQ108Q09(10D"1A(WT%.P>Q6B\E!>^K6O^R""3OW/_[ZS0'# +M4-22"H@",@XDJ31#1\`)/HDQN>')A%TJ]$V1+&-)*&>W?PP0?X?+7I+[+[VP +M3PC6GVWGC>+*F46#Z6^(-:L&)_:@J<*EMI^3EQ&(A^YY(&L#0Q8JL3K^4S]I +M#>_8,KJU:*E_@DB8.E4=-4ME5J(UBE%1&VPK5&,MA1506(BHQ+;+8(V*U610J +M+6*VHA4H*T?UR5$9@Q1JREI2L6L+:-**1+18I4JH*%L6I4%B4=X8F);0J +M5K1$48%92T;0:T4$9*Q&VR5@H)0MHB6+`:-%X,IE6@K2UH:$S/VUS+:N[1$1 +M$14RRB6MK4&,;8VE+%;:E%*E$1JVJM8I6*"4A&D4JMLJV86IBN$2X5:,LME& +M4M:U:WTY`PQ$:E11:J6V5;449+,+\U,1-62]1+/N;K$*VCQEF)RU3/\+6]?@ +M[X)#"F_D^[8!_T6KS/*A2S_2##C82P;;N0TM7XA(!X3^(([YDGIB5D`1#U]` +MZ?3G,`]G$@Y^6Y,_MO@S(;S-8F)M-B(&`-RB0J*L*D[ +MX2=IW3O.[H:?RO,DZ2(2-IU8"))B!1`EM"L`;8H12$%!&$@R`R`L(H`L@2H" +MR5@19%(L%)$C(H2*0K(L"02,"0)$)"2<[:WY?BIW:8'Q_`]W\82"<2#X(X38 +MTW)^-;\@+GF2)/(-P_R>>J:4:4E,.N)1M%VF%>$DEAF*Z&1TGC@])U7NFCU+ +MN>`[7?^W3>OO'<3HB]U2E#[5*?*_?.[/3N@K(B@OW%#YF82H^O80Z.&^PU"7 +MW?_R[Z6Q?@$YES!1'*,-Q:OO\]#N,$&6I9_/F;*6,T@9!,3_1(URE_OYGI_" +MY<5`;Z@-S2I$*GA,L]#XW4S2?!DU_O]QO_9AI!Y\>Y1!J>"31EX>WE4+!V$\ +M>613_ON\Q']NN^YSVZYS[UJ[O+#'=(J=:GX5$K*#,P97R/#:USLO6?(H@>/M +MWIF_9J'IG<$7^F$E]%@/WG=R&)]J%Q!C>'ZU#IS>Y'(F-W92NO[];">J.WPY +M>:CX^4,,2G](D8=DW.N`>)OM%+S&;1)4X:`R3_Q9%63GFS$DTD6#$0!!FTPT +M(C^`FFR:$.)W9]47GR3R96]+1^%[M'![K+?@<:(D`)`&09%9$0UJ0:1"D615 +MD0&D4D0H0&0$B,$)BY6X\Z&:PLYX?M_C>@!&$)"?F4%BD6+"*H*L%BR180%D +MD!@H`P@**1!6"PBD%(I!2"P4$!@Q$(L404$9%%"10!818HLD$3"9@8"6E=LC +M=ZY$MR2016]73O"\R>!Y:>K[G^FHFKA?H)!21$R`"(4DB%SE4]R9>JY?E4X& +MI\XGESTX-"[H/;_T,"%:]7P,3@-S5ZTXV'+3TZX^BX)@?N13"Q]R<6\>WJ2J +ME=AB28A3W4U`3K>S\+9S=EPX0#/1D#A8LBR((R06I(5"%10HDJ+!MJ$4%6$0 +M18"@I%50B@H2I(*2H5A*P%DBQ0BP*J2LA*0@RHLE$*P(LK`44(H419)1JI%@ +MB(R4+)81C&("P1("A*J*L$9$8"?@!^+Y6,K1(3B'3Z'IN*\WM_1.)S9:QJ#V +M.UX(P-9-;H6^$I0T`0W9>9]S#+.@--Q^NL4@RVBR1W]!.:.+^0H9W.2O'GTT +M#,`&83,V914O]3MOSE7G(#1\0 +M*($#9<1&-`[,Z.F3H`4'!R759LB%L+C7R@9Q,?8/(T +MY/?['L,W\PE4_\NZ$[_H=_CG'(`!W4NY[Z>IS^)YMA'WF+CCR584:K[\+[ +MNWNE?U'YVR>\7?&/T?A7%?'#R;1?/H]UW!VYCE])@;%D/K[Q?:R;62DEJA&1 +MU3=%4)4^XQ+Y-(?*ZFZP7CEQ#LZ[L,Q\4L9;):%S'2$FXK_BU^\16NQ))N=?`@(NB\EAP;YC&WJ5^<0NFM$;/LFN9F9L1V!#U:\U +M(5H?SO]&9_M??V\["^4:W!77DH<\;](V?F]5I<1VDHW[#LD0.RJ)L[:*6")Y +M*)DL7V)(\H0#](ZFBD&:I8DTQE#M*^A-;;*$?T`R>72#AEPSH^>V'F0M6#?G +MAUYBGV06[9Z6TW']6,^:-#7U\MGU=F`:BWF+VUA7=.XSX9E2POZK2TLW/+P7 +M;1AN1P).,)2(^DZA\O??]XKL;O +M'&WO(R*^!FM//G(39;-4I:,_"G//K=7/4C3HU>+8F?'6-=3+%/O/AK\5H$4L +MM98SGJ@\'QQT3QR7[D?4;6+X3`M]Z+#YB4C+??UJ]+/:3A%M1]_)N,/FNRPM +M4P:9(^S3['^Q[_W/*+V^/RTK[%(?Y54,4\*%6RA$L@^7C$#X.WK7Y*[PTE`9 +M+A=+OGSTHNWHO,N4].&@X+Y$NW!M"6=?0PGX4#%[]9C_*F?6#KR#><\9^YYE +MU9.8G[+H:;3=/4WZP.V.OGCZN?=GSCB/*R*5?G*J>ZW6'J^NIF`?+BKJ]!:F3M*?2O +M+/R!CC;QWG1>/IPZY'BOK23*U&M4@L[JM0CRM!OE$YO"TF-B'@PE +MJRF\H6CF47?M;OPF*J;YI;I'*2&NIU)!JON`FYA#%^'88!SA&_M51OR0;8[O +MOVSANL(J,8P?'^%@O/4WJ4^S$]8N?P,M*2=CY\F8[[#@2SW!X9Q^83.(=).O +M@)TD"A\Z%$S8_P\TRPQG&/1_?_B^V>I/O.X"LY[`P +M4P4`UUA9ZR5VPZ1?8`P<-ECJ:G1]55S.FQBFIJBK63-X./#&=5)S\5!+)X5^;C`5L?JL-''I3OW]VTT_EZ_ZN;>&V_`N_ZS'Q*DDD +M]PBJ6SH,G]4\Q\#?I^4Z;T:Q>&%@W=Z484,:,R,8?@2Y^?+8V) +MPLF;5DO9+''%(L7O\N3]+^G_$8U3PJ&JU![?#;%:1H/!6;V?!O[13VPM@(XV +MX(?,3\=^;BV;T7IMP'P)N7R-T+INPM9P/H,S:-E#$G2X*^M\PR&YLUOQ.NYM +MR$&BT>,V,S%&7YA2@[F6EE`QRKF]?QY_9ER<6H5M=Y6!T-;8*9,VKTW%WV]T +MV)+@/H=UG^/I4OL2*R(LBI)"$C(DD(C(@V#:$VOH,3<-)7*SZ73W_(['F.S2 +ME*4T>4;QC[/<_EGB#7S_[+V_V78B`B1@?>E1#<^0IFS= +M=/!Z]!-QCG^QZ40T7/XWWC^W8\=4&4(.;SAOK]-IQR='][GO./,,[EKJK?EW +M]?(3,&Z@Y\XED)))(4/^+AQX7\ZTJ/G=Y/U9D_C^WY4^W5-@^-R]9V$QI%)Q +M!T2@C92_ZF^CN9G==UIR5,]Z'XPB,'JG99HL?E.O#:LP[0@D;S7_?OAJH$I+A +MU-&>&;=7EYBT4+F.AR=EF42;C-L\]=Q/8=X.[F?OWM1'.D3$J8AX=U=#R1]. +MF0S\N1TY6U9\L#`5U8Y#*3&!IC_[8/+_#PMJ-*Z3YJ.[0T\H[2K(VNE)MA:T)% +MKJBC*RFZLA&^?=U7@_[Y+2T$2F7UO?#LWI];]3?*&"G4E7]DY%G75>QUD.YW +M1R[G?U_:-)L`:W>%0J\=3#ZD9?=X_LL,8;1 +M&7$_7?\Y?XW!U"L>&GN+SNN_OYW#DFSV1>-)4_]X6SV]ML'(J5O0%=OMQ4*Y;]@F.4,$S"FP +MVF1P@VWQR7T?!JX&)3\:W(\-TZF->+_DQ<:Q))[:!Z3OQR;.I/&M:QC*J2U4ST/Y^3DP/#5+Y>A@WR)7Z:(G; +M[\"U`9="@Z0SW]Q!CO\XV$7+F2=.@A`J^I-G(78]Y"_4(F%"A43=73!@T/L? +MS+KJ"@X*7ZGBD?R6!V[&T0.5C#AMR\.=K-+^V^R][>N[U=QSQG*53?KF\/QH +M1S*ZV?R=-$MWM&=#PHDC;'HMZ6;V%5B5OX)NC3',UL?.X5+KY'7.Y>R:[_-\ +M>K>6^`-1QB]#<>3:O^$?/5L*@S1Q/5&V`&`VY$Y;!V=]H_3^7_O+;)`U[Y6#?M2\YZ*:\[G)8;OX[UN6>JDM2RXSDM1;*R-T7/UOK+$I3 +M0$/66BLW?"XEE-21P+YC@VZRJ(S";ZZ!DF$O61B8-?F,#:"L!Z>""ME>%#BL +M7`QMO4T2PHXL&V?\BL^,[^!T=D$-BYL=J5[>:]:ZJ9+S#JL&,;:$($O_B*AR +M\U6)XZ-1LI*2ILZ5-KN;K.U]R.O4IB8D&Q,$':/W#41:,S)2\++WRK6;)#)3 +M1XO@M;`/\)LUDXLGU;-62J?X[]-HM^,(H1#8_V4#C>D[1Q>6W^]R/V^B#WF +M0UUOASW&>+K?$3?SP\,1'_]"_6'K_0,2E<)2PF)M=L2K`[WVJ".&]SO.$K7@ +MQO>==F9CPL&SS6+QP2_#](ENQ'`=`^5W])JFDWW^U9M.FKGSW^0Q^2"=G=D( +M2H-7N=$PUC#(P!NU46KTLB!3EIU*90#-H$))"$S84]Z:_)SOQ.4NR5$UO^<8 +M#7_>O5]AY=E8GBD;/Y;^Y&K6!@Q/CU+/Z:/T%]0=/N$!TD3Z^ETLDD2.^Q_7 +MC^W:CJY.=\)"27&[1=U'LOD^!!^J[Y_@TGHE)/!BH3J!\O\<%"2W$L^K2Z2- +M06FP'@][+)/XWO8/^%2F55-#T*FTEIS3'KY!6O9,#\!(7-7I_!B:)CSSZIQY +MH-4FX#2TNSAQZZXWK1'T9F!JYT7W3GO2JU/]80%ZA.Z-HD5<>#ASI7 +MKY[AM$6/UZ5=O01+ZND-^Q71\K'STG&N#67*:F5:'S(-"<>;X4TY:%5%":D> +M0T4+,U&/T5&TY_X=CDOQM:%M]UZ$3EFZ7BG-XL$ZF,"VT`R+^4E%E))'416% +MDDHHR%0[ID8PIOPIT8[SQV7R8\&'#!\8FOO\@JAA?HY@R-'P\P'M7\VO]+(^ +MASL%!$)THNPQS'QY\=>E5(J'!""\(AR)W:O?NFQ;"P2_H.AQT5&?46B>>M-I +MUX\.X]/7CD0K_IE_IUK:Z,*6L'CYBL*&!JJ44H?',`5:&VO#P%CEM]MGL7LD +M?[Y#!X>S2`0:@$1I,$>XB4/W['-;EDTJ\0SG_?4O0&IESL!1BZ3!_A-0@/1P +M8B8]6@(<#FA7'I3X@8UZDQ'(T>DT^#FR'5B\W=,5"R&,QVQ<&DJ[[3[/!)2/ +MJZU"8^#DPMH?R5[S+85MA39CH"";(QBM3KNZFRTR@H$X83IK5M=[P05XX5>= +M7?)/?U,XPQ:J_I,]CV:7T8T>@A'`Y*0.'"IGWGQ8,T/`SSL&L40220A&4G+# +M7R9\)EJ,.7B?S_[U@EG,0HS3-R?4XNU=3V<(/CM+V;+/F,O>+#C:?-@7JGZ] +MEY;F-=+0MY>MIDS94]C,%[?FLK)TJ/1/84EG=V$Q$R:ICUZJ_?X8N>X0J(,2 +M'>3T]H2-C'/!0_V?Q*3HS^+9/UK\]-)!9.HJATOT9X8>IT[N6D\UEWL='R/& +MS-=(WE',9&)`L]G4O['P;!^C\U#&]JX7(47EUAZ?NYO27U97&A.F>,YV5]*U +M5Z^=[J%YU].X^\QBE;T8%!-I=C,5IFGP)V]_SF4>G,V:CBE%'/:"K2,?.$8# +M!L8%AN98RB:5,B?S';Y#D@"U**:2I^_2#!`(-7E&O1"BZ6_(Z%7%TZ)T9"9) +M6'*$?J1&ZI@%IDFBB/*__<4V:/F\HCFYNI`V2 +MQT9Z6O=,XN81D3$<$>SOPRLJW0H9^AT()I6"5CXM`.0BD@2:NE*\&4RA`>]C +M'8W^178I+B50750'[[^+O_0L.1\CQJ?+O-ATF4CW4$+45$,BA-@(];ZBU`$P +M2)W0(],.=5WY'LWM7FM&WAWF=]$DR4/.GLL(6GTIWH-$4)H/DFG!%K5B.Y];P=Z;6(R21Y1UUGHG#= +M!62:?,1:#JT^':71*Z9F4)A-X1T*$T)G)N8L](9L03'D;YUFAX#\\N4BS;PD[.+M+<5&PH/F9KA@KA9#NT$Z/>7P +MTV),..N_1(CHNMUD.W3#%JO42$M9%N)1A>^[6[#EY!D\%/F'=9.=@9,<]@/% +M`A5V7OH;==0^9JW<)M)8T9`BW?&3YQKX_6KX8R7#;&P:&-IM(L1@B@B**B*,$145%%T[,0X +MIKRW@E;HK/F&TG;?-O->IL`II,%\=%[<-J;++)H$_I/`[EYG:_(HJ\LY#.M.)1MFMA"YM(_^ZZGVV?59%'SW'KI\<#AI4&O1C( +M1O.'V]**9"#4C3/1#2'E[+Q\[?+_.?;8]+['_*XCI'LONL`X&[BQTKC_%4E1 +M-[NUC+W%U*U=2(,@')=9'!"ZBB/BC$3!]B:-[4"`N4Y@R?KRHZP$98<6^1:^ +M^^E[:%XJQ/(AEZU[\JF8T3#:8Z$I:<.B8IECP3(]$".]XL@6-\KMJ0P1=#&Y +M=3'LF>JM@J<[A.@L;2+0NQS\"+2G3.5W:ZHG(!66U1/-2@#P<52:':)J<#Z^ +M\>?U)O'[A`P>(;N;\07TU2^5G#Q'B>V$&Y6]\-QUH57,?L_>TOS),A%%+1!Q_)QI(GS:89,7-HV"`LKL>"Z! +MABCITF]V[RF1%L$7CVNV;U2O;BBE3-4$0[<^';@O'&-/V]G5.C,RX5NQ$2]< +MN3B(56G!DD[R%[P1A9%FS"Z4XP%FO%5A]58\JZ/9-$7?42KU>_*%\$8,.D*" +M`8P8SX6"N^)RHGPOWCO]NV&OT5A<@_Q.7/Z_*(?(M=?U>&*FF5DHP20>4-:^ +M1(\J1Y/^T'ZS,VSZJ7(\=`U<\0X28SR:)'BLP9THK=[39B]1E?P6M6=T+WC,B&C4 +M!(9G80P&Q#[KU^OW5;T8800\(E"J"JX-'!^9^>.[6N.O3/LVNBC"70]9UUK` +MZ;+E+$ME#4.%;.([)D=R7"IIF]!4A-3HYDMPLHL,:6Q+BY#"%@8%29);6HF# +M)TV!][T0^9M/A-=:D'G1*=@/?ZAX?-M9I]5!#!JHDCBC**FE2TBE9#43SZB" +M==FB;3KE[R\7CG'H=+:BJE:(HM3J]'8JCB+)[77IN?Q^=7M#PS.U.,*!HV^]#Z[_ +M5N[9'OV8R^DON%0=Z@<7C$B8P@5*9@EX^.[5$@9!#!HJ[%[O#&B^UST0_TLA +M>QHW?R(=+U!WC.7H(/>S#+)(H`^N00CN:#GRY!QAI^PJ\50MOOOJFD>FI.)\ +MWUDZX;M7AI[=\G)W]IB&5.UHBI^NI.`:\* +M9;*SI2E*K5/!-M>.I3$VG]/]Q.I.A\_G&-(;H$RM$E3+)&E%R6Y":(!`_!8G +MV]1CM&]]2/Z?.\,"F6(1WF;A.(B$SNN$? +MF$_QOE:'Q/YRQMAIC0`.`Q,EB9!0(],FXW'HL&)6PL!]06*71A"ZI@@A@H8' +MGES+8SC68AIL<4RZHVVVX9C+<<.:C41<-7(K6H]3NXIUM#6Q%Z( +M57PYW4,RL^M?!G"^#QB\+A?!\J43)V;:5@F;)$@I27)",FY%]$S`QJN14Y2L +MB**HZ:]6>6ZB#-VQ446=UO.:>=[NKB,RS5UCJX[5QDRQ=G)GK,II2P(!L8 +MZLCV'7@6;YE=*S93:)P>BTZW*O?9;FB[*V*>#%??>8)'D>GX6@2O3Q_(X(Z& +MOC9])U^EMROT+"6UQSFB6`B>JS81_52!(ZITFM,,4;A593^[(ZIB`T!:(NTF +MTCZ^Z6T_'W&5W&%35H$##=)KG90\J0Q:J#4,+#91.%%55?&YZ +M$O%/4HX*UG;`Z;4]UE70A6D"!Y-+/A"R'CC#7W\+#`MJ"Y5:5=G>LRB!WV6V +M%1M[J9._6B""E*8-,L74UK=5E,R^UT+=9^"\P7%\G+P\Z3*)2\TQS-F:)5C*!"SD)67`)`9S*@A`!$DHXF1_N +MV<#/=2\!`7680(GCWV##+Q#+5K(-A +MUF'+$7Z$N'$WRYP@H=5,UW4',Q"U?85SEG3.!K-%[5827G8M;GJXBG9GNWR8@T4M@8`56/V\EC"R)^J:1A6N!@32Y%N+6O+S4=2]=Q2] +MUY]_8N+FWT)^+8'K.Q3M'Y:&\>3M8H;^T,15I/QSGP]_,]%V!NYUMYMM`-MAU`Z!\.E*I)M"-KI#+R[-:J`H0J*# +M#KU,4<*5@EW(*):G?X[0:6P,*X#PPV.A5E8&.I"@)&,,DI0LU)/JC,V71-HL +M!2&V;'&2>P9`1`C2;F>/5`RH%S0M91!"0)$M'1&F.!M5F@9XR"Y,L2@2:Q6_ +MEI46UT0P,6X1*!$#O&+!U!+PF1WF=#\ODM!=K +M^8"HVD2&W9RWZ(OB*@A$,L&+3:E1F9CET!:$RCIO$#6C(VY.7*6>*)F=IX9Y +M_'OZE.WKOYO.&UY(]TJC>[VQ`@FCK`8ED)([4]KVQ298Y]3+01%+>0[K`7LB +M&[IXE]F]2AB)$H_F2HG%&K6>/4*JV4N'&5B+PD/13=$JP6!.Y&U@E9265((: +ME2V1%'U=EA-LLBAPZ7,Q8+'LA5D'"A2E("XH*W@PY7#3E02Q+(A6`U[&Z.S( +M_:-U*;X:];VNJV%F1$!;+7@:NFKO<-05(%&P#%JDHLX>M18-(4+?"BVAFH"W +M`<$HP(-"`RI:BD7"L*`DA0XM"LQRQ3;&G:V)-3#M!!!4ARIA@F8DXTE2J0+) +M#J:JQ4,UQ=G>(7-2$+ULZ_:OF]GBUY0DEX3,IIXLP.U,V#0^+-B&A6H#:SS` +M@+$76JUV%AS?T_;^KZK`?(/PO2/&=]^G=N>_D\#OJ_3?P]R$Z7:`M+1,O1[6 +M5X]0FT-3`O[B-)%YHG082Q*WP)=TN%-[]KT,T+`$>3UZ3.3IB:.73JD`X(&K +MH7FC%TI*.AA60P/(L]MXN&)"L](/$Q?S5C-R;F6'44PDB(6VGJ8+DRB,Q]J5 +M]ZL+B;(=B&'!P+I06,I4/85-$)()*-H47?F**"]SNQ!:EDN4&'*B5>,/]XBQ +M".C37WXH)6%B&N2(,BG&C*X2\#%6=(WLA9.%('`W!(LJI*SJ1=MD8F]"KV=3 +M!(<4R*-]X\6O&ID2)LB-)T('L!H$,'Q@;>K:QT*@^%31=74="2U#U +M(10@Y7F&*N5R"4)V5VL4`MR\Q2%2U@B%\-&F-F!#"$!O1*DV%65FPS3$0A#L +M"TNYJ.LGJ&KXE05%RER`40KC"8I(<$AH#59V2L*O?->7K+&68`_P_XGI*VO6 +M5K9%8+AX`GIZ/(@J'"FA(GA18@5ZQ3%!Y=/P)T^+P!L,RGQ*OQ(CYVO4T'@K +M`N"(>C@*@H("!"Y\\S/4P$M[6=W(Q9%+!%22[QMZW4S>PGWG>R-9:N^V&[M0 +M;D*7'JO/5^(=CQ0Y.^E9/!^@F*]/-OX>SWL/$[4O"6M%-F#;-0FEU0(26(#% +MB![#D&*O'#T?41T<9SE;K922:+@D@UQ!:)A#(%^$'V(F0P4B_N0#!T(HV.@6 +M.K:@S$D!;T,84304!F2,2$CN5JE((+7"G>JO6WP3B(1-LRH5[H[9(I@X$&JE +M\M72-A-VR;)O#5?VE"PMG#,U?0RUS<)7.O+E#^4F8O(.Z!)A`C,:8P45H +M6&@L^:*CH(!8$/U(J+Y5+0M&2R+8PX)6!!=# +ML)&DC[;VJ6U'A1%%NZ:3(T3KZ9H7*S4Y+!28D`D]<55!0+<1!NL,]?^9QOV^ +M(%07\TP/WJ9NH62OSIN<00W]P_6FL#>738;"0Q6#QUD@32&U@QET2S2XY7QKI\>)W25[+T\DFAG:6<'(H&A#:H8YC +M[NND_EDRPG-2CB/JQQD2@UZ]XZGS/C]C@$DPJN6A&\):,!L9EJFCHO<,^:_: +MT5N2D'0V=.Z2/@?^J\>.3Y&SDJM_6,#!`G\-#D8;LC9I2B'1$1<6+)@0)%"D +M73P!N)"H]Y.GMZ`]!T+B2;2&T#HR0L2'+0%6B=T)G@^^:L61I\V6-F? +MUC[MEZ=XX(::)ZE$&@QOO11BS&(QH1/YUN7`^M#7?WX9A83 +MN`-,,T+UM/-E>DSUY=0[B0O8*##;32"=)H?@_N::7% +MR(&I?)`-RRJ;'>="11B`3#(1!"`HC%%445&%K9!]NXR*'P)-/+*)+HI3+>U* +MDKUZ;PF[25)4+&"QM+TI58JBS2:>:V%8?IN@?II`E&\GH,>D5BMC8=_C:.#S +M#JR5_BC5CO,QP!3\AG"IOHRJU"HEH58QVB?=LR-#S$-4LH%3EB)"697$,H:O +MSGD4NRXF:!W[]$#"DQE42MC'"'>P81!@B$8D8>VT3''/`T(OLD9U)F"7\TPOH90OI(\.PW8O!.BLXX`Q8A"4OQU% +M53B"R4",%(*.7G*N6KDCB)HJU*.6SC"FJ:\._4-+L]G8*`DZ],AL0ZL35V%< +M("2*?T'X,-\XC<\)-O>--'!/MBM.'J#%"Y[]79R/'-GI8?JV'6>0L8/?<58I +M^*]>U-'JNG#2')H,')J:#G#-)8&+UH7_==CBX(N2^D,A^Z<# +MN860=E*]4S*ARF2^/'BS#8LAWX4.;2!8<[V65T8Q0F"+%""@HI(+%@LK(%B* +M"V>^A=]7U.998Q51=9A7"Q42VVO$M^TLZOQ'L=S>7:(G/T=VQW2L4*E&+44H +MQ46I:-54*[L"YY=M2DY0W?4F2.'J!YE);6LN"2=N4^^=%ZLI[*/47-MLQYPC +MVW0?9#2/8=*U7-'LI2#Z]`$LAS(0MO`XB@EMBW$7*LT\P+B@+(@H,Y\YV55) +M`#$#U2+?#LU%-H.1S21E5;%,L9AQZE#=G.S66Q,>43+Q]6458?S +M_AU`['K3N#XTH()E+[P%\6$)&)C;45N069CF.VWF2^Y/L<'+]H42J--^T<+WK(+<[\68VHA@G3_"O&MYC +M\TP[SH8E#CU6'13`)%`IM#:.G:S32>W/TQ`_-6(DL9:FV=DP\_S/'Q6=X==B +MA&\1!'1ZXF-B[QE*PCF:A^0C"W'I,C"EY?&`(DD^0E[2PF]$PS40BB0?<#[P +M_25&J5>BS:=Q7^.S=!F`48]:PW\PD#N]@PS[O+`'BF!_Q_>S80/K.>LYIV6O!9B?2>FLS\[-0+`MO[KAHU(I +M*X\"["_;'3PDJ7Y-%2R86"8IQ4=>7AGNS<7&6M??G]=EH$?DM7ST"*EA$7B#4#.*4/R)0.!TPE!E`-$GL'$<3KO]`=PX; +MPLT]IW\J>*]JWB.FI/+Z3.(+E$7$/!+S=XS2;?L8&Z.K30J;HN)K55@YQEAJ +MAJ88V("(,;F1((P453CBF.RF]X:TTJT$-EJ.+6V[LIQHL51W:@LI;%!8JG#" +MHZ9QA6$1`>%%1&5O%*I)IA59P*E8`LFZ;=[G;Q!?5]0>:T7D[NL6J2=2T6>= +MV\^D0Z1"G/WW#AA:R//^7%9[;-'P,-$N_N5+>&Q;8H:]&36D`%1#7E[4A*8; +M7RJ;M$>7XSW:%TP%R*0#&4YS@SZ)=R=M\7-GNJG->498T5""1=14@K&'B>-) +M)7G-T_MZ,.P38"OT=)2?$5YD.7QFF(I[3`]5YN&[FWB$2F5"LD%P85E;40Q8 +M-781BZP#*E!DF6"6%L;',+9O4G5[=7K3(7<%_35':-F8+>4[V-@=[9/_DS9( +MY7(WE2,\/9T3(!=@.D7(JB^HMDJB;K#9=?%"QU!0E@Q&K\'$V=#-7U._!;JX +M_DXGG)`)-1C@9-AN(T0"**#_LK@=3EC4G9+(&/*_ +M"V#]N(GV?H*D$D@E*+L/NR@K,6^5JWBQ(DX[.M(F[E'I\L[47=MJ%`>APHJ" +MJ!IOUZGX=/I/7>KDO"9CGN:P]S1]&Z+V/@9)HUSTQ+P,,VYSHN,8!2.PP*M7!FLNF-UXT#9_HK%UJD: +M&9F?(_*"JK!DV^&?@]-?1TLT/Z-DZ*G1C^9I_WL`D&GU'"*:0V/3=CP-]U+> +MG"`T(45\*I#5KWEV85=HR*%6-JF,Q,#;&^QY'U&WGLXRQO*GSXA+U+CL8.&] +M41S9XQ9_>C+[DS*B6I$(E&9?JK9@T-F('LO$4 +MOL>8QE&.CY$MQG?+Y&010@2S;T^HW&8C0T,('/;0'^4ZUG+,@&2C`U;0JM[\ +MPU#74+G[;UFSY?ZLM%.:4$8EI4%N7!7,ORM'I7>MS17ZL0W#95M'4.J895BN +MBF3/3T-$JC*2[_>]/P9*6=.SFZ\OJJA%)JKEXP3$XXMBS!7FU1F@=+5WJI*O*1RJT1OB3@T6A.("1BEF0_9=U),-U9>ZR +M=IR(+//G4G\JPWW4"U!V<51E)/.H\UJR!G_8G`HZEK]KBUD[RMBK>0! +M%!I:V!6^]=%J#:NNZ)W:PD9N-5.!MK>##J30?]=6-B-3_#SI,]OK3P^Z[S-> +MJKT9RPH_3M`5#RH2D3OI][250BZ4T+8<2>QJ9-"22Q`"(T.(L7.3`:I?B6

)X\C>$B*QGS/!1U)@O&1RM>28%^ +M7ZO*5#7]\M8KVK4@YK*-E.$(D&`NYWA<,4+#0,&Z)>B"D/B$A8BB-1$HF6N/TES(L1!RT5!B5@F3IXQ' +M8@L,.>5GK*"F)JM5*?EWKB2]7-W1H;#,X2=-*#N#%$FJES*C;7BP%S($,!F" +M"+-)*[I(:AWBK2<^F8T\F!L=G3IE\\SQ3P9]4R!UB?*>L)/>0DB@=CKW5$[T +MJ=Y?6.N0U*7B*QIK0FZ2FRGMU4D2W9^%SQG`FPHF:.6;"N0Y?PH8@V=?%79I +M9Y*OD][CQ2QG6EV7V4#0F9;'-<:E1!DRML-4JBKPU +M$CJPJAJFG6J,5)C15%`=1NG"."@C1E1;:I+;!NKD%!!$QM2L),%*QA%TG#`; +M1)^6BV[@D2#3<#J+R_0N2UG,MS,1$?6]%:BG"!;-!\SP@W@[[?6P.&J1-1_0 +M>FSQ;S.Z34]FBQ<)L;4M.I%_TM(4!5&,4D\'4'L]P4]52+%AQ.Z31F$1/_(L +M=0M[0=Y(3[6_'\BP%6**1$%@C/5Z/1'VCMSUS6ARGRL;2M^JP)S5(HT0VT%! +MQ*Z+,Z21B;$KH')"?W>JP/+,\@#4)0B440+!W$TF-+32*'L`YQ.!^-A0RS1' +MC5=%E"H(EIF5F6E9MNJKK3BALA^T_B#C^6/H+=-T&&;+.:N!_A3_/8;5%65B +M\E>U2KXZ!7\RI#3L#:]V\*+]/\V+>=:A+#%(S`0,`O-:"PR(@"P<5-%#?O_8 +MN/T7SG?BHL++5!#:;#=[,2,4E"%56Y))&.A8GJF$!0(0R%A<]=B*5' +M:Q3QO+72PN],XVO#A5K$U>=G:HPTUS*]BSII=*A/Y"'`1DC^$@B1A$HJ,44< +M+G(D\[52G3J6=="<7;.!!=-;=/&'?H\6I@H)$ +MK\I8UXDB/7%:9=:P%@X_6]K?&?TIRD#\O8T;9^C\/@=!*XJH&7/N=>Q/2AEUDE?P/?]K`V1>J,K>J8)BL59;6(BJ8A;4_"+F4K+8 +MT+#63&K]7=86<@=W;JB^QE<&3;%AH3,LF,FHDU>>4-=;K,-C.?NKSD)V0K:$ +MJB8*]/MB["A3XK1#]#6+UM16+K-TX>67.)1BZUES.V)89EAD&(2*YCH7S**@ +M,=@<4K4/.#M:SKOQW_C^5(+UUM6Z>J^SI-'B]HIGDV?`@H/3&Y)K5P:`E48Q +MHDK`'@1+0R8'%W:IX8;RX^0AA-025]SDATLO=,94E[]8$+"+?@;,\T#ADB10 +M614B+G$R85LA084?CI@S$.-S,MI/CLE=:*`8DJ4,$@('`$.TIP^(?KHM&AN4 +M9&4!>B9W4Q4L3?@<';7$^1F!G"S;4PK1G?T*9-(*-X32'#"<(`;XE%E+0H6F +MV2C(H@K';555BBCHMK601;*"B:RY010L+85WE9EE(&C5DP,?L2V!FRM+"H@9 +M-FB:D=!:,*QK;!+2JHI\:DJ%I5$$2&].4A+`8S!D%-ZIE1:97NEIUWT=C1%K +M%`@J8H=8#HT"FHJM*L]]GU+TZ<<&%TSDF!%- +M3UJKQMD704#;9OUI)>=)RVWOJ"$,QC":AF8Q)!MH4,K]TK.$X*RF&-Q'BVE'+6 +M"\-3U.F;-728\:,AF;89E9;BYAEN#3%\&FM88(U;1'*LQAE>F33(54`TXD%E +M9,4J&N@;R.7W.X3OVN4J^_A[.8"][SOL9V%$MZA.X6O2E$6':/0P,PA+AA>Y +MA=:Q&LG"!B9J^>C6(A2VVQU3,@KZ*&W0,=;RAB*+SJZFJFYK2>IKKDF8R<57 +MWQT1N[=6HID(2"B`&1`3H:#JX1@32O`%^-L#7$L9"H%:UI[;SR7=WXY\0]W2 +MCQ]\GX/RZ](5/?%V=@C!]@Y!5/L]M!CRC`&P%!IE>X4(#"?RH'GZEJ,>N4<5 +M-K_DQA4=-53MS2<0FZA?`1EDQOJ-%=>A`Y],]MF)I1BE5$D)$A%&0A"2,&"*K(&H>GQR?Q0]0,VTWH&&X?3H6`D +MU0IH9IDP9G!M68@?-9UBP-FJXU!2-+%;A`BP9--E&,VJ9!V;![EX[]>D:>YD +M_9JP[2$,@=Z105C0!21KYY`K!!%D%@:>4.KJ=M45E.R>?Z_SY(%D!-T][0H, +MT4#$Y:7$(A%,^'K(P/[=W*-8.33>_B1]3KVEN466MPA(_YO0Y::64$VBC6ZU +MP-318U+@KN>E.B>#[B3&"G1B^UK,-%I,.W3W!WO1TG:4P\4-HLZVD!2*B'+[ +M$,PX//7*`T7"61!Q]C+5'$^7NR]U/>M!.Z +ME0#C<-'J&J,#U#[9Y6,<,J\CJ8,O$W?$-YY<#+G#:Z=/=[SVWGY*>#%/%>^EB=+/,++/ +M#Q_-_-_1>!V.XE*=O4>,3JGV7=,9IJ(J)2^8KASUZV;E+(T<:UH7K'>VZ\D2 +MVUJ9#"(F031IW/3&1>P\1H'=RLVQLT-5;!3*)2UB`>V6:("!.G3,Q-U43,DR +M+`$>ERXUFP,19*!20+4(DD&$EDQM(]@0.!&)H0]MNV3$QZ,[OJMRJ58DXE"[C<8@/QO2@CPC,A?FGZTSOYO3.C28CW>'BSHZ3*900R&NW9F +MRALS:X&C8IE'0:*.")F7?@@&3O%=/&I!O032[7O*"K#BB//RHX\$38'>1?4* +M@=TA`@-K3;0!XB>L91L8B$ME&9FL0JI3-EYSR#0102$P$DWP"GNY)L:[RJ0;9EJ+[B7Z"5EZA3V^ +MD,!X^5G6ON&Z4B/W;W.I'(_0[=\OZQQHV)"*M=NT*O&9ZS<;#\9*ZX/]7@V/ +M\&U1#=*>-O^O2OX-I]ZV<-F0=H(W[?'+<>9NHP17OX-G?=DB$KRIFNR8Z&J. +ME&GV%S-A14]+0"[DR7&>_OTFBM1P\Y$.LMO)^AH3J@Y!-"\$;AA`0Y<2X,.? +MGZ!W:H=;-GOI![4*I=NU$:D$S2UP:9/O]D8XCB]W59(!BT49ML*5A1PUR=#F +M;?K;^]X\NW,)\S1PF"ZM8GY_5@_?6320H]=0>\\]"%+B&V!AH..\0,_SE8&" +M/["1%@:/N67G$Z[H,W]PA"5FA/1"&T<0VS(I&F:QPR`W00=1,Z1)!A$D1W16 +M1C:X8F-A<2IF9"&!%".8@+`_FS6F0#0&D0FLN]1/#Y"%""+#7$#0A&Y>$/98 +M4 +M'[O[`$EP.I5RW='\]I54O%G<,P'K?MPB[V +M(4N!;IL=X,H01B&!&(A$CC[S&E#SH4\T*.W;O1K#2>IPU"GQF?"3J1+S]GKC +MZZ2SZDL`6!#AHA>,,G1UCO/A$"AX-(V(1,.#,G7775#U904R8A9UC1YXIZ>7,- +MA2I:VB+)Y@^9!]8A\E#N8C`BH$%)TL-,F((HGS^[NZ:[%T:UQJGM0/D=9S,E +MC8Z@S^1"Z"IO+G)P20D^>>$:"?V]#3B%JP\+B:J0@B(]6C8]HS[%%CTG>7FU +M5N[.U0^NA7O=<-%&1L^]CP:TTG>;*6XH+8:9+_10KDV_1TGU9``J,%8Q17M^$',M*4(6D=TS\K`E&2P9M<17BS\OH9\'HQF6QWD= +M7#,F-A\F*LWV1]M?`RPZGJOMR3N.PQJ[)G''@L892ZNL*:3C)K87;J"9;K]U +M9H].CCAY.(B''RU'.8+W^5\<#AL!C&A4+<#"25E&"R00*H2K4B:COWT?9S># +MF!W,GT;`/U">]).X@\6BL9(/%JDI!1"0AQ7?-Z!4-`,+[7CDT.&DRR>KRY'E +MNKSNF:LH,HA=V!EL%A57&`1@TH4I:8X1,;&D0LM$[F0D.]5(<(3L99W(10O+ +MTHI%/JD+J!F=*!P]6FQ@&.)#9ACU0T;BQ#65M-R$,Z`IQ$ZL=`2H'>DAY.#( +M8PE!.YA8.J'K>-`%8*`(K)$>?"F#$ZMAU\))#T^K(2B1&!60J07ZCUGL(\.+ +M?:RAM/5G'\[Q=SL9NAB$[>U!C4,\'7&Y%KA7-$D0 +M((*QL,R#6UH`,^MR>IUJ]C+MT6'3333A2MK?2F"8<6H,[IZ0&>[(>'0Z.DY\^QK2"BO\EA0Q_6YF"/)QXPT!IF +M--(G3"O&CPWK:;FZ\-&"LTV&D^(AIGP[YSG"CE.69$%^&E#HP +M-^*?%`9@F(DP$8$E0OX+=*M0)%(*L2[* +M4C(JK`)0T'0#%%9A^7`H%+1U,?2>/R<-&&E"SD)!E/IT:-`:+H(1ZY^9E6/Y +MFJJ^X@J&7N^@6W5I`1S)N6[A+6YLK1B]3"JEPE"3\CPH7SG0WH4)*[7S.CJ` +MX-1:8I,09X5^+1+,65;?]VE9U>XL2QC;^!ZB">)A#3Q38VM#D;]9Y'4FG:BV +MC.U-2`\Y,OS?.Z)YL,GXEC=7!G7*SER5;]J!ZIC5 +MA1L-]N/HIX%*E)7:EDJQ"FM@KHL4;PX8W%KPI"PAF`G3 +MBID%)2T%W#0H@IOU9QX<\[5![#2%EV=NFD)(0H!LVVOR2O^E_X+1022.D`3) +MEP&;$ILL7RB!NF=%[1#&V.GY]2"ZH?.FX/1-^,:&%%PE[%&`%1%*U1E50+)* +ML8ARY<.)*AA;-I[]YZ<V1XX[>J,"-E8[LD$2DE.0 +MQ]*A;49:/URREEL9!G=;?HDQ7LOCO=0QS,E5?Z:IWZ(O'$I9+IRLTCA>2+:0 +M=F2BGI>R(@D9[(N&4WLDFR/!D%6RQ=W+M!EBDJQ=VU&;S&ZO?N?OO5-]Z0W! +MG3I79M=QNI/*C[S>Z_D]K@#RMCK\HXCR=(8X\,WEI1%YY5JD(22"*FGG9+S# +M6K7Y?164U-F164..B.OF0+2VR:W#<\]K3E40)E#A118102R%1!-NLOKYH5*VT5(2S0TX]L1N$!7P'`%B"\,0&8` +M'5;=936BUF.MZB46]H""W-F+2M+`B4 +M9F=M^'4"Z6L/*_X)UK4+MAE'.SM6(]'#\T8\E/8!S6QDH2KA2E?=#JF54B]V +M5F7S^QPM+(8PS4PU^R"3`AVAU8'">N:>=4!#R@)`NJ5:S65^6"T1PY`*$H?9 +MFU1>_#06H=YAG7]%=,:\\M57-?"2M=S;1 +M@EF?7M?Y")'R1M4#?J.8M9!IY\(ADD,"-NU*G<7P?QG<_79MI^><#S;JM`SJ +MHCVO6A1%#M:'&%/989TT8G3K3)FY,,JLWS?W8*FM6TBQYGDU%1]/@-%W[[3A +MZC;UG7NS;N?+M'6%ELNC"0(^L8KVI!!AJWSQ_)V<=`[M@0G5D]QFD(:B`L4] +M3]PR7G$_:N?/MZ?&]D*=)ZXJQ/8/E\6'P%"U\W/\',G4+N`:$C6/H1"CA$W56["/IB['XC7689TF+[-^8?]5ZL1?(G47JBE3+<1E-*+[-_DLH_&:.J +M_V'@56#F.U2F896VU;0#V04VW2D"D#94W1C^2P+Q0_9LA?(AH)":/I8-9O;I-!:9+3*]=R'6R2&O^YZD<>1:Q2*.H3-D?6>L5PH$&(DZ=H.[,\!P$ +M/-N(=.2ODO`GM41E'<'0;WY-9O@WF]J=FFKFI*^+A(,\-3K4(TR.SF;%QAH5 +MV$MC;/[JS!D6+JH]Q[VM37W]?NK/X%.TV5HSB2.(`#$:':-NAP`3%4)J5B6J +MI&RC9E`6!XMV,@D03<>I0M8Y32N&DE8*'\\\`&1L8PU892D,@Z)97=`-&6`8 +M(%/_HU8MJ9N)?5,8DR"Y39HYV!94"0#7 +M](B"40'?.&Y&0B&ON6"W&'>?"CF]?K3>FO\S02SE,%DI'L`F!N[[AP"18"4C +M6BV8;,_9X6#.245!L%-?N_*)!E60;"-("2YMW:EJJ)*D27)@*94M!Q(6J"+0 +M0I(D`F`DN1DUA#>9MKLU%Y[Y2)JQ896UTHS1(9P:)G\P_X1*+>+!K; +M%3BC?]/OS5%$$4&(CY\4Y,Y[9GQ_+1T[^W+4JX0,R:F=$IFMIN]+.[?H<8(: +MC'-!7&X1YC0N0/%&,ZBV;HX(0IW@ZHTVW"F;`HI4)E&V/JJ'FDVIV9[/=`TB5*%H<]X +M=J4"CD:A([0>>6L0AC3-,$5F4UZFV.VL\/,S55?6'XP@QQN[O;L\-.T:*-#9 +MD=*5F0Q&2$"##!@ZU(3D:;0QK(0F?`.^MY'R7^^/H"MRE/=LA +MXL=-9'Z6DF*:Q%LQ1%A*\,QR-K#2\.&#`&V4"[1=Y7^992 +M"""0(1"-@G;J*BHNB#!MC(R(RPJB&MK6F@(>W>R1"4=0%ZIX5`'&8P"-[/2B +MNW[W'ZGB46%A(P%+T,0XPUNAI(+(TO9,8`*PQ;8*TQ-*AS)W["B,YLS`D\T@ +M2D@2(E*#V2HLG#VR@J,8L%'BE;UMRQBL2U3O9SS>Z"G`<-UUWJIZ9-]T3-G1 +MR:W>L""E;46%`JVN:O-JK\-J#WR)(%.Y""N%L@VI;)40"8DE$EWW*+`FH>*S +M,E5BM%""A!+TT;'CCOV<2>SDNGO2%5"L[B'1ZO@DON7@=3D']>:#\@T64(S8 +M48X56#L:?`1?B.S):DQ0>?;M-\3X>+>>4F!G:%1:T0&C>7IA6)`+N&+JSQ86 +M%CMWZX6R&F%UAA_@:S0D?L1H`XOR56PV0W[0F>`#.ZRC&"(P=4BPYNLT`];+S3#+HM +M,:W])..L&L;.2_Y4;Y".CD%NW[ON)_48<>&:5I("_EW52(0:1 +M1)_H)!H(HH)`76G&CF5LW$BDL>O!=]&D+!:17N$F:TFBR6'WTN']F4+%V%B] +M",71U] +MUY>,^UI]-.Q#J_9'K]P\D5]#1^"W":/)41?;/`-=>R>3`IN>6U^:*(S.EP58B>EH;:@C:(O-NL2QC3MAGCSG-I4L9N>X.CHH/3"`_U_ +MLN,P9F-\O=E+HM&S46!>@?P>CPH-%R#&!S*8TT[G +M::LD\RU1C[4'DM?XOMX1_9^GC-B(AI0H#TJ>A,?&?#Q/AU&HI1L?M.->N2;0 +M"[,$^)7'[@4XRB+T/7&FNT0VD1UWN/+5#^J1&LK;AD@XH5FCY3GT*?5?>7\Z +M]>YY$C/T'RK./J?5ST/0CO[!F>GIZ2QE +M$I2Z^^0/`Z\\&I'I9/U22I5$8,2Z%_\V]6]3J*6IQFM.XO!R9(/$;CL[_=V( +M!ESCYR!KEO)BF/4N/90N$2)R,H#$:@;L0((2P:4"P09&#,.GZ3PIL.4)S^XT +M>7Y*<3JEZSQ]!.S1;T844$@Z934^?T*\,Y#&NUBB6;N.98;3$V\;M&;Z?QN5 +MA%UY1GI,4@'DO#&4SVPF=7)>-$Q&(89H,#@;$`D5:$2E#(HVJJ431DS-4A-7-550, +M%G;NJM\T7,D'"W!"D8A#5E0/!V16I(U8+.9N&$$:$R@+;D,5E0FB"19%0L2B +M6!?#3%%@VS,30ET/&4Q;2Z\G!XM3A^`.1D.K[FP>OV&+Z;X&G??_A;ME?.E) +MO.G!,$_%`-'\B?7V=CM+HUWOS=C^OA)XF)XI>G"$^#OIX%!1FFO3\ +M^R#YX)A,)A,)`$GUM?SY8C]BR<(5:8=-H57N?']'C9@T5-\0\K!J]S9^I9)( +MR'\DA0`XC7<+Q8I3M###9B-^&,8&FUW(&H+&UW.Z\3FSRMUMY,$N[SE]P@>' +MM;6U.U*')>7V%1W!QB!D');WNZ^[!/R*)F(:4!_A&?QHHB&>I1$1+`$\$\K- +M:+H>(M38RCQ7`VE3M<:&KM`&RY^B-WKMQ5;Q[H&""S7P2[@2;9Y8,/[ZV?Q% +MJ.1BQ^U]R3EI2,BD-VZ^^SS^=8>Z\PC`J2"D(H*$4!8L!9(LFDDJ`H5@+4%! +M1M%(?X>OY_61OT(XR>$DDLTW^TK4N=Y#ZLN/].TT^MKNA"+*[Y>7:[:>8/^- +M)T819#S0GT3+"(`8A!9`46DAL20V@2YE<3]J^_?P:QLN:;B!S-:S3Z79OQPR +M/"T2@*,`IFHB!I%6"#,4^Y +MI@5-KX&$<&F^-W=V"(K"!:VDJ08YQZK@EGQ-A;[C%FW]SME?;124**R*(22' +M?2P3!55"9V0PRRZK?%^K^#7E7YF74CB&1V]N9S.5S7US.]0[85ZL=D=6EJ+O(_HF#'.;"J-BL+-MGPP=2*I5?9 +MRSVF5FARC(89)Y[51=6&TVPZZL\,&1-533*N%OI'][Y>O6_`QX`?KG.(XLG: +M]'Z]/1LW3&D4'IH0PSV5^0BS#5-,[WM$WX0(^TY9;'=LVUY)6VL+:_YCM1YT +MEL[).(>M2$X5E;HFKO>&E(-E9)IN6?.=]"+/DKN>M[!7Q&&S&%):]0E""^B7 +MERBK,R[,7*MH**S:TC`=:Z/)%;;NUA"_;@;+8WO5;IMLXP2;O4)GZF&7:39! +M:K;OV\-RM=9-J?FID@G!B:4'_L/2@6H?JE/@Z]R^-%#.]6:>^V,IV<7K'5-+ +M1)-/!_N3MM/^A];T!/]I!\?S>E/A/HOXWZ^7`=VX0-UCT_%BA(HU8\51FKV\ +MLQYSUP`/5\Q!2FPQ0"C":D]-W_BZ[H\OU>PKKT9HO/".*J$16`H!(Y<44#IH +M-`R\8)FZ(N9JY2S$T(.J5CLHL*)%)I*A1"I!-6%-9AI# +M0AA2KGD3I"2)Q)W>@TA<6.@)/"J1`1N*8F`[L,8+`;NB-%(0U@G`-S +M$:#`1>9JYZ9[GY;4A(2--,P(4@(JB00@"L&#$%@R2140$5(1!D1&""V3H22. +M@`Z7U5DDQIL8--CL'RB@%>OLS4-]%02$L'&*DJ0+V/1$P;!!2P52V(B2^C"$ +M6*((C!&(P162*([#4"60U`$)KMVZ20-R!)ULE)J9H;`54$5@C(P1`62(HB+! +MB(UHE:D5C!61140A9!A6R0+"L64L**#*$^#X6>U$D@10@?!))$:Z#(PX<$[, +MWV`<-#INCQXWV!4^A:DZI8&+KO7OL>G@V*V(J]/#5=Z!R2(\7RX<^-2F.^6. +M\8\]D7[%&?<];[5J;R-G@'+?2+$-;V*WK+ITXTP=_+SL%OOMC$NWXW_?=;?1EUQ)WEL'QW6\]3:-[1U5$Y' +M;5FG#N[O-07\5O+[_%P.SS\AI'(+(*'TPWQ[\G;+D4[6H(@A\"`VQOBVC@(X +MB7%BJ436M$58=(.NQP$O-YWSLH#I$4-+%*XUY2@VQ`605H32B5448P@,C^:2 +M0DE&$#"#"Q$1&(**))((!!)K9<_977T>D.KL+5MD822+&,&#V3Y.XYLT\WVC +M:DX9:GR8A:AF&T0/T#1A!$($(`Z(!2(&@/L[HV;P8*,_(#4S%@?3'2(`0T*G +M"1J:E-'@`IEHI#&NGZ/=5:LX@-/Z+34\]>;X3:?1O+G)'G>73E&FG8GV;R44 +MT[.+35;XC)K:^@H,"M8W3B[#:`J3V'NKN[L$M6>W/6*^O%&ETP.A*LA/J8)" +M/'%LJ>"3X5!+SGS5(^MY^WT_0G=`":_70(H-$.^L#GL$993L4M5J9;LG5JE> +M7=[*F"FL+`LD(JQ476D2O8MFQBJH38@?EFGYMT%K(*JP;N=TH%W;O7>W7Q`3 +MHG/%GLT4,4J5/)@'*`9SZNF*:D)1(#MI_VMP.FD;\7X=_3Y*.9SL=P?A1VY? +MNK=T@]V\O'T/#O?L0J$`D`>@V]#HOL6.W`9KP,F:50^20QR`6&4`N*"#6B4_ +M1T%1RS6-/2F,#G>):V/19K?,?:@9:UK-$PW3IIFTP@C'?.F\S%-[.A)TUR\5 +M3CFVFKLR:T@=#(9&R65!)B)H[$T(9*=%051,`O&'L\J@^9=%T^L#"DR=LL2E +M69Q`W6W2@HQ&J@!BSI<@-E'&-_6ER)G:TFJ6K- +M=LUT17`6W6MEOM>K4H][UO14M4G+NJ!Z'P@%S8FAN0^.BWO>K4\W1QZM^E9" +MJ;<,.AIH^NF#.\Q4\1;2-I@1'*IW'3CDQO*I>][;R.,#WQ!,85Y20KH=LRH` +M'8TX!H+3:+,BZV\8[M$GO902%#'&,,4*%DHCIU7JS1>8Y;)@-MV:31Q;ML:4 +MD$%UN-O!Q8 +MEN2I%C4%]WHVY0D82FD>?"U-T#$PB%AZ%JI%_J+#[*,DBT]=%]E@H8R%5DC!/'OS6L]'ENY[WUY? +M:&WGPYP\N=(LS9WI//RY#WN58+*=IZMTM5<^&XVBU*01)J:5;3"(46%&-*,B +M9E*&;4JC2'#FLSH9.._?;?:F'%K*^K0F>=ZL&=4!48'.U2VF7P\-:+`#FS"2 +M2)-,(B79&7)L&5G7'.]^9XHST.==%A&+4Q.P(%$6N0@2 +MYWPQ5BA22JZ!81@.4E3F,N\$LW/)HH[&&3(8 +M/CVN:U=RMT=Y/;)U\CH(P[^W7D377J-WG!FD#LP\DTZRE-CX.*1YYN,UF-S- +MM'33PNDTE8+I%.N/H;SN@)*(`Z2Z1,J<"*H"34RE``8L"-N*@57+$ZTF2J(8 +M@DM20C)4\NR((S;P;;XXT@-EH^#3RV/0=_59:7!1.E1!O3NG4UP;$P@MZT@\ +M\+L<6J%Z&NFJP^^,$!2&0R8OLCWQB1TJJ@SLE>F1V`GM&]85XH*@-YG4_@,N +MV5':_JJQZU#Y+$CU!A!?LFKUM1A$[,9OSQ<7I$`QK4-(&:T8WUVL-/A^%JY% +M,T-`-"VD8@#4#&V%O7.V:4#[[)D`-)#/"7+F.6^AQ\>UYO`QC=/6#411`',] +MM)Q'(B^KU-R]-J$,J"40><(G9[LRVJ>;-%$JDP:``LRG#[M)-)*RF8021)JT +M2CSRRFM4[)+T0V1%KE,4\V=7:*046+O>!9??Z8=YN<>-)=%*D66%COU?/AK" +M+6MA)F_XWXX_/5ZR$YY7G'FEN:C +MP:*)&D?J.%N#VE>?+,P)#NE52-JY=9AKM/1>MC.5V*U2B#,WB8"(36=F1T*1 +M!6!^0O4WF(X0;B?A"ALI`8#NWIZQ*;=5;8\<*S2!&^D.\0\+@0&#@JY*0H<= +M[=KY[HP.]?IJ5S#.](TIE2`>N7:UHFTT9<,-U'5423:11`HS2!!2!JN4RR*. +MJ"82&"*)1D2I2,'FJU7H?$0O8VQ5,QA4/#$=T#=(KDK*[Q<2T&;[[X(T:*;3 +MH8G,9E"^(@\ICM*X(@`XSXNKWE4H,;)7`]4YOG`MC;`Q`2Y"]+8A.*9^`\_J +MDQPE>+$>>NE:HADHC4R0@T17P$W`Z*%4GS=5B.O%=9`NC("=O5WQS;H-Z\0@ +M#VKNU-CG;W4S=Z;LFRPBH+IMT2Y#T:UZZCS)1@=FZIMRSD;F^LIR;X`)V-#7 +M]!9`\5II+77='8\FU(@)BM58AYF-E>:[6MBTT$3AF'3&E9=**+:!2[7-4'9! +MBJ6Y:M=14*!DZ,PNB;0*MVG/1%F<_1?X=!"KT@(;&-C8R*;C06@XI?96Z&]% +M*Z"C+I%L7*[PA7QA>-%GAA?K"`32T+91.R"#0Q!S.VS[-\6V*Q[<(%VVZLA& +MJPN=MPMC7:U46KBI'3)`F+/]WTU?P\T!-\8V9:S..Z,NWE5]P0T8"C!I1!09 +M57ZI4'D.LN,12FQWPE;GJ;5KXVSD;>)\^>-MSK`/OG//6TR""-;+45NS5"HZ +MRA@L1]%#5N^._@UPA6+)5"#"*5)!!I%54^^'H`>Z<#?/35OGEV::Y0#\5$FR +M;V[EBF0ET3H1Q+,R*;*:NB[3CYW3#+9^QY#VNV9F.CQB->W4'<' +MG9`Q:;!'9*IAG/#89I98,E51]L)@M@V$JZCKO1!?CJ5`O*@)9--8VD;5"4)4 +MG*0ZJY=<1UO:;#/W97.M<,+8E8=+5F'>Z!25#'6Y<$:&[HE:9WTJ!2B%`;LU +M6@GA9S9:DS1,LF>PC4.2\IGA!LV=TK6\:X06I;;56%1C%"L]BS./GL*#GZ*! +MH-!0C-B-[.*J(2`$#;[\7%WD[B3@X@0(@BZ8L*-/-46)JKH,\\FD/I<30M1+ +M606@TH'1`:4))H$BKQ7'WM-IQJ;B]W'A0$UB.$:=A/%W"ETM`=@MOX5?'S7J*_/$0MO9Z=4?T];^KU?`Z] +M4GL?Q/,]LL\'GGE0];>NQL[$!J[W"_/GY*V],D>%>3H(U1%U(ZKFO4.OU_G; +M^_-?-;)!`-0ULW@7%:RRU'Q>_4"X)O]OC]#_R*#[$!!P$D/I20YKLL#B`0Z0A$(GE +MQ..[WO?@BITG/H/]1`WW>0^"9%%P+0XB"1C?A$1Z9#",V1(7%0OS$7$&@+)- +MHC'..^Z,B184:(>9!STU0%K!&('4@!L"GJZDAEED';A0&3H=(9RW@UH7N8?, +MRV#03EO3SJ$^.^`^`IYJHI2S(4U)2>9)$O,(?EF1(E%6$\\\/F,/A?"MMTV' +MT4N!OOZOI5##>`AIQE&W?P\PG1?$VZ:K$Z12[\Y1D=KWM/5'C!I:@M-Y?/U[ +M8&XN$%?J%\5ZLU3K6;P_5YSL94XG\?27$/DYM*""^$7`51)#U;FP\Q>Y:U2L +MVP_W#N:*-)YHMM!>LIF+(IG9L*)M./9*VFTO7=L94.]:B8M5%L3!.5N2 +MWCT]K5U5<[JYUIEVJ)'"!,SMS=\;Z:-0.)V2J2]994B04RH*S/-LG&(C`6AV +M:^)"Z'7=HNF>-*PUPNWU3K6EJ<[5=VP/5"CI>S&5TS>,I$^HR)KNLXZJV2_2 +MO3?',/G90J'#\POH@9G:\7#4@Z1%;";6=5<($0X>RTVL/57RO$2GAL+SC[M5 +MO2=)5=L)8Q^'7'X=;_G[H+RM_SN7\[=O7H/;*56_?,W8KA&>#YE_&(D6D=?- +MK(\V<_H`/L]O='LFU9G-5QF[>]J3=^(C-IM)O[Y_T:OF(,SM^J] +MZ6V+1R?ULT%>;#1@/F(9]+JS"K/2D[#*.W7BU"#DK,EN^IA@5=G'1KT\>:7& +MBO8BPWQ/Y3R0QMGXI;YYI\A%3*;60]+D_?!8#.CC]ZFJF\U*BS^\/QV5ZZ7Z +M#?16/OT^3C6#`P89S3FL3\^2B;\4H!$;#A2@CHM[A,'8[M`*S58H200"?$2MPAJGI49) +MP+Z*.EE&4H`E`!4WWFX%!I%4"B8Q0091=)%]>+XSOLU(Q1OA-2'X-%#T*7OZR&V2(@ +M=YBQTDA2A2G.#KA:C)H`;H/M#:WFW[Y[Y[^I,XZ;,(3HO%T@YRC#KUQ@1U\O*O7"09[& +MDMV?10NVEM'3[4K'5PQ`S\:"V-M>A0X&B,[5\FU,;FIQQ-&H(2E!11:_:JZ: +MB.!:L.!3@VAE2]4CFZ]!U%N>E6Q,L+5:@Y\BE.J-JPJ8I0F**+JT`20,Q-=> +MMU/6SB'J;ZD*3IDL`A4L*`@RE[J%;HY8)$`8%!@BE=*EC@F):Z9-[0FFO<:QQ2!?;0&QF#Q-QDZ66K,*EL +M4X11EE;GVGY+R4TE1>H:PA_N*E8C^]%RKCWQO\0EOEJYGCH +M++:;IOTF2KB=POSK`,`H@[@=<L9$Y&*CH&2I#Q1,KY+;5*CQ[+\<9&PR*X1"-T1P3 +MEN_JB5'+M=QAUL`+W..:7*BS>EL"E,H@R(I"REDS9W;HH":'MMQ5(I;N1CA< +ML+5HQS#O>:0-!P3)Z!2"!*('2RTJ0IH"=I10:%R*("!:U2(WOS/8R)ZEWLE5#QZD7VX"W +MQ>.T?3I\53:U;XP9B):=X570XO-=WS+DA;>9@YV==;KNS0V%SAY$.& +M;97K!K?"D5;2U?CMF^R2!9.40,=GZ#L*]%6'TCRX8-3EGBIO5JJ$+34R% +MS4LK%L35(FI:XRP1D&-)9D+U?X]+=^U>%;968:,^^J,+3VWHS5$F>*L-V0@2 +MK$=SR7L$=H45="`H"**I#29VVN02A.D$%T74M-4B2(<$$#" +ME3+BFGF0Z!EX/'A;4=!`;A>R(AD+/`LGEEEWXZ,,]"\1CW[4 +M><,@5KT-L7=X%-'&Q%D"V"P`;*9P("("%3LW2,4*,HJ4YKZNLC1R8$1]'H[+ +MOF+N6!6THB?"B2BNR6U*NYTCCOZGQ6XNG?$+1T%6RT2UY_.&S`SLNNEN/9A[ +MY0'YF=\;G#6;B[6$#S/JMF2S-;.$0CZUTSB>TUU*XBBX1B(:P^I6#:<=:WDM +M*L&O=VP5>)7QSA36O%\Y#1OB`W+MWKC'!X/`N]D=510<%-'1ZB-1-[O]OG,Q +M:^E0V#WQBVS5KX+MUWM35J2G24]U`GK4Z+%$*=B[YG_I?PRJAQ'!Y@B;GX7% +M;LJ9)_X)M&!K()K(H:#S3U7G];#'OZ:O^CR6HGSZ7CU0CWA`/06*Z8$S&H[D +MLFKY%_EL[,%^@-R@8>1ZH8-T<_+$KOM7OX52,NA\N@U@&8@`2!DP#OSF*5&\ +M$/C[#MNG_A\[=L78?L_\]2&KX#%\SSL"EN<*EY1MC^TN$#!DFXYC,L##-Q2$ +M@00DA!`.$8E=[9WCLCMSK/V3YE]Q>[ZREV^RB)D;,\;F]/Y6]ZRG^`HC2SM?D=%_%])D*!?1`M_+NA\X_+@'D;T+>O/6T +M^Z9[_W1_PVEI,D,#"5O>P^'XF:I7M/7=`83?>]QP-3RJ+@Z#]WOJQ3I^VS-K +M5%H0D/)`BTRENBU#P?KU\C7WL..J$ZJGH*A&Z`J;+>5.UHH&D4D8&622P8`L +M"`,@)(!!X^UP^[[/2\T-M[58O-BZ?]U[=DB*'"YWIT)O49>+FA`1D!R222RX +M@7\N77FVIV/"5"#=.^X48.JC#A=/&%@O24G:'8P/6&.8#[XS!VT0?YLDT691 +M9Y)RYQN2@&3%#@H(-9*P&)%!$J0*DJ`L"H$&*D8*0@I2(B>0Z@W'VM-O. +M=,QX^K[NO@7U-G#7PAW(YVVIGKL1)P^\&\F9[MQ_M=^_9^*_<<3R,\RO"9YJU,[RBI(_7E7XD2$>ADC-^Z17UM=E4UWY=21X/0UD)""\0Z%%/S"4RA41(/ +MS_VMQ404%/RO_UA].PB)!A'7(P3V]'\K\;G`2<1^YPZ!7WLO66V7#6*:A(JJ +M:DC>;$L"93&MB.=A&$B<2@3HBHQ'-A +MYWXJ<2:=T)*`/Y'%<6FZWF'#ZY^O4K\Q]/D+UIN\A[7(\E])S<\\:`H;AM^\ +M%N!O7'6M>!]5,&GPW5+"A_W;))]X,)]X@L4D4D%""@%0*RJ1"I`*D`J"@5(+ +M%B,*,D*0"0`D5:*$3LC\=V%LAJ]E*_6VOR3;:BEJ72C\"2@R;^-B!=FLX&63 +M`ZLM6CE31ZV]_;H->V7,RKKJ*U0&PTP,\\C8M>')[>W&4/,306L,)'L0/=OV +M=-%#M?NW%VNS^I*4LFIG0^TJ=WON.H_@#\@,L8J*3VK! +M446A;&V5M&HT%1@(HRJ((6B6K1*UK6RQDHVV):,2E:_D?DOX_X__7Y<=C^;. +M.QGL/U1]W_/Q3])['QO9*"YR8?'''<<9V'5@&+RN.`,Z<8LA1`J(R5E10BR0 +MD6!"5`;_(_YP?^1^[$5S2\IYF7-?E.4GUGVX_]"AW"=D2/QZZ%1\ER*@CZ3O +M6UG7QY[+NE,M-.SKW%)(YBP]F6*5=-M8=O+$M)2VC'Y?W'NCJN@L'VU+_V@J +M4+Y)LO1_`>Z+OC\7UD>Q)/I>K_%5C%9]'0W=T>=.)%XJ`2#Q<0&2$$9`&161 +M82I`M*18!619!%96!`=,PD,D`-T1L*4^QX@N<)H;\_+>WW0;8G]&@:4Y#R+X +M(2[_RM2EML0[SM[XP$8"!FX&6_//Q_X8I];YO,G.HFHZ4G]5\ALW(#H.9`4< +MKX)\8G@2T>.\UK:C8$;X#A\R:3![4`9$2?6MPD1UD7T*"-<5!*-*B@JT@O:B +M%]%44MX>'=:"N;BE`[3I?HTY7V7.?6XSA6'K"_/%PLKS]LSS8!VV%G-[SV]; +M[QO1^`;CRSFG#A0[?[L4-\(9W6XL?3Y!I>S=02`!,9Q_-L+O>['-5X1U +M_1VSE,YU56VO"NLZ5O6[,#;]E\7>/\L(X/C1QQ*7O8=A"+KL-+^3^,#J(RV" +M9']V?7^OWG]_U),8GXTX&=^._)'R-GS+S3^][UCS:E7]/VTNUCLSOC/:&^/" +M,"UW7VCK'4NWSQGNT43>KL/H<+UOZU#S]E+?\6FYKW:ER/4URR*1.X(`XY(1 +M?HE9)&E(LA"L"H"P`K`K"5*0"15I!2I?![G@2IMPT1INOWW?6BPZ9I?I5P^A +M\,VC#!,^3_I1.7AS\"\(]5TKUAF%4#3X<.P>K]-=O5NQRE-/6RWS7^<=8M'! +MB[2FRH4M3UZ-3O>NV$Q2QCO&\DGZ$C,TBB?Q/E9J+#:.CR#AHMC\+3/N>K^R5N_CW=?>-_M>?BL-BH4=Q_PX5!'5KGJSE1L6DT($ +MQA1JM;O/GZ`Z;^:CYE,C_3[^?\I/9[J;/G?'V>RBS\->6B,KN8\$ND:0DD-^ +M],VR&9A)B1K^1G;Q4^T=>R9[W'P#4:OCI_P?;X?11/D'$8]#5I/M#&\H60+P +M&(#2P%#$D$#24,9A)F/DR-[)R'X]#ODAASL,%@(QZOYG6^'+"$-E"X1C]SX6 +MVAOZV"VU%6CD_Y+<PH<,*[+@3I*9WZN)\X?A7.P\_S-F8!-?XU$[+/]%[OMZOW[:^XS2& +M/_N;0^1F)GVW3)?_9,CJ?,A%],5ZI6ZKRX;`KQ^R4V*K,(;Z,@O$EOCU#?,X +M(O7&I3N+30.D@RM96[&_-)0)/\49"=6$!810*A/^FW$`K +F"+`&FNP%5J%=[MCO,A9%D0D'L8&%51TCE#9?_B[DBG"A(9GC:TH` +` +end Index: vendor/bzip2/1.0.7/sample1.ref.gz.uu =================================================================== --- vendor/bzip2/1.0.7/sample1.ref.gz.uu (nonexistent) +++ vendor/bzip2/1.0.7/sample1.ref.gz.uu (revision 349497) @@ -0,0 +1,850 @@ +begin 644 sample1.ref.gz +M'XL("%<.FT4"`W-A;7!L93$NZWW'?ON>>>Y7N^ +MYS>)(]YRXZ=./&\"_DG^^PDG[\C_\;IV\=L.&LS)KSLFL6;MQ[5EK +MSWD'7''$Q!/XYS'XY^9$\5]V[;_Y]Q]9_[Z;$^OHCX]\N[^_N^N*^J&G'?$/ +M/[ELXJF%`OW_R&QE=M_:,S]^8;[36_AYK:IR@U67?_ZJ1JVU>/]\K:4Z]<5S +M_SRO+ZW4%[]\7SE?4?GJXEN66BI8[%_04J5:M;EQX7U/_Y"+I>":C?YX([M^?G%VS<$C=S"+9,3$W#3^Y_VLT-_\+W_ +M>.D^_Z96:^V:Y69^'JZ[[H^RS4PEJ&:";*:]9V'IV;\NP5WAOM<>>E'MH^^X +M?^(8N`/_G\I6&AL>N#A?#QJMWBM$K2XN__'JV!5?5&HNG[2L%`[AW9[6T +M%QY']RP>^3?-Q9,?*<&\ZUI!;PNJ636G\HN;[V_"K^RC:<+>^N,_N7(?3%D. +M!W!U+UZM>&JR]-JYV69A:475/;LW[^_N[7YZ*$7MR;_ +M8J/]S%4XHQN^M+G[V-Q?S"[^X67-Q:-N;#6";"NSL-#==^#8!RYLE\JY4A6^ +MHCA(Y7Z;/Q:6%=Y:VJOR.E"SB\^_@EZ-M^@235$/1M&'4=0;^19<1)\9PJV- +M_/7M4H,&J[)!(U]HET&P[OE":P:^$(=&XZ='+,(+:M4P=?6W:?K@-9OOK[7Z +M?[MC3K7T7!_FK];HJ*"J<[`L/1A:J:KS/*_=T(5I*.EVKJZ^-GCZ3:ZRY:#![R_!M*ER0/+5#HIYE86=52K++VM57+7(:P.>893R +MU.(SFW/PM35X^7S33C3]MU3=PT(+WX?7/W@!_`C$Q5Q$PZ!]`W-?K+(LE4#O +MP5#S%2T39H=!LB)#F&ST0*)5:P9V(SX%93T=)G_P19H2?(!1B+#]51VUX5L6 +M4!NR5,.K<(5`'RYFCH7M0;."JH^%*0U[HXYBB0/!U]([(EN$-R!OR>3P3:@` +MGG]%D-.\BBA8I'BJHAA@>5%(5$X6GB8O#V_-ZV8;E`^*`+Y,PX_@)W5%WP&R +MQ*_0L*QZ3[6FYJLRB/A[X+OR/7G33"-?#OHB?2H7)FZ]$P2KVH1G5_"S-4D* +M'"09=;'9,F:Z5;9=KI0B\HL["<8!8VRV=39K/\C,!^B0,'755W@T01DN;?9A +M<+A=RV6W8^$2>,C>15&\FE8=EF)-9NT&G&.:&)Q_Q<>1=H<1J?I2F>Y+RUL# +MWHK)C[]?9E0W.U8!5S3LK:8FL8/-UF[V8)GQ.S3I,FV7'Q6H;K#HY_$`P%NZ^!-]\U&6_>$W'GKMPM#36KAG" +MQ![\03Y,G?J6>@"GRTDME>L]N".?#4!WXT])Y347U]X/LP7KG(//7OS,0K#X +MJ0G8>8N_N"^+V[)1TR`L)"AWW(^2"4O6VXD;N;YXZO[\XE,^U"`)@QOA$,9O +M+P>O[2Q\@,95:/>^W:C"_COX`Q@O7E,>)&]?`*VC2.H_+[=L,.1.>?BI9$#]_2VPD#@:5L +MP?AKFB>O!A=EX=8].FC`[;#$!W:BI=5NT.T9?04.`R>$9@A&1#]?//%Z^$;Y +M44>>50);B\?5:,,8JF'BWGMA4D"O]>%K\!DXDS3F8K6$\]?.P90WRS48P#R_ +M90#W\&.#JGD^O+#4H$F3M:'55&0S9&OT*II%&#G^%DVLQ>]/B)9*P[3QY*), +MI&6`);"\OOJ*,GY];0](;FD/2M7AI6!$;O`E"BP/,"*"$FX$F'=5.S:C+ND^ +M]I);VPUY>X[#B8T1.O#V@8.(7P(QE,O3?ZMD'RE1\E(:CC27_P!SE8.#T) +MW\.O\65!-_(D3D$6IT/554>NF05#L%U'T8&_TISA%,V4JC/F>IXB&0:*>)A\ +MUT?S>[N/77]_4&[3+7V2`3,D`@V_1?.E"9H' +M]HT[5D1;D'\"NR*OY3-+.=!LD\^=V-\];^*([6V8&#Q!9#/@R9&\ZHHVO1O% +M/#998*>92]DX:(*BHE^SV`35?G3L.!%9.2M@L"C`B@2B@M\)`L%6[XQ52N4P +M,3PI"V/&&:RM8C/AW'`=:C>0(./2@Y(0?1[\&*XNCI +M^W)X)8L$_!4V7-`7Z3(&EQ;U:#9<0$(,4OTCE$K9V+I7MNLM1NP_6`MX!&\%O`")4*EMXMCV$U.3*S##B38-646'4'M//P-<5\5?G:B/<<"P"L +MA@;ESNN/L@FB6.*Y)Y&$N9FS<@U;>)#ZZ?%!LR?32\L/@^_#E"NSA4#!T)2" +M<1#"U6:;+*+:HC%JN@YLSV8==G9&7]")<$GX53D.@ZW"(X!DG5BI\;5K/!G2HP%PU +MC6/!WZ)%P^-2Y(E_)Y1VPOM +ML[39?O`<^"7N1D5'"#@GM)WI&ZMV)HQTAHD[U];M-^1GQAX1WG;+X'R24L19 +M/!,,=_YH&+;;5V8[\N_:95P2^H79JJP%\_OJVN[3"DX%JSW\$ADGB"^:=+3M +M\=P.DU=_?C,_#QX#NJ76+L[!HC<4?P1H$7!9\2YZ,+RFBLIV1&TMRDX1Q263 +MK_%2&"/Y&7`%^AGFM)./-'N-AX0''PC2^7-D$^'!/>]TE`[020`1XO-`D:R3 +MEL#3#?T%W.VX.6A_9ELSI>B!SVZEZ&R0O6:/=U'.B1>+'`K7PL+"7V$\+#'Q +MQ/YYR4KQL*LG)H;C;,'$PS5K"_;(%F2%K5GFVN6-]FM.S,(5.@[*E6V'M`^8=>,+%_,+[,'B%`RRB=;ASYRP*:XNMK+RUJ\Q_ +M:XT..W1UG%S%`DY[.SKM^G#3GEFX97*^M[\;3!QQ-:UW&9S8Z2^UFP$(".MJ +M-7)`@SES+._B`HA5V]UX%.:,TI?QD*Q$WK)HWC)(K:N5JO6VHNU_ +MG@;CR$G+KLG6:G3AX&JK=6"I>35435O3"$XY-G/(&N<#R;,A-$UR`!\Q(R/" +MHP",X^]/[$D/DOL>VDNGYDPPLQ9@P^IB#:T% +M^-5UM5G2Y["(8(3C+F#[O^2IAHCY3H*D1#2H.2%JA.<^68AN$NPPV!ZKK +MRDRM,(-S@KL#1D,!WD\_J!W;M.8"'9XU9US0N_-_ND3.=1Y(D=/5:-D +M2BV)WHZ\X#1027V9(S&GP$6592!G3X8PBQ).DS1(?/_'8_4Y;A+>@[1-]K*9 +MA$H`9*;6AG-A%O8[!@K@`(2+X>OE<+:^F@;ETL,GIG43_;P"?I0(EAR/,'UF +M3/;\:.!A/TAN/J[5L%L*7F###6C:HF-C`K@]N(_NH5U,=N$-H/=(VO1DHX>^ +M1TO3DL&OX&#(XJ%,.PKUTJS5EO94G^\>.?/9X0XV_0>I#;]RUG^NM+?D9)^]QY[Q'O'L7F3_ +M47EG!,;@8!5Q&2I-<_1AZ$4FFT[3VB"Q];UT2M=A3$%9F^##1HRCCS\_>_#$ +MOCD_\[J1#N$9\[P%0)SG%'@6VGD68H`V8>6S;0YDP`!Q#X&6<8>A46/H(YE0 +MRFO>2;%]4,JB+TSD-M"3^V@YHX*;UC(,\(<:<-*1IXPS%GDUF%BRD:PA849" +M/G/:S%!?CB7:$S#[X/F%B:^?16/9(WXOYE_@DHJRCI.B68[[OAFUN0G7P!2# +M`T-[F[(_5O&Z3Y3[R>0QDU((DXFS)ZNE5A_/Y3EQ_^`,4"W\#=\!YU"#)0*\ +M8A@8O1LM*PD(."\Z,GF:OT144"$:]A&C/QHWD0LJ=MO"VW%7S/;1X,F5/']I +MEG8/:A)8"K3DRBP32X\9.\U7!32QL!R1\1E#0*)/L(`T-'.F;,_OQ6W8(_MI +MD'S@A6B2H9:A;R-MCP$4A<'*GIC0^`(ECW=:SL0N:>;))@)]%@T;9/0.-E0H +M0M:HR0#M*ANU42[6.$2$,U4)$[.G9)6R9(58(<:EZ> +MO:6@3.K&3+(SQ>3\YF@J[AE0FW9=>J*%,_I2/(9K8*_DX*ZV`KL[A^_!(,E% +MY2"K]O"&O4KE._R!,JJ7UVP0@_7F51>=>\Y"][E'G;P;!OKNMYF=&9M*DTS@ +M%:K`SR3ZQ9.AV&MR(3+S&)AQ%!]:)'[?MJ"Q8=U"]\3G_$EZO]Y*=V]8N]!] +MP?&UW48!2,PG]=1/11(U)(<(O*6#/XQC_8+!XS_X;M-Y)/=DOA8M[WMZF1]>J +M<+)1=(I,";'MG6[3,"#<'/PEN33&:CE61X$!G`64?'LL8JB!#77XJ##UWVMY +MB8JHO237$-4Q?3-H"C=3PD/-\J=B;@\]B#0^A]4%Z*YY6$->,9#S4=F.GQKP +MU##U3_?FT.[.R\XQFO4B,%5JM&R\\!===,ZY(&C7?VXW:SR^&N21#5S^X;9. +MME$KM/B.EV\[]VRXXXKS=V?4R_;1_%7E)&GZ.G"0_,\/HF08?33S>+)!1@P; +M?6J^2O%N4BRT*D48=I5WSU:,?7A[Y9*M&];C7CEEMYR'<*<,Y.I:7[05^>Q@ +MK`5JKLRW75W33;SQ^==]>'VZBL9#O!P$_!'Y-HL<1' +M+080!V,)PSQUPM29_Z=-:RIBJNBHI1,4ACTO`7^PC-FJ@M//B)F)NRLOJ-_W +MS#)2U7C:2Q@>#59E39:*G/+#\.X8=5"=Z5 +M,6U>`2OC(G'@Q%5ADDO]EV +MY[CY3HQP2_H``T3Z52C)\+D4#.V1FR,;L$::]H3[K?BZ>`X>-VJ.#C4,5#=U +M7O:;=?URVI^OFCVPV&+\\>?'&QBEZHAUGK:1=WU61E_MS\',+#N3J!)]6P%_ +MUY.C'GR(*AS::?S48IZ#6V"!F+.C2<[27I/P<0>&IQ2,U=F3`UJS^J,X_3S& +MQN`X`#^%0V22K62%3L9_AUROBG(K(#?'>!5#U9!33- +MJ\W*<4V^?0M/AGU@S[.T>%D$ +M`0DHV<>ZB&XTJ0\\8[R!\4XU@NW2<$:2FYEPU8FY"SND08)&'PU?&`6F!S$` +M[?8NC5AS7H-&K,8.-V)*C:@A-+Q154><8',RAZF9O:P2`P4F))V(UL*F1`R4=^,XZ]NS,JM:J,]$H)!]4 +M^,*^>6$6@ZZ(ZY/78HA88_C3V&6!/8?JVAX_5R^-:/DTQJK1N;%QGS&G/2([ +M1CPE:YO"H.M5V:VL%,`&HG_-L_.Y1\WQ'W(*S]V^/7?5U#5;K[ADNIN\NA9) +M<8O[3%.995PGII3($2R#S?&>/F4`#I-HCX3],W@'&8AP/`>1M1A-QT?N3..= +M&':H8-RX)0H*GK'>#,J;K<&J4QYAGSDH5=/L",!)8US$*@?R6(2R@A;*[T.A +M-0"=?.0*<\B#;JJ!I6DC?K0:T0=EPN3=A[;;C^*X7$1=@%88P#7ETAZ7_S'+ +M2>9T@P.`&(Z&.=9.%>-!/2:_8%*U,J)8V"9NL:3W=Q.W_?:JEY/]_>Y[T8R^ +M[;=B1GOKX;QX#[,04WVLX3CFH1G7HNJI>+#5Q0],NR +M6;0?P:O#=#U\,L8H32C:$V&2@WTE5&Z@9X*Z$4,_.QMY11J,)>5%_O**S0Y0 +MB$%CM@0CQ'0[+D)+U8[%1_I&`BCP#DPXAC>Z\"L;A?5/A,LOYI7ONUR$*A5! +MD;I3IN:''M$KS373XP85^``M;;$E'7P)09?08,8`J8DY\`>@>BQWC$"!T`:- +M0?)=O]J%80O>&*NUA9JA"V9D2?F`0@*XYM!A)[EG[`J*/QT_)N6$QY`)<)%N +M&N^79`,QNG*P/?)&V&VD$+[HQ?=32MQ?G[AV[\)%LRJ?Q:01!PE>?']^'P+O +MX+OV:@2NO?A^D]/'6>YEF;*^9Y0*!QU%,N6`?HON4PT +MAXIO'%+>WAX18"0'D*VCEJBN7$9H&/Y^EUP=J@_)W63FN1M)J:EUXQ+>N.73< +M*:O3?;_"I]E9N^9@0@W7*?KW]/ZE(][PV*')*T]Y^*T31\$E1S$@N=DYYY\V +M+72/_-010VN]Y7+&^[KP'Z]K"\J6_5L\"]0R#%X-T:]A:`['9]IR9+L4*0A$ +MKM8&_31KK463+1G]$K/@:06'A#64:/L.4M<6X#,3C_:\#_(_RWR!#'[7*(@,A:$[@C;C[Z&%@S+A-C3_(Z"UY:U2ZH.(@\=9G14`:8A7H +M<8@O30DVAHCT.%/&>:FFWC7?,^`*QCF*Q;0:=G[@&Y`X/EE#_Z!+WZ*^L0F$\AL&/> +MR>B$L-!:_.KGFV'JC1-P.NTM!8LW3\PN?N.=N-,6[P/K\S43S<4U$W`0-1>6 +MGOO-:^@Y=ZW+K.T>^X;?;6?XR,<*E+7%^KJ+#()D\?8-!/9_MMPRO*A-YTNM +MW43+?ND0F,SMXESZ<`A32"XDB38^`TFI",8#3-ICWX$R +M^B8_TTU>>0N8<5?^?98T'Z;+2QA#',#/"0C*$"+,/H/.IKA1F>$Q,Q7"IJ@V +M2@Y;/9)-(!1I#H0D:P.Y1GDT:@PK(+\W/4C\]K=U)<=TS^"H.SK;R;*%K.&I +M];FT-=V"1A8E\+@\VWDL6]9)UH1LL'AR\!DX!D'O,>&.Y6WP^3*:(7\")@7* +M^3"YY8\4"I@J"4G$-WX.GYC@=(;Y71/EW>-I2IS*.ZR-8,&E7* +MR5@LHR]6\F(*.<,#T`[4\8MD2'`I;HPP\;FCT7AL&WPPGY8.PF3G1[7ZDHHG +MR=:<7;7CMP`;;4&K?";TXV<"?D`$]Q=D&R+78Z:KFSSI@5E07^BQ8`B!%(/Q +M;T]ZP`NG&!<`C3'>V5%OB%%$8$L9;PCAA%HB2U3M:?))&)#3S32^VM.89N8X +M#9-X^"=!&1,J00=MZ&90@!'0(4.(M#J_3O0UN"!H/''.@`9$2TD%B%J@2$$% +MYTU`,S!^-ITH/3&6I91ZZ=FWW[8?ZW+7_5'BKAL68.^< +M#YO8A!9;)XZ57"M`J&XQL]*WZ`D5@>=3*#90D:/103NM_>'[(.[`,2N&HS\_ +M$B4($[L*-#T=Q8$>!N@%JEQKL0%9$BP7[E&#&A$$Q7B+<@3X+6]%^/=IL(RW +MG^$T4VQ.^CPGN$(K,''N +MH_^Z])3+OX"+G9@X8NEW,^?9747\>L^EW#UQ*A>9< +M98PGV2H=A'&@+8UEAJ2#L-Z6ON] +M]UTQX1>`MUH;OBWS^T#&1))33Q!L_>H5(LGXI7]LQ#H+8GUI9*.;D*[^.N;J +MU7&$[(<)A5-9G&!4]/PW16?NHL"`/"R^3#Q +MBK/9\)"<.D6K_KB;N.I7Q9HD,W##\$9R4;1-<%IR3I8RNE2`P_4*(WJ+/P(< +MV_DJCQQ%"`8AX*LNB(]\"?QB9'YVT,>%R7L>%I&#+>6?YWS:H-@:[*YJMI^: +M-=$7D6T[#V-U1]\H4`@Z(=7W"_Z +MH7OD2\\;OLQ%9YTWD[KX1_%R4^75M[D@H$T`5!3#7&`]\=V2NHJB#W%INZGL +M?;Z."N'O6)8DP$CX&Q4I8OH&UT=`.KB:(I$ZKN7D"0&&'-IUED239BSF[?Q2 +M]C1,/?TS-J>'T&D"UQ**@0H1@Z8R<0F32;?GP6E-M2L;,R@9#$:&S&I!!_M' +M612/\.(A+,IF=3[+P_4Y#X.YM@,$+,@H/+B`"S.H/&@R,\"FZFERH(8Y`!& +MGP,8]N/F2W`\P.58$#L&!NQ6SDK8$3'[(0_NX'K'3BD,"-I-QTQX01+(&'*=AU_10JR +M%2LMI(BE9#9I/=-\>LAL+7[OY8C\ +M`;\]!+\==7RI"I=__/68LT/EA,D$:'-30M+SQ3M-;RD-!:O-5BU=C>" +MM/A1^&9M,IP4L^`'L3]XQSJT73[\P'!JVR5J2W-:$Y*S:?6]]PS6KN)Z$9JM +M2"A[6R@W8QP5A/M^[:_J08GK:0\]Y=B;9R_PXWZ5TMHU![:H(9[+#M"'-[&( +M1TN>'8!"Q_!1HF(#L6FS8!0J'!8*F10RR6`/[./8XO-;K]_U.3^VV"J=]R=QP\S82)[AB3*\*<:Z2EHOB3^<;`PG))GN=L.G-<]XM8/'KQ@.'VP +M*-.ZWKK4FV&/L^("7\6!E[QB;C-M?5M`@8E3V/?X*9HB;7$T&!ZSZDQW%,*A +M83+E/-H#6_A[CUF3OZGA?V^E=,Y'J[#DJ>$0O=-&?F9TLAFV4"SME2-7'O;1 +MZAVGKUWH/JW[)OBL:Z@"'8.0F(2W585>Y,"(29CX[\T%M.YM7HQ,MB;'$.,? +MJ0[L`W=!3#XP`W2TYH.'YMD`[C`VF:G(!."W'GW=W?)$5@R(3H'%8'B&5^N2 +M;'X+CKI:@XO,ZAQ.SAE]T?P6QAO1"\_@E9<6N-K79%*\<6,6.IZ^3]N@LE\N +M8X)JA!NLXF%Z\`(UI'I3#V;#CN4_;\`-I4#ZK+3)[:6J+:QQ;J2KI!B[?'3R +MUBD0AB%<#!(,X!7(<8`ZCD4!=9X],U&]E/6!+7K(9Q47D)JSD2)<$>`4+1?Q +M(B#YTLZ=![:,V3GP#9Q2*.UUAXY7K\O<4_@]1DCS5**`3"J>*SJ2-MZX<,OI +M%_\>]N*C=X+)?N/$7YZZ[]#S?C]QVL8(OQAHH7L*"_C[_B>_--RX<6$!J'2W[5N0%YX/K]Z_].,W_(K?>FCBMW>TG^D/ +M,+]O[9H/G;NP=,S$D7S)2T'Y3TSRGW&T2X=^E,-G?^1=_W!P$W[($>=\KGE/ +MJ;!PXQ$7?GG3@7TA#'-XOH+?D>]"%]Y3+A5:X<0O'QI.T1_5<.JN-?+ +MP_/Q#E3T(^/S%3ULHI?%F#E8_\#@]W=3Y_Y,;GY&YIU\\S1J5.W;);XJV-]- +M+/_'BFO3/?,3.:ZI#.&R`!W:><7ZX."F`^<-9%24?C5?`WO]J(O>`5\#2X)? +M@Q=JO`K^,_;;]$JOIZ^5,5\:/<$<+&G5F=\.BE@L:;_2CF0=;(C93\)(5OWH +M,C.2$(=,KU5C!Z,.,QA\%VE)^X;UWAN\M^()C'-BC(#Q*@AE-B:RD0&MF9ZF +MKQ<(^,4G.)J'B!9R&MZI+;#XY[7'H%";118;@082W4M^K!#!!EAUS:TFHH^% +M!@9*3'&R,'G?\4P5Q?9"N^&?HQC`-BE9#AKC>4V;Q,5THV;2:*Y3@&]2RF") +M,#"(T<2Y;WI57[L_/((6=44,`"?N&5B@3K%0 +MB7_6$$/\N5OK\!\5F^:,NJ+FP1%,7:Y=XVA5DI@+L7`SF0@F`;R`0UHZ:NE# +M*\4_O[I.8IV;,9Y90+)$!$X2.]QI36LJ8P2T6N-,/)/WH:6(N98?WE$NF\)C +ML\#?.\&0RJ!@?3'D?4.W0WMWV(#KJB<6)M[QY%(+J!;3\$E;A +M`$)`-1O8&%>T_CI5B(W?37PC?0^%.$M%PF]H../>\F;!U;+C7N(M"P.\(K_7 +ME%&,,J4-$F^_%QU?5XWAUPO"+B1\*!<)CFS(#MU-NY'AZ1HWHBEJ9_@3)8M'2 +MIB+*A)N\-!S/3411=O;TX+ +M;/9JFTR#OTDYE\,R]VU-8DC9&$2@ELH!%NYJCSG`U'_AHVP%&#[EO(DCF.R- +M-T;/IP1,G!U!3<;1&QP*S=4(00.>D@-@UK`HI4HT+S&U&BER')7?*/`G3-4_ +MC2E(/@$XYP#>"4*OX:3T<.Q92G.,W\RC$.KZIUFF-$N45WT!;T:AI*'G>X;) +MI:N6Z=?#*';%(B>XJ!A%90:C&$C2D.O"735=]SC',%/;R.#/=S8I2H@/#M2% +M6S?/T+V8UB_3VG*:(]"S1D*L&`Z2'S@PBB/R$\LL^_#0<\]:Z)[\G&MW:V=& +M-CDJ9TNSZ%^NV!^DSO_JM7>=&:9>WCMXBKKK +M3$7_'NY6[F]GR\\P+,N)A"+G('AG5;4Q&DWJ900M2G1&HR"TL]>L2:]9LR9, +M/;16]I&%_@@I-Y??V]G`*RT8F',]#$1JX)G%6D#;H*@$4#B_[DQ<[UB5<:"M +MVML"VY/MV(;RBRF=Q/\B8P +M:AF/`!?#Y+M.'<4]&XX+1:8JO`^\2'2]&L[M=!CDV#43XZ<(AV:I93-L7#-@L@%($`7WFCU7S+?"U,3? +MNM*=!@)-$4=C(3(!^CL1*/DXO@M%=;$8K*P@1)]R;'F_'JW8B*"U0-:ZJ8GK +M9QW-D$$E[:-3.)8JZ"8SIR.!!!X?3?Q+"PM3#!B689<#^#'3;R'^3K@+"CVF +M)@DB#',%%0/;<(*'J_<#B_,QNP]8.9 +M(\1GJ$M*XJD0[(/2>B$]1CGJ4:9-,J@KSH(CF"`:]`F8@BA?QUUDB(C<$*E2 +M/O'=5U@+5"/[A6-1&D.#BKJO"N8G5J;G,AJW/:(05R`M`_N#CN8&(7?K;900 +MB]+RWY0)D^=]Y$+?[;09.]KPZ/QZI6B296=#G-'DCAFD9XU>;@W&N6V +M:#3FPG:4@)9LTA-&PY.`GQPF?Y^F3':,@PP=$TQ"!IT!2`A(#1C*UL>=\/OJW4P4,D)4;7**XU@_M4??Q>D4"^R/L6RAKC1G +M$'_D>!7C)=!'R3R]?*]1K)N[B9L^BYH\3-ST7Z4*Q9SZ$0"*I!:_`_S-3XB%YE4\#(S-]0I +MP"=G\:2$SQ>FN/)_7J#B,Q,%J-:L5S0&,9;\\M&\RH&VU,*&445934!\%?3])HV?E>1HVPF2$;J"M4G1@IY&: +M/_?!]Y2:>ABH$:9DWU_%I.(O3_%CQ,+,*HEZ^F6D"EL?V!(F_^4Z3-JX3/,= +M:Q?"U.N:'.O68?7'"SB0(;,22PJE6&C9@5OUZ?97)&Q_F.O6F<3Y]A*ZS#B*#_U.0:'V\:%PB!E +M#:EY]OVX&+'=8%O#F&U@1W'8S\0Q4/_!\0RV*Z)HL!.'H)D10C"V*T#:`L:, +M`Q"4J@:Q]3_/M_X/G&=U9@S'HPV4(590PY$8CY`)?Z4Y+$U:2.6:3%R)L==( +M/P13E4J?8#A-I"+67D1U$ZGU5U(BD>4U0F,(IDD-PY)CY)#"TAF\^1K6O+87 +M!1F8.#<>!XNN12EA#VR1(0VIJJ(3)D_HQ3'%>!TX/'M&P@5,\J2]P:`WMM%7 +ME>X(,$X@^B#LD&#R(9*3L=271-:UW1UWT#M!,\/L#G<5KOV'RN@$:=:D+?N@[^NDPM>D4Y/XA +M#C\J$F&8<:^G";P4-JNA[\7*13ZIML.86S3^E^6C3S;9URUN*AF6X\8&O +MS$/_\RV6;S+"PFD99JD-!A82X/;#^H4;%!8I[-5>HE/*T:3,R-6-^/FW(L$Q +MPV3N""_B!"\TQ6^,E[%]-W#3,:^2Y'Z3?@6YF\!+P#+IS6*HGF +M5//5C?C;:DUC*R=X*Y?\QGB')37A5Y9&"&`-(..B./8I3'SA)B^6*6:1GO?U +M5B.?C_A3>(]U/NBR$1I4Y-8R2L$=@=#V"T;'%NW-G +MA,56+Q=.!3MJN7BJYKJ_Y;E3AQL7;GG6^RJ@EN[^S7*EEL.RR%6;?G_)5&$: +M-F`>U.4-W8LW?:.@SE>93$85\-_=%][]X]>3*KO[-^Z6+5-%>PO6I*$VNN2\ +M[M/N_DU1;BZZ1ZC1^[=.S8W'#46`ALIG4W<^5N8C\2=7QGF +M:J3..6@DER&^2P!L3! +M],?7Q82)A_:;8^GQ:G>V(K"Y2IV)7'C:J\FTA[\86(>394,?6R9],4@^^"Z? +M;TF9_A&%MK*I7VH9%-&,D?H6>$2S?6P,3\KD1V0EN.A41FV#8?'+;`U.J5I& +MVYC8)9*;=L?9GPB]7(N4R<3V+B\L78O''LQ.N4ZE,AZUR3A&)778ZJJX]4ZZ +M5/R[#C_90RF5O8!.17N)P3G.:%$?.B4]-DCS8H@_"[Z)5_>?>,33\$.1NC;%;0-H=[#+79??]C#_`U>'W17!9Y>/OJ&&A2<25>[__/U9J3[99C,/.KO)S,U55#D;V$Y;N,?#Q/_WRGASB3ZU +M_J"BWJJR?`A]TXTDTG_.JSDR3'LJT@J`>AC:TGP.6AH5/ZXS)'*V>YTA,]JD +M_S"([H^^)V2U.CY\E;6GBFF\,L^M#\NYC29\<=03"U_L>?EA"FPC=>-7TTE8 +M"U.?_H[G44;A(/A+A([8,I(8.:)MRR5A_4A&T);8>O8;6=VV\Q\'*7"#E$+I(D,0QE*;&6F:D'YJ=-D?!R^FGM:126\9./6OD'#(< +M_=CL-MH,"[L?W?N-T4G<[*<^PM2+/^K9OWZ&&3M("/>#9-+&-DB!;^1IX#8A +MU'(L7J-C&5,I22$?([6=*(VQ):)&0K8,W3`[F;@'&^*&B\!CGR8J(##UE_[@ +M%>_@A$H&T.UA1>4JLI%$W$G +M@#8'V\Y/9XK$9]05IBN6C,E#(QJ*/'J7R1::^'^M#7Y:JY"K]7U+P3"+4T+I`T0=#!YUW]^-SR[6'3AY8!Q).QUYF+] +M6/V(V..MW2S!67*&\S3U$:KMQ4\0MOM:%8$WS[OC7W:/ZP2;YHA3L^^1CY:% +MD'B&%@%,'L$_#N#I4>N2>3N7*[!-R"N5,3',:I#<_L&AZ[`7L*&DQW\0A@Y\ +MM-:B=*I#``!C4GQ/AEF\8'>3NZ/)$!7`A7#GI[GW#!65^BTQPL0__#3>QY0C +M"%@=CM.3P4NVUV):V'5$E:,&+H)MR_&:@##('`%$G:B-YVJ199;`>Y!\VHM` +MJ<8J`0W8UL%!KK1,,CA,FK]RLQ:)QG"T,YO7_W^XH3UJ(.:U,Y9XF/CZK\W$ +M*E)<)$R^CO*8+*.]&=AK&,-KY\TEJE]W[#HYQS:)-+,>!,WTE^G[O/1<;Q%H +MBVYP$"=T:FBP=`I+3P%1W$TZJS-X8=,F'SUU8[RU_%4**1T>O650]*T#<\X'@O9 +MB`+?.<8T3XE&W@4E'RT5@3O8#1HF?O:_I&K&AOP%J>(P:8PV;W%Q/88\+4<3 +MEYAC$)G90_#-<$"56E'N`.%LL>&S+KPUT!*1Q;\L;S/D7MCS(_'/_^A%/4QS +M/%:,_E?`%ZMAC:MJFS/1XN@!/,3*4D9?6#,TLG[['/#;0Y +M(I`)Q/9I=0K)Z@V;\PV3G[T6)9S2&7U#"I:VZF@4JEK0F(V)F;Q1:K8,/M6D +MYM!.09OE0G#,]I327I&$S3=S3Z/*\R\WS>VJ&*^8;3LFUWHGG+7'^_64]*ER["P4*]:Z;NB"_GY:<9<.?+"B(@A[+`+KS4]/LR> +MH5X?G)Y<\+D1UXTVN,5.[98(J$*X_],(>9(B\AYPG;Q9A,S54KY3;<: +MTU99G64/KI'>)(/D,S^_4I(*^:O9-"#@>$RL065D* +M-:2YN4;$:D@,B.AXZTYPQ<9"4`>I<]?%EG"CXWKLT)%#W/JP8$(.5+4\CV-9 +M;6T94H"^39#M1%W*Y"-?$&X\6TK@0.1^UW.\,L9Z:%U,(@HB_NZJ5-SD/<:X +M.!P4.T3"P^(AVHX/[1LD[W\F##A?]XZF?$;+P*(1Z9$=FG:D*OB;8A6M"GZU +MY;RQO3ZE&3.I*@)(>[T[9$37MQW[XZ34M2Z=\IV7&F[8,S'6MQ4+P6[?D.]/ +M7MR0&!]\^-&(=NW27W.+7_P9?/NFA:7CY=;AUDCQV" +M=39$+UHE2^FILA0T]XS5JST*;0(/11([MB+`P.J9(SM,G/L#[-,5U$NYL@_Q +MC1!>C_:LZ(_MLFYZ3\!#<8MZQ-BF.?;RM9=66[LQN(S%2/AG2]TJ*9A!\FUW +MK%AYQOD]C<4WR>?MDK(;6T&)QANO\_JSX@"/C-ZS(==%_LE5)M/YJ_+.^*X$##B%P6E\3'&Y%]W9OKL#6='03-IBO%&O'M[ +M3@R2G_RFUR!5G[-FC;3W]JCI5W:7XR`7,W5[?^T-T0Q49$]8[3@Q4N[8)(8) +MVQ[]Q,*VKSOF<%WHR<\'.^;3M6WB,_I!,6X;0Z%FKRJ''''+W^7US8Z6PD09 +M7_$<-]PR59NIM!V8+*@L&Y2STN+,:P_#!>^':RGGQ6%@**4&LM5H2^\JI#*5 +M.%)#@$(KD4XE_^MK6'OKZI&T;91E"GX]%F_>[YC@*I6;?GK*+SKF>C)?(]`D +MFU9O.-41V:<.MF'B_2=[(42OD-9V`!I?@VER>%)VK03A(R>XG[2W70*LF1WO +MBM7#:1TD?_1"WHW+MSRS*W?X#0M_>34J>KTX&EW_^9\/+)V<8DMUM$RU&6JT'WV +M8[_"/T\5U,NF\:=ZVD_`FF>.XHGP(+GVXRO*BYS-8W=> +M1F_E8:?UY6-C?/?I')R_];E<=J=Z>\?Y98GS:=L\]D_O@5\]\YGO@DN[Q5[^; +M>(#D_=B(&DS1;)X>T)U<_P@R_M`-3[WG._BC9Z>^.9Q6U',5B:MPM/S[UURP +M%G\_]Z'O#R5&D9P9^E3FW(`=L3HJVEQ>6ZVIJ0FJ5TKB'0I8C!AAD#'=RC1% +MH&*B*A/),*?4S8&JX:RSI0:H``]411GPY.F<7_]MT0*^<@]3W_XP>15H`\48 +MJ>%KL]'"@NA8$>#+WO6>$6H=G!1'F&CPJD5J-*%`2-[\%]X1.*X:@T1DA0.? +M_2!8?>XB1S#6C+ZBE"_;WLOF+V6,JM;V4!@+7DJ/-NMA6:O"Y+M_YYQ,Z;%Z +M!67T)E*[$:(M_:WGQ&,J-1S7"/4J(D0H=G\Q[I2@1.WV/$S=!+R<&RUXE0"8 +M%;GOVB@S$6MO9QT3WV!+23(++M_<3=YW`6E01H0PH[V!F&@D^[GO6OS./E*^YQH>$O+)#V<# +MNV1]KD:J(++;_#S72GVK8653>JU#RY$PK>PW]3UK%@MTY)21>G;"^(VM(37B +MV930)DF8S?1'S',I52$R@S#QID=L]P/.P&GIGFE+8@PVHAIABQC/$9%1VSF: +M&@4$.LB!XB8>?+3)DX +MY"ON-'M3CV"?MR.?E1CN8/[F0>I%'ZK#8#C\A_0ADD:R!3[:R*'RPH/&8O%# +M:";/>.\UB\%#.3J7#U(:-',*DYV:4 +MB>O%_%ZS&:5G)7]ZP9)J*(LJRDJSNAH;+"C+AHO+T=C`2R.YDZLE=T(1T##U +M)W];+@E)DN7YHRU'ARI"#$JY/O>-3"M8+XX.88#[X`_V$?9,6/'&<"/CM#3R +M1;)D>C*IS%"2[L*+,.X3I#C=>;QXBE8#J6K>ZH4BJPR +MA9J9O(S:',) +M6(2R^ZDG"BSE5#Q.5)AJ7QSC%/0.=DG4/]%89E"NL?R@V'/[9:Q,H%.L"R\B +MZ)2#E.)1A,LXE&TK(8LT*6PB!1>HF"F-HR`2A96:=*76O\N/PK%&QL'4'-P+U`%J +M&MH@)B*H0X5P+R:2#`D=UY*=CZ>*,_D&J6]^UJ\8`=]KB@4(@1=L[E^$ +M+9,KRL["M*/LDAXN&+,H-O(]T>*BLH.R*]D53^W\&%M@JKW%)7SH_*!E+E5- +M78#'_$@OK!5:/8*KL2"A`Y(58`9R^,#S3"+A<.G/9A=?7)`1>,*4O9KKXIRR/1.-,#`^K`LOL%@X?X4QX4E$8N!(E(XRT,\8$>P, +MF7=]8I$I'27Y!W11N`9)8PV2P?B/U)I[S^4^H6+.FW@*(SP86G/N>FD<+/!G +MG@,S3A9#C%NX?O-X#XQ$4CY$35S*E>+SB["MCJ_G[@D:W<=>?QJV2207$:,@ +M$EWP&3#,!&!B8]*A&,/$[R]N$YJ4SV`2P-,D1QS=(`*V_/W%7-FZPA7I`5SA +MSAC%6L6VF$3V&.4\:P\W)=5)Q$D4)C_:=;Y%@SNBD!\$'VW;QG6\=K=(6HX6 +MI+R(9(C(AL6W`0-KA1E(#^!E=-H3;-6#67)WECRJYIIB9*JA+*6/RDJ`!X$= +MA)8GA(#Y5"G-A=]I3\L9>T-T#--CC>U3&\%-(,5"\H'-P4CJ=SS.1C"O<(=U +M*7$?(L]9VLX#_MI[W[B[R4PS%'JT",309,GT(L#\10+FHS1O7%AZ[DG/'CV= +MHBDVK\W0P:]RF(Y/$O$[,3#V)&@+58.K4*,M!K5(BHUPP9\+//[SW:8($[^X +MVI\*9V89@MMQ;J;`.==/FPZF8Z/'*_GX]O--P0A'L'[V;\4VV"?6X1'C@>QU +M[C]$@&.FE]3\%#V>_]B@>+@OCM1M]0TFOUS3M3WR[NL%!A^F4I\#7W,VR*D( +M7-[.$_S>GR>;>*3OS]5,]+YFRP`E)>QYM&(M@(R9*(0HJ?,ELXOC)B +MZ4:MP-XXG.'9GW7QZ;(#^G(Q+>*$J,DR(7HT=STQ"*&,WK8"#9X@NQQ/+:Z5 +MY?RU0%3'A?!M63T/,PEVN"M^402\],"-7AA%/$5K-#JR2X[<@JGPHK^\F[LM +MK\=NR^#*W#P!IM4;)R[.+SZUT%C<\$[ZSM=,Y/3%J&FIN?+"TDDO?!7C9]9S +M;^4K]R)Z!L,0V,(6+78I#X^3-L?)$V@.*V56X#Z,E]K*.C6>H* +MFPO$\848.*BM/U/SSLN= +MPQX)PJ+F)@O<5]891&ZQ&57I.%(+O0*Q[J-[0(BX/%AEI75B.IJ?2'SXX1+V +ME%UT[K9I*INEL[%#@"R`-@N8P,WT3 +MCI9&/D/_QH(`[C]KEU[3PGNI;A\S.462T_F50?O&)J&5Q5.9L*T[7^+F#55FD?_99[M.&]3QZY%@-4E.[ +M4.WMJ7(EA(!N4`Y@P^4-Z:3P`_EA?OM"VP(]9J4J^ZHQ,RKC<1K=)`\&R>57 +M&U0`:'C,FZ)#&",FE&";5PH(4X[0&N[_:C1%9`TE-N00K$*/Z($GK/+JB2'6 +M=\P%,W4^%95/.#S['/:(%/E#AB\IA)\W#:V"I*6B!01X!6IEBGU&J90MV#$V +MG6;TBYS +M13F+VV^NL''.LN.3(C!WTYDQ2R3!#K%81.IKBTN,=*P(D\^_,&CZ91(,X98B +M"0[B;&T7-ZQ9Z)[XU`O`9V`',<:L8IG62,-CCCZ0I)2Q&3%P2?A^JD,V<74/ +M@!TF_T>;I"F5!]#&:#>!D!!2MCP62M>8BO1Q]P.XX4E(%5%CZP/5X8SIZ&0S +M-T+L$ID0Q)8LMC"Y=3WFWVDBZWVJKA;KB(!U.C!@_TA3JS2?@/#IAI(# +M#W\V@CA[O7+_2K^3E'<;MV#[Q5VUJF-CB+V5&A1Z+<(DZFFJJ(PL,V9!QQ`+ +M\.@X8YOK?%XR(#&3Q?*P7)PU>@'""%RAZJ*#V:?9NN4R""K5`L]N3*CWRBYSM5OZ$N:4O9R9YK,,"3MD)4QRQ>I2PN3+WG4ZW*CJ'\'H^,E +MUR1H;6FN1IFVD=I?ZET56ZB(='&XU`\">+K%8`/9"-ZYD_@R#796PZ'-49!8 +M/9CU!.P,HD*-S:%T.)^\ZAJF=21=VG.Z=)#Z\+>D$-.%TWS@%\?*>B,[6<@I +MYDWB)(I6`NV.:J%I3;1TG,:"/L[(!Z5?RC55MT0WJ1MV$).`P0V)B>;KG%&U +M8OU4I`^3T!5>;DMPX`E<]Q1PH8F)5KF<>*:U"M%#: +M`-GJ#0N[1)IR`Y`2JA\346=8`1,ZD)4!L\UVRYAXF0S*1< +MBZ9<"#_)I0` +MH4W$CF^\7)U8RT!G/+AVR&,XQU.79(1AQ)SH0D&.&X593>ECB71D!R4/]S!Q +M*'QW,1\ADXA37E,%J.O)8P%_$7$ERN0GP5V@C>2,;U)"OC-LZ>T(!ARD'IDE +MN%S4V,,N;)+UU2Y6GV-+SK;&,+0,-G3_I"@6#.IT>_NIV(_EDW>46J:2-.A$ +M873$@DIQ'CC_2UAX:I-5MCB7=O3&`3S'*!/[];!(L<9CAJ]:<<,9["1(EY&!8]-`2(E.AT5FFY"'0QN`[N3TD+*)_TP +MAFB9@D:4\8P!;`QPP<":(QL +M2I'5RL@;C!PHS\XUG''5:&&J>.9MN"VC!Y]->=H(^Q2?0XP49H=22: +M2Y(=75D&TG!H"MR/D-R/5HS*@O%7:7_+<^[Q6:]:N5TE\I$S,X)VYOBDA*5( +M&UC5$Z6GH1"*?8HGKVE-79-:E1H=L +MIQG)>*^82'#K.M\5B8XDFE&;6IPE$%'V)=2I8M92PDD1A6U1RQ$$VK*.H-W\X7!_.A+BAFL] +M9@Z3S6!L+ITVAO'2H6BU,.>N0,M.SQ]EXHL6P3SN")MCPR=AXM%WC28-A=1K +MT02*A>JPSWR2>N6`8F8`S[MJM"T55EA&21.YOC=;*L_8K85:!LE+)9O7[";T +M-RRK*<+]!_"#&*EI&INHC>ONQA3258W+;%IHKLNLEZV%,U>F)J^22'#<%TPY +MX)6>_.7-ODGE,$Z1[DVS5/(]Q2T'/)?`XFYA?;L3]Y\T_:0X][TF:'[RV^\# +M@59#F/C,V>/(K&)E)A%B3VI8T;>((([(Y$Q/]X:$4NCQ(P6J##H//H^7L)M_[DM&/)"-7`IJX-^61YYZST/W#B56[TR'=Y4&T +MQFT*DB4M&`(R +M+'SHX<%-0]@3<[>[?>Z7R)NXK"G7?RV]I1;UA,!@0X*Z.8(YB@L&UETGDV(^C#1-`?;X'U1+.3!891*KB28[N4W2^8 +MX(5]=-\+0=:C-,MA(FKE +M28?-R+LC6$`.TS*H!"/81IL`)^:1S,+2']:?Q2"O'7/]VS?DPU5?NV9K?O'D +M`T%N9CNLZ=IGE!9__GY0ERN!6Y +M=])(*@'K&!R*CTY[M]R\1;U^6X)>-05:Y!!8]]X'TF1!#*-^R2\_'SB(C@&! +M2_4_'=;C<:<\/R/F2]16,7L>O>0P^<4ONZUI:A!F*"9J)N6+7VY0<0H=T7W_ +MW/6,CD@+9KN&-B47+>(<;4MJ4#U25^#8;<+DQ3^]KDW5?:IL>/EA[B7,N!6+ +M%KC<>NRM`6R5,EM?D7V$S9\^159$H-P2:*^P1^@BK,8QX84^8GJPE4:CF_B7 +M_QC-+\,/_6:[[!S%>/KI%_[9K-W)3+2IP6CCH&Q@J0:CRM"90G#L[3IFEH'H +MU9K$`711@3>*8N$E2M:.\>W.-OF1QW?A6+@L!@QW$*,TNS``_RR.CD/1'ON!SX$VMG>:2?1)]F_48EPF"'Z2]<@'#@T#-RJ>J#B<692'DYH.= +M&9/\PT-N>I"\X::LV"?2I;+H=*,8"U/KICVSJN>!]CP$E&UO82!,=65:^4I? +M&VY=2G"L0>K:R96MYQC">!3W9"C`;XBCRRQ9+(;ZX0=H>.9FQF,@M&U0;(". +M.U?Y7(MC7'TK!H\OPW2OV*!.=8VG$F.ZJF:-HA_$=]QJ="("91(RU/[6?*SS +MLVPTE=JH6?W7=*4J5>W\1CA<)__@.H%XV +M"6M9N@BM64U7#&46(J(^PM2E=?$6!0/?]Q!++D\;+R>@:W<"2,U@>+UNK.&P:DCX2F[D1K6AJ7&?\FC/^+Z7?5,>+ED^0259?>9,ZWO +M#B.&(3SN\SS:1B_?Y +MH.AA#):RD4+A]-I!S21THPJ6)"1)67UGO;@?;!`+;5\S;7! +M[F':5]3P%(^([C_/&2<:-'N"#=E#3"HX5@&!T!IX1;>GD[?/.UL_#9VGRP +MBKAFXV8N3)TY],[O6.E+-$GC'_1E"WQ+QU8DWE/&?$X7WN1U]S$V/0=,PM0S +MGK,<*%,!3-:`-LT_+1,.7`R+LCP[I.Z5TJC:9Q/Z@%F!-4#0WU +M@S857<]^U2W[;YSXQJ:_A35;NQO^1RVJOO+8S6=@C\)=]+<[[_X(_7+-[N[S +M-_UB._S77/?)QVX[`^G9=G5?\(:?G4$_NN6Q@]?`K^V5:^R5N_!*ONB>3;=< +M8W[SQ;O_[G7F#Q?"@"[:1`IY:%J2)[YUHA_I6\:G*Z%F"Q@:M#A.JR@S:=[4 +MHH1H^Q/<@]S2'MM<&I-ICQ)*E9QC#C3:#_=.H3CO'"L@7Z:L&U4^)=8E,2!9Q\8E'` +M+__N<`RJ3**<>DF6#C:I1L%UYR*D6>.,23F6_;PIP$$[\DT'6_N[1ZR_S[Q^ +MH?NB0W<,IZE-4<1U1/P7HOY\`FDMJ8<1N9Z):R=428\15?.7/#O/#J +M&&HI2RIC>3`D@Q"ZFD,$T"YOQWZ8(Y*-(,1GO-#G$4E.W$H9',7-*G2\!K$G +M.&H,X&#S$TLN4Y;NF%)U_, +MVDQN`T-N)E('UHT:4[I!!.I@R9RQ?`W\'S9\1@V=-60._A@I5EI'V^2Z\&5J +MZN#R-=W4U)NE#>YV^K/5F**TKS=N+>IE1YF3TDB02.L[>]5D&C8Y+P +MHX?$LQ.GKVM;M>@F,-D\ES>:FED +MG2P5RXJK6ZN46KY^I+W<3=[9-E-E:)G28?+.OQ8B.RSTJD60AO.V1$'9LK6^ +MUY3ZHG$P+'B@[2!D0,*[3'Q%//[5$=-?1GA#F'K3"T>[9N!>]8*%(#%BP>+5 +MAY%/FH@;N.Q2L$Y>9Y"T)O]4FE.-_E[;!M9^S#7QO6>.%%FM]&I:^I%EBG>Y +M\LU>^TA$`O0,'E;/MBV5'B9RF\J%]A$,9OAAP]3;_CZ"3M@5#0=C303/7'3V +M,VH;Q2TLQ041A.7Y_*L1E2IS%PD>5-YKOPR=)5)"W63S`?P$;4C(F@]L-LV% +MN.LR<19G35L1#T]K6XWE=2Z--ZY8W-*QM>!>2"B?M8(:(4WM4WN,9IAZZ5<\ +M<_SQ8P=/(FK@>(P?][%I&U!`E89Z!/Q-"B>(LASCW^<.&]-/&T]K3&\+RJ'% +MT09,A[KTASL_:FJNJ-4I,2F\XOZ:5%C=O@'^\/43BF`4RX7#*ZN(D+AI!_=[ +M:N2+6-IC)I111XN?N[7>1O*#FW:LC.!0*R6;;MJ!#>R5I&4JU)>@1@:JVA5[ +MABE9BE4/AZE7O=`4$*].^S2J7`M'H1W1/Q)IQ&4-&A;;XB4EF58W6@RL;4-. +M:6L/)@*&RZ4R[_Z/E5H.U6ZQ>.`VVA(-Z@[GD:D61ZWM.$X4R3QU!Y\.DQK! +M4H\?7G/&HEML_I)VO^G4_/UWC@3SA-@ACZP&5))B([3,8$H]`EVG-L\=99`J +M\ZETE(FIJQLB<"AO)Z;1*.(Y6@&(1/OO3$3481&,!0OI8%P1#@P%7Y +MRPBI;NNR%T['9<;IHY/.!)5A#MG/*O-DEO-^C[<(Y%`SJ]#E,:$#2W:%.+^0 +MF`G]<>+"9Z]0'BP;O%%SV6XY.0IB8Y"5O\(I(W$0\^S."+PN0M0E8S*Z)TQ= +M^EEMTI+"'&5,`LM4:=6%]Y0CEM3NIGNTINY +M;V56K$Q'QYYXP_E$EPERTWAV3/:;7)OQ:(FUXU-ILX^--GLNH6737(N>^ +M"BVFPIL94Y@F(XR9I&'R#_\']10M@.W#5O/7P%`I6/'FHPP>4_6!WS;+(@L@ +MAL$E)9.SX/S&=?#RF&##?@:S*>]U8G#`#G00L-9,S2MIO#.&9%!"_ZG+<_XT +MD5:FN:PQWUMGQC3`YEA]&S<.28E'1Q%4#'FI;3X\EGA">-8="YA\$X+U'W0A*)VC1F1S;A/H-_1)/H +M&&)(DH-F0#(6^4@\KRO=Y+7K2P3%P!A3PW#7@1A>NSY`,]VI3F,+V:C8^!HQ +M>>>HC3!C-=6(H?#5GPCS>TTJ#[U(`F,/8]6L8]_L]]@5S(5ISRWLL)+D-+LN +M_H`P=>SG(Z1&\8_P*2V\7>]:"ZW(4&,3E%UX!\ROF0RO1`B`A!< +MUV'WUZO61Z`O9-92*;3E\V4*%Y?KH.)-Y;7.Y!-*RG:Z\$17WJ.;E?0`?N*P +M7%;CD&9HY,U7D*;7S1:3,>F\.H22C#8R'R<&W4MRK0 +M/FA$VF"@@V?KZK551)P>1MB+F&E@?F<&B7]ZV@Z3$6#EVC/5\>2>31:07-9\ +M>=JA[DR(P>8V]FF'XZ)H2:XD82,9P'8D`0Z3MP\=>*0A76Q)-QMV8TW47HAD +M(;^S;`V!#GEW;5.)):W5VXAV(6;Y>6U)I`T.QGP[Y[=C+"TS+L5M65HR@V3J +MISMX'63M36NY)Y,8_N=FC26T01%#U80[!#YE0_E#I)@ +M[T>Y!Z9*V!H$@TMG$.X@V(%!#3BVI_TTD;5J;%MR*M/P%(D,@_OA1(NF<6LP +MZ`%[4LS%F@]9IH[CGEA\^M'$85"J=VVCQBK@((;)9\"KW\KX,-Z`:Y]1LC@P +M+O;]UKH]?-AU4X7/B2/YH1.#>'LD(0M7+0C^@`/XE-RRU&1-3B$\B`^&8F-S,) +MSB]?&>]_E5'24UG,,\=M8GH]F`)O[C#@>+4C&"EL)&!RTQQ^#%/O_[_`^OD1YK,P>6^5 +MYKF`+%\F=(C&F*5PC+N!-`V"'&G.\1FX!Y,J;+2[.#3Q_%HWW<2'T'+TV%X) +MBA4F;OT%?)\U:+RSDX"2.?A7($Y%&Z9_2]XZ6>Q)--![<`E6">M99D7E=?C& +M#+#NS#(?NPRBD7?E1,*&^ZH'XKND8VQ!TM)L(#OCAABID)=Z`+=2[@[9I4PP +MUS493DNDJ?=PMC(4H[J"4WQ)@=K667%^YJO +M5,++EA+W(S:!2P-NYWQKT4$]2A$3.RU-=Q:%YB,2SU6Y#AG%%8YN^64D#GXO +MA6>>0X;$<[%6=/X9Z:4\#0TRSQG2:!,QR*(?3E\1KAEFX?3G%Y.`_;-#:M9]NJE6:P-@:)0!.)CV?6E(@>=_;"\CBL/%Q"0SBNNRT)MZ\:R^1HB*MGII%('UG==3!GQGE +M_K=1)MR3HE\-&#Y,ZK?:2+D-;4BG;0(D:QM19W@]-66U6]]E#0V^AOBL021P +MC)*,X"[R)L[D6J0GM;)\"=Q6):.W4WVER[^8<*GFYTJ[9NS01JDZ[.*`(7?I +MDBXW=23*T:S9?L-L?83)XW\]6\+SLH1`#U,UQR$E3O-$-%2Y1-8\-V\Z;P!W +M$\D!.8+&!7=]F3V5KTRXA3B0;!F.Z07,N9E!\K:_=DP75.0=,;%U75F=V1-_ +M0^^PD14-&VJ/]7Y*`OC&![##SCVSJ:-%4&<*BB:_BN?2TM^%R:\^)@)<0FYT +M"C?/1YUE\NJ"G*14'\^_PXXU#0G*2;VIA<=S*2JBZ6?MJ96K51EK^N#/FW7/ +M^3(Q+B;XSCJGY3!=_$8:VHSZ&]JOBJ1TJ(?]<3AYAP7#V.P@\955%<4@6"]C +M/:;_2K0*.-JVW$TJR#I?O!D[[5.AL=U9S70:4^7K*9J]R8AB+'FCP=!Y;$YZ'' +M#H8#'9OE.@+5I4L@57^7.`"#,%SW^]8:+%,+)W/NK'*;W^:\Z%B.1A +MV$H0MA&7SHPF*%#&J@,NY1N-%6A)AMMSTEAT6O%<+$95]^DEW;+_NR[86'GV>M(5(MV.B1 +M,`!>^PYLHDJ)!:L0#VY20VQ"%5#'ZUB6V[([[JI&BD-8'^`9O#HS2'[NESL8 +MKNOAFXR[H#H2FQ'I%'"V8W.&$[G0,D>X-J?()(/B>"%XOD$35J7VV%*DR9@0 +M(?;-UQB#YS6L1DN62?(Q`)%5*\3HZ)/.&;HKX:Q'WY[UH9C9P%?8P:F0J +M1$.:0G\L]CK;8)XI2=4;0"<%;`WQ!IWH@\0C0W)C4/OMI:ID-C0<58G&I)NU +M*\FX)WC+7MMSIB3O:LXI3KSX^9B,)L%J-SQV',=+R[U1QECK8,B\S^L0AVUJ +M#>L1-4 +MW-KA`"5V39L1TE_T[O.[>!)5-XN501J;XE[ +M]-+M<*??)F4%9J##N2B5MT>`)Y[O&NVR*1M`!CA%GA!R4PR2GZBLZ,5-VS"P +M:8/->B"C+RVLT(L^&GJVFQ(WC&@M,!RY=A`KZFJV^-`=M&'J?WV@YK>07O'K +M\4+_ZS/Z0IP#HZRU'SL"U][-S0JF#3Q/`OE,\6Z&AL08AA0#;,'5WRD95C'- +M:GTF9^!*U?0`?N\^E\C5'=EMK7KX>3NMJ2E\W@QL4?SX<(,[!I/Y*0QKH;`) +M2M'/R!V>3X1,R#Z5MA.A:E,3;L<['(FGK^_S])F"C'$&KPT"]6S]&KYAD&IO +MA5-6U1J66`]O+G/_'E)L*&E&0@PB4<+@FFC&\H(%2V,9CL:_53VR(/F=B?`_ +M]8E%^'__WL,AT`F/!U[SGG/,DJUD$>\YQT3LYQM]DCC3O83;;_)&UA*K+G.) +M+FJSM-J^[?(XH8K8/FT=@:$Z0'H4UH)KA;^)`F6"!CZAW-HOV.E!X=*HL`Z5\ +MF/K=IP)UV.;,<(4#EW![E..">2^CS.V@,5_+3!]1L=S(T`_N'%EK-Y7K/(,H +M-BFA8W@JS\0K[D3KP7,1RP:/)J7Y$AB0.,D,PF)HU1TQ@Y?WW\/,LK2=9TM% +MS;C6Z!C!EA-=BVU]ZJ@M+(BM!P]B?!DXL)TPS:`I9EI+\FWTR/I-DR>ANE3=VI%&UTS2[?^5\RFGIL_G_\AAG`;?*5 +ML;2D%\BA&@)'Y42CK7A!-M.]1V\N2Y,[#P8ZTEI:JA&_^=F`HRT^,@*_=3?AF'RM6U:0M^)IDQ4 +M@THA]V`RVROI'2E)1T=V!MRE&23Y)BLKUMW$H%*ER#O6<]%"@HW2VGS)MOU+ +MOWOU8W>]N#NW88%:0O67-30_[S@]'%;WD2I;5,7Z4"L +M3?]AZ;]TP>DC:17+4P(?G:]'V7`J-A3K0Y@IKF-9"P?),UXJM-EDY/NP16QH +M(MX@AMO0+(&==JF+@4D$3ML2"T-!1AM1/;D(MJG$B$"34Y>\K3G7-R%!\B7@ +M$*4^,Q03(#6!.O>2MPGFE1`GM@UVE,N*?Q0!#T68.1S-W"P#-3";.TCI+Y&1 +M'T]$<.(MHZ\PMH#M26^*\J6H5U*LK.!&.DHPXJ,,4\D+YJ6_ +M3Y`S`22O7YR+.'#KWY9F?A8DX\*;O7!%L8;E(9M1G")T:5>!M[8"9YKM\%SB +M]A1A,EC-U&G,\3>F4Z$7[M`NV#&`&SW0$ISI8WG5]/]K[5J@(ZWJ>W9FLNO" +MRDN@+4LMT*.[E,F8F3QGU=HAV279379#DF51UAZ^3+Y)ALPCSF,WXTK5:D&/ +M$#->,GS.%(,M*@\+9>&`V'8K8L4JUBB<8BL-?:REQZ,42=MC?=#^'_?>[W[S +MR,:>XEEA9[ZYWWW\[__]__UG9.U'9F/8'-A90E:3TVN*KU;QV4-F=9R&^%%! +M5\<$X!>&E[(>1V@C:#1A9$!2NIY+8SG9+$[5#P!)5'S_L)PDSYT'?YU*\^&$ +MI[P]8?`=2=?\U[4@NUOI4#VA_BM#XE`QUQS2^_MO8"@+V'WML/@_U"H00#*& +M&U2W7J-2DZP%H8-(0%@[^:Z9)'F;";NG2;,$ +MVJVL,X_Y"G4E(D6W%W$K(2AG-"DEWK'OF#AE2G>0G2KU'1$,J&!8'4&9X&F) +ME$Q82*',R<%U2CL2_A5'-R*C1X'NENOHCC`\J<^$5F8RKDN%V_PFI8*@&[@1 +M!@O'15Q@5*,WDH=44\U#[U,.9]_LD$[[E^D5]<^=4/?INK4[JYN>!P1KMLL,L@BJ$OWHQB:.5"^>1)A:+1>USW*):1 +M<@GKUZ35,4($`5?FB&$%?GHE!5J';JN@%WO +MQ$,5.R/IXK9OZ+BQX5[(QEBM[HNE.C:(N0XT,CJFDSE,\],N)M'@8&K06XV6 +MIY7`F_]*-8VS5'.XJFPHA^Q:]I1VC([2'3*_%'_K;8Q54/E[*OO/W6R24>@F +M+\.O3`#ZQ#+#G5+QC'85E@,K/P6JY:`X*;P-V%(A?"8&_W@ZU=:Y]@[51RD7/T)E//8]M\^BT:MJ0U<+^12,_'A>!+3&K,EDY%S9DP):JXM718&I2I=,XFFHSG(;DZQ"^D2=;S'GB +MCJHN5+\;VSJZ=2I8D33SO89$[">M8ZE)N$38^QR!F'4LR4B;9_=C.B_X4V +M4F+G(6QCE0I:R=93%S4H$@Z:54/`G=`T3.V2R7L9RI5RFW8SWK/4ZH9&HA%K +ML7SIE]K?#5L3"AI,M;X,$`9&?TD[@;BNY"!A1.`OU#Q82MQZ@EV +MBVN+65<@*>ZF')5;+OIPHZ?RM9N>:KM]Y:[;O@GGNG+Z +M':_!OS[1=N<#MWP;Z.S29X`O+3TZ0(UO%O&+?_Q3WUZ0"[,?M5*3^#U2''VS +MY;*/'1^RE]YXP)I&1,N.]R277OG[>`$F>,_9;6U`,N_ZQF.K8\S$RX&A6U?\ +M(]_Z,"/])A+E+9^LZK\LPFN6CE8FX9:'@DKS3'EOQ/]+S47Q@2]OA +M+2O;'@GC+?+-V2](5K98WOU,^T9O+;_UNAM7HZ&>_B:O+,>#?QWN"7>?>2-N +M_=27.T.1KJ:[\/DK_FN]Z\]O*C_1MAT^PS_M\70A&5T+1_O.//(S[WAH%8;N +M:SKT*T_]RUJDLW,1;@\L>_L'O_H"7N4SKSER\?1J5T\T%.ELMNK?O>T;X7"D +MLVM3RXZ$.L/-EYU^M#?2OZD%1D+1UNOK#??(]9V]5GX!^-.9E]?[V-1JI#_4 +MU]ML=5-_??E:N+MO=VN=N.F>3P^`)]K<:YH=G_6PMW!/I-I8( +M7'=S2XQ&.J]JML(C-VSKZ>[L;/)ELR5&0UV1UBOLB_1L;H5]H;[.UBOLZX(5 +MPC\K>Q[IHAC4MXG+6<`#IY;^Z=$42,H+;PF'*K[/O[@Z5@4&L+1]C2VTK_V* +MZ@Z*)NPE!_-+6^_0WNO'[RDL?_%ENPH/*[<:?)VOP3"["\NGHIC\1!@T2Z&S +M;:HA0HP4>UGQD*7OW@JB.XG8Z_#4@2E@/:7"$HPH4$`2@\7)#A?@"_2#O?I\ +M/`D_I.%@D.F:[\'(CAD$72./^*GH-#UC+7WEFS2,,P]/VS!K"R,RHN&E]-\[ +M\(<<=8/78^,O!-V.X^.X7/A)9NG%G3/._"S.@MXM&.H%WK)\UR1^3/M%4"_P +MB$J.LV`'/%M6\_WHMWG7<')+:M=H(%D;1G'/&.4.P&."7RW-OWK)Y:R"A(7S +M07T49LG-09%\G=7IY#1E@E"RX?*-&N,,3!HOYHDE0S7JZ$5UI!D[7 +MX;U'#D^2VJ&=FP\!V5QQWCHG+WB03MYZK!ZP"PV-'3I,F==8@=)OM[C`H!2/5$Y18+B;``HR+<.=; +MNL("\WPH,4>^9H*&.311"1QK[PZ%0UVA6N#8H9@*..AZ*S>=9<;*36$JBP&( +MB;!!G!/CVE"27&3BR+P*!'@,6@U!AWZ(BK]D2V\]`;>Z00PA7UF?/^XV)*'8 +MJ8S*P^CASC>IYLI&L02Y1RA>R-4K-)<.G2E+*4OQI`P-_DW(\.UQZO$]WEC^29UD'JEBJ^ +M`XED1G4[-#%S,/)QS:_'I5=0>S/+\`.NS\*6>@<27,VM8GX4OI=N'@+JG9$A +M0P<^10[!U>.4EA"GK,69((Z(EG:'3G=15=0&E'#-/_,I.G,/MXD;4#R/C1L/1ZBTBHU2%9LB@#".@05XF*-75 +M^>:+7$%#Z%'2_ZM2:S!/P.U2M,J#8T#-JSN')Q[5XR5"/*4'T[ +MW&1&W#^T1&NP[:#'J[*AQ[N)_MVI)UM3A_MKJ,YLKN0=C-YG/R?5U0-C*J]W/1\*6$DK;*++;>QWA#O +MQ(2Y"W+&AJN^XM\UYX;L==.&JLI62#BRMX"2:F7X@7<_'.4^QJ\,#W(0QY;@ +M[/*-#J/TN-TGR$!G3XQ.HG5R'6IGZ4J8L(8[)U1/`:=9+\PJY5;*5ANZ)J`J +MP0'@W6Y7BE1=^`+&O<;.GBTT:K38J\J/U72,RXD.+KHLS8"C&P]]'QXVJC(/ +M1O%`X<@#EW[)]!?FQ=5#L0[M@6V1*Q'$GZGSU0AA,D,)[NF"UC+][TH4D]K6N0C):.G34@0$3JO>T2K9T&_L9RH4.I7AN#TQ6-1^B +M2NZ$.(I%=O($;`F19R8[>3H#,-.`7ZDSTV<36ERYZ#].$7/;RX7@95_E_%8* +M4N7\XUQT+1$X\[Q;KE9A>4L35+ZS0UFP3EW^GMY=\OQ3_!X8DZ[UT;G^"<36 +M??#A9$%O<4/R)55RH=33Y2-\B["9K=1@,#W=C,%IMSX5C5&Z/.Y0T^"=68YT +M^#`7S5/<%B'".`G6['3>`#A7[Q9OWJM#NKU5E0J'J%3U3LWW=V'9<@UWW9-X +MIISPF#G*"("J2$?#%6#`>YH/7SIP9UP(?K=3:[XNM-VAZS_JA$_-?\Y;5.KA +M"3U0`WDU]+;%X#AZ19R34OMPK)31A:=`^0%9[OI$&N>T+-IT:V=T1CSLEDXT +MYJA*[WU-E'"5T-.DR`%^0+1!B8<<3XLW@''GL2^T!)YI(C0T:=3+('._*OZ. +MG2K>@)FC0.^HJS#[Q61^D4\9O6O*\#A%<#/JOVPC2KD%,LXO +MC"HS98'F*X$MN\`82LI@GJX!5>(\2)8S&O@4UY6Y3T*FS,8I+LXD[FF0Z9;L +M4V*BVR,GZ*VI#*3^DGM;.1Z$+,I=XQR?DI.B]"/2#ISAC"I=9?F&U),M"I6= +M(W%B&,^6NN9ZHOU)LQ(BLZN@JYJQ&L`J8=K'_`["0FM>HTQ`MZVR2$1>9QT! +M!M$H;B#1+&R#C;7'E?/G8 +MR5A"I^G6_(L?MQ>P?M9-A`4JT`4]ND[#A>E$^%ZX-QI9O"%\KYM0.[N;I;Q< +MJ0Y3)0J8AUH.E&YNE:=?NEDBW,FDWX9<>B?'?0'0*2;3B5#*IZ3'`-:CG`6N +M7X$\!&:0WLHON^U#\X3J>Y71"0N1#AF9DG%JB%NT[OC3V'GGB:N.&K%X.IHK +ML.I1=R_(N;JJ-:W[1ZO954WCE*N& +M`G.4&<>U-4W2)((X3K+I!I"C*&>[$5#LIZS4#*DD9%2H7)40^[_V.L7'5-XF +MOQ$%,W!>[#RL#&S5S8=]=L9."-TM7;68D.[*)L\T)K"X(*#D,9-X`$8+DK=W +MS&.W(V_C/<=;6TJ^4P9Q01Q!L&C2U+97$"@8CD&^([<9C-%KG+!-N`X.H:=T +MGJTIVV7W#.S!#%K9IX[6D>I;'5E![U:O&&C1&G%\GNT,,L)D-NUT!48#(G=; +M<%'G71%[(,SLV"1C5#%B(0%H0S +M17N63;L^1H9B_#2%IP>(0!6DY=VGF#4@&-&N_`9MWDR%2C.1)\"/A +MGF)$!G,1E(H-S[M=-[F/-C6+9-DH4V8SW*1O7/DQ:_[''R!OYX1'V7.&QZX/ +M.K)^';2+Z6QQ&2/AA%/*L&T)K3)DLAWU`EF5LX.R4/8_7J[W:1H9+E.3D6Z& +M.I\!M4Z45+@_7X:O9+-0("OX"REFBLT@Q"51_7O<[AUL)2&2$-Z)P&M2D!4.],1]#P#R2QK*N*0M';`5T)Z3(\X^%2SEP0/U,Y +M?Z@/LP,'UX(CAKN`L%1JAP*;C?13'U-F&8[.4:(Z>V!('WLPSP0BB5E5^0K& +M$$%Y@!7+(2?20TR8QY$=BN5%K*7UVJ!`I]Y"(O-80:\D$ES5MP)X,'*"^!S&0WA1T;\!1ID%\J%#V\ +M^Y@25PG,G)>R91&'"8PHXCQU!7U=ITK:9%DDB4REYP[65H;1&MQT528\^$JI +M&FA(N>Y*<6A*3-WV@.Y3]Z@<'K6E7!';U`*F7-M#&L'=,0H9R-E@ZMK>=@2Q`0Y&G84"*,S-& +M23=*>%3U$YX*\.;J+&^Z=")XDTGYT*3?2N6#\VWN)F<'Z^`$+#^0Q=!#?FGW +M:7*[N,JW2MB]\<\V&8:"I:WYK_X>MG&P\4EF";$2+Y<&3<,0%V?'0-IB*HTQ4+2Q5K' +MU+$2P:U(MB"!)TDRY>E%.JG.D`W7_H5;FZN*3N*D")%6)F):87>D328=WM?^ +M14N]'7;F...[.EC?XZB"(<:NT,5!]H*Z)BI)G:)U2'X*B;2KKE9C +M(B=[1Q%4!.Z@)&^^"R&AZYE@1,:@7U)9Z#*TY$%>RV3=-BNI4LV_KYPOSILU +M/+(&D8DVFRLY)U!"&UW&55S;1B-9QWJ`Q?)?$RF29PT^K)`\USZHM$`)VJ,Q*IAV*C:BA3 +MQU.R\;!Q)K:DME?\3Y\KO>:-`[*%Z;:E#0I0&8JR12%0D>Y/@#WLBSFXN!E2:&;D +M!2S#X/(&FP4<6L-1?K\'[F2`%&F-N&%[L_/L,J/LY&1#2M+P*"+!IP/&,@93 +M1=;3A6(9[3^71D6\/@R,A*]@,-SZ.M(H;N>BR>[%Q7+@??F3L%6/7CLL@=-3 +M5BDO98*PW.AUE>NIE32NB]NX^.@M:X-0$#O:/E+[U(AO5_'_Z#%#73*!VLG_ +M(!M[`*0N5 +M-V9'H45\\\JV\TY3*FM;_TO?6CEKY)N4RMJV9>7G'6]_#DEF^SM^OCIH9R@# +MK>:_:'(HNWPJ>AP3EP9MJICQ>PJ<(9^>+U9?W,F&0A"3K8;3G(ZV?2VW +MM&L!Z6,@B\E9*1NA#D:RE,"&C$9ZB,_?G(#0M]U_K"NVQ*+:OX5G?%:+8T4RLH +M1CFY[G-=A:6[)F>3P)'@?/<\@+W=EF)/)ZLR.R\3%/NSLQEX/&=A-]RM=Q3P +MMSG,Y`,:.D29=Y0TEY\KX0!HC>+ZJ?XS.2^3_ZZW3A[!;ZD4%)X.E0/^T5C9 +M]]TL5U3#`90Z4%1P-N!WWY^RTDNWC$T!A;VXTW)4537];#CCK$4B&5!++SX\ +M48*SN'5G-I\L(IJ_&,L1PT[9)(O@K=E$S=_[D;'<,CP$VKFPTNED9L89@5D2 +M-$5^-5CQ_>RC$Z"RT/ISP`9Y\?]U>3P;%`,@PJD/6Q+V;#\L[:[)(O:_"4>C +M/:")P4H'1N6KQG*<5'W)04K,X:.Y(5;^G_?EBC/1+CP0>&K$SM")8`'U0R/R +MVR*E%B[]5/[:?_:%BF_*67,X)+!&`BA5F[XGOLWV'5^^\O9N(%X"=`R?4[58-'W,T" +M;C#--Z)@YYP8W$6PX6:3!=!/"\4<:"Q@!"1LCCW"*X!6831$WSGXMH'L/-RJ +M61@E@_W@X`Q.>AQD6K((4+6-9)<7CSA"H +M,##M0\#1[)RKZO+UTCL'C`D+2EX:2:9* +M4U9F3EP#9AIEOH(ZHIW[UX0CHO_::V'0`T%YCVFW%*EVP<7Y%9$.:3^VHQ26.ACV#9!#<7Z>]1! +MA49"%5_F"YAN`D'??NUFJJ:#\)H02;F*?=H?O/J[V. +M#D[D4A8PNX,#$TXD;![8P$!?OSRO`3!%LX6*[TOGR[/A#^`L?CHP@NS>T/R0.VL59>`')L.F@P`&GD[0QN:!8HQL+ +MRBP""KSRQX-V/IY+SA?DU.H9FWPG>BW@H.QY.*D0WH"#Z&8'XNL88IG.T@R. +M(=K7;VY@-A,-JQVD;/$<"4ZPE>]=H\Y:R*-@$W_\(-U'BT0GNH@-.D;:K+:@ +M9!P';'B1+Y$@=&@VO*\J(8IOR()?I&C*W:P-@FL`.T3;-6AZ_I-1HV]G#?D.;NL92]4/%] +M_EK)N^`G(!/)DB*2)!5D"%VDM,>POE?_4VXKLH86)0UFV' +M?\PG`MQ#J:KXX$;R!K+OCT +M&=0HU#*?.TXJ<);X>I[X&,QBGM8+KZ>C6X:CS9DJ;G0&[C%] +M#C/>OO5JN&1BUI7;:"R68:BD4N+E/76+A%P+I1+8G4!(4)%`0U,K)G0#$$;/ +M(>6[2HQOV^B'I4Y&UY'+I%(([HM`GXI5FXP!!F_&&.3;)TIL>L"G:<0._L$I +MYJM@;A%W![L,V?VHM8S2A90R6J20.D$>?\+$\LNKNB*6UE2@9H'T2S<['43- +M9M".NZ($=#O`\MWB0#'.Q4('47ST[Y^DCTYI9A!:*@IBVY'2ZMXGOMU5=S\&!PV +MS1/7)A&0(F18::6SJS-\HBO2BTJ,=_=&H]V*;X,>V=8&FKO_ZBA?=76?!X'D +M;3&Z=.K^-Y1_]NGK;20NJR3HH!"FX\Y!.)=E6/(QYD`U&(%$IU""TP&-+YMV +MD*Q+=-DQ[8/VS)9@FD@`)B'NJ04JN\DZF$<-6:L^;H4=,6>G?K^%WFVG8;=? +M=\>=+93\P$-KJ"`>&AO9%>W6^PI[U6WN%=CPG0:EU?S.'R*E+TZ2L3]D>R^X5=Y17DX:`.0XB?.XT&4A*BM&=9X-*52D&*^WK9]5I +MP.-H;N=M8:%97FE_96&RABKQ?#).(F:?LP$3A;>OGQ6;GB9VG]4*T9$::62P +MPI0-"L&]@V-UVJ04Y[ATHIB20W36">-]Z\%]#J/GR>I*^**_3[R3"Q)SK);3 +MVM,\BMI[9!C+87=4T/W*A1#XP@5-7`A>N60XE?;P5[#"M#K`61O5/&S=_HY$(0OK=F#<9-RQ +M8>.W[5HCU\+.#^B=,EP+M<#.KPRGY_G&L3OY>5=OV#_:WXM[^WO6R8/HOTNFD'0'09+> +MO7-_EAT[>25+8RC/1DOQ7#:!)N;+\X-\IRWG]5ENV5U_8ZRF+`!5575OI(\1 +MWB]5>Y3/8$T\#E253+,8312=#"N0F*5,"*][A/0_X)Y.$ZN<%G5RBFRI]4M0 +MZY^<3>8*:-3;F<)LV??R)4@B`Z/P7[Z)$LLQF,%\57HC*_YGW^)Q2#*U.UEG +M!HZ>KIP8<13!@)I7"(DQ&T@L#Z()*^SVI;*YY+3%_`A'EMP<+T$DVGNBJY,8 +M>G^O)'4XBQM@NUD3A^='61'!LQ@C25?S/3`"#[@,R__J'6."@-6`HFQV!Z6* +M+H]%OR<78G-5)^HVI0[2[VR[N>L1AI3JB=#*B9R_=B!5`N<_/S[>$>V)-E57 +MSG^^7EVI>I0)C\&*B_&8+&2P@F1]GJ4'G:V:@>%=Q,TZ`,I#6&[6.`B^MK8# +M0!_$W9(69@O=^M3^D&%U@DR]]2G6)\A[Q0K%8*L^0ESF2*0&+2AG*4`85A\GT"^*>Z/,Q'R_Z#;VNBXGL4FDCD1%=W%]R: +MN1*N2PD"Z4@7X:X3X1Y3[\?SA@L1CA&[,03FR +M1')$KE.*$N0E+$Q`!FS]HW-1!OA?_DQ3&>!_^1]^>1D`/S)D@&!'.[O;^#I$ +MC.TA##2Y/=?8V=P,:9*@%_HF/T%0:7!%OO/^M7W)7+Z0W(%.,SEU@?/V35K- +MYNUPT.F]S#V<"5(>-:H#NQP\=H&\P4[=V1T\J(]N']'HP:2=(I2RP5^7/J*A +MT'A(R(]!I-Y]"1P(>\=,?S&562<--7^':+I>,A?S*AK5`(_AY%B6JMZ(-'"KB-2% +M9O%2KG5('ITZHYQ;*"_3ZYI(IE&AU/Y24)W*1'GRH"!*VF\ +MT6\SD,)R:Z#T)B +M;RHE?658$`U6.2A[%#GH[S,/<[^^CT2@_LP;#`+EW$XZ96>$=G-,J&-V]F?E +MI83CO&+O**@>9$CEB^S_H\Q$X,'$0]R4,=,J1GU:+H$8C%1(*KY_LNIMZ6I3 +MWP5I(LPLME:&,Z+!L>J-?L-*X8^1)&$OO"W<;BJ8Q>KASV+HG] +MBJ]Z%CXEDIX&7GGDB_1:G6%L;_'XJ*5]3?B.77D5;S8TES+\U.NW%&Q7+[]`_E!2 +M^GGBQE#-8F5R5@T\J>*O/:.M&M)WRNWWWQ+38?DJBE6\G8A]T=*%VFHF;NB^ +ME1U&09_1@8F.:*0#_E=WJ-V>0RW[JU?"ITOR4-L__Y_DBHV.+!#"T!BTVIS +MP)8EOS,^#R0\*SR_P#OAC(:[G.C8""C=!X*.BLN[[FGS=LB<)RV]QS"2!I*P +MYON3#QX1;C*4?]V>V*RMAE:3!,M'KC"=)<4%\6]W4QH5-0 +M*4R'@LX`F\Q\XLOU-,(BQN8HHS-1S"O.OA!T]I)\4&D"#@O[E0-=,Q(0GMY+ +MJ34YS852L@9+)SSH`;%XZJ)),T(M.9,8N7WE%^L]MY=__L"MS\6`FMKN.WMU +M\O;R:\78RI9__Y^]BV6_LW*]H-.*8Y4_:GWP+D3#.LZ.>#&"[%LN`L&P%Q=O +M^TG;EKDO;_G0)[YTZ5O1V>?_-W3U;?F3W[B[;4?;!4W1-M?#+]YSL,WS82&Z +M'KSOX:6OFQ_F2]'U*Y^(6?>V;84/\$\@GL[UKN_^\M\>Q,';Z,_6>'IJ(1Q9 +M?W-AQT?WF#^?6HBNORG[Z,>>UA_BSZ/KEQ1N/OKUMFWP]VUJ1GWKO_:+MEU[ +MVLZ"#\[B,0O)<.?ZQ2_^X&T+GD\+\.EYE[QZQ77FI_#^SO5SM_SI#P^TG9-( +MT!_^M'O]]9=?$:R:S^9+\.R.0Y?_\Q^84\B7^M;/.OONJ=\V'TWC%+9WVG?F +MS$?3,-MM!WY\8TD_"A_FX,FM?R?N'M=/XEK[UMM^^G#Q`G-,&Z;ZWVU;WO]U +.WXO\S_\")"$UH(B!`0`` +` +end Index: vendor/bzip2/1.0.7/sample2.bz2.uu =================================================================== --- vendor/bzip2/1.0.7/sample2.bz2.uu (nonexistent) +++ vendor/bzip2/1.0.7/sample2.bz2.uu (revision 349497) @@ -0,0 +1,1642 @@ +begin 644 sample2.bz2 +M0EIH,C%!629367PQR6$!@_U_____________________________________ +M________X3T-[WV#SN>48``!H*!H`-``'3:NO$JCVP/N!K+L'U2AE +M@`!.QH[YW>@&]ZXY```0:`^@``,G'WQSWQ[NC('@`0T7L!W84*!XU@`/30*N +M[JV[@.%Z`#H\>Z*W8>[/KW+>DO>7W.S?!J:CLQ5(AJVW.\ZI5//IW?;X/OMW +MAWKSFQML]N[8.%BXM6SU/6TFS%+WG3TWOH^0``9SF^ +MWO>C8-E5;-@)@H+)@#>YWOMW=KZ\#D`4`.@38`4`!3M[>V9!6#K@EUWW>O8Z +M:F;UP?`)][?1J[,$OM<9SNJF]:\'RTI'V5 +MN1HG8^4YY53O*^..*#[.OO;;17-W-:^[`D&TW'?=O?6K[W9W!K2@&5&@!KWW +MM\4/ON\\];WMWL68NW1UZA!VP/MB35DV^V]\[UIU2ANWKK7VMMY]U>^5&J>S +M#JL'J[N3AS#NT<[@[(RM[X!U\:\K70[CW&-TF/O;HQ\WW9N`Z[9)5````=V! +MS1C6W1J^)OGJ[G="J#1>\^^C<#UC=?>WN^NVU:[X3.YZZ#T*`]4#M>]8B(AH +MJGWO/KW61]*=T-A=.AV+5?7+.>^TP$M?&OH"@%%SOM%MWW."O6]FWROE=]N( +M`"0``5IT5WP.WN=GUO(>*G;.M[WJK)>85X````!$````1T4%``+```80C +MH'U>AII"`@`(`!,FAH`"8`33`$PADR9&@#3(R::-----`T:``:`` +M*>T```&4S0&0#30`$P"8``*#4\@0(00@(!$Q,@$:--$]$RG@2>IY(-'HC3-) +MY(\H]$9&GJ:>IZAH!H!Z@,@``T,F@``]1H:`!H``#0``:`2"2(3("`FF@(0/ +M53S:2>U3&B-/1-/2GXDFGE,GZD/*?J3U-'J>D_5/4>4/49J>D#1ILIZ0-I&3 +M1C4`T!ZFU#3TFFGJ'J&C)Y-0#/5'J>H]1IM08FC0T:"3U2D4342>TI[2IM(> +MI^J>I^E/2/4>D:8CU#0T`TT`&TGJ9!H-`9`!H`:````!H``#U`:``T:9``:` +M`````!$DA"`(&*8$T-)F0T`3``$:#30R384P&FH;4VA-IH&J?H---5/P&J>3 +M!H5/>ADGD3">IZ:3!-HTTI^4S1-3VA4_T)M*>:4_28F,@!JH)-1(($`FAHF$ +M$T------3!3PFFF)3>3":,4T]3T:-";13:GJGXJ?J>J>&F:-3-4],(GZ:3&I +MM)J)[U34?DGHQ%/8(]0U3]3TGH9/1":;*GZ>E3TU/]*GY-333(Q-,'&@1`@5 +MDB3*ES)LZ?0HTJ=14U5765M=45-55UE;75E=6H$0(->A?#APWS"&_JVK-LT7 +M9QZ$Y(D&XDA+]"T@>I>G@/M3AKE!**H13./4!UB#^^MC$S1)/N7V_G%;+2^[ +M=K[K:W=38BF8P**,;JEC&3HV!1ZV$CC>=D@$8'S_U=*?`B\]3ZFVMG]Q#4]_0NL@KRI7R-*M[QONOP>HR*`/YLW%D]-`U.0\/ +MKCW0@>[/H<\\E8UQGB@.,Q7=6*&0\TED]U(^#C1<$6Y*T916G0DE$/@00,S\ +MYQ%E1%;X#B@"B:J*@W16KMCBN$DX>.>13W\#%`YZ/[8F=+CMX8V!.5J%3OJ: +M($3ZV#P(BO'`S[7T_.SSD$)2$XXBG`BVEBE=5P7^Q1$#Z!E2%2%%IMFVS&B_ +M.JH$@"+!8?O`^ZP`%41Z5S8U%Z7]OYU8N!=+7GG5O&B*JC*8&J%BL%PTGX*< +M-*#1M,DMH*HIC5!0,/XJ4@VSXS9^T+QWZK1J+25&10 +M*>J$B2MN"U;@HP;0V>NIRI&GD;FR$H7SS+&Y&1.LEDC40F.200]2??L@VL9(Y2;D2Z=;FE&7*YSEFO.%=W"*3/-W307=N^"Y@'G:+D83D;H^';O+K=<[^%_E.KP!Z1CF3.ZY&I-( +M`IG=QDN[M=UVYNW=TDN[HMW; +ML&.:[#&P*69`(@"-O2Z">0*1C*9*::2**-(4/_E +M_TXOXV_?7[Z]KP!UW4F_B&[^[_T?/&3>V +MY;,1$,HO.Z,=?-Y=2,A#SM7*Y73)DT0YNP9-SH@D[M%V3G +M/'(09>+J9G+DF(5W=E)=W+NX29$4*,ER1LYQ +M(7=T85$(RQ3[9U%*&)FKQ<=SJ*8SG*=VZ[J=V(EMM.7"^;NH7CD@J:^_[L>=O\+SME4LH&;X]CAH +MWKNW?8\O`%\%R+U\W7+SF-^@):L6_AZ8P?O_P*S<<0-?NU0C^KU,A^Z=7-]9V]=WS]U/.T[B)SN="8DS1)G.CNN8)?.N9S>- +MX>=]%YR!&`DO2XGQ\Z\9&D31]'.>*X;F +MYC[33AYZ\*9`!^J/EF#<\8\P#<,_ZUI,PA6G?^_^X +MP7I%<-BWGUM__>5Z1KTU24TJ*O835M%!Y:U8?`Q^IG@_L-)_*2:??J.9_S/Y +M7A+.>C[H%^NF'E2LZ*2"BPR=#TYPEF>5& +M:6@E2"0^U4?SKF?":F2O"`H(",E\"AASQA&X]3YSO_R7L,[+D<%R2YM+R,;Y +MLK"L/'(%8O)]]>FB!SA#S%@L<0&0$)&4)&0(JO\B8G,\,LL^D;/N +MGF5\M43[+++LFKCH0M]P-47[_Q?98G%-$7"@DMJ4<7Z;]VLN$UY,\"(@4D1T +M\GV>)N_[AR_$9,]ROBX6R@WRBTA;D]6H*:M'FX"LB0TRL$%VV.JJM.O,\1EY +MF!F_=[JVQ\AO^TWIPRVW[G26?T]8_-)H?T5#%SOF+6I6>-N;[A`%O%+OX>$S +M[VZ:1$'GB6B`W3Y?.^NY/@/3(N8W'G_^#SB*(?.747IG4ROM@""DA?>J"+:S +M0^M;H$1"KU]^,Q4'VO0U7U?9\O<&*9L?\( +M'G($]LA!\Y`#R#M\MHVIHYB/",%6FYK5[]E?\J7=C=5[H_R4$L.B([Y!/J;)2*#>O- +M?X?4]CF*C62.0DH!%-A_A=R]V4&5B&\:*LIG57+XCHAB!(`_>Z'#^7(WW>6[!L_.K]$-$(0"3!NH02Q4S(,1,Q^UWKEO +M`UE)Q109Z)$5O4IDD4G`FM8G-_=]T+SOC]/2X?K/@'A`(C\NV,076YG`-G4/ +M-H\'GM?94N__>/LLK1];O>%V=0!`:B:N/;4TOLK%#JA?.#T(@(4-'`YBY_/N +M=;PH`YK%R)'T:OGO\;RD.HLKI59FI7W#==:*J1K+>">&UV2^/)@``.TA>DK) +MP^0W[\G3,J_YFZ<)<(@H0:SP\7V=11'=4.TAKS("!,F0GFSFQ5M'PP&]A61N +MQ[ALV>F;+"XWZH?)\UX80!`("`.5D?\RHY=DON88"E2$1PB:U9YIUP:98?]. +MG +M>-TOX9P\[7K0:$$TE5[_/]OB-O)CHY2N&53N5DYX$9E54QH5E4TP4[XV@Q1_ +MOX0`(@`1>'\ME2S$?O(]OH.I@3%'_!*3VY^[/]H6K+P7Z1MO& +MMO_?^UZ7GV$D32$,:"4:W/\.YI%Z2U9"8*&^1TX6E@00'.*T?L[&;YG\KEK2 +M"Y;;,LQGLR,C-"N5``OD*EJPM%!6M3Q%1%#%RWO>'EN$\W;[&3[?>_[D9;AO +M^80D("9@[HM<%^*!\3:_57?P8^*OW:56^_]LO['1X9$1`9AE`S\TB`>@`P`)#0D4($7V%.3%BF\T;GH7Z/B:>D@ +M^\ZK%]JKENTOFYVP0,[/AHA"HYB\#ZP8'4:V"!HFGX^NS>RZUP@`"88A_)]- +M.E;;%:S9X40\/M7VCMS1"(!BFXZ'((@`$V@_5"C6X%&@,>`GL83Q+_IEX!KA +MH>5RW??CXWD7/0K=NEYS]&.QH@NV9XTS^7H)00&29:($N8;I$,FI]7BX-M\_ +M;>BV=[_@_&&MDJ)2)/4,!_L>P$ZSH.?V-S@AVO7'J^MH`3X"<`J7_TB78MI1`%`K/_ +M70!W_T7_LUZW(_;J.G]=Z`7+GE[NARHGA!P8YG!TMYJ>G&^U`JY2^/TI(\D) +M/1)O,-[YSQ>7KTBW'.;1CR)!!KJ$7KZT>,4,U1E>1R.)#1I"@&=YYH1^XW:? +M57*JUE)K)C>21KEJ&/EE%M0W0.?C8\1G@RYFQ3Y@5:@$H6Q%-&[$"DC$4`J" +M":Z`^OSO.[;[;[A>0Y?Z+Q_'%VN[9J=3O92@/^T?(ZFC=P_F8.V,#5]S@;C&Q=3=V_%GI*[_XVY +M2.PNV"04;_NHX.\`41O/R+,J`I$8%^^,)K6[GU59VH;U$I$Y#C6O2>:%R(EL +MLGM`;DT*WXCJL.O\.&P1*^<)`N>ZO?;[IPLD7KYX\,(W>VL>W+L8;;Y?E3CK*S;*7AJ']+M%K5H?M/XOX&R/VG(7V;@2QSN5Y,)N`" +M"02:T8'[TWRYSZ@,$J?)%YB%DSX+D+H0"![438I[)*'^H">$76^RA,TLL88X3VFO-[ +MI!X#GQ=@6-4GZIDOJW]]3+(048>9?2GLPT^639\;[DJ_9G:W^/-TX#!LHBGF +M$+6Q%O%J&AM&UM7[)S[!A`>$LPY&1$50F>[*:XW,/4.4#>HZ2-A`(1YQ*2$% +MTKD=JK-\I5<.[,E/*Z11.'_>^9XDD+5&O*.Q-^L;M=W.OF90WTHJK0.S9XUX +MSHZR'?NJ]D[+4&$"XJ0*(O&9\X7)NOKOG^1#RIS>4/OYJL?KEA?0O0&2UFA+ +M`I&2!"OWL/^:6J[I&03&Y`F7R["-S42=[OE_,UD@?" +M_VUV4**2@R8F/+-#'Q(`;=2%EVY#$NHWKNV.2X(Z;49Y@A>+ZK)M[#KJSU8] +MRYO@O*>%$6*`RE0@1CZ/5QN]Z80BYD1>-5L;9.D!ZR>S&Z7-@%6^+O/4-1(+ +M*S8^'3`R4>1->1TO`J+F8+A9,+62+HMTC6F(G@_-NCT;^;>`:CZA0";00WK, +MM>)2_WG(0US7'[5=<\C&%M;&5;^%Z_7\??VG+5>E1S'G$T77IC9=YD:!PF0J +M(XXV89)X<2)E.-*\I`"`GV(2*Z&A]7/T_3L>?8#7?*&2!&L]J[$U$GD"`X`D +M".ZP0U268!$(P\H4+W(ER8'63I8J@QI?0A7"]ZL3U,)5Y2C)*JJT6!X3;9]M +ME$&*ZU#4AG`:Z=45;U7(G4[6.LF!T@)SV/;3\?7_<<>Y_?C%=?>'GY9^`5[E +M.?8M^57BD@SY@SN(+$"#%.FPR)]QQ.$1!A94NIC\NA+E2IU2M.A&9[U"?+=* +M,="YULT,=VF21,G,NLJE7T73)XW7\_CZ?EN[\K850%#%B>!B]XH@*!BMCP\&(YBRF54E$DB0 +M+@@$%!72KTG'X[VI<"[3VL[UVFP8NFC\#BWKQ2%`417!4W.E.(#4OOM`@2'( +M:W+BIL_;*/4UX0AUY4[EE`\F1>"A]F]MWHQ/*=`QC&ZMC(3 +M"QC0WY/5PB1NW.?ZPU)+ +M:G\>''51X=N_4.,],PY+/MC$GOW>\Y_IT[1Z*_?X51MUS?A[WYX#T6][2QS. +MZ[UXD9UF2#&:O6W6.F#G4D+5?R,/.Q,UIZI?PS`E#++=1A[Y1-2[\O'/)R9$ +M1@PX1.)PP>F=\L":+3ZJ'6),TH993>E5=XG]3F/\!BH':%/.A/&L7O'%1(BLWO'%ZM=^&SSJNC&LEF\% +MC8[!/&M\<1."KYJN?SX%1V:S#UQAXB60S+Y/:IATE)-4&4`5+L9EI*Y8?!_= +MC&K@YEBE<*5K2J]]WD^]FNHN-7R<"[*9`48U#PAW0JHE,F=W9F+R+]IA_'/C +MO7HV7U.=0^L][VWBIP'."B0CSS#]T=XMP1?Y[U>=Z=*F]9ZI"NVFH9*&%V:F +M?H<@?O;=O-Q^V,5A,R#9U$;2D;ID'W41?N?-[@SXU61-AK,.KVB`RCOR^Z$X +M-]<4XP7GTB-2)C[SP1B4P*J>7M#8T9R-C")40&`DN1]@97]96VZ`2D`F*,^R +M&!(9--!0>8T(7GO^\$\C@\YC`#/JX33E7.RO)>(ZMO>>UWN;N8XQ=NS9KPJM +M#(Y9.4F=O5:058'1-B`,VYO]GC#F"W9#(O]Q8<_/D+7C[OPW&QK/[:&G3MS) +MW=^T(V)^]S2VC;PO7D"P^WO[O4Z`%&WYOO9NPG^Y3ET.P\.G!21HN/5"#XFO +M>]%P\,/)?41Z.<6MA%B0IKA2M2!3AHAZF8?A6-Z&+KI-07W@JDW."C0>H*:& +MF"_)Z>V;?6;Q[>[&(Q&?IC'V)#FS($`\TAO^XRJX5[27!]%E1O*\I@9P5V-N0"#[7XL]O]%_P.^(ROY_S#LNP +MC.42?Q\E^T+77B^<\?N@?"CK\S=]]?X_MQ(>4V"D.XR/I[17048Q8P,>+X99 +M(]]_IUU!"M65;7[U7+Q;T5*PY\/9)@RGNU +M-G0)()))(PQCM%MB5W[T*'?M8>?%X<]`-D'-Y];MA,V +M_/H,[UL`VW#@^'C47$^NJM@6'.UY[JFMW+BR"!"S3S'7A"TX];6 +MS8%2/'(MOS?]BS\\4TWMVMX5:NRZZ`+OZ8[EDF"`3'H*="@9!;>QBJS\ +MKLFNLA@AUZ_3\E9S#7CJP,.$*`80HAENZ0AO])ZN120O=^NU+^KGN8.\\3>= +M:8F_U<4RWC49,II-BF1J*9;7R^GX4S-/&8GFHXQQ +M1D&^6_@XP]V.(="07!%,3)5A90+6JQ$*<5!H@$$`3%!"\W4,9M_9W9Z5&8)` +ML&:Q$(-:GEX):`6MAU-C,96?C4&JDAP4K6`<5:(9R4"2PL(?M6\&ZW%TNUQ=K@J]GM_%[_?._W'@?O]?NV\75E?*]7L2 +M3F(^$57I=Y9V]&_?0\9CF/XLB)77-VYND?/\3$]>-=KY83>\6;GX645`0,@U +MMD0W;)3O=OX^M0^--D7'$KNXB=M>D<`>YU87XK6KC6T*'KQ#2[M>.>W345RFGLX?QQS:'SXK$B(=Z0?E.P +M^0^,ONN6N.#S\AU??;-8G,_L;^Y_X'\8>.V8Q\OS[\=_HZU\8TW7?BF'%JGF +M$^%4S$&0S_JWS*_P:R/E2],=3HCLNFW]+X+.VI&>O::!'1^#&EO75ZW/)]/O:88UC*=]:'*^Z_I%S<_+.#CZXD=;;L:.C+-#CEN +M=0U^-^BZ;.G88^EHM[;1Q=9O3\9/4O'5^EUR\$3BM,_'`-ZQ,2AG +MZ\:VA)G+LYSB@\U$<1]#*V/FNL#0OJ[3&F=Q"Q=@Y%.0U,[-+=-?;8J8HGI\ +M^[-/OU'R=Z$<+6=J>Q]L=NW9C>4RM?*2=MP.34<9QQBY;B&[G?96*VVCK$\7 +M>^*W>R]-14:E[RVNG^9AJO.KBN)NZ\[P^JRR[ZX%#;R^/7`K?N58&4L7ASC$ +MC*TT]$=<%%\:?DZSIE?&'&2'?/EGA.F@LX-^DF](#R._51P9'@ZY7/:0_VU+ +M[*//2S'G&Z\'E[RRXH(>E(E\-MIPS/-]3_!E=]YQTOFWC?))0PKETEY4F_37 +M-E9H@\9@J;/'26U+ZE$0#(%$:0@03(JTAX1V>Y/B;)?LI\^@^(V/"_--V)XH +MCD\J`,)X;SL;C#R@`]+=7:F\_-#-Y#7<;NWQ7NSY/,OV\OB!P^(X5LPBD%K5 +M8S;HN;3AB!>.BV1SNF(N`[XAIQ:;3Z7#%B[7IX*VIT!NW%T1I"**)1))^3A& +MI9CKNOZ@:18-;7WR72,^=/0<%;UU`INV7JH4CZ`4\2UP,B$#=`UYY\;V(!;8 +MO-L%'D;AF[@#F`0.(('&SBS?J]T3"@-9??.2+.%C=5T].XUAB-7Y`;;@0++& +M0&_B0X#.RA>X/#"8`1=; +M);FC0IN85"*[%F)HH +M71M2CB)$BS@+P0<"^'X4`LB--:($OX$A#Q`J@+(8O%R@'S!#/)!F]+,$D.1] +MPHB:%>Q3M-A@@&"YTN?'FO3K5SS,CSK+V^0 +M*O?.B7B?[OAGU#;FTDR2H)WS1%]Z*>@ID5-5B`,-W_=\)_?&(!U/(OU>&#-[,8>:&/$3P-BM^?*$IB5>DR0#A&/V[@)01XC$8BAB9<2)1EV^$:DH5MZ +M9-,12&6LN8),-F(F2.*#MYWI$$VE!-25>E"`=)AK4OX[K;-V^N12&+=F*:M5 +M3V,#"QI1B^IS:M(,,++OA<5-O!0=_7"'-]]4U^Y^C#P80`#M@-YCPE"1FH*, +MD>&_]_/^?1M/\SGX=GA?2Q','PIGQ=5>KSA*:'(5E2U!01!;J*VP;@V/X/&, +M+\+!B[S\GNC1)6#440I81)*7QP#G*#'F^XIMH\? +MO<'AZ=(BE#R?:^-^?R>ZX;(HG_W:Z/1=(+)!;U%.4E:0,G;J@]#W\;0V0R^P +M8I&O5<8$2W6ZWWG)6PN8OTV[$%II2I0I$9[9XNDYP>4OJM4U(67%-MH155:C7=7-Z*RPS/Q\A?IJJ%XI+ +M)$T4E#)K>1MDIR#:6C`P2>%R^')9TOVP'T4,/)M&2I@1*!9NS%JO_<-9SM3:`87>N6N=OC98Q#+7*XO( +M!9UM1U<^WAY5EXCQC![PT+`20]VUD/V[/_M?F;*:^&]3:(O&)X$0#'QRS!]#Y<,[!! +M;U,B2UP"B6!?G![IKUAZ2.*!QI[Q\V!JZ=>B670O[^I%.[BH'RXH@/NO@T*H +MZ6?0B3ON*QW(JO"=G2@/:UVIZRM?N:TION5O$J-G2:JGB"T?* +M7AQ`20+/7*A0(4YK@P_KMU\Z?R?->#]8N]1R+!W'J]']U4@050!`J+>'H-RK +MF[EV&>\F`=<7X8"Z"N"O!LD^`Q\R&@VMQN`_XU^LIIYXAQ)_FSGI5`HX29*Y +M#.7#MU,DUJZY?M-'&5%M<=G>%;7[5"\`K6'MR,I\*"/^5N_0?.[S]2!_)NC. +M&HBS'@.&=V2[X/\]`1_A1OVL/8)!6`SEZQZDX>+^G_<]Q))`.W@/R%41!$&, +MLAL23("*$L$L9HH9BA-%$2R)-!A2`HDT@V$6("`A(0$@\?I6W9N\_)WN[9+2 +MSL3==MO%M_%_F<-]*I?8EG&]$*-=H\1:TUPXM!NWO:3M**WG,3C +MVX360[2,#5'@'A]PL*8T.$48AHP;)%$L/N&JR8(T3]UK0?N=%WWRJCK3S[DL +M&Q9MOPPW\^M_6-?*NAK#CK=8XRT*O5X[/-^V\K\/Y?P-#YF`<$]RG#(]=8&;1E9^MTQG3_QXWV +M!.'F?E+^7PZ/*,]:G5U%U(0$`H`$81D&$4)$.BRKYLO-HM6Y.O_%N@_[ZOV_ +MJ.K\-[3*]S#XF5W4;_HL%PHX0;L17N=HR'C1$@GW[Z-U`!O8X'+V8['3PX"- +M3H%9Z*-C][RL%S/\^?N.0ZW]=-L<;,$L2^\]3_:NII7Y^#1#I$3>+^-X48M5 +M"A55(:GD'.#E`RRY@AAC5P9YOQ[N'!P)J?.LNPP"-SWN1I<]N'Q-9JXJA1J@K4OK?T;_>Y&<:!Z*)N_ZYPN5F32)LP2BV"L#@;*W_^8G[>DJ7M>08DHZBU[V0R2 +M9.2NWY]/H_XJ(C:J(P!21,QO![U0I"@HH*`E"5=Q=?4WBPYS6RA`"$ZF53O^ +M?%I>"7]=^UA6"') +M_$[NWORSJUO5>)V0?@>/,%K24-J"@6D46[$/O+@`X!0@KM9QKP;[_"?D_/'W +MWYO^$X,J9K^':9JW-$:B#;ENN<[M\[Z\#;^ +M=`P_'/&3'$#!6-[:+S>PU:TXKE-!^NG"CS(K(FY9L,B\FY[P_7`N8`MX)0PA +M%5&`@,`X&ZM0,`7J5;&H_Q_@8KD+\@S^;V_P[I&!-C$T,0<\BL]4/QKXO_.Q].QDR/.-64221CN/E(JHK^\;B\9^?1M!`RTD57<+ +M]G+\!?FAY>)[NZ_@\DKRUJ<;:%31%VV`DT!:(*60`J,H)(!*5RJ%!KWD"FX$ +M7HS,-W,UA[>E$`TA!#5@\YG<';`"XF4(5%N6*H(**H"D^3F'>S[GE^A=/E'T +M_CT6(*?/2@60108`:].D6&AZ;$UB\>?>A0B7YOXD^[W.CO'IUZ-9^?VAL[&1 +M.$:)*#%01$!$]3GL'SC[4'@*+*UNPVN78VS[^8)57%=VH&M**!WMMD&/V_Q. +MS[$\XBHMP)O+?EL8P$E@`D%!F>QI082S>HZB@048&1!B%-ER_^L0/`>YDORI +M8I)E.ZCJ]_N#,1N`>8EVHOEYQ$%PUI]N"D9Q?(BV]UZNI1$>V?W[*GT513\; +MV/W9?-/WK>RJ^#P=_P(R[_M15M;6C4>>S4WB>*@_=49IFJ%^NRA`O9W77Z47 +M%&L6X[4MV+DK*(`J20H*D/+4DX_3!S?Q_[X><1->0$B>J*KIN(5AVQW;V6HS +M_.)7JV]KR'<=+ELGP'PQ0CR2MWKA64LF"48"4(()10J,(`4&E-LEAY=7Z'UN +M]->LUXV@M+W'ZEP])FM98[OQ+_R^)GHR8-R5+0*4NBBRC'5_?_,?9>A6[?Y_"O'85N/'`X[^?GNU +MW(WV4D--2$]7`JFD>6Y97+&9NS"J`\/PWB3W7F)YOPKGF*_051%8HB@B+KGA +M/F,4_4:V.Q&E`9FA:>+0`P@&0BR;?1`(C``,8$G`02N:W3UJWHBEGE3UC+4L +M*(16,%Z:`!HC\%!0_:X2H[JS>NR?=?K*J#0Z@!PU3U6RK_CX*#BO96,;J]#` +M@E_YWW*_M66 +M0!VY5*@WW5+O\#W$[WRV]/Y?FI^E^YUU0-1""4&7)3!2B'MY"CXV_^0]7R^1 +MJSMZE`7C\AL"T5!(#R!2\D2A&EI0@DD%)G[8#E?9Y6^>]T-M^^AWCV_9V&`Z +MRY?=MNX]RT[^Z`7.Y]#I-C873[,-#>SRG?S.;>^[GW^NXS5VT/=>Q[FC]_PU +MM_DPDH#S>)>8*OS/^KQ\H3]OL +M80P0H$6RU#4&C@X&C@M5^LJ#)\LR$5LZ+0`?6YH.Q7)OON55$\#I<+NN0N4B +MQX:_XVXS_E?#+XM'Q0&23-R,)]L%WO.F(JL`B.`K_K0`5'6-Q<3?L,[^%BCN?REN#OHP1':_11`-WADB?`O*%`X*`@.$$6\B"#NM>^LJ5 +M_QSNN+C7WZ^QNG)T"!VL4?@1"[L-0/7104520QX/9H`)N9`33\#U..\PQZKE +M\U]?LS75%2:LLB\_Y^OQY?BYH^OZ3E,9?C5`\[`$]+%^]%"`48EWXH*90(EX +MJL($%M=+94S/E(1XNR>O)+P\P^5QLJ-KXZ,*T)FRB8U(B$4%$T-(/"#)=X_4 +M8=$_"X:!1/@GX/RNMXEIE+;J/)QV$RGOS[Y+X24)0K`VY^C@P$F19)B#EB$1 +M"42(H`*E?OOV@OT)FO&\,',\[[G_.JP<0NI$`^H][4$WTAW`@?"G?5MZO1/C +M*`N\Q1#?Z&AO?'[E73[CP-Q=>C=L=_L<1L(W\K84QI_19O7\ZG*>^[@ +M84$Z_J@_J]ZG':>MYB,7L7(72J%VU*!`&^LAN,1^!RE+L]6+:F@`$.7093E> +M,4#&&/"-%E_^3@^*WN&2G\6\&"B +MZ=^M1P;CM!=J>2KT1F(\C(R_CZ"$1MXS8#@?'[1_%\R_^W;.`B.R];@V-J:] +M"4G]CY#>*MGAK?&=89`=%@)N!<+N?8\;A<%'HB$VB*`JJ2"4*`!"4(!!0G1E +M)0#!TEXG2>+CVVSI)_.HRTS^;"PO9.F[G`[AE\TW!\1U&ZO0H=5J,)ZW`/4>!S-0)C75L]^ZS=/W8JP0I'#3*-MV!`:82&8,=N1[^YW_[H?E6_A_I;X$ +M?`%\E%%4`A200I(&(^#>8?]K*#,Q"OP/XO%8Y:'$LN@[?4L8]T)QH`4(VP47 +MNE,8@*J(M4(GQ$[.ZI`450Z&%L,QQ27[W;[N5>V(0&$'CH@8XIF1%[#QW9V! +M!GS`4L8!+!8B(.1*(*_I=RNV/;Y!_?7VD(&.]BQO.FTG;:[WY(!Z;+8 +M#E.NU^!\N9UM3Z\D=V4R77XKMK#H/3[[']=/_G,8/\L9U']_#S&5Y'K;W]_4 +M1=SQ6]YG!:+3]=T?H7K]-+E=9_&(S^8E?%=[6W]C]>\PW=<_?[3#\!I_E[78 +MSO4^OT>>^S%4R23DE4X@KC.=4=FT*"(2H,A0BS*CABQ-$Y2;/7*.:^17=80J +M2EY'EVLY@W4HPE#S/CVS-3DLH^T;V%\O-_![^/\3>O"[#^_<[?\/T_;@?$PO +M)^+2V>LSOZ?3PN&ZGG.D\#`<3DMM\>XM0)R'F/N7/:)W<%+(N(*$&RO6)]OU +M5>O-?I\9]&X3OYVD$/W1?#0?90`]%Z^A<7)((MP0MT"A2QC*+4)%=`)091*`Y\[;/I],2 +M7FTBMHI0FTV4H#0/&HT&\#9R7ZSS&Q5_*_,_(IH^>^XVBOR4!\;>07ENTT;; +M.N5MBNTI)+7!+BRV+%HTI[`"7*+&\WOV1N8Q5OMV=$*G#\-QL4C. +M2\7`/GMHNBXX5U$?4771`I`COV"\_D_SV5;ONWJZWM%6J4==^P\&GIOJ@U4> +MWBN7\I\OXX#^L_G +M?*M*)MA^NBQN]MY#D?,]SKO#M17\AZVR9QGPO,Y?0(,>"#P"\-EFJ@1B[%B9 +M@@#HSH'[Y]#&@=8<+X_O>@T6\J7@D^96V9#@Q1K+TV:X;+L=IX]/8^SWG4:_ +MW+EUOE<9+F>BB!/N9;2/UM\#5^=S206]AI*UOZ&9XS9G(8W6V\`RVQZ$4^5U +MFM3\NW_/IZ0WF?(K_/G=NLZHE(']4B<7/:B!Z36;\&-CO`[X$$!"2,I-\(J( +MZE-[W4JP).C"DC+ISSB?Q7[>J#)LAN9"[145-GH/3V>[$=O,N_43V,F! +M:X!O1V/:F^8R'^.UA9=0@M@0!2GW@L0%"`$*8R0Q`(%;[!%Y[W-,`_O=JQB# +MTGU&[Q*+_=]%=NKC>FD2"J;>NP^^+8X(A7]F5##N0^$$#TML!=O7#?;:T^R& +MH`00%#Z\+\,SC<=Q&ZM^7-2Z)`3;'P99FL'X%)F]\76 +M>W(;+G3.T'B>"YJ>.@W:??4@$50B[(OQT!`W@:MF`?-0P,K[[) +MB+O\>41J(4%XP&GKGA,IP7`:%3VJ*QB0X2J08P@Q.>8.^48L/O/YTT&*8!#] +M5.1+;(P$+H(S+'ES]Q"@`E&&HGR(9)LGFB,X:_S3>ZR\RDHB84?OD +M81NL?C%6*D,H_?42;23.%5'55,52%(1]C)116QPU0(*7*DZXTU]9,)?BE$++ +M=)E.89,#T'';+&C/M67@DK&$L_@JGN;WR+R-R7)>OR&LB!E9IFKAO#EH:%M_ +M>6]\%KO=[H\8>#O*<&QL;^I9W5TR-)KVI7W";!MDY1TJA="2,Y@OL_%R[?\)GLG>=$H'Q!^'K)&2,-L_,F`9%X'Z?Z/B+D:Y +M`Q0YSX'T-[$L0TKJ +MOX7T'^BPG]GPMAY)K4$3N64*KL*2JB*M-?-77-R^$;C[WDW:B0/$&>%GK?M5 +M#.%95C):,"E\4#-L4JEHJ2".7-[-\,^O8PJ41*3CE5;&PR3&-L\?,N9!_B5T +MTQQK1J;"[-70$9"0C'ND=[FV((UML2:RA&&[7B[2%O('77]X=SE1IV!M\ER5 +MB8@8`I!(=&@M+9E61IB^+X:/LDHGG11$5@=#0P.=ZB3[3J-/V/NZ^LX_"O/9 +M)W/W-X&7-_;HIV,^\?R.\>*!,T`5?!GJ#L=)6%$.NGG3SEPL2&IS_WJ-\#CCDE"`*M&:+A`M`3EJNM>^ZO7=@I)YU[: +MYS>`%!%?>U6QHI`D<'!@9J8-+!MBQ,+8&8;$/\C*5.@]2S>=1R$*@44//9NH +MW;H>'EC=EE"UE%5ZJ\8A2"H(G.TN[IVA1"-7PT(%(A6O^!8H=Y4*/P9_FVL` +M/YMOG\[[SSJUN>7/D[!@-C[?O>DV2>`D]5ODX0+1=S(5=M;C&5UG;(GD)HL +M'+JDN&$6,J(Y3'1E3['9K.W(]'BZH<7!YDJP%\I*([\A7!U6*))4I'DU36(8DW^%ZBSV/2D^!N.HFM0_@=VM][5]W +MWUNZYPK?D6YS7Z4USIA-X0I`4DI!XFTV?;%>$A_M9Q"I[5#UPN0I-O@MO--XUNFX:QSK!"3QO&7>2O-(=[@2&>1BUSC*Q^2Q1J)M +MJ(LLH2\SEW9K"&)!%6`!`WM3J-MZK^@^%HV-]&PJQ*M;O;;'3C%K>_2ZV>#U +MK,-J9DR9U79W9(VXW71AI7<$BX'\ +M"Q3B^`RR0L1#6\\4MD0+L^'%182HW$0M((CT$V!@<(5U.09'/IM<1% +M'.L6A4%DY22QQ5F1NDQ/-T*Y&=][--<(D;!C)/;LJ'EL7V!AH1JBE<5^H,EY +M^O6L*!_8KR;(KQ?G7@['4;NP#)'T(5']'08_YY;9J9.%@%#?:+*#X>9INS>9#T_^L$%S&/9HNMJ6>.8[C/= +MOH9'B/J@*<[_Y:+4]3U.>=ZUR4?>4U6._3W_%=WY3"'D]QI]_[QW4XJN#.N[ +M96=U_-7I+5=^\N`9O@['6L;S<"G6?"R[F#6_0U0;&^E&020D&3I,*5YJ1F55 +M<37AK5?5-4/?9F#?3:[3J^9Y-T)B/%[-K6G9RD#=M/8XQ%.]>1(",M"J,W[1 +M<$G1,:8Y9YQ\=,ZJ'WWB8X8>D1A2&P):PYOG,H.N(.??5PD#_3]-_U==E.BP +M@(:4'&%@-8UG0RS2K6RE#'0S1X'A9Y99)[^J5<8SY=2E8*])CMN(Y9I48OB4 +MY3G4G]5J.NJH8XJR$JO.T>E@V?JVO/?J7<%_JU#K[,+<:&--0*>\A<6CK]?/ +M,Z4T2VOU/;\T]ID>K3>[NV(;>Z;G)#,NO`O&.UEU:=K@9IK5/Y)E0/,13Q6.OK[Y2<[`*@JQ8/[?5Y5'Z5=?^1@^A3 +M"?5I3Q,V)]^F&?8>BHMG>]%IC$WMW\"SK%UW*0\-I)XB>S3,V$.U=C6AR")F +M4#APNKX4Z03JBH1T-UC_.!FPR1]E&OU4.A,["'N,#J/?4881371![CRE<1/S +M1P=9CXH)/>U1?$L0;07XI)MJ"HR/"=7P&80X76\'PA6TMD<6GGF!,<5FGS]9 +M&D%G<4UK?9&^M;;!X9XS/4GE'Y5R8WLPGYX20>JEX,P3""E5U98@8$PJM +MCG@JK*4%@+-0-5(G)"T(VT-OQKU!!R81B,:%I#=IAK"J'6K#U\7*-F4G\\,4 +M=UC]#M*,4FWVN'A\H#^E&K#9E]>$M\,G_[JAP@IO^GC:*HYW&*S_XYIRDM(Z_=E$J3[DA]P7Z +M%69F&1M58%#&/CM]S5P<1_'77F4\XD`$W,B*-1(+@4B1(B`C=+6J9S9S+D2R!+WDX;E+ +M(9YM"-&/5/[(V,2#X+YAS;?-=?/1P#:=AF$G!&BL>V).&=N"J691=28T"`&U">"S)#,LYN8+R20Q8DNN&T-:<9MJ.G+>/+9FK4Z]JJZR5LT]/$ +M"0(#W50)-LQ+S1)JB1@B"`\2^*E73U2J7*RPQ-8>L*6L.<085H=.202`R0;] +MD,0R04GX?3\JUV-G-)U?N5)+P5XD^N6(*`02,:^P:06BB`_?,M +M@P^CBZ23\;_WJ\'CX&)_E#=)^/JJ4XB&*`\1.RCG1'A(B?;FI!V,0_=K"AXJ +M@S[&9!Z_\?<6&Z`?=C^&`=Q`W2*_LWJ@]_!^?'<$4SY[OH:;0?7^&I]O/03G +M9WTU<,?=T];=2>^JCS,.?@[Y,)[6='!.)CP;)DH.JB;"?NB?2Y+`LAB@$(%1 +MX8R4'B8>/N78SDK@]O!_/-.'(PJ)P.1.?K4VX&+MUU?+\)^CKHL`Q*]0#V/) +MR&!20Q[1\"JGS.Z6>`]KR:FKUJJ*%[:#.&C$Y3NIH2&-?N[HCW67I:/4Z],V +M(>:E0D4RO)0=&SS>$!-@MN*+Z\#Z?S<-.M>9QK,,14S(AA5:ZKA$93LX=Y,0 +MB0`FI%_?`B(J"+"8QB:_=R?`'X3^`8(D1!FLF-O2`)"$Q>Q'VA']PCNN/A8, +MN1+09113(YPB[%`&&ZUK&7B("\^MHG"^$/R2T,"E*5[KO^_/WM<^&I_]VJ5[ +M8R,T4D(@(OI'TD<*0,)3=/T+F1(5)1:8%"I`&B=O$*J5_%XYA51]!S6-U%&( +MM-.[3P``L(&]F4J,A9\.KF()YV[SNSQKD+%V:T:8H!9*_#&>]\D]-.YCRCB/ +MK+/-7Q692`&AH#-%(R0E)G%U(E*E,%D19`!.IL6+AT;`0Q!(ZJ)E6KV,"UCK +M[.NVWC^_TWK.DX7_/_]E\49'^_#U>"ZWG,7F;/$\]]WT_5VO6S,7LM8OX[#I +M=1II[^8S`C1`*N]`D@A=R/.FRNW(:]J=T?_?E?Y#1ON*BWSSG)]C52;>D`40 +ME!H"/X*&'I&?`?ZVVO[V>MTB[."!4)_XI@_ET&.?H"Z=/'50 +M.'@='`.OAUL^O$Z5XC@JJ\E0'`JKVS&BR-3,-T@^'_8+I?;2.Y,9^OJ6S39I=? +M7I<2&(DNNOU.:T`#+B($U-XSE-OEW:!\Z#K-71Q>[?1)%_GOV*7I4W/3$.O- +MDAWTLIS9\TE#`(#Z.0#WGNY>#KFHI%.L8MR(?*">/=SG+ON:5('O%+Z1[V`_ +M3B=QET'Y(^)B9)VD,GUZ3LH]1,CK35:T+7&TJMFZ[^J2F+?+=6OS7P;N?GN7 +M?K#!5IGBDB_T1DXW][)WX&HF?)4G*"J.E4+`6(QB14!>^T(@HQF`RAEX-?YJ +M_)2V$F*)Y?C1(D-H8:X!_FV^A<(2JHBQ3>;=,;$1CAH1?1XS"G#U;=2T,8]? +MPQEHP_[XM)C/!0?5>X@4Z/D2`YQJYD!=O4'BS#F0UJ5FM@[&^#1VV--IC*,+ +M8.,Y58WD1&QCP)"BDD"W,2Q5IMNM`[`98JZTKD5N4C`;QIDM(WDSXT5L6I"R +M*(_`[4&_'%Q!A-"7&$'%">IIPATG,A]\A;.'J*L$\RG +MJT#(0_&_D7<WF)7D-/:7G1&>U(]*J:YEE7A8L"P" +MZ$(`^ED(E1_P5&,/RGY#\F6DVK0IU'9K&"B6!0<*6%$MZM%08DI">"J?+KX.>:DY_?AMJ`?[;H?=I+8%H4)/_PP/T&'TJ?]J +M>&Z?TDX%G51U/.4^U[GQ=CR^@3PG&E;* +M.>Z[%%?'NS-#]=/T7P4M#@S\S8;683$Y* +M)W:O2N;$>EO2W2N&W47?HZ`A1;`60I8F3):"A<3)@>96\YNFYR2T=ZNK%O.X +MIZNKB[A;&K^^OM/AMO:Q[&+EMTW(VQM*1LDB>T-F8F_U^@@D60,7E/J\3=D#7B\?TR30KO55;= +M33>9CN24*)H`TD5@BM42RF[!N0VV1LTH?.?/_+Y+L.P-&S3>UD'6G-W.9SWU><1UWTLO)HRU^FOQOGD6^&ZILX7:(KPJF`KM3E0S/.(3A#K3YWKXP2,002#,VJW;=V#A +MF.(8/`Z">/=ANU=!L;/;?:&[5I!R)MLK5JC9(X4OEQ1K%&HV#A(-QPOJ\GB +MMC6\B/ZC[69\SARYYHT^^]SL?MV";1&1LV@X11K7:+;:&QI[*2+V]Z2AB"L0 +MV$T93*04*9%!?(,!0I;#Z?_#E/3;=D#%*2@?%_CS[&Z9M!R.>:TBP-E&0/A) +MMA-:<-(E6\F8K +MU$-"M0^CU";(# +ML8<80*A/X4*08>'8KZ(*3(P4%EHU>+70,-4C%?-MT[U3>5#>%$+6^H\EGG0$ +ME\H%*,+OB(Y4BOY*/SXG):D98[Z4X@N.LGA910-I\E._-R2BA*5Y?-(A.IV" +MIKL9]D/,.&(%Q?770**];`3@"05V:NKCN9:V644FL]^'%>7\'PJZGQ@,+5^U +M?V+HF>S80VPPI-AQ9T<)PXM!G45":QVIDP\_\Q1%&(#D,4@D=PJRI8H$V%J( +MHL27LTL+T=AV/R*A^*PXGY=/9)-FE>4S\9O[:M6'82<-8XNY'BX[&"!GCCLT +M'+GEFNG-K#U@G;?X[/;R/L=*]I'M_>;B\DZZ6VGQT_:9?F:GODWI/UTGE,GS +M;)IE-IJ[JTJ>U@W1NTQY&R=S`Y&/F8:$#8S//Q9S,X3*J*SNP43)BT@RMMGVG[GG_\ +M^7CP5;)L2;-]W2F\'# +M:QCUQM'M$MG55-75*]F\(VQE==8P:&/:0;)L1T:B9";Y:`RQH!<-0!8*F:5T +M54=&J-6Y7*(B:YN:\[AIIEWFLTTW656TD-LP49CPVA!C;8:<>11-H;C( +M3:D:J:81QV<71H,43UUZO+KWO5YX])-P1$0]^O+QZ]=Z:](P0E#WU[WL8O&/'N@SNL\B*!$8+%`60 +M4455BG?#KS3#X=<2EWJ%@QHDX0HV8XWLX,(J+7OKFOW-O7OU7B; +MNZ'C=RQ-(IP@?$:37I3`&N>X#X560.#8J7\_X1UG++2E$(DTHA.W5D$N^,RG +M@8H?J">37-[V:SL.'=_J[!K#,/Y^XIFN*ACN-4AZ@S)ZP3-K^+5_I?#O>G?,[QK[FF[\7R(N*,J8884"$X=[ +MQ.A+')]2AB_^D8AV,D#DB`4W*TW(Q*>>?S(M-J$#S;V8@_V$^!P1X] +M;"O[*SFVI/GCENR)IW\5W9SHR["^_"IBMF3#%M;9"SW=Q7&-/'JV?"3.6U'BW&PA=0B$.'!28DPH:,@;Q*VUNUV54JCS6+C +MRSD\7[;_%STPTS`W\W,2FD!&+R)4=P9"<,,/T/?(C42)[1PJ['&R-8O"=C=\V99.#8UA,S)G-D0K<"+XJ +M!AD=BAW:CXGFXMFQ#04>$'L1@@9(32+:(KRE(HA@QV5;!&!;9LF:NBSQYEGY +M[,&-I-N3;F(+:0@T\D,Z`X]4=W@.*6+\18]NGX\R*R'HO@XOOA\&H9A7#&87 +M:0]T=PU5%QR:EXY]&WA>C;)%^\##+A;*[(/T<-P4SH4;6U?:-AT0"<%RI@9# +M8PBPT.?*B`H9[6+1#NM,VHC`W(HHW!# +M>6`-F/C#SI`SU,0E^1UD3.SLBK'(-D[P_G/)STT=;VY^0)LFA\34F5(R +M(<*9_DKKF1A#ZVM1.FOPY?4H>&K>\G+.=^/=30UCLB]V"`?.S3/+MA$=CK=K +MO`8G+7*B5^:#T/_O67HFTZH&\.$AB$.DK8)X!!RG2="KRM)6=5CK%MGG==B) +M7TN[,S#R;W;GQ>1?X'O*)$Q+T/1R:_89/X:09,O5YN&J3/3>L5)BE2Z6"0;( +M?F'P9=1"#EKB&@N&>G^]#EE4.T0QQ9?1;+^VF*^A1R>OH\='&X^JT;LG4!FP +ME[]H3&`NMR)@,C.&MG=V)NF +MK-_CY>"GZ/)9"ZC7"-ST+6-"BHO4XG5CMWR!/TA(0Z-,V;#/O!Z/KY',2#^" +M\OQJ^`G)Z/AU1BB'!!G$):JN9E=G@3/PZF9X)UO9%%TE!/2>YJ'A>'V*K.[> +M"8B<>-P;^%+!51.L:X?"$QD_)W3N\O?U&G&9HR+`3CJ-9WS[:FYNO`L#1Z[4 +MNX[B%K.YX7$X9)29BRXYA'*K(.6<$((HF+`FT,T((@LLXU6P>;95H(&8-BK< +ME5TU@&_F?\[_B\6UUTS7&0,6&@PX!??P^VA'6[=0R$?4:@Y%),QXX]'!\6(C +M%'?(4[QX!8&X"\0;\XY(`N022!U9T*)--3>2@:>&LB6F\AMF+D+!:9Q:Y,+Q +M@V]8K1A8H3.!$R11LBB$;43!5CHJUO4UQT5]O\[7_@O;PM/GHZ+WW(J$QI+Z +M9]AVM"D0GVK5A791RN*0Z'I?EZJ#'QW&^:H%T$$G\#/C-G7T-YC&R^Q_2\A/ +M[0TFI4X.V'N.I>7P!](<3@6%L3HL;8\X8-M64(G^@`([D/_AT((D:"DV5R]< +M]IX(>:Q>.:X,XOT/?KU.&P<-CBKLRE2[V+M.:&!%@BQUJ&B!FD,*512*LIIP +M4/,F=66:^LW0\946!X^9Z3@;+NTYP46*PP(ZR#)FDY1`U84@"U50HTJ%H +M*`.&B90X3-!]3G9:(Q&9W5H;/?XX]LF_TVDN=.=S,K;MXN'$Z@R&@:;30I$V +M96P"I4(ZRH>78]L0XGIJE!U* +MKDT=(97MMGHA!V%=&];%OU,-FC-IV@6/1Z.7'AB4GEGV=M;0T14;2RZ4JUK',"-WF0*=V$-IJ" +M-5FG[-[-YMI$\6^&(1!BE*%,S!8W5#L3.0PI7+.\D0\7>27LGL6#0&ET\$RL3$NM'P)_`0W:N +M^^#,(4\+54FPWEXA\/=[M=U+MJ7<=EJC$-*$7PS@$OFE;M<0=PMSAB[0^/>L +M<=5TRS>LF^VKF_#+J!?#U=7(;KB<&]'1PE.5PVD\;EVAZ+L!N))?F<.G#J7SS<_#S+4 +MXXR.GC\7%8C7HV>V<2+W1?UE@].(NXOH%7-FU&YMD3)LD05Y#-W0=LL6%Z6\ +M5GAB0;G#UEEH&ZA-B,K.'CBH8[S40'310>,-MX>]32WAZXM0=UK.,7%RU&&: +M`]70RT>'4QS-$#C*SOE"^NL +MM-XOJ\TPGX\M<0E$A8G@7BG.8*=8XS&DP8@F\MQ$]1Q(Y<46OLT=">RS8QG2%-L0[S +MJJ&+JXUQAV:C4M&G'Z86`3=>;-QSA&$-E3J89AC?%BQ&(J&,1K;;R?3[DA)D +M3,KWM\V^JS&S]ATA:79#9(O-&S:ZI'TS1V^)H;;-=F30A/?UL+7:>7(4XR`G +M37R^7BQ>31!+'!,V/1>KB,M*5?OSR>E$D_-4;@6#]GM(':9<:';G]L/;V^($ +MEY#4T#"P%@N(;+P,CJLK(FKGX85/@^@IPNI#H9\^Y6D#`$(QB+B2!C+XZ:`2 +M@Y"@)XXZ*$3O[6RH00!L8IN9)&W%?+\,?X@C@<*V<@*^-D:H1;Y"@.+Z@5`M +M]1CXX'K_?7FD`>NPV5V?SJJ7`:3JM16(I'UVJUQU06ZAW?_CN[VB(#BB&A,_[-YYY!(*`N*J7P +M3)4QR=TB6,^NDZ\BU[TUYH:'6C[*1[-1IX(6=`WQ"&G*$!YFY,@[90XI?-6O +M*=B+P$2Q*`1N`$!32_'4\GBHR=`@:H120(B+`@C`.U#9@@G&WU$8R\OM"#%% +M%>?#'F*^U7E]S2W>+`QZ5D+MV.Y"^O!VCU*%T4_(8.X_?=;:R/>+]YS@_O%- +MT0Z-?LVU//%^^_WVF'1Q(YE9+[1A7=6Z!`+3P]NMQG/?%X_G([L7&M#KE7?S +MU,`UG;COI6Z:'KD;IR!G=8#VR-(E'(I6OS1LQ-=L5$6H][OQAT\#M.N'HVMK +M1SI";Z-Q<8?#`10SEMZYH9G)P>B?(83D@UTQ-]UJLYK*?`_HFR6UVOG.'S>< +M+HU_45W!$7%LX#6)V,75Q., +MW:[<@9W=5X\I>,1V;00%9R:21L*TNJ;`9RKW<]OY]G`(UU'?VO)MM6$FPHN- +M((X(`WPZI<6VVNC8 +M2;FTFS""LC)M,W:KM$/QZ-UV\D>H[5=^.Q#!LB204S +MV#AG> +MPX:W0DR.^;.>IN&MND!DAT$;LUK5FVTU@.;6-JO"TE6M.:%K239ATLU4NQ2- +MG2N>&NV81W8]2`XV"^T+1WZAR&C`YYWJXV16'8(PI+`4=L@+C2%9=J)&!P[N +M7W=S(WSC9W5+MOG,7D7KAM(*Y"`+HP.=3:#;B#?2M`69P1$B9<,7-+OQ +MALWN,'-=6YK'!8.23*)C-V)#&UAP09:+,.(%K8*:Z:"!AM[M5HNRKHV0UO)F +MK]GXN`YWRL&VP8()&Y*09@UDI?(=Z5E*(91&2YE4;>)-JI-][VR9Z5-DUV48 +M$QR,-KQXR5N'#+4&/'%XSPJ%,UU4/+@,[MPT'M/:(+!JQMP)P*+O1@J"QFS3 +M`M1'K+%[Q3/MGF,M8(@,&`7*T>^ +M'FL(`4@,U+:TJY.(0YDAN9P:9J)3K.+,`I(9[Z-=E!Q,)QJ\@ZC%W9RITZ&;;Z.5QHK6\",K-[SU +M@&$/'AHP@+9OC+@9S+7#0]X`(?+79&Q$B$QNAAD<-MJ,88-:PD$"70O*%[.A +M9S+(`Y\,+D`9Q)`NKUO=5;CCGCC.BAR4>&3E87&7J(%93@N;IM&81RD\4FE0 +M@(W`>Y2A-E,9Q>0T8+.X))9N6K(.I-T&C4D(HJZO9BB!B\43-Z$I!GU(4DQ% +M&,K`VNBP(WO1;/L+3D@4D+00C)LN6TX-B92!9)(,UM4$>CK0QP'!I(/SIF?! +M<,UAGBP]]<'%56&Y)>SD#TJTR@_<(@SM,]B2#$C%^SY5C,UA:7$V\M0V(MW-F,I!IEK06(P1WUEL@S<:E&(T#1V1Q=F&>8S5Z:F +MX6WH,*.7#[OI]M0$#,!-:"+DXIN#L@46-J,S=WJ-\II,$X(:LLCCA,896"#! +M7]`A)L=8!WRECJ<,:%T(`(86["`N1I?T%_1[D>>[O$6? +MTQY;SJ^;L0Y8CR6TA;0JK_J^46M"`7UO?9^ETHTX$V8.0`./+@E%6#MF!]/IN2$!*`Y?`&*D8 +M3Q1030:&K>0?`F_VLZ:PY'>Q'VY$(14.HUWR+(^LGK9M?IUK%"U&5L]FFA^; +M-HVL;R`5GZW]@B-^-6<-WBICW*-[+X&JR>3;Y:)8%1T)HBH$+!+!30/%\'HT +M@;4E)**HBS%AD9PX]<84F7Y)]\`;`S.];`(WD`0D98^DHN9L@W+S=8;T=UUG +M>ZOXY\F,AHMLI5-J,E=;O`040WE$**E]4!A1&/5JI]5LJ#USY/6>8P/D('MF +MH8;29>1(2D1;//V`12``I41$2B!S[YLETZ@34;F%DM:*$!B(P^HK!4RLB)E1 +M6&CU*&:8$R3=5&;/=U09;JEJO];Z#0M0<8[-D_I\`P)'Y*H@\<@#>R."//D7T[`H@_PB00!F^T9`U-_5G.M%T,_G +M[IL6V!""`$)Q!'/<&H\'6JGN2?N_QJ'V]'FGVXP+"Q1V!Q`R:G&6K$[0C^):U1"#R*7=HMH>XBVC<0'J +MH'U>GK'$,;@4&A`[.%3E85)I5X&W*60`V?S*/!@=%MJ_ZSDW;,+C/@=M#IO[ +M*/+Q3OHZD0Q0XV6@3H(9& +MU#>QT@E!I+?(88J1+H5=02('4L5L1NB)0R7DI2\A@9(INHK+CNP!13.;LKF3 +M"9)(I(L1@!FA(31D-4DI(3`9ZD4BAC?O83,@&K`#16-%!;=R@4%J,*5JJ@+J +MG099F[=KA/^>N)XHFP";\Z4RGP#*%;*=W7Y@_J?[WK%SK">I--ZH?Y,'2?`0 +MP!*]+09\5>COK&0U[#1TK6&Z$(ML6I%&(92'J+`79^:S7>7L>%?M'8Z89,PY +M"2(VWN&>>!NVSNNB:H#$II$(?@949H"A]OST=6SY:SB%,+2;L6;`V"!RYZ`I +M)*`7DB]F\D)@';VSA2B/CN\%"V&#>L;.G@$ID#.2H4-2RRE*-?,R:UGR\\;221`H +M6`$LJ$#Y1_Y;G.3>.;G3:HAT"=R6?1A7@TH6F^?A!"GZHW[*?@AM8\ +MARVQ#/]K0!GQ/J'W>YOS-V<#)%,H-'M;ZATEVZZF*\0PB*R#(Z9X@<(26WAY +M;G]EPFN#)XG1!7-,D!,^"!T$=I&S(OL3FJDK:^JV+&VO+SM5;YVU)<15D+-T +MD:>#XJJB*["(EHBAR8P1M!;0=W^Q_`()"X\6?XQT^4/@,)R.]\9<:$XB^%4Y +M(E6]GM&=;=/>>^_&Z3AZ?7B).(2!Q'<.!A-C.DOHWCX(4XUO=MACT^OQ.]3< +M0V^(Q,9&$A)#=M@0YG/M@J,NN7[?^I^+3B(W]CBB`C +MQ,,'^QRI&WW8@:M<'GV&5'CY8W)PEC=6,U?`9ER7&L";<)`GH]OK$EK9*"U7 +M&2/9A+!OZO1B0=C&<*L^VTP=U,E(4E+%*::$6A#.I#FD(K"O0T<.;:IH(9S* +M=@=F4*5!,(I5?^%*JL-O2U#$?BR5B@:/%5*I!HF-'1@5S:[6:V*QE]3J]TL1 +M!0H#`91FJL!2"R*M&QK%HVQ:-%L15%J"J+:HVMC46T6L:B-J +M-K4;;&*VBHU)L:350:B@UBC5):BM&QM%HM$:T5K%1;)M%45:BHVP;%HHU8VH +MT6E&"2!HAB@1HT9($@*620S,A(A"8A1((DL"*$%""Q02>^Z.^9>E\#WS4NZZ]+ITB)6.RUEI+(W;*W-84 +ML&X/!DK(-MJ(31IH;&SZS3]/UY.G_##ZU_:)';^>]U-+9*57M3)_*QW>D] +MUY6L-S)`4%A]=4TXNF0"B-E*"R@:0$2+2I,CC4R1?-OUF#/1`:,U!092.DJN +M8[$`+D#CRP[`$[Z!SM-5/%8-XVVER!C8@*PJG*3W2QWEI950-F@#=E0CBVD! +M)&N#(D4_2;TY:T6)DKY:BU$DA89MUG9B`#9Z@G4>%R[CD.+C.?FGP_\%Z=`[ +M**'Q73=)E\&OML0ADL8BY./OG(W?@Z&4B[YV"4)ZMGK63B,"]2 +M4^9922"_9A]\%\TAX`@C3^_UFG.5#(JJ1;%'NU.BQ9H-Y+*YFJJ[KL^7GEWH +M/3(?A;#7BR\<-?S@"X#"&Q@5>=:(BJ56E5USPC^*"+6,85(&@U>EO[3O#S$R +MAX10O14^UNZCHY21S*V<%%Y%1HB@0%H1ZV/X([#Y\#/:NFB6YGYQT%I!\7P( +M!?YTRQV/!;?,1#\3=+TU)<>.OK^Z7<_HL^XS"!]*WZM]_K@AR +MH068/]'/06/.D]^V!&,Z2=;*\'W.4#TZ>92'@Y-!7JTXG5P"R=]H_7=>GT]' +MC21#P4M*BP.TDV];^M12(K%!%!-E:`1$2)5U^]C42[1K-Q27'9-$4N@P1-#P +M0!Q`XIR#8O7D/.&RWV)/+B^"-%%D8YD$FPGRW[ONA_-3L4=5JAJCR,Z',R.S +M+KU#*#P!^Q\7D/]J'DO7IH/X1#B!X!%.4)%O7$WTAMDL['P4V*T$K4O,#[6A +MD!:JPT%^G^PEL+Y2=G1L!19-=[+5V7Q/%9; +M,U+RP5G/'W\5S-=S<*1S/$#NE6PW8K/;JM+'4BCS6`6XAVN28)\1)Q73OI +M+%<'(<;([=3/$/PA@="7B!D[-JGAKH<89]9BCM1FFLU%"[KB>1+\5;G<:TP?&YO7I_:?&1^$V'H/J`1`'UH5PUD +MZ)S'-G#YZ>LS\#\6C7O4:&X/RKAA,0ZAE3H0T_'K\1^[Q1P%0]F]9^?2@^31 +M\E)HGQ'@<3/%8!9VDH%0_6HYBQ7S]EOK2J[E=RH7X%&(<&&OZ;1,2)VT#>YC +M#YG((;+KT0'\EQ?KJR=E!Z?^-1O^_K4THJ/P'B,%`O70_QI/M4F/FZ,V=2?M +M)D*<25IZ.IR/L,@J(/:^B^TLPI\&J2?BLJ"?TDXNL8_6^Q_@U?:-+P8?J=Y> +M$*_/./HQC6L(]H?(8%HVB<)5+]^5"Z)[R=_`_VFE/^H=;Y?AO,7(:I,OK/@< +M_.S)S_7;AI/5">IY]"X>E_K_J;#`9C%*YVS?5??529'II\I.+Z7*B_?>TQ9H +M@O<92I_03SMTPU*GD\^$=:I%#*%0UQ)#\Y#+B89A=H?PF:,Q3/7,IBEPS+M0 +M2_T'_J8>EZU![KW%!J'C)E9^BPYIQM&$,H&_"L*17_/]]WY[9D$8JB,1L:"3 +M&VBQC8T;:I+$;!HBQ1L&L;04:V+%),,1$%1M)HHVC%HVDK0;16T:IFPE5&BP +M:C19-1):*U^IMR0WT+EC4:DM@U3\QUY>`Z,O9*`4$B8?&RR>()Y>Z_>2'A +M-$[0*HH*"A($\)R#47:3WMI#5+.$$4;6+M[U&R?>!F@9G#;GO9<:HH84/+/A9DW:1\_X +MO/IMGO9R4>2AK1T&LS:N1R3UY/O8&5O^GG_CGPKHLBION4Q/N&A0?Q_-T0OW- +M2'Y26@?H_5[?EG#1W5V/\2U7_^1;]#1DF:&+JC<_!9HF$S8LH0,WZ>Z/I$CR"?X?U.9B(09O0I1J<(5+'^K +M:*_NF8ZMHH^;_[[!ZD9I351^__#V/>^LT<,@P^2T1)L;=XOCGUS#&E^=:(>[ +M)^7.%BB9_%J_@7_(L]Z(_D/IPFB>2$*23ZC69?CZNB8,8V0<:82$C3<&-DD; +M3D"#'8IVB,^\F/654;#1H3"4HOIV],C_W:RTB-:>KR]=/6O"]*J4:R>O@PE9 +MSYCKL`UR2&/;-S4W=O,9Z[$PBF(&W]!#F[PB=C+"LIWN-_5:M`)+22*,A),U +M#E$8?)O0KKHJR*`Y^4)=GR@[ +M0])$)"Z`:$?RRV',VV!EZ.0H-$7%1%#/=!T0!&L2<9KU@?$$-2JBL>Z`CI2- +MZ*3"@TO;JE^.V*=AR.],'MF;I^P8,>97M\?PC1Z=;VM,-Z:QMV`5`(%MP?=L +MUO^O63!;VJ1=0E9:BVOC+L9+;_=WZ*IV&_:E@N]7-(O)$(CT>` +M8P`SEF%6OG[Q=Y857F7_5GX./J;`J0]&0])";3"XE0*2R?QQ5=J2Q,!DEL@C +M;-$\23+(RT81L>B21O;JAC,8QC>R:CJ1D(*HU;5&K"5IIH@T--S8X%*#P;1I +MUH;0J>%MADW0+B]U\#`@%>;^&G"5#@KK1;9I>NCX2M9D2++.U:4&C +M0&"[*$ZC^864EE)IM=/`82`+&,T&L:I[6>(QY]H@4DAD\`&]QL:20JN]#.V& +M-N4H0D3*Y%$SMZ"#2-).9["-E;\\ZB]GQL6<"-&+5>UNW(`UI8C#]PY@VT-39O>;@8Z04'Z.4-*` +MO[S+6%;2[Y?F,>U+Q0`D=68BPU,T`*"%8I1MH?8V0,8JV&/3KNIC%6%6*,E2 +ML4U1E53)%D51`1800A\FHF7=T,I[.$.?F.^9F)BF>&P3Q]UG0^>ZO1V=O@FO1(]>)2"B,7FJCVI)D&DX!@8K1GTT?S=?"#,'2I;= +M:7@E9FCK.O49EZGL??W7:K;NMBQ62`EC8+:6QN@):!MIQO(:7CMKQK\9^0?2 +MA&'BO:\7-S'BYL4/+KXWX%UZO;E7.=W.X=EV9S?V8\1O5AX`DTQ_Z)/]*!S= +ML^GJ^3DB+;""8R/LZ\/ZP(H?);D#U)&T=\4VA>.'![+J`>6Y$R3CA1\>J01B +MD1YR#&Y$[QN^MB\7OQ(:,C&%M"2FT,1'F,9BTJ\SCI/*5IEB +M@WIZ"@V3AG#E*AFG:GZ_];OX#-AW;WJ%\6M3GC_?0Y>S +MTZ7.0MJRL726L60V,"1*B%YNE%T$BXD*2#E=O2?V1.C@.<:9GF6[6:NP6(;HB4J#!C"1L8STU$LE5_V>Y!H-,C`PD2UY-.W-01@V$ +MJ6NL-Y>^V-K&L;:C%X\=R[OSW>+EUX:A%!1D1E"$ECE8&5%LC(E&20;8FB)@ +MW;$HTHQ1@162P>6V1$:C4'C;K+F3,=9!D@H-(@;^^SK]@]JP\,-W!-L&.P#9 +M*UB#^+13Y_<3,S^RS+!.[(C\7;U>_/?#]IAP'V,G\3[S,XG$2^N5#X=S@EO$C&&FC>2%C.\$),&*2-)^>!!(C2\XC"9945P:34D<>2&$ +MDH`\KT_)J3#'*`L!GHZD-$P,I8D)@/$JT1M0('W^[K@I+)"$XZ\6L\[C.-@H +M/N&[#76PWRZX5UMRFD@2^-]$<-V<+>#QPO;[%]5UAK()RE)(:><1Z-&0Q +MY*\'EGLZ3D2[Y&6T]'#MBAI!ZAJ-RT2@&.KAZ+ZSG#/BZ#F[A0TO!O,RG3&A +M+0@8@/9G9++U3&86DN;'"9CW'A#-L>I";S*YI:N%F#*XP&@%KXH,Z-8P`QN% +M37!I*I(=$N$KU!8G]I350B]"'D680Q8IB[/=,U2)IF:9YY8+SATG'=9VZ+NWR\YRU< +MIB,A7E-X\2EQ\.WG->E>+U6(YN+N6L+@"R*C$48JB(8Q=XF4D"25>_.-7G77 +MIO/;;C$9$,"$H5,55UHW2&;(XJ841"%[[F7I>><)H90\[L#>E>,-47L:+24H +ME51HA2J*(F?K>M>3#=]EW/8YZ>J88:4D9EQV?L:?;30]G*=$3Q:1 +M#%'*2`R,(5)'NX\EAL;"FVL4%Y?28%54>`TB:<,MU&V9_S_B3WMXGP<0F^\[ +MPK4!'8B%I(9VCA9!NCFL*A`0;"Z/LE%.S`-,=8J9 +M0790T-4-!H'A,&H2IGP8LJJAC;#>]"S$S`H$TA>F4"4,?YK+Z6=^NI0TB@3< +MY@D22)PG>DX]!:/@MV`:4!!6"(` +ML%,AJM%.V_LW6Z?#K+MTIEQM'YK+GXO361@F:K]]_2L/SLO8'/[_EZ+`:Z+* +MJ-%6:D-R.OS_+C#RH4/&K/CL\7Z+%R?D[N'9.P'%5,Y&8];0^ZR\5OHG)S9; +M#A-2<6<,Q/]$0]?01IC336-$&C+GO:_0[0VZB4VA)ID6%&([V9FRC]VN+,Z-V:WDA3*5&N2R\YB+88_1)AS<80? +M5P?<^&\,P8^%ER$(XS#)6$$DH+[_8Y=\,-);M[DD'$V.T&K&#(-Q6$L;'7;' +M$TW+*F!&1U\)1NC3')"8.J16H;&26MM\IR-S@,7FY;\4)HWANQC:*.%6R6GA +M=$"<8<3+5E,G_ET/Q?X1"^,6;CQP`(<;:P]"`_Y?$,;">QQUN2MD-`Q=]VY@ +M##/E==JO^14/>/Y^[K&XW*2RB2CK>!VI! +MUB_@$9SJF^;J(Q#OU6$C;/C4$6DS+L\8VT"V.>6B)0`C8B*"4--3*=]RA+B$ +MA?$$F!&,5GM\44@([R2KRJ=W(S[V\\+QP=VZY=NG9S=0B9(XX;+YQ?S +M/F_$#[+N]SGR[7U#@S)9#B-5F:A(S6,N&[$M\C +MU(;N;Q*#$-DS(L9Z/]AEU#;@Z;1\=HL/"QE\A-,Y)B"?:8Z#E#U?/^O96W70 +M^MX;N;!QW58ILALHK)J*)=8/PVW=#%&#ZU;L:L\?1+57Q*(>8E,H$NY`W?2G6]]>LSR +M-G)(ZXXR?%BA2( +MPMD*%2A:J=(!R5)).GSWR-OP6#L9]O9=WV%/XQU"YHUL-BCW^V\`S,1",`^S +M?W/K7-JKA:T;U>I1H9ZE;=N#)!HC"31_M,X><9[,*O.P^8]?Q^'7U3CKSH*` +M:@70"6QFI'&.$%D&Z?V4#UZ(DR!E)RA2J:+5"+:I0)=P,8Q`4!48JXUC;^#* +M9A&AUP8TVBLE%D"%:)(QDD*\96\LBQ-J"&X3&LN,:OU&$5D-,5'2314-UH6,:5-A&! +M6@"L05H58C36-*LQB(Q-HS(LR1AIY@E&800VHX]LM0,:6,9K>:33V78#E0FXH.R^Y1\:!]_HJ3^$ +M/">1KT.K,P+]=Y'-RD,^:IV.Z>P#KU!DA$#(9E-&U/G8N(KIQ/#%5=659S4H +MNQ1CC@<1^7SF+,CKMEE<]]N222\M04I="X;%'^/KJZ2/Q/3UJS1T4U4J;S:K +M03;R25B$U+0HW(QA?C:T80A]NQ"]$5Q:WO6VYHOK_#73R3+!Q-X+4J5.(KH:%D%D)AAN$)EW^V"^2`?@,,U1Q!C4A+48F*R"6U +M9$R"&N^_WE&A.2OKS9ZX@7%%=ZQZHCULHBTZI]!A)/![NN5R'K,2HE@*$',^ +M.H''D,[U^+4Y"_7B82B0FZU@%0#:3JHEB<3?M$.-K[.^5-KI&>P^3U>"9F0O +MS2%3/NW=42E0/G?H:GIOV<[_<8?X3]'NM2M.LS0:U0G"CC;J"H=E0EHD@6)5 +M-X49V!A^!4J8_`LN/F&=YLU>O@#R@H\!G!F%7G79<*,:N:NM$8 +MB)&`@L!@BB^NS#!,%!9?IW``C()(G$A02JB\[`0*B8&/$%AXN)N6UV]NUR-& +M]MMRO3Q;>[WWM[5SS<\.]+TDEYW>VWBC:Y7C4$4'+QFK%-9(9L#,9((X,$@> +MPQ_3^YSE&;L!#>UB`/UL`#YG0Y&P+KX6H@TVICVS'7^9ITS1":P;RNGA3(6C(VG!D +M(R+R_G]:Q)/871[YTKT'PV3)8.-+OYX^Y:8N&HT22"@N+E4YC-QX=FHJENQ2CK./`T7-S:LWIHL>M9<*YP<5-K& +MV-YD;`--(C`@P>,=NGC,>;&.YF"Y4P&4R%@-+&CDVQ"TP8T-Z)I&M:6<7JFM +M['OM;IMZ7XX`WLQM:+!L3;;7J:AXC +M-G69(VI+*5R.(ML@16LCC%8R*O9E9D)(8XAIA7&E"-A`;542%S>(0NK5*VQ\ +M9'O@C<;#)N:(QK!I0#&8X-IE2=A&VQI&I-#;3D"-IC(3+:22-%I)(@KKB8QA +M*0O1!A18;&T1-DA1<+H*T,:>3T$Q8T\!4A-X)L2Q)*\]1/7KI!R+!.L(TZX4:C`]GCYK-M"#?&]TPJFR'!24#4>*5!4RWU817/B"LR\D9 +M.2J58>T5D$PY;O5EQH/W!(R6=@X6'/^-JUH^G^D_0?!M@#"$Q#3\Q-T(R[P/ +M<:W##Q?<>NZRZK]H0$P*5 +M`P5N@AY&KG,38UBA.++H3Y%!4609!,D?03RN\T>$CIQ>:B-HK]7PE!?`]%#S +M$?B_"K_[#\<0Q0#OX.S@AW$-*/`S"'_$3GX\A`_%K*WJ'=SCOD4G:Q3G(?D_ +MA0\#/ZHG)^!2=CMJ1DC]Q3Q"@TI\HVQNAUN7K&(/>*2J:A!/(R)'&>&H3/%* +MZJ5#Z$_A'IHGK)Q/;TH;?![.!Q4] +M+Q/D+?/F3T=`^;C^*'[H!N9Y2;.=O$R3C9=!,[*IJ"D(>'4/2Q'?YP@#.=?( +M+SB',*ISU!P0<\78\N$-$E/.91QS`V=7:5CQK49!R2Y<6%#(`9T`M$Q:E)D576X@-,$A-8:\538 +MP_3^ZRZ,!E$J=,44F+A](EL%Z&0U$:[F_VLZF7PG0/1Q2HUX$]/52V)[E@T. +M(^[U%C>4@H-JJ*C"Z6G13N<@J#!10[P];P-YY">@9#Z +M-A[5/UWRV>?^_H-F_EY0USH@[RIZ"!)[N.J`77.N*HJ0(1"36*M@VP)EE=J^ +MNJ+5&@19"%A<&0$8*:7(&&9,WI%%)LJD4923,T%`%(LA#0RHH,3>P^O80,C_ +MR[%[E<,-SYR),*DPBG&E!_K2[:BV_%MKVKQ3X]M5RI^:=HJVM"B(>2@YD;9= +M%?QI.-B:)+J5H*`W$'Q71TO,SU,-VG%:/#\I=OL_)$S7"./GZ'/(A?#953A) +M"A\-J,TNR77ZM6?Y6?$89(8-D@P.A.^R*+!2"D62/8J$/1N$6';0U2'#PZIE +M,BP/#VA.1(*22\&:9;\9$Q523-(`QH-V_Y>B4SE,D(D%"(K!.N(':0^F>3&CZ +M]G[Q>U*V.D%E\^N54UZJ_PWTJ^N[/@Y0^_J&$=)\N95Y>^%&FS4,Q+#N' +MQ;#@.MFK9,($Y>GAOP+EZ\4^=QU'@PJ=[#G3-L;WS/V$,:,:#$%UM@E"!WGV +M*9LS0F6V[A<46144F>1@LR#AA&:R*9`K?&E`,8!/ +M4<3&`^A#L*P@5DDXSU7,W=YY#QJIUIE8KVJS7H7(@SUF&UQED7"A+A98G=YC:LC,!"A"0>_ +MHT;)^^204\.X;1RS$>&.;=64,FM6[AX#NXSN8P/%5.3#S3)3,;J79/$YJS9_ +MB?\:?E/@9UTIR,*IY!2Z0:&D%,795%3UR8DMS4K+H1+UGJ9'JKGQ*, +M.;"VC.I.PX3=$I4KCUV[M@&D-IGUC/LRAAO$:DT(1.RANAJ0WS?)%4VXB&@` +M<#`NUKH?"6$YJK/\[9L+-%M,-`C/[*G<20?RX5%X%:76<=0T9."%(IJR&5$J<*H!9! +M0I@$I,LQ+O;14BA3"GB=_X\]R'],:OMB1%N]G23C0+,/0,%XBB+\#K#,, +MDBR!B9\1)NY<=.XJH)S]E\W[BISL1<44/,W-PE*6;'L!R.R`N;#X!B%YH'L* +M'L;>'7-K/$:N?+U5KQZMC'/59CTPQFF=K4:?&&F'H&;L6[4?2]QP)#/!^!RL +M1MB[]A=BH8]W9F5XP+>4]I(UQ3"UB8UGD-DR+<`V$V@NBI]]7,%R"-'E)W#M +M+)W--3XC>F*+%U]_4;/P._(=BQ1_)K(,F=&1Y-U3DLR0H;>"B]Q>J1%` +MXF!:O\83'&APB(2#ENLZYQ&PFU=UVNE<;\/?/\VKWA0&"$.\AZZ.)#&JP"]" +MQ643=QU\'.L(EW+^UI-_A]B#UWR9Q=D]Q]?H>$ND7.APT+0#5SA$EH+]S^%7 +M>^%4#))RLG\M"QU?Y+]Y1N?**QDFT+Q1J_45HVYXY:N7T*\;E-RH\AWS.U&VC(@;X7)*"PDPE+MHI58,-64EI*( +MH)@:D1AK-D\?TI*%.4)A(3\5)%G!$;:-=MFKD1A-%JIL71*0WSGVZ;^L4'4_ +M&:TA7_T?S.7_-8?!VTJNKDEJQ8TZD@4A#$P/HDXD.3L43,$3BH +M>3]/3A!^7.!Q%).:SO][G6(3'A4@[*#4V?_-'0%V[K.*",8799W_7)*#RYTA +M;9HLICFA54%(RB*41Y",X>/KB<_V>86Q&+$/. +ML7Q&1L9Y\&Y/WGMXCJ;,)(M**"HR0]XZIR)_3>SZ0=V3LH:/%PFNNW*X,HX6-E9V(0JTDNK=O7\">U>J@UK,/MM(@.DAAM85_H +MNU\BC:S^&GK_G.F0YIJAM[6EA;.QSDP6'R)JR:3;?>@23_;GR0Y`OZK]^[>P +MM$9V-5L?NNAKEV*!*:UJXQ=H:WU-@?;^%TG'K:Y/J37SM;`C;(*P$`A_*OQL +M33C[:OW_>KS*X,DD<$60SH1+:44*1-OSW'Q&*_M/O>=1R.XWJ)E+)1%G/ +M;BO$9S$0AX'$[P.J0CFX%?+26CUI&Q_)_HU;5@?>*&V9E;\\VX-ARN+<\V&! +MD0T4`/5^]G8?[<^^G:N,(-)D-X>O%S`1Y!+1,[5?=JSLJ]=?T +M7V?O&SW0/?_K->KZD/2>1^/TFU]&IAZ+U"]P]H]Q*=2U=#>F2^CK +MR5XHY>.&/!N,?E^W96I7!N$B/1IPJD#!U)A7&.D$1UI%ML@JRF6EH+)55'PX +M63`I6`O.KKZ)[>X$\AZ;*\9B>5R>J/J7!$EP-P&@46@JAU.6YQAJ$B%>CJ3^'EF(T25*"^C,^UOJP%=A[ +M$,W)&%5*+/7#$^ERNZH_B?@XL6?9)ERS%-BBJ#%!7W_#8$:"2"1M%F!.E-D%L:UDIS/9^6AD^%2-66IJIL&D[9+ +M0:MY+V6OZ9AULW[CMS%67[;.L64F,J+8\5!XI]UBU`PF:?[.[YOT76LZW6.* +MG7XSOW5U,OCZQL)CE&9)HD%-DY&0KRV[.(%8HB7VD,TU0?:-.RL72Q.2C"=3 +MD(B10^1GM)PFL&,-4`T2#T5%-3G363)XB'XS<1+1P4=:14-!2\IDW[(4?7I,NS5 +MU#[U[?ET;&HO\GP\[]ED4AZ80I:0J;AY;C>9+70:'6BI,,9&&9"-L]$@/TZH +M5C8Y(FFA[.4@R,BV5@W4*P",N2M5B),2HTX-8S+$_DP"LJ8$<>(9&F$FE88U +M'E4I71UIE:K"S"0J;;ATKDT7.\73+X7=YUZO(ZF[H5EL1"1Z<+(1N$8XXD(D +M@S'!MY*US9R[;;VUK7%\MKZ\^L'7#O<-=^>E-;`O6)^0]+1A&H%B)E;"(CEP +MJ0?)GA`%T20P,B]Z)YPYN;4VFB> +M5ZIK0V3CJMVNY\0X?(88M-CX)E:577PL69:07P1)+0-0&"R*(BBQP=G\+`8,2.L^2[/!"%[LK@*`4PZ\.;?U?=5QV0PA5`51 +MYC"I!D:SZ2EM"F/`UH6!AM/+KEZT7CKKNVI6U=7;[_[%G!A<$"AB"`I)!9*R +MXM+9DT1JM>G'G!M\>Z>=:NNC(#X&@'Z-C9F*LC4RNK5B;!C;EO% +MF+$PDH48)/ESZ*@R\FJ&,8*(B"@Q[U1:8@+#.BF=Z_,7A;:2IOW5/49:G?C1 +MF9&C8P?1L+12V49(-0H1/&:7##%PJZ"F#-S4Q1@+7S(%U%%BBB*V;DLSQ]!I +M@;I9E35+,DI&6E,YUW6GVO?7OO7I.;L7D]+ +MRI/.G=B**Q!MW6YS7.5S72NW;O'GCNG`H713+8,FZM.SCS;;O&LKTQ%W8L(L +MBP4%4#'#=CD!TS*%PK555I2JJ,*&)B;NNN^TZ_`;SO6G#==W2)2-4L46&3"D +M;AMVW1B5%Y*I1->.;X1*-1C,BC;5LK&K%_5'OON?['[;R\^'208'H'<,9$`T +MLJ*5FF4I&"? +MY*HT54D,1]"_'733E3=75S#B^/LQ+7:=0&-.H=!)I(N7F##B'0M)=2TM*33W +MVPJ$%=OB[5S+MA'^1=@Y4:Q&)NSFNJD,>^)$#K,N01S.J@X>7?.,3%[W$)`D +MOK#5,6K@9P@:'OD!A+2SCJ8_+W#SF[Z!)<0-MEW8AR5%CHW:2T%$/*LW-)WI +MCE7=7F=1#N6;P4:BF"HQ%V:A.W0;PD;&]8G4J0@5=)J +M-L\*(Q%X;59N;K=WAN,MRNN6J7-QX9H,GF$/%/`-W6UW[*&*1T6T=%H*HH%( +M!=C5R`7OU_79HQ^\L`/]9_2)'C?H]_^G>[T0W@WCP,S,=7X;3#A8<*3Y$782W%XK0X;E;;S05]R +M.E@NM`);7TH9+!HSO^5H'S>/>N`FXVM4F+IZ#H;AV,RC)KGHD@/>-PQ`XLUV5BL.]Q#>N09J&H;=S2YT6?0(PTPY-;(;MN]4,V7=%,V;DFY(<3#TE9R8_6ZIK&/*)NT +ME'H<-8FPKB?;%H$:RZA)+K'D,&/133U",U +M+1UT'#0./#:;L05/6T*4NUMF#;RZNG]-M+JQ4B!JS;A>PADSP6NJ +MNB-Y9IK5MVR9$L#Y*9>'7UHR=9[R'S:?IZ5#XZ'190'[]@:I[).1#G='.J-! +MTW\)?C"5(`>L/3>7Z7+"'F-M[<'Q^/_.BP7NV:6)O)A"#HR+5@(O)+S$*L4O +MWV;V#>:8G$3W8XMJM.C48TMFMG&D1@H+(1AZ!XRL;1GKTHB#A8MG6B:MV"0^ +M`'OS&1I'$XHT.@%:&T(;26R3&O3O]"V)MSFY'2J(;1`62TI(*%)%E,1,-*DB +MQJC(FHS_-^W5_/Y'";3TQ1`]W=$DW$TUPGC._F.)F1*LQ\5^S<@#H'C.,0D[ +M9?X0R +M1(0?:QB'_G]8AH:4'*JI%B=,P*#T"KJ?.4,))J5?T?Z>1T%Z>3D]TQOZ[9ZO +M?.H^6WH-Q?L"YA6+5CY2'9;T5[`G'F+;DCPMQ+4[B+X,3+NI,('MH;GCK[V0 +M=_OM99'/-S1:K@++)]2J?\CTA^;/5=EMSC_Z6;]2+#B:$!$(_,59<2JJ1&JD +M0ZXT2-UJ:RQELA]#K,/5C:-:6K,I,',-:)K,QQ.A@9HS$:CABP>:0:=)II"+-9$.1*#B$BH>+ +M,ZEY+P$[V-15JBGL:4&I",M=U8HU90'B#3V+"4R;OD"(#S3GKG-Z9GN$A06R +M+X54?:LI\=-]^-C=NE, +MXN["I!PZSB5#&/%E:JE#TC;A_@VS'0F"_8F)3#A)2+9PCM6K'?M3X(KM+/1G +MBJD6G,\L"]W",KKD?I*W.+0"1&N<9;]=.W7)1ZUILH+)Z(9M0SN6[4T9E27P +M"0NS"CC4M,)CJ_'?/:;&PO)+;_K<_Q.8YY\-ENXV$1@V$,="G>DFPP$QTULU +M99QBKVDT.&I$88>F;7ZU5G(E0RL#Q96#P_#8>G#@LB86G7F),N9 +M+FS&^.JQAU[0-L7[(XS49,L;5:@SI"!PS3>U(,@K%3N5!].[[Z0[$,:LK+%W +MVEHOMZ:*FO)2.Q75T3*Z,L%24(IU]*S0S1R[&S!F.$DZ-1U:?&PYN#U$V.0& +M-LQUKOCER[:3;6CB;6YOR9FKHD"8X;<`<0Y#0ER^B&$#RLY9#=QPN"P!(!!A0$,8VP\79A-,7#EEA(=I5A@$(DT+,AC0T +MU4NK2Z$04T+NP5KFW8AI/3,02<\,C1)U%M,+P47N@UB2?!YI-DY@)F6,B\Z97O3!P995C#!Y*3!&6#O26"]S+"X\ +M90[$@@3I3DOH"'"AX&\>.KVOXJ^&RK/PALN0!R82\.P1P@UF +M4PK07:8D0YRP#AX;.7IY;3L#20=ECAZ`Z@/AQDV#BST4<*'IWN."H#+.+*"@ +M-E/B'97&"I,T7P=*X-AV!HGF*D=5)(Z!I*+W=/`B/2*+^3/=VT9NX:3EH+99#;9A[HF2P+ +M,ECV41"T,1@B@](3DB#:"?*KI08(]=,&PR8<+C<1!CC2'#KMNY#WNB? +M7_?2V8Q?@PD.\._A>+\,+\::P[',3=5OMGXX$@Z69<46PK +M*:^O'%#S>_.DT@R&8J#GI\Z53D\Z@,8(I@VN1-S3>:1HNUFRS6#$$$'T\RVA`]Y&^-IIV4;'DJQ] +M$,[0<];9B,PW#B3R9P$)CMD9C!EP;YW$/1:<>6F()&Y4103<5IKFKTC>1`\U +M_L!SU95TXWF0%AO(;,'5YU3/+A +MN/,+%R7Z`?N[-O&FH<6)+U8H4'(.^NS6@@?L'>$X>BU^DTOS<[,W\$W +M=2Q@.9Q]+"]%T4R:FK0!O4G!#M%@X\$-Q!48P3&=&\9M88Q6BB\$'""F\I3" +M#6):;.!'W5QB+F[1S+%PY%Q4)F.CK%X5Q-7UEIR'(1DW#V2B@YFQ/ZZ_X1]. +MW(\>+6'JX"L#';MC>O;7`?GM.SV&!Z:`(#D`=NOR15AH$8]L('?M:FXUP-YQWT>MY@#%^FH"T,8C2D::&UQBFQW>>H.Q!Q +MWY((C]ZU.)R]/2^UAEA/CPU_HX80=ESPR5U8'2LU'.&P[1;)^HH>FY&'CZ1^ +MCFG5F7)OY=JA++K@AAW;R5.3;9-6"PI.L;OM[5==@;#1F-0X`^WKD!JH`9L; +M<$&!Q:VK,=D*^OV.HZ6VDF;<2(X?#\WWK$R[UN`(X2D47=T[(PX2,8/ +MQHBC1%8*M#[8VI3*UO+E'G>:]=>GFRKH,`!$3&B2I,3-+KMZ\\KUZ\13WPRR +M4'J]U<'>WQWQ?2.W85/P\]G7@2'S(.WBZJ"=-V7>_=^Q?UO^E#ZSU +M/6_L\CZO!-2/Q)KH]NM!A'^,!O[3;6>)]9OOI"JN.H@.6,,87YC]\O#888@*Q +M>0>E$1%$^/Q5[/Z%$L\R0^/Y(^KUI@P?8=PVRL[OJE:QV1L8TZJ6F#Q0M99* +M;)BP:PN"M0.#B:J`:,-7#^,3)$,/?$=(=^ +M(`R1"2B.I/9=(OZ?*O]$4R@X$C#2OU8$N1`%&+[>)^Z'GO[J7S$#HHC[*'-= +M=0=]/[IA`_KAU'U-X_A=U\/`^K7N9S.YZ2W^<#Z,NB!^6<''GIL8$CDBXX'/ +MXZ+Y_ZB+_\ET+IZ;O;6//;M0?HB'_OO*>4@\U$\I,D7Y4$[3O=?\VYY:+R,' +MVG54F_Q#TGG:#KXGIX)]3V_RK+M/XTF.('4:]9Y"6AK"`'CROVJ@30E,<0.4 +M('M7C=.#Z)UIL_$8!^>\U(!H07V&[T;7Y_*:=R=Y#P(IZ>?JC461H%*HH.;]!4WHCG2$QIZ*??G>P3YD/2']$. +MWUE'+_^:`T(!\>'-0\"!GSF(G_F"_$ET\;'JX;6+[2;UO7JK!H0^U/%9XAW,3U?P?BT'P>\H'PA%>@GJ(_?@_-C^C?Z_GKZ?%P/53NH=/$V +M2&[S[,!'?[N_[BGK-2/O!_MMX3#_-7#;5E73?X0D,D';0?4L*3X,"KJ'C8)I +M_QH[B!U4Z.'Z8/Q\VCHIH]]0["'\H'JX]/N?+=)P?H\!YF?J@ZG-T??CP4.` +M^M3T\V;T\R#Q&HA_E@A=\/M=*X@2)=*/\YQT<8F]+2;6+F1?4SB;$RJM::$/ +M.(C]'E7XJ8^@HE?,U(4U&8;5D%@LJ6Y6"N1VO/.-Z;E&CWD-QO:?VZ%X= +M7T@W49_!SA2:-[PUITG[IFRP<>*.C>L"9O3HOF/6'%'-I+?? +M@AE%-(,G3N-6N"/9)`JRRK/4D6"`0(F2^(//SBQ5[@NE44BZ,QL^,BYD>^0) +M!Y4@-?1M\03)HI4=V)]O3X#MQ4Q43<,X-8:3_;0CGWA/?UXK9>U\AFP1[P,J +MGRDZB=(5P#-+%WO3RUA>,3')#C!X=CEW,EBJPCVB#==1SSC6ZPRY#ET1M,SX +MR(,O#1`-5J)LC"*-08Q]4C:U)S8M9G/1ZKF&\;C".4[; +MWP\NB>-UC>EU)W<@)*1I,D-*69FCEUO3F^=>_+N='/.\B]^N>+I@U&^9790A +ML/7>O&73:I5\.T[I,5S=Z=L:)$?'MU$P-*QAGI>>!1E5%5!X)2!3%2BIH[NX +MC=EZ6=N[NE>=<+N\>:@A@VQA(E'PR$LSC%F)D;(W'JQ@V0L*I%(R-QXZ-T@1 +MA)!IEF5$9IS9FU;SD'+LUQI1K9#.9S`(+`X@M/<5N:437%&QF+:*8#&FA*.$ +M@;Y@V)QK08YA$0]Y#N7#EB&02$)$@DVE($$4[&-,!)E_?X!KPYC):8\]>0B^ +MX?R//;9N,="(NK-60UOW8.`S)X,4U,^A.1EY$-VE20Y>(:< +M>>@GX9\OY]&A`754E"`FZ@_P/FO0^\_-Q"'X+-4G]E@%(H$)`N/!6B7$D?]L +M)8TGB.80$K2@[?;?6QQD1J.^,YBH75\B+Y>(>EB^%G!0<1"^/PK!28^@K6W' +MWK%1+Z.JRF?S&>8+RJ&]*2T%*8,932>LV&&22!@1"2$(PIFRMM#`U/#H9+WD +M%WW"5X>*,I@`*$6`;6!\MG4FAOJX:KX5'\-JZ/-\UPK*1'&\ZM@1HR$T)';G +MV#E`!.6:!115Y=9I3+9E$4(PYUV->SL)`[B&F7]6B'4W@UNF![=V91*P3=U6 +M8$V:W<7NK-T`+YN5T7<,V]?MU4T>]DUKNO!V_]%SF(S@M9B';+`.8C#!Y^Y" +M_]"M6`&7$N2(1A,@[&[B`\,IE$A[90P13RRI\,X2;K(ZW)9(/#6 +MG]F3ZU;`VVA13HT*,&(WF5/&"/J0,,5S=FW,=Z8#MKRZ1KE7.'.K#!^\W&-E +M,I()BH6-["H6HBE.X,E40]@P*@@NS!N#DV4"BD_;_<)W8$Z%]$"A9%?>$\\+ +M*1,\%J.IV7Q8*D)]72@FL-)JBK5R(\,X6`W$%"O=B2X[/7R^>GD$V0*C?TRI +MTQW]9=W81):Z"GB4;3EJNP2ID\@,+L$#P[:BUL_9&3W'8@0._3^P\-?Q\-A_XX'O]_P:UK +M@;//`][&`/>6O2RCR-,.QSQ18;RH@YX/$P+.0C:D2B,8%WW%F&`J13.%:\5G;#6T$@7AW(?2L'#27^6()9-=7OD"2%4!Y +M4H1IK;AB,Q(:C3C>F>BY:HH,%F`G$)MZ:1 +M*HTDRO3C6FR]\7:M-1#U1"O;L0$\B;<0G!B&6R+PQ;C3/3-,`MR +M3RUP]"KX:S6?";!9G2,UWF\->'][A$#*Q=T6)8&Q<%(V!:JHE7*0`E+/L_Q8& +MDWM>B*5L40E2&J6R7GGK"K8\'H*UM/Y.`R[X'[?#W];ZJ&E^-5 +MG58!W+>^M!F9FJCD.F&!?;UG>/4J_M?>L[=Q=TYI]$':M.S_J/AG`QAKTT^9_/LGU-;5W>90O^)HD]_&\:A8DM0U5-%I`C:I;!PGS&C0F`;)(8D +MVS)!$9[-@KR^,^AGI0`[T,7+!"H!`@,$6`A(P7NV&B=!'Q$:4ZKG2K$154H4 +MRXAALIJ+.]]U]'<)R.K(*!N;D.XU)@2DYDJ,);"D%B\[),9W84A_TL,F3%4" +M2`0@*5$>LB)F>3T=')Q#VY(23-`OB?A-(+Q@J;4P@QMG)G''XAD`D4K-N4M0HRP>QU5"AX2'U@@KV$1`P@/E(B!1I!3E59FZM:J!]C+K +M1P4#4L[6U:V&C#WLV+U)1\_QQXD[L[:S>=C'88=H0M.*N?YTO3F*BS_DZC4[YND-K#B88GUN"@BBGLVD +M,TA2#UZGX=E+YFN)Y?2F7K//^=OS:5[/T)+G.,)$#F0FA1*#J6+14X-L4Y=F +M5D,$(R.=?+;6HSW/T0>1IMQLDAF2+L,4#,+2N'&S%@^/60HJB, +M%BO-G$8&46?Z_QMV\FW<:32MXVJEM'12E2S!9:I;.7)IN$I3SJZ05=W;0\>, +M(4E%+0U0W=/(E21E[;*B_2+[&H1Y]'QM?96S"":F$%MO%*M":Z>@GA`DL?Q]!ICGCP9K%LD/,X^?A93`*G$5L;L_;S +M"&G+H1:D?C(!'Y%`F;*?D&!9!%V08A'%T[FC01;B409C*@55%7%@I+-I,#D> +MDL;"<#Y`['V6G@]]^C=>+VYY4WE#QSG9T',%0BD%,0Z67'7KY8TH`E'R$"$D +M]NV&QZ^QAWN.J$G$Q*)`1Y4][Q;%@@B]N%(R@3B%212$Y_)U*FA13]]6E]Z" +M2LJE,/9^Z^WOZ],G]A0YKFI3"9(!G$4J!K8A/T\WKAOMW83K?%E$<%\:R+X?5K_MS]'^A]S>)G +M_&TOV?7?Q.@1CW#\+AV-.C\.Z)7S0A$[?UK"$:4+%5@4,@:`&+#C, +MGEZ(8M?^@L/[,AAF]($,X@?DB]#V_$V#;_;I?$P/:PVALHPQ/$/S8J_L`Y)F +M]:QJ,B>!6%P4AWMD!A!/BUC`!W[_I,1X=R;`ZF0,"SWB_ZJCGLJJ"P<<\.FL=*RN]S!<5\,0ZK(B`#Z"C3 +MU3RI^U1_]?PL$L?ZZ32ZY5.<%BHQ062A^:+[5+M)3W4'UH7!CF*/-QKTG9Y+ +MG=L6.P5X%E^E:[Z&6;%/?QK)V&\!_?(6O+,D(698YKSO4YF*]Z7"W< +M5=`62&^2@#\U4)?`:(B)^7W/_;G,&?$*Q^Q_VW:HJ,&*LQ/UMOGC(C;)HTYC +MQBGPNUHV78^[YD1T^CX:Q9.)RS^>D\?VM>9[U!_,?TV>)YO]SAQ3?])H`7NJRQ`[CNRHQB_R[^LR]789>' +MQSE$VI]0EJ:@\2INQ@L^60\A_M/COGLWT%@[ +MGAJ.>A[#KZ$['Q=/91-!(.C"0=7%D;`E0J;[4I6`@$]&U.JQ=>.S+=?6KM;/ +M^&#G/=SK!BCC^$HLY\CTNIJ@GM;OU-QDR+^RI.>N75Z%HA-N;$)-28@KB#R(TPF +M*E0)((0C<+=>?[&;06@Y*T;\B#HYJ^^B&3C.2-\N$R9A2F:I\5D`6`'O_BSF +M(MZ)[\\OG3N4S\F:?7:`9'KF8B#8$S&*+(A%(`89<4*&T*0D0NI^5D>5"')0 +M':15@'OZE11!CVB&@#CB944Y[[-!:"`7110ZG[GS?#_*SPS2QUE9JLA;Y?4[ +M)(BS[*Q/[B=JWBUX\JF^*E$,ZJ"THFI8HVQ+N,JQ9=\[&[,$.'L_^5377%Y! +M8`]=$_M>Y9SKPWWF@2+?B1(G$$U*7-SX4%KDFSZCB#GNNY/9Z1K?,36:6F[6FO,UOD,5D.$![54QFJI8"]![RHOU(#`]E)N7`/TA&X=T20(.B&3"+% +M-6V824PT9DADEN&!:0ME&,H*9_C/#TN)&WER$;$N:F\-=H])8-D_@!`N/T?P +MH#JM](?S>&_X/I,FQ)?0!8,.0ZH(!V46#YGX#U620CSQQ>+PVMD&]FTW'$'" +MQ4C@\BK>Y^+J8-VQM#>2#9(Y!F-M6^FX.F<,AD:9(8PKX6%D$WVLTZ^#7.O+ +M623:6CD)-4W>-O&+X^U+(\C*X]W69A!NS:1GCV6L>S-;9;)W$.K&S&(K(,C1 +M(W&=9-@U(;["P'D!B1>215.E_8^CW-K\+!D4 +M;WL9*ML(F\89K(6#T],N;9,CO"RW(:+2FZNRU!1W8YMF`F2IZ!RWMG?<;`'>K +MKI"5+IP03"%#*Q1G.Y1H;6RJMG"6H>8>UC3_@('Z#$`**(,OI,B8O0QQ#Z-A +MH+(GKV@&)L8'_P_0H]8]Y_$?G/L?@^KU+DH3M"P#$$,08;DZP:6G+S^DO +M.1]G8=QY/'2_(F_FB!$"#+93OGN@W4(3$!6\02T#6<:4^TV>.^&LU+>;Z_[Z +M>K"[?3QA\5.GLH(`*1\IQ,AEUA9Q_#YC6>3P]VBY;R)TS/+W\3[2MA>0PD2&O5IO:KRY#3G=PK0U1ZDIFT +M\:7#Z&_;I=*>BK8SQFT_6?YKM\F;7.<\*@)I\H*I'NBF9ZMW(/)JB)1<]N?I +MVV]_\[[LY.LS?8F3J/VX4>_,]TAZ+<(.M:-T-$]S]HZO\`@"6833]!)$'6H# +MW"CFMX\AW[Q^R9,3P&+?4"LVOU9#SOHP=&X8K?OK]#Z_2DX#U<#G.;[+S+_!> +M)2I_'1KP'ZU72]!69WJX!U7@V;'M]$H,NHG1^M>K("^$/XF=W-T +M.U?Y_HEY[Q&\)M&3=GB&%GRI8;,E02"5(#!<\X\-5_>S>QN +MMXJC`Y;E0Z.@X3O$&2"%"00004)0@A1:\$%='TC%H6S':_&ZV+>^#OU3DL+5 +M8)L9T$T2DEDF_YD^=Q/A'-+;.&9S(C'O(TA/.'6MK]VF20&Y*NXR??MQE]=* +M%^NCXDFV'G?/UW9L[J=%8:+_G&R)*/^C=V"1?.*P(")O@A$+ZV0+W'NX?MK3 +M9<-IB\)D6.D21T=JH?+W6F4_V_;Z)US%[?TOK;K,/SKJLH^;'TYR2?;1`BK< +M>M=Z;=TT#&;EOWHP0-G<>N]7S:/@Q#T\%#UL0Z7SWL^J-L9_]%TU^EH@(`,O +MM_#0&>[RRF>_*PE,# +MJ#F6WOTR&H&:CB4EUKF:;/OU&SP;R!OVZ#H_*;'QH,V:LP?^C/P?SQ5]\EX? +M41S\*C^3+D5XKBC"E^50&"GP59R*+N,GTB[&'31,J(R(DDBCND<^9D"G%?95 +MQ@#:(-)1B'P40OR\"&-(R1(;2!M*C"--CD05MH)U!!DRA`JHP,//70G[E%1R +M:@S-"DI`S#!^]OY"BCSC=V2Y-NDF[O//T7U=Z`X=')(X*$D(0(,>B@&S2$V" +M3:#8V+8T:L;:>N,6MRUBUS1;7-K^HP[KX/$_X^KO3M6Y]5K%\5-0+0NFE1F6&X(+(K:(N_3MOR9"?EQ +M73%/D4MFU[]BP;_DH:-$N!]3#U=4;RK,0/Y)'Q?W0XY2BG;DZ0V3SL@[X]:KQ5O2W- +M6Z8U4:YMFO3Y-XG +MG>U^5\N9>I))Z''7RXU%9[W"*L(R-#)#C3TN@#4:C5XWU:>=VN;>VHL#9L?UV.^^7K=K#################$$"8@A`!T^7%L4RWK/-' +MS[;<>QZO>Q+SSI$@;0NO>_)`])]50^6CL^#AJ]U\][00SY$%."0!V +M^Z;WL$<>>2_/;D&&\=QJ=S>W!^R(>OCAR&H$BM;:VN;9:M5AS@FV,RYM,S^25*L0HD,7(9*@V;,),@1('T_0[ +M_Z$?5V_K.Z'<`@_C0S1SLHRH5K40T5 +M`ID.A282'GMF[+SVW(\7RM_29_RMN,9:>+SUJZ'\:'T'HRM>H^NQKJR2NU;Z +M^'0C.DY60YWQ_K,Z_#W#CW?^B4$#W.`$B1[5W@4#]_\0@/:(7Q[`*V+?G#2% +MJ>%(IU%&`V`C$0W$8+ZR'TJ&JFCD!RA4FS)[XIN1M>5JUFBYM:^J5`J9E3U$ +MBK]F`3I0_6\&J\EX58^Q^!MN46J%30IOO&K%)$M2E;3M;-J6!1%(2"2D=K)K +MY-20PO*\XL8X&Y*5>B@KQ+(,6/9V%XKF/NFQ=*VZZ:+YW(',:(%#$SQJ;6 +M[J6YP*>%+7:@+Z6M)B_/IS$`,E8E^D`%7C?]=6>_;K#=$8+-B2;NRFYAQF6G +M0SU39HTP5*TSTRZD)K?!J_3<6;#LQ[^7@\0,$0X3*WFZ#4UMWEW45U_&[>65 +M_.[DV9I-_KC.KB!8@@&TG)?SQ-_120*-G),=TF[X>A$*'5]87$1:W.S;5M7X +MJ=H7[I[Y+`"([%-ET+)D*3-=N&%@ZG#1Z&;9OET1<@G!Z'-#33S*C&C?LM(E +MMWO`TP>P`3,UDSXXF.T_G9IKFCA.5V-K*SK)HS6H[Q@=Z)SQA^RR8,9AD>CM +ML3J]U:GRWP^5OE"X^3=2<+Y3NYGW,6_`WY__C.F)^-\>[QRWM\&XGV9I^AY+ +MB<85C?'ME19>[TELYQB&&KDO287I2B,AQ>8E)(BCKB;-I$TZ>!:&"V#15)4$ +M]V\R0YCSU&8JD5)9.E6Q-M08E8,.9I2P[KK[A<#_'AK-A?9L*[2A).N='JZK?&L';P"AAK +M^(IJ!M/7-Y[:9MN@YMG-F2Z+])F)N\[VRF50!A@!3(.2[??WO$16/DF-2L+8 +MYJ!![)*#NE?!N,IP0K*KU!![RN6YP+X!!I +M!9Y=[!\\L.V5&[A@&)9:-,[!V9W`N,XG@:%V#Z036?CE4^BYPUW<-):X5DYT0_@.Q''6FO+,,NCQS7$>6G50&+EF5K.1S=^N/,ANKZ +MW#FVS9C!`&*CM&CZ5'<7SWSVAHA.(V^NWYSIL8FI&&XCR?%S$7(DV5C7;%=-R:A3TUWQU6]5(ZBS>_V]?K_1S\.Q](7=O;Z/,^? +ML^Z+X0W2/HKC??GV?BBO[`^:]T^Z']^M(//90-8&ZB:#]_;W(50\V)%[6^C@V#=_;Y>']8BLU0Z-/=@B%[GD0]&4SH83GZ7VP^6R_1 +M'[A^%=U]!S]B5F/ZOZGZ[GM\NW>S.?3,( +ME\FV>E^!%PRC,%[$EC;DCG&*'3SLXSA/6]J]* +M9_O3CZC>I9H@H@B4UMUCW]^V=EP- +M!(SN<5PW9['T>L7P.@?D_O(JH=EC7@57Q^ +M_''OJC\"\+MA@2!^W>5`?V,`GY&3ASA/YZQ1S00IM`V@W=$T9A$=AVL>CVG/ +MEU:XX':V=?3[=J%[``HS7&RJW$0]])^#U<%)O,4]]N]4%^DA[@+[OM_36OPNIK;>!PXX>]SSA;PB!F$E3Q0#`0I"GI3>D#LI$B+]O[('Q[T(H$D +MBC;;&(&D#8C*)Q+=-7B3?K+QYW2NNYR[2HQERNG=)=$'=WZE;5O.MO7SV_&* +MVU&$`^;:5D6212;&J"A(T5PG'#A*R:T@::$I.L2_2-`&VVNZ!,4#:P@Q.0?JYQDG(]WQZMT +MTHK42HMVEC$9VD2F\#VF'AUQ?8-`<6$L0+RM*TU2129I*?!:23U/RE$+2/N* +MT8*2TDT@(Z`*``^1GMTWG#K7HS/N-L7GF[Q0H76>9E552WTJV3LLZ$-,+G?O +MA:3N,#_M[U0+9Z+*@\E\-A-[6A1R/.]I#/*HLRXSAV]33CT`T0V)JP]HP/#3 +MVXAGYC@6>X3G9P<-I+N@\-DV-\E0U9,T+V4&K/,L#1G0\C?AM0.1ID4FW\JH +M&Q@>E]#?4U\_=#V[YUU#$?;+OV/JZ%%\NN&?@^Y"`/H7"]]S#N]>>/(YV*?B +M77BZ69K^S=+\+W9$V.Y59-(E5"D46<-E%M-,WU4R0I%`WBY&,\=8C&Y'*`J% +MID1(*+)AH$N'+=6P1CP7DO#,#%55A2=8/FI%&0@,6N+#SWFM6J,79$1Z9#J1.R;QND:?8YW(WS\<_0GN\NV(YFRU5VU5IU[I1.)I +M$0=U4D%72JF=-5@/$>'-?[ST7$'[[N;\>Z[P(KY519R%T'$2BGI7B"PR;JA! +M,(:+RR&.TK[)K<'4L3>*%D%D3D>HAX)DV79KT3X5GY?,=O3/O)W$511C.ZTB +MO*A0]ZL-AZ[;IEW5TB,?<7:Y$UZNMP^YVJ;+>4WJBR0B<%LN!X$NX-,,:8^> +M'5ZT#;:[.V6@;S![_)%V6-IM&R7BKH$(Y9#3%,@>JS&8X"BX9UZHMBQ5PDEL +M(U1)=XLA3KQMZ\Z-7A-H"BKFOM7W"KTU/?;VVYO;TN7ZPKTJ],:T6V-9V(1# +MQ=R7K?/KV/9]KLQ?*^!Y2E/B.(^4/\U[[>YFJBTU`9%'-I`7`GC.BMH[[$(; +ML*+J^W3T=W0.M1))VZI1@=%!T=;F/=I#KLZVSG3BZ_SWG.(. +M$'AT-!QV37W:J\388PT,_/T,%Q\CAA+MUD/[( +MEOA8*B@[L1`5^I_2C0B!8,/$==XS>>++BD!/(1%*?+]4M5B38S&B4N8@#`;$ +MD42@V$2-3='QVR(JA,M!Z&"`(YD5`$P521EAO[&(D(+S"78% +M>8($E+6IJFLK*1!`+%K`8J8:V=1GMM2M1/GBQJ!3(0"RM;*T;+M)E(9."ED[ +M(48XU#T$L.:;NZ155,D(U^D'EDBG,IT$(7>Q1:]83!)I!:%519/SEM,%O$!, +M*,FC>!3><(B%`S(LZ;#7!\"6%D0O'$4)%0!$O\+$0#0MP0$W(;[@@^FIZZ3J +M;U#.`5D(61(CL35D/@V*U]GEYDBP@$U(N&$B$4<>*^C/!0(IR.4.>"T,>A0@ +MP[P1/2;!ML>IR]\NSJXR[W\/>?=ZX'RRP;?Y8#\<=A)L.`!_2\O>T"FFUM\H +M`)GX;O#S.76B')65;.SMZO.1*"J8C;Z!^#0MDZWY[/''7FV1Z=:N[)> +M(9RX:_,WH\(>$U"49[BQF?IT#<$6!\/*T="K@WP';PH]"_IIZV7FTG/CX"2` +M3,$I4WN0K9K1]YR3E:"FF4+4V(>.,3!R,6=_+*37'D,G);N=.K=6SL;39 +M`\(?-(;;G@^$MD->R%(ZB7-IL=+=/>KRA;8"98HE.-U$5ZJCJH/@"D%W4V3:;6PPXG=,]QX&KNV90T4[,%^5]GV4"&Z]&9+V8^9\- +M`]_"O1-9(;]%9REA!7M\!7Z;<=4.Q\?6`=?+WKR1QQ\GC[N8POH\30\Y56UK +MSSP3V4*5W,I45[?:ZW=./FY#RV-]MU:@]GPO->:;W[_(]SW->KI[$IE=?N=& +M&Z.O59IKUN6[3+*L3.B:L$TD!:BOLRU$8N]XO/SIL?1"-@`0;LK<1]E:OJ@G +M(^FDSY0$[N&U-OC]KZ<38K&>G4RUA"S&'SV"K*X8/EBKO]0E`?F@?8/YY^#' +MZ'C0;OP..,(-R#'=69\`W2>B&9I@%W.-&1FYPX'AOF1\OD0M0(DUD9E3@!6J +MEJ'+(D5Q8()-[99,<;4"I?F3B7&B:%%HGMI_-E$_.K>?I-1AINWQ^5,>#K1# +M_+[0OE:9#%D<-VP/=QZO]PUG26O=@7`SXOEJKBCJ7:.RD;W3:"J7@7X]8?F;]Q:PP&)(_*!5S?0?DV=DC9]( +M,;?PR!!;[O/-1!'?"A@KZ-15H&,UUD<;;8P-%]:)HNUZ^+-1F!NO6\;F,Y +M889('+HU*N[F7MD]B.#>93?UH_D1L9"^"E^+<9:+9@F.@FOSFJ/18'66EQ$% +MQVVYL;,V9O?\K(!P]/]7+$#U?[06< +MLQ.3[UXG$6F(AGO=_/V[Z&[0&''S'W?0+3S@8';OQOX/!+4[ADGB6XB&[&Q@ +M5+J(:!U"R8*3B[Y+ZUR68UL3I]N&EY6Z=SO3 +M@7>US;92BGM:,K)&+84$2L2-/$FWH9/R"AL`CA.6&-.PRVM[4,S,E)85EE3V +MX;5YN%55`6:Q3!VRRPZ)940TJR=(T73%.[,6HNT0X +M9[1=NQ#@F(FBRB!LN6$,;G'C6-S?:15DX6K=QA'V(Y-'=&>2H^DCYD6UH#Z& +M"UHZ8J2Q((9#P)0\^DSW[X[LBZ(210203,YB]KL&$AR&21CX(02'WNE`\?0K +M#'/NR*^7MH:@WP.Q/!)%G]SB9S'^&B(7P*-^?.=/GVXSH8>SJTQE(@K`S4#O +M8[%['BX=G6SH).L]PG/EPB1[NR&+$L@)..J;NE!NBG9[E*UW7BUAC#3 +M.IIR.R/;Y_A=:Y%J!PR-:V0R8IB_I#GC+9PZ5W]_\X-#MO8QK$Z$\1>13EVB +MVU1NOP_4,1P-XPGT-.O+":9B0 +M;L^.H&\1`UC$;9ZF]@QI7K39C`IPC\"*9'7W?25WC4U?M[ACFP-6Z:]R,YY/;=Y%_7 +M(H00>\)A>D0M+KV7I"G^44=>G3CM\I#2;LUK9_'C<$@=7HZ+V[=4)]8OBXY] +M[5XH=%OKEKD':"AB56X!L_TKIP\@-U!B(0')`46NFHQQ-\A&P:E..$!Z-#$L'\ +M^H)!9F:E)MO[/HL2K6DR?@8*'4LQ-@&^&=9UJP"UUO>31=";MDBD4(H(K,TJ: +MU*B@PVH<'?XW:D\!(]\\+K\WA=NITG6RO(P#\WR-]=-IZ>!ZG&.>CI[-[#XH +MQC.*7(X^L.AY[M+?:]?!2)!N8Q`=X2#WPT;FX57'[GD7%'./9T2=%X1O"1#`Z+%,%9F36 +MPS$M`.61(9+"$-M;=[+/;KMA&49,F"A''?_&9R7X5I-@3L>$_43Q.VJ*)+EK +MQ(:!"VUEOZ_?^43^#\9'F]R-]=V0Z2\J@_="7L@>NS8+^,ID%17>FB\-IMM! +M&L$0&@ZQ#"[X#0D#D@?9D.'=B!ETUZ8<8?+R6$\<7,&3;#LU@Q@V;(AFA)I? +MB&;+:8%V8YKX,\\`Z^O]SC=C[>W/SMTXW:WIHI!*\(`%DQ3*-* +M@*!W*<*@SZ<9E-60"5:C\CZTN=67I<-?4AN#&OPKP,]R%+YK,[=7-#2#5`+" +MA+G2"D2PQ<`H!L4PM]6%[8NP1)))4-SNUK##M.U/0,Q&)BJQF7J//TQ.N=:N +M[@[,#Z1Y^WO\M6].R=@NO1V@87;O*PVM3"NTX5.S#)7P-SN%\3/O0R4S>Y_; +M6#A<,TJX?F[>^W7MZO:>$/-N!@<;+AOASX\O3"FZS1;%NMN5O@8F0)"\ZZN\#3U)>$CY2M`*_5^+N!NI^6%`]66F<@IZ:+=$D'U7 +M$K5^S$[+]+(-&?RUQ2_QUU(-KK/V4,N$_"M-(*=U:"95@.)Y;U,X&3/CR(9[ +M&Z]5PSPR3+"1#+160X08F0S!D#N[U]^&X3TAC"(Q4GF$B55M&P!*U[E)ME7( +MP:RJQ?#E$&"TA%C`AU#^LPY)?V5RPFKL]C@7BDK#8IJ\H8D<$`5(9@L\5>L' +MAX+>J1G`1`-*^#;*\:O>U#9)#F7''Z_+ZZKYM=B1I$M*64W8^#1A,1\)`4:9 +M@T%I*<]\(/6MYP.\BAD@@Z5EDH%+Q#\1`+`%PS%@Q0^S'4U,@-EF>_FA6X1OM5A\N:SK'4T.*S7QO](*!!T-T$MEJR%GJ<-N-O'U:C%Y9>E +M.&M5K`KN&!AL'UTH-O0DDZY0OI;+!*$KNK1<0W"5K&Q!-&US=Q7Z->1+D#/N +MS8>_*@^]MIMP%'Z\_R$X'L;?&MW[Z?45;T7=D2(/&'8EAI6!(#FW;V"N;P/1 +MK"0^QRVL):,8J=TS+U_5%N8Q@\?FI'N3E#A;(1OL$-P`X#!(8A<3!O:F&EV< +M\2UZ*FWR8_E>;&`R-C\?2\6P]FP#>^MS7!<%-33.:89P))-V6D1S?7:=M,C# +MK@7J<2,=^U/@CQ9-]N:NGK7CE@Q1Y/U]?.,8%LBLK+2P0OPH:\,_:7:\+&&E +MXC%54VP<-QEVRI09-9LX@%^&CJ+ZUMM[B^@QRF/9L^Y2#"!7'S>BQMR'Z%6^ +MCT&@QXW*PR;E/)]Q94_(21ZFS"Y"`[ER(-S8.XK\S+//E7H&Z,G!!LP4&U[C +MLUT[R!YD4XR1$LVVR'&5?F]0\$39(!C$K?YL2^B!C#YA!KTU&-*SFY%KF8)4 +M^7YA1:^/L33DR&T$#GXX,?5[J8^OX+>PQ$`D==^/1ZI"2*Y]1Z@/W,O+$V!L +M;QW-O3.9?MY8%M;UXE/@T)J)6$SQ#?QRNX@207O"7VEAH4=R0MEML,S@\-&,U&7N)P0IEK*T*S0HO-WMP:N$`DI!G!L]&2P +M.YFGF3@SK2NVRE)(..LJCG&U&/&6\<.-QZP^B#CX`5E&8DYXWAA>GOG'4RRBTLN"Y[,G\PJ([3Y-3]DH:U+S`[AA&5 +M@U)EA9C::AQ>`B&X9B293AA(9M4Y98R;-DQKR8#)6*,3!X''MAES$X_%W^6# +M;'B^@PZFX_T/NKW^_SLN&\Y9^K?K[=Y-QE7KT\AL@&_/>/;$RM>"<0R@E:8< +M@%R-Q[-0ZJULD"(DV[_/)WSQ6+#W6^P[E$@]H'S=>1 +MZ5@;+^AXE"$[OXHTP)N;FP4&#*Q`V6HD-#I[&\+;* +M=L9D,LH>U2:"RS5)&2(LS3$8O5_2WH!+6QR%8-Z=\C4?BWQ=^65W':-P.O>I +MA6ICRUMM=M&R+\&F`-($[5J9I<+:=P19]JSLJN1EZ$.0J_&XIQE$4*4;;#,0 +MQ9(KS-W=-+4(]YGVE-CI/TLXFI2[R)!O*'JZH4R;9L%EY:8LG_-*#"Z0DIX+ +M#W7@=O$,`=0@,+LX<\%"4NNZ!/5YKTCTTADB]JRRMU7Z(MZ=Q:1/2\T5XXE@ +MZ&>L]#Y6II0\I$$7:S!NVEKS'=VJ6X/@C%VRYJ<"O,7IRD6#6%7Q,B`3VANG +MG`O8D2"#I,Z[*Y(88@<]B(B3DNJ.>*9R>9#"S$N*YN(; +MA(OE5$7L^(DRZ'.:FY[4.96\!'"3GK(6/K.:1?85]V3\9##)TZ%H(P1BZ6T1N1WIPXDV!AF4UC'K\HW/&Y<# +MV^Z&714R1\4,./C:P)MD +MV`^.$&5Z"][:GZI6[?.WXAA_@8XZ;B58`D"P[3W%*(IK-=/)'-H9T^%M9"FQW3-`CK[G^D3KLL\2W;CJJN;_1R +M^;9ZJ@$LU!P$!1`,S'6@):2U-7,B0_Q[?(=IX_!U:S`AATS=M?9N?2IZ>`SH +MW[*<*"&#N@>_AX9)""R"?M4K+>N,7&CDY(UKGV4$7,&P113MY;^4_&^O-=LK +M%VT!=.O+"LJPN0.Y'7=`E@BOK-3OU9KQW=F22[JS-T6"R7[W!'FA! +MY%&]VHQH77IX2&Z=& +M.\^-T+U?5A>IQ="JRE;O8(^>MO9R3-#\ZU=^]0A1NPBX3\$K=5*8'!9W0:L: +MX=+C><0)+/IG-U8:(NJ(8]D<6?DL];KAU;P?.EZ[45B'U^S)K>6MN%Z_5N?4 +M1-H/JAWGIH\-'CQ&*G>`8Z=7/1K]3#7*>[LPU?%#4H7S3NQ"!Q36T+K,HF[= +M,*XN36(#76,A`J,]<3;75][LHNM0%QJ(G$CN[0^.,W0ZE!MRX-*[:VR@',R6 +M#G4&5J*ETUQ(0D$GE, +MQ,FYI4"V`CS3V-U*4Q$1#-=8,->Y.,EYAVS9W;+L\>8IX#(A*F +MF-8H)0W9KR0\/D7`=[I=5>[ +M!PI+0';-Z@E<$RS23-W6:NHNUQC$LX?DQ +M7H(5RZN>+\UV-ANIT0D35QS,6:*?SR@8%VV.*NCC)LT-C]!6;C5\\W63"LQ1 +MK*IVAR1QXP\UPRK.(D$=AQ0H214L;K(-NHXAG<1(=EL@$[E6-%0+#9M\7C2M +MP.7Z:H5_Q#`^L2P^UP^-VE>W`YZ3GS0Y-%2#Q>&)$*^8.Y0V;`?U9L*E98Y:2#%"WZYVM[/<;0)5TBHA$8+O/#1= +MV?FF'$C%.";W1I&,MBKVJWH0B2X21L2G0\$++)0)HV3%"^89WPAG:L.2-D6]Q%1>GMH +M*+BQ%AP98A&VZ%R-&&2#P%/)9'TPK+<:B)DM?F]/GDE!8&/L#"(*CY@^XM&& +MWF\B=-WHE3&S;N7.GTVL7+8+7&VS/=A!/`5'!NT$]\0].$P8'*1:0AR11YKN +M,"6QNLI$!PN.YB,WAWF:[.)XOF'8"1.6V_ZE7BBS*`^G!!5V7PUD6Q!$*U&Q +M9P&>(W@3,B.\!USL.IC!$0.L!6_#`LC)&=N,/V,8_SU/*FJOX]NW.ZT"SM\G8GACVP&G/FB_@S$*S0=7N]"W,35PE1\FS=Q")-[7NS/(8F7MHCL +M_;&'Q<@=@/RSGG0^5K?($8UZ)^;_3YG\+FWO6/F\_V+-=1=YGWBBKAY_$CA3 +MB?"X:ZU]29+Y9MONRI<>)V"#\T!.[-D.G.$,LWSYZ0\EG3Q[,SF]!VC'43J[ +M?\SS]8FUNP;9Z`]BCC^8Z%!5%$$%&(7Y#,30Z.QQY>N[?G.[X: +MR91Q#^2&U7?$'8%$%XKHIF;`KE;;(+,7HW.NFSZF*SLJM\+<*RX1L924);+8 +M9..39+)BC$#895S%:)"6MLRYX^&^&-L<$^KHAC#:T)D4$G`0VAJ[W6ULNWIS +M7"6:B*:'EJ#,HD4JDB4)#*VE`ZH@@@9[KX>XK.CC,`@6Z/TGX/T?HW>5V[+X +M_H1L3\CU^M#^?*B)^!@?MS+91@8605-07WYX*3:%&E7U>HAO$R*M-;3FRZ0J +MWFARJ#!-HF!^A)?%E2FP4WJ=A##'16NF*9053.HLDMBKZ^M>HTK&F_GZ^*^> +M?5>@]_EQ]7(&^BGPWSKS/:*KE-]6/?/P$B.\>^^^V=+MX<$3UR/HZT++'7]Z +MF/:O4;WRO5)N(UV7Q_2O]+\8/YGY+9'L?BO;O@1[)23*$3]'HXCXXP/:!+)\ +M4[2>S156448AR3""LIO1N79)`4D"9P[DO]],-9C-[S2>,^BP05(G+,*-ZMEM +M%K!FRWK.WWN[PU00_X>FE[%&M].G?GG32C>`I5;(ZQ8B%>T'#)\/C[_7 +MYU>N[COXUWW$NFWSSU#F0\=S=[-C@%R^P;AUE,P<2A>>[9&Y!JFPE>]5J1)P +MD2Y4-<.@])SCJ]Y@7HC$N-QO,$FL!EV@(\N"1(I!\76>RQ8B.;IQ?#Q;'#-< +M$(@=,\"(%)&"%H9P&$98WJ]*,R':E,D0KDD2'*HPXK\@[R]#0K&-S9-DT&B- +MX#5&]:FV1ACFN$L'`;9:[G#+[RW5Z/G'CJ3S",$J +MI=6W@7%W`T6GL.EH17>Q,3X@9&+K`K@886-(IARRGJ8W,T".'8.L.TX=W=-7 +M.>E^`'-^'I/WJZUWR1ID@*H2;.IQ#.)?%+_4#4P0%BE4BH"%4!2I!!`*("BP +MZK?7F5.$JM!)A?TO%=T\_)N@M2IP!`CBE3U=>-0/T"Q+]F"VINI[*0RC8;.UU\ +M>)>Y^6;D.\'ATX=F(XWP;Y%Z-$E8_:<4&Q*H5&%'E,Z`?M.V#@LL$X=W7`/9 +MD,YB7">2W[2H.`R\.U&8IJ*9,6NSO +MZ2_IWJUQ&\D7P])7M-X6IUB`Q2?0?5(9;,.KRA=Q#\,8%TPGS +MG4$1._GWK<[.^,57+_N_2_&,B1WZF9Q=^[AT.&OSQ5?MU!@D.N+:C[&B,EEE +MB=:NUSG'C7,1;>NO5/&$MZF-R3*TV+>6Q*RJ,\WY9_/7H9>EFN&AM(Q/:-XE +MK/WRL16`6^O.L%S1;E;B+->[Z]$!Q=+67G]9^>!?9YCEA[LL;9/@53QQ<(D@ +MZ1OJ\2%6GNUYOX51FJ?$Y+1"R&S=GB1?G,=9&B&RM8.-&%HN"3GQG+8Q?.%# +M25M-FX\),YXNM:JUR+PZR6"-#"+-EKPAQL1P]X3D3NKYOTT\5=7Q@>;V5YLN +M5RY,8V?L<(:\7[Y^@XQ[Z15VB +M+RUXV[!;Q[WR#LBXT5?W-HOOHLPXIF/SSAP[W7T]5P_G..'2$NFC1^(W$>6P]*+\*2/H +M/8LDKTOW[K@JUU#`*GGOV[[V,9Y\G&ID410Z/(:]F:-[O6*KQQ.KW +M[AUW=,(9Z-/=?7Q.QS5QQ>6[=1#*93UX@-F>/&I!^KX-KGSB]P7,CMUOQS&7&'T8=QS=\E&.VE4X&. +MT\X$M=HI`FW&-']SJ\OG>/7'?SG/9\:SU+$[;LG=:=WX![R':3VPT<1>I8*E +MW6=-?F?*I/@7WC,XR+D:RL5,W>!C:M-NJ] +MLAXH(XI[1B6N41HY[NPZZEAML[P^SU=LY-<(ZDWOW^:N\4]8W7>_!WEX7)<" +ME@T,NW2^303"Q>0R==NS89HB9NVY0X,<9P_3/<5E//?.)S%M7X&^QO/G"#OP +MW&7'=]5E1L0F]\AHG`B07<*]/%[UX?NRSEJW7R^;\\7A^%<1"N^NWQN_5+*X&YT0XGUD/T:'CB^9JHSYS5_-IL0!]OO'Q +M^EHM\G&VGY7M%"Y!/S_NP3$FKW[>]]0T1$;MLK<;^F8ASGA0Q#NY9')9ZW:= +MIEC$<^H.4QL9.O8&$[)VO.[:>5V'9K;('-.Q$1>OO[YVW1W=J;(91QO`:P^$ +M^7S]`P!$5D?>&+V]A'I8[OOF6_B@?`@&WZJ#J%W\W6\PN)8L9X&[BY%RS',: +MZ-`\2_!K:(\*U#+4I4[$U+IAXC-KNY^*"I6X[1>##-U16K-6D(C9<6QD]L.O +MGOYA#/H>"UKS^;CFO6X'-MHR[A.M89O$99Z^WF.Q??UH[Z@G)*`@#"`P*L++:T$RD"E`Z#F[9['P.!](.!8XW/.O4 +M>\:<6]0NY8W]?;U'TN!/P[_,8,6*'G[:%/"\MCP%OXHC`.PW6^'M<.KM[=LI +M>N1\N6?V:_T.HBH;`GYKJ;L,33:]'G$$L#5(,KL_XO1HB\Z>_OGQ?,WZ?[-\ +M_E/;;\X8]H6&UJ/Z/RA$+Q-)D%*V +ML&D(0(B"\D17L8@FI$':0.9B`9(`CT2_;29 +MT1/P1$>-.+T\+DN8I2+]6W$(O8P061>!(%W%]F3)XO3[IT0O;?L9#@I*XM +MDA\-A?61&X@]!NM5:##B>E+`X1FMP($H,(IOJE28+NVQG^IF?S!UX=S;UBUK +M+^`[GA_M.XE^._T#_?Q>]VUA!@?;Q[X@^)Y('1P6/84-VYU8.3DQ>[U'J +M'_K[^&E[CSCZ> +MT;.WFT^LI:V[".QP=EC;0N[INN$1./(W59'"1J-&#& +MT,:@PLF.)@[687%J[+Z.R/GR8\=I>_M=_)]UP@3XRAK"^F!K&^EXA/C$'1AQ +MZGXSCORV2(Q2;42V[8@2.A`Q'5W9O9=GTU^!=X[\L*<=N;PM`?$P8SJO^DLMO,L;J=J +MF!09?&Z^(MP+`<"WR!:S!ASIK"1G>PBM(,=B]#!6[K-K/:_00`V8&<"W'^5P +M+`,_E#H#<6HVL2+^U+-_C_9WO[5O>T>SV@AW/>YF/!CT5H+F*,/5EOOZQ>P?77NOB(0.Q*X?++F=6;#\75V\-UUSQD?\W^URP.>SI +MPY:R/*^Q)'6P11@MGNWRYU`!L$Z7B/[CRU\^..()[Q#KQ#92^IK##R5T\W'5 +M(M#5TAY3"(2Q=<),:H31O.Z[1B%UWQAU#;X9M<\F'?C;7S86'W&UK.0\%9/1 +MR;6)Q9NHHY#M>EU-G9.\-F,M>MIMQOT[6>?&D@9*BD4@HL%@BA>LT$:C0KRR +M\.?7K%W@,8-C2Z:V(\JY/G;D--#8:8)UMS)U&9*V8O7DZU<7#!+R<]41C94( +MC*1@LBD6"R45->;GO;LVZ;';^DE6L;T,,CZ=389UX:UAR;6'(!%HU3"%++'. +MG0^[8\=$DHE3W^H[",(TYB@P;=3+(ZR!41 +M&L)6W,L4;9,9W9-2:I&R6=,$W,P90JPL4ABA809LAEL-ED1"_8RAA+ZZWM:S +M!I8MF;QFY&"5_(%:]D3()@O!?#;`BF<>UA'$41BK&KLK2?+%HVRD*(*J&BTD +MOV2ODB""R"P-1@#P#:8"!J8$X49DFTMC)7$QUC!(D +M52JD$&1IH"B4#`?9GQ>Q^CW-FSV?6]=S_L[P].*@Y@3;&H'.7RZ/E85IP"D0 +M4WJY($RI1,*@0XM`3K];W-NLB'96N)7KKEYPQSIL8Q08MW=N75S:[-;;$6UBS$VQK\;*^4B&UY?3K\7D^SD$DVA-@)_FRL$/ +M8BA2VE18VX[;2RUC9&3:`86#R*[/!JK+C^B\73IRX\?`_(W[#L/P#]BT+^<= +M_/:B]R#^IS)NV'//KP&JU:5,&;.#9.EMVF +MK&@X(P^*=0[.NP_>/KQ +M=NBM,W-]-.BF2'1M^U(:CR0QMR^4U+M+XVP%]LW%_C?]W`HYUG+-2W,0-<&R +M&*[$KN@JBZ8VF91:8HUIH9,UZX+7B_4T9.YC?ECQXG5MRL>T9X&*P>ROWY]U +M%=#'ABHCYY@T.]#*[O>4"!_T2(;]#\F,_YS71:F#K,IJ+'N_(P(BF_!;_+)? +MVE"C3&D4"F1/8RM1``&>KZ/D/ZKRM5[FEHVKKSB_=\S82*)$PZN=0I#\F.`) +M?*M4.*=HV^$<7Y/6]#R'CPK%>1E=7NTC%-J_?QVS/.^3Q]3?J_]5VN%BV_,%!,I=A"$# +M!D`*06:4'X-16]SB>,,'U\-?,_[GRO:SS?(N^/\:Z;#A.`X3HJGK;*I55L&5 +MY\]C6.JN>\M``U.H&#NJ(.KE2HE64)!HK\'>?G\F]V/9>M=_>N=Y_"_=[WVR +M_?%[?S_A=IUW2^G[O[/*?*\CS?(%''/!SR +M,"05#FXK"`$DD(V&4A6MJREK6(DQ9*33-OP3H-+6VVB0@Q1,#&QB:5:HM636 +MH@@2MPJHB(E0/H;Z3:Z[;W]'@?*S2\OI]592<1<<*?'O/0;4TL!U/]YO^/)E +M2\!;,OS;]=5"(E^*7+HEJM/F(6]5'MJGQ*>O(SD"W/((@NFF!840(#51\1$' +M%'-H[Q9%71[#IN/N9K:PAQD3;0/#S"$A(Z/L90N9!_UBMHWA!D7X4!/Y9?ML +M*[&%X`8H(1C"(LBJW6(9-U_?];==G_AF:WJ/'^TS>SW?/8FY3&,-@&!F`;U_ +MH0\NF`_FXP%3D.0F$_-CY0Z_XU[/1NXO_?ZY/C]5_F^W;`(H!YN2`H$82`)( +MASD7/VDTB=<6-K8/L^UY3G??R.?Z;Z-%^/WY_@MG6WO-W_RJKP>_N='1U13= +M34)X+OHQ&N\G&_I^/)>#W&_=#^5KZ$L3];2;GHO@_/$=WO^Q_7SZ7<>AU7ISZ&\/1UL#-2O="I:-,#,[JXX'C<]V$=1X7\[;RL]X79V7>/^G +M/O^.[2H\%PF[DHK?B:R_JBO]@NFU"^_FN2]/Y+(]ET +M+)6UY!@]#SGOG=OCPT7N<*L?R7C#>0/=%11NFKW$-8M;Z6-&ELV>E60`-VF]C-`4K#SNLF-@AFL^W\<)?L0,G^#XBOI681 +MT0_[DG-R9695]@QOU#DF:G';%X>Y[?X;&MKM(X?4V_-^.?&+Y,77E00TYZK: +MPV.0Z;QA!-&`(03#FYGUU:>HA!!!)(*02,=NWI,R\X?'P6)OKR1?^=5!YVKSTOVN>V?V1?(ZWFYN?>FQ/S?:G<>!!C +M7HWUX_S-RQG?=[A_PAI;]0Z.5.LVO96'D^#\?!Q492B)F$/G,"M\)448/@]& +M!R6/OC$[$C!E$2@4_D_P8SW/U:GBH+SJIPTCHNCL\UD><6\;S2@H@2*R^MSA +M%A7<^&=U?K3M.FD2;]`/@W^1?1BLK5/Z?:R$8*G-+PV33F@`$]*J7B'LDRH( +MC:.9SO\[]^WS[+L9H``0!/,!N2:)1(E0HA4IA46\\GE8'_W +MC>'^=B]GF^C_XGC;NY9[*1XI!QF6PU9W'R_`?L9\EU7",CZG;WFJ[E=ZDTZ7 +MVEP$$5'`G0K*G0S)/B=W]\?72QS>F=4; +MG\VU?L8H:B9\$R51=*@?I-KFNB,57/259!TZPHU44$V.:R.LLJ$FO^SXMJ_G +MM]9Z[?V7T8'7P5NC/*W/N]U#\'K5NP\?S&^)#\[TY5Z=2:N8S30!L:T[1K(5 +MGTY,\L,,IQA5M&:Z.KM)-6Z@\^OWK$VG^;XO/4MV]5YS#?@]^/2%1S?\$"GF +MMF[F;SX:WA?9]OY"ODWLNV>!2P`8J%+[VZ@S+";*B),^0M`/B1WWWJ&V-C(? +MQP0&"GZH!BGUHGZ(Z<#LXOV(JF$<(O6QM)`?HP%J/510U/8%'>.T*P3MO9UM +MN0T=3W-]0X3\%K.5_Q7ZSX13US[?$\RP#?N\G,&SSF5VK0.,.6(M<=?FX->X +M>2JXC8,``OQ0?=AMJRM32E!7HG`,ZS@7!X5:J*@\"?0(B.DV"HPIF3`".GIJ +M!:7S:Q;/;5T,;1];[.K8Y0./W/@V>=A=)%X?J?@6/I$-G\[0LMA3\1/]:?Z6 +M3'S=!^@_\03W>RN8%:9^X9OA'V;90`)9YHI.('IT!=S1!:-^7R.9:P_T0%M54%"**B,C4D7C# +MJ](VC&>)O5'7N".UL#"1Q1:>HK^F8W6OL&1+3QA7GE4N*GOJ+"QK,AV38BXA +MQ%UX_4U;<]]\<`X@]>]>B&$01Q[N=9)?_:#(W3]G=[PVPJMG5J\20*T[E77)W"\'> +MM=T4GOL]X.D5Z8MYWA?99C_X'+[/IE[R9%!&"A]$!4E%A$5IL1B?X&E"4:K5=/@*F_^MKN#\J[6F@7B- +MQ['=)439VIZ7CK7!)M20'AL*?6WE`=U$][`MXNA-QDH/(:S**MKNA,.(_R?P +MK[WXIG%)(:"2PV0?+.!,#W?H7KQAN?]K4ZJ!_ +M9-!^.I=E^-4156_LE!O\G>F_-^G493AN.^/ +M2]AJ/ODMD#*Z?A>)GN-&V7;A?L8X^1,WWZP[^>G`#\^`I:*(B?Y>:],>GN#M +M(BJ'=9?WL\ORG@98-Q5K1_KH+IC=1?(?M=F7-SJQR=982^;;O&1)!)'$54*. +M,"HL`HB:/5USGNNO_9_KVN[;'LO=>ZK4?US[VK^^6+]-D3H""27;S +MR\5_8<9>C[F&[P#J.]@54MU%6=R7*_55Y/#+,MY*#`8]6@_`EM8LLK\$)!*(A(0;"MM(84';\KO'6-%K77C(/EP2%> +M<\GMG#Q?D9B**5$%ZC:"0?Q%S5DR0`5GPL[[C=:]H_YYX]EC;>XF#*36D1"@ +M05665!K0+ZH83^/N/>Y>G;%LR"\E'-J&(P?V\H8/B^I=TU>JWWOOU1QULOO@:C2ZWN?([;NLE]F@J,`ZD_[N2GTIP*@=P0HO6A_ +M^G<9U."@[_U[1F%Z^XU\OU:2OBY%'>PUFU6AM?TY!E3QWK_GF?ZD1;R?3VVW +M\*3ZG&>C_$V1P)%'*"%UPUA&BW^M@Y6QO;/V\W;>]YNY]3S7Z;Z?%BO^<7Q=]HUNOPW2=_A.3V?R48Z2H8P8 +MV)V[!47H573<5TNQ[K\NOH/7V1D^JD=MTVG9/HC*;?:@QUGBK_PPFI*:\76) +MCB.3]9YGK;=;E\N_0=1T>JS4Z7-CU>OJ1/;AD+`7VOM#1C^(P+UY]S!8)Z&U +M^EG_PZW#W;6-X*&=%/GM]- +MRH;##R6@;L1I:?5]MVN$^1G=<#S,J,39@W9D]P5RN'IT>0R7'73-?GC(9`,A +M0I).+\2Z;C=]WV\':'S+E_]_6305/4O_D)HSZ!GSVO$^CV5GFIFA$8')EDE5)-!/<+&#&LS_D.NW,YWH_B[/POHW.__KEXKZL[ +M=<_9X4'?>\%D/?XJ4M$^9%:@>0JF09)`)*2H-&C8-BO@MS1MDK1;^+;EJC:# +M;\@YLE'W?<;11LE)JBWWJVW+9-HTE^16Y:+18U&VQH@MC\>MN80+?<+:Y1;[ +M3NU!6-43[EVQH36C7[,JY5%16C1:-8,5%%I(VL8HL;;&U&VBH+8U$5@-1C:P +M:+25&HVL!45%HB-)BT6HQ4141:DVP46DT6(F4$:*M&HQJ_L.[6C&J*LFQ1BB +MUBQC:U_/K;FQJ+46T62-8T)DV(BU[[M16-016C$8U&^RN:*B$L&U%15&T;_N +M;?BOY7MJOK?3[;6^#;%DJDQL;%1MC6C5%BL48UL;;&QM4;O.M;Q8MHTE&QL1 +M6WVS7;$!C?_D:47FO@Q_UZD"VZ;`9.$_[`IJL9;?YX%6^.X(%N\)XCD`-._` +M)M&-S$=1G-V[WIL4O([&5N#Y7D9;2MHRJ"(9[1<-1`BF=Q8S"(!E>%W7$>3> +M.(QN5N6L>\;8(`!N("S\/VJQ.YC.QQI8" +M8I\[#,8)1Q)T;5O/[X#Y^+_;VY0`[;?+EV<7VY.6+5";(Q139%FE&264RF*: +M0"11FDTRB408"5(9H2F+-&"T"(`R0$(44HIB"!,!--46FJ!9M9F&YWK?5Y1D +M'R7ZK^CGK>.7`%M&="P!H*;KAKPS56O4_^;]OY]GSFB^EZ1*$P$E@!+#02EY +M/EYYMJ]O\7197THX-TZ)1Y-X7PZI9,_T5`96++&N#U(8+3@53N38E,U%^4/$ +M,NO.;!KL=A6)>G_'_\W@V45'_,@A.L+WBV,+X=WW0+: +M$-/440$(WBB/\($)0EI"'AE'?G(WI1IWUL2.U8.*T+0'&,`.[YC-X4.(#N +M14*[C&;AB@0EQLD)_]"\&_']JLF*.N*0AA%3VO0N?HJO'CF+]1^UY4:4&W7*.R+KY[T_<_BS9_PM[NC"O@S +M';#'9/^*$SZO"P$_G1=+VJ.,YO.M^;O,18Q1]=5))S,#I.K[.V=M,BXRXD>E +MA4]W<5PT*"-TYK'=8[C<4FF3F('OYYN8H^<9,T-CZ"JM/*8=A#&DG%86_$Q\ +M?OX/NGZ%/V'5_Y.&PF$65@L9X%?JWAA^ZR89W4#CU_L)8*?$2B?3F*,Z^D/, +M]+1\:7F)*RHLC:J)%JP4'Y8'(A^XG\]S0^3I*1_9Q7Q4/\;D_P4F2#])^I06 +M&5N%VQRI2]&>^%^O=.Z8FHL?M?1O.EK)WGD;F[8%-+&H\=X*1`I2%)550)2+ +M^6[4_G)DPR:8[J^R0N8^OOC:]4]<\GD53RN/JF#?\DQDDIU\I=29Y&Y\6^(' +MW(![A"!\N.3JL[Y'O."69$1\-RH@H$-.2N2WZ9,#P;>E"\:J*+$AXIQ9RA2I +M$%)CQP0($-W^5G7?](00E``P?G_=[SFUI/:_,;U_OTNDF;>[?U^H\/D^Z^/V +M7QPN,5($ZVM'M!NWEWE]=F4'\WKC\:+^)_S<3%-`?RUVZ8!`$``:GDZ_A?;A=\(IE+H4 +M$!3$Z!]]HR!S.+RG>:WY.%N_;]AK-5MM!=-W6&?-GB]L68HN"P&X*]A_\O;> +M/P#$S]ING!?WJ(?7R+L%?(*F0"9]8L_C>+XO<\-JO'VW[P[);UCN5PSTXL,P +MDF0VS_KPI;W1VZ_[VWN2/[/:%[L5JC3;+UU/ULY?&0#R_29=N4X;>Y,&1"2M +M];;URID)&[V+HNJ]@Y?@AU'!/#DX40O,PHRZC()E+!?W7\/V;%ZVHAJM__ZP +M53E=&:ES4\(?Z20&5:G%;#^=3+W;A^661(*`V'O,D!&ILZ+;8B][#M_GP'=9 +MC=9_L^#757Q3HDLBG(`P#N$,XSQX;R@,'(RA;$7&&U.;K/ZZ:)9RZVY+*C9Z#1";[GGWW_/ +M#WCZM>1?\_'!6]Y?F8"+D^8UU$.YSU(!-,C+`_`.P!'0.:,1VF#!))))!)(M +MPVZ@/5]!O$GF_:U?5]#[/JQPI+RX_WKGI+XNW'U31/"!``8'7.^_J_6MV3T`X(J4&])4 +M3&!LA@B#CZC/@Z!H/-1H3L$HZ=A@)Z5))!&"B(LC"1_7%)!%DH@#41)$6^!Z +M'T?`W7'^^GZ;\.CSV+$'479W,=I_?AHP'1@,@LBJ0@C)4E=6U%L58),5&QBV +M*D$9"1$R8M6SQVNZ`Z!X>00T00F@"8IM&0#0T4T\IZ-%/ +MR)ZGJ;4\4]`T&TDT]`:*>4\DT_1/5-&U/3U-&IZGJ/(]4>49J>38J:>:93)Z +MF1/4QY%#VA3R,H]I1^HAIZGZ4]3RF!J>*'ZI^J#00!`$"::GD$31Y(GJ:8-" +M>0AFIZ:FCTGE&FU&@`-`&F@&@``:`:#3)H&31B&@#0```:#0``!H-`U/0*C$ +M)JF3VJ;R"FU/4-!H-#U'J:`&@`!D`9/4'J:&@TT`-``T!H::`!D`!H#U``#0 +M9``:#0```"4]*4A3U-,F@:``&@&@`T-`]0```/4```T`#0`T&@`&0:'J```` +M```&@```#0`(`T!H`````-````````T````#0```T`````````-````,@``D +M2)D)D1DCRA,CU&:DVF4:#3U&C0#30T>DTT!A'J:``:&C0!H````TT``````` +M`:``````2(IA9+786M6+A+`,6XY.Q"S*;@QTUX5+7*EU:[L7"T_+^Q' +M5,"J->&RER$$"0",A[1.LF]4'NYV'`Q7D!TT$HHMWNK_LX"..7ZJF*,C@TK^ +ML(A,#Y5:P-M7"\(MBF2WU/?P!DB0"23*2BB(@(*@@*#2+2-"E(TJM-`BM`JB +MTJ#0(BJJ*&9F1F%`B+^-G(DXLC%2R8R>0[_OCNYLH9``!>`1$";Q/N($6(6H +MY'UE!9&'\/_"N4,RFQR::PQ?^_K5/[X:9#;7FW'@49^#VZ? +MU_T,M..EJMPG\>O>)'P7/`NLUQ>@-W$T)\1$6O5DK!6?93IV@IPMIR=3I.3N.ELC3)'M\HD. +MFHUM%^9ZA6:2WVQRZ^V@Q=K4B]5I-#ZWJ:&YYH`B*O54\E;;5>U5!F-G=Z-: +MMT\$#NQ-$&/=-HK-14;UZY<:S5#]E4M$-BIX:(*I-8FV-!G&)ZW##J)GZG4) +M!JMG3'M]&='W5Q=DW-3*6N$ZV(G67#Z5BMO757[TS24!#9_S4,OD*60[1RQU +MHD`1KME+B5]C=.L:M^QRK.H_[.6,*0N[SMO+T:S'=`B`XY47ARA+%`W>8+!V +M0NA)0H*+<2U&Y1[5Q:;C;A)7)"D!IQ-0E71>1D&>?](D!MC[DT<`:;+=N@M, +M;,AAHZ$V@B]K.L5^]W<#N>Z@0#^I?CEOY<_1',8%DY6V``AVEYD" +M(D&"(";HDJ[;T5C?,('I;K2!(T?,0$G>HVM0^7HAS)1D*@G=GK3??K\ +M[@Y_&8%_\!!LQTS!$9D1E.\EAUJ1XGU9"QLN[;^(X<9+ABP<90A!C):J8^`H +M!?^D"WK6O?4!@&7CJ"`_,+WZ-PJ4N/-Y0/,^Y]CMU[7_EH&2A0 +M#_-UYN&T\<&9\V?GTY5WAT_$_G-\WSU1/5G52J'+&0[\@*;89D\`P:7TH@-- +M-9LIJ^O9AB@9`3.*?W7-F+CTZ?)-ZOU\3H3B_5E +M/^5D).';76]PO]_UNZ7C>1T9;^$]371WYS%,-O+0Z1PD4&3V='4A2TB0_2V0 +MN5I*59/6&N+Z($:_+F>[W-QR]V;I9\2[H=/)L[DT<)5#W=8#C7RQ[)W]_J6Z +M0L!_$DO%ULX\-J`8B]YR@X?F1&%'+];6>ZM2]?`&]PM=/`MV0:0T9S[:DE*' +M7?YU#KN&Q'#7]#'";*?-T#/TD<4Q/&U:Q\&.@B6!T/<0'QAUC(!9!\6`C@:Y +M,'?K<-_0XRB@L:6]P8LYF;7CIH)>EI7;O+(C4EX8`Z1D`.)\36$U?]2/"S-. +MP324)T%:L*,;0P@R_[5)"1B("4[^A+1\.+SFF0'>@137VA8&*`1&S0TVUM_+G0SX+3@:*^2JX?8.B7(,/YZVLX?RVC-7WD5$ZTF;&R[_ +M:*B'U:5$729V$.FU[K,\1KH.1E>'9N&:CT>PGOV@AME"?FNTO'G$3C$;KEL]=9Y3`"Q$'[T`'J=XWC-^RL,WZ&S;H_D&!!K8R+1*]ME65OF22)2PB3&ILB<+"E]NNY-MP\ +M24*&$"\7$/7PE9.;AKI^SQ)X."F[OW"N*?/8X)EO.S0"1D7`/H.SY0FWTT*\ +MT50*<`&3#<73(O>-1D).'&XT-&O4..(2O.)0ET_',,TK!J386J@@O?65E`V\ +M((P7>D2@`:N"PQ8*K!\YS$V-C(PA8!5&T.&WT,%[;TXG)PVMH#0T<3:1WM:Y +M0@9IH0;-#8_*N+I&;.H(XCG:++*A%M&P>KV-DHZG+\]#?:@QY.9"&8*N)-#` +M/A%`-&_R_!D.(YHR%U42NG$CJFO9I2]O3XDQ>.:RT`A/.U#WBQ=NC<^4:"A= +M2G-]E#,'F)23>W_'2UE_QM!K(S+7S)*4(8%5KV`3L#_W#OI8#AA(0+V&%1@% +M4)2"A5DHTE<<&8BEB9F'*.ER*+S^^!AQL4N8V\;3"5PQ%DMJP,M`IK4!\"T4 +MIMW$;II7,2:8P8-OEK\EP;/<(1R/(1CCD$-3TUK\Z#&#%-&!H<^,4N;AM@E& +M>6Y9CUK:OO9'BM17[BJ'AFE,K98+)-W6[@PG0AGSXS!ZPLSF>45(0\,PAG._ +M1.4J#("JS;!G+:BRGMM4/Q<@)@XF1:9E#!XTQ$BQ$(#"**(">1"C4GF)%-*A +MLE7/ANEOK:H+MLMS-H--E]\;$YJ4.$TC+CJDV/-;A*9K5FXAED$G)XRSF>8: +M^C7=N#0V"5H#8$3`L9O#0#,BJB!*5,&-CF_JL +MMH1QZ#$#*")9?&MN5X#.E,$$;AKDT8V!%+L,65V*+"MDBYZG<\Y%)9]W6S%; +M_BCX7C#@L2038(U!^4A!S32-IH6I6=/J/FXJ*(QE^'_DT9#JT-BWS&P445HR +M25@A&;!::P&9-[[9EIVJ20Q(GBJI3PEJU&VT,+,TFE\J)"3SJY"AH&R]70!@ +M#$BT\_VDXD^'OC".D@PS([;I8]Z2:4!;KLE6:"@V#;?-J]W=LRE;LA4=O'A? +M9A&`P#*8+$'.48U$08TVFB/,U45F`**Q8-$O>+_HZ.&N"EC2+490RM) +M)L$-[PW.>KS1NJ[#2K0#8X4RQ9_W2"C3PVV)F\WPUQL)=R$`.P8FID'+JPGK8DJ&X(9R4X/8*\.`N+,S:>:DE>;;+<8%P&)>K6=,1#L9 +M$.DB_F)J\&)765DKFH1"-4+80B+9(A$EH:HWHU>:!EWMW7$T&2^'N8>S6)C@`4&9PS\92RA`Z$FW6V5BD06 +M1*3"QA;$YCFQIMC181$`Y"(G0F6241!*1.PB4X"Q6--P,S#E-4-@VF37%A5Q +MN7T^%*BS3"1Y]=F+&X_/A*Z,*7PX"G.<60LC%]\7=T/2M>?KQP<4+2!T21IL +M:?&Q#'ULT--@%.+-[N^4@;ZBU#8YTR2`79.3OYE6"H2?!J0TK\#$Z-R!]Z\- +M%%F,ARZH0PUX0I3/C\51[)E40X3.1G+C,N!-V7"(S,X5M^2@6,38AZ1*]??E3)2(+(J6;!W>[)SJTWVI7#0LBR/%F +M$\,BG?=%C::R[4;V]\>;,L9%D-2@J%0L4())#EV106-PW]4W<4Q3;,U*`L1$ +MC(5`CGT655\.JM!M!NI",Y#(RRR(IDLYZX;VTM#M>24T)6*$!%`ZE"$\]PU@ +MA/:`5HXQU=JAI1>4#?(GV>9?EUTIJ:BZ;VK?0@G3`G15\">`Y7(VZ;PCU.@Q +M#SH2RP[5$5E1$6R@0@AV%!,*Y1$#A"!P(W-(WE,CM*D>OC0Z^(X]H5J%`UJN +M:O.!O:NQ'*>N062D)'-@L32(VE9(1,$(&*%3-.9D8"HCD^MO9E]2X`PZH8C@8:9(1F`22B2F#!$"(7J%LPPA@P+`9 +MN9Z&470-8C#(;$`QX-;IH;4]8SEVM+$(=F^PR3S7IW.XE8T!5>0%[9P=&:(( +M,A&O11.FX@4[R#/RJ'&L^A&@Y)C8T&W9%Y3/K]#B +M2[5XH;$"H=H%()HMB<8GDW"C!Z:VH1$1F(B!N)O+.XA--B8-@[%2Q5?3U@G` +M26D$DF5T&@#9,/.UN_QUD5A?PDSR#R>^I5-#DWXB,5\L$F:#9ZS-6ZC;H<#Z +M+AEL@8B#-['3#2(7F3H@8ZAL4UO:SR5B"]11DBPG5X"D31"PF8M\7+:+S2LW +MFL$:[C1;[X2N^:J8<4=2>1@D'^W.`40+$DH(^=8Q$CL`>WV%BBWU88P>M`:C_*Y!@."$AM0TI"04^ +MF@L8";24DE":2(!&Y8A*37M"<[%Z]'LPE`*275>#R4@\L/V*H(503$XJ&2UI +MEQOK22,U_8T"_;C=ZOOM@%7S$7\:<3$)\FH3PKE9*EU1MJ6B1OPJYH1#S,8@/8]YZ;6.'D;&@8+3ABY/F'$:NUAQ!:.P\":9 +M0".Z;A',LM-.LV,U:]D4`#-0!:47=W9DI"$7'.*Y&(+EQNZK8(F+X"."+,V( +M4%4DPMJ5>T[J[L[X\AVK*`A!)(G2NH:K>.)W`0'RB22&-IDO:+-LTIHKJDZ2 +M0T&5>LRN4)(!($:4(QHT4PZ4HE(H@B)0&-U7`M55MPXQM]SZ\']@AO=A+>)S +M)$3('-@&]1:"#!H6D1!1$%H5%1JJ*QF)TS#&'T+,LKN;EM,BZR:;'X64:6E?+"DA8"*-BT +M"J8!E=%**#-]+:H!AF*Z>*"%/C`G/'`MB^C:0KFC114NY1!*]KY0'1L7`,&' +M`PL0!F2'@4"+!E.IE$2`G_WD$:,`,@9F8W>^V=)\@G;<5C(:[D+![.F5TTD5 +M#<+9041F-FJT&U75&FN1TU196A%T\;HY&)T#]XP/CH/,S5;-4<>97/W9P:FU8*Z448<-FZ^DV^U,"X.8.AP<*,06%C6FR +MV`M,M60#E46C"VYLKZ-')9GXTR9S'/\=KL\J^8]O-:LMMXZ^CY+(U +MA\L^9>(B0K9+^^5J52;!_5*'6.95CGY0;J_#/-5MH>F>*)>;-:30++3H3(/G +M^2,OVZS((AP2(&M4,$T[<=BP6:5C*O*XZ(U2HDH&H(,9(0(+(,E$I08Q%J4B +M1A$/*^#-KN2]+;9%Q02['JY[,N9Q#T@^,B"MKI$?#H*J#:$0"3(B_E.-K',^H>.I?7T3LE&= +MAY6T4D'(:8^7=?7_<"!"UYY,N-:5YL.UK';)LA[)K@/D[5>DA39Z*DM/.\M( +MCP/<2[?<@'172;O\%SKD:8B*5RN1YZ=]Z>]J%!]1N:86EL$>L?""B&1Y;??$ +M1#Q8OPJS'!FKK$72:[U$:6%N38M[R6T9L_-\?S]GKCP'*"/(M^Z'HE>*F.:1 +6"B*@22E%*JXT83_Q=R13A0D'@N8^0``` +` +end Index: vendor/bzip2/1.0.7/sample2.ref.gz.uu =================================================================== --- vendor/bzip2/1.0.7/sample2.ref.gz.uu (nonexistent) +++ vendor/bzip2/1.0.7/sample2.ref.gz.uu (revision 349497) @@ -0,0 +1,1934 @@ +begin 644 sample2.ref.gz +M'XL("%<.FT4"`W-A;7!L93(NX1)(!DVDX@UW=4SY717#5W=F4P@""XL2L8T!?44&2#L/(`@"(*, +M+`HJH.S*PR(*@H`R@DL0?%#@/"?-_W?OP4DNZN6W,V7#%A^/@WYLO^.I[&VKYE_);)CWP +M/TNO&+-#H3!F(CPR+E?J7-O2>L^*2MG+57PW#..&0J'-=XK]H1?6&I9>ZY6Y?V:MX?A<^6.EVHW*UZ(91 +M4(CP+PO6U#[:_1*G6'4J7N!'';4/KRO`2&$A*)?<P +M?I@1G"9,V;+#WWK:%H_91JQ]`JP]A&.??G=;9U@I.[G* +MP`V[G','_W3'X(YO/T0_Q?]G8/6SACJZO3"VB_?U.KT;VQZ"%?66W=#U-]XW +M"S8;CSGOAEZ7CTMRHE"14N00'='OO::!:[85TRDY9:_8'V>JYWO^)AC#! +MZ>AV8^NTE]4[NUS?+3M`KC"[BN,5X14N4.,9946-%:3$)C$64V1LOS+5\_'/ +M_).PZE6OMA?^VCV3=F: +MW?&;/M@M-W*`9CP7""GJ"BYN>RB(\H/PV][(+=.\@=*2X.+[9JV!#Q(G@35V +MP0<%,7;9=6!#*UXNMM\]$S8'=QNH-,S6,LT/PPZ'WCK8L6HO'0?,-:B&,,.H +M".N`;1YW_]O'P:K=&&-#NF^'!A'KAO%RB-'C(J=";%9G`#\+J#GA#DTJQ +M/SJMZN62'C%8)8CMEZ[MW`0TCZ.4`WFF//O>)/!HD5%?MUM&VL@%9?@0J`Y_ +MXN'>XM>PDV)`7`SN7[$8VY,[Q$IH#DZTQB-"@[?@)0N`20`E-0]LWOZRO>C9 +M9=5RG/GZ6:-=+V"1N#K'\_$ZEETW*CFU,5\?^`H0K>?[0<)TCP.&S6(J"[UR +M6%&T]7;4!R3C#MH/[N>6>HM!U`^D4_+6NOD$CK@/#C6?`!TDG4XNZJ&_A@F] +M7NX[7%P@H>+V?=U>#D;J'LQ,_1K`!Q,7 +M:-5//#B!;E==;:0@)*Q[%@)9=GM=L,514,[#OPM5/\=KJ8V;M(`EA%K)ZQ;? +MDC`HXA71(\*`U2()*ON9N\MNK@I\>`T>1I0/2K!UD7L:\P4@_Q#/#UA9T-M- +MEP782%[2A%LNQ=9>MY6EW(O"?F#@I6QL+2WBZN'MW5E@9?BC@E.&/Z$LBGK@ +M&/JR-?A1-WSB='I%>-H-Y3UR@/7,.K,3V6L_C``KPDNTQH/[%_&KW*@3^$)> +M+`QD)[(BP;\CW#M]*^')"BTEMAX>R].#OG0?.^T*G">;MP. +MY+)R-X$EE-U\;'_U2@>.`I@EBP:4"#1;8@=!$D3NVM[$]255&1+#X$]20E@/ +MA/+ZX]&,>1)E+#."7J\"TY&']*OQ0(PY5QQ.6`7FK[=+#$IDT^TPTX_M5S\% +M[RR[19CG&CQ@.(S0@UN-2I&3].-%W>5,)%48*JQV=8$4(#'NP8EVJ@M-A(4G +M18OL=F!12([(;:K%/)X*T,@:D`OYJ,]#05&)2C"#:B[JKL%3@GXB6H?)QGPW +M'K?GJX+*Z.+!'TJP\?+R1#`O!U_NECTD>-8%0DE`>3?GY-VI89S9_!TGSYP- +M-HCN`SR71YIVB'[PKA0J"2P:11)I+E)>2:$#8G;FU2048$(LF]P2RXJFHNOD +MA:2&$UJ_BDXHA,D%R)^+?%&":E=W(J?628([L]MS4A_R#7G7AV^1&@OPG`AO +M`@P"ZD]6/`]3CJV3CB\Y/4+$A%(S`'*$PR2.@0RE`-N!_V5)$7H@.(!4UB]W +MB?2D'@$4GXG_@ML'E(G+]V$\E/'%`!;8A^\`IMSG1T6\#N)%`6]46EATX%3B +M3/;77A[6`_13O@/("\D.A1V<$>S]8M?':]4??2Y"'<&IP/F%,.#*#8N/FS5] +MH+;+NO=79P=PM,WC?SSF_#%C0-$_]:,K-D^8<3`HJ[5M#^S<_.]_E;=L=^N+ +MT_TQ#:AYL_8=]L^\$[3TV@ZG7+9EW//1%L3#@JZF,IY05-GX\*O]<#M#MX(\&Q3&,QZ@\^SS0+5`6IZX +MEI8QL'D":*EP=4`7M&Y[>`T\APH[LB9!LJ@$'[J76P::WKO0/3`@%>T+Q_P# +M>$]O$:]A?P0,PWK[FTZ48V("?3$J!T57ZK;+EZR85[/>/AU8?!(4J[C9<(#O +M+D:B%0R(+C6<):G--+A0CD"]?&);T-!`A@FEI1,X`XXJ^0*\3!`:,5\\V:2* +M%YN&\9F_X-5>N>&XQ7`Z,P9J!_S@GZOAJ(Z#NS*K=:"VZ[D/K6X>N`$O+3US +M$MYBT*]O^(U6[;*#UOU?A/6P>IU-Z@T!(M)1U!4Y#SBE.'/12UHG`KIZYR=Y +M5%#QN@!/$6*_J5Y(X"Z!>J]6Y++&%=MK_CF:BL^J??1Q>KT +M<&TAZD/8J+G5\F&'#@SN-O#J:O[;K):!9#4H)*^&Q[$]0.,5/3@!IPR;/?-; +MXA*6/<%@PKJ3!AT(6&O9Z2("S:R?1$HSS,]=ZR#WSLI!RU7?I^5NV`VV7XB1 +M?*0W$AF/$ZVH^M$*6$JNJ64Z*$8W;>-$A[0<1JJ\'$E026RO/[D/[ZPZ)+K1 +M!Q\#W)"421`.M",@,>#_/?)7[EJU?9)K`5-=/DG)!Y*$ +M2GGN2T@>@9"LEIMKXY_^[S84HKZ#IG8TL4QR@\\6-['$M.OPC(82&I%7:C)VCL4M#!A5FD'UH(_)4K9.'JLL9:?< +M56795&#Y#">,/Z`;,IK`$79&TFU>$_NJT_!VR15LDBL@;NZB:@!:5TJA2:0Z +M`X^KD11[B*V7K"(8AE6G"\VZS+8GM-6LW[VCK08P`D!-98T$[)>"*^0POD+M +M`5[FV#[V8?P"3B]/+%)).-J``#<4;4Z@%5)B@7J^>"U<5]3]0.[Z`(2RRX,GO%5<3ISN.%!JT[D8P:$%U*ZIT,>+,4;\CLIF8_\X:P"K^7RWMP+2+T*>"U[G83U-P2 +M9&],B8FRY]QRPK3?9%"PE!-/4LNAB'*-8 +M]+K0$AZT/UR$VD.0H+Z:T'C`P0[[.LXMP9Q#FM/Y.;BU,&%%8G#21:>LS.SNFTGW+/;#C-%(!AER +MLN6AK\T!I9^$-Y\!;E&N7,W#VI`K.88:@@_M^1/FA($?B)'$=L%)LF!,&8/` +MJPZZZSAA&)N")R@#3RB'V4'[DEZ8?+&*:ZK97VTH14"2Q4(V$:0!=EQ#A30_ +M(?"B59T.,C?X_10Y8F/H@K)S_[?@+BX&P5[;==\C^2ZNW+#"[4-]:?>#)JV> +M!B3XY.WX<:]A_.!S[G9!67M_0!QZR-U25"QW+A?;DZY2G+OD@DF1Y$G#<%"G +MJ.VVW0F@5F3VG'D*J6!\;0HNF#1Y.,,DK\@%U(MB@!PS&UM/#WJ50>LG;\$R +M2F&6K;_^)(_N0C=,X/+!0?3V@L*!IN?5[4H,T<52+)FT1&OPB';@6-$7`M\- +M6;%HF3%]^G32([1W3K#]Z'2^0"#EL0VC7U>G(I%"K!=[. +M=I@/[-F)T,71#^OLBP2=*;I1V[;H7*41PK%W?+J@5:5H2_M+URP=H]S8#>@V +MGS7<7G)ZHR$\L.'V0E#,EX>R9!M64>%QE*+@`"<_!XB]"_@3'FJ)";&,'\," +M/#^LD,4)6M$/QLUSB36KBW'_A?6T+(?-HT@";F_U/8[L+^>@[')\@>0]A6^&SDC1I/'4X<@-A#@?\L*UFE\8H^K-+N])\T0!#V1L*9P6P\*)' +MEJ6>8:YN/)C=MP]`F2_\I.@YZ/*]B3E'2D[4NXKD$0,**+CH^@0KETY8'5&U +MR$(-:`PGXI25D`6+!7@*_W,!!K:L,9_LG\^/"&QAA..#L_`/[!%JALN26737 +MLC5N>8WG]H%B\CBJ(Z"(+2R`T;%YY](>[!ZB0,$Y2X#@X=S0L!`\GGFV9,O$ +MA8BA@856$?$)4+A08Z<7Z'@&>L8F=YA>Y2QHM'!\L.L5E,+P_K*,<$1;EE8F +MGC_;),W.M;.&E[;YOC,D3"X<=(4K0@G11:W$54/FJB`2-Y*S*D=6GBLL#(_( +M\;\.6H*LLPS$5`4"EGX%A2WIN*(U2OK7J*N/-@`L# +M](A3ESZ%3ND8VOYA]IN&:6.*^'U`U%)F)XFRIK1M)IU,[.*^3OH8P+`]TW!I +M;JP3H71-\6J$]1H;Z\$Y<]@XXQXQ`^3MQ*EMM4S^-7YUV6,Z5K9\RB&M%6C0 +M07-ECVX1.06$2TP<22;[YB$X`DB':A=8@;7=MTQ=C4Z1)UE5T-Y$=NB1'SWJ +M!)6L!WU1^=!P]V0N?1D=[*3BY;5/$D;[\`$^;R0KKT0;J5Q8>(EIO";CA'&` +MV-[N8$-6[OZIN>@S[`7NCX]\I0I:J^N31V05OI9F,X4M8SE427B.BV\#O5:J +M9=\PO*5$0[,JRA511N>\"J@>/JIC`Y?I.^"%RET'I!O;#XT)T37:B7;`UBU[ +MX)];>HA^@;B!])#1F(?*7`7XMSFET`/E(N]4*/0(%Q>C4)*HU"UZ]Z&#S:AE +M=C!ST&?J?!>F1XL4ODCY^"4!D/D?VV<7B11)M`L5%?Y*@LH3IKVX4C+.D,@H +M@QA)Q1IP05JMU"I3G63%`YWLGL"3R +M#.:9L;-LPWTVG/O6NF^)*\'V&W%_#CP`]V<1B#H<FS&.'Z(A`11U!YLY0 +MC@G@^4YO6$7OH<&%!VMM)*:??I&9+^5,FCL +MM-$@K83#(0]\?M*C"S!DAL^@Q2"#-?PFR?5!V!/?MX_[#+G:@5;R:`KR419) +MDI&?)\;0T][P_68VR0*Y:'@!R_.;!AFDW+F6O,X@Z +M%QW),/EOGHT&9VP'.^DH4L3RMCE94<>GK0>"F:B;Y*IAB-[M8I%51'4[44=] +MG!V0\"W,OT@.^)ZH$Z3>]J`L5HPHGZ%\&??%"'O!Q?^^!SOWWBS!SJ-#0`FD +MEZ*[75*=AQK,>Q1(`',*UM>'IE>7BX:CY+G`QV+KZ`L=.7OAD"'91)QB:E@7 +M=@`FV;,O\B\BAJ(15D19`*R@4"V3:P2-$S!IF@B$HU'F01>Q2 +M`0I:9I%9I38O!,V^HF-K(Y`;@IE:/_J;&%$MRGKLZ=XR=3K=3HSGP^$TU\;]X";8:+@"H#HQ@6_B59.2E("Z+K46W`[S[;,]CFHRVE&^B*!M +M(M4*S&R08R'K#(J*[?&6'%+*1]P!W)O,&8\AG=*W>=@9WR'9*&8&'#,0CBI! +MR12/K4U8_@)>43%6CT\106!Y7SX%UDODPLI0E1T.AIWO%JMY=`Z&>^`5926G +M*%1[7X5"2;F(K6=VEA9_!;V!C_4[X_MZQX;0M\AQ6X4QH#IJN')%]IJ]G77"U//RRMS +MLI2@]<'&B`)$=7H^7_`?[8C&(WIH/'\(N?;>G4!Z55\H,<`HZEU-]",BK1+P +M*F8,!E0%[036IA->IN2T\V'FH-3&&>\1?MIUNLIHLX*-FI-!%4E$!$8#=G+? +MZR30",2C+K.X(*!G-XA8/GOZJUZQTH01<9CQ)N:$RM:&69^_BW)0PC4(DJ#H +M@C23E,+Z-<,?PFQL=WP#I8O?%68C!.[!%5WT>[IX58QTP#VY8]>V(N,0A)N_ +M1-(,[#F*39.+1(2/Z9K%UHL_`G%!8L+$5+*]S_($9OG'[86-C8('D5RP\(A8 +MAA&0#N+,['G,D@MNG@(]36B*!N5B7G-_>`GI%:!`DYN`7$CN6O3ZI]S33I&& +M\@AUXA30?44K2CV,O)%#I$9X^CA@=O`M"("N:70$Q+TK2GCCQP'Y>(GMTUEZ +MA*1P0&%R2J[0MU(QMRN75,K]`KP$?*LO%5_;J`!#0/,_7KJ8`+XU^Z<+M?:G +M8L!!%UM+L?W9WPH%B]$$9+X$^#&QR]FUS)ROF2:T!`,BC,F>]I'@MSIXU,LG +M3;'O3/4)7LDFUAQK$^:\W-$MHSX%)R=V!?$P%*%"5P7\.8BT4Y&=A;21UH,G +MYI`N$8%T#^C!.C-N_J\P?)H(O3PIH$ACJR#17E12N29WI!:?.D,5LE!:R[-3&>?6EZ"` +M0NGCKG7+.;`03.69G-MI!(5R:!(=QU;'5-+;!8*6`D2P/^M^P3=E:Q-"2N,X +MEZ-C8@B`MN[Y#2OC>+#B4H#E^>'?E_AY$),P].,;TN3@8%0!=KE:+LM09FI? +M_GAG6$)?F_)I"A*#S8TO!FH8A%_PU$#+ZP'9A9%*$,.@R4C#1X^(;XOMG^P. +M0_6Q9Q[Y0UZ&VS;^PO2/AOVSAH_;$=C9A6,GSGYEB`.6P)$V +M,H@ISLS95N#%21<&8Z(+(V/GO*?Q!K3%O81)(DK"@4!+EW#>V)[^JC9LM5Z1 +M`T78`\8&E`N<-MB;<%"*,G"0?#4'HN2W_<-+YX&Q!)*K8=G7T./G>W`0)CDI +MS9Z##:$

@]P'M*'-!(*+?<6G^>]M=Z^/(WE0331*F(8 +M*`1[R5NL_-Q)W9O49`CC^81I&05DCBJH(O"A^!8ST((#@GI01,^3'$5;`$US +M:_:=Z^>)IV/[SNM7;FC3/E,@RS'=;47<)S9[]1FH];%AE]GQ[R"2D7J":#0( +MIV*4=&QX%$T5?4CX=S2[ZHX8),@D`I\QX9DTUE;+M#^:=QE_D@?3O3_.+-U+ +MOPZ#KU'86_1$`H14Y^- +MQX7H`+61B%N5/V573ON10F,BX44>)"#,GS;C)I*L1HP#\CAI(-,XIH4\-X,[ +MA&`(3\0D4.7:R/#Q*+5D]GDA/QU]BZS'UE%D-[8>NP"U-?+2\4SI"-@9@,$C +M'=)%/Q8:GVJ-5=PGO!.QO>V07!R0V<3G",`):ZIXE6J%HQ0H/2O$Q.4O%>7Z +MR%!WFDVW"^PJ%QCISW=[MK'8I8:F#=?:O?B?$$G!+ +ML89(:[YRE*$2;0KH:M&?6;TBO=DCH7#SX\1">6_15X001D1ZP+Y4E;,0-UGQ +M&+1HOGJ'(ATT:4&,L4RGP`VB5(3R#9-\<^.20GV6A!PK!.4AMFIW$^$4)8.# +M:7UWHO8!$"D*ZT-QG5["@#/3$K@S:^]=M&\9O6A.&5.!A'W,WG`$#6B]HY.E +M5+_)L:[=6=D-]B-6E7T]119:['4D'!.)1AG^H.GWZ"U2!X9\@E,QMD;XRV%W +M-R$8&N3&^&80[2':L+#[:[QRX)?P&$(>/#3OI&)H:2846]XM2.E*"V$/&M+* +MJ[,8A,0&-$&/K`MLH0&:VVA;)\(/MD?QYK.T$GOGB,@LT$D^^D+0[8>@WS6% +MH'@7U2!%!W4R/(*\TU3T4.T>M,[?>>4&^/UA,P=JN_YT%DJ3:_XENK\P5OY'L$S4E\D0HJPWSXW()["4L +MOL&^1V5F"(>A?%^[5_3=_@J;S-ZN$=9@J:"WHP8\0>>7VH^#:;?&-(+@:BD\O8(R" +MS^@&*:WG"00/'[4+/'NGPRGC0TAB(G70GLHN.XSAT!"KA6[]S)[=RI1STD*^ +MZ(+%:N]35=%#Q,H;N9]\(MV.]VCQ1%S-5$;""J(HP#I"LLB1*YOCPA +M]V//R/YP*>X\(90P]*=``/DH3<^(2+I`Q%_4'44Q$F- +MY-8GXYI<.,*UX#E%`T+!(\69W==A]%%*E6F28(@ZP49MKHUO1&^JB/:!J!!0 +M4"^UG2DHOPOGAH&%+38/OX2931KOI@*_62>.I*S,8^_)+WQ +M!HLV3B>V[N[7047I?"/L'LE[>O()LFZ\/&5S"#/-@0*SK2A+UI&+` +M1C`T`X;"=#Y8/EQA:S-R69$5DV!.3"_"=CA@-6X5R<](73[@N&4D;0_U.1RH +MTDV0Y]C^U<6L&)AZ4CJ9T+A<)(N;Q!"L<8'2^>G=GB=7#Q%,YIRKE78=D?&. +M:&9MJL*5[Q)Z-JLG@JA4>%UH*+$ULTPQ/`S8YKWM7)GRR#D_.)0,1J@@5PV> +MR6$0&X3-4T\((*B.(Z!C6IW"4Q/1+W/3V>`/5]4V<29QP\)$F:*IA6$>/9&(FR-\/J>B^D7"8(%HAX,2E`NJAB1=9/8[MVL +M%L')UM5>.-)SRV'`@("1`2RY.D9/3.XPV5&1L0JD/_:(Q;*IQ.(XW:EAEG9H][8*OYOI%#ERA99'A"9@),)H +MLVO(7G0>(H>`"`UA`TSV]HEH4*&<&9E[HC:7!$R9*`Y8T+9=?2))IJ'Y1#:Q +M2!>G%2GH-0?<22&1.TP>C'-.WGKBBLYG(MA-'1!!G!&Z(3\SS**AM-X3V%FV +M-/A:E<@%`A?/Z:+S%90>B3@/2CO3LY&+P%D1N&JGDWEF6TO^*:&W/"I7B<&*_/$, +M>G-\KQ>A%SA(P[,[P+E^S)9F:^/./0/42+9IZ:MN8ICCH@HK2OO`%,_ +M[16#2_*3C4N0]8!LD`$L=-L_2FE`'$ND!'IVA4O9U=_W_1]]=%/AXN]]CSJ!1BXT`H-.;Y[>.HVG#*.!Y@RGRS@T +M4FO(F]Y+J-><4$WS[AJ4*L6@5R0WW2`Y.ZRC5:[C!$I/\(J#F:Z%E(H8J7(" +MF1\]B"DB*A^D#P@B$:I7!+PD*;@NI:S"#\/`F(KU_MU21Z64(Z]BN-M'`Q:@ +M914(W2!#NKA4O-"NP;BLZPN[!B<_0TZ>,,#??(*,&1DPJPAL*!]]-K:N^CKK +M@]D(\0K??`()=7;-_O7-=$[=3EX*E(LIZ6?0>C.3%Z(?M``PD\E:31`^G[!) +MF92<,N]M$=A.@J<+&IG!R.G+0>M[1\%V2G="!!1J/7CCHJ!`7H'WO7:WC)X* +MPM@D,B7$39`6Y$A=:#'T#=H_W@]W#?:\F*#+OYC'_P`32;H=3.9)D)F"$0KB3J@(ZD+R$02E'M>0VV/N?G<578Y.0["%#DXC1XA]Z +MJ>))'Y9`J:+:]4P?C#\(CR$D`UZ&9*>1A7AK02G:92I5Z&#H`8&5C#5VE=F8 +MS.SSILS,S[L38?XNI2<@J,(H"('$%B@T,CL;L%[!-AL$=JN5ZA5TU#[*/NKF +M&+Q=LX]]O/?BNR^1$.X(,=P#F[$0#SW3*@#M*V"]^%M\C^=CBG-_'9C=WONC +M.@`8AVA8PC*<'9%U$0@5-5#0][^:>P +M-$>Y/Q%.#E0_\W`"!&DB6DD(N"D2.6&[GKZ68GCPOP+E?VJ.'&?&!<-+):ZU +MEKD*5%*<@P2W1D-&M#,S]PO/+%W]<7]QAJKHT_+PO;E@POY0,XGM@;/&D)X#9>B +M86"@K@Z"V=:'+0^VD1!I"%V +MF>%]&UY*J6*,:M:12/1Y7O`+UF>&LA)A+7`M]"A*7!Z6PT6BG(/(>*7\662V +M;F389BHA5"&97188JB3$#6;4SW`X(97R2:Q%")%K#>5!S%?PND=.*:@J!'^] +M?D>63#>R).G"X!ATYN43'/:>7"X:68)@&'`<=9LR_=1BT3V$AF_N<[*-FE+,!0(I&R#O9#6ZZ=<\/M +ML&TG.L6A=,YXPU'WJYQQCT%LI+832!"]AEQEA8(D$AV)-Q>>ZPZB/H4)(:1M +M;/^V4<6;C=HZZ3(QOVUL28C4ZC)E +MT0+R?/1__T\A!";TO4>(ZVEJ9P0<[S_0OO+'<[!?A6A.U[ +M+XZ:FP$B`?-,I:)`,7X3K2,7AKQQN/V+T1`JX\+!/*/YD.86$\]D+#RVSMLS +MO7;!]'C6V4'KFB\2]@+S:]QL`K\"W013,Q3`+]\L)['`8<%N73V7L!_P`KH5 +MH`?*)$>!:U79"XG)CFKV-E46J$,:M85%:_P5C(!+(3,#WZ0KVF/RAJ#2";0+ +MJEKD%5AZRL'D`,!08^NCPU+P>W*_&6D5(OT,+N+D26UUNZ-3$1''O^Y1PD*C +MW3SJ]M0:CGU615ZX<`Q'#=%X'26_>X]J_2%D5M[#/C0T5SGID>I9)*8GEA8` +M.Y+@?NBL4'H5G./5#Z#]#OSOW-7,';M\4G)''+Q>N?W6/DM\D-M./IO0PVH? +M,1QN1Q](Z)QQ$/)IN":W7[^5-,70K'2!(XWM8%G'CZ*^V-#!'AP7RS>R["53 +MGZ/*LJ8:F]5&VBKY59P2A^0T(I7WG@AFG=<@+TI/J676'[@$+NG,"]E;#M:$/>M3>V+[C1>$>)N`3[PU0W;\F=%!4!@Y%L@+B'7@V +M+]ZGLO+$..ASX9I@/ZVA^35HW?IES,_D>D;O/W(2VCAPH*#@P1BB2`-]G81% +M@=L"V]M34#J9SPA'TMK,W?;P,_?#1^A +M+K#HKOE,%YB14@@V@4T#%EDYJ$^K9+.%ZR2UU>RC]V4I!^1U].=%BB/KVBH6 +M[J7C%D9RA;K?A+X`G>-]X6B2+D:C2F>)*81*<6;&+Q\95'_E.E1)C#)`@L[C +MS*S;==69LL:58OI-PBS>$=,SRY0:;#^MH\;6*W]*>7;KU+4\&1=S,>E2EABJ +M88DAF/=V5RF]E"X2*]VC/B^P6>3W4`<%UN2%8W=^_ZVY3LCFY,:[+^FGW.C4 +MN>#7L77M>

.3V8\.%2>B(6'/Z2/ +MNOX$NK%PSO7&1D#>5F#S43>6[3',HZCQI,5+%TZKV_Y6WOZE!J3+Q?NB[!#8 +MR-&/9)[@X;$U_QF=IVXF1HMR6\`X/3@<$S66N&SH*#9";XKMTEQ]P+-KF4?; +MA]L;X9!!6[X[AO].&\)PPN$BZ4Z%C;'<1)%=-WHW@G*8@DWO<0VG@+-7S9<> +M7U4]#4SE$*LEF\'%/?])D2B7M3"X8!+-+X7&@WN"*;R)$_,CCU,=P$"/W/SL +M6D/?1S![(JVU42M.?=QG?][FXT.I:=:Q_KJ`]@P1T,Y\LH#V$0]N/:!-CAFL +M'=OVG,A!X+*-*LM,.LXHGB/<9HA*3E.[V*Q<,3!J)V.ACM@^[?[7T)[!A +M=((89XC@5+#252>B%%W5%4B4)._[T!1@EF>?*/.]AMO72FG0SZ*@+@O,6#9F +MSO&U';3W_A&27F02WLQKT1/'A:6`"A*=A8-V2)K+)*JF0`5UF2JH&U\\42YX +MN/WT4[-('R>LG)Z=OCH;X7];Z+\MXN\M\/?U-7AF2#JYWU+I!`4#3\Z>!OC# +M;'91U4[=[^^XA_@\/O7%KE4'U?8ZY1NK\"]';O\)WZS"WQR$ +M?X'G>5;XEU+['6>(_YZJ"M92!"?.[+=*7A>B+*58<$4LA:[<&H.7V9_Y0?NS +M.Z)`%AKI4;7,,5L/1Q;2(GW(L%-YRY+T@E(9 +M]2Y!M>Q#_D+ZI-B].G=I+7-V&X?W#_D+S0J#$LS(15D4WN2JK@+-W\7V-S\- +M.TXN*8*2<*VK,-+9/DA"CH>%;&51$!#_/;>F*\/1\D5AN,D=71SD\&DZ(P6.4:1W<-R*FV$T!V77$,(2HS=^TND*+R&L",(R4:I[65Q_BG,)3"B=KGRZX:GSE3]@ +MXO$[H`Q*Y7:FIHEK5W,5(XVZCFGQ#MXM0PQ +M`%I#\.S+#5Y!*%L.O)JOZU`VJ1]?C(A#Q?;I,Q'"(@`AL`%+=UJ&G+S/P]H" +M]D4WPWB&*4`#U]UW=2-#N,Z?6S!B-31E1G.8J+OQR^8+NX88K_JI2M&G66VD +M3-G'-Q`K$`QH2"I`QLC$4>HF)K4J+.KRP_PH#!T_UB@TKK3C4(1=&2B1X3!* +MB5[.JIS<81(NII([0UFI]>7=7-%A)RQ<-_+7U0&D= +M*\"4.?[X@H-9J%\^7D@/`7&KDR"X0MDP`D36D]USJY4:/$RQ!ZI43D^0Y2BJ!D;6D-,\>E1KL.=]=B +M51*SIC!Y2?[R/RG]F:MJR*D!J]GFMO^L%:IX@M#H8_O:`X7U`2SFD?TPW<'M +M+3HYI6DZ((D0WRM'S`JYVXK.BU_^8RG-QZQ]NI&+IW.IOM[0K>:#)N.NL+9_ +MX5C;U&96.JM!`UFYFL)WS:4W2?%PHMD1?"&=T4.(C.Z84(>,5N)+V'>X"(EQ+Z@'$`68B>K4L!,QQ6#_ +MW?A`1O-;VK\Y +M'8;;>%\P0*&,P%/!X`.;:[5R$U)]I=_>`D(5I.IJ]#UF=OQIO;[!$`J!-MBZ +MFTLB4Y"4:,V(AW31'#Y]P71Z_X*6;+2@%;\7=O*"&>N'9H^>7X-V/=R1O7KG +M!_+BID09>TRB1AAD^M"TK>>LPM)HH$_?O&$641CXSJ)3GV(MI[7E5Z,GSW6+QZ9==$83`Y(-:/ +MAF_]^.%;'HI[S"Y4U4=J2)BJ6;!1:\ +MMB5I;FY.UOI`O"!9/WUS![MPS&\4M9M8H]A>-BA(VO1AB^M(Z6'F3@$?^E)6 +M*#I82]R,`W(IIL5IK^IP^]H6!)*HT)^A18[`1@@>99;E5UL$YW*2!:.UQIE= +MOHL#CF)ECQB)&Q2`@J?F*4<;S-P^CQ#%7UX78EDET/P^$'TL!.;&=;.)D>9U +M<#81/%L'`0A]T8NP`-#9+B-%'G\KY!?>R]3Y"U:48E+B2O$I8T*@=?D!*CD6 +M_9.P\9X6O:)HA"$A1Y2B9#[)M2BM2SM'U*(T3Q\X\#O[UA7OMNX81>A5&&PXX,B@['6)^FK`EBM*U`LU#003I>+I'96HI;@A +MJICU-M,J$PFW(K=^D:5CFT;G[9X?-TR=1O<*I@^2VHCTR_P7=H%?S.F#Z,2% +M)R1_<;'I"0-`5`A0]6R(QVWY(_W0J1C0(%D"3US`YMJ./\PN*6&-&W),R6$4 +M<&?<#<\XS"=QK$V&T;'2GT`DAX_@!E1^?G4[ND`'VP;NT-7Q]:MFX>\4*XM\+'-%"\=C/977-++PCEQ-;>[Z$ +M"TGS=;A@[3\E,(,P%PC'+F8H*1SNY2-+3DHM-[;?64PI[ILXR)QFLVKG,!!A +M^`,XK[./%G"4'&P)[->R]3E*ZA1[['JT3D&GV!/2_BJF +MI?<9].JIBPD$Y2\BO`]O) +MDFK,_G*DOZ_-X="@BKW+C:BK,[3KQKI-H1,E_U5?=U"4XS)]TJ%RJ7J"[6JL +M6U@9M`N/%"6?>H)S:\T"99*E(X` +M:NA%*TAO%3TJ*E(8HZ+'LT:ID.Z!M@HXF&Y7`:1RW?,FJXDTCYE""98(9-\>YG''KB9:Q`5WM=(5P46,,#*$E7Q5-YS;5#Q-SIN8&5^NY +M,SNZ56]0(6"4(:BB*F%LK?@U%Y11#A`#$T@./-B".M>A5NFTR4J58+^TP=RL +M)D5#39*&!N$GN4AOL6B]4OITK\J!D2II+O5W4-.IZ#^W<*'%3 +ME-EN+?REN&9<5T+VP1`E_G6U9YRV+L16C*V_;J.)2H7O:4L-T46UMTTPM91F +MZ+9*!]@/%@'VAD\68%]YT7\(L*<+LTZ\;&&$E/+:B[);5LWZRTJO$LGE$I7K +M/">JNZ*0L;QZ%62G]?_Q,7/]8ETTBMH(2JT6$]@^61C)\?!A*AM:A.^UVXM* +M<<;63_85A=TIYD#Z#0OGJ-/)PXD]]1[>8+Q-V82;EE*'R"])',CL@6LH+$E1 +M%PQ[D>!>.WMM."V:$ZV50=*A)878OO]+HL4G5UV,A.T4#=5=9?1R-N)8J#RL +M"TGR_^GE/BES4`U1N^.F3*X+/CO=P. +M:;AE$REP7"D:J'2S4)+L*7L0;?+BP+3HIER\%LZ-BC!?L02=ZH!-Q5V5DE>8F?$.)I)6>\/N0'Q%'=WVW8_0L6@EIBOJ9@Y:;BC? +MM4SU:=D=1+ATC5N4][A>!`D.46S-Z"H@0'A=<6:;9].U20CC5U%E"?`'BO#' +M_>_[2T2Z&%]LL^)>\[LAB`V1(E%+72X52`.:#U +MJFMMG`>3YU*A[!GJ=D31'_*8)NPO-1+G5?825CL7V2U\1_$=Y$MB6PX/39(BTK6;]?HL(;<76*V/R;@'-2*&Z +MPW6A5L7$IA1`4^*CL:B6TXN,WXP6'7,TMK-A%Q^YCO0N`07>-Z.M9A_3:GRA +M<\TY7\!(0Z.V9M;/CS1YCN'&@L,I<>5!8LS8BX:+!WAI)UIHIJ%-G"I5PX_S +MBM4R2WY#36Z*RP*Z=B[3,8LALEOHWK-U<^UVW3D"?#1:-@-%]BH>-R*A]P*HD\B=?82 +M/?5H7MCQ,'&C^N9,$NRK@D<'4_"HG5HN>P5R!R&2U/#JIC,3!R=D?VRBG10> +M&>M;=_EAPJL0?GORA',`';B>#!5QE%7D%`QN;3#8$MK5=YVQ4P@5C(&5< +MHB!53J*ZUM*CCZ6304XN!(;G1F=$'65*YAEWQ!'+5)N,V/Y%(D20GAA9@5ZH +M2MBK/E3?>4?6_F`,;)-PVD<5_$ZXA&3O&FKBK2`AR'ION5276@9+HELK>R'B +M7/;J;:-*N+`E65+K21/.1MHS):0LFP(#U^R"?">U8A1T*_ +M6N!?T^'_^%_\8`;^0$4NN1L!Z0Y3\[)!!);F4&4_':X>VZ3A=D:]BKLG6P69U0WDMXKKF=7Z#=#)@+9I#0/]D]:=YY).2>7/RQP8'7U9G15 +M2$[)01?8GX7C#R:'DD:6;E;5WO%U<>;RGPRWMV(-S[%[.532E%(K$!AB'MO& +MK8&B%5M@LADDLL%(P]F_(@LA<]A;!HY"A"N2$U:N7A\-<6R+%9/3IV>3%O3R +MCC_W<"HL;'0ZJ'1+7S4:_68Q,-Q(\IBKZSJ3KNL*M#PWWGU)V4P;/M:MQ-:[ +MWQYNG]]8`GHDJJ*#K>:!K_TM_K+M7AZ2$RSF+[Q)E<'[C$ +MO:9QC%2$F2D?"+]0XLVKN,I;"$RN!@,,=:I2#MQ(!+-+)?K-F)`NHQ;238'E +MT"U5"5BS!S;OHL3P?/2.3:OMD'U@#KZ//5W3A"R>WXAGR$(X]:W\6JX6OX09 +M1V*Z]/RVGRZHAW"$1OBYVX(`&'*!1OA7?QK]=.=S+_0*-(883X2;J&>MB0V/ +M\`5'=2S;OLOQV$3B@N@B32H*Y"&"YD,Y- +MRO>1-].)J,>@+J?I^&9F,:4-RI1B.)FB6Z@0S(<.2-1P*1J)<*V(6-C_"A,Y +M?P@CYY<+59N[[AS[>.!'_QD[3][F30\X(980I7XD.$G.XQ&V`[?>RYLJ9B@8 +M1+)F%/>K=?DATMP0BY9&`&:2V>_\*-V"#=C5MCXF0;+@+HFZ$3*Z@-%']"0/ +M6L^=J20;R$>L_R6@*,!H423Z47^2`N!D)DR;6ZTD9K@B]"HRT>2!0SW9TYVB +MYC"1IY\U*_<*Q4?P,=4_H-^(,70Z1 +MI,+%]E\]S`Y/A9V9K36)5"()[63]2:IWVE;)(1;"=>2'NJ,R3U2[GUJHA9I3BK6%`K18E'W[/6R!M]VUI'[AO^ +MMC']7'KGY(=R\]3G4F'`+^-][VT<(H4P4L);=8S4KK+8CE:S!T$,PAB)3O(B +M?/\EIT(_,+U'Y,8#)L^)6@H@:^!*5`T*JW(!9B5PZ*&;X@]!(C/"Z)8(=U9!(:(>D.R^Y:.5AEA"*(ZS8+*I);) +MEK*NR/JE%F:B/U`ZJI6-C!L_"F5I?*X6+0JURV#11O&W:?I/^L91+&#^66%0 +MK'*F7S[HK:0A4**8'LW9+0G[T2L:$8$N*OZ?>4R6,OCA/J(Z-?D9$%_X)!E. +MQGTQV$PV,1![:#ZFF"OS2I`7[A3<:Q$$X5M^?0 +MM&R".<":P>*3L?V3/ZLZ(^A>DRUAC>*'PA_*H];LMW8:;A>X8]A"A!5*A +M&);ZL*]LR#<2JFBJP9]3YB+CY!Q=`*$F'&3D25LQ(J#9E@ +MRU/L_)N7'5WADV3EAF,6'XO=AO=N_/7J>@D\@W,\Z:R/?7P>Y7=RPT4B61"Y +M]1+7GKFS;-?%O6%$%CJAX:S`%U0A(D +MOK\`%.P1#**Q,QN)[Z:R#+GR2GY6"2SCV[2X.M$IUW;=_+:C)!9].H^N*FK. +M=5\R@= +ML!B:*2(6XSY9Q&+=/SXF8@$FPG`[SV8>9N#N]/K)Z>GCO-J*)'=7"XMW6S5_ +MIX3S1RQBW2K9.C%.3"[--$L:'75@6WM,O+G^J49X9?K9:0.;)XU_Q6BD_/!V +MY#JC8OT2BZ,Q\'@A4+L1(PP9/!SYLVAN=CT[=\B!97V)KN*ST\(DYN%/" +MIF+K%@JUBMQ/GI\WEFZZ&.HR.R9WP!%R600SDT!U;G0J@YFS0*,1HCRT`X"4 +M%U$:&%2?,<=H8)%JQ9'0@:@P#O9.G?"D4<#>\W4%7E&<4]8:3GOYX(;N-I_$ +M:EWSM\R*/P@C(R\T';S]F/PLJQ[A_=%97&R*R:BZZCL,2N2/3T7F&MOO7F.X +MAK*#F>;WV/DA\61(S?!#:M\GR[2B,@TOT]/30P!=1LO))[IN7[U#.K$`P5$( +M_/C"4[`\[&T%/U-?1E0USU')?AXID)?>)KJBF7<'M9;SS`]3JJUN_T4TB\7A +M>C&#`)CPX)JR*/#1U$VZF`G/V&FN/PP;FO()=2-9#1A_*.=%%4D +MT"#'.'Y$Z57+P+A"W5>[#3&SFPZE/CB(*<,P'$X;J\;*@*/#J`G554)6YY`6 +MCVI]'%9+O<*MT[1GJNTDX6%UH@"7`\_D?M[1+1H1>.D,,%G#,[:RUSMEC<$7 +MII8?R%W@^X2%;*R5TQ527[Q"\>+8/K\P>E,<.*GK>I2`@'%3I(O>6%^!`"E# +MB]@(IXI4O%XJITPN,`,O06$8[E2X>??^MS"5@9PG2W2B$MY+#EVN;I*C +M<(QK.'<7I&N.V+_Z6:KF"`D+A8C+LU/+C_E)X*A(=?DV&R"(7Z0N0P[ +MY0)[R#_&63\0.:EU`V8V-\"[(F%Q-XP]3585Q9I]B8P'2.8(')H<":*1:U[' +MWP@O//"\JI*MJM*G\_J(--62,V_-UA&<"@K@:CAH;Q>:[Z!RN-*=ATW.Z1/, +M&T@,@*T9LLR;(49L3AY;K_^)]`BNGS#Q/5G5!)N"($5:?VVMJ_(M(@/""B*% +M118LC^V.F\T(*%KJU!:&G/:H<>5T'$4TLS'*Y$DIOZP09[YZ>0ZL.LH0>F&Z +M;M^-;,$GRPFX1UCU%!)!FC7PTQH\W!4XQ=GJ`-9Z)2\DBG/.=%1U>*](.=,& +M'@*X[9BWVKBN)QJ/1A%?K/R@-;0JVO2M-P'WC^WL8[+/>#XBNQS!Q-VBX4P0 +MH3\X\/(19CF)!KQP1YN`)2AF9<[`8(7C3FON$R8>[K\$,F1KXQX7L3 +MWZ$ZLN#E)?N2;J"I5<8-:Z\MNY2?@I$!1T":R68E#)TXW5(O0;URZ$/9;F'G +MO,!O,E`KH#]N"K4''YA.D0?BGG@2"J$T5*R,X5%;>*GPZOZU1D+IH-5Z02J3 +M.*)OHU0"<3*D-ELR5.!%-[]MUI-JA6-\_<@5"@TD@D^8*J&3CF7%U%]_VI.5 +M4[0,1`T;\VF_6I:USOO9ITOW/YHU/>+F]*'9BRJ'-0M@Q$O^-RAY%9WJBZZ! +M-]XD94,])++Q9,EZD8TC:JMP%41$?[5C(M#44/&E,H9PS_V.Z,8IO6!4"9D7B<(;!F25I +ML4XL%RF:D-3&'>HRTFQ]4I8;-"G,S]Q6YC"(/4GC*V)VE^H/1^K*&V.4T*.S75M9J-GR1 +MV?W>JH^XR9"][R)-@+2Q[4BQ0953EAPE'Q2ESIG-@?'^KO$8[7+73@S"-?>? +M>%F1P$.*D/!SPIO)5NSU^9Q8W67*BRD<%S/*B*^;(K^TO&RNC5\P@;*H:YG" +M'(2OF-UUT;S^Y=NZTJ:3`LI(L%[]4SH@LD@EK@J +M6`?MG1V)]F7E>,YF%7"O^GZ>($%Z'%EU0B&$Q2W!L!\^YIN])_JXGH'VR$E: +MS-Q\TS+#0[[@7J60P1H"C]VJJ31>C\OOTY77#CXJF#IHS?A4E3KS9F/KR\<# +M]\W*]NU<\17T<;ED5#ZQGC9`SRP$I'2&V#W[&`QO"/N).++A4LP]^ +MC-A5$HBB]Q=3FSF@HV123N*K=[/ +M(CB-:^@O?$X8X)+&0I-9UTVC@$'."4N#9;X;9T[O8'!=2+U'`J)@LKO@R*CD +M#?Q"EL*']8)6T%4"ZDIT]*2=DYHPNK,&:,ZZ6M:0M![Z,RHL[2MR"/;"EO0L +M6U=N@$=FM0[4=@\NP0YXSW:90]3@,6K_8%0I^_W1P.U@GK^Z744G'Z8)[ +M^GQ1\@8.ZAA9;PPW1M*AVM8Z2J^2V#5&0+1"CZW]?\T]S;$K+"S,7 +M?OEY));+KG9Y;^+B4/]]%>4\],&U1^PSNY0ZN9Z/'[&\!ILKZ0:%"A;^/RL7 +M^'C_U'JIR[B",/_E,ZY,('_P(G)*A-BDHJ\^XI:81(*_+7#-(B/5A^*&'/;W +ML%+[_3&5RT;#("@DDEX2U.O68+D(Y%E`RC+HB9SZR7OJ"]UZ>1%AONMSA.%# +M]P!;1R#LQ[ZV7';HP!]0+0,M`<)J5Q>;Q>8L@9X/^!7FH<-2C<**P/%5$VCV +M[<"+)E:H"`0?)M;DR\SRC:J*JBIM(;8_.(;33C>-EJ+KF)UQY2G#_3AT"4+B +M_6#4!!%B5.U7*-TN77@0KOK/5G1T:RO&#T2IY$%[Y>V!XKE&7518^2D=6RW` +MD(WMKW0$Y6Q*(DD,'KP6'T8MI.QV.65*_7(4#\*XIMA*F09%'!8GCM)%E:+$ +M\3VC:J5*\FBKC6M^5[1+CL<=]%.S9Q&5D!M%E^M-@F)_R:@E2[C%AG-O-HJI +M;Q>>(2!R`ATCF3+S'LVOT^5-A]O+[AKX"E9]X\0APPWPQ&PCD94*'X_,IU?1 +MTE2U8DO=$19-.30:I6;E((8V]8D%3_WN)N-*13KS!=YEB820QUC;/_U7IQZ7M@G +M7KE^QPG61T8D.L_$`L-T+>\'J"@-Y>(1%X&MECTHH@HV9"7M*HS4F\#HS"%( +M,C1BM]8?OHR>2-&Y<,2>XK6N3H[:+W]^5!WW33P +M((X?6T?'C)Q4AH8HQ*K>CYW&SFGO'TV4KW#[\"V['S1IM18]PAL$C.YFT<=0 +M#45FDX9MERB;@4\`N2DH-.DZ8*[:-/0LQ?8)OU$. +M?M)#^!W"YST2T')4+?.[!@V(KMGNOTW\FVH[`2,_ZQ`;9$<'UP=T\\JG!4)E +M_&O$4CB]B'[&"48ZMQS;F+5%U715> +M.I6C.FA_X3ELM4PZ.38F)8Q1@G8E.@2Q/U,/]]2A,$I2P!K3Z0J8H`B8!:"M +M_UHEN@Q*:(1L,0@WX>_A4LJ%4,T;K%L'>#N,1%_4\S7>3Y:.$>+2[3I:6)SK`,?3D4O.,0`\KT\0HKTED[C-<,^\5=/V:'"P(R&CW +MPRF\LUM87V`9^ZOSH>HZO;(.@*P]2MO1VYPSE%A+?JJU%1%Y +M%#Q`PI`R%[!E#7[!"EJ>/,&"&;H;SG02>2=R'S.'$_5 +M6^;*^6;R$OZ4'?M<7R,HN77*G(9"Q=:#YQDA#T9F;9VP@+?\Z@\&ZLCLWPVJ +MT`Z'$_#9R>7@.6U3U3+'5@P\KM%M513Z:JH#Y!PB\#CC/QD>)[K^/V00EY2) +M,.Z8?PH@4%5FNPCKL1)TP"!N'K3[+%:G8 +M2>J5)*A\`651K8U=E>VD.U)>13:V?GT=.U(JE$_STW5U_;^Y\Q65AT#@(`9L +MR]SH52$\*`9)FDRD#!]1+RS0V9?4$%XNFKB,[$^-+>V:9$+8#&YIQZA`@V4W53<)'&0DVD^`+0G1+>J0!T;* +M$>=T#=J_7I-S2KWA[%K#IMLEO@91^OFD$SLO\]^!DDYYAOM+)#`J.=>09JH> +M`0%4FA^W+&!@"67@1JI1BZ&4&2B85,YW8X%KW?='ZV0-UZ&V6N:/.^"\8-T( +M$\[\\5P5OI..@]!LH*%RH,#\*6!9XHXZGR]2G4`^@>3P\;;A][1#6N.S'IT7*U3JL\O?( +M-4O\5"UT^_E-;'?F4K]3N'K,-L`S\?T.N5/%F +M#2_'S73*&\_=4Q.6:@)_XP\,T[GAQ4BX$JG_;CFO^Y=P;YQ`U*T`P9B0`B3D +M'6=9ZVZ\3]Y%E4!UAR[X(#`H`QN?)E*?E[J:(YM[)2K&PS2+'4GM[U^EH\XP +MTW=6+O.Y9@GN%FH:Z`9\_MW`1_=2!0%%7!INTL[F2/1-61,2;"-)E0:E) +M-ND?Y0;H**EQ#S!7;O>_=9"4WOY92K/?\41LBZSW)L1O1J-/U1G[+>J_!JL: +MM&XY>'AYY\7G[HDL#]M?A8DDR,2@1OO]3\TUWB";\(:$,Y!$A]CP0:MU,VTD +MJ,YHAX`)D@]@,T[%\A-()/T)1Q<25*&3+D(RH2612&-*5:<0(3IERKYV-G8" +ML9Z_0'11EMD,7':M.^#RK:I-.VRD4^:Z,/`H)@ZHO$Q29F+K9U6,MXZCRP'`O +M3]\UA4O7^$:L7'RN0$PR%DZ]:GND)3U5WL=OL,C?.46T:,(+0;.)P!! +M!;OSK3M5E?HW;7QP`-:C@M"VG3NGC@;H16Z7`B# +M?3.="1-4DBD;CW->.!UC%_D +MJ%U!,\5&;J1&T`3:-Q`4[UUA8$,)F:BC^.X:L+;59><4'+[NW!Q28M<0^HAN +M[1=6&MTB1Y@^M7$]YR!!"$R"%_AJ;-DKG5LF6^'KE-86]>&5Z4$X)X81$O(9 +M)UX![W\U@<_=7N"6%*).6$E)S#X!G;+1X9RUQA)350S9!ZEE=L@T0A:BXH)9 +M70RA&)*[V""5T<8S2(S&2U6`1O6JE=2K-NK55?7SF-U4P>`BIG4P(H'VD30K +M6"&.DV[@1:)P;HJ+-3S7/%K^-:$?2"DE57I$EP&U./)Q`O&14#V*N7+Q%ETKNNB;DPU*WA=HI5#:44+/H(&7DA6AO- +MB>#?4@-8I*H(=[]#@D'$ME&?DNYD>EI$C=:_"#)!#=<5]4\;RB8H/;6FQ2/$ +MF8DK4_WE%%<2[0CZT;L\]ILGL7W!L@F%;[=6KX;;0:?<_;`A@Z&)Z6'7&^K` +MJ"JN`Z?:HX7+Y:`Q2,Y>/P2I5U8PC,',@G&K,+@XI;DV_J9S%XMZ5J@@@&ZU +M\>^4DD<]P[$@(+P\&4*,'5HWB+!SHC54ZD'GKI-!#PJ!]?L?;(_8N*!@RGM, +M79G@D(^K6,0,6-13M&Z=B$>D:.!=$Y4MB$-BDA/1K@$9\;N`X0_=)'P645<9 +M(YME*A0B\`B(K3"\$5S1"A-9-*_B^!3G,9-E.#'LYES>H,J9#R+>"1_-YG*Q +M3$>4UWX@YH`Y^6AMV']@R;5H]=H1;\@S:][X&ZDB(C\R>'6&=:(PO8+EH +M+$^QRV>HT3+&\O'DN?85X0BIM[NB*%$Z3&Y.SKA^(RFJ/H9OO[6W"D4(QR*> +M)9J]GUB?7?X`Y5SWS)U +MM>HDJ`.\Y)ZPEITOIH&W;VHH0'$:^JD*7,#`HGBI:DSEDYG&ROE\PU?*FG5HCZ"F\U*?';12*J7>+:$J(&`!K] +MNP^](=,!9\B6CPO!>!?7!ML)YKC';BKY?CZ0$.'[F_Y)0^MKIM1IT0TVC&3X +M@:Z5<$DHYR)ZAG)%6&N<>:"8`[UGG2N:LXJ6-P++'&ZU'[$.U9!/%\3#KN>O +MD.TOQUW>VMP::6BH*&@C_`Z"A3826M,LB[D6-)C,\0<1ZT^W%`=^^>18V3R/ +M`TNVLA4%<441#C8\-@*)S!!)&-[VU\X9ND%<4=U8001>:,:PH0&J"FX^J-5SWY-PJ`OA5H=LHKQW]B(V/[7L.&'UR5-43$QG@ +MO:\]2[!544'4//PT;@7TK]A>_H(DD)0D[#Q"=O:0W7D5<6F$K"YT:1A^<6:7 +MG]0!PN'P][MK+J:\]J@9R>M/4#-U[%CS$9>Y9@8%R'T&(M-A#?10J1_'3YO_ +M^@8Y(04DS%H;L?7ZX012)#R0]J%@J/5>;M5B_>5Z(R$ +M\2H>EAM!8.[FZ#\628;I7^_RV+\%`\+?DO3"8^,T4'BSSEA?4>6:8O;Q-SH2 +M_",C/"#[9/\O".43B#+ZT9.W__S1$2.Q!>VE3-C#,Y\_=T^F2`YJD&L$!XTXVQBUA4VHPV/ +MW:DF=%0MDZGI9G76B]N("I9E5Z*HT4#@V*`,=^K2N%DNG"6;AE1 +MK*J^+8KUZ&\9L5W$?@=HL&\23HH076\4:$*MARM`8OVK2,8Z6/AH6V]KW1Z6 +MSE/=U,/8JMTVU$@12M%"(N4<&H2OU\3:MV!]MP&T;Q4,9G`$#LH4%$X#0CA^ +M,W:OGKI#'S?D+G(56G1,'+B^#WV*4W<("ABT#-G86"6/>4JDQUNE>6V<.?#2 +MP)_"&K/"WYLUATQ@\J2FQ]?*3V%-2&4I3L-_H7XA<==Y9Q$5K +M7G[2P*6I_@Q<5"*VG_JYT;*/)%>?AYIX8+A,G_JY8H&4Z5K0JQ+]"6IL0Z-N +M`\<_\5]O\[?SM%D=V^439%=+NBT]'D=#%8$3(K="P'UNFB[?`;]M+#&Z!$FNDXRIR_BOM`,9*1%@XSB<[4>DE=,^Y:0_R6'';4(>W; +M)^"0:CBPL#.+?\R24SNF4-!P?Q7JH-*XT,]QE8H!.9)S5XKU&%#5U4G6:G/";? +MFS&"?QCB6C2`SLGG-9\*%,50G&'6MBP$@-S.K2U6?>YA6]K>2U?^(/V)`UVJ +M';UQ&XS+0/&SWE!B`:;FIHHR2K"A1"E%*C$*=+7C>R^.?OW;Q#IK]C9'PS2Z +MSZ?#BJVK)Z@U^.$FYN4CM' +M$G_LFT2VF`)F=`7&E?!GO,E4?F;XKG( +MM-L +M8S0"FW2@X9(3W034!3*;CN#"G:(PML,:/.C!92^JW3+[W<;6-:\*)#)UDMPD +M.TDZ*'>2=!,GX.4_^G(?.8A#4?(;QP,%.[86W6HV??($>5+.Z@$8K.A]6NJF +M%#GF*DI`%L_^H<-4?M.A\T-%Z'S")PN=WW7HB-#Y%1_\X[K\ALT/%!_?P,[$ +MS?>M./C\,6,*A;'O/OKH->,^^G##AHL??6QSW_.;OC'FS.<3_&;#YKMFM.+/ +M#YMTV>87+GB,?W[.O.R5&S9$U]ACK&^,V19?5RC4QA:Z]%\:9LS8_.^//@0# +MDDH,(\?&/#_B)GM-.?%*]K]XUWPL1H(#9M7B?&8?7W-QZJ0&!FZP"]VI%6S]Q[7NU_=)O?7Y?U7J +M9S+V&_.R'_*(O)_5]93-K4#GS#QJL=MWSL__OY +M#^KY@ZG21@54\$]1+G*P++N3?,SUS1NQMMS_O;6-D+6T)F&$4Q-L6ETR\H!'6='_O_?S.L4+D-,>_NBCZ")+ +M)G50U,$A9/?DCA::_PH7FYH')NRM8/P-=E(4#\``)0P&[P!UX=U"07%2^'#M +MT6,4NT7F?H6U[2F7$J+IPTG`F6N9V8:YEVG]7%WMSH0+=QK-N5!70X5#*(2- +M8-&)J`0,1<7"XH9#WTZUO:7;B5W-P&*?EJTU_/@BW7^=2`)I`ZF"Z]S#.`P! +M_<*53#N1T!I1`:B&HZB,ZC9;5W_%,&9QI!-K'SXUJ>U8KM8\/`?+2V#=;M(TV@TITP,IP?$6.AKC9HKXF-IW#_P7@<>!UTRZ$L8E5&!Q1?4B'K/%7IX[-G#H]DL-*, +MU;<+=QYI9;8'L1-&"BBRJ!=N,H_ZS(AY'0);V>V+KW`\WMP&(E$RU- +M"PEFPUM/5$4#'5^VT:2@N]$1NOL1@\&8'9`;=GF<+`CEXN#RRD +M]=>%@5F`V3JR56O8W.6%0K*@=OYZ:"&Z[V!&WBRJ:1)ASA@8%)2A,-(_&\)=^,/-R&`,>)GU +MO4O)LA'@2YI*-YD6,.>.0<&:HQ8$RIRWF*,0G``,HSWX#A,S5<0CM(I1-H,+ +MPX,PXP)*R,94/RVO+%WD!A+J6+%\#F>I/`>5?Z.SNLQY=2C632/(Y`$IL]$;PN?CX'\\_+" +MCD8\5T4ZV,SZ)R,L;`H.HY/DX*LUI8J?&2S0B#\2^%$TO!S=DD-F?`:6&[Q$ +MA:_Q!RAK==2??AY;OSQ]R,QX4+P0QK6?IG%I!WCU)O*#[>^$$4,BWCT77;)G +M/XN'.943Y'5'E;.?9=[47)O@O"]"4Z&#Q4Z<; +M%%,8Z=]%S%T]S\S,:%T1R$P]$^$1VSHL0/ +MJLO6ZAL)B8M[->J%I*V>FKJ4]DN'MM4%OJ3\`'[QWFWT2';0^N#RCSD)L?NR +ME6,J8)?P-8`!3#A9;/_S1='IMM[;V'(?>1OQ%Z:/KQ,]SW@$4SDQ`]4#BD%J +MS0"3R?;Z7!=G%XG"A,PG\/Y0EJ>^X2B"^(WVWB]@DY6]/@,(&GCJJ-&[\8B%'A6_MDL@EJ +M,!KE(:U`^Q2MQ=`Z^9P%5W,SOO"?>J,[+K[U9C +MNZ!/_&.S\)0-6F]]GYQE$=7W4&$?=(*J*N&9'6>O".B:Y0-_:@6S[4GM-,K[ +M@C;QNZ.-S1\MNJ6NQ.DH/S%@2X*Y4Y1U/P!1Q;@;*NPEO(D,&1EG!8P/OJN# +M8!!`CR_]F@B;=[A8K`]JITE%=R#DTBFG;&;`#XO0=,M/"@819@S>\I7O.T4$ +MDG5U&_$YLQ4INM"*8-H5A=3#MG/4TDI$*Z.;I$\/^C +MYPXP:OL7XLSG7NFG+D:&NHI<,=.SH`M;E\EF(9OZ,C1(<^1$WA4:/!1LU@9 +M(*Q[5,484K&NLYDHZD+BADK!$NS4#%.V!R*K2#JPJ/#^@=-&:(OB/SC($#=# +M,VH\BP?T.;2H@VCDXVCY/[2]"8`<9;4V#%T]280$%)`=KT0T,S`S,),$)-X0 +M)@E+1NQI!#V.25$3(LLT4UJ9* +MB7(F>M>M8`UF9%`*D.(5;1<&D`C^I0V&]`2Q=WWEB:JJ)9WVI#V[H>%-D66\ +M:\A'82D,*8L +MMW/%&"\,M%"W-'&+D(2RU5MF']JHW%+(H\P%R952+@X0VVYLF,66JS[K6S-M +M7YH&8<46NVG&RD$>S[[W*+I9N^RKU>PA51,\O6>PNM%_O+2HWZ#<8).T;,@P +M[DC+'C3_L-!Y&2PY.$*3CGRACQG?*"G?5P2G'H!CJD^ED\-&!A;`[UEM/Z*>-;A13W>/BSLDFMD#1H+%UAO8\<&Q3X +M,09QI1BCQ*!TDW)38-#2N(5,1G;2Y>+O[,([71'F>MGL>YG[SZ+&CN] +MP^E-O,JM#'/2_B[\0$K[HW[CY^EN&[G;T'F#%&/?O_3?DI2:E"4(8]!M;!6_UT76(A.0.O0H[!SXT*RBE,,)U\RZTD +M#WIK8A[:DO*X;E5^0+GXQ$.J(`_6Q'0#7ZK+J-(ZF""-QA?M,[<<)#:^M1-L +MS#K,Y0$OU(EI"F6L(G/BL"TF*>'N'R7U]T"D,9(@K64#&)P;TN2]_#,Y'YP] +M;=&6BP>9'K0*@";%;(%23D&R?W05*\"_N84$+`-AL4T_S\1,B-B@`RYCSY=B +MEM62W^$'!M^4L72N1=ȴ[%5-\O +M,=6W[5I,]6?E':0C)],.&J]E.M\]]MW,GH3RY,5-A!U9),>OF#_1Q4VN^@6A +MVT57]VXW;MBD3B+_C-SIN]W=<:$M+*G9]=_\M77/4TL]V%+HX@-;]G/.8S.7 +MO()1RZG]Q-U7`-GVTR.U/J65:MM85"O)8M3ROL%AC9S]9W(B(&IQ+ +M<6E=J.SS6O9='2Q5L/:>NW:P1#,6OR?.K>W'FCQMVK,C9N8E]\&TXW/U:DJ3 +M:.4*OH+!:&O4+!0LCJE#.=15CPVP3G`J_,,[$,()_Q7Z;1]ZERN(0M9(FWEQ +M%<QF=F';M$B@/U9R;EJ6OYH9])'^F]@YEQX,&$#G/?R#M13!G +M*>V)2R(+E6G>`ZW$8R;4TVPXB!^>[Z/6P9HO,W2%&E?4P,@>969-1?T>"?CX +MZ+OB(H8;[/&SEI<8U,@%K,V4JR1+M6X#3`/Z6%')MR9]FU?+MHQ9@,3_.;:Y +MQJF<4;PS(^1\X7X2W`*QK3D_OIX!R[Z%#0I; +M-:2+W%C&!JVWT=TRJG8HR^U^+!92;W,CQ".RO[U]N!];PIT5>417KAKH$4?;3 +MN1TO?/,CT>+,2*4HZKW5,EUYVY)>S.P!>RPOJ5@LB6V4S'5EPY`!ZPZKPD.F +MRG?F^_D)EPF/!C)-8!`X<>29J-@40[9!H_O<+R&`I/T%2O]^7U@AO6"60L7& +MEEI_YYFS)T#^C\2N.O@F]I7SN$X!]%J?;:3;A)WZ@U(TDL3MYD`;AMWR.U]YN_ +MG7@'))QUF\E9A[S0M*<[-'WV0)3]X^*)O4$[W$[62<`K6_8&"I-W1.@+>?O6 +M711.#0VZW76=<8?>K=*XT_,N)"8O80V^(1.0M_GC:]DMCY**H&=IR=L3$=RT +M7,6;\:B]K;E2?F>QE(VT@[:.N3#0G.+*'HZU1U)HM-4%M9Q&IDEIKIZ""KE? +ME/R.!1=J_J^I15\E!7%0LY9=<(P*7,(>4C=GP,%NN/>J,Z2,=$J_4M\IFJCL=)MCH&P``1#)CG5.KN@`'Z>?A +M,ANE@[%MI#N;B(2;SW +M'W5SSFBB:9K+'56TO8ZHL-8\]2RZ[?C(&6Y\"F.Q%G$46YC,J<'E;U%W'-4P +M`!!SY,-\U^J*;&8Q*.7`X.!(:<8P)N>60P_>?1/E(2C2NXK>,YCE/LW36>XS +MB6=H:8EXB)B?:-/)_92MJP4<>66MC'8,2F3FE!)!":N*4#CF>X5\V#1:RQ3L +MU:*?+"C>66OY[YF)M.G(>?C#^JUQ9^N)'*;`^QBYR%$`*IQ%S%%ZWF\P](<_ +M#&IP*G.8LU\CYX=3$5.%J&Z66V02S+U>%1_<),4'3=%,IG]4L1034C+N:I0W +MFNFMU2T@&6*;,K3HI"3C`9@`227[^H(/LE/)%/U;5BJ>X>6PO-]J_KHW6>4/ +MO\3R=NDOJ4(IK!-^N8`CK*%J/]$`?E;&PMZ+\LG"?WT!ELZC+\)DS]3W/<-8 +MBH^_:]HXR7G3@43/^2;5[R?:7NX5>J1V8?JGJ<]+/:^"K^I1VS55)]_R]FU+ +M<5X4*8W,(>MY4N"\693!XDZ/6EZ9F2`PEJ/8D:)8OHZ)M"?=^6<,M8545D\1 +M&G?6IGYWVB+M"94BE-&DS!>D,/*D!W8GL0QZ?YRCH@JZ/!9TFD969\B0BE_> +MG`A>3LKNE<3B-R^V8]QKT*-G;U)8`39IA/F3ZORU?.1--VK9_1F20_BR[9=C +MKMZ:IN^MHXN^J2&GG&HPY;B6JV7V]7][VT/]9V\O:5%7W#^@N2&&]Q8I)H4K +M:5WQ8EMV0IA;7(--B@&LNI9*,.C#=VO[-V*J<'N]';9KR'BY!5Z`F\ +M;$SEF\T:]$NI[<9^MD45%OI!Z8WBRBTK[6MO!#G$UMA1C\I>^S"E^9UZT*`R +M7O-8<<+-6XD/2,&A\$.FX)N";^D%ZD,6J4QX(76/-B16`ZD$JA](D`E;$1&9 +MZ.\4E-L7U[L!OL77J<\%7JWD2X)\W7-ITQ*QKE'6<+>&=:H5PA$,L.)>OWB! +MJ;1FQHWG%H4?WCU4`(.#(,C11@J,!`!!^NUOI!^]!"M4#%M)FN&Y!J.PL[,3 +M5YG^LZZW#27@7,DCQO?LM]1VVL%;(B`(^P8K-GP/*Z&1<\[J.E7_/:9>3\Y0Q[ +M7/7V\>P1UXP,>HEX+Q$QHS5(\R8U$8TTZRMS29EQ*=[),T:X%J\-X8P4`7-1 +MH?;P#)L@Q0)1ZU#%HV@'\]#(OIJ`0.3F!'%(MO+3B8E#ILS9SFID+`2\.:1J +M&0VH4Z98M&1<&DU`>3&B[!-'2"1T*R3S#@J1Y08%3*NEI?:0QNCF%@0GN:YX6H_WQ[Z^=Z0`U9^ +MGHB"1O7*2-WEB3`CL)1UHT+/40*![WRZ]/1'Q+[?IMJ6TG^IV-2%8XY&R.QRR+,/;I@M](>3(VFJ%:)U+7\:[ +M%99IRQ:;X4`/=+P!'(,DINMC5<.-)DPUZ5>8BP3,)8\J_,'\(]Q(N!#:,?@E +MLQ5[94\53>2""DU6A&IGVHN"&ABN"P(?AJ]]%WU/-A-+U5G=Z9K/QTM09X]= +M"^J\^+V=<,P*,.9SP6U:MD?>Y('3PYAMUQ&:FD-Q'/A'-W]$?*0G;N"77!4 +M^RDP+1.J>F2P5-#=*R7*V1OXYL;;]UWUFIC`$Q^7M4T<&PV'Q')<9+LG5X># +MP9)4=C5%#"L[QG]Q.=BD!Y2Y2*+L;K=;Q%)!4J)Q:6(CG.RD$BF5]_`#:G;@ +MM+URD,:/#Y=AJU`93B:58=ITMU`:@+VDR^XD:%&SE[W?\%C!I>`?ND@0_`0D +MAHTA+()@(L.V^=7?7%W2JT/#8=F.+7=0R6&0"^.9.VHEI([D2YKP"GB*Z3YO +M].,1-^5E&/0VQ8Y'*!S,@&U83;2)I$*U3^@3Y!YZ_O]HLW[6A&9]DGY(5A4U +M[C]VD@]'`:''X0/0+P4+Z%9T[=$2_.5Y!:4AH=E,/&1D-)MX#.=''_,^KMUH +M<39F"W]T`Y'](#$CM_I;+SF[2!7Z_$-B;X'LM0 +MKVSR&Q,^NQ+[.\'#36=\H=>_"QT?@.T69<9.JU-*/-4H()^H2HFG"VO;TB5^/]W, +MK0N[0)="XV)>^!G"2U.;HH*7%PF[W[; +MTK5HT)[]$<&`8:?PXAAE>VNTV-N6;G6SM.JT[)?D@8,AP7OXNKR*7OD#6I(A +MTLB9LH*[VTW4:5>P,?I?L1UNP8\&VS\VQA(D8$,SH4FU\;) +MB4YU*\H<]KZZQ,BDLBK/SB0;Q_(.O*HH/ZB?*ST]XV@C6JV^22K419N\$ +M6+&M1[M!:!.7Z#PJX90Z];R9R&"2O>>N9*ALY3';EN*N''=.[16KC#9I7*$M)43.-P?G3WMJ4DHY(K0H(IRO;.K5>+0154.2+4UY1M +MUOW/!H?`1M3=F[YZ<70*!1.8U#/TV\7DMQ.F)(5V)350Q>:@-R0'$6;XBS_2 +MO]!(;5FB0E@D[C@`ZHT2;8@=DN*CF@C46HZ"[/0_:$>!\_QK24=!4P:;F9TS +M.VN3_JM_!3/4J)0C+M,99=ZZU>7Z"NS/$@>#MN$ZM)V1QT0&[5%PG'^1:5XP +M:@N!`+,?9;R">!C2P2#\C.@!)/UHX1KS_@$*J4:.R%T +MLDO*XW`R8Q?8H0DO!P4N +M)ID6-GQI0[/%]\$N6AWKO;P?*;(_\`,&1F`9]7!"NB78KI.O?M1B^*1#PNS" +M0U+2.$?S@R;*W75EH/*,*#T,;^_1<(S-SU%EQNIG\%X"VR74CXSIS`F>1M50 +M-U[IQ#/?K"EZ#!6UP_<]V'IHK/$AOH+D)]5SY^M@Q+(2EHA^/:^MH`"N8O;Y +MI/*V54U9R\JEG8PE:3I,9H-?#,8S5]__OUM2O=(^Y4IYKF,];1&10(5C7)O[P]G<4*4MO,I!UEA+FC:*F$NPL6WRC7FL3A +M(IW!/UI[@O'LY'\G!D;8R@N^ZC)ULG0ZUCMOTAMU,,C,.104D2ZX1+V-LL>Y +M+IQ]^+M4]',J[1:+/OU!T^E)J"$04!MN^[ABZA"RE'!]4]D2=LT&=.!LK.UQ +M[IW;3E^_H9:I?6_;TK&-M;?]O6I1U?76V8.F6;F\R=0\2P1_)O]R&00(#YW +M-0RV-^0?I(F(Y9.&2)Q]W#=;QSV[]54&T2^X1*7/G39-@?UAK?I\F(JR`;:' +MQ.V!#]E5KQ#7MYFY.'%CV*<1MQ+%Q=BMPKX[(QB:;04"DC59ZUPBP)OY^0F4 +M44VH"6A,_`.5S$Z>3)=I#!0+Z'BKK03N#C._++0]9PV7"QN=3']!\7OC-7[?:$VHE!X)%L?%YB4Z'$IIVOGB& +MC6N%-]5[^'!]B.NRH@L5YBZ6E"*^(DPQ6A?92YYX9<@M$_`A'Z[9MC39M_IT +M$,:K>Y=I%9`=.#1[=MX:D_M'V>[K75;U7=3UXS'V5:.!N\.Y!D$\]B+%* +MI6=G;"[;;M6M8W]:BOH"E)1;952H32@I-2APSW-1\GL?A32("DC +MN)JM-J@&-VUE;-A;AB#3]7Q1K%\']\."KK#2Q?^N=`VI',R/H%X(G^E_D^,( +M1M7%ETNE.&2'//YP\._K7<=(S&//70IY[#YM?"O04?3,*#G)JA!45TU&0?7)%`E%C`>"WXH\P_WX`N=JDW8=:P_3>>UO$1RF!+DO)8 +M280=B>(16!:^YOQ]*M4.^N[!@R)S"V/FMC:U!=-FB`D(9/?HLNV18^%JGW0D +M<<9*X1`K\URE?AM54L_GS8V3V3[N^'O@;"KG$4YG7(*S?M825[*ZP@262'%W +MVBT;[II6M;C$W*WVK#9#B:M$%3V[>*I"7NK)N(Y9V3??Y[FDR5\\U5K1!".6 +MSX3E9D`%/Q]EWO>\P>H:1`H5$/"GPDS+Y`B1#X]JDQ[5MJ5G>#F-4\1)./MJ +M-TA,I=G.R6FL.>=]:MM2]#733:.S&8M"FE&,M>]?ES%A0JX$K-QNE,2'P3LQ +MS"F)1V8VV\[E7N6E?+X7&OBE3;\/^G/ +ME'L8YI1P\##[.A;5WE`5UPT2P0F[5ZTPD3-#W"3A>C5Y;;O0RU9TI'2UA1C$ +MH[^[V_B_,^DSU3\&/$1.VQY"J<]P.>'KKE`0U"Y>ZG2\LFTI;"OBS15;HCH, +MG?;T-L`LCI]LQ`T4Z+0#JY04C9VUR,[:V\X\;)G:8F7VZ5#FN&Z6C+=6^7#H>F/=2],FU!]O&36>?_?F,O+?> +MSQ&;]+_5%!DM_1[VNE"HXN`K*J]!;2?XW?'S+#<'D]R82B\.!2=<,Z +MC6XHF3^J1WJ&L!S=SY^W::03U"(HN^?4G#>^H=9-E?`V:0/VH;2$0^:-F6Y2 +M--K4*$H\;B;D8G8_+WV2:TYF6VN@4JEVFG[^>&=."P#?C2^JH`7^&!:_C" +ME7>Z&[_JDZ]F-GY5EN;X_/+1B[*GO*TNB3A<[D/OMQ3NFH!'OD*>6GQP;E&B +MWY^\PB+6FG+)I$65<"IYT*L5@V$J(-]53I/V58=C[$8B!8CH\:+LU!$]3^CZ +M7GRBAE:I"N;%@`,'AGN%C1"Y&ORVNJGK!E=$E1B?X8:??^6VI7ZHH8<"NBR4 +MXIR$@"??^C9F-B$GB[[SJ,.!\&I[>'TZ$I_$\`_U&1W[D4-\,GV]'P3#W">\RTZ8;3\Z6!Z01"WWFC +M\@"^,7&3?>%TN$IVW&3+JL>23#C>E?+?/'\BK) +MZG>N4+):?#NAHNN2Q1RGYNISS2=QF?])"YH.<)"#XHB'E;5(6U'UC!1B.9:A +M*K7+YY".'_FH2I05:$(T[H< +M[$,+<=QL5]"V:=/)$^1*2;T63K#CC3-$KIC(.7G"6G;DM$12:BI$$#F/=**BL#FI*"0N`3;@D.9_THEO +M\)BK0NB!98W'TF5FP"(=R:&[@:/T<%36D4("QEUI&/,ZK_[3MJ5]I0H%Z^&C +M_O7X@FB#(X/%?H2OS;_)BO\0B7#FDKL5!3%G[,6JF#'M-N7,(4@S17IC72@! +MH\BZW)(96929?;O*'W(>_ZUTIG5A6RTS>[AN:GG;OJ(=U;PB/5V'_Q=2KJ;L +M56B9]A@&6W!'I<(MR9VHW-OP$CS7QMX$_+O8UJO\G7:##=&;='/D^MZ5UA8& +MB.A;6$F=#"8/HY>"-N-8A#7QLFE7AOA_V$AY+]Y#VVR].O +MP8NR'<;]FP7-Q(<"X4GHF666:2_K3E,M+AKQZ-I7DP +MZ%+KK=R/^&R1GV7GXW!1/6MB6T+$]_OV+0"FTQ<2$T4395NLA610*B8L>06X'[F[S$@VZ@+;0\7.,#2'&8+@?F +MO'`8D5G;(2)UMP4A52?/*6(Y:$>5;YY0&`=1]IQ#R&5N%1I2E<8G4)_)QVZV +M-ZU/YM89UFHBL/;EKRXJ7:8NOW*N6*I#'9N;Q1GVSSR,$3-SGL&F<=V27.+*.LO!:4K>L +M6;(WR:=O`JW`+1;1!ZL4`M'IIDD51@,("I*-TVHE0][BXZ7-!ZN+/IB0<;J! +MVYERMW=UB;=]ZJYYV]]W]<3>=H6+GMW9146]C9ZX.1VIF5/+]@\FDY_#X5BR +MP=%*,\#I4P4R=5A7OM1T@FF?JVWKVAMW7FWRK$FH(IGJUMI)%CF?_0'7;U3A +M]9!K1>=-W(QC9ZUSVDQRBG*)7$>@A7$Q=CPL+QUZL>9`4M4F;]W/&U2$WG.$ +MXW(-6DPH>!A@OGHT:`\IN7;U:&^O`CN:K+$H<]56@_H?!LT,3SB2,3:S5C1Q +M0-[KM_(T?/;-1ID-M[..[>?%TU>`X_K7X^"X2BUA.*BW/2)^*_0=D(K>4;2G +MU>`):\YD0E9%SN17+4=X0"0TRGN/]8(GOZJ]SZW$>Z,3"]O".7/"BELUODV. +M^)J"S:',<,S\^3#`!2'G>^NY76/_FC6U'O^*5]3VLN?S(K@^_MR^5U[CTQVH +MW*VNKUQ)E@%.B],J!B<\`?]?-(=6Z+AP5%%3>/7:[B=HC;U,H_((S!7>W30% +MOL(!:8>=1T[HY&^+GO7_Y\_;6=C2!44.7BV`+!J+G,OZ$Q>?D)RX. +M"5FH2OU1YMXK=4U/DZVK+(%6X1-,T`G"5OSA`40-H!XKEJS%W!,V.#;8K1A%$'JWO#.DEN9H=?36F,[:%= +MM3;TK;R'U;V\O=0"4?YC;]C69CMT^,M0U"[\3]C:UA8FGF&!8%*$$ME!F?\S +M_C1/<]90EA.%%*T\(YG6_>VCXZ'MH +MY.4@1#&YV+4?O#V56Y3B\G$-&8[E<>\)HOW_8S7FI"O7]"$'_MP0(-N%\

+MRU[UIN5^1QZRL6GVQHP]?^F.^C$%2K`BH +M$M":(-AE)4%_UG])*Z2SXR-(\U6;]IYO2DQHT@'?T<[:B9:*'1,I]B=%?>"\ +M^8!DZ&"(RJ)GR(,.E#BRB!>*/=L#;*FW-]T%+=V&]^GHCYZ8?:9'M^V$B +MN2&P5M.NT?-"PM+_SXNH3#7'@DV=IP82==1TFH4U0G8^%RV(MPF31\Z*'AUR +M;!]WD"3!6FXCE+>9D,=A%GYBU5!#UHAE@[IP]T>-O];WUJTH.)[)?&P1ONLX;83 +MSR[=>?+W:B-#_/;:T?.>F>`'Z-+=ZT>O%]0?>B_8+[BI)GIW^+3]=U_MR"M. +MUH^7I7>]IOB$N7D023KNG'MA)13,#5D(R-9486\J^J>*,<&<"V.Q3C%4&AD! +M%4"9^?%BY7+,'/M;+3TRN7.5Y(>UVZ2*\6B*#[]L`\OM0!UJT94=4&<3+14R +M>9!HJ3%7@^W#%HKS=B%)I7_S(B+&F9;OFMVGF?6C?ZQ..%E&FRT`U1F7SQH6 +M88PF7K76"\K2H1\RW/69M;O-_)S/D717>@M]-28MK=F^[ +M>\5.SZ[=YI:#]YEG(?$ZNS=>L_N^.[?P)`^VB6EG84\/^4\L<*6.X@#^K9#% +M5,2;+A!%G@='YQ!#T1@?]/E^NP(0G)G$OS%$>)VJS];6FY4Z032=UV@B.),TD?L +M`&B)M_YLA=@.!OSM!B4R.C+'WPC*6P%S2"017N]QQH/0+ZSM)47L.I6PX?QD +MYC+HKE7Z`'D/SO7)X[MR;7U>S?GU='(7>PKJ3LYE,;D\0KISQ*44GGGJLI/; +M$]3K/OI],E=!?]I#C@B]\:1U!-K1?1DFM0?,&29S'_7JU)-, +MTL^R>^W!SL=$@^^9T=`%ZL&:;4O'ZM,5:(NV +MR)@8F6BTON]&0U&(`S2%>L#Z`G'UFX<9SOJ%,M/8AR7.8W:%FA;+[:">7_8& +MD*^20!MYF.GA%*8^6]XM7ZJ"EMU1`-N$4VM^<"3IT)2KHE`43**MBJ^A"!X: +MCDUXM*C#U-EKR::1O-?,C[Z5+HYG9M0E_U!A>-`EE.P[DD\9UAJYL'GQT&;8 +MG$B:LT9K0'[63;X0ALWH_*Z0?DW=C*O<85I&=)'0YQJX+Q`XG +M]X*(#7D]KNOZ`B+MAEPR<@Q]EY2$!P-SRUVJ5KQ7'NK0^<$A)P>#H/GZAI,C +MTEH58T/87FO)++820U3&%+&!61E&87T8B19E6@(+8EKE%"+X!9=S0W;[5V74 +MGIN( +M89-+DA82\%DP*%6I$G%&AN5JP=,<"9KV5OLPKNR>>.Z5.!M&K1`L\%RI9A"@T%#(3S7IS,A +MC-ZPA5,N^FYQT4_;-1?]W#=V6MG!IW7#T=K!^]J/R0\LLMNT,0/_7_U.TW\G5OVO6^&11M\@0_VNJ"#ZPIXA)R" +M"DPYL6]).?!%&Q2"WFC*D@^I)28R9J8\M5/!^/34#0?YSI!JM[\SZ)4%_:"X +M3##!EG5)<1;L3%W$9WQ4$)L)2_RR@%\J@0E3:7_G)E_L3KS8E_QR9N++C`/6"F&UZTP/CB%HJ<95]@-P%O5%T&]79@R/;II._@"#;F8;YF4 +M-XK\XY<$W$]ZG3=3>D'FY?>*I(XR?SF;ZAB-Q*C=[EUF[(!IC1[6B2LTQ5A; +MD*@W"]H7*T+5RQ.57[#Q5MKAK^F+T9+_EA#7,ERER&GQSU54E&?EK>/<9(V4 +MAMU+]WT[_LH8"5+C(L$4&P=Q%28\906@(^?'/TQJFI;&/L9\$-"T'H-LU[8: +MO)<@NS"/=.M'X.:TDS=-\KWE>5Y!:@Q7&*"0V,JPSEFN$=(.8LGHPZ[K?-9ZN*D/H#GHK8\5Q9W(<%X/\8-N# +MM8-FO@2P_R]"N"13__B?%62QLDS[J0,4L*Q*892FP7-0!BJFKCD7B@K/Y'WPO#/5+P=#LUK9TM8T_B33<6]%2L;2PPTR8A''W*93,)2H:IB)&5S +MZ-SRNIJD'$?.N;^W@ODIZS`!N2@UB:Z*YH)V(Z[\.3,I,_"T3],5$HX$L4NY +M@)ZB#`L&"4&-;&A>W!=ZH*BSRH^-4?4PWRU3<.L430R,5353\[3Q=B,G#/A& +MXD5[[-?/8!K\*ZDL"9#&>FJK9A>*,DON:\[8V23]8MM2^+DZG;C^8`0-A,J3 +M=F2D,L0J35',S+!^5CI^^QZK%5%^N.G)$G +M=U+&HLD>4Y3%7#U6RPZ<#3O]2@*4%%]D7D4&K`*F08$;P3D<';`G% +M*=Q%DW>[]G^/!M1X!S?/$TM-3Z16J;JA)#$MAM+DR+9R]\EM6GO_75.@><2H +MX\C45PVJ%':`-V_WQJUB//H3#$"^+NBOK0_=AG>Z[:_[&KZ>:7]=3C1Y\P20 +M.B[FISG#PUV>$7T5F]%VZ=&.[GBT8Q,,[-:#MM]D^X1GB4]XXMMBY^Y@=&T\ +M_K("Y7@!9J+YP2`6868@E.TK<)M@"971:7F7LNO>P1(V5;>)SEZ1\#"E9I1UFD^TZ^[KX;2F$968O*^6`]U)X+@[0A#4\NXK^/U)AU'-!+9G9%S2IQ`.\WN +M["9M@((^U:;32U$@3*!34VHRZ!;&JWF+6JL'2O'Z@E6"M]U8IXJQ,+!E* +MVQQY?\$Z0.\7O-.XYZ/L)'9U)T!8\"%ISXHU!2E7D53-+83)^=*.FQWJRB8W +MY^^?32)2,2EEB)2\TIZ@[>5AZ*_\@&NGXMV,"A^6P_.G2AJ9^KU%_2SC%I"C +M-.448`82G=O-EQ%+/%H)CG01Z5VX>N5P=WNX((T!Z]42ST*!;>5\F!UH`ENW +M6D#H-`Q+@;!VTHYR2N@(K+-IF/!SFTZO-W=,Z/&B=0M;]8YCL:HJMTN>2[\- +MO<9$N@PJO=GYE"Y./&`E*2%.N,:II$U;]X0]:PUHN?1$_;\:=IK@8:;XL_;: +M-7_6RD_OA."A&?"\>00P:!=F"XSSUA&>^?9U2C\TTY&S!RB6[TD2NYZ#&I@J +MK2'\^FX77:YN=X.A&U/F0#S`N(S7FD][B"1KJW-=[9CYL')U;]C;SII2[92/ +M9A60'SYOQRG.=QAWQO$VJ`$PX-.WKXW2M6"U.H&1V]C4WLEN\:7/,JPJJ$A +MURX$A5&0K_O"'4#ICI3^*FZ&(2E)/82I9WO=T1,+N,D*4#F__XM?F:&2-'4I +ML,CY\+T8$:<+1[NGK9*H5*J"Z@($'GY>`%%#&6VD5Q*=I4VDO:8 +M!N>$GQCV+!5PO;;77"PIYR7A(B:G?1WC? +M@QO9E>01$"Z`RQHI%,"6!+5E7>BANPP>*84ZI54EJ<+L/]A7YRB@6GEDFAO: +M2CPCP1BCOW-(TF;`>9VUEO?V]Z@J\C!U@4&P:"D?J\VJ1S73J# +M/[N5>;(KWK!RLXES.AV/A@$IG0]Z:HIF(E8KXA)_NLXI[#I3Q=;,%MLA.#.K +M<3YH&VN'+(A!F1EX5CTYU.1)U#;P&7HZ^7B1'B_2X\4=-5P<:O)D.I-<^Z\G +M+YSKL3-Q`N*0]MJ4TZ@41:GL#U#%;#@"M)\[K$1R2=*.LH^_)+L;SW=U@"*. +M.DVX"8)4.4WZ3:R8@O+'')S9M<_(FFX5HR?^J/7%^<$)=U> +M'^/5S6R[,068RWMEOEKS!N(\<19OY@^7[<"!!?K^7_?;`=TU>9:%\-HDMVT_ +MM8A;S=ZX2?^PM7]-C#MP^[V"QJI(^"%R1GZ(0E&6.#%;SJ;!=6A\6C01DE;% +M-IM?-FR_>7^]CXE@D=,YRTYO@9D<>`?5#4;[&J$1:JRQ8<[B>]QD>64O^(5T +MKWT\^_-_E3",*$#Z3>E>QH:[2WN)^^VR8,FS&[5\Z:`Z51A'>$:U@B;7I!6+ +MV4NGKDAC"N*_BJ9T&V^)[+\/I;8$M(59R]_\"^ +MS:1/?(^*8#ZXCR? +M&<$4U2;60L"+CP'\I'8@W@)C/AJI(.&M[*W3X=L1Y&WMK$UYZ!=GJE)C35W3 +M?L#0-HO+VD)O9Z]Z5J&WH7O/?9*2X&(-H<2/H)?H8,'+#"XU'10I#A`"S.8;7R(&'+K]^'Z.K?L\MH`5,=K/"2";GN-BY(P>/G%0IV7ASRG*6BW2 +M4@JFV$@9%(->WF9^_,UQ=#Y5:E!3JYUBTG@"D[0[HK#.M8`]:+FPE8&."Z2= +M1>_4WH'B]XN<::]IMF/4WX;\H@^J]%"ZDA>7=>"SA(O[E7JJ9CV=6!!45:E< +M*'D\EO"!7;#]YN6JW+/<353;&67FN%.ZWPV)H5U6!)ERZ[D"F,>XBJ!E,XM/ +M$*.I$"L(E&D*TP%/O,VO8`B-C3D0IY]:UU-S3KR)#A3!VNSX&HKR472D^0BV +M\A&`EJS!)LHGR/T_WH'%LYEKC\0!00J%HPI%UC@_PCJ4O7=2VT\A$)SGC]N! +MNWC2S0>SSLFWB9NP1ZR;'1T%5B?T_@1!SP6(XCP>C#Z85$&&)46GXF/7T7EQ +M'31*4D-*SM>%U<`NMR!AFL7?+[;N2&B;G\I[M-])J8DR"WY92A3YH(W)<#\0 +MGC_[%%ZP*55UU,&TI +M`=D+!(#,,@-C<24_GR2F(4WG2Z_@O6+RV7WQM?14Z9Y$0%Q3./'IJ03@] +MMT:L2(5O41W"*Y\T=:GB.H;'";1U)AI3`R`[=(&NUZTW1<$C'@F?_'5CX=QP +M+"3_"3GTE!WDJ2!2V]TK5O=B-26.J?EY]:G$"BFN)-_F?8$W-Q>&$,(%K`,@9. +MP,S6^SERQA:20]=`$&`F3IVW8K`ILT:3:394)SYZ$09KF7,6X(2TCV)JVI_:BSP[W,66-`>G>8.Y_E7YYW))?3P%1UW(FPRELI=+"I/TO@D9#%: +M57+3JD10*UZB$RC\_BASR`OJ:@?;8NE_PV(0P;K@;!I&3=HWVY;C>+XP'U5I+M6"H3#57K[4/N[\XG,P?N@X.V(@"5R'KE\1/B^B0J7*L`YCWRP;FHT,/`*ZZ]. +MFI]=7DH%155SI`^P*53X31,)U +M2TI]FTT)I2\]*[<*04/+WA"G$:&DB*7X)8@8]"U0U5_L)Q.[85UD390Q[CS6 +MJ?C>BJ5P)`9-;!-I8D$LX'0\1<9K:!_4V#=DF!Q&0;.='.P[E3;)3'WGN0*F +MDB)V-CROA-GJ8YJ010P?%$P(0)!*QF4Z[D.:$)8.$B@_Y;$H\X];V/-,$8!< +MH81>^MS3BW[L18DI+PT?!((E/C]5;R?BZQMWUKNY6PNXBC[R[\2A,D"6%C5,S0+B%Q%;#\'^F*P +M:DOJ<"''.O'7]GER&1%$P2R_N$295SYI8"0EFVV(?$"J@^0+8B:@.YX9 +MKE:")ED#*L%,\H*0#C"LMS*T'<7-=V9@1*HMM/AO1P.DD(Q_L4"Y^`&\^K:'MQ9[8@YQ8$%-B19RN=:E[85EF,B$!0JMO--"%1: +M5CW6X`JQK=3VD,;%`61%A&`#/OAK]:VJ%KO5K@+QSA4#/)=!_CC1((`BP1JDDO#Z&.BEQ0,)YM09C]%%-P/&??)E<#VTJ@*@ +M;:*#JH.(G*M#7$@5LUZS=[QU&N?C<\(#IAZ"(73HTP*6>O9]F!]J5]9F=E%\ +M&W4"SI'\T]]:R3E4;Z-W*QS$LACL,__*ZPS#A/\INV^56:7=$"3J)J'-"Y1# +M@6#L,RH$7=-,V)$S,D]S%&"SF)C:P:5HR*;FZE/97Y^BP!NA,BED,E3/,%0> +M.1?^TES7%`='9R`%@HN4A6N&K@+QB7%8!!*P$+L]W(>T/#-#&"QSKHADZ-VC^6JE(OQ.O.@`JLRP[O.JI8 +M#7]8,`/MW#AXL9*$"5Q`/A$MZ9A:3-1>1?T'3-C$?5DDG^&X<\D6#HDAN@Z] +M7;2+MRU=56]G[5&5YF:]F>_A6!D'+?G3H6FE0,)=2XG+XYG<8IC*L1@9)>-$ +MY.F*/[IVD)3]S.DG=$J&&V4^=@GG60N7?BUSZQ?Q:-A\P!-=-/B=+O?9J8_? +MJEKFE3NLOK[RM0GZ^N8P'F/YI>1D-&/0^OZ>)-`3V0B9LYAE0]0L19F&(^AS +M<_&ZD1C_B11Y@2%]DNQ+7N^GG\!@#QR7S5(%AO4A)%TIHCV1R*YX0XA"GB[ZW9UQLGW?FO7HI_4=5"/9'#IS"V0'"^>I+C4C8V3 +M<\OE,2N%%;I=!MV]\U=,QH5:+&7^JN+$VH-1]$:2B!KDW0@ZK3A$S3GT#$)U +M1,ZA*_!W?"]H<.6"FA$@D0:)1-VXSD.RJEKYE"IWY<6:;RT1)$,1['GH(*VU +ME+>S'YVEHZ`W<-7,(-7B19FO[<5W@^MC+MP/GC-YZE**0Y=%$N>3II=BJ=K8 +MIN;*Y$*2&$-@I@KC4S*&P<8M!W>\PP#?C^WL8N#[0F5AH-"EF5K54'QLSM<- +M'&#9@);78;'68IR)*=D-!T'7J& +MP_[0HX5(4FU3,>Q6ZGW8N@H>@B?:VO!/C_[4:[7$)0,!]0`0,Z^/L7-+5DQ! +M`G&Y8K58DQ[_GR4>62?*(LF%]6096I!%V/6$N)QH[[I#2(W:;!!,\\VEI\,< +M_!6.ZS&+[`?=M,/?@G%X&-)^HD +M!WV+JL`8Q7[=88W129<5B)P;/F>97C3QG#&R9K03)K!N@"7:Y-'7AKD(1CNC +MK']"?7Z:D9,;),?9@,<6.Q?P1%<-Q>&2$A;5C'''^P'\/DP8S3?L95_[E\1R2#NP$%]@X&K>'%_BH7]=06]S +M0@98L75EEH]G7OX+?8J;B3:\WD^@&U/BY%]7".C+LV+3FU1L>MKYHH1BUB?8 +M,6/T45+VP=6V]U1&J9+3%A^A'\U1[=F]IZK>F-7'@Y/J3AJME=F^6*Y)M8?3 +M6Y43A)I+,!(,/*M6H?@H<_\]$V=+\E*N$&8ZR[LOU<,8^91`P*TBAR:_2U$_ +MLV1#9-90^3WT%OLT$+5(?%PIR:*N@[^:$K:'T[K)'Z1#@M"?L3FBEC9*,'HC +M&`E7M^90Y>IJ#UOAT`7P7\1"MI%/GP3(6=N/X4>*E%%`3Q7IJ6);FRG%TB#+ +MV4NRBIIC9"4Z]NG?10+_]2;*_3JCDWC/TE'):VRC9DJ!5_RPE1!C_SXW]$/X +M/\4V?(TT_Y*YTAC7%&7??0:?'-B6GCH\--&<^0S-YY.P1\2?PN"(X#,=G9HM +MT:FW[UITZJ)_["0ZM=[W1J+L)Z^4DY':5JL$[@O=Q:/]Y^525NN3Q%>L,^A" +M3I^S.+55$3.!,VJ'N)V.4LL\<#HQB=YV->X<\@[PWNFL.:]T]A2$'5ZS^!-[ +M.IEO3+.GV([1,$#H5S2IO*=A^B=]H5E>-9/ZL[@CXT^[Z,@K'V4W/I)(BZEE +M7SB20.:O':TG>G(VW[KMF;QLMKW.4-$X>K4T\F7DO("[J$M-+:HPR +MBB:XSD:M/'DQM%64IUU6Z%S,\.58 +MW^TT"R^8^A0=?V/A_&'-Z?BS9N(@$ET$+@9L@:,497)Y`DK: +MGMOS;E%8U&H@AX.;.^^3=47;D(2RF2[DSI/ZHMH+0IEC1X7G81Y8,3PJ[,+K +MYNLGDV&]>?^@9!&#LD8I#'>L)UJ!5OO&._?09.R@D7W7QA"`,O7Z]\]D=CR* +M"XF/*WOZ!DZGE"KQ()P"UJUXKU->*P%IQ2G/#%.VKQ^O-S@U;_QSV])^C:SM +M1Y#UE"]W*%]:]L83^#R;,DEI-4G2'(9T7,>BLE_#M`IF.UB<"N.3COH6!4QT +M5##F*NJ3_KZF0L[DF"KH\9_*SIZV]MZ>@+QP)C+9\OQ#$IZ'(?:3\(-6;KF5 +M7,H%%)=H1WV +MQH-I';*FQU(Q5\D;66[DL5RO94WQMX?:W*@$U'\+\8 +M`+_7O>,!-&&*I;OWYE/>)Q]1WAF-;,M!S[]JW,!P>2!Y2Z-78H'E]3W=)*H3 +MX6D_>\.,"AUS%+9$Q%A8$_V.<3$T_H[?CUEZHRA\ULLZ8-PU06$%GWF%P,//H%L4 +M:&S6,PQP[_\D(0HPD`U2[(#C4\G==.$67&(LCO-,JJ),Y#Y$*YD2EGV;%%*R +MC2\XT_3 +M@(#NPR:$`'"\EIR?"=*G-6-@:'9:"'R8P*"*X:6HY<1?B1699G3"R(JNTI#8 +M`ZV6[5.P/!'$6^F5(^>QB[C"4D"1Q3;H_UN+4J:>F&[<-L%P5M&R"DF@$$4.7+KZ%K3S-.1DYZ]K%K=Q$?Q.`&4V/ +M'V@[VP#0R6%ILGY8V^[N9#23CE76FX+OV"W.\14NUJU0PHEM:#F.+/I,97*H +M/&+<^*^=*:)U_2C@U[FWI8Y'7>JC`$XX2R?ED_)Z368)PJ +M!]8"VX$EC1F#AP1]E/G:CY%+7G*R+/'B#3U<-B@DS^78)J,.NG?0B5C7A +M\*4`@U'EP1PK2E&PLJR,=4<[.C%`B+!OO6FG6P,":["GY9B#OTG#:P +MDD.GOST?1PO;134FN4M1=M(3-E5(7DA._UT-APD*^W( +MR2JVD8>6O:52N#);OSL!X)MO,UC(;_S6#702I'@&TVX<'8[A3:!<.+-L'R?H +M?)E[+R?QP#I?YH?OY-]N[AJ#A\4U)IE^_-/L#NLP&:4#D7/CW@G7V":V/R=T +MCH7HO0K3KBN3/,@<)`DG5DP'C_SI>MR(SI4!Q^*PDM6RXWY1=NH&NOH(J,)@ +M7==I%=E2F2/M7.[S_*=P97ST[=:GW'6+@TQKJ4J'60G*HRE*P% +M*W\T!$&L<66BP(J608L3_.9Q_G(NCL9&,`$T%][6Q4W46- +M^,O.V4+1%I"V#%U.YJC"O%_Z=Q3P?)U5W'42-E3<55K#*+&;`/3E9V?HL(U" +M=>*'''Q7J[29\_(F7?MON)H=AHBU_-K4E:9"GS#VF)"$,:HM +M7GZZ;%*CH&0/6-03&+9[A'G.KO&96U5S9G]$Q8!>(XX*`O'C/6JU)&R +MSUY@5Z7=::)]D[QL?6:2D[+P'DK>GS*EP<4[:?LG>Z1X!:^@U*A?1[2NL/6M +M>`4-.?/4_UC2,5'9,E'-"PL\8NQ#$`($$C1Q9E-<*W+FW47S-^\VF3^8Z/$- +MV"G>B:2.YDN:EI45X=A6@\T^+WJT,@[2O%+'2MS@';L6-]B\:6>E3&=MK+U^[4?),['D4?+; +MI9G[-V[9_XJ[^>E96/4T>\K7%A41-'=R/Y9+2-+@*O:)[)%[*VH"`B:9#+AL +M:>X.H>DJ6]4$(5RX%F\^26)6A9"2(3MKSDO?/,/.2!Z`+33,.C>Y6B5A-IPZ +MJFF"K)0*D%H=YYG4X]8;K-WF&FPZPLT(7:9*;V4_>,(*0I/ZF%ZIH@3#?")' +M?0&<9=>_Q=SG!IUA%X2O9=??*IHLT7"U@>)HD1[#4@P^!]W>K+$O5#^Y7(J9 +M6S]1AAZ>B^6ISEK+`4?K<(NOW;B2*1!EMO^8J,BS(Q+;M>1?9R!&" +MJF]^4$7.GJ(GIY9IN[?.F23*%0`+-2-0=9>Q$4HJZ?``VZ +MA;'`"Y14"2KQ&#M^5V]8[HT<#_O[H*/?T0O;-/LT]XS3;H<[-``P8,9B+S_N +M+)K3)SGB1'<0RVR%"/2DCPVM]0>1W#C6FS&T@DQCOE?(@^"^ZVA3?*X^ +MTO+R[HN4*'*)Q>FIK5P%5]?[-?A95O,CY\S;W)R;]X;\'#P_>(+K+59XLW#XJ9DI#,/E%LUQO$Y +MEJ*.>1!ELV?EV;=@21G*&9WTW`4B"AO8_%$Z67DR9>A:_46"2OQH,H.YL40V +MZ7LNKD8[ICVI/E69%4"/`N3@FZ5#-CB[)?.8-\'QXQ +MC02-##BALI'-8%$D1]G^CR%KA*25@90-`LKFRH-VY8KK(EM_@E9H(.$]!?64VF,R]+'G^G(@/3G*?/L"9*ND"B[X%@BEG^P5$+.; +MD)8.8;3`S]&\X&4C\HN(Q/`-4[9Q.,H>_SD@I)J&I5I*91@OB,W#:40JJAT:3)'?A1JP]8 +MZOV]KYP\SAMV$"X,;)/3@VF[UK)G+ZG:]"RQV<'8K=$I7%A%5"3@]'0+,1;QK"`>;0QU!'1\>JCG6SOK/<,07[J@3 +M^XA;!P26("83[UAL,XHFRE9ZEOY>T5SD04T1V))*F$N$6 +MU.BL*P!VP$^2?2!3RDH0%7VOU"'%1F1FU36*I9EJDU]\YB0IRY#M?0]^)K:H +M@K+'Z!).R@.X"+3U!9^J82;ZTEE[V]?OU7'TEPZ82>3'FY(9*:!#>B/J%&.> +MKTH2%-VUG;<23+HJ:!]RS2YHE`\^[R=-=ZB&2'6GJ,0\6"L2]548/8Q/N&"F +M('/^W+ES3R#B6T&;:.1^2<_`"%5%PAL_0QQ[F/+WMD +MU=80U6X.=(I[0A4)XLC?AV`>A)F]EH/7;COZW^543.=75 +MK'%^!\9`J;@G$9MMLJO:\*$Z\^.@[@MZK>"ZT]%AS$!Z^@[RH>L%$GJY=@09 +M%S@;>K#,+&L^G/N8X#0"A/O3<4$I-%-N!8A5N55EC`G\W9!!V;0\MI?V=`7? +MH5OCJ86DX.C#0`HSE0DL3JNR($*="GZ?4L=!S[)+7%(U]3E76E8:%N2I$-19 +MH_'3^@E25WURRFGB,U'-#8JSC5QKV?AOS$L'_T?<)\H4C"E!!7-U0(=X]><@ +M-T$%0,4%2P"9TK;:2Y<]:`9ELZ#GA1E;LJL.\54.3D&X6B2IAC#992%U1"X[ +MZ+;V$`TA#OBM/_&%,>F9MA5$2Y+SR5"BL@!*V9!+IL_%C*+A:ADGU,2X%8<, +M#77<^=2-02ZDHC1$;AIP-1I-XD>^1/A +MJ%G,ZP$3.FE@:#=V66X&1=.?@AO@?L.Z%E%F +M?@F-*38UM:N`$J3%@@_PF0!Y8@HW44H2BEP4YD%U`&R5BF8XU>1UW.2M>[YC[XI'W +M];BW[39IM]WH?[.YH?*Q/^W:N+$V>=YK=5P<,C[SI6&R2+855&$@V'G5,U7!MR##["G6+G!6.@N +MD'HC=5*XN:H\B088MOC3&X@,\82VUYR?_9#4KCL/:M0I.=B0"&1CLKS1:&UF +MQV^?8GY;]T^!N_@?\$RRO_*U_`N#""]<1C1]5L,M'SI$9[D)41;IJ4:(I%?- +MGDB=HD>")LHLV\JP"-"0JJ-4*3^PEH3ZYSQ]IM"'P\$" +M([^QDU0/H[P.A%EQ5/D6>,0YK>99P(VQR/G"X2XIX?P) +M76'NKD5L#96<@%C5!S_S2%WU!]" +M'F^SJ"X!&9R+VK1I#JO&/X.=@MW-:9HE]..;LL9#R-\#XCARGGL<8V2;=45# +MN&W>]3<$X-)+1"7IB^M$D?[$Z"![[G'XD>1=I)@6X=Z[N&>IYR+P2E4I&W>. +MW0Q2.Q29[8F2'V`Y:2'84SQ!">E:EG%%SG??8^\:S#H +M:9*Z`MKI-[Y,()3%#PYY=/#=HA_H5]BP"=)E9ZQXMS049?[V,QZ65U2X.?1] +MR>8B$X[H9+56R[F,]I+)9O("QAF-/L2NI8+0&G`&4+D4\T"O0U1DJ=!9FW+R +M(V`LPI:$-]3OZ**5-J,V+Z";0!Z2G-6"%,^/R,FE[EB?%]*!:J^QP5?VDMS# +M>;="27G\*!8\7E8B7T/XD7`Q6JN:J)G0GE.NLPCP<\B3@V2/Y8J*^#E[3K>B +M9S`YQ"AM+)A!]HL:#=>43LI^Z&8AT#4;C';SH(L.>$8-[$E4_%.Z/BB\CZ2> +M&]UM'<=8GS_6P\F,L8F8N>UB3P%+_-@;S!)T$I +M(L^`A"ZA672D@[0=\$P/(^>NLWFO4G#2HF2G2TW5WB3J!-AE:I?4_7XA#:/: +M#OIZ,KW*_FPCFP'8F>7G:)"6RNN$QFCS(5X'ER.LF]_&4V!7D'9)GA;&QC.W +MX6V(L@I$<@&SK2EF[L:G8B5-#XEDD0XYP2GQP'(N8:6OIRKH$YG[[+VI]QQ" +MEB0S8-+O/VW-:O:$?=P0?X2J/A7T_(E/![M'FV(\\\)&J3^I6"SL,#5&>LK> +M`$A`#W.,,B]=0HS0NIXWB-0!(0FY?JL>T^H-IR\^OGMC;;\E4WMA@>^=4R3S +M(E88B)C0;('0#\L26;2WC-6B8UU'^C`DD1=C?M!SA]N1.@`#.$QX0\$^WJXY +M"8_)K8`%'+/'E[8MK:CD9@/FYI,HW.PE2F+-6+,9G,E>8MP5$+S6T9?*) +MNWU\M]WZ^W=;^]:GMTSY^9X;-FRH[5&^8,OKKY5?;+G"&5^U6PMHSBVB/<^^ +M$[7GOT/NN7A3<<="JLX@H!!130F`A)N+=!.!\KNT!`S +ME0P-;7KH=U400U-`#($MO/FAW\$`5WVN/RKP"N\6I8\"HA>_TQ +MV0##[BD6W1D!1]&(2UA^X`QTVY^)BU`JPR3"V41_'(Q2S1'.5VVWJP\[?./- +M:73#<8)NV&?7T`U?>6@G69%*'7`>NY'5`>O^5CP$$VLL<"HZ2<.FG>\'=BUG +M!F;)#4X\>,02EG"GRJLJKP'%8I`#6P)ZTEI92RNV%I]IEM9@?X\?'?V;_0DA +M4N&(""G%MN8R(]`^.<7(97ZKS4ZMD#E9B^VT6F>[/:QH,J_$,U@4"G\Y,9!* +MTT>IO3G4:%OJ)?QI`C31,R$Z+OMEK"+>Y")O[%\[MP)/HL"C6:#D(C/`;I/R +MA`0:HL.,9X\]`M:PCEQ7K[O:94FQ1:D7EV^/=04)>\H5?H`IU;+37T2N9KRD +M:+9]H=(=\JA@)AHITA7,KNU?+:<*90227=MAMTN_42;"2]IKFUAI)+/&8Z>= +MBNXFU4P1M4VB$YBGUG::Z4#4\IU%=5;]0\M52.B)P,:;AQ7#!VI/.:*?;_B" +M;*#N.E@P9]RRC.UX_$`2+$9B+$$JZ<88H,&:D>BM;10\=GR'5^"KOX05 +MP+K7OE;F?*Q4*,F/2(Z'(`O4FF1'.*^_N+QDW(>&7HNT!NP5PT6O(VA16$4H +MRSM7()1%E$-8[!CTPW`=>ARMW6V7D(?=W/*NH2)W\FY14U_C$3>+;-O +MH6RGSMH>%ZRBO8#8*2JTBC%E+J(&UC]L0!*FM`M0Q0U,")D\8]OWM0ZKMO`F +MW?LEHP9OW]?D*F@&,#4+8=T".R6/690]=7G=Y[IK.N`A>>5$AE@D7OS)]PRE +M["/F?L73$V6.NEMT?%Y4-UD6CV%#SJ.;SM1.5_&/HO>*>:-TVK"@F9WWO\`5 +M.!@6(3T63PS^ANWKA=DLP.[&>D!5C'P6]"&R^ZG\<5'FN$?9SY')'V:39>L< +M.\+?"?2.L_Y-<`4&\N,;EBN154)G-;E1+[R)Y65'0*O(TZZP".02:?2N:HE, +M>=I(W@:K222(H$G36).Z,OMS&2W9.5.H!PG7BFY<\Q7Z5\^P\JD)ITZ=[RT5&M8H*A1%4;;&V:3(H%\B2C^Z`M=)$?=^KPOLM< +M.#L&XCQIPR7D\(A:GOXUAH?8\PNRVB#_$)D539K_G$*"]!6J:`_T5;&>A50J +MF%/;8^2&O+<>O8V)A$D9%TY\J]>^OMUMBYRS/E4G#QYQ!C.Y'L$M2JF:K+'O9@DY?(LX)78]'&B)&4--'O"29%A[[M'NH8-\Y,*7)Z +M+LI[_>2"8UR*&J +MNDX+57#/]ZFRZ!6W+BHJB:/H_"0DGV/?$\'>"B[SYG;66HZY"J^U<>=#O2H8 +MR?RN`7%3,W(RMD=(%[L2GCHC`K4!O*2P0AN';<=,BEYG.CC>`R+\C"^[!96) +M&1;]7&,5(V@,:;,T3ZUL^5#1;%L>0WWY?SW/0)M)>VU95`PJ8+-C9LNS[']$ +M]_:PWD-? +M*QDL!8SY_M-<1=!%`1#"8W/DVX+E#WD@F$Q3Z"&'G_[,L0AVCGOXHN?`ZCC\ +M>R1$#9'24N#BR8%<8N[8?X%3BP^KJ[)"#*/Y4#2H?CN= +M7X%`L^^^BPIQ6&QZ*"Y1SS]A`UWG[[ZKU!9Z;;EV/).P-5H6TBL,D(NHPA!E'PO/]YM-#XOU\]_5??&6N0P^#=T" +M.K]$>69#^;TLZYZSZXS#""\?09E$&34,UL@P31\/?)78<)V"W__-3\ +M,5;4:=.08],PSN)O19D7?D!7)>?MTJ2SC=>K=IOEN]:MK7+_"=%$2MR@PT=@ +M56[Q"NNPH:MIX?F"NA"*!09`8^A-XL:&=P5U8'X`Q-NF!:1P60"`LJ?DK8+C +M:O,B$?JU<\J1L_/Z#F-YZ$A'R"IQ/U[[H/50(5:\0!,9AFD.#X)G1MFY5X&\ +M`8T6OV+IK&V6,8H\9D4L3L"78YS![[-%<^$VC(D`47Y1IEFE+A/X7]G.V +MRQJX^PHE-S_=9@@0M2#->9VY\V1VLE9]JK1G\I9ULK3):(*%-FS06IAUUJ9< +M\(]D!N6S6S!R$F6O.E)[#,B$(G.HWJ%GVD;7N+B&KS]H%EJG+2%(3RYY:?_8 +M&U"JO/Z@NEHTM377SJG!5QYF6ILX/HV7$@Q`(I_Z0Y4S=,+%9);3$G.)]^M? +MU+0:XKK*>9;_0%5MV_2F,NTXN5K*_O0SX%59A&%=Y^8FF7%K+5<727O2>YA[ +M/IXM_X)ZKA:(TVT'L1<(F\>X'/Q&&1$9);@ED6T5!`4%@\U*Y^`C$J18PX9D +M;H5Q@X6$E:]06[,8M=6SOB3(RR6/^D5"6\(FN.^&,HAS"LG=BL8]OP4O*9KL +M'GR^Z/KKR4C"YTMN3D.;3!V"F=TSJ0K!IL8J!+J&WLPCE=5,U;/B>G*G&*7% +MQ=(V8^A#,?2H>5?L(MAHK#:BML@)^"KL&O?9*;HF-1=9#:N']L`9?5+\(U'V +M8^]7:&;Q<5L@`FT.6@"=@/QGQ2B[\CNNE._%@Q/8:8MD_[&N"Y^9VI7429ET +M+5%PX@EIE.:D*3[?+\&L?7+Y$ +MFM`\9Q=AE/GJ[4Q77Y'R;EQQDXQ-9(X<**J"X#8$2;CH37"+-+4]ORPL?EB> +MU/PNZ*)$;#QM2Y']Z_BD7'JL=15)@>E#QS?_<$DG>SK]/U4EQ)S^;S)G,REW +M;_^'R&\+.(=/4_^YKW[`2J*@G0(F7M%5J\JX8<#ZZ;\1PEMHB55M4T3-FY[E+WS@_"8!_MM/3+]TOFKP;M(TVC7ZV.6' +MVKL_\$BA25W#LA:7O960,(&N1`(C739=)C>T"FHD)M8OFZF%N_A[3YW)"6I% +M!=QEQQ>V'3G!I^O)2MNVY4;5(*Z:J9CWJ\,4LU)$#!:6Q'*G\72`*#CW,Z#< +M.>UOMVP<*6JGB0)"%BUEY:/J>I`V&/=-<:UH=R8)Z`?'AS;;E;LXI$>(`L-- +M)*(0(TUB="G]3]#0G[GWO5!R9+T86IBQ"G(]:3X%[!.JN*B +M=-&I]!S9)*RC\%8$$P89-\CTE$`"6&_Q$0HOJE(\:MEWS5+Y0BI3!G05[214 +MU@7/KQ&).Y"4VEF8\OJW_Y#.6VM">HVVX1=UE70OEI[\6MV8CKS*(-J.OI3M +M.BSNA"RKF=[S&RW(AA_"?M&[]@^E-D^4.7>)^D55R82JOS;2=0DC[,KA+B*D +MI!KFG37GUP>N,&RC6A:M/:+IB6$ZK2$*'5/JAJL=[:38,>6"2:Z[LI48Y<.1O+\ +M<,V`^:UA-ZA,[ZQ-G?>7GEK+#]\M6DG4\L.?H`,%%6PLQ$D\E`'#[M@.&"BA +MLTI'O<:SO_@1;AG23+5WI[W6LG@;F5-2S>DZ=L@T1F"QYM&ZT!L+X@:A%#D' +M'%\7;8K#LXW5<]"WC\)K^KO/@'N!W<<<%N.[8UT,3>L3C[;`)+?P#R(-FRQSBJA&72%BO27RO*RB`^Z0U.2]WU#?T9^7\,*WOA4(F0Z +M2VAZ3V%/MA]81=LP5#[D63'2GIISXSA#%B/GQ@>L.N'!(%?XJIJ8`URC#\2P +M^0I8&,DJIQ8BC.2F$RMT&_.ZN.M@*K?[$F.G17+95Z+<[MJI +MJZFT="ZWY`Q'SK;?K#&;T5K.Z:%+VA:<@,,O<^WT9]+'2#.WZ.&Q=CU,C;4H +MFK[.PVJ+5'V1+D"N`]G5VZONW$7,1Z/#;S]^)^:I?&%E@>RO==K\0>?-(-?W +M+3,%"!8'-GR[ON3WMX]GW2R;$:+)<,@N-.IHK#F_>)D4M1+< +M=:06%9/E0_7U2=4K#.\+>00I%SO>^:39< +MN41).8H$S@XL68/6"3=HX[UX"`8O4D%`ZN0F-L`CY_/?L80P@4=5#VWDEPW8 +M$0";%01DR-+DV=\6*S9[V'<]LND15(3!%#_(F?30P[ZK=C`"\Q.F75"18LO4 +M+F7B\%5QUCV*%`I&Y6_P=7%[F79$V/9T\X3^NX +M4?9C=ZIJINTAUQGE_U(2.IV?&)2D6`Y5J!32R=??M:AH4_AFOO$$A=4Y,8@< +MR"`/'[W2'%H5PR*'':,13+Z.GR($/F@*X1/'#3Z1XZ@P40>]U"?#9!-6*ZP' +M39',<%33X,#D8'9G;#B5-%\3:P*+:VRJA'U'APLEG^O=IK>64 +M&Q8@\]XP`^<367",YW`FOU?=OL@F[(:GGHN,XP:V1I)PXW.^X9)3474+\`8*-/%KH3H4J%MB55962UG,10^) +M;>1RU3%_DO^K$`E9,E+C* +M;!E8PS7+0<.#:2/*39%5][H5[4?+Z?N8I8AX^;GR-"B71JG.P"_6-LX +M(F54)'T-$^0CY]E[U*D:*;O#W#[3V\$,CCO/7LC-TB:()S1*)T5ACTF^H3YG +MKCF:$:TJW]-')!_5LNH?"W?E=!BO/_YZY,P_E>-H\IR-M^][__-VG+:F +M/2DJM-JZ:]YGXWY>-%`LE>G.O>2;-D+3PJZR(P#N#>=3AVQ;.DIWQ1@^KUP# +M>*GC5RJCUBTJEBH9G4]Y[.C*WH&7G&ZG1%_IS""(+.$PM\I?2MF--"8M:/(S +MU#J6M7##O@1C#)?058_IG[0?Z]._K1CU.,;.59/RPIS>?'#H4%=O*WGWOMW- +M168<9^>UBP*Q*:FJ*:01.Y!,Z=JT_*\E5%Z[-[NB[W=BBB7K"!-4E\( +M#ZA8@L(#ZA&TG$+E=`_RRYE'OI*,Q=+RDNG7"H:PQ6D]JZV=NI6C?#TJ?PCF +MY"9F17`K#2&VXR7$MM^NA=C^$NPTQ&;63&WQIHO%P;(]=K1K(F%$7U:"IJ<)9"Q(@F3Y0# +MY3"H9=[\G17FKF5>G=9IWP(JT$3\''.Z3 +MYIQLRA+YQ2C[Q"&6Q1K^/^2]>9P<9;D_FG3U)"P1Y;!#5`0A,V1FR,QDUXA# +M]I@)D0PB)!%JIJM[FO0R='4G,\2P*`('24A3I"PR8$!1A"/[/H(@*+)Z4)'% +M!450^1%%1607[K.]2_7TA'CNN??^<<_GJ)/NKJJWWN5YG_=YOL_W2YX#1@W7 +M\%%;SH4"[V551^&)WHB_VE3]X"[[;U^^=F.UX;0,O-2FZFX=_QINMLL)_MBH +M;B3[PYJ8O$V@D@NCNGS0ZDU_7D$R=BH1)SFHT#E\;T+*D);G^]X(+.`1/A^< +MHQY-8LPZ<,1'NNM=>28H(G94<`UAUA4+3(*"9H>"YL185#1.(:8`-#ND"6%P +MCE=E$>-ARVE4Z6$C0-`J#?1O7I!&!5@RF'1*]>,4V(H:*1PW]38^RZK"+_CO +M(M7M(B6L)NDJ(K;%M9`.]+X(=-C*C00+\-?S)2D<)C??G,652@ZH`F/D*J4U +M_NSJ^+U:V8+'XO'01IJ9ES1S7$7)UU*\,&">:HRAXB@.'](3"<"I#VS[&B$* +MP%"'*1ATP^2>AQ++0F^YALGT@[]9(2R]-&#XXED,V%)@W=3YQ:N_X*7NRV$= +M1*6@0D9Y6.&8R[22\TC'@.0U@T(DP#8B4\#L'[U/Z-R1L"+PL(Z2@]T6_UX> +M=J:TAW1&2DK#^=VUQ8)>$:ZX#85MS,R_ZGZ=C%IU8PT&A[H9IO0KW^^N@5.4 +M-/4@`Q7"Q#5WZ'Q./5T)93>%*T)A?K5AO.:R84N!4!8>:V-QY6J)B&W$&O"Q +MR,I7UH3X>4GSG[BB@]X@U01&/1UD5"P5=C3YTUSA!NJ:'OZQ3@28W_2.^DU* +M?6/KX#U^FB9&%/DI1$O'F9@5PS?\.%X^ASD?G=3`I!#T\]>GE8NBO3/RD&C5 +M%-)QV"XHQ%BX3H+#'C'^$0G@%3:\_'_LO&_)4SI!GM2UCOM65[GD$1I+0@LC]L.&!]Y#[C8^:+96 +M)[25%I=9;X'PXA1P@DXDY#&\-A%Z"[L[0\:IM)3E9/^`;XN^+DV<6"8=C[:" +M3;"&40W]<'/-'A(;_M!9\X:LECI3@+X5ZLAC>[:<>Y!'0;8J?NSKI9-C)N,P +MN>!)!8:)>=ZJ`,L>4K`^-[S6K10]Y4;DGI<&AQ*#)V:*+"`>":-)KQ?A1@1] +M`,Y(M-'D_[#X->M'1..1&V1F/ORE8#ODSA+,"1/O/.(5B`G/Q>[GM'D/'KS& +MWDPQ$>Z*%)T*O5R6;+XGP!F4Y(A8D*-VA:-UR3Z#J=$C#Q$H%:-DL5JA*-E4 +M/2LU)M3UU>.G;:''6[8CQ69#"\;`__=YN7ZDL^"&Q1\?9KYJ7RFJC2`+ZE6T +M934]4VWHV"SKK>%[/\F6PX:I$R7'2TVSUQB)&E`.NZ`0XK&J8_!=1I].XS:$ +MNAHIN=?'L:!'D9#%Z_`IQ'[1989@P`\T,1E\7DM,EOCN?3@$S":*R`1:I3ZO +M:;47P;AW?)+;M-5J4W+M)(HYPRR"-E/\6%>VEB1+X@_!I9@M&43*?#LE!"-- +M$P#Z@W[*G@W6?C,>`#V#`(GJ+OZ7O.C@_U;%J2]%K\_\'JA +M%>@@:5*X.XO]961<S:4LVP29KD)V]J/GN)_GR,,-=X#PXV7X3S`8ZK_[.9%^0 +M.+J21NX?8J8:`2XUDE@UV3@,.X1.TZ>AU2BM,0A`C4"BD/\D?=4FRDO;550E=U,A@JHOO"` +M$I7)W6U3DRTN\`3;--+RF0$%%NR?V(_,3O3??LYAN=)L891)[49H& +M[C"*J,ZXJ#:F[8ZH-G)/ZBT/G"37S@FL>X\L+V+YX@I,.;4 +MC?'W)ZW%`:W_.Z5VW"C*],07&?3PH0;!*3J0./+)Y!LOS:;+=(-Y;<$`H5L& +M@GFL86_>M4ZKY[4U!8W!_X<-F.>3>'?9/!.'>P'8 +M9B]V*0_$SG>;5OBV1A&;C3^W/RHTK=[1<]ZG;W`EX]3:F:=H!5WB^>G^&M5> +MPF$ZF%#PFL/DE1GP:YJ1X!>^HUK>9HRGX"_%>=9)?AVAT'G3Y3939O+P_<5" +MT?E#`87Q&$VQ=@1"HFUD]FDROO`:IO08HZY;WC#&'=.+UY\:JTG4=#IH!?LY +M&*).W/1K/C!:.(8UN]&^:=5<*`8,)&*C&HM=/ESMK"9/N='/XX8<\SC$@].U +M'A6!GN_3+7X0J6YHAI^\5+V!0['?F:;29@97VH##N17K9-9:X#`P9A'U85GC +M>WN99M:?74VFX;"%2:;!^=TV7[)2(',^4O:9L?VPX9U>Z.CBE1NFMR^MZ+TNKT2':3PK6&6P4THQQQYUF-M/LK6JO.; +M^^83GER`N")EE$^HIR2BXN$F@3R4>-&7WJ;H\PQVEAI:R*43U6:>IL1JV +M1;N)I1'D0??M9551QF@>%?5'@D0-EV&6)YT`J+LI1F_&=)&#N(XS8Z<,IT'5 +M>>6=%95^7G(QS=)$\(M8L$[*LJ^]J^[+X5O_XYAI;W[]D#&[CAE#_VGHS>>S +ML[8?DT<1!'F>SW>(ZQS38%&=X1?V95Y5\@:4,C5[+_'7H*/X,87A267K973K +MTZ'C/FUU`0FH(!T$.VJ6V*(HSR(Z=NR_.J-RH"3:8$C*;UEMS+!W`,8-'B]J.=UMXS^_?-I:)<6[ +MYI?GN5G^].-O?;])=BKXLU%4.]Q3^):D/I)G#<4FWMA-J19X:QNK3O#<]J[L +MIJ'=;VHOU(GS$V.DOM7A#'$ +M\DG7T;RC-NUQC&KT/NOJJ(G+E-@BI9S[G,E\I?AK.=A)\+4F?]8^1?)G^^Q4 +M_BRQZY,C\F>7OWO5&>]NO/R][)EC-_(A\?+WO'2&J$#'OO;HH]O&O??NQHV; +M'WWL\K%--T\]>^R4F]OQ*[CN!?@"SO(=V[L6^*?.RZ:%?Z&ZZY\?FF/T.Q06 +MN7'NDF,6+\,CU1?>/*Y1S/ZA4_"'"R8'^H.V8,$1(N6;>K/=:NB\9<\='_-.W80<-ZV_F^]:ZHWR2Z@MMR +MZF^OA;8H['6C=JA6RR^NH#Y5/7K%3G7G>EZZY.)-IJ?TWK1=K3?[$;SJ8I_( +MM<'Z(V1U+SBB*?:+(S:(<_:52T:]9:S3-\#_UVE8R_^P8=">]WU^[$KZ]1GM +M>S7:0D=J0FR@___W)L5Z8QE-+TVNVTMCOO7,1^NV[>LI;_6$$V4^',=MML/,]VCJK* +M)JAF6A%8.,D,0JR`C%X&59(&QI?<=`5XI*^ET]I8;=IT^=@C#MBJ;1H:T-VD4B+X%'8FK4-F%Y//1_>\K47"*); +MM,81G;$AY](7>1;LV"="3^_FR8O+D9Q!_,@M1XHA&A,M62':_]+IF.)`1">Z +M(X)Y(F*H>H<%:.`IT3!Q@[KY:)C%;DT$E8>PFIRS5;2:QX>3%H1T+%,BAT%S +M-7G>;H3W3,[Y(X8/540:P0"SJ^/R%U,!'MSDCZ(4H8K@DK/6XE$T=J!(0OO) +M>X?C$6;"I$RK5KN`@[76S:!I%[UNHOSGW,[ARN0GG]3\,+W@^2O:#>O=/GG^ +M,*MTP)WU.#.)9G+F8O:5?2]8A726F-$[Q#CNOD"N^?E?.88*IN/C&SHO':9) +MNB<46'K5*^-A*)=B$S#*G,-9#V_RT1,U=*+B>P*%Q.2-B)_0:4\41"B,B)Q0 +MBN]D5:J2S[.T'K3E$'MYJBDWOU0JELRLXW_:SKBI(7=.?T?+^*!BFM!)UO`< +M1];AAVWF"7V+"\+;6W4N2>/IQ$B"J]F"D959CE\F<*Q(YZ@N5SV^E?WBY%E_ +M11N01L(^`JL9Q5<>_R%GP<$5+D[[Y!>V=_$[<;)2=, +M4;;7^?HKIA*/HJHH@@:O=><2BE`HP"!VB0"7)!0J4A>AS6X+]\`X>79"8[+Z\;9K"'CXD(?8V/7/E4JF&1 +MV!PV#KO0*(E2'A5FU\$$,N4:7BS+IE1-7-Y'G1]%@1NUU#_U4*>A8B462T'9 +M!KR[!VVXGK?JXN@Z(1HM`+/-S%'>ZG&6#@2#P9R@<2"8'`PV!4?@7RWP%Z=1 +M:..6$R,!/A#@,ZI;,-P:'(/A)Q2/Q=*):]?)JH6S]@0[A\(I%.B3"Y_DK7IR +M$R90KEL+?X)OI5+C1S2Q6*+FT:/#.L^SHJ(U->A<++$(DY-.M$6$R\R",O[8 +MLY:Q)@,EA!OI1$ZPKK;`:V^JPE5Q^*4YI_(O0N>?16J+8K[")/+R]/8NCXH$ +MO/;MRS/2;OST"*\M\MJ/H`\M:;&=8=69R;&^9<4M=UZ"Y$*$ZM.[J<4*S/&V+J'L/N>]056[XE@XV*046O5>?8A57GK:I%=JT0* +MR<".OENMI!J1):;T-.3`K'Z._HRS;#_-,!X/TNYZC44)':-PIYH=;"OOFD'9 +M]5$>[,V2U+/VL9";192GP,S)H6]CQ(T\2]3!+06,E/"5"A$5%+K,)MQ:W>7Z +M=*=0=/5$7LW-P`+//V"=06>Z1%?!:QV6H2"S$-"#7,%Y'.J;]/Y[;W/><6N78:T3]A++N`=5$+ +MTD+X:H#I"AGHW'E[W>`NOHW@GI%\-F5BA5$*=#$C`;[B<(.TY.P1Z5*<0I"^DA("N&( +M5IUXPMES3*U&[-O&@=D#?A.&">>`4S\0--*WZ-\'\+GNH&5NEK"CN<&AY*K' +M]$L1M1-3,8CH)FRZR$D%?Q737,@3#&2-,K6>`6.NU:Z')%Y0F#DJYM;:20"4 +ME8&-/.]Q!6N:(#7BG.L,`"^0,+&DD976,'07,#V@#9\'`_'T[=TCA%88Y+>I +M-@#7)@&X?7"+;9>C\XFXVC*3:2!T4Z0ZB::9V$5B/#4^B4)Z9 +M0Y%%!H7HA99+A=IK*TDV*>=:22/":O06'<_<#E)9G2ER3+^&9%YR[1,&++2& +M.+,T'8937G_D81F-Q/0MEC#E],;.H(AM3QZB:\8]_Z7C>+=8,)3][(FHL+,MZ8$L+M..IOU=N7+8,]:#V^^BG +M5JLY[KMI+RYICA[[:YAO/= +M4INO)H_?E^1)]KU+,X.0P\;LW+0;Y+G.CAQ6O);1"C`35*D!.B&4-,BI"A.Z +M3H2`"?4J+-5B2(T5M37NG:Y90GZM"QPLTB\*)7!D8V2105H`#"W&:8;[;3VL +MUCJJ"=<<#*NF(D@>@>Q#SO=.R*IC1U1`"&4AHX%C*47[?\^`)'/9QK;$#3GT +M]H&_-OL33A38LV$J*F]7Z]XZW=\W?,'@!*0N810O%WL4>_Q>K>PE9U=5$*UG +MFW$@0R=S%.)IZE@UN12$HYCOCS',-98L(.F!R`L8#EF4I-93L?T&F +M1=`'9_V?5[$8$76(\A1R\,'+[O4BD?I2\VLY_S-T_KY6_]Q5C#4NEZSUHXH` +M^M0*C053N_%TU^*:-(,`[LT6RMH..5^[+>7YO:5L3^!%]HA&JB]18X7@=3SC +MHD:=U4TY_,^?T55O)O]E"4`+2:L&[YK"V`PP9N0`1-)*4 +M>B*T,0L]I&&/X,8N&1?]`%EHL%9#Y]Z)&$>I/UTLY@AY<]*R'3?QQ^+\5N%R +M/*X9>GI$6/US3^5G,*W07\98ZK6*)HV+(7I[*RCDZY;C.[&AT9*FA,Y!BYG$ +M%@&8:MP)2>E,?`!6!>KVE<-8CQ?KP+G3`;!UK:-,I=\5D\)"-GU+UY&W7NS/:8(3 +M=G(5RPM-335<$XALK_L_J3)DX1]J6#3TPP@^H=UXOVS-"^V@@G/HZM(:--QN +M"1HXYRJ[E!I!N#DLN+21@]-;I\*$WW+*XH*USR@+R0[IC2WH2@6J8N"A-0JP($0YYSR69 +M:1HX+H)!&&G]6^MHN@"Y#_CC&0+:G8;T2\F%MX\XTB"1[:"J;+9U:A2$)OEN +M+W5S40Z<8.X'K@+C/LDGV4'MMA%!0ZE2()(SN5\-R66!X012VR%7#C!>LA/5O1[O<.S1V\J?H\-%5T\_1D5>\KA:,JF.E_: +M9R.T(_5?O!.#%7L>H'@@$O,/P]^I4I$>KFT8Q)^8_J4F#0LE_3KEYK!QL#T1 +M6`W_K[V8NIM5"I3LFR:%F.3<]9+GH4A)J!`&>7K(P&OM:+3[QCSBG4-GZD3. +M/!%N&"S+P(.+"X9_R?G$3U2/D;^@"F9[,-#GD?[V)TC,J19D72B&R:DGI5&SI^EFZI-(AV&&S< +MF-V[Q:!3^PQ8"X][/UNN=R&]!A0+*JF2,Y!]V4+QO08DGH*N')TW57Q650(@*[T9=>V(=Z+"V'BK)LI]5=- +M;)O-PT>;Q;K(92YH*ZH;C.:1:YCH"BT&4>/6^`[W?;TJ=T0 +M258^$`\FIHD#N^#U'2U!.L9K>/_E>JOAKW1Y==V>M9&'B=_3 +M.Q'X<6IO61FA;N6JL_0^:AZ6.N_ZQTZJ9A_13!PQ.0>YF@]8]/_`M-"=Y"W- +M8UQX"!]MAD>4#!PS8*U&]`DUSZC<3>F1:Z$*8INH)C??KA9JO(&)LQX;9='6 +M=UK@PXB(9%+,K\P]B(FLRTZW?7IZ&23KO^6O-I\C^[8Q83;P[IF3R\0MS10( +MG?N/52^FC_>8HB(^'/G@M_Z7AF':^)W +MYL+SF`8^X]:;`W;AT(F$'`FD,2Q.J9"X, +M"XPTG=?Q_5LL!"65:Q^>M[.0:@/#`XVQ[>1ARKE(Q>74?72,`Z=<3*D+;`PQ +M4#(/?HVU8R&:@L%IZGS8:2H*.XC_@#6>@?\>4/8@PW:@!P]$1\UBAD]E]>]?Z=&L':1%G6MLV(!YBS["SZJ1?XPF!FVR? +MJSSZS.XCXN"(SI81 +ML;MX+K\B'OF'DOF_RGO"5@IM\K%J5;@3E!1U1/E*Z#0"+NCIHU*F8>*13XU$ +M1DG4`\^->)"38S),*.?[)!I:F_W2BC=$*G+P8G5B91*!V'J+V4`31^V/5#"D +MQR+50SN3^'M/?T@"P)@C"@RA-HC;GE:O5!-%?U>9/9C.XR=[IW51J&:.FR!_`[QLG!X4F +M>]]F*Y%+B5(&ERHHKY@DZ-$9XM50Y0-18--TC7R&=3A0+:X]&\1>I][9H'%@ +M,C1SMGT[6W6#BTI^=0YNI'@\IL`&;F86)&-[5X&\)-3CG"!A!NI9.K5I5XL` +MW3T@?C<)D2RZ;+A-7<$U"J5T2 +M2OOM7$)IYM?>CQ%IE"''?]*!AL]]UL@6XO-XQ+<[&GFZZ]5[_6$?/APND[T. +M>C:'C+:)Y4^3F\%<0*Z`9C@I@,8&%]F:`A[K(C$<+F;`LGY9*Y,7PF3JL!%& +MO-%-L31I;I!12"7UI\S/';;8]M,@']/J6?M/[`_OLDO7H42?Q+$.Q!OGK#"[WMB;8 +M7>1H/:\HRSS#^VV&+;-?\VPU,O)T=^33#WOT!GDZ#=+(Y],/1CR?!36'G/R/ +MXM!"E)[L<*EDRG7J: +MQ!'Q"*5O(LT%0=2B.#DVWBNDQQ^K[O*56X^!69Z'.2V\ER@,R10?.!_-G$MK +M[)@QHG]ZJZZ1&E)I-.2_T_7V;+M2HEH0P0#9A.H8+XEV(XQFZ&SX@PC'JSJ_ +M&A-7,RB:UPK#FV'BTG]:WY$9EP4^6G;->75Y-\4E2SI?@(&+GF[J53@4W78J +MIX/UFN,^\?7AD1`!9`:TF6>[:@G)H[T/DS\KQ37N)!AN'!GJ0:L4AS,5TG(E +MN8LOT%H==]"/P/6\9RN'R4/GG@>*J/7*9**66X+G/QE%.I[42:,G[MF/SIMJ +M?C&K?(54A#?S%%/H8G+.K'-?BVYMJDZRA1&A=+NU66*LL#+N&/J8]M=U[/+E +M."N-.*F>K\,2QZ]@%E3RDBDO8&DC!MO\R@C!0LUZ7V+4LZB4=L]!7/6DERU% +M\*K3?+$>J/A0H'TOU,[F$:8B\9/-:J-G'[3D0.*_'L^FK3>F3_!5^G]##C`%S&`N%4::QL268+42FD->KR>BEJM17%&;Q`V38QMQ^*TS +M#@(D!%O&19@%YE7B+RVS@LD>VIBW/%XI(%2$DF0(WY-:!:S2P'/J9<^SEK3< +MWNPDII[#)&8;_C(53,L-^^<)\G##IU/9/7JE')8XMJPZVJ+,;MXYE8`Z]V[R +M[<>X_00%V/HE:M*('#:CB\$Y$IP?7UP[4WA4= +M]'LS%I>)XTBKE5=@O`[^&\\\@??`OT6'4E$(]KD!$XY$!RAW9;Z/UX*0Z-C +MPWA[_KCV&5AV6Y/N&*8Z\3"Y]+I1K9LY6B$".*TW>'X&"OYL_0ISAIN4A^*P +M3)Y[&>L+8"F`DHS@ZUJKN_B?(0D-9G9D^)`.\+`YL&K`>W,5(D5+O#-?P\31 +M29>5PH\A9AD>UC*584@@,&^%GH0N*E3`"K4MU(RW'7J'_JY^;*\#[9$A+UB- +M#/U,#TV)F1R0Y'CT`W+\2WN2J+$+9M,/SYLZ07Y8I1$>\3AU.[XNIZ<"$M7& +M3^WVA3@7U+E[!?M+=5@&5YU2I(#W(2/-`F_RQ*Q'2\V*<;S?^E!OOQ,+9-2> +M-1/?ZI;.[J.I_)7"(7V>FVHU/VO%$J*F'?;#(@\Q88G3=R>?Z_,S6:V`&?(( +MW-_:-(P%8'AGE3K"NS*V'_YB=@^-'E=S[FB.6X3C/CI`_&=1@,OUA^Y_?/U37ZM.X#HC/D +MR)FE[FM:.!Q'V/_^,US64F#N.L8T\%MOK7F$=5K*>V!I4B8T0EK<6C4]MBYK +M9IGB@JDUA'5G/_QN]!49_S(6N!AE*LD*S1S\R@Y6:&RA\0%J_>TBEFPE6NR7 +M]"W];1[G/)SW,*]O-.6M_"HOQZ&&"X\6#V`P;I@SP2";YW;X$SX:].M=>A('3%8*JQ-_V\X`O'3MC3-TX[2Z<1ORAM;< +M6%]JW9A?(+X'PJ_=5"I?R>'O^X-38=7CKCV'[]LX.>AO"AJ/"$ZE36#;OK"] +MP_]=-';,?WYDN`T=(YB_LW^/#.)A\O!;7!4HT3E9=29)KIG`&4(,F613L95+ +M[8"[F"`,*OPHGXGU6\V]8`GM_>AC<,6!&;!GW?0-O2M^R09L/;:]F;J<"OGQ +MI[Q=U_Z07WU#A]?6A(R'VSLD9KS_SL6,CWUQ])@QU\;6P5[TS3]))HO.?#JQ(Y4(<"$6G"XA@FLV^[P:HT+U'PE9"Y +MVBOC%@=](/51U]STL;J?^#\H!PA12U+R(]= +M]GD!K>B +MNM_'9OO]IB$D5,NLJ="'9,::V8YMD%]C"_A7\B3V:];W-P>G;J!H-CSD6`Z$ +M[=P38`+(0_"O]WT._*B9?FJ/YS0UGL=Z5',>.M?>73L`2JX>5HL"-XYP1:7+ +M=-P:0Y`_*G!4@\KB;BR;H+5T](BL&UYBNE_I*)'W>^]DFEJ,VM%A*@E'X6T* +MC$AXZ3D$&WIJ/L@<39'<1D%L1T>3&5-^;5JQUBOS4E`K(>!MRNJUZ:K7CJ8^ +M2[2O'?U@KH)D)ST)JX(Z(]"\J/U*;A1N54R'R8]O)0XVF6?Q;:@Z?DFGAI0( +MU:H5922M<+X3B1&@CMIS-F0F]4.CV$7>/XTM)>3\;#Z+11I2`U/%*XMR,U6] +M%O/RZ5+*M9)ZADDV+'::EC[SC=,MP4; +MIEMI&M;V?@UK?_^&F>DW8X01#A,G9L"S%+7I'4Y%\6EE>"D*$SICOP>S"H\0 +M,%$:OLT+?@+KKV/A_6BWCBU]S442)H.T4=G&7;M`T-NTN,!U3L6M..(+C +MM^^UO]<2R*>^J<\VH5/:TSZH;1V!KLE'B(@A!6%?^!C9WU`D#>19A,ZBIVL3 +M:3)MS<(OVW']FW>?-9_,5.E?FZA8* +MQ!Y/R'"CQ*Z<=S"7CA](/M86SJ*K)OFCNR$,\\5[,,/L'E^D@A9/\=Z35=Q* +MY70M"I&&&3\>4YW6:U%WP?P>IY"I_PV/E";ZJ\5X&MJ95E[5]7H(RU6'$M_^ +MO;Q'4(YB@+,H'Z`N3UY209'T1`0]H1H6<\^O_+$1+M;[I]W1K=6&AQ]F>798 +M33G]>@S)@+DUZ9=256OC,6#4RGTJF<4ZMD:R2>P,CQ<:D'59GX`"6"C.Q%2: +M>D$TWE56KG73E7MO/9Z/T9UXB5D/(WQ#6@83)&D7G_=7U.U=`8?1Q32]#$ZX +M%N,;:(=YM!LECNYWC:ZB1L,)=E3ROS8L4A7,MMBK1B8/RE#;%`&-,6L+;E-3 +M'%4_2KM4M5##KV8H5Z'V1J8]S=5Q%UQ?L%80.FIZ]%WBTHV[S(=/C+O,",'A +MA8%BC,N*)9XAQ(L._[;`VGA+["9$LA$C#1Z>]#@K+H;DD0U9,#1**!U%+3#_ +M#OW,M1R54[.BA;%9JHFT2S%=)>@[.F(>!OR.^*8) +M^$WE@-]<.L@+C[,T'=J-T3]J.AM&.PC864W\\]L,7`T3_[S.XOG96H-8S?K" +MHY3<\_GY9:8ZT&[!;-+;H7TB':P\M+TYH/]TZ*@U?<NY>ZE9TA;(:!-/CR,8HC;!6I3`[8`FVWB`IP+J8*4!D\"(/*]NM/13Q +MVACA%]`VBTA90[J`&&GG!"N#]>G6-G`1X7_:^7\Z-@0:0+O0_"S#/\O`SRS= +MST["BR?^<"B=-B)^<_%&/>,C1!?A"O +M0"XJ&QK`>NN/I!]-+8[E'JSZ$$7OQ"'0,((X30ETZ]^^A:Q#,(+Y>_B'IFE^ +M66&8\2)HE+J,U*(I=Q10E+X(>X:;L_'6"]JX$Q=,"8[C#F^OW^%-MW0?QY*> +M=F\W\[\LQ5;Y31H#;G"7YB"CAQ#_5K?ESRTEVX72D(6Z(1W\4_I5;91VJD1I +M#]BY*&UVX@Z0O1^[I7M[5YUWBRF;ZM?JL-ZHC=^(WP)Q!`O:I3?;=&]:+SU* +M!Q!0827QSM:]_DP:I_LN.?4#?7OK][[@!/XS#>?XLB8(D4C$CJ93S(%EZ3%?,1$NCU9 +M/&%CYG;];9*6'Z'MC"O/2,;!"@R-K2*(DS%L!AH+K1N"S:P7?6AL?)^[%BP@ +M\;^.TMNJWK>U_7]Z86_W1@![JXHAKO,[XCQ_S-S$MCM +M5#:%!X912H[\V;J0/#[OXG,S3'[I6H$'U-8C[9):+X0#)0\92VRNI)//(.0V +MP\:HT$$E``EDJO39BH7:LY8!4'N<,<]C=KDPL?U,H0O<8:OA9\-\ +M9BD:S4U5E91XZ)+X(3'K1P+HA.WFZ7MZ*F7>\[`HHT0(+(2]9F-T!="(YJ'$ +MPW]'?LO$'9^WQ:@E9$B)?W-R)+K=5K:<7Q!\/LP15_,D$:LA@6>'K?KW'&F/4W3-T;U<'4+0R%KCC@Q,4%N^4$HZLFMG_# +M#1//33/'OAB"Y;C"FD)QG13H^%)SXQ4T9Z465E-3#+X*$]?NKZ(?R$P9YT7! +M^RJ6PC@A(CB';]Y84PQIS)SA!"42NL');4U8Y`R?#"A3H/K/KQ(4VEP[TFV6 +M]U)F7[O-RB%CQO)FX=,M?O\-/NUUA+/X!*71VW`7^.(Q,3FI,B/-X\\5::,VX-6 +MPGIU':R(<2]_W6IRR>O70D?$6VOF>E%)CL(D4F5XJQ[FE`,J[7X'Y:F9_@## +M0%C/PV\]>H$GP\:MRFL +M%,3,N'AK3=#&_!`MF3*YU3#0J6LZ:99S-4\.276A$SMRM`Q$1#*7I8PSYUFP +M_A"\8HQRZI'($]DIT\F$B05])KV%*A +MK29E!UVUE:12D'+3OGB$A)!.V=GTU]0.ND&8O`@ED>I`_WLBJNBGDWH*DWM$ +M!5_#KJ!YZI,?;,5*5MB&O%2@MZADUY7$K2Z2L6P!BX0:'[_KN\=ZO1+=-A1< +M5*A!"!L%`[3);.@<2,R/6_`-R!0&??"?-8%7HEE:0!B&Y74IALS9LX-&%XFD +M>NB_FO2?*]W5]+>R(PMYCRB$*YN6:J"^M`]#.L2\FPN3']MK.00'A-GJ\.L15)32TXAL:A\4\=O;W+E8?TR*LC\V45KG%K-8\:KIBOJP\,A0IS,*UW35.;977T +MKMZ`UPQK>00!PFGC'HY[Y>(:!J?6Z@=OF4*9!U4/:7]=I36B[F3U#_RI>DA4 +ME#5O14H*I)C,I2(!H@LF8R"8UOY@Q%G0"-J%P18O[\KFRMXI99%6>1>&[2'APFFQ9&U+ +M!YQ]-^QO10J+!E-:_[>.TYARX:LB< +M"M[7A`%\#V0UT&:!'&?%85?+XV/$5YF.NP0^ZN^V'3_$K+!APOT][CIYK=^, +MGWB4R.D=%&K+4E8Q_T5T<2U%I&0,B,P!4<"I(:=OK-L3R!WQ9.8*[ZUT2<`= +M@BA@%@M31S<]^Y`3"P=3.+6H;RPX.V4OL`A(6LJ9\JMC`.#IG`_HJD>;;8+_ +M1X,-WOP;7`VPO?LP2&1];")-K/%:54Q9!%%X7O!IY%F%R"T`*D!O0MZ1KV<\FC2WG]Y;X6 +M\L=\SRW1$1SFGUD;K*B:NAJ7&-(/RH"4\#-T+Y0)04^H3%H*K=5==BO0^#() +M+C9$U[SDB@7TBG[PE"1@FJL-S:\KZ!(N?^7,,48/\TPEW-JP&I04&PW2OPSC +M*;Z,587%F4#*].E!)%;SO=[ZR]QB+J=24JS/J1MM#^?BJO//GR--ZVL?0(^K +M1Q(N76YI3;`$VT]&RJ]DH,'E>B$LDWA1Z=GJ+@M/4'6*`Z\SD9DZW.@VL"8& +MLHHBM#HG25Y#WVWB:^#B?Y'W&;``=S4P=!?N0FD[N&6Y^#G8/LMXLI'^XUHB +MWU9Q1(,5)GZV%!Z*=;)X$!NW_WR=)Y3Z$*MU'/W1]R;1<@2-F\Q:F+SXM,;8 +M$$+[7IUK;?#FM-$D.SW30KJ!5,SJ\&URT:Z:9LS+]].0<47C +M^%LN)-M2B#VG=G*(,)@Q'&1.^AKU3RC$).U"_PT-,^ZCLRV/]GVN4GXWA:>9 +M\G:EFHX8!X!F#ZY6L'G%?VN6N'SAY5CY$O_&(K@]FN\KH!`KN=I4!B7W5#\" +M`PA/RJ8#];.3P<7.GQS$[[S@`T^O/-Z;M);0I$HO6+F0D?0Q6D."O*810=,S2.UCM$YK_B4&_=\9,B"-RI?48,'845!F +M1(9FFF1H#MRY#,WI]^T@0W-X_B5PUS1-)&&\%22U%=^G,Y7BTA/)V,`%NHD" +M.&N,=4B@U9_QM_)I9R5#74>UXBAHDRJNEE](%Z_';MF`OSG.]$%S8*YOVG3E +M7J?]($X<:TOYR,HK2)`>IGW*HAL9D.9C2H`_IMJ%;$K7MZ)9H=_2M$T%4]N# +MR;A-!8WI8%+O)/OQHB]@JNU+%2HU*S&E/Q7J^!B\X:C];GNGK458/>&!0]34 +MU?('I__;_R?'Y_4;JJ<]\\F5C7G&I=P9@E5B47/ZEC\/Y?,-U06_?7AE8S;5 +MC&\/GZ!SCE]0D&7MO;]K3#?CMI0C,@9?XG(H/B2 +M^S$KGG>%;`K/.?O]6FHWZRE2M9A8D927)&ZY``_.)J:%0&^?"`9DKU*>`77K +ML*H)8E^U"I>3U$10UI%[Z:G$MX@FP?EYJP93(9K%-#JKM!_D4(BJ6SINWP]' +M3M$%ABWJK8.1%^FD69HK-WGC34;D##R#7#$KA+`LM^AB]5E!4R%)P1EEA9Q/ +M'UL.Y%Q$Z`(DALD4D/Q'\;WR.R!HA'6M(CO()AS_6VZ$Q\(IBA,8E#5@H/`( +MZ8AJPV7GD-UQ2ZJ<0@3BN'X_\>(%PB&<10)S@9W3QUIY(6#NRG@XUCIQ40\%-BUV'Q."O;-=A\NE(#;X[N/9PL*!0.N*U +M4+C(L\+BO#R^\R+T41H<5N+5(>\-NOZIR?/=.!,KJ8]7!&:9"C#U*$)PEMJ> +MA*Y_?1L+K]WRI`6ZU@462-_WUC]C/+)"*[,HO^(U1XJ, +MQ.36P3'9DH;R46Q1T&A".DD*S,R_HN>+A*[JC;%8,J0=5#7+97&E8H0G98;5 +MU`#,:QE?T#O%GU'/E,W#S49<@7W?R7+*%!& +M^JKAU.56OCU>JF!@3#+/W +M=R68H8[\T)(6/:IH\I'ZD#EC*03'\%Q16+1#%%I`4K(B\SR_'U9[.&YF'[MX +M,86]YNKXLXMQG855P&("2`44.[R'6`A<`L;0% +MN)UA9`I752Z;SY9U80I!+6CRQY0O;8H5":M,9Y6Y>:Q(H77D5$D\&MQG?J*V +M@U3)%0W,8L:4QJ0\=.\QN((`X@)!XL'5A8.3;]&N",X5(1BIL.&`1UX9Z"1U53V1(ZXBC>LHCTAD6Q#38NG1VZF(Y03M5.\/$*R7=5",U +MJU5/1\IM6GD+6,V59O07B/4\D\TP"B;;RY=A4IG*8-**=?<3;Q[G,Y<9V,6- +MA_@5Z)DJW*.>"JK3`+J6H2NP9,N>\4F2WJ+%BKG8YEYA%1=*0YH><X3+]"43+<9E'PW'`(46+XK>-8++B:[`@]D_C$/9EX +MM(0,%"6.-2=+'Y60>E8F#*QO&6.+1S]<`^&!?9U_&?!/P,#21C!L@Q"JB=P? +M1=+`BBPZCYREGXBN(_<9&,H\:=Y\ZO61:@EO3B"W)9O)8#UZR6(VQR40)MHO +M-/"S6EV?=MUC*=$2YLF.E:DOK;,"7=C)E"YO`?<%)A:Z8(?NK>JR%0]N16OV +ML"HI+2AHXN%G]Y)1Q@!Z3FGY*4+I09[LC%/NG`K793Q?IYTZY3P4.C=]GV*C +MRN5120$O147#.C"-WNBKUY*&#CSYE_M;6YCNE3"Y=(LP"7.#L5Z8ST7@5<&Q +M"']@A2-&3KH6NV/P'1NFG"5=27;IA__E!D+I@F/,19.]$ICG%%T]0A=P]L1S +M3*[Z9R."SW!0FN#H]X]N)IG3OZ#I@61XE8Q'C#2IBDE(IW@IA2B;[Y.J2G;!9D6F)XJ\Y*XP?:1SFSX_079@G6#5UZ-B=5%MK0O +M]!P.?DY8FVTSESSI+:'-P0("]6IPOYN^21F"K9PAX(`RC%"T-ELJ%BS,$MUI +M%:QU2AND#AERHD?U?6`F?/NISJH378,_0`=/?86)-D3VM_06V:_S4K.K#8>> +ME-5Y)7$IPF3[*^A5V(P^P0[*7E0@G0./-24.K55G^Z,K6-,T3'PY,T(DR@PN +M)<)BR"#+2"0>7A6+M6<+P:B6T=4D6`Q0&RGD`6>EB3.H\.+`)Y6U)[WJ9/-K +MRMJ,HI(5"=&S +M1Y=88;='[\U'&9V/LB*P)^7XV9NV?>CE\F@UB$,-AWZ=0R.8:6YAGN8) +MO='VKLX>_W-N+AH6Y\*/M*AB"O/,L#V,*,N;VCH=G+8/'KV@?JEP-7G&]C4L +M>04>5086]IF+H=?71!Y*>)82];CA$PV>?HLL@_3 +M)QB\A-I%*3*LTW=ZRZ>14#>R=MHAYZ,#6:9)X:4'/3"WR_/*B`\Y9"S\8PG, +MJ^%FN/\*.""W11CGB_@?[<.Z+!C>\8EQJ*671I:B)P;1@E/3/%4+B;I>9/R? +M&)25BU$X/R`GB87DZ$[R>"H^:&UM#>A!`?RU&B'2]"\<9$)%DS1I"H5A-VV; +M<,6A?(.C/0X[>ABU..$E)!F##?N,#.W%X`#[9L:;[5W=#?TQJ[]1SR[YS)=Z +M*RJ+QS%52B_3??(NG*+*%F7"2J#IQ]9_Z.6* +M[.C51/X<859.Y&^L[W4'`@G7[G9@(\[C<`(CE==UDWYQ6N'Z7+P#QU%3?='^ +M&CISOLLWB.^9];;'0#AAV;+J^RR&D?WK+XD:E6@2-&-13^25A?AS]60B=<:&65":76\7!J`YE'6P?VL.&G9R(+]%5)%N&M.H_TJQ@M5]]E/9)P +M@E]P!%0BP\4\4WPJ?#K?U;;8H7/4\2+SH$Z`L!UM/4UM1S'"@6RAOX)/7_PT +M'O/TO&"G$3Q+C%'(O*19CC*8M#*+B+8-)I`RPQ%ST3X5<;MUW;T8Z_W_O"WVU[_(+'^/>/+;CJBHT;@VW.F,398W;#!Z;3 +MU;'IC/G'].A?^A^;-E8__^V%H_\8OC^MX^]V!M!H`6,>KOK1$]?MZ.J+QOSK +MTL7**\>M`>=N=>_HMR1S>#1-IQ.^P/RX;\\NY.3>;K_OEPU^\9066M+_? +M$RX:\V9UVVB/&#MY\HKZCQC1SRL7K!OU+NL/>\'5QRE9&;`J#GN?NVZZ0L_# +M;31O__>FXD5COO+=MT;TV?#*CX[X[(^/W[OC%]_K*7_$"R_Z2K3CBRH7?&;$ +M18_`:^YH)F+(;F?7Q>=8T_$57W5\\-/66J3-:Z19KWG\6OK[N$%B/,T=]X-A# +M;MQE2NNTF=/K/W!$#Y\P^:TIK;-&?X&Q-^WRL[99^/7[3\.=ZO;3LOT=U8-? +MW>W_;J=/>[].GS&K8X>=/FUZ:]N_U>DSWJ_39TS9^4YO:YTR9<>=/N-_L=/) +M6RMDJA.W_#S6[_.#`SM@;KY?AZ>^^U_M':W3=]#C%_ZQ.G-::\>LZ:-W^0\O +MOFW6E)FM,W>^SV>UMDT;O8\^LN=N;=-:9TYOV\E.[_[J.U/A)=IVV.OM;?\+ +MO3ZD>IU2Y.!C3:4\?6W/3X=UM1,]#XV>.OI4&?/5!4%;V_36]BDS1N_Z>UZ] +MHWWFK!FM,W:R[U]YZN/M;3L:;^Q\:%=[QZR=[/QCMK_;-FM6:_NL'<_YMO_% +M.>]FVOO\ZH%WS8[U^Z?_,;%MRM09[]OQ)T^XMAUFZZQI.^SY]AG36MNG3MMA +MS\^:/JUCIV?]RS,.;VN?OJ,=9>P!ITYHZX"UUC'MW^C[*5-:I^]@T[BV[PEX +M[$YW_O^?_8MMX.EJ?PM/)?,??10S9=ON.)(E%X0JH'TVUG*LJ).XFI"IE%3( +M9!F62,)-X/:;+AK[6CJMSQJ;-ET^YH)/C]%'$CP!73[VM1,N)7#CNX?!Z871 +M)]-%EKY34BJ8GJ/J3'@BU@K$DHNV.#WGP$/GO>/+".C123E.I#$[T+A?#BA$ +M/T<>FJO)64^I\C6"7!F0W_8NW-PQ2WWB^:3F<,`9%3Q1&Z0+Y2]5I".+PA,I +M+CLT50L*=X0TW7XY='[U9^DO3J12:(!R`BLWKO#6S>K85#W@R#U70TO[9VSO +M6@>;G,*!K7/7LN%5*EDD8WSN(M'[*G#D87F60GR+W%+9RTT2T!%6:N<19^]3 +M>F?EQD5+9T$G[_-Z;C62YNQGE'`HK>.7AYR;AA#%$CK/_&5[%UF>X68X:$?] +M6-2KJB.*I0@&/7*C%'0%',DQ/F"J#=6+:S)%/)J?]S>F'2U#!_8@J3,.$30- +MVK2DV#=SQJ;J?C^#0/&>93P;$5 +MOX\$;W<]C$I@=/Z50J:]=`Z4H(K<92[\/D_Z",^\;)K<>9[X#^":9\* +MP[[[/M3:#[@9+`9K2??W5!"*V'(,=`;5350*,>26\^*?,&T@*)8@[V5<./[# +M6_9YJ%,A>EO>0*_7CR4*TJ_5Y(=^!0V:I-VB;4C +MV!T*7$3+C[K>6`JFS>8H"F$+=#4S`;JP3(QB@T1*0JNU%,Q=?IQ4N]B(H15< +M?YZX_\-YN!L5T*MZIA+IQ=[_87P%NK$*YAO=,'B=/B_7WZ+1*EA#E_\/*V+E +MK#R',8Z2)##B[1Y2K>2R?E^`6KY"%>85F/K6(C]0TR],GO\-`C(8);9LVNI^ +M1DSA](N0<$WF*::[OGCB8EUNC^K>86+M3=`<,">N5(@3JV=*(!^K2)8.0ZB' +M4-3/1&O7WL1<>D6[@M]#"/O%8P3;;58+LT\%0E5A\1$$5%(00Z6I#J3`F]0R +MAXFG?\#$-)B/I](JJ1UOJ:F.+\,$:`X3+SQ+.H&PF,I5N)9FAP$X)4^]<6'. +M]3,4/=3=!,OEP0>9X9N[2S*S_$A6&T?H"J;%5",5I3"+R>U[YHKBD.-\&8G* +MV`C#6[%1IDI,XB9APZ9+,6%&P3P9OQ?8+#7(.;\8.KM?I?C.5:0CH#*RP"KJ +M2QXP'8U2C@ON$8V5*9:0R@`Z9ZUJ(MBBH<2/3XI5MX6))U\;`175<>5H1-I- +M3[]4F/C07748)>;]"NU/,6VKC>>\#!C:/($8U"OHF,E0@I'@"%:"K1'8DZ(%GMQAAP370GKE7T65AXH.?P.6:"GB\ +M(S/:`0;K9*@M@!AM['JFB`3,=4?,9;/,FR^&\0GZS)9`ER['!\HR0V'BN2\@ +M)``\&!BTW3_2;4^R8C\G-M5F#]O!,>VT&G?G +M>5\I(>)")0'(X,#T!>L521GF%1ISF;CL&]PO)4_0,`((K[/D:%C5V2\-QM&P44*W +M[+>=G"V>N83(9C84(BNOE/LK907"/('\UMY>,]G0&!/1`B,1Y\9F-7NX]]S; +M'MA\)922(*.`^IRWDJZH.Y#-1Q6$-Z'M1@26+86T+G^C,H1W,*L?W"4'L%!(?`GO_2WR@I?&J% +MV9:RB!Z!7R/LF*6*U4C%-J.LWT)E`Q%?/^!2^S]!]XB96'Q55E.;$&JH=$)@^O7QZ9[ +M\Y#S9`-/79B6S1$3#PX&!)Y1-(O46@`..$RL]``.T33,\E8YF"C.JDMRMU?$__S-G,)/';E`27CHW +M3OA&NCTTXHH?RTTM^"DRI(7)QM-L&(XV,;&=2Q*8112U@J<>AXGQQ@[!MIYJ +M&"QLT%F8G/7G&.YL:I#G30A]/^89J(X_?Y;*[Y7[I+4EJR:?$([-0XFO?8-- +M>6)@*HY!)=^ORAFHNY#`")$V+WZHJT)6C:#_N"5:4!'-2Y`EZ)JHSUS]:43@ +M??6_F-`>%Q(#VGP-CX4WQ^D9E5MP +M2H8!+R(E098,&CDA9SJ22\7.=/@AUT7#L<@5 +M#1-O[(.5+0KPY*.%XPX5)"4Y"X%RI,U!4BD*\5S"32]TQO\0'Z'$<&5WVZQV +MM]W6$_D_*\:3D2D$E0(]W4UQPKQ@$3=G8%"H/AVH;"--KZF+9V>$#)Y8O$))[C78)-6EEH:=8( +M4D8')X9M7$+BHLFQLF\]%V&F1&L'E1F#=L%9/-L;,&@3CYL",^,(B$6E`TO[ +M_%NMQ[%!]@W^"[Y.%8-UA8C>+QIV":*`8-VHCV+7\#\&^5P,$R^_;4"\,([H +MY^51TM(81X*`Z6TQR_SYL./T62.2HCQSHB>E&+"KSN\>T2=\<(E:&8M@-@(P +M$TB>X>,!&QQZ?&%$^^2$,5ZCX6&+_/6CR./%@ZA.NM))]&6!N*G&E9ZAV<@[ +M5,$5]!PRFP1Q6F7G\<]8/-_8^R)KX`?K20L2/8\U!?##E6QRI2SU\S!3W]O% +MQRV,`-`:FEPL#R6;7M4%5V"$"G!L#@8COX(<(C"7:82C8F`U'FSPB9]=7(CH +MY!H9_*?L>:'SP>_P^NJE@`F#1Q@OI,X`T)X//8+%`7U48$X]V8_N8.Q]JR]X +M`V4ZJ,?Y8[!BPRV3.R1^)=Z&^@*6*-?-,0^8AJ;R%DB[_=H!C`E@I4>!RM,0 +M/%IG'H/U/.HW#*9E%(BA3L#N&AQ*S+P=IJZ9H+C+]&/\!TO2,E0=A-T`Q]&2 +MAU$\,@8]<$;-%!D%%HD[P@CG,DN/#3GG'^KWP5)`!!J>9GDM*;296;#0A5<= +M[PKK/2X6\,K[W)*]2)S[7J1.R64]Z4&41M=L]2JPQ4ZDTAB,%2*TM1VF[M=H +M/[R)'<_O1,`-F_L!:SU6G\U*NO_$K +M&3I^&DYLYG40HRJUQ;#0O'.H^`M\Q*"/0(,M-[*@N=>'\N2DTQG(Z5=#?\%' +M?O9F.EIJ^'_B_US.VTIO#LL^M$6W/!P&7:5C3H=!`.,Y>\E?$<;+9P9F+HR! +M;4VE&/<#EY$AU+DGHL,M&WL8LV"P%O,,9[!;[]4:G&X)`P`:DJ>L0%37@S;+ +MLBQS"4')I]\+&YDS_0#VJ\`F5)@'7MZ<8/TJN"@M3653EF$,G4N?9W=>9.Z5 +MT)6E;8K7(O?_S$1()99SX+$=&DEZ4UZJ^:B#YV!;YJ]?'B2K^<>WAPK +M;!0$\)1B#[,RX?!.\BTU!.?4N>I8H.,KUH%BB^J'ABF?7(;P.G0`>8+A +MY%+_CA_0J9BGI>#7*;Y=8GI*XH\UFM\P#J9:R$V%B2M6":]>'NZ(>]00?(1F +MH!C1/A-Q<)DIL7S>'U'_@\O5.>31Y_;KK@2/I@23B[;D5U8;$7)IB8Z."=ED +M;9#,"(9D^I3P%`;,,%!FU>ECM'-$"6$<2CA#H(03=PY*>,LY.Q#ME'Q4N\\F&M'2=E?,'*C?#]S"F;J@?> +M\<75`8N)Y)BAJ)8H06??+*Z$MQ]3E1#J2&!)#*!HDTKU^=A?:$/!D=M=GX0Q +M3H*N^U!BY?^!R5-:$\&1"GIP'8Q(*I*>18;@9[_164VLO%-_A=Y$;QD)SR*% +M]<0[,J!MS1J$S2-SL91=3@!+CK^-06UF0++9T]V"=K!JU1.'I1Y\QIFZH? +M_F[/:N7Q8-R,U7Y4I(?$C)-[GVTZ&],4$YC]H`BC0B6E:5H^4AO1O1R-%N\P +M*3CM3-)\$M+A>,MX;^S.LLBFXT$ +MAQ+Y%XG>&E<%A?ULA24CE[%RXZ)%L]HV5??[Z*=6PYTO]/`MUP27!KZEM[=PV25>W\PVAI;\]6@72J'O25(.L>0#`A9R8`O^1 +M'1SH50ICU0`)T,YAM[08DEJS`FO"F6&B_P6VBYLU5[FT&OAJL/ +MRBF]1'98%9B+!QTZW_VG/;G9!^2(E/9\M>QHMLP1*ZRTYXU%1Q>)SM=0-J;L +MO*4(;X:)]7LA96`)BZ]-E`(](VCG)7]QN>@M\&EIT"K+"8\+.NAE.Z?E#R7> +M?3R%^W*NB,7Z48_;&ZPAX^4WAX[S6?#[H3'DFG$PK#DP]BZY]U_!WKW[<`_Y +MSFMTMHRVT11T\>W[:1M`*]3G]D3QID1HD<4D-[:AGD%5 +MY-]@Y`]>:$+WO6X_G9O#Y!,G*D$^G0HBW,90P[R#_(I4%OO$`-=B5C.6\KEV +MBCMTOCZ>CM.PI>$$(81G*67-UH;;SNNL.I<];];LU\>;\AB<4Q9SA,SVT'EV +M;Q/WQ*EP_"+YMMG-#25W/53)4`2#&,_`61?A;(MX`Y3@ +MC]X`851>?Y;C\MK?RJGZH=!YA([8.:03!)-(_D0)STGB6Y1<=&\.G#UW-1:J +MMXH!8/\*Z8&S`WI/,I4)KWY1^R$$6L'9%^&*T@F)V%[=DRW[5A*KQG"L.)^M +M&V4!95]"JD&>!S3WP`J![7WJ/^85M6B@T(>[A1&-*TW61:2\8"WG@37A"YR- +MS^9\+!<3TAC;D)S[@F6^-"\O]A^T/5I#[ZJG+^+!/G.LUXNF355;)ZYL5?7% +M:N?!U4*0A4<_*U$KXA?.5(B^BYC!2L2[%/$!$$:V+]L?]00F_Q9)19^UY83. +MSQ["#:).N]!YK930BN^_Z?G5#&&;PA`V^,>\Z'@R\)N7X;+N?KQ[1/HS3-S\ +M`RD[Q;!#C#8@8MX7F!\P/^TJ7IX_D[1CS*<:7&(TDTRGR4KJ\B@IBX.!&]ZX +M.60/B^"%#CF)`;NCX/5SQ8#X2R*W+!5U`E.A.CM,>%FYO-!9^YM84;20>-FU +MYYV[L_@=!H!5#-,E=F&8)#I=27&#)5^&X4AC$)_IT&CJ+ODRUP:61$K6/J:2 +MN_"]=VAA>K#/^F0)U!K@?@J3KQT*O@CYN[P3I()5>!+&NL<@Y9:13%?"4_XA +M0>/<>2O\)AB\[$SI=^4NMX6VN'(_,E+^,RIZ]KUGN+%CV` +M$\RAAYDS'>5CMVJM$;@&'E1U#OU8C&0E+G9K[\0XBZZ;8F2*JPU_:NB68D;! +MG='092HDD*'(Z>`:I(.C8GQ].Y;43)R;@/E03\G8YWI08IZ+!]I@L?_YO>,9 +MR*,G>>@<="&F+['GB$N*_':R9RA-2S1DM.]2O)+F*Q0"EUJ +M[G/.."7^7X=87GM>)(^\'5_0!-DH6\+Q`\JBV'-%LMNVX/A?F$/E!S^@""C, +MA+QK))81VMK?9^C8`V4_X,W%$M$:T<<'#)HEYU^US,OFA!![Y<8E73BA]SWM +M+;!KXZ\]I:ON,]A'Q=RQ`<\US/DA-FH%>MR4%XT_X`YW.0[M<0_M(AQGFRE><)0-?7BY&.AK6(' +MIMG6$U&!R4M_A(%5C(A>D96$B"Q59,3$H-]LI9'WF`99BW-;MTZ\%D_<2%,:HK. +MI!`X5^)0"J>[,`>YE7.0V.H6/;&4(8OIDI+[*PR)",-#2Q@+3%ACN7PN^F/[ +MSKIP-:I$&8&"Z4JP>,&6.R]AR`-%/0,3\Q1558JFA\EEWZ^)9&#&I-!;K/"+ +MP-)]\-IEO#.:^'GRLOU%8LA0@61SL"^\=(\;('&-L?HOW<-J489!M.;XK`E* +M:>*G;0(J*7`_^AG#V6A(&MQ*N8B_8#(S/L-%>/*CZ$8MAD%PVHC"(J%;]O\+ +M@5`#J#@$"_\AQRSZ@N3N1/WH+5:(F`%IR>N0>FQ?-K_0AYV'&\(M<\MAXA0/ +M`ZE\ZAO!U:KK$P<<1(L*[4BQ5!K4%!&T)5[G&AX^'!/&KO#- +MR)*,&I%3M['22I?]2GOB'/>1WF3(+H+IG5_A(%&,"'Z,UBIIDA;80$E$P!WJO@,@U6Z-RW +M#H\D3;ACY9D&G]%Q0O4KR!L2'*NX"D9";!P>G`X6PN$M%O.$]WCJ;XB+61>1 +MOY4.EF7A!,,.G_Y[Y<9ERU0L4-U/\22'B1D>YP0S<':U\`5X,RT]K&B(X7D_ +M6ZN06(H]F.['-&1A\J)).+5]L(-_7TGV")WL2IZ70PF_9Z])I6V9F(ODA/1T +M`)=A_(ELG.-`>L$Z]THR3SQ>&F;X=A!>5]^$#SX:2F7VSW*YFK:4/R9N/8EPY?"IIY-]Q*^"ZQ93'?FLFL0+3GN.[B,_QM[U0C@R;+"YS\OVV=_4HM$HJ&$87,$:C1H@3 +M]KJAN3KGS91-O:$SX0_#)<4666;3FE,U+`=<3BNXSR6T'_5BC9TU(\1T7F0' +MT`U^KYW[FW8O\1F5*\4EDKL?0X1#+%=;T3+NT$AU(T+B)1[(03L1@:>,V@,Y +M=?;2+@9XA4].90U!1L3;[#^,'>RI>76B*A\6C1?P;"@3J()R'!MJL47@4'9& +M6=]EQ3(LO(43##JC[)%O3EAAQE3PG%34B_)! +MA36Y;19G7B"1L3UV?.;6!YA/^X$L^!P!VA65ZN"H:C$SJ*M4U/4+73#H+4O` +M)\'TPMG?06Y30ABR6))X_7`R(&VCLEOPD+P7;89;JM.&Y&E_00JEJ3^GKF&1 +M7N>3-[MQPCV>'[UD4G*#!G["=@L+K6#P%X^7#,S(.C$/T6^#.C:ELA5T6W.? +M-)5?OG9I*HOR8KE!0<8C-'D];$E("\Q$3./N7=29+G-F#Z/CK2]/&&BQ#;*I +M<0J=@5U13+@@%->XR4//S]M\?+Q:B5Z_Y*'^M#;M;ICXZ#8&)<$[]B.Y=`2_ +MH/0W$VWG%-9?H"LZ%,/SL%G=J8<5HTCETA8K1%,0#YR,((*:*>B-#^\<>N/7 +M/]T!>F/CQNK;:DNM)G%'G8G[Z>[,W:_NPHW]X$\YO8:8 +M(*N,Q22(J55<^0:&84FQKR#7GT!R>Q6<.HT'XOF2@Y9*T:P.M^4AX.R<`-OL +MS%F;J@>T_`Q#!=WW=*B07?`G7'LMI=6+S,!TPWBZ#1,W`/K +MO`L80:(Z[Y4;.TUH3HG>V5U"H7]XD-P,_<8P^?`<^U2X54MJ[?J)YFYCD(BR +M57"IHN0A8$7]:C6"@`V3+Z4E:M5@UD@V^FK6^2RHD2U(!0#Z^JKY>DPQG((\ +MBK]:0Q=U,YK[XD.RC.X'CXK1CTKC$@[0B#SWB]BDL@AER"D<;]"?S\)ZE,/LK"+!\Z +M2B`C(U +M:LAA5SKGTTBWFI?EZRH_2->(J,4@][&7!%C\J[^SHB(QN4ON-]U_VP`1X!;8.V'BS?4F\2'H3J$_2&6) +M&QG/MU944D>@:)6)V.9EUZLNC'<:FOE;S\)UJZ`CJFB_I&<;=\6G#U8UQZ)! +MI$X>;-<4[ZFG?]S*=>&6\BEH7/>]>4^KZ9\\KSK:T8;WWNSI`DW2Z/U +MOL5M#YV.M[#YT@P>(#'#T)0]C-GCHW]!BO75O%?#1K(0B(#$(!P*I5YR*^,N +M.WO7%)#PA!ENH9^1[03%($1\QRVL@34S"Z&11R,7?5>68!G/+JFJ8.U>>!8[=2P=;ZI\6>H.*-\/$W_?*"V2:IXSH +M@J()PUEG%:?4FG*K$MXYYK2X9*SSA22Y&I5RCNIS;<'2%FOGQ\RB:A!E&,/$ +M;W&>K!`@!"F@PNK=;=-"K[A[";H*P9>T,.9Y!9C#BZ0HJ0K7P?]HT)E,CBTT +M.8:2,Y_L*7%FF#/G=(++=O2CK +M1V1[:O2,PL3-7U2U"1)WS$<$FMRX<=L[+7-^T0[.Y[AG#QTVHZ9(>@,^)F!) +M)K38$K;9IQNV(U/MKVAR!'.'=0=&Y.7.8Q4$"%;'/C]RA/UT>&4GHBU6P\,/ +MVCN]M+7J[/E%^`1,J>^3SNE>YV\_UB((77++TJWG'H3%`.`6+;G&9%&71N*Q +MPFTR%90*@!F4NV@Y^*15)WWFXL6H_=9WYO*^>57GR-LPC$N[U_3CE;6%C^]B +MBI4UT/MD5FJ.V +M63-G@('XX&U/RDNN).=)O:,'CD@)]N(K7[)?U.G9O-A*LW*9F:"!V&53;V>* +MLEK^MKA037[XL>W'+B]M.?>@8M`;P*$NP&_!U^Z<+SM/34\M+VV&W^J^PBO= +M/,RDS%!BR\E+85UP]Q$V%7L>)E@IZMQ\_R;P(ONHI@5;ZDDK!"]IFS>H@@6+N&S!?L]JD;Q:V +MALF;WX)/8%K!=O.72F?,FV&/(/([.8R]M007>%SY;`\FR$$N[;C@;CBG' +MMBYI[6H5S$BS7.JELN4B2E*\_I>ZO>F\^E/IS0EI+">%[IC;575>O:H7?XI= +M$%`'J);`1CK].[53%&>N]"Z9']6[=+M2!+VK1J7LP6VYGY%WZ.P%-9'TV<]/ +M:^_`\_I2CPX*`<93J#QJKKBA4A:VKN:HR_75Q3Y3-:.9*I=]&KWVZ>L[I@0\:7$4VUJ#%:CZD8&Y +M^3D&G.1<."H3JW'#_=\@"K$Q)[UW^;9=GMH=AWNWTH9M[[Q=N@%-S1XG7';C +M"LQKW$C,`R)"4-P\8V*QC`,>TUR2--Y*@L6OQL#SH3A9EK:&XPZ:@M:\>6C< +MKZ^:"Q\$C*FGG$*PHC50V'J.87.B&2^F4'3U=X0E)HC5B&0MGV=BR`**&\#% +MUI3:I>L"7(.G?[;^&KSDGS)KC@<_UN^#A<%R\G@7^7T&-FN4\WKP==4[S-./P^KIJ[%M"059VMOY_:OGYZ>W,P;_%GCFM6=X'%1N59O-S"<;]\ +M0U9<<]`V8WW;K'#<`4\?TULN]B!X"BS3M%9U99VQPU%>NFSNBJ"]C2S8+SZG +M^GXE]#*9:=WUU<2?W\&N!]/U].[;C\4IC.L3K4EO>X); +MY'+%ZP\W;G0>??/\]?J-"ET6NW:V6S6#ECR<9][""RYNHM8\S!Y +MQG\OSLN^C)C&&15 +M8&PYC'=OELJPH(.7EZ*BOH&U"U2=36O,+H`S,/<-FH%#SLKFMFEMZ]NF36\. +M5H`SPH46KFE&;];O+9*IH*D7+"&OL(*G#C`74V`U1G.[:CNV+3ZI!HLRJ0ZZ +M8?NQLM>'B>^_56>[YQ;.KCIO]*C9%T$?J];(_(.)HSLY^*0RN^+CPE1*_&2_ +M8SW22J;A3RQ^HJM8L'L&@3MA\J`#P;@N)[`S0KN947!>UA=^/&7,*5:H%GBV +M#'YQF/C-@QB^AFT>22&R%A-#U^+N:N(WP\M+E(Y*O/@',JI5YYZYS.*D5XE2 +M[[+[;NX\TW6L%YAM69;!Y]TQ?FY?EAU<#*"!42FA\U0F-^.L.X[U\L1HI?)* +M<+UMY,+$\G?M@E;.`REN!A-F,?.8!>EW^0@^%07K74+V]2"!;PZ6ZG'.;(!;:@0J9N7:N:IY_64*L:2E`9Y +MZ4(/VKV$,"#538)'"AO^\M\,CVFM3KCX.M:>A2VMWA:P-NNJ)_B#6M`CE^VM +M)I<<-V$`[#D>>4+XA\Z7@V-VTY7'%71K6P,%9U)WBALCQNZ.FS5Q'A["RARI +M:8A6PAK5#H+:P;7M]OKA:(8[-_5:W3='C*5Z\^6T_[6@?WUBQ%!-&+(79X)O +M[9*O@>#,7CA*59V-S\-3>[!4ODB1ALL>6T%'?LMPH9A.P]?>[-QZ_R:#ZNR, +M_J_*K@4XBOJ,A]V]``*B4ZF/6E^HD'HY)>0Q%2G:JVO<63=LETYRV"IBE9!JYT1!JT5.W1:6AW?]87MU.H4&;5I%2UJ +MO^_[/_:_>Q>U[3B.F[W_[O_[?\_?]U@XW@)7TS5QJ%MV2=E01,X.7+9;NB_= +M2G./NGOY\"1]VNZG^1SP2C('#$)"9L48M=%M7L%B>Q"HAY_R*7E0[#4JC9K@ +M^;VN:F]+IFSMP9XFUFC-?+38`$0>PTK+')`PO:VKD%7$,T`&M)^_487E$I?7 +MDLY>GLYK[\P=+G`/Q+PMU(T.PWG&G.B$=#.:8S9XT])S6'S>>678>$Q'7:%N +M@^KAQ"8H=]7ZIJ>$CD^06(:)'3CWG;T(XTPX^&<99&#%@MS$$*$NHR2,"[JQ +MG1B5@3,1"564,^L6#SK,$\37CZAO@WUQXF6ZDFM`LE*8$SON5RVC#)@F'3R0 +MQ'-TWM7^4%[!G,:[^K""\.ES74A\$S +M/7/2"DO7S8QB#8LS3D/]Q,ISQQ%1 +MV?RDI[DQE2[V=4BN;?2+KB4VH_UE,!DGUEHZ2AL$ZL#S\WIZ$KT"BWP"[*R- +M92UE\\!9ZV_MA"@FS:(BEV;D&V!PPX(X.F_3./[/Y"E6UWD/?X4K3BS0LO7J +M@[R_@RQ2R%H1AU.@X&+-:)9_0-*X:JK;R&1L@;)?VWM02XF.$B2)M5"R4MI8AH<&_!P7H@+87#[X@R6B/ +M(0+&_*4WG^3#K$@OX;P%1WX33IAY]#*OVCHH7"]P?Y<]QC`3GKMG/9E\4"%P +ME/6Q-&J.=,PP3&\><+6[@#2-.QYBMAC3@F(X17L>MYGO>D;Y;G_>+VK\KS +M,L"K)48B@D$VNF>VUK4!XU82O-P$]Y(83&A%P<`Y-.:!0"+MS?\0&B:2O"+( +MSP>NWD08`J(&"D;38,[:_)NH&;AZSLK1>'J$*BS7)QW4.R#Z\;X!,LBX3'LF +MB[ZC7EG3%A]%]2]-*N8;;+UA^_)T7XC\?A-N@E-)9@1VTAA5K-+]K$R,H!T0 +M>\]&*P>8(H"-W']+S!/JL&#;!]TPATP@$BSWM'*Q&Q09^X[C!M;6;Z@5\:RU +M"J63XED+592IWU!665(-49#<1@^!RO!2,W`3CQ[APK-!"(]M'//]3B$_5F-7 +MX]EUM6=W5H)L=!WJ24MX2&5QX_K+Y)PUU)]P[UMOJJXDNT&&)WP)(31(!1'[ +M6F[@*S;M957CK1/$IF=?\04?IEK.OA?DF_@@D2RF-DJ//\G=^+P%3R['L&2# +M9/)N-K0NC5],+7UM?C+A(F&(RFEMS0<4\LE>D$S=FW+61,S7["X*BQUQ)T.IV +M\+]]M*]4::_7[A&T-WZX#F)YEMSA7P'>H*2*W18I_M2^!,V!(1%5H5=L6N&/ +MP&866]LTHRG$LSPH&5'0]!8?&`)&-;:7X*EY;+:H+(2`7[/&O6=GNG7@H@!' +M%E:R^0QJ[XW*(;;V[XTLTFXPC;E'11D@J4YF@N?_?8BDO2>]+IT9PP1131G/ +M&\(J;!0!S?OJ6$+1+P=IK4+'6WC1(AA@Q,@,$+:(BW6'[)E&+9*=@?/SG^]9 +M$1>F(H&#^OI1E!K,.9_5=',4A*)BL2=*J^WMD+NGS&*Q#[J"("V:#]MJ#97' +MY.A?.G)0V.GX:")H!^H,CDY;Q4'&MT_C?@S#XL4[@'AO`HFQM8_W`4\4N"Q. +MQEF;=1C#*G"*Z!8D:)\96-.X[V`QZP)NCG'@=N;F&+?]*%Q?,1FIJ`Q:'>`L +MLJA6"`XG$5@ZAU#\(X?()[$+.?2401^_=]E2#'NL"*Z!U]U<)A +M5S"IURZ16CL$,O3:!\O)26J+#R`O]:]*)N3I,:5SZ/3BJ8#@KZ=+K'BU#E]- +MA?UMXX6[BB/_(TD'J>H4.45$L(!EM6>/)5K;VA,WA:NK)L.UE44!>&;TM">N +MC-16B1,HBA=X=#U5^W"J8[+7-BKN)DT`=JI_+@.^J)'3U]&"9MN=M2C>NA]; +M3XPYE_NF(&+3N*Y`(RR3&7)$L.H4MW'$2WE][1S5K.FK'BV&D(!SDTT)6^O3 +M=U3ZSO?8&;*U15M8>3R$?;UGM5@MENLP9&W>W87]8`\.`,HPKYW*8T%/J/4P(DX!A*O +MG.]JBB8*V_I'\OH;^RC2\R$/;KCHR+"'+\:#'ULONUW)6WPMN".8C7$IL%AE +M)#)9604:H6O=!*J]H(QK*,AQ@V@ZG?94FJ(;XEQ^^18X@8U7#W,@ULF-K"T?BM.XO"3]N3V.[CX;;?0=F1W(&V_42/YA'T&_ +M=DE1#IK&T<)/6F(\DF:C=_$9$-*UP>Y(N!Q/&.'N"N=I\5U%(1C>-4L:U%)C +M2S?+/S'HGVI+6%E?,7NB-QR![5_E5'!=3K5HK"B=774FRF7%-JBW&ZO(6%:- +M#)AZYA!AX=*1YI\@L;4/#OOS!%Z[@%IGSS*FX;7M>R(U]7R)R4A=&+3_X"A3 +M##A&GN3.-A:]!(JE8GK%Q!>H4^6R(SDH$L!`CK5)6S^KN3%DP>5X&@S`I57- +M*:4R)(19LJ0)]XRB)X#.2%JP'K8<:ZMO('=(5F/AB6!!<1Q3+B'K`NI+A+W2 +M^HMR%LLDN:P2PJ..9E-7`9&L+OP:AE6(V!;)3UZ*G58B/&^&5?8=5#NR6D(@ +MLOP"'/Z2@\WXV>(D"3=^.T64[LIH&V2H^7/4KW,5:(S0)`5K-A[:QX,(IR#^ +M=G.$0SP7?-_[G,LM*0I8W@+V;Y\9C6X#%3%YU>*1A$&2*>`]0XMBKJ# +MH5`=5[Q.06=\&)5O.!QT6&E"I*IF,E+CIJF7#H*O@"AT"QLVQ*<*B3*;>SWL +MEIQ0#@,3M5JVB5V79P$FXJ@9!SJI`.#QI*BY&2E(//N`K[R6V.9G#DE,'C1AL<&A2QU)?%S7!&E;SDO +M?Q%K68M[VLJL%2.)H,7S'58!;6@<@)B*#*;BUBI3VW$6 +M/C+HM.%,->`DE\N`S1-!TWCL$X+GXR^C:%NJ7,\\M`/E>JV8;"32#!**Y;6L +M#:;^VJ:XK9GWC:@8(JMXHKIL4V\\BX.Y?E?-E/[HJ(5 +M^W^:$2!`9!>KG#-\0.=RI7P4HFXLM!C(N,!L!I-A$\#0'4O:X$&#R5V^R)D3 +MM%4!_(F<-][H$WIX\\C]@K_8^`V:8NM!A#@8+,(#O6\K#=.C5#'VIE@XX1GQ +M[20$QCOGL2\0@*.#'8S@8*YU`66X`/1H75;>+B=%Y[.0V7-Q)2#Z_Q +MZ#*6T;8$0N8?V8G#$1S6/\`RTC)KU6`&\@MCHR.L;>C%AWC)#G-]A-.$PX1* +M%;]/+0O)ZPOO\,'"^BD[N2NW4;IRCA)B9!^\Z>Y//".\7%25U8X@K*K]("4!/(;4J+,88-%3;E'"-CF;85JC2#,L +M?:^IOSA'>!IS.!31566^/E7U4(RNLG!JS++0^FQ%:&\GGB@U^()Z$!I0U[R5XA!5-J4M%PO@^RKZ[R)@J3`59;K.>2- +M+P^&0361\^!$:L!YJ*T..>0U."T9UX>EZ2?,=S"-W`M@+D-P9'_,-5(?!0_G +M>ODW%O&.+FS1'P]:2]-K*36G%!'4%CDS)3-')0.VT:>I50,S#Y>C1:2N,A;E +M>0.O%&?RGQSD3!ZNYR6I(HAG9DD)[6S]Y2LINO-7 +M@/DP0!^Q@PBF=H$TQ)G9@`B^(SEFM2?'4XA*9:1M]`@_CF[T\F]>/ZV,+8>.F5Z[BKD"Z;LFH^+E(]N=#%8<'.W71'%FI%T/(>%^S@3/"TS1'"8Z[DI +M1^X':R[[L6+MRRPJ=8<7P+:"CB7A6IE+J)8C,@C3($@3FT]%#B?4`L1Y,,ZO +MTTRW]&X>AQS584(P*&4$OD9[HDMVXM,F^?."9.U5.9?@=-P+X!9$6 +M5LYW(8[QRCIJ0.,BXWG]C'E?'<_HSSV%W1+:>V.B6T+[:()W%A+*1\[2)AJ" +MWWUG,23-U!-7R#HD](D<\H@<3W*@G3B'$[&^@)/#P,F'2O3ZT(SK[WCJQ'.( +M7=]#9IWQSJZ_E*:\?JI]OV_Z"CQK#E2/U6[_Y]+QDN.F*JDCW*7 +MXL5PQ=3W=D;CVTI*\0K\8_0-96NF%K=]M'I"W@D_S\*-1S_]6DB/[^TOF +MLI^O&0]'IHZZZ)KPBU87N[XI5>!/TRY1JZE9UN&;!6ZH,60K?O=56)J;1@ +MAMLR":K)YTDE0*\.``1`$""QGH`*"(N^C.#]!@VC7I&-,2#+KPCP^J.FQY.Z +MF8"5*83K]+=A;.A$:#-(KY':7&T/24RT:&EIR)5"L%+S'``4$1985NZ$GE_% +*W)%.%"0NLTSR0``` +` +end Index: vendor/bzip2/1.0.7/sample3.ref.gz.uu =================================================================== --- vendor/bzip2/1.0.7/sample3.ref.gz.uu (nonexistent) +++ vendor/bzip2/1.0.7/sample3.ref.gz.uu (revision 349497) @@ -0,0 +1,11 @@ +begin 644 sample3.ref.gz +M'XL("%<.FT4"`W-A;7!L93,N4$"`)T;M%]+Z!F +MZ-B(8P>2@S:W'R7HNB=XBP=1$#\E_9KF%N.\9/0U_YXSO^;ULCSC]U9[<8KX +M.<9S>_2>]>M5U);+.-0LK[Z8]V/V%G]>)_N44;/ML8WO^OV.5I[M&*7?]O%YB)9YC7O=QAZ:M[4L +MPY3+_30,]];?UD,UHW3K%N.COO9]0#V7ML_G/OM6ZK7%O/;.?__LT<=E`@`` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +C``````````````````````````````#@/[X!M4V7,;35`0`` +` +end Index: vendor/bzip2/1.0.7/dlltest.c =================================================================== --- vendor/bzip2/1.0.7/dlltest.c (nonexistent) +++ vendor/bzip2/1.0.7/dlltest.c (revision 349497) @@ -0,0 +1,175 @@ +/* + minibz2 + libbz2.dll test program. + by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) + This file is Public Domain. Welcome any email to me. + + usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename] +*/ + +#define BZ_IMPORT +#include +#include +#include "bzlib.h" +#ifdef _WIN32 +#include +#endif + + +#ifdef _WIN32 + +#define BZ2_LIBNAME "libbz2-1.0.2.DLL" + +#include +static int BZ2DLLLoaded = 0; +static HINSTANCE BZ2DLLhLib; +int BZ2DLLLoadLibrary(void) +{ + HINSTANCE hLib; + + if(BZ2DLLLoaded==1){return 0;} + hLib=LoadLibrary(BZ2_LIBNAME); + if(hLib == NULL){ + fprintf(stderr,"Can't load %s\n",BZ2_LIBNAME); + return -1; + } + BZ2_bzlibVersion=GetProcAddress(hLib,"BZ2_bzlibVersion"); + BZ2_bzopen=GetProcAddress(hLib,"BZ2_bzopen"); + BZ2_bzdopen=GetProcAddress(hLib,"BZ2_bzdopen"); + BZ2_bzread=GetProcAddress(hLib,"BZ2_bzread"); + BZ2_bzwrite=GetProcAddress(hLib,"BZ2_bzwrite"); + BZ2_bzflush=GetProcAddress(hLib,"BZ2_bzflush"); + BZ2_bzclose=GetProcAddress(hLib,"BZ2_bzclose"); + BZ2_bzerror=GetProcAddress(hLib,"BZ2_bzerror"); + + if (!BZ2_bzlibVersion || !BZ2_bzopen || !BZ2_bzdopen + || !BZ2_bzread || !BZ2_bzwrite || !BZ2_bzflush + || !BZ2_bzclose || !BZ2_bzerror) { + fprintf(stderr,"GetProcAddress failed.\n"); + return -1; + } + BZ2DLLLoaded=1; + BZ2DLLhLib=hLib; + return 0; + +} +int BZ2DLLFreeLibrary(void) +{ + if(BZ2DLLLoaded==0){return 0;} + FreeLibrary(BZ2DLLhLib); + BZ2DLLLoaded=0; +} +#endif /* WIN32 */ + +void usage(void) +{ + puts("usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]"); +} + +int main(int argc,char *argv[]) +{ + int decompress = 0; + int level = 9; + char *fn_r = NULL; + char *fn_w = NULL; + +#ifdef _WIN32 + if(BZ2DLLLoadLibrary()<0){ + fprintf(stderr,"Loading of %s failed. Giving up.\n", BZ2_LIBNAME); + exit(1); + } + printf("Loading of %s succeeded. Library version is %s.\n", + BZ2_LIBNAME, BZ2_bzlibVersion() ); +#endif + while(++argv,--argc){ + if(**argv =='-' || **argv=='/'){ + char *p; + + for(p=*argv+1;*p;p++){ + if(*p=='d'){ + decompress = 1; + }else if('1'<=*p && *p<='9'){ + level = *p - '0'; + }else{ + usage(); + exit(1); + } + } + }else{ + break; + } + } + if(argc>=1){ + fn_r = *argv; + argc--;argv++; + }else{ + fn_r = NULL; + } + if(argc>=1){ + fn_w = *argv; + argc--;argv++; + }else{ + fn_w = NULL; + } + { + int len; + char buff[0x1000]; + char mode[10]; + + if(decompress){ + BZFILE *BZ2fp_r = NULL; + FILE *fp_w = NULL; + + if(fn_w){ + if((fp_w = fopen(fn_w,"wb"))==NULL){ + printf("can't open [%s]\n",fn_w); + perror("reason:"); + exit(1); + } + }else{ + fp_w = stdout; + } + if((fn_r == NULL && (BZ2fp_r = BZ2_bzdopen(fileno(stdin),"rb"))==NULL) + || (fn_r != NULL && (BZ2fp_r = BZ2_bzopen(fn_r,"rb"))==NULL)){ + printf("can't bz2openstream\n"); + exit(1); + } + while((len=BZ2_bzread(BZ2fp_r,buff,0x1000))>0){ + fwrite(buff,1,len,fp_w); + } + BZ2_bzclose(BZ2fp_r); + if(fp_w != stdout) fclose(fp_w); + }else{ + BZFILE *BZ2fp_w = NULL; + FILE *fp_r = NULL; + + if(fn_r){ + if((fp_r = fopen(fn_r,"rb"))==NULL){ + printf("can't open [%s]\n",fn_r); + perror("reason:"); + exit(1); + } + }else{ + fp_r = stdin; + } + mode[0]='w'; + mode[1] = '0' + level; + mode[2] = '\0'; + + if((fn_w == NULL && (BZ2fp_w = BZ2_bzdopen(fileno(stdout),mode))==NULL) + || (fn_w !=NULL && (BZ2fp_w = BZ2_bzopen(fn_w,mode))==NULL)){ + printf("can't bz2openstream\n"); + exit(1); + } + while((len=fread(buff,1,0x1000,fp_r))>0){ + BZ2_bzwrite(BZ2fp_w,buff,len); + } + BZ2_bzclose(BZ2fp_w); + if(fp_r!=stdin)fclose(fp_r); + } + } +#ifdef _WIN32 + BZ2DLLFreeLibrary(); +#endif + return 0; +} Index: vendor/bzip2/1.0.7/libbz2.def =================================================================== --- vendor/bzip2/1.0.7/libbz2.def (nonexistent) +++ vendor/bzip2/1.0.7/libbz2.def (revision 349497) @@ -0,0 +1,27 @@ +LIBRARY LIBBZ2 +DESCRIPTION "libbzip2: library for data compression" +EXPORTS + BZ2_bzCompressInit + BZ2_bzCompress + BZ2_bzCompressEnd + BZ2_bzDecompressInit + BZ2_bzDecompress + BZ2_bzDecompressEnd + BZ2_bzReadOpen + BZ2_bzReadClose + BZ2_bzReadGetUnused + BZ2_bzRead + BZ2_bzWriteOpen + BZ2_bzWrite + BZ2_bzWriteClose + BZ2_bzWriteClose64 + BZ2_bzBuffToBuffCompress + BZ2_bzBuffToBuffDecompress + BZ2_bzlibVersion + BZ2_bzopen + BZ2_bzdopen + BZ2_bzread + BZ2_bzwrite + BZ2_bzflush + BZ2_bzclose + BZ2_bzerror Index: vendor/bzip2/1.0.7/makefile.msc =================================================================== --- vendor/bzip2/1.0.7/makefile.msc (nonexistent) +++ vendor/bzip2/1.0.7/makefile.msc (revision 349497) @@ -0,0 +1,63 @@ +# Makefile for Microsoft Visual C++ 6.0 +# usage: nmake -f makefile.msc +# K.M. Syring (syring@gsf.de) +# Fixed up by JRS for bzip2-0.9.5d release. + +CC=cl +CFLAGS= -DWIN32 -MD -Ox -D_FILE_OFFSET_BITS=64 -nologo + +OBJS= blocksort.obj \ + huffman.obj \ + crctable.obj \ + randtable.obj \ + compress.obj \ + decompress.obj \ + bzlib.obj + +all: lib bzip2 test + +bzip2: lib + $(CC) $(CFLAGS) -o bzip2 bzip2.c libbz2.lib setargv.obj + $(CC) $(CFLAGS) -o bzip2recover bzip2recover.c + +lib: $(OBJS) + lib /out:libbz2.lib $(OBJS) + +test: bzip2 + type words1 + .\\bzip2 -1 < sample1.ref > sample1.rb2 + .\\bzip2 -2 < sample2.ref > sample2.rb2 + .\\bzip2 -3 < sample3.ref > sample3.rb2 + .\\bzip2 -d < sample1.bz2 > sample1.tst + .\\bzip2 -d < sample2.bz2 > sample2.tst + .\\bzip2 -ds < sample3.bz2 > sample3.tst + @echo All six of the fc's should find no differences. + @echo If fc finds an error on sample3.bz2, this could be + @echo because WinZip's 'TAR file smart CR/LF conversion' + @echo is too clever for its own good. Disable this option. + @echo The correct size for sample3.ref is 120,244. If it + @echo is 150,251, WinZip has messed it up. + fc sample1.bz2 sample1.rb2 + fc sample2.bz2 sample2.rb2 + fc sample3.bz2 sample3.rb2 + fc sample1.tst sample1.ref + fc sample2.tst sample2.ref + fc sample3.tst sample3.ref + + + +clean: + del *.obj + del libbz2.lib + del bzip2.exe + del bzip2recover.exe + del sample1.rb2 + del sample2.rb2 + del sample3.rb2 + del sample1.tst + del sample2.tst + del sample3.tst + +.c.obj: + $(CC) $(CFLAGS) -c $*.c -o $*.obj + Index: vendor/bzip2/1.0.7/words0 =================================================================== --- vendor/bzip2/1.0.7/words0 (nonexistent) +++ vendor/bzip2/1.0.7/words0 (revision 349497) @@ -0,0 +1,9 @@ + +If compilation produces errors, or a large number of warnings, +please read README.COMPILATION.PROBLEMS -- you might be able to +adjust the flags in this Makefile to improve matters. + +Also in README.COMPILATION.PROBLEMS are some hints that may help +if your build produces an executable which is unable to correctly +handle so-called 'large files' -- files of size 2GB or more. + Index: vendor/bzip2/1.0.7/words1 =================================================================== --- vendor/bzip2/1.0.7/words1 (nonexistent) +++ vendor/bzip2/1.0.7/words1 (revision 349497) @@ -0,0 +1,4 @@ + +Doing 6 tests (3 compress, 3 uncompress) ... +If there's a problem, things might stop at this point. + Index: vendor/bzip2/1.0.7/words3 =================================================================== --- vendor/bzip2/1.0.7/words3 (nonexistent) +++ vendor/bzip2/1.0.7/words3 (revision 349497) @@ -0,0 +1,30 @@ + +If you got this far and the 'cmp's didn't complain, it looks +like you're in business. + +To install in /usr/local/bin, /usr/local/lib, /usr/local/man and +/usr/local/include, type + + make install + +To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type + + make install PREFIX=/xxx/yyy + +If you are (justifiably) paranoid and want to see what 'make install' +is going to do, you can first do + + make -n install or + make -n install PREFIX=/xxx/yyy respectively. + +The -n instructs make to show the commands it would execute, but +not actually execute them. + +Instructions for use are in the preformatted manual page, in the file +bzip2.txt. For more detailed documentation, read the full manual. +It is available in Postscript form (manual.ps), PDF form (manual.pdf), +and HTML form (manual.html). + +You can also do "bzip2 --help" to see some helpful information. +"bzip2 -L" displays the software license. +